gpt4 book ai didi

linux - 如何退出 perl 脚本中的 chroot?

转载 作者:IT王子 更新时间:2023-10-29 00:47:45 30 4
gpt4 key购买 nike

在编写旨在完全自动化虚拟机 (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...]

我试过exit;,但显然会退出整个脚本。

在寻找退出 chroot 的方法时,我发现了一些旨在退出已经 设置 chroot(权限升级)的脚本。由于我在这里执行 chroot,因此这些方法不适用。

尝试了一些疯狂的事情,比如:

opendir REAL_ROOT, "/";
chdir($mount_point);
chroot($mount_point);
chdir(*REAL_ROOT);

但是不行。

更新需要考虑的几点:

  • 我无法将脚本拆分为多个文件。 (愚蠢的理由,但真的,我不能)
  • chroot 部分涉及使用脚本先前收集的大量数据(在 chroot 之前),强制不需要在 chroot 中使用另一个脚本。
  • 使用 open、system 或反引号都不好,我需要运行命令并根据输出(不是退出代码,实际输出)做其他事情。
  • chroot 之后的步骤取决于 chroot 内部所做的事情,因此我需要拥有我在内部和外部定义或更改的所有变量。
  • Fork 是可能的,但我不知道正确处理与 child 之间的信息传递的好方法。

最佳答案

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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com