【原创】大叔经验分享(27)linux服务器升级glibc故障恢复

时间:2023-10-17 17:24:10

redhat6系统默认安装的glibc-2.12,有的软件依赖的是glibc-2.14,这时需要升级glibc,下载安装 http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz

# ./configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
# make
# make install

结果make install报错,同时除了cd外各种命令都用不了,会报各种shared libraries: *: cannot open shared object file: No such file or directory

ls: error while loading shared libraries: libselinux.so.1: cannot open shared object file: No such file or directory

这些shared libraries都位于/lib64/下,而且此时机器无法远程登录,
现在只有一个终端root账号登录在服务器上,除了能执行cd之外什么都做不了,omg
各种google都无法解决,自己努力

1 首先尝试从其他服务器远程传输/lib64/下的所有文件和link到本机,但是各种传输命令都不能用,比如nc、scp等

2 其次怀疑有可能是link损坏,尝试手工重建报错的link

# ln -s libtinfo.so.5.7 libtinfo.so.5
ln: creating symbolic link `libtinfo.so.5': File exists

虽然ls不能用,但是看起来/lib64/下各种文件和link都还在,那为什么会报No such file or directory?

3 再次通过export查看一下当前的环境变量(export还能用):

# export
declare -x LD_LIBRARY_PATH="/usr/local/lib"

尝试修改LD_LIBRARY_PATH,增加/lib64:

export LD_LIBRARY_PATH=/lib64:$LD_LIBRARY_PATH

很多命令居然可以用了,这次glibc升级的过程是这样的,以其中一个library为例:

安装之前:

-rwxr-xr-x 1 root root 161776 Jun 19 2018 ld-2.12.so
lrwxrwxrwx 1 root root 10 Jun 19 2018 ld-linux-x86-64.so.2 -> ld-2.12.so

安装之后:

-rwxr-xr-x 1 root root 161776 Jun 19 2018 ld-2.12.so
-rwxr-xr-x 1 root root 838308 Jan 24 15:41 ld-2.14.so
lrwxrwxrwx 1 root root 10 Jan 24 16:28 ld-linux-x86-64.so.2 -> ld-2.14.so

将这次安装的改动回滚,即将所有的link都改为指回2.12版本

# ls -l /lib64|grep 2.14|grep lrw|awk '{print "ln -snf "$11" "$9}'|sed 's/2.14/2.12/g'
ln -snf ld-2.12.so ld-linux-x86-64.so.2
ln -snf libBrokenLocale-2.12.so libBrokenLocale.so.1
ln -snf libanl-2.12.so libanl.so.1
ln -snf libc-2.12.so libc.so.6
ln -snf libcidn-2.12.so libcidn.so.1
ln -snf libcrypt-2.12.so libcrypt.so.1
ln -snf libdl-2.12.so libdl.so.2
ln -snf libm-2.12.so libm.so.6
ln -snf libnsl-2.12.so libnsl.so.1
ln -snf libnss_compat-2.12.so libnss_compat.so.2
ln -snf libnss_dns-2.12.so libnss_dns.so.2
ln -snf libnss_files-2.12.so libnss_files.so.2
ln -snf libnss_hesiod-2.12.so libnss_hesiod.so.2
ln -snf libnss_nis-2.12.so libnss_nis.so.2
ln -snf libnss_nisplus-2.12.so libnss_nisplus.so.2
ln -snf libpthread-2.12.so libpthread.so.0
ln -snf libresolv-2.12.so libresolv.so.2
ln -snf librt-2.12.so librt.so.1
ln -snf libutil-2.12.so libutil.so.1

全部执行一遍,故障恢复,各种命令都可以使用,机器也恢复远程登录。