yum 发现N个已存在的RPM数据库问题

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


yum 发现N个已存在的RPM数据库问题
https://inio.cc/2022/11/04/linux/Found N pre-existing rpmdb problem(s)/
作者
漂北一
发布于
2022年11月4日
更新于
2023年2月19日
许可协议