
以前、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
アンソニー・ジオゲガンが正しい方向を示してくれたおかげで、私は実用的な解決策を見つけることができました。
rpm -e --justdb --nodeps libstdc++
これにより、ファイルに触れることなく DB からパッケージが削除され、シンプルにyum install
機能します。
答え2
興味深いことに、まず次のrpm
コマンドを使用してパッケージを削除してみます。
rpm -e libstdc++
rpm
ただし、の内部データベースが破損しており、上記のコマンドが機能しないと思われるので、次のコマンドを使用してデータベースを再構築してみます。
rpm --rebuilddb
答え3
これは x86_64 および multilib パッケージで発生する可能性があります。64yum remove libstdc++
ビット バージョンを削除しようとしますが、インストールされていません。したがって、このような状況では、パッケージを arch でアドレス指定する必要があります。つまり、次のようになります。
yum remove libstdc++-4.1.2-55.el5.i386
答え4
私のホストでも同様の状況がありました。
# yum --showduplicates list coreutils-libs
明らかに同時にインストールされた同じパッケージの 2 つのバージョンが返されました。
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
それは失敗しました。なぜなら、他の依存関係を削除する必要があったからです。おいしい自体。
しかし、何度か試行錯誤した結果、この問題を解決することができました。重要なのは、バージョンとリリースのサフィックスを含めたパッケージのフルネームを使用することです。
重要な点は、パッケージの 1 つを削除するには物理的な削除が必要になりますが、2 つのうちのもう 1 つを削除すると、rpm DB レコードが削除されるだけで、データベースが一貫した状態になるということです。
私の場合、私もコアユーティリティ-8.4-37.el6_7.3パッケージがインストールされているので、リリース -37.el6_7.3 がおそらく正しいもの (つまり、保存されるもの) です。
私が言ったときおいしいもう一方を削除する
# yum remove coreutils-libs-8.4-43.el6
すべてがエラーなく実行され、RPM DB は再び一貫性を取り戻しました。