우분투 20.04를 사용합니다. 셸을 생성하는 명령을 수동으로 호출한 다음 이 새 셸에서 두 번째 스크립트를 호출하여 파일 시스템 덮어쓰기를 비활성화할 수 있습니다. 하지만 저는 컴퓨터를 자동으로 업데이트할 수 있도록 스크립트를 작성하고 싶습니다.
OverlayFS를 비활성화하기 위해 실행한 두 개의 스크립트는 다음과 같습니다.
스크립트 1: 영구적인 변경을 허용하는 셸 열기(overlayroot-chroot는 새 셸을 생성함)
#!/bin/bash
# Enter chroot mode, which allows one to make permanent changes to / parition
echo "Enter mood to make permanent changes"
echo "Press CTRL+D to exit when finished editing"
sudo overlayroot-chroot
스크립트 2: 변경하기
#!/bin/bash
# Disable OverlayFS
echo "Disable overlayfs (read only file system at /)"
FILE=/etc/overlayroot.conf
cat << EOF | sudo tee $FILE
overlayroot_cfgdisk="disabled"
overlayroot=""
EOF
echo "COMPLETE."
echo "Press CTRL+D to exit chroot mode."
echo "Then 'sudo reboot' for the changes to take effect."
스크립트 2는 스크립트 1에서 생성된 셸 내에서 실행되어야 합니다.
하지만 새로 생성된 셸을 실행하기 위해 명령을 어떻게 전달합니까?
답변1
그건 작동하지 않습니다. 각 스크립트는 자체 PID를 가진 새로운 쉘을 생성합니다.
script2.sh에 bash 함수를 생성하고 script1에 소스 script2를 생성하겠습니다.
script1의 script2에 있는 함수를 호출합니다.
스크립트 1
source ./script2.sh
# call the function
do_stuff
스크립트 2
do_stuff() {
echo "hello world"
}
답변2
overlayroot-chroot를 실행하는 명령을 에코하여 이 문제를 해결했습니다(이전에는 성공하지 못했습니다).
echo "source /home/path/to/overlayfs/disable.sh" | sudo overlayroot-chroot