Centos7 error: Failed to initialize NSS library

安装oracle相关连的包时导致yum和rpm都坏了,命令使用不了,出现如下错误提示:

error: Failed to initialize NSS library

There was a problem importing one of the Python modules

required to run yum. The error leading to this problem was:

 

   cannot import name ts

 

Please install a package which provides this module, or

verify that the module is installed correctly.

 

It's possible that the above module doesn't match the

current version of Python, which is:

2.7.5 (default, Aug  2 2016, 04:20:16)

[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)]


个人尝试源码编译重装nss、gcc、python、yum都不管用,就差重装系统了。

最后解决方案:

1、下载nspr(nspr-4.13.1-1.0.el7_3.x86_64.rpm)包,链接:http://mirror.centos.org/centos/7/os/x86_64/Packages/nspr-4.13.1-1.0.el7_3.x86_64.rpm

2、执行命令:rpm2cpio nspr-4.13.1-1.0.el7_3.x86_64.rpm | cpio -idmv

3、执行命令:LD_PRELOAD=./usr/lib64/libnspr4.so yum update nspr

问题解决。

注意: 避免安装相关的glibc.i686包,否则会导致yum、rpm损坏


如果还报错,可以将export LD_PRELOAD=/usr/lib64/libnspr4.so写入/etc/profile,然后再source /etc/profile

rpm2cpio命令:将rpm格式的文件转为cpio格式的文件。rpm是linux中常用的文件格式,方便了用户的安装,但没有cpio格式灵活,最典型的例子就是安装一个在rpm中.so文件时,如果直接使用rpm安装,那么需要处理复杂的依赖关系,将rpm转为cpio,则可以方便地提取.so文件,做过软连接。

比如:

rpm2cpio ../libstdc++-4.3.0-8.i386.rpm | cpio -idv

LD_PRELOAD是Linux系统的一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库。这个功能主要就是用来有选择性的载入不同动态链接库中的相同函数。通过这个环境变量,我们可以在主程序和其动态链接库的中间加载别的动态链接库,甚至覆盖正常的函数库。一方面,我们可以以此功能来使用自己的或是更好的函数(无需别人的源码),而另一方面,我们也可以以向别人的程序注入程序,从而达到特定的目的。

你可能感兴趣的:(linux,shell)