Il problema
Quando si esegue il comando rpm, viene visualizzato il seguente errore:
rpm: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file
Mancano le librerie di shard 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
La soluzione
La zlib era rotta, normalmente zlib contiene i seguenti file.
Su piattaforma 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
Su piattaforma 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
Mentre zlib è rotto, anche il comando rpm è rotto. Quindi non possiamo semplicemente usare il comando rpm o yum per reinstallare zlib. Quello che puoi fare qui è:
1. Su un altro server CentOS/RHEL, estrai le librerie di condivisione zlib da un rpm con la stessa versione (ad es. zlib-1.2.3-27.el6 qui).
2. Decomprimi il numero di giri:
# rpm2cpio zlib-1.2.3-27.el6.[arch].rpm | cpio -idvm
3. Sostituisci [arch] a x86_64 o i686 a seconda dell'architettura del tuo server:
# 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. Sposta lib.so.1.2.3 e lib.so.1 nella posizione corretta:
Su piattaforma x86_64:
# mv ./lib64/libz.so.* /lib64
Su piattaforma x86:
# mv ./lib/libz.so.* /lib
5. Ricostruisci la cache della libreria:
# ldconfig
Ora il comando rpm dovrebbe essere eseguito normalmente.
6. Facoltativamente, reinstalla zlib per risolvere altri possibili problemi:
# yum reinstall zlib
Note
Un problema simile può verificarsi per altri pacchetti come menzionato di seguito:
rpm: error while loading shared libraries: libdb-4.7.so: cannot open shared object file: No such file or directory
Per risolvere questo problema, trova quale pacchetto fornisce il file mancante:
# 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
Reinstallare il pacchetto o copiare il file mancante estraendo rpm.