现状
默认情况下centos6.5自带的glibc版本为glibc-2.12,很多运行在centos上的应用需要高版本glic才能成功编译和安装,下面一起来升级至glibc-2.18版本吧。
必读
glibc是centos非常底层的基础程序,如果升级失败可能会导致基础命令不好用的情况,千万不要直接退出窗口,这样你就连不进来了。按照解决问题的思路进行处理即可。如果升级失败,先尝试还原glibc,实在不行在重新安装操作系统。如果有快照,建议使用快照进行恢复。
准备
查询当前版本
> strings /lib64/libc.so.6 |grep GLIBC_
点击如下连接下载glibc-2.18.tar.gz源码包http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gzhttp://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
安装
将 glibc-2.18.tar.gz上传到centos系统中,运行如下命令,安装过程比较长,预计十分钟。安装之后也可能会遇到其他问题,可以先看看后面的问题解决方法。防止措手不及。
> tar -zxvf glibc-2.18.tar.gz
> cd glibc-2.18
> mkdir build
> cd build
> ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
> make -j4
> make install
验证
> ldd --version
> strings /lib64/libc.so.6 |grep GLIBC_
正确如下
解决问题
export LD_LIBRARY_PATH=/usr/lib:$LD_LIBRARY_PATH
LD_PRELOAD=/lib64/libc-2.18.so rm -fr /lib64/libc.so.6
LD_PRELOAD=/lib64/libc-2.18.so ln -s /lib64/libc-2.18.so /lib64/libc.so.6
make install 之后可能会遇到以下问题:
make[1]: *** [install] Segmentation fault
error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument
一但上面两个问题出现,你会发现基本命令也失效了。这是因为/lib64/libc.so.6 这个文件已经在安装过程中被改变了。因此,你先尝试运行如下,让你的环境变量和你现在的glibc保持一致:
> export LD_LIBRARY_PATH=/usr/lib:$LD_LIBRARY_PATH
> LD_PRELOAD=/lib64/libc-2.18.so rm -fr /lib64/libc.so.6
> LD_PRELOAD=/lib64/libc-2.18.so ln -s /lib64/libc-2.18.so /lib64/libc.so.6
然后在尝试基本命令是否正常,如果基本命令正常,验证下glibc是否升级成功。如果很不幸你的glibc升级失败了,继续尝试以下命令,将glibc还原到之前的版本:
> LD_PRELOAD=/lib64/libc-2.12.so rm -fr /lib64/libc.so.6
> LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6
然后在继续尝试基础命令是否好用。基础命令好用之后,继续排查你在升级过程中遇到的问题即可。思路是临时加载之前好用的库文件,然后使用库文件即可恢复系统。