脚本 chroot,如何操作?

脚本 chroot,如何操作?

因此我正在看:

https://help.ubuntu.com/community/LiveCDCustomizationFromScratch

并在 Bash 脚本中尝试执行以下操作:

sudo chroot chroot

mount none -t proc /proc
mount none -t sysfs /sys
mount none -t devpts /dev/pts

运行脚本会进入 shell sudo chroot chroot。当我看到exit它时,我收到了有关挂载需要 root 的预期警告。有没有办法将所有这些保留在一个 shell 脚本中?

编辑:我希望这是一个可重复的过程,这就是为什么我要编写整个脚本而不是一次又一次地输入它。

答案1

您应该采用像管道这样的简单解决方案:

cat << EOF | chroot chroot
#do something
EOF

EOF 中的任何内容都会在你的 chrooted 目录中运行,如果你愿意,也可以使用 sudo:

cat << EOF | sudo chroot chroot
ls /
EOF

答案2

创建第二个脚本(例如chroot.sh)并将其放在您的chroot/文件夹中。

现在将原始脚本中的命令编辑如下:

chroot chroot/ ./chroot.sh

现在脚本chroot.sh将在你的chroot.

答案3

关于chroots 和/proc/sys以及/dev/pts,这三个文件系统是由内核提供的,因此无论您是在 chroot 内还是从外部挂载,它们都保持不变。事实上,您会在前面的说明中看到:

sudo mount --bind /dev chroot/dev

/dev由内核填充,但不是内核提供的文件系统,因此必须进行绑定挂载。因此,在实践中,您会发现在进入 chroot 之前使用绑定挂载(或其他方式)挂载它也同样有效(假设sudo):

for i in dev proc sys dev/pts
do
    mount -o bind /$i chroot/$i
done
chroot chroot
for i in dev/pts proc sys dev
do
    umount -chroot/$i
done
# or
mount -o bind /dev chroot/dev
mount -t sysfs none chroot/sys
mount -t proc none chroot/proc
mount -t devpts none chroot/dev/pts
chroot chroot
for i in dev/pts proc sys dev
do
    umount -chroot/$i
done

相关阅读:

答案4

我认为这并不是说你应该把这些命令放到脚本里,而是说你应该键入它们;即mountsudoshell 中输入命令。

相关内容