__rpm.so: underfined symbol : rpmpkgverifySigs 故障分析
前言:
近期漏洞修复频繁,各种组件需要升级,经多次碰撞,发现 yum update 来升级组件是最有效最安全的方式(绿盟通过版本比对的扫描结果可以忽略)。
然而,各家的设备各家管,一到升级就发现一堆问题了。呐这就发生了这么一个报错:
yum update yum -y #随便写一个,其实都一样
there was a problem importing one of the python modules
required to run yum. the error leading to this problem was:
/usr/lib64/python2.7/site-packages/rpm/__rpm.so : underfined symbol rpmpkgverifysigs
please install package which provides this module, or verify that 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 , jun 11 2019, 12:19:05)
[gcc 4.8.5 20150623 (red hat 4.8.5-36)]
看到以上内容,相信大家都会:
1.急急忙忙地找 python 包
2. 查rpmpkgverifysigs 是什么
3.再不行就去升级gcc
然而告诉大家: 都错了!
正确的逻辑是:
1. rpmpkgverifysigs 这个变量是 __rpm.so 进行调用,但是脚本不认识,说明python版本错了
2. 按照红帽的习惯,像python这种多组件使用的脚本语言,红帽并不会给rpm这么重要的工具使用公用库,而是使用独有封装的库
3. 检查rpm有关的.rpm包,在里面搜索python: rpm -qa|grep rpm| grep python
4. 显示: rpm -python-4.11.3-32.el7.x86_64 答案呼之欲出,只要重装rpm-python
5. 大家都知道什么是依赖包,其实依赖包之间的关系还真是千丝万缕, 你觉得只重装rpm-python就解决问题么?五十五吧,因为你不知道管理员装python后还弄了什么,所以保障点,一套包全升级了:
rpm -uvh rpm-libs-xxxxxx.rpm --nodeps
rpm -uvh rpm-xxxxxx.rpm --nodeps
rpm -uvh rpm-build-xxxxxx.rpm --nodeps
rpm -uvh rpm-python-xxxxxx.rpm --nodeps
rpm -uvh rpm-sign-xxxxxx.rpm --nodeps
ps:
1. rpm 安装时有时2个包互相依赖,装哪个先都会报错,此时只能 --nodeps 解决
2.rpm 请用 -u参数进行升级安装,不然会留着两个版本的同组件,你的下一手会很麻烦!