2012-09-03 16 views
15

En nuestro servidor se ha eliminado el enlace simbólico al libc.so.6. Ahora ninguno de los binarios en el sistema funciona. Para solucionar este problema, he intentado:Cómo recuperarse después de eliminar el enlace simbólico libc.so.6?

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

que, como era de esperar, me da:

También probé:

/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 

con el mismo resultado. Otros intentos fallidos incluyen cp, mv, cat.

Estoy conectado a través de ssh y creo que no podré abrir otra sesión después de cerrar ésta. ¿Hay alguna manera de arreglar este sistema (usando bash built-ins tal vez)?

[edición] que hice:

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

a copiar el archivo y probado con:

/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 

y tengo:

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

Puede usar un binario estático, p.el shell 'sash' estáticamente vinculado (que se habría instalado anteriormente) que contiene un comando incorporado' cp' -like –

+0

Su 'echo' necesita un' -nE' o agregará nuevas líneas al resultado, lo que no quiere, y puede interpretar fugas – Hasturkun

+0

copiar los archivos con read/echo no lo hace ejecutable ... –

Respuesta

27

Simplemente puede ejecutar ldconfig. La mayoría de las distribuciones envían esto como un binario estático.

+2

Excepto Ubuntu. Así que eso no funciona – Matt

+0

funcionando bien con Debian 7, gracias! –

+2

, pero qué pasa si necesita sudo para eso, que no funciona ... –

4

arrancar desde un CD en vivo como Knoppix o lo que sea y arregle el enlace que falta después de montar el disco con el sistema "roto" de el sistema de ejecución en vivo.

+1

gracias, pero en este momento estoy buscando una manera de solucionar esto en mi sesión abierta ssh :( – perreal

+0

Tal vez usted tiene un binario estáticamente enlazado de perl, python, lua, ...? – wollud1969

+5

¡Ah! ¿Qué pasa con LD_PRELOAD: env LD_PRELOAD =/lib/libc.so.6 ln -s ... – wollud1969

9

Esto ayudó en mi caso (la versión actual depende de su biblioteca):

ldconfig -l -v /lib/libc-2.13.so 
+0

Esto me dio 'ldconfig: No puedo lstat /lib/libc-2.13.so: No existe tal archivo o directorio', encontré un archivo llamado' libc-2.17.so' pero eso da me el mismo error, entonces creo que el error se está refiriendo a la falta de 'lstat'? – pzkpfw

8

Probar:

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

Nota: La versión actual depende de su biblioteca.

+1

permisson denied –

3

Nota, el 64 bits:

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

Esto funcionó muy bien para mí

Si usted no está en ese directorio, por supuesto, va a ser algo así como:
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

2

Si ya había hecho un comando ls y sabe cuál es la versión de la libc,

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

donde x es su versión funciona. Tenga en cuenta que podría ser una lib64 o lib, según su versión.

Acabo de hacer esto y funcionó.

En resumen, nunca elimine el enlace. Mala idea.

+0

esto funciona para mí, ¡¡tx !! –

Cuestiones relacionadas