Le problème
Les commandes rpm génèrent l'erreur suivante :
rpm: error while loading shared libraries: /usr/lib64/liblzma.so.0: invalid ELF header
La solution
Dans ce cas, soit liblzma.so, soit le lien vers celui-ci (/usr/lib64/liblzma.so.0) a été écrasé.
$ rpm -qa | grep binutils rpm: error while loading shared libraries: /usr/lib64/liblzma.so.0: invalid ELF header
Pour résoudre ce problème, le fichier liblzma.so et le lien symbolique associé doivent être restaurés. Suivez les étapes décrites ci-dessous pour restaurer le fichier .so et les liens symboliques associés.
1. Assurez-vous que le lien symbolique /usr/lib64/liblzma.so.0 existe et pointe vers 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. Si le lien symbolique n'existe pas, essayez ce qui suit :
– Essayez d'utiliser yum pour réinstaller les xz-libs. Cependant, si rpm rencontre un problème, yum le sera probablement aussi.
# yum reinstall xz-libs
3. Si cela ne fonctionne pas, décompressez le RPM et copiez le nouveau fichier de bibliothèque partagée sur le fichier invalide. Comme rpm rencontre des problèmes, il faudra probablement le déballer sur un autre système.
– Téléchargez le rpm xz-libx approprié à partir du référentiel source et utilisez les commandes rpm2cpio et cpio pour décompresser le rpm.
# 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. Copiez liblzma.so.0.0.0 du RPM décompressé sur le fichier de bibliothèque partagée existant :
# 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. Testez que rpm fonctionne comme prévu.
# rpm -qf /usr/lib64/liblzma.so.0.0.0 xz-libs-4.999.9-0.5.beta.20091007git.el6.x86_64