chroot: no se pudo ejecutar el comando '/ bin / bash': no ​​existe tal archivo o directorio

55

Cuando ejecuto el chrootcomando aparece un error:

failed to run command ‘/bin/bash’: No such file or directory 
USUARIO3254789
fuente
1
¿Se puede considerar la pregunta como un puro duplicado de unix.stackexchange.com/questions/76490/… ? Las respuestas a las preguntas representan una posible solución para el problema que definitivamente vale la pena un enlace, pero eso no hace que la pregunta sea un duplicado.
Karl Richter
1
El problema para mí fue que estaba usando un Live CD de 32 bits para montar un disco del sistema operativo de 64 bits y hacer un chroot en él. Un kernel de 32 bits no puede ejecutar bash de 64 bits. La solución fue obtener un Live CD de 64 bits. (El duplicado vinculado no tiene ninguna relación).
Leons
Esto no es un duplicado, a pesar de que la explicación del origen del problema es aplicable a ambas preguntas. La pregunta que se marca como duplicado es sobre bibliotecas faltantes en una instalación genérica, mientras que esta pregunta es específicamente sobre un error que ocurre en un entorno chrooteado.
bschlueter

Respuestas:

34

Este error significa que no hay /bin/bashdirectorio dentro de chroot . Asegúrate de señalar dónde bashestá el ejecutable (u otro shell) en el chrootdirectorio.

Si tienes /mnt/somedir/usr/bin/bashentonces ejecutarchroot /mnt/somedir /usr/bin/bash

phoops
fuente
2
Hay un archivo / bin / bash en la carpeta
rootfs
2
Puede ser causado por algún comando / línea defectuoso en /root/.bashrco /root/.bash_profileen su chroot. ¿Puedes cambiar temporalmente el nombre de estos archivos? ¿También puede asegurarse de que bashes ejecutable ( chmod +x /chroot/bin/bash)?
phoops
aspade @ home-ba: ~ / DebianArm $ sudo chmod + x rootfs / bin / bash. aspade @ home-ba: ~ / DebianArm $ sudo chroot rootfs. chroot: error al ejecutar el comando '/ bin / bash': no
existe
38
Me lo imaginé. bin / bash está ahí, pero no tenía / lib y / lib64 dentro. / bin / bash depende (ofc) de libc, ld-linux, libdl, etc ... Tan simple cp -a / usr rootfs /, cp -a / lib rootfs /, cp -a / lib64 rootfs / fue suficiente. (Puede montar y unir los de ofc, pero los copié, porque quiero ejecutar algo peligroso, que podría dañar esos archivos en rootfs). El mensaje de chroot podría ser más descriptivo. "no existe tal archivo o directorio" realmente significa "No puedo ejecutar este sh ...".
Dalibor Filus
1
@EmilVatai agregó :-)
Dalibor Filus el
13

Tenía /bin/bashdentro del directorio chrooteado, pero no tenía / lib y / lib64 dentro. El mensaje de chroot podría ser más descriptivo. "no existe tal archivo o directorio" realmente significa "No puedo ejecutar esto ...".

/bin/bashdepende, por supuesto, de libc, ld-linux, libdl, etc., puede usar ldd /bin/bashpara ver qué bibliotecas necesita.

1) Puede mount -o bindestos directorios en chroot 2) O puede copiar estas bibliotecas en chroot, si no confía en el entorno chroot para no corromperlos, así:

cp -a /usr rootfs/
cp -a /lib rootfs/
cp -a /lib64 rootfs/
Dalibor Filus
fuente
esto creará duplicados ... que no está optimizado cuando tenemos muchas configuraciones
yellowandred
1
Esto no crea duplicados si usa el primer método (marcado como 1)). El segundo es útil si se cambia a un entorno no confiable. Por ejemplo, tiene una partición con un troyano o algo así.
Dalibor Filus
4

chrootintenta iniciar el shell que está configurado en su $SHELLvariable de entorno de forma predeterminada, pero lo busca en su nuevo directorio raíz, que parece no contener /bin/bash, por lo que no puede iniciarse.

Puede indicarle a chroot que inicie otro programa dentro de la nueva raíz simplemente agregándolo como parámetro:

chroot /your/new/root /bin/foo --options...

Tenga en cuenta que la ruta del comando se interpreta dentro de su nueva raíz, por lo que, en este ejemplo, el programa llamado está de hecho en/your/new/root/bin/foo

crater2150
fuente
2
Hay un archivo / bin / bash en el archivo rootfs, ¿cuál es el problema
USER3254789
1
a quien haya votado en contra: aunque este no fue el problema en el caso del afiche, esta es una explicación válida y no improbable del error en la pregunta. Si ve algún otro problema, deje un comentario cuando rechace algo.
crater2150
2

Recibía el mismo error al intentar ssh a una cuenta chrooteada en un servidor remoto. En mi caso, me faltaba el siguiente archivo en el directorio remoto lib64. El servidor es Centos6.9

ld-linux-x86-64.so.2

Se solucionó ejecutando lo siguiente:

cp /lib64/ld-linux-x86-64.so.2 /secure/jail/lib64/
Shawn
fuente
no lo arregló para mí, pero al cp -r /lib /lib64 /secure/jailsolucionarlo, necesitaba algo de lib y lib64, y no me molesté en averiguar exactamente qué. (probablemente porque tenía habilitado multiarch)
hanshenrik
0

necesita ejecutar ldd contra bash ldd $(which bash), entonces puede encontrar una dependencia que falta, por ejemplo, si no montó / copió lib64, para 64 sistemas, se solucionará este error.

Error
fuente
0

En caso de que esté haciendo una compilación cruzada, debe usar el simulador qemu que puede ejecutar / mnt / somedir / bin / bash una vez que copie qemu-arm-static (estoy haciendo esto para armhf) en / mnt / somedir / usr / bin podrás hacer chroot.

Mira esto para más detalles: https://blog.lazy-evaluation.net/posts/linux/debian-armhf-bootstrap.html

Jainam MJ
fuente
1
No hay indicios de que esto sea lo que el usuario intenta hacer.
Kusalananda
Los errores son los mismos para ambos casos. Si alguien que está haciendo una compilación cruzada enfrenta este problema, puede encontrar la respuesta aquí.
Jainam MJ