【系统救援】/lib64/libnssutil3.so: version `NSSUTIL_3.59‘ not found (required by /lib64/libnss3.so)

目录

问题现象

解决方案分析

解决方案

善后

FAQ


问题现象

今天开发同事说xx服务器(CentOS7.9)无法通过ssh登录了,尝试访问报错如下:

ssh_exchange_identification: read: Connection reset by peer

于是,直接访问虚机管理平台通过console访问。发现lib库被污染了,不只是无法远程访问sshd,连scp、rpm、yum等命令也无法使用。

开发同事也不晓得自己搞了啥,查找历史命令发现:rpm -ivh ./*.rpm --nodeps --force,应该是强制安装了一些rpm导致的。

解决方案分析

1、了解到是强制安装某些rpm导致lib库被污染,强制卸载掉也OK,但是rpm命令无法使用。

2、找一台同版本操作系统的服务器,将libnssutil3.so拷贝到问题机的/lib64下,但是scp无法使用,同时有无法远程访问到该机,且rpm、yum也不能使用,简直成了孤岛。

解决方案

挂载ISO,进入到“救援模式”:

1、cd /mnt/sysimage

2、cp -a usr/lib64{,.bak}       #--- /lib64是/usr/lib64的软链接

3、cp /lib64/*.so usr/lib64    

4、chroot /mnt/sysimage     #--- 切到系统中验证是否问题得到解决

5、执行rpm、yum等命令验证,如果还有报错,可能有部分非*.so的动态链接库文件未得到更新,例如:执行yum时报:libcurl.so.4: cannot open shared object file: No such file or directory,则执行cp /lib64/libcurl.so.4.3.0 usr/lib64/即可

6、重启系统,然后再次登录成功。

善后

7、为了以绝后患,此时可以执行yum upgrade更新一下系统,极可能会报“多版本冲突”问题:(原因就是上面所说,强制安装了一些lib库的包,现在通过手动更新lib库,部分系统命令不报错了而已,不保证其他命令不报错,所以还是要卸载掉这些包

Error:  Multilib version problems found. This often means that the root
       cause is something else and multilib version checking is just
       pointing out that there is a problem. Eg.:

……

       Protected multilib versions: systemd-libs-219-78.el7_9.7.i686 != systemd-libs-219-78.el7_9.5.x86_64
Error: Protected multilib versions: expat-2.1.0-15.el7_9.i686 != expat-2.1.0-14.el7_9.x86_64
Error: Protected multilib versions: expat-2.1.0-15.el7_9.i686 != expat-2.1.0-12.el7.x86_64
Error: Protected multilib versions: xz-libs-5.2.2-2.el7_9.i686 != xz-libs-5.2.2-1.el7.x86_64
Error: Protected multilib versions: nss-softokn-freebl-3.79.0-4.el7_9.i686 != nss-softokn-freebl-3.67.0-3.el7_9.x86_64
Error: Protected multilib versions: nss-softokn-freebl-3.79.0-4.el7_9.i686 != nss-softokn-freebl-3.53.1-6.el7_9.x86_64

卸载命令(最好用yum):yum erase systemd-libs.i686 expat.i686 xz-libs.i686 nss-softokn-freebl.i686

FAQ

在使用yum更新期间导致yum进程异常退出了,报:There are unfinished transactions remaining. You might consider running yum-complete-transaction, or "yum-complete-transaction --cleanup-only" and "yum history redo last", first to finish them. If those don't work you'll have to try removing/installing packages by hand (maybe package-cleanup can help).
The program yum-complete-transaction is found in the yum-utils package.

解决:

根据提示,执行命令:yum-complete-transaction或者yum-complete-transaction --cleanup-only,yum-complete-transaction来自于yum-utils package,如果没有安装,需要执行yum -y install yum-utils进行安装。

你可能感兴趣的:(操作系统,服务器,linux,运维)