Mi script crea una chroot
jaula para instalar GRUB en un USB, ejecútelo como sudo, por supuesto:
SYSTEM_DIRS=(etc bin sbin var lib lib64 usr proc sys dev tmp)
boot_partition=/media/user/boot
for dir in ${SYSTEM_DIRS[@]}; do
mount --bind /$dir ${boot_partition}/${dir}
done
Luego ejecute algunos comandos dentro de chroot
:
chroot ${boot_partition}/ touch foo # works fine
...
Pero cuando quiero ejecutar el comandoexit
chroot ${boot_partition}/ exit
Yo obtengo:
chroot: failed to execute the command <<exit>>: No such file or directory
¿Por qué sucede esto y hay una manera de solucionarlo?
Respuesta1
exit
es un shell integrado en lugar de un ejecutable independiente, lo que significa que no puede ejecutarse mediante chroot
. Sin embargo, incluso si pudiera, su comando no haría nada.
Este comando se ejecuta /executable
en el contexto de un /path
chroot:
chroot /path /executable
No deja a la persona que llama dentro de ese chroot; hay una salida implícita tan pronto como /executable
termina de ejecutarse:
mkdir -p /tmp/cr/{bin,lib,lib64}
cp -p /bin/pwd /tmp/cr/bin
cp -p $(find /lib* /usr/lib* -name 'libc.so*') /tmp/cr/lib
cp -p $(find /lib* /usr/lib* -name 'ld-linux-x86-64.so*') /tmp/cr/lib64
/bin/pwd # "/root"
chroot /tmp/cr /bin/pwd # "/"
/bin/pwd # "/root"
Respuesta2
Me encuentro con la misma pregunta, mi solución es que cuando ejecutas chroot, agregas exit después:
chroot /chroot_path && exit
entonces, si el usuario sale de chroot, saldrá de todo el shell