虽然编写一个perl脚本旨在完全自动化虚拟机(XenPv)的设置,但是我遇到了一个小问题,可能很简单。如何退出perl脚本中的chroot?
使用Perl的chroot function我在客人文件系统上做我的事情,然后我需要回到我最初的真正的根。我该怎么做?
脚本示例:
`mount $disk_image $mount_point`;
chdir($mount_point);
chroot($mount_point);
#[Do my things...]
#<Exit chroot wanted here>
`umount $mount_point`;
#[Post install things...]
我已经试过退出;但显然退出整个脚本。
正在寻找退出chroot的方式我发现了一些脚本,它们的目标是退出已经 setup chroot(特权升级)。由于我在这里做chroot这些方法不适用。
尝试了一些疯狂的事情,如:
opendir REAL_ROOT, "/";
chdir($mount_point);
chroot($mount_point);
chdir(*REAL_ROOT);
但没有去。
UPDATE 几点考虑:
- 在多个文件中我不能分割的脚本。 (愚蠢的原因,但真的,我不能)
- chroot部分涉及到使用脚本较早收集的大量数据(在chroot之前),强制需要不在chroot中启动另一个脚本。
- 使用开放,系统或反引号是不好的,我需要运行命令和基于输出(不是退出代码,实际输出)做其他事情。
- chroot之后的步骤取决于chroot内部完成的工作,因此我需要在内部和外部定义或更改所有变量。
- 叉是可能的,但我不知道一个好的方法来正确处理从孩子到孩子的信息传递。
我想你需要到餐桌chroot的一部分,等待它的退出。 –