Saia do chroot do script

Saia do chroot do script

Meu script cria uma chrootgaiola 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 /executableno contexto de um /pathchroot:

chroot /path /executable

Isso não deixa o chamador dentro desse chroot; há uma saída implícita assim que /executabletermina 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

informação relacionada