UPD от 24 мая 2015
"этот пост устарел. Сейчас инсталлятор сам устанавливает скрипт для старт/стоп всех машин в VBox." - цитирую
коммент майнтанера ниже./UPD
Нашим виртуальным машинам не хватает способности включаться и выключаться вместе с хост системой. Особенно выключаться.
NAS работает круглосуточно и отключается при сбое питания и пр. Виртуальные машины при этом тоже надо корректно завершить или, ещё лучше, приостановить. А вот автоматический старт вместе с NAS не так очевидно необходим. Ну, разве что если на NAS в виртуалке работает что-то постоянно необходимое, вроде фейрвола.
Предполагается, что Virtualbox на NAS мы уже
поставили, на виртуальную машину
установили ОС и желаемый софт.
1) В вебгуе идём в System|Advanced|Command scripts и смотрим команду стартового скрипта виртуалки.
У меня это /mnt/Pool/VM/VirtualBox/scripts/vbox-postinit.sh . Нам понадобится маршрут к папке скриптов (моём случае это /mnt/Pool/VM/VirtualBox/scripts)
2) Запускаем в вебгуе Advanced|File Manager и идём в эту папку
Копируем файл vbox-postinit.sh под новым именем vbox-shutdown.sh (НЕ переименовываем, оригинальный файл тоже нужен)
3) Тут же через вебгуй устанавливаем на vbox-shutdown.sh точно такие же права, какие установлены на vbox-postinit.sh
4) Запускаем из вебгуя редактор файлов Advanced|File Editor, загружаем в него vbox-shutdown.sh
5) Всё, что в нём есть, стираем, заменяя на
#!/bin/bash
# pause specified VW
su vboxuser -c '/usr/local/lib/virtualbox/VBoxManage controlvm WinXP savestate'
sleep 30
Здесь выделено жирным WinXP - название приостанавливаемой виртуальной машины. Если у вас другое - используйте его. Проще, если имя машины не содержит пробелов и пр. спецсимволов.
Если у вас несколько постоянно работающих виртуальных машин - строк su vboxuser -c... будет несколько, каждая с именем соответствующей машины.
Сохраните файл vbox-shutdown.sh, откройте снова и убедитесь, что вы его действительно отредактировали.
6) Идем в System|Advanced|Command scripts через вебгуй
И добавляем наш скрипт vbox-shutdown.sh так, чтобы он был исполнен при выключении, должно получиться вот так:
7) Теперь надо испытать, что работает. Запускаем через вебгуй phpvirtualbox, запускаем в нём виртуальную машину, через VNC клиента подключаемся к ней, и делаем что-то, что не переживёт перезагрузки виртуальной машины. Например я создаю новую папку и переименовываю её, но останавливаюсь не закончив вводить новое имя
В результате после "Папк" мигает текстовый курсор.
Закрываем VNC клиент, он сейчас будет только мешать. Убеждаемся, что в браузере открыто обе вкладки (или окна). Одна с phpvirtualbox, другая с вебгуем nas4free.
Смотрим в phpvirtualbox, состояние машины - running
Идем в вебгуй nas4free, запускаем reboot и немедленно возвращаемся в phpvirtualbox
Если всё нормально - видим, как состояние машины меняется на saving с красным сердечком, а затем на saved с зелёным.
Закрываем окно phpvirtualbox. Ждём пару минут, пока перегрузится NAS, заходим в phpvirtualbox и видим, что состояние машины - saved.
Запускаем её, открываем VNC клиент и подключаемся к ней. Видим мигающий текстовый курсор в переименуемой папке.
Бинго!
8) На этом я лично пока закончил. После рестарта NAS я буду руками запускать виртуальную машину. Но если надо автоматически - то тоже можно. Для этого придется добавить в самый конец файла vbox-postinit.sh следующее
sleep 10
nohup su $STDUSER -c "VBoxManage startvm WinXP --type headless"
Понятное дело, заменив WinXP на имя вашей виртуалки
Вся конструкция описана камрадом vDmitry
здесь.
Кроме того, похожий вариант обсуждается
здесь. Там есть несколько более продвинутые скрипты. Забрать из комадной строки архив с ними не очень просто, можно сделать это так:
fetch -oscripts.tar.gz "
http://forums.nas4free.org/download/file.php?id=402&sid=792a228a6b1a95c9a0859604e9562907"
потом распаковать
tar xvf scripts.tar.gz
Но, поиграв с этими скриптами, я пришёл в выводу, что проще - лучше и оставляю это примечание на будущее, вдруг понадобится.