Das Problem
rpm-Befehle geben den folgenden Fehler aus:
rpm: error while loading shared libraries: /usr/lib64/liblzma.so.0: invalid ELF header
Die Lösung
In diesem Fall wurde entweder liblzma.so oder der Link darauf (/usr/lib64/liblzma.so.0) überschrieben.
$ rpm -qa | grep binutils rpm: error while loading shared libraries: /usr/lib64/liblzma.so.0: invalid ELF header
Um dieses Problem zu beheben, müssen die Datei liblzma.so und der zugehörige Softlink wiederhergestellt werden. Befolgen Sie die nachstehenden Schritte, um die .so-Datei und die zugehörigen Softlinks wiederherzustellen.
1. Stellen Sie sicher, dass der Softlink /usr/lib64/liblzma.so.0 existiert und zeigt auf liblzma.so.0.0.0 .
# ls -l /usr/lib64/liblzma.so.0 lrwxrwxrwx 1 root root 16 Mar 31 15:42 /usr/lib64/liblzma.so.0 -> liblzma.so.0.0.0
# file /usr/lib64/liblzma.so.0.0.0 ./usr/lib64/liblzma.so.0.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped
2. Wenn der Softlink nicht existiert, versuchen Sie Folgendes:
– Versuchen Sie, yum zu verwenden, um die xz-libs neu zu installieren. Wenn jedoch rpm ein Problem hat, wird yum es wahrscheinlich auch tun.
# yum reinstall xz-libs
3. Wenn das nicht funktioniert, entpacken Sie das RPM und kopieren Sie die neue gemeinsam genutzte Bibliotheksdatei über die ungültige Datei. Da rpm Probleme hat, muss das Entpacken von rpm wahrscheinlich auf einem anderen System durchgeführt werden.
– Laden Sie das entsprechende xz-libx-RPM aus dem Quell-Repository herunter und verwenden Sie die Befehle rpm2cpio und cpio, um das RPM zu entpacken.
# rpm2cpio xz-libs-4.999.9-0.5.beta.20091007git.el6.x86_64.rpm | cpio -idv ./usr/lib64/liblzma.so.0 ./usr/lib64/liblzma.so.0.0.0 ./usr/share/doc/xz-libs-4.999.9 ./usr/share/doc/xz-libs-4.999.9/COPYING.GPLv2 ./usr/share/doc/xz-libs-4.999.9/COPYING.GPLv3 ./usr/share/doc/xz-libs-4.999.9/COPYING.LGPLv2.1 421 blocks
4. Kopieren Sie liblzma.so.0.0.0 aus dem entpackten RPM über die vorhandene gemeinsam genutzte Bibliotheksdatei:
# cp -pv ./usr/lib64/liblzma.so.0.0.0 /usr/lib64/liblzma.so.0.0.0 cp: overwrite '/usr/lib64/liblzma.so.0.0.0'? y './usr/lib64/liblzma.so.0.0.0' -> '/usr/lib64/liblzma.so.0.0.0'
# file /usr/lib64/liblzma.so.0.0.0 /usr/lib64/liblzma.so.0.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped
5. Testen Sie, ob rpm wie erwartet funktioniert.
# rpm -qf /usr/lib64/liblzma.so.0.0.0 xz-libs-4.999.9-0.5.beta.20091007git.el6.x86_64