Meu script cria uma chroot
gaiola para instalar o GRUB em um USB, executado como sudo, é claro:
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
Em seguida, execute alguns comandos dentro do chroot
:
chroot ${boot_partition}/ touch foo # works fine
...
Mas quando eu quero executar o comandoexit
chroot ${boot_partition}/ exit
Eu recebo:
chroot: failed to execute the command <<exit>>: No such file or directory
Por que isso acontece e há uma maneira de consertar?
Responder1
exit
é um shell integrado em vez de um executável independente, o que significa que não pode ser executado por chroot
. No entanto, mesmo que pudesse, seu comando não faria nada.
Este comando é executado /executable
no contexto de um /path
chroot:
chroot /path /executable
Isso não deixa o chamador dentro desse chroot; há uma saída implícita assim que /executable
termina a execução:
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"
Responder2
Eu encontro a mesma pergunta, minha solução é quando você executa o chroot, anexe exit depois dele:
chroot /chroot_path && exit
então, se o usuário sair do chroot, sairá de todo o shell