yum/rpm 不一致

yum/rpm 不一致

我使用的是 RHEL 5(64 位),并且遇到了 rpm/yum 不一致的问题。当我尝试安装 32 位 RPM 时,当磁盘上仅存在 64 位版本时,我被告知 RPM 已安装:

$ rpm -Uvh ./libsysfs-2.1.0-1.el5.i386.rpm
Preparing...                ########################### [100%]
        package libsysfs-2.1.0-1.el5.i386 is already installed

$ rpm -q libsysfs --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n
libsysfs-2.1.0-1.el5.x86_64

我尝试重建数据库,但遇到同样的错误。

我已验证 RPM 并未实际安装。当我运行时,rpm -qp ./libsysfs-2.1.0-1.el5.i386.rpm我可以确认系统上不存在列出的文件。

我缺少什么? RPM 是否还查看其他内容来查看 RPM 是否已安装?

编辑1

不确定这是否与 RPM 本身有关。运行后updatedb,使用 擦除 RPMrpm -e libsysfs并尝试同时安装两者,我收到一条错误消息,表明软件包已添加:

$ rpm -e libsysfs
$ rpm -Uvh ./libsysfs-2.1.0-1.el5.i386.rpm ./libsysfs-2.1.0-1.el5.x86_64.rpm
warning: package libsysfs = 2.1.0-1.el5 was already added, skipping libsysfs < 2.1.0-1.el5
Preparing...                ########################### [100%]
   1:libsysfs               ########################### [100%]

还有 19 个其他 RPM 也在做同样的事情。

编辑2

32 位软件包仍然无法安装。在试图弄清楚发生了什么的过程中,我能够强制安装 rpm rpm -Uvh --force libsysfs-2.1.0-1.el5.i386.rpm,并成功安装。我可以验证 32 位中列出的文件64 位 RPM 现在都存在于文件系统上。然而,rpm现在yum双方都认为仅有的32 位版本位于磁盘上:

$ rpm -q libsysfs --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n
libsysfs-2.1.0-1.el5.i386

我可以成功擦除 32 位 RPM,但该rpm命令现在不再识别 64 位变体,即使所有文件都已就位:

$ rpm -e libsysfs.i386
$ rpm -q libsysfs --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n
package libsysfs is not installed
$ rpm -qpl ./libsysfs-2.1.0-1.el5.x86_64.rpm
/usr/lib64/libsysfs.so.2
/usr/lib64/libsysfs.so.2.0.1
...
/usr/share/doc/libsysfs-2.1.0/libsysfs.txt

$ ls /usr/lib64/libsysfs.so.2
/usr/lib64/libsysfs.so.2

重建RPM数据库,仍然找不到libsysfs RPM。

$ cd /var/lib/rpm
$ rm -f __db*
$ /usr/lib/rpm/rpmdb_verify Packages
$ mv Packages Packages.orig
$ /usr/lib/rpm/rpmdb_dump Packages.orig | /usr/lib/rpm/rpmdb_load Packages
$ /usr/lib/rpm/rpmdb_verify Packages
$ rpm -v --rebuilddb

我得出的结论是,一定存在某种 RPM 数据库损坏,但不知道该怎么办。

编辑3

为了更好地了解正在发生的情况,我删除了 libsysfs 并尝试了该yum localinstall选项,但安装程序似乎仍然将 32 位和 64 位选项视为同一件事:

$ yum localinstall ./libsysfs-2.1.0-1.el5.x86_64.rpm ./libsysfs-2.1.0-1.el5.i386.rpm
...
Resolving Dependencies
--> Running transaction check
---> Package libsysfs.i386 0:2.1.0-1.el5 set to be updated
---> Package libsysfs.x86_64 0:2.1.0-1.el5 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

===============================================================================
Packages      Arch       Version         Repository                      Size 
===============================================================================
Installing:
 libsysfs     i386       2.1.0-1.el5     /libsysfs-2.1.0-1.el5.i386      140 k
 libsysfs     x86_64     2.1.0-1.el5     /libsysfs-2.1.0-1.el5.x86_64    141 k

Transaction Summary
===============================================================================
Install      2 Package(s)
Upgrade      0 Package(s)

Total Size: 281 k
...
Running Transaction:
  Installing     : libsysfs                      1/1
Installed products updated.

Installed:
  libsysfs.i386 0:2.1.0-1.el5           libsysfs.x86_64 0:2.1.0-1.el5

Complete!

我注意到除了实际进行安装的地方之外,到处都提到了两种体系结构,但安装仍然只进行了一种。

答案1

看来并非所有 32 位 RPM 都是一样的。唯一会出现此问题的 RPM 是直接从 RHN 下载的 RPM。如果我仅通过 yum 使用 rhel-5-server-rpms 存储库中提供的 RPM,则一切正常。从 rhn.redhat.com 下载缺少的 50 个左右的 RPM 导致了该问题。

在我们的设置中,下载的 RPM 通过 anaconda 强制加载到系统上。

编辑

为了尽量减少问题,看起来需要卸载每个 32 位 RPM,重新安装 64 位/noarch RPM,然后安装 32 位 RPM 才能解决问题。

yum erase '*.i386'
yum reinstall '*.x86_64' --exclude=filesystem
yum install '<rpm>.i386'

出于某种原因,除了我在其上看到的 8 个 RPM 之外,这一切都清除了。

答案2

尝试检查您的足弓支撑。您说您正在使用或想要 x86_64 软件包,但您有 i386 软件包。

问题可能与“/etc/yum.conf”文件中的 arch 支持有关。尝试改变->

multilib_policy=all

至 ->

multilib_policy=best

运行这个:

yum clean all

然后运行更新您的软件包并安装/升级所需的软件包。

另请查看此官方链接:

Yum 缓存信息:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/sec-Working_with_Yum_Cache.html

Yum 基本资源: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sec-Working_with_Packages.html

相关内容