CentOS 6.4更新glibc和libstdc文件
最近忽然开始对CentOS这种Linux系统感兴趣。
很久之前使用过Solaris和OpenSolaris,普遍感觉很好用,但是最近发现Solaris的兼容性是有问题的,毕竟Sun有自己的处理器和服务器,没必要过分迎合大众消费。纵观Linux系统,做的较为优秀的就剩下Redhat和Fedora(因为Ubuntu逐渐倾向于移动平台的开发,PC或者Server的适用性不足)。百般权衡之下,终于选择了Redhat的近亲,CentOS。
CentOS系统更新速度很慢,现在各种Source里的软件还是13年3月的版本,后面大量的版本更新都没有纳进来。
举个简单的例子,CentOS里面的 Glibc,Repo端最新的版本为 2.12,而现在很多最新的软件都要求更高的版本,比如Chrome等等。Chrome用了更新的编译器,所以需要最新的动态链接库,否则就会dependents error.
为了解决这一问题,我参照网上大多数的做法直接去下载了glibc最新的2.17版本(注意适用机型,X86_64是AMD,i686是intel;这个就是linux和unix普遍的分类方法)。然后直接安装,会提示libstdc++版本号有问题,不匹配。好吧,我先搞定这个,于是也发现libstdc++在Repo端也没有最新的版本。我的6.0.12已经是最新版了?不可思议。不死心的我跑去各大package网站找,终于发现Fedora更新到了6.0.19版,而CentOS真的是停留在了6.0.12版本。难道开源的就没有人支持吗?
由于怕系统间的兼容性问题,我直接下载了Fedora的6.0.19 source文件,准备编译一个新版本出来。编译完成之后更新到 lib64文件夹下的libstdc++.so.6,删除原来的文件链接,然后用ln命令重做链接。做完之后就开始出错,各种诡异的错误。man 命令用不了,ls命令用不了,输入法打不开,Firefox打不开,本地用户无法登录GNOME,各种复杂的命令都用不了, Root用户倒还一切正常(这里不得不佩服,CentOS稳定性不错,这么折腾都没Crash)。想了半天,就是这里的错,替换回来,一切正常了。
好吧,看来还是动态链接库的问题,这两个问题成了环环相扣的问题了。glibc依赖libstdc++,libstdc++也依赖glibc。好吧,回归所有问题的本质,归结到底,就是linux的系统在安装是要进行大量dependents的检查,而且总是给我一种linux是一种容易产生碎片的系统,大家所使用的库可以来自环境变量中定义的,也可以用系统默认的,同样funcation的库在环境中只能存在一个,所以呢,大家在打包linux程序时,大多喜欢把依赖的运行环境一起打包,由于大家的水平参差不齐,有人喜欢整个程序一起放进去,有人喜欢自己精炼一下再放进去等等等等。这可能就是android下很多程序相邻版本间的体积会缩小或增加50%左右的原因。扯远了……
回到libstdc++和glibc的问题上,前面造成的错误,总要有人修正吧,也很庆幸,yum命令还能用,赶紧用yum 卸载了最新的libstdc++,重新安装了2.12的老版本,重启电脑,Root和本地用户都好了。
现在好了,可以从头开始了,rm掉之前产生的垃圾文件。不知不觉本地硬盘已经占了14G了,大量的碎片……
编译glibc 2.17版本,提取libc.so.6.17文件,放在/lib目录下,重做链接,删除原来的libc.so.6.12。不重启电脑,直接下载glibc、libstdc++相关的所有文件。
glibc-2.17.90-4.fc20.x86_64.rpm glibc-common-2.17.90-4.fc20.x86_64.rpm glibc-devel-2.17.90-5.fc20.x86_64.rpm glibc-headers-2.17.90-5.fc20.x86_64.rpm glibc-static-2.17.90-5.fc20.x86_64.rpm glibc-utils-2.17.90-5.fc20.x86_64.rpm
libstdc++-devel-4.8.1-1.fc19.x86_64.rpm libstdc++-4.8.1-1.fc19.x86_64.rpm libstdc++-static-4.8.1-1.fc19.x86_64.rpm
rpm -Uvh –aid –nodeps –force xxxx.rpm
关于顺序,大家可以反复尝试,force命令可以保证你随便安装几次都行……
就是这么个笨方法,结果在尝试了几次之后,问题解决。重启电脑后一切正常,查看libc和libstdc版本号,万事OK啦。
后面还有一大堆的扫尾工作,比如之前卸载版本时会关联很多系统管理相关的程序,都会被卸载掉。比如system-config-service等等。这时都可以重新安装起来。
至此最纠结的一次系统升级完毕了。求技术大神指导,我的思路有错吗?
P.S. CentOS的软件大多可以和Fedora串用,所以如果需要什么软件,去这里下载吧。
https://dl.fedoraproject.org/pub/fedora/linux/
i386是intel CPU,X86_64是AMD CPU
再后面选os/Packages;然后就是文件名索引了。
这个文件管理的目录结构非常值得我们学习,Mark一下,事后学习。