一.故障现象

在源码安装NGINX的过程中,提示sbin/nginx: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by sbin/nginx),考虑升级glibc,升级后提示error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument。截图如下

 升级glibc步骤命令,执行如下操作后出现故障。

1.# 查看版本,发现仅支持到2.12

strings /lib64/libc.so.6 |grep GLIBC

cd /opt

wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz

tar zxvf glibc-2.14.tar.gz

cd glibc-2.14

mkdir build && cd build

../configure --prefix=/opt/glibc-2.14

make -j4

make install

# 编译完成后,将libc-2.14.so拷贝到/lib64目录下(本机环境为CentOS-6 64位系统)

cp /opt/glibc-2.14/lib/libc-2.14.so /lib64/

# 软链到

ln -sf /lib64/libc-2.14.so /lib64/libc.so.6
-----------------------------------

二.处理思路

glibc

glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc;它本身也提供了许多其它一些必要功能服务的实现;

libc.so.6

libc.so.6是一个链接到glibc的软链接;
对glibc的升级其实是对libc.so.6这个库的更改;
libc.so.6删除之后会导致系统很多命令的失效,所以对libc.so.6的更改要小心小心再小心,很容易将系统搞崩溃;

查看libc.so.6的版本

需要知道libc.so.6这个库在哪个位置,一般是/lib、/lib64、/usr/lib、/usr/lib64这四个文件夹下
用strings命令查看版本号;

find / -iname libc.so.6

strings /lib/libc.so.6 | grep GLIBC_

三.处理思路

升级libc.so.6

两种方法升级,一种是通过rpm包升级,另外一种是通过编译glibc,然后将生成的库链接到libc.so.6上,通过rpm包对centos6.x的32位系统的升级;下载地址:Index of /results/mosquito/myrepo-el6/epel-6-i386/glibc-2.17-55.fc20/
首先需要有这四个rpm包:glibc-2.17-55.el6.i686.rpm、glibc-common-2.17-55.el6.i686.rpm、glibc-devel-2.17-55.el6.i686.rpm、glibc-headers-2.17-55.el6.i686.rpm
然后依次安装这四个包:

rpm -Uvh glibc-2.17-55.el6.i686.rpm 
rpm -Uvh glibc-common-2.17-55.el6.i686.rpm 
rpm -Uvh glibc-devel-2.17-55.el6.i686.rpm
rpm -Uvh glibc-headers-2.17-55.el6.i686.rpm

 通过rpm包对centos6.x的64位系统的升级包下载地址

Index of /results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/

四.rpm等命令执行不了的处理

如果没有预先的升级好gcc,都会出现升级失败的问题。当然,一旦升级失败,系统都会出现如下状态:

许多简单的命令都无法使用,此时必须谨记:不能断开当前shell连接,以centos6.7系统为例,执行以下命令:

         

LD_PRELOAD=/lib64/libc-2.12.so  
ln -sf /lib64/libc-2.12.so /lib64/libc.so.6

        即可恢复。其他的系统或者系统已经进行过libc升级的,请使用另外一台类似的机器进行类比,找到/lib64/libc.so.6软链接的对象,进行修改即可。

Logo

鸿蒙生态一站式服务平台。

更多推荐