web-dev-qa-db-fra.com

Comment récupérer après la suppression du lien symbolique libc.so.6?

Sur notre serveur, le lien symbolique vers libc.so.6 a été supprimé. Désormais, aucun des fichiers binaires du système ne fonctionne. Pour résoudre ce problème, j'ai essayé:

/bin/ln -s /lib/libc-2.11.3.so /lib/libc.so.6

qui, comme prévu, me donne:

/bin/ln: error while loading shared libraries: libc.so.6: 
    cannot open shared object file: No such file or directory

J'ai aussi essayé:

/lib/ld-linux-x86-64.so.2  --inhibit-rpath /lib/libc.so.6 \
   --library-path /lib/libc-2.11.3.so \
   /bin/ln -s /lib/libc-2.11.3.so /lib/libc.so.6

avec le même résultat. D'autres tentatives infructueuses incluent cp, mv, cat. 

Je suis connecté via ssh et je pense que je ne pourrai pas ouvrir une autre session après la fermeture de celle-ci. Existe-t-il un moyen de réparer ce système (en utilisant éventuellement les commandes intégrées bash)?

[ edit ] J'ai fait: 

while read line; do echo $line; done < /lib/libc-2.11.3.so > libc.so.6

copier le fichier et essayer avec: 

/lib/ld-linux-x86-64.so.2  --inhibit-rpath libc.so.6 --library-path . \
  /bin/ln -s /lib/libc-2.11.3.so /lib/libc.so.6

et j'ai: 

/bin/ln: error while loading shared libraries: ./libc.so.6: ELF file OS ABI invalid
21
perreal

Vous pouvez simplement exécuter ldconfig. La plupart des distributions livrent cela sous forme de binaire statique.

31
Simon Richter

Cela a aidé dans mon cas (la version actuelle dépend de votre bibliothèque):

ldconfig -l -v /lib/libc-2.13.so
10
Adam

Essayer:

LD_PRELOAD=/lib/libc-2.17.so ln -s /lib/libc-2.17.so /lib/libc.so.6

Remarque: la version actuelle dépend de votre bibliothèque.

8
Kumar Sukhani

Démarrez à l’aide d’un cd en direct, tel que Knoppix ou autre, et corrigez le lien manquant après avoir monté le disque avec le système "endommagé" hors du système en cours d’exécution.

5
wollud1969

Si vous aviez déjà fait une commande ls et savez quelle est la version de la libc,

ldconfig -l -v /lib64/libc-2.x.so

x est votre version fonctionne. Notez qu'il peut s'agir d'une lib64 ou d'une lib selon votre version.

Je viens de faire cela et cela a fonctionné.

En bref, ne supprimez jamais le lien. Mauvaise idée.

3
manoj

Remarque, pour 64 bits:

LD_PRELOAD=libc-2.13.so ln -s libc-2.13.so libc.so.6

Cela a bien fonctionné pour moi

Si vous ne vous trouvez pas dans ce répertoire, ce sera quelque chose comme:
LD_PRELOAD=/lib/x86_64-linux-gnu/libc-2.13.so ln -s /lib/x86_64-linux-gnu/libc-2.13.so /lib/x86_64-linux-gnu/libc.so.6

3
malc

Merci beaucoup pour la réponse ci-dessous. Cela fonctionnait bien avec l'ID racine . Nous avons dissocié libc.so.6 pour établir un lien avec la version supérieure, mais tout à coup, après avoir dissocié le serveur libc.so.6, il est devenu insensible. La commande ln -s ne fonctionnait pas. Aucun autre utilisateur n'a pu ssh au serveur. Mais quand nous avons couru sous la commande cela a fonctionné. (avec la version de libc existante sur le serveur) le serveur a commencé à se comporter normalement. 

Ci-dessous, on trouve la commande correcte et le sauvetage de la vie aussi ....

LD_PRELOAD=/lib/libc-2.17.so ln -s /lib/libc-2.17.so /lib/libc.so.6

Remarque: La version actuelle dépend de votre bibliothèque.

0
Devdatta