CentOS yum——预先存在的 rpmdb 问题

CentOS yum——预先存在的 rpmdb 问题

我正在尝试在开发人员框中安装 git,并得到以下信息:

You could try using --skip-broken to work around the problem
** Found 3 pre-existing rpmdb problem(s), 'yum check' output follows:
kernel-2.6.32-431.17.1.el6.x86_64 has installed conflicts bfa-firmware < ('0', '3.2.21.1',     '2'): bfa-firmware-3.0.3.1-1.el6.noarch
kernel-firmware-2.6.32-431.17.1.el6.noarch is a duplicate with kernel-firmware-2.6.32-358.23.2.el6.noarch
kernel-headers-2.6.32-431.17.1.el6.x86_64 is a duplicate with kernel-headers-2.6.32-358.23.2.el6.x86_64

我该如何解决这个问题?我不太熟悉 CentOS/RHEL

谢谢

答案1

根本原因

up2date 或 yum 更新过程中断导致安装同一软件包的多个版本。

解决

  1. 如果系统是Red Hat Enterprise Linux 5或更高版本,可以使用package-cleanup命令:

$ package-cleanup --dupes $ package-cleanup --cleandupes

--dupes 命令将列出机器上安装的重复包,而 --cleandupes 开关将删除旧版本。package-cleanup 命令由 yum-utils 包提供。

  1. 如果 package-cleanup 没有帮助或者系统是 Red Hat Enterprise Linux 4,请使用 rpm 手动删除软件包:

$ rpm -e --justdb <package-name>-<old-version>

'--justdb' 开关用于确保软件包删除不会从文件系统中删除其文件,而仅将其从 rpm 数据库中删除。

某些重复项可能未被删除,因为它们是已安装软件包所必需的。您可以尝试使用 --cleandupes 和 --removenewestdupes,或者使用 --dupes 查看它们并手动删除。

答案2

警告:解决此类问题总是既危险又乏味。请理解系统中的某些软件包对于系统的功能至关重要。对涉及此类软件包的更改可能更加困难。确保您了解自己想要做的事情,注意细节,四处寻求帮助,在尝试任何事情之前进行备份/快照,因为这样做很容易使事情变得更糟而不是更好。对于某些更改,可能需要启动救援磁盘,这样您就不必依赖要修复的系统。

--

就我而言,我发现有些问题,许多软件包已更新但旧版本没有被删除。尝试重建 RPM DB 无法解决问题。

一个可行的解决方案就是删除旧版本并重新安装新版本。

查看错误输出,每一行基本上都说更新程序包上一个套餐, IE:

    kernel-headers-2.6.32-431.17.1.el6.x86_64 is a duplicate with kernel-headers-2.6.32-358.23.2.el6.x86_64

以下似乎对我有用:

    rpm --erase --nodeps --noscript kernel-headers-2.6.32-358.23.2.el6.x86_64

该命令告诉 RPM 删除特定的上一个套餐无需删除任何依赖项或运行与任务相关的任何脚本。

接下来需要重新安装该包:

    yum reinstall kernel-headers

这次不需要指定确切的软件包版本,因为 yum 会查找最新版本并重新安装它。

Yum 每次运行时都会输出 Yum Check 操作的结果。继续执行此操作,直到不再列出重复的包。

请注意,您可以直接查询 RPM 数据库。例如,如果您看到许多包含字符串 glibc 的消息,您可以获得名称中包含该字符串的软件包的简单列表,如下所示:

    rpm -qa | grep glibc | sort

这可能会产生类似这样的结果:

    glibc-2.17-157.el7_3.5.x86_64
    glibc-common-2.17-157.el7_3.4.x86_64
    glibc-common-2.17-157.el7_3.5.x86_64
    glibc-devel-2.17-157.el7_3.5.x86_64
    glibc-headers-2.17-157.el7_3.5.x86_64

现在更加明显的是必须删除以前版本的 glibc-common:

    rpm --erase --nodeps --noscript glibc-common-2.17-157.el7_3.4.x86_64
    yum reinstall glibc-common

答案3

尝试执行以下命令

yum clean all
rpm --rebuilddb
yum update
yum clean all
yum reinstall glibc glibc-common libgcc
yum upgrade
yum install yum-utils
package-cleanup --problems
package-cleanup --dupes

答案4

我在更新 RHEL7.8 上的安全补丁时遇到了类似的问题。有效的解决方案是启用实例上的所有存储库并更新 glibc 包。步骤如下:

- Create a backup of repositories configuration

  # cp /etc/yum.repos.d/redhat-rhui.repo /tmp/
  

- Enabled all repositories

  # sed -i 's/enabled=0/enabled=1/g' /etc/yum.repos.d/redhat-rhui.repo
  
  
- Update glibc packages

  # yum update glibc*
  
  
- Revert repositories configuration

  # yum clean all

  # cp /tmp/redhat-rhui.repo /etc/yum.repos.d/redhat-rhui.repo

相关内容