已安装的包和未同时安装的包

已安装的包和未同时安装的包

不久前,我尝试在我的 CentOS 5 服务器上安装 Steam,并尝试了我在互联网上找到的几乎所有内容,似乎我能够同时安装和不安装 libstdc++。

CPanel 无法更新,因为它找不到安装的正确版本,但 yum 无法安装它,因为它已经安装。

¿我怎样才能解决这种情况并达到一致的状态?

# yum install libstdc++-4.1.2-55.el5
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * contrib: mirror.wiredtree.com
addons                                                   | 1.9 kB     00:00
base                                                     | 1.1 kB     00:00
centosplus                                               | 1.9 kB     00:00
contrib                                                  | 1.9 kB     00:00
extras                                                   | 2.1 kB     00:00
updates                                                  | 1.9 kB     00:00
wiredtree                                                |  951 B     00:00
Excluding Packages in global exclude list
Finished
Setting up Install Process
Package matching libstdc++-4.1.2-55.el5.i386 already installed. Checking for update.
Nothing to do

# yum remove libstdc++-4.1.2-55.el5
Loaded plugins: fastestmirror
Setting up Remove Process
No Match for argument: libstdc++-4.1.2-55.el5
Loading mirror speeds from cached hostfile
 * contrib: mirror.wiredtree.com
addons                                                   | 1.9 kB     00:00
base                                                     | 1.1 kB     00:00
centosplus                                               | 1.9 kB     00:00
contrib                                                  | 1.9 kB     00:00
extras                                                   | 2.1 kB     00:00
updates                                                  | 1.9 kB     00:00
wiredtree                                                |  951 B     00:00
Excluding Packages in global exclude list
Finished
Package(s) libstdc++-4.1.2-55.el5 available, but not installed.
No Packages marked for removal


# yum reinstall libstdc++-4.1.2-55.el5
Loaded plugins: fastestmirror
Setting up Reinstall Process
Loading mirror speeds from cached hostfile
 * contrib: mirror.wiredtree.com
addons                                                   | 1.9 kB     00:00
base                                                     | 1.1 kB     00:00
centosplus                                               | 1.9 kB     00:00
contrib                                                  | 1.9 kB     00:00
extras                                                   | 2.1 kB     00:00
updates                                                  | 1.9 kB     00:00
wiredtree                                                |  951 B     00:00
Excluding Packages in global exclude list
Finished
No Match for argument: libstdc++-4.1.2-55.el5
Package(s) libstdc++-4.1.2-55.el5 available, but not installed.
Nothing to do

# yum --showduplicates list libstdc++ | expand
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * contrib: mirror.wiredtree.com
Excluding Packages in global exclude list
Finished
Installed Packages
libstdc++.i386                      4.3.2-7                            installed
Available Packages
libstdc++.i386                      4.1.2-55.el5                       base

答案1

感谢 Anthony Geoghegan 为我指明了正确的方向,我找到了一个可行的解决方案

rpm -e --justdb --nodeps libstdc++

这将从数据库中删除包而不触及文件,然后简单yum install就可以了。

答案2

出于兴趣,我首先尝试使用以下rpm命令删除该包:

rpm -e libstdc++

但是,我怀疑 的rpm内部数据库已损坏,并且上述命令不起作用,因此我尝试使用以下命令重建其数据库:

rpm --rebuilddb

答案3

这可能发生在 x86_64 和 multilib 包上。yum remove libstdc++尝试删除 64 位版本,但未安装。所以在这种情况下你应该用 arch 来处理包。 IE:

yum remove libstdc++-4.1.2-55.el5.i386

答案4

我的主人也有类似的情况。

# yum --showduplicates list coreutils-libs

返回显然是同时安装的同一软件包的两个版本。

Installed Packages
coreutils-libs.x86_64                  8.4-37.el6_7.3                 @updates
coreutils-libs.x86_64                  8.4-43.el6                     installed
Available Packages
coreutils-libs.x86_64                  8.4-43.el6                     base

当我尝试时

# yum remove coreutils-libs

它失败了,因为它必须删除其他依赖项,包括本身。

然而,经过几次尝试和错误,我能够解决这个问题。关键是使用包的全名,即包括版本和发布后缀。

要点是,删除其中一个软件包需要物理删除,但删除两个软件包中的另一个只会删除 rpm DB 记录,从而使数据库进入一致状态。

就我而言,我可以看到我也有coreutils-8.4-37.el6_7.3安装了软件包,因此版本 -37.el6_7.3 可能是正确的版本(即要保留)。

当我告诉删除另一个

# yum remove coreutils-libs-8.4-43.el6

一切运行没有任何错误,RPM DB 再次变得一致。

相关内容