重装 CentOS7 yum,解决 “No module named yum” 错误

前言

下午工作的时候遇到了一个问题,测试服务器上的 yum 不知为何不能使用,抛出错误 No module named yum。Google 了之后发现基本都是讲修改 yum 使用的 python 版本,但是在我尝试安装了 python2.6 并修改了 /usr/bin/yum 文件后发现还是不行,于是决定重装 yum。

卸载 yum

首先查看现有的 yum:

rpm -qa yum

卸载现有的 yum 源:

rpm -qa | grep yum | xargs rpm -e --nodeps

根据系统版本,下载所需 rpm 包

先查看系统版本:

cat /etc/centos-release

确定系统版本为 CentOS Linux release 7.0.1406 (Core) 后,到官网查找下列 rpm 包:
http://mirror.centos.org/centos/7/os/x86_64/Packages/

  • yum-3.4.3-163.el7.centos.noarch.rpm
  • yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
  • yum-plugin-fastestmirror-1.1.31-52.el7.noarch.rpm

如果为其他系统,可自行查找对应的包下载。

下载 yum 的 rpm 包:

wget http://mirror.centos.org/centos/7/os/x86_64/Packages/yum-3.4.3-163.el7.centos.noarch.rpm
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.31-52.el7.noarch.rpm

需要一起安装,不然会报互相依赖的错误。

解决错误:undefined symbol: rpmtsAddReinstallElement

在安装之后,我运行 yum 的时候还是报错:/usr/lib64/python2.7/site-packages/rpm/_rpm.so: undefined symbol: rpmtsAddReinstallElement
这是由于 rpm 包的版本不对应导致的。使用下列指令查看:

rpm -qa | grep rpm

显示结果为:

rpmfusion-free-release-7-4.noarch
rpm-python-4.11.3-40.el7.x86_64
rpm-libs-4.11.3-25.el7.x86_64
rpm-4.11.3-25.el7.x86_64
rpm-build-libs-4.11.3-25.el7.x86_64

发现其中 rpm-python 的包为 3-40 ,而其他包版本为 3-25。这时再去下载对应 3-40 的包:

wget http://mirror.centos.org/centos/7/os/x86_64/Packages/rpm-4.11.3-40.el7.x86_64.rpm
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/rpm-build-libs-4.11.3-40.el7.x86_64.rpm
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm

运行下述指令更新包:

rpm -Uvh rpm-4.11.3-40.el7.x86_64.rpm rpm-build-libs-4.11.3-40.el7.x86_64.rpm rpm-libs-4.11.3-40.el7.x86_64.rpm

安装成功后再运行 yum 指令,就发现安装成功啦~

参考文档

Python 升级导致 yum 不可用 “ No module named yum” - Linux 社区
yum 的卸载与重新安装 - CSDN
CentOS7 的 yum 重装 - CSDN
centos7 中 yum 的安装 - 博客园
CentOS7 误删 python 及 yum(重装)
rpm 安装依赖问题 - 思否

你可能感兴趣的:(centos7,yum)