glibc升级失败如何救回
😂

glibc升级失败如何救回

Tags
CentOS
glibc
Published
February 15, 2025
Author
Simon Wong
昨天给内部一台服务器升级一个模块,但是新模块依赖的glibc版本比当前服务器的版本高,而服务器又无法通过yum去升级gblic,就想着手动升级服务。这一升级,就出了大问题,整个系统的基础命令全部无法运行,如ls、grep、find等,全部都会报/lib64/libpthread.so.0: symbol __libc_dl_error_tsd, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference
瞬间惊出了一身冷汗,重新使用ssh连接服务,发现也连接不上,索性经过一番搜索,还是找到了正确的解决办法,记录一下,以防忘记

服务器信息

操作系统:CentOS7.6
升级失败的glibc版本:glibc2.25

处理过程

切记,切记,在升级失败后,一定不要断开SSH连接,否则,你就无法通过ssh连接服务器了,除非你能接触到物理机,要不然就无法回救了

故障原因

在升级gblic2.25失败后,删除了glibc2.25, 而linux中glibc还是默认软链接到glibc2.25,而非正确的glibc版本

解决办法

  • 重建libc.so.6的软链接
记住这里不能使用命令ln,执行也会报错,庆幸还有sln
# sln /usr/lib64/libc-2.17.so /lib64/libc.so.6 # sln /usr/lib64/ld-2.17.so /usr/lib64/ld-linux-x86-64.so.2 # sln /usr/lib64/libm-2.17.so /usr/lib64/libm.so.6
这三个软链接更新后,ls等基础命令不再报错。总算是松了一口气。
  • 修复/lib64下的错误软链接
基础命令修复后,后面的操作就没有啥大问题了,只要找到对应的错误的软链接,并更新到正确的版本后,系统就恢复正常了,下面直接给出我的操作
# cd /usr/lib64 # rm -f libanl.so.1 && ln -s /usr/lib64/libanl-2.17.so libanl.so.1 # rm -f libBrokenLocale.so.1 && ln -s /usr/lib64/libBrokenLocale-2.17.so libBrokenLocale.so.1 # rm -f libcidn.so.1 && ln -s /usr/lib64/libcidn-2.17.so libcidn.so.1 # rm -f libcrypt.so.1 && ln -s /usr/lib64/libcrypt-2.17.so libcrypt.so.1 # rm -f libdl.so.2 && ln -s /usr/lib64/libdl-2.17.so libdl.so.2 # rm -f libnsl.so.1 && ln -s /usr/lib64/libnsl-2.17.so libnsl.so.1 # rm -f libnss_compat.so.2 && ln -s /usr/lib64/libnss_compat-2.17.so libnss_compat.so.2 # rm -f libnss_db.so.2 && ln -s /usr/lib64/libnss_db-2.17.so libnss_db.so.2 # rm -f libnss_dns.so.2 && ln -s /usr/lib64/libnss_dns-2.17.so libnss_dns.so.2 # rm -f libnss_files.so.2 && ln -s /usr/lib64/libnss_files-2.17.so libnss_files.so.2 # rm -f libnss_hesiod.so.2 && ln -s /usr/lib64/libnss_hesiod-2.17.so libnss_hesiod.so.2 # rm -f libnss_nisplus.so.2 && ln -s /usr/lib64/libnss_nisplus-2.17.so libnss_nisplus.so.2 # rm -f libnss_nis.so.2 && ln -s /usr/lib64/libnss_nis-2.17.so libnss_nis.so.2 # rm -f libpthread.so.0 && ln -s /usr/lib64/libpthread-2.17.so libpthread.so.0 # rm -f libresolv.so.2 && ln -s /usr/lib64/libresolv-2.17.so libresolv.so.2 # rm -f librt.so.1 && ln -s /usr/lib64/librt-2.17.so librt.so.1 # rm -f libutil.so.1 && ln -s /usr/lib64/libutil-2.17.so libutil.so.1