debian.org / О Debian Где взять Debian Поддержка Уголок разработчика Новости Wiki

Автор Тема: [HOWTO] debian + virtualbox == корректное завершение guest, aliases  (Прочитано 1752 раз)

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

Оффлайн pa_

  • Topic Author
  • Сообщений: 60
  • Jabber: pa_@jabber.ru
Добрый день.

Долго искал как можно, забыв что у тебя запущен 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. замечания\исправления\дискуссия приветствуются
« Последнее редактирование: 24 Ноябрь 2017, 13:38:54 от pa_ »
 

Оффлайн ferum

  • Сообщений: 3124
  • wheezy KDE & jessie LXDE & stretch KDE
pps. замечания\исправления\дискуссия приветствуются
Я конечно только только начал для себя приспосабливаться к systemd и да арчеводы впереди планеты всей в этом плане. Однако в debian свои нюансы. Вот на вскидку
1 пользовательские юниты создаются не в /lib/systemd/system а в /etc/systemd/system
2 демоны если таковые требуются для запуска приложения не в /etc/conf.d/ а в /etc/default
Русские дебианщики против цифрового слабоумия !
 

Оффлайн pa_

  • Topic Author
  • Сообщений: 60
  • Jabber: pa_@jabber.ru
не арчевод
Цитировать
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_

  • Topic Author
  • Сообщений: 60
  • Jabber: pa_@jabber.ru
еще докину в хаутушку своих алиасов для работы с 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
 

Теги: