glibc 安装升级


1.检查系统是否支持glibc_2.14

centos7.3之前的版本,最高版本是glibc-2.12,centos7.3之后yum 默认安装的是glibc-2.17,是支持gGLIBC_2.14的

执行如下命令检查系统是否支持GLIBC_2.14

strings /lib64/libc.so.6 |grep GLIBC_2.14

2.编译安装glibc

wget http://mirrors.ustc.edu.cn/gnu/libc/glibc-2.14.1.tar.gz 
tar xf glibc-2.14.tar.gz 
cd glibc-2.14 
mkdir build 
cd build 
../configure –-prefix=/opt/glibc-2.14    (configure –prefix=/usr/local/glibc-2.14 –disable-profile –enable-add-ons –with-headers=/usr/include –with-binutils=/usr/bin)

make -j4

make install #编译时间不短,最后会报一个文件没找到的错误,不要担心

 (这里路径安装2.17 的时候设置的 –-prefix=/usr ,结果挂掉了,导致所有命令都无法执行,比如不小心把软连接libc.so.6删除了,只要执行ldconfig -l -v /lib64/libc-2.17.so即可恢复libc.so.6。(假设usr/lib64/libc.so.6 -> libc-2.17.so)

  LD_PRELOAD=/usr/local/glibc-2.17/build/libc.so  ln -sf /usr/local/glibc-2.17/lib/libc-2.17.so /lib64/libc.so.6

在make install过程中出现如下错误:

Can’t open configuration file /opt/glibc-2.14/etc/ld.so.conf: No such file or directory

就是缺少了必要的编译文件 ld.so.conf。通过 find 命令找到对应的文件位置。

[root@localhost build]# find / -name "ld.so.conf" /etc/ld.so.conf 

然后我们执行命令把此文件拷贝到对应的文件目录下去,然后继续编译。

[root@localhost build]# cp /etc/ld.so.conf /opt/glibc-2.14/etc/ [root@localhost build]# make install Congratulations! 编译成功!

3.检查是否编译成功

ls /opt/glibc-2.14/lib/libc-2.14.so

4.替换旧的glibc-2.12.so

rm -rf /lib64/libc.so.6

LD_PRELOAD=/opt/glibc-2.14/lib/libc-2.14.so ln -s /opt/glibc-2.14/lib/libc-2.14.so /lib64/libc.so.6

 

这一步可以这样解决:export LD_LIBRARY_PATH=/opt/glibc-2.14/lib:$LD_LIBRARY_PATH

 

如不小心把软连接libc.so.6删除了,只要执行ldconfig -l -v /lib64/libc-2.17.so即可恢复libc.so.6。(假设usr/lib64/libc.so.6 -> libc-2.17.so)

5.检查是否替换成功

strings /lib64/libc.so.6 |grep GLIBC_2.14

6.替换glibc之后衍生的其他问题 
(1)系统时间被改变

系统时间的具体地址由libc.so.6这个库决定,升级前,centos的默认时区文件为/etc/localtime。而我新编译的库时,设置了–prefix=/usr/local/glibc-2.14,导致默认路径为变成了/usr/local/glibc-2.14/etc/localtime,执行如下命令修改默认时区的路径

ln -sf /etc/localtime /usr/local/glibc-2.14/etc/localtime

(2)登录报如下警告

-bash: warning: setlocale: LC_CTYPE: cannot change locale (EN_US.UTF-8): No such file or directory 
-bash: warning: setlocale: LC_COLLATE: cannot change locale (EN_US.UTF-8): No such file or directory 
-bash: warning: setlocale: LC_MESSAGES: cannot change locale (EN_US.UTF-8): No such file or directory 
-bash: warning: setlocale: LC_NUMERIC: cannot change locale (EN_US.UTF-8): No such file or directory 
-bash: warning: setlocale: LC_TIME: cannot change locale (EN_US.UTF-8): No such file or directory

解决办法

1.cat > /etc/environment << EOF 
LANG=en_US.utf-8 
LC_ALL= 
EOF 
2. source /etc/environment 
3. localedef -v -c -i en_US -f UTF-8 en_US.UTF-8

问题一:比如不小心把软连接libc.so.6删除了,只要执行ldconfig -l -v /lib64/libc-2.17.so即可恢复libc.so.6。(假设usr/lib64/libc.so.6 -> libc-2.17.so)


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM