При написании Perl-скрипта, предназначенного для полной автоматизации настройки виртуальных машин (Xen pv), я столкнулся с небольшой, возможно, очень простой проблемой.
Использование perl's 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.
- Использование open, system или backticks нехорошо, мне нужно запускать команды и на основе вывода (не код выхода, фактический вывод) делать другие вещи.
- Действия после chroot зависят от того, что было сделано внутри chroot, поэтому мне нужно иметь все переменные, которые я определил или изменил, находясь внутри, снаружи.
- Возможна вилка, но я не знаю, как правильно обрабатывать передачу информации от ребенка к ребенку.