1 遇到的问题
在 Centos 中使用 yum 安装软件包时报错 发现 N 个已存在的 RPM 数据库问题, 'yum check' 输出如下:
或者 Found N pre-existing rpmdb problem(s), 'yum check' output follows:
,比如
1 2 3 4 5 6 7 8
| ** 发现 282 个已存在的 RPM 数据库问题, 'yum check' 输出如下: GeoIP-1.5.0-14.el7.x86_64 是 GeoIP-1.5.0-11.el7.x86_64 的副本 1:NetworkManager-1.18.8-2.el7_9.x86_64 是 1:NetworkManager-1.8.0-9.el7.x86_64 的副本 1:NetworkManager-libnm-1.18.8-2.el7_9.x86_64 是 1:NetworkManager-libnm-1.8.0-9.el7.x86_64 的副本 1:NetworkManager-team-1.18.8-2.el7_9.x86_64 是 1:NetworkManager-team-1.8.0-9.el7.x86_64 的副本 1:NetworkManager-tui-1.18.8-2.el7_9.x86_64 是 1:NetworkManager-tui-1.8.0-9.el7.x86_64 的副本 1:NetworkManager-wifi-1.18.8-2.el7_9.x86_64 是 1:NetworkManager-wifi-1.8.0-9.el7.x86_64 的副本 ...
|
2 原因
上面的输出表明这些依赖包有多个版本号,说明本机 rpm 数据库里记录了某个 rpm 包多个版本,可能是在某次执行 yum update
的时候被异常终止,比如突然的断电断网造成的错误。
3 解决方法
以下分享两个解决方法
3.1 逐一手动解决
如果错误的 rpm 包比较少,可以使用以下命令逐个删除
以包名 abrt
举例,使用如下命令查看重复的 abrt 包
1 2 3
| rpm -q abrt abrt-2.1.11-60.el7.centos.x86_64 abrt-2.1.11-48.el7.centos.x86_64
|
可以直接删除
1 2 3 4 5
| yum remove abrt-2.1.11-60.el7.centos.x86_64 yum remove abrt-2.1.11-48.el7.centos.x86_64 # 或者 rpm -e abrt-2.1.11-60.el7.centos.x86_64 rpm -e abrt-2.1.11-48.el7.centos.x86_64
|
使用以上命令将重复的包全部删除后,继续执行 yum update
即可
3.2 使用 yum-utils
如果重复的包比较多,比如我这次遇到有两百多个有问题的包,可以直接使用 yum-utils 工具修复
1 2 3 4 5 6 7 8
| # 安装 yum-utils yum install yum-utils # 运行yum-complete-transaction yum-complete-transaction --cleanup-only # 清除重复包 package-cleanup --dupes # 清除损坏包 package-cleanup --problems
|
然后重新安装需要的包或者执行 yum update