[HOWTO] debian + virtualbox == корректное завершение guest, aliases

Автор pa_, 02 августа 2015, 22:43:32

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

pa_

Добрый день.

Долго искал как можно, забыв что у тебя запущен guest в фоне, корректно его завершить\сохранить состояние если выключается host и при включении компьютера автоматически запустить. (без init скриптов, sleep, etc)

Краткая инструкция корректного запуска, а главное останова guest при выключении host

Инструкция основана на:
(a) https://wiki.archlinux.org/index.php/VirtualBox#Virtual_machine_launch_management
(b) http://www.ericerfanian.com/automatically-starting-virtualbox-vms-on-archlinux-using-systemd/
(c) https://unix.stackexchange.com/questions/28611/how-to-automatically-start-and-shut-down-virtualbox-machines

В этом нам поможет всеми любимый и ненавистный systemd =)

Создаем файл
touch virtbox@.service

В него заносим следующие строки

[Unit]
Description=VBox Virtual Machine %I Service
Requires=systemd-modules-load.service
After=systemd-modules-load.service

[Service]
User=пользователь
Group=vboxusers
RemainAfterExit=yes
KillMode=none
ExecStart=/usr/bin/VBoxManage startvm %I --type headless
ExecStop=/usr/bin/VBoxManage controlvm %I savestate

[Install]
WantedBy=multi-user.target reboot.target halt.target poweroff.target

Пользователь в строке "User=пользователь" должен входить в группу "Group=vboxusers"
sudo usermod -a -G vboxusers [username]

Строки (как пишут в оригинале)
RemainAfterExit=true
KillMode=none

на случай если несколько машин и если они не корректно закрываются, у меня добавлено изначально.

Копируем наш файл в папку и даем права:

root@xx:/lib/systemd/system# getfacl virtbox@.service
# file: virtbox@.service
# owner: root
# group: root
user::rw-
group::r--
other::r--


Далее выполняем
sudo systemctl enable virtbox@Имя_Вашей_ВМашины
после этой команды создаются симлинки, согласно "WantedBy=multi-user.target reboot.target halt.target poweroff.target"

/etc/systemd/system/multi-user.target.wants
/etc/systemd/system/reboot.target.wants
/etc/systemd/system/halt.target.wants
/etc/systemd/system/poweroff.target.wants


Как пример

sudo systemctl enable virtbox@www
***
virtbox@www.service -> /lib/systemd/system/virtbox@.service
и т.д.

Чтобы сразу запустить гостя можно выполнить
sudo systemctl start virtbox@Имя_Вашей_ВМашины

На этом всё.




ps. в оригинале строка
WantedBy=multi-user.target reboot.target halt.target poweroff.target
имеет вид
WantedBy=multi-user.target
пришлось добавить, т.к. у меня не срабатывало, по какой то причине, если гасить host с кнопки power button, возможно перебдел, попробуйте со строкой как в оригинале

проверял останавливать host следующими способами

#reboot
#init 0
power button

пока полет нормальный




pps. замечания\исправления\дискуссия приветствуются

ferum

Цитата: pa_ от 02 августа 2015, 22:43:32pps. замечания\исправления\дискуссия приветствуются
Я конечно только только начал для себя приспосабливаться к systemd и да арчеводы впереди планеты всей в этом плане. Однако в debian свои нюансы. Вот на вскидку
1 пользовательские юниты создаются не в /lib/systemd/system а в /etc/systemd/system
2 демоны если таковые требуются для запуска приложения не в /etc/conf.d/ а в /etc/default
Русские дебианщики против цифрового слабоумия !

pa_

не арчевод
Цитировать
1 пользовательские юниты создаются не в /lib/systemd/system а в /etc/systemd/system
в оригинальных статьях написано как раз таки про /etc/systemd/system, но у меня там (джесси) одни линки на юниты расположенные в /lib/systemd/system, потому решил бросить туда, после enable, как раз таки создались линки и легли в /etc/systemd/system

возможно не прав

Цитировать
2 демоны если таковые требуются для запуска приложения не в /etc/conf.d/ а в /etc/default
о каких демонах речь ? вроде про них ничего не написано
в /etc/default , на сколько помню, расположены файлы в которых можно править аргументы запуска и другие настройки демонов\программ

pa_

еще докину в хаутушку своих алиасов для работы с virtualbox из консоли

установка скаченного расширения

function vbpack() {
    su - -c "VBoxManage extpack uninstall 'Oracle VM VirtualBox Extension Pack' && VBoxManage extpack install `pwd`/$1"
}


посмотреть информацию о состоянии машины и какие гости существуют

alias vminf="echo -e '\n -- state machines\n'; vboxmanage list runningvms -l | grep -e ^Name: -e ^State: | sed s/\ \ //g | cut -d: -f2-; echo -e '\n --'" # echo state machines
alias vbinf="echo -e '\n -- list all machines\n';vboxmanage list vms; echo -e '\n --'" # all machines


пример остановки, запуска, etc гостя в частности под названием "winXP"

alias w1on="echo -e '\n -- run winXP, rdp port 33895, vnc port 59005\n';vboxmanage startvm winXP --type headless; echo -e '\n --'" # on winXP nogui
alias w1of="echo -e '\n -- save & stop winXP\n';vboxmanage controlvm winXP savestate; echo -e '\n --'" # save state & stop winXP
alias w1off="echo -e '\n -- bye winXP\n';vboxmanage controlvm winXP poweroff; echo -e '\n --'" # off winXP
alias w1pa="echo -e '\n -- pause winXP\n';vboxmanage controlvm winXP pause; echo -e '\n --'" # pause winXP
alias w1go="echo -e '\n -- resume winXP\n';vboxmanage controlvm winXP resume; echo -e '\n --'" # go on pause winXP