問題
rpm コマンドを実行すると、次のエラーが表示されます:
rpm: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file
zlib シャード ライブラリがありません:
# ls -l /lib64/libz.so* ls: /lib64/libz.so*: No such file or directory # ls -l /lib/libz.so* ls: /lib/libz.so*: No such file or directory
解決策
zlib が壊れています。通常、zlib には次のファイルが含まれています。
x86_64 プラットフォーム:
# rpm -ql zlib-1.2.3-27.el6.x86_64 /lib64/libz.so.1 /lib64/libz.so.1.2.3 /usr/share/doc/zlib-1.2.3 /usr/share/doc/zlib-1.2.3/ChangeLog /usr/share/doc/zlib-1.2.3/FAQ /usr/share/doc/zlib-1.2.3/README
x86 プラットフォームの場合:
# rpm -ql zlib-1.2.3-27.el6.i686 /lib/libz.so.1 /lib/libz.so.1.2.3 /usr/share/doc/zlib-1.2.3 /usr/share/doc/zlib-1.2.3/ChangeLog /usr/share/doc/zlib-1.2.3/FAQ /usr/share/doc/zlib-1.2.3/README
zlib が壊れている間、rpm コマンドも壊れています。したがって、単純に rpm または yum コマンドを使用して zlib を再インストールすることはできません。ここでできること:
1. 別の CentOS/RHEL サーバーで、同じバージョンの rpm から zlib 共有ライブラリを抽出します (例:ここでは zlib-1.2.3-27.el6)。
2. rpm を解凍します。
# rpm2cpio zlib-1.2.3-27.el6.[arch].rpm | cpio -idvm
3. サーバー アーキテクチャに応じて、[arch] を x86_64 または i686 に置き換えます。
# rpm2cpio zlib-1.2.3-27.el6.x86_64.rpm | cpio -idvm ./lib64/libz.so.1 ./lib64/libz.so.1.2.3 ./usr/share/doc/zlib-1.2.3 ./usr/share/doc/zlib-1.2.3/ChangeLog ./usr/share/doc/zlib-1.2.3/FAQ ./usr/share/doc/zlib-1.2.3/README 300 blocks
4. lib.so.1.2.3 と lib.so.1 を正しい場所に移動します:
x86_64 プラットフォーム:
# mv ./lib64/libz.so.* /lib64
x86 プラットフォーム:
# mv ./lib/libz.so.* /lib
5. ライブラリ キャッシュを再構築します。
# ldconfig
これで、rpm コマンドが通常どおり実行されるはずです。
6. 必要に応じて、zlib を再インストールして、考えられるその他の問題を修正します。
# yum reinstall zlib
メモ
以下のような他のパッケージでも同様の問題が発生する可能性があります:
rpm: error while loading shared libraries: libdb-4.7.so: cannot open shared object file: No such file or directory
これを解決するには、不足しているファイルを提供するパッケージを見つけます:
# yum provides */libdb* Loaded plugins: security, ulninfo db4-4.7.25-19.el6_6.i686 : The Berkeley DB database library (version 4) for C Repo : ol6_latest_local Matched from: Filename : /usr/lib/libdb-4.7.so Filename : /lib/libdb-4.7.so
パッケージを再インストールするか、不足しているファイルをコピーして rpm を抽出してください。
Linux OS でホスト名が変更されたら、シェル プロンプトでホスト名を更新する方法
CentOS/RHEL 7 で削除された rpm パッケージ ファイル (ライブラリ、構成ファイル) を回復する方法