스크립트에서 chroot 종료

스크립트에서 chroot 종료

내 스크립트는 chrootGRUB를 USB에 설치하기 위한 케이지를 생성하고 물론 sudo를 사용하여 실행합니다.

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

그런 다음 내부에서 몇 가지 명령을 실행하십시오 chroot.

chroot ${boot_partition}/ touch foo # works fine
...

하지만 명령을 실행하고 싶을 때exit

chroot ${boot_partition}/ exit

나는 얻다:

chroot: failed to execute the command <<exit>>: No such file or directory

왜 이런 일이 발생하며 해결 방법이 있습니까?

답변1

exit은(는) 독립 실행형 실행 파일이 아닌 내장 셸입니다 chroot. 즉, 에서 실행할 수 있더라도 명령은 아무 작업도 수행하지 않습니다.

이 명령은 /executablechroot 컨텍스트에서 실행됩니다 /path.

chroot /path /executable

호출자를 chroot 내에 두지 않고 완료되면 암시적으로 종료됩니다 /executable.

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"

답변2

나도 같은 문제가 있었는데, 내 해결책은 chroot를 수행하고 그 뒤에 종료를 추가하는 것이었습니다.

chroot /chroot_path && exit

그런 다음 사용자가 chroot를 종료하면 전체 쉘이 종료됩니다.

관련 정보