最近开发提交的项目需要用到glibc库,检查操作系统看到默认安装的glibc-2.12版本。项目要求最低版本为gblic-2.14,先准备下载glibc-2.14。
下载地址:http://ftp.gnu.org/gnu/glibc/。
1、查看Linux上GLIBC版本。
localhost ~]# strings /lib64/libc.so.6 |grep GLIBC
2、下载并解压glibc-2.14.tar.gz
下载:wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz
解压:tar -zxvf glibc-2.14.tar.gz -C ./glibc
3、编译并安装glibc-2.14
先进入glibc-2.14目录,创建build文件夹,
cd glibc-2.14/
cd build/
../configure --prefix=/usr/local/glibc-2.14
编译并安装
make
make install
安装完成后,查看build目录下编译出新的libc.so版本
localhost ~]# strings /glibc/glibc-2.14/build/libc.so|grep GLIBC
已经安装成功,以下步骤尤为关键。我在这一步直接删除/lib64/libc.so.6后,操作系统无法正常操作,重启无法进入系统。通过挂载系统盘,进入排错模式,将libc.so.6复制到挂载点恢复操作系统启动。
4、建立软连接,完成GLIBC升级。
localhost ~]# cp /glibc/glibc-2.14/build/libc.so /lib64/libc-2.14.so
删除系统旧链接
localhost ~]# rm -rf /lib64/libc.so.6
建立新的软链接
localhost ~]# LD_PRELOAD=/lib64/libc-2.14.so ln -s /lib64/libc-2.14.so /lib64/libc.so.6
localhost ~]# strings /lib64/libc.so.6 |grep GLIBC
至此,glibc-2.14完成升级。但是操作系统中中文全部显示为问号,下来我们恢复中文显示。
查看系统字符集,输入echo $LANG,系统字符集正确。
问题排查
localhost ~]# strace localedef
在Shell中运行locale,出现如下错误:
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
5、恢复升级glibc-2.14带来的中文显示乱码问题。
查看glibc-2.14的字符集
localhost ~]# strings /usr/local/glibc-2.14/bin/locale -a|grep locale
由于glibc-2.14的/usr/local/glibc-2.14/lib/目录下没有locale文件夹,我自己创建在拷贝文件。
localhost ~]# mkdir /usr/local/glibc-2.14/lib/locale/
localhost ~]# cp /usr/lib/locale/locale-archive /usr/local/glibc-2.14/lib/locale/locale-archive
重启,查看中文是否已经能够显示了。这是我的操作系统修改方式,仅做参考。
6、时间调整
升级glibc-2.14不仅中文显示乱码,系统时间也被初始化,需要将系统时区修改为所在地时区。
查看localtime是否存在。
localhost ~]# ll /usr/local/glibc-2.14/etc/
删除localtime
localhost ~]# rm -rf /usr/local/glibc-2.14/etc/localtime
将时区进行软连接
localhost ~]# ln -s /usr/local/glibc-2.14/share/zoneinfo/Asia/Shanghai /usr/local/glibc-2.14/etc/localtime
在Shell中输入date,查看系统时间是否已经修改正确。