Le problème
Lors de l'exécution de la commande rpm, l'erreur suivante s'affiche :
rpm: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file
Les bibliothèques de fragments zlib sont manquantes :
# 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
La solution
Le zlib était cassé, normalement zlib contient les fichiers suivants.
Sur la plate-forme 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
Sur plate-forme 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
Alors que zlib est cassé, la commande rpm est également cassée. Nous ne pouvons donc pas simplement utiliser la commande rpm ou yum pour réinstaller le zlib. Voici ce que vous pouvez faire :
1. Sur un autre serveur CentOS/RHEL, extrayez les bibliothèques de partage zlib d'un rpm avec la même version (par exemple, zlib-1.2.3-27.el6 ici).
2. Décompressez le rpm :
# rpm2cpio zlib-1.2.3-27.el6.[arch].rpm | cpio -idvm
3. Remplacez [arch] par x86_64 ou i686 selon l'architecture de votre serveur :
# 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. Déplacez lib.so.1.2.3 et lib.so.1 vers l'emplacement correct :
Sur la plate-forme x86_64 :
# mv ./lib64/libz.so.* /lib64
Sur plate-forme x86 :
# mv ./lib/libz.so.* /lib
5. Reconstruisez le cache de la bibliothèque :
# ldconfig
Maintenant, la commande rpm devrait s'exécuter normalement.
6. Si vous le souhaitez, réinstallez zlib pour résoudre d'autres problèmes possibles :
# yum reinstall zlib
Remarques
Un problème similaire peut se produire pour d'autres packages comme ceux mentionnés ci-dessous :
rpm: error while loading shared libraries: libdb-4.7.so: cannot open shared object file: No such file or directory
Pour résoudre ce problème, recherchez quel package fournit le fichier manquant :
# 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
Réinstallez le package ou copiez le fichier manquant en extrayant le rpm.