Salir de chroot del script

Salir de chroot del script

Mi script crea una chrootjaula 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

exites 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 /executableen el contexto de un /pathchroot:

chroot /path /executable

No deja a la persona que llama dentro de ese chroot; hay una salida implícita tan pronto como /executabletermina 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

información relacionada