我使用的是 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
然后运行更新您的软件包并安装/升级所需的软件包。
另请查看此官方链接: