Ha actualizado su libc (la biblioteca del sistema más básica) y ahora ningún programa funciona. Para ser precisos, ningún programa enlazado dinámicamente funciona.
En su escenario particular, el reinicio debería funcionar. La libc ahora instalada requiere un kernel más nuevo, y si reinicia, debería obtener ese kernel más nuevo.
Siempre que tenga un shell en ejecución, a menudo hay una manera de recuperarse, pero puede ser complicado si no lo planeó. Si no tiene un shell, generalmente no hay otra solución que reiniciar.
Aquí es posible que no pueda recuperarse sin reiniciar, pero al menos puede averiguar fácilmente qué kernel se está ejecutando. Solo usa una forma de leer /proc/version
eso no requiere un comando externo.
read v </proc/version; echo $v
echo $(</proc/version) # in zsh/bash/ksh
Si todavía tiene una copia de la antigua libc, puede ejecutar programas con ella. Por ejemplo, si la antigua libc está en /old/lib
y tiene ejecutables que funcionan con esta antigua libc en /old/bin
, puede ejecutar
LD_LIBRARY_PATH=/old/lib /old/lib/ld-linux.so.2 /old/bin/uname
Si tiene algunos binarios vinculados estáticamente, seguirán funcionando. Recomiendo instalar utilidades del sistema vinculadas estadísticamente para este tipo de problema (pero debe hacerlo antes de que comience el problema). Por ejemplo, en Debian/Ubuntu/Mint/…, instale una o más de busybox-static (colección de herramientas básicas de línea de comandos de Linux que incluye un shell), sash (shell con algunos componentes adicionales), zsh-static (solo un shell pero con bastantes herramientas útiles integradas).
busybox-static uname
sash -c '-cat /proc/version'
zsh-static -c '</proc/version'
Ese parece ser el error que arroja glibc si se está ejecutando en un kernel que es más antiguo que el soporte compilado de la biblioteca. El mensaje de error está en el DL_SYSDEP_OSCHECK(FATAL)
macro en sysdeps/unix/sysv/linux/dl-osinfo.h
Hay una opción de tiempo de compilación para esto:
--enable-kernel=version
Esta opción actualmente solo es útil en sistemas GNU/Linux. El parámetro de versión debe tener la forma X.Y.Z y describe la versión más pequeña del kernel de Linux que se espera que admita la biblioteca generada. Cuanto más alto es el número de versión, menos código de compatibilidad se agrega y más rápido se vuelve el código.
Así que parece que, por alguna razón, está ejecutando un sistema con un núcleo antiguo pero con una glibc instalada que ya no es compatible con el núcleo antiguo. Es difícil saber cómo lo obtuvo sin información sobre qué sistema es, pero uno podría suponer que eso podría suceder si la biblioteca está actualizada pero el kernel no.
file
parece mostrar la versión mínima requerida por un ejecutable o una biblioteca (pero, por supuesto, necesita una biblioteca funcional para ejecutarlo):
/lib/x86_64-linux-gnu/libc-2.23.so: ELF 64-bit LSB shared object, x86-64, ..., for GNU/Linux 2.6.32, stripped
En mis sistemas Debian semi-actuales, la versión del kernel requerida es 2.6.32
como se indicó anteriormente en todos los archivos binarios que verifiqué, lo que hace que sea muy poco probable que surja un problema con la versión del kernel.
Prueba con esto:
cat /proc/version