在编写旨在完全自动化虚拟机 (Xen pv) 设置的 perl 脚本时,我遇到了一个可能非常简单的小问题。
使用 perl 的 chroot function 我在 guest 文件系统上做我的事情,然后我需要回到我最初的真实根。我他妈的怎么做?
脚本示例:
`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 的方法时,我发现了许多旨在退出 的脚本,已经 设置了 chroot(权限提升)。由于我在这里执行 chroot,因此这些方法不适用。
尝试了一些疯狂的事情,例如:
opendir REAL_ROOT, "/";
chdir($mount_point);
chroot($mount_point);
chdir(*REAL_ROOT);
但是不行。
更新
需要考虑的几点:
最佳答案
chrooted process() 不能通过退出来“unchroot”自己(这只会退出)。
您必须生成一个子进程,它将被 chroot。
以下内容应该可以解决问题:
if (fork())
{
# parent
wait;
}
else
{
# children
chroot("/path/to/somewhere/");
# do some Perl stuff inside the chroot...
exit;
}
# The parent can continue it's stuff after his chrooted children did some others stuff...
它仍然缺少一些错误检查的思想。
关于linux - 如何在 perl 脚本中退出 chroot?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7613325/