У меня есть много виртуальных машин в моей Ubuntu12.04, каждый раз, когда я выключаюсь или перезагружаюсь, я должен запускать их одну за другой.
Я хочу помочь в написании скрипта для автоматического запуска машин VBox при загрузке.
Вы можете использовать службу автозапуска VirtualBox. Хороший учебник, описывающий, как это сделать, размещен в блоге «Жизнь администратора-гика» .
Следующие шаги адаптированы из связанного сообщения в блоге:
Сначала вам нужно создать файл /etc/default/virtualbox
и добавить несколько переменных.
VBOXAUTOSTART_DB , который содержит абсолютный путь к каталогу базы данных автозапуска, и
VBOXAUTOSTART_CONFIG , который содержит расположение настроек конфигурации автозапуска. Файл должен выглядеть примерно так:
# virtualbox defaults file
VBOXAUTOSTART_DB=/etc/vbox
VBOXAUTOSTART_CONFIG=/etc/vbox/vbox.cfg
Теперь нам нужно создать файл /etc/vbox/vbox.cfg
и добавить
# Default policy is to deny starting a VM, the other option is "allow".
default_policy = deny
# Create an entry for each user allowed to run autostart
myuserid = {
allow = true
}
Примечание: Если имя файла vbox.cfg
не работает выше, попробуйте назвать его autostart.cfg
.
Если вы единственный пользователь, вы можете просто добавить строку default_policy = allow
в файл vbox.cfg
.
Установите права доступа к каталогу для группы vboxuser и убедитесь, что пользователи могут писать в каталог, а также придерживаться бита.
sudo chgrp vboxusers /etc/vbox
sudo chmod 1775 /etc/vbox
Добавьте каждого пользователя в группу vboxusers
.
sudo usermod -a -G vboxusers USERNAME
(замените USERNAME
именем пользователя)
ПРИМЕЧАНИЕ : Если вы изменили права доступа группы для текущего Пользователь, выйдите и снова войдите, чтобы обновить разрешения. (credit @ kR105)
Каждый пользователь, который хочет включить автозапуск для отдельных машин, должен указать путь к каталогу базы данных автозапуска с помощью
VBoxManage setproperty autostartdbpath /etc/vbox
и включить автозапуск для отдельной виртуальной машины с
VBoxManage modifyvm <uuid|vmname> --autostart-enabled on
Это создаст файл myuserid.start
в каталоге /etc/vbox
Теперь перезапустите vboxautostart-сервис, чтобы прочитать изменения .
sudo service vboxautostart-service restart
Перезагрузите систему, и ваша виртуальная машина должна запуститься
1 - Создайте файл:
nano /etc/init.d/vm-start
Вставьте это:
#!/bin/bash
/bin/echo "* Starting VMS..."
/bin/sleep 1
/bin/su validuser -c "/usr/bin/vboxmanage startvm MACHINENAME--type headless"
/bin/sleep 1
/bin/su validuser -c "/usr/bin/vboxmanage startvm MACHINENAME2--type headless"
/bin/sleep 1
2 - Сделать файл vm-start исполняемым:
chmod +x /etc/init.d/vm-start
3 - Редактировать rc.local
nano /etc/rc.local
Добавить:
#!/bin/bash
/etc/init.d/vm-start
exit 0
4 - Перезагрузить.
Для сервера Ubuntu 16.04.1 LTS я решил это, выполнив:
sudo systemctl enable rc-local.service
/etc/rc.local
su virtual_box_user -c "VBoxHeadless -startvm 'virtual_machine_name' &"
Обратите внимание, что virtual_box_user - это тот, который может видеть, что виртуальная машина (которую вы хотите запустить) выполняет команду:
VBoxManage list vms
Пример:
$ VBoxManage list vms
"virtualbox1" {2eb3ba3b-bcb3-4515-95d9-d33bce214c28}
"virtualbox2" {62365634-f2q4-40c0-b4ed-22f4ab84441a}
Измененный /etc/rc.local
должен выглядеть следующим образом
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
su bob -c "VBoxManage startvm 'virtualbox1' --type headless &"
su bob -c "VBoxManage startvm 'virtualbox2' --type headless &"
exit 0
Если вы не выберете правильного владельца virtualbox, вы должны увидеть ошибку, набрав команду:
sudo systemctl status rc-local.service
Я надеюсь, что это может помочь
Так я запускаю свой Centos (имя моей виртуальной машины), когда моя хост-машина перезагружается. Я использую crontab для этой работы. Вот моя запись в crontab:
@reboot VBoxHeadless --startvm "Centos" &
Вы также можете получить описанный здесь менеджер сессий gnome. Gnome Session Manager Он находится в центре программного обеспечения или вы можете просто зайти в терминал и набрать sudo apt-get install gnome-session-common
Далее вы можете создать небольшой скрипт для запуска и использовать менеджер сессий gnome для Начни это. Вот небольшой пример сценария, который поможет вам ...
#!/bin/sh
#vboxmanage startvm "my virtual machine" --type=headless|gui|sdl (one of those)
# So if your username is user, and virtualbox put your VMs in the default location, and you want headless...
vboxmanage startvm '/home/user/VirtualBox VMs/myvmname' --type=gui
Это можно сделать с помощью интерфейса управления VirtualBox. Просто запустите следующий скрипт при запуске.
#!/bin/bash
VMUSER="vmuser"
VMNAME="RedHatVM" #also you can put UUID in this variable (VMNAME="4ec6acc1-a232-566d-a040-6bc4aadc19a6")
case "$1" in
start)
echo "===Starting VirtualBox VM==="
sudo -H -u $VMUSER VBoxManage startvm "$VMNAME" --type headless
;;
stop)
echo "===Saving state of Virtualbox VM==="
sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" savestate
sleep 20
;;
shutdown)
echo "===Shutting down Virtualbox VM==="
sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" acpipowerbutton
sleep 20
;;
reset)
echo "===Resetting VirtualBox VM==="
sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" reset
;;
status)
echo -n "VMNAME->";sudo -H -u $VMUSER VBoxManage showvminfo "$VMNAME" --machinereadable |grep "VMState="| cut -d "=" -f2
;;
echo "Usage: /etc/init.d/VMscript {start|stop|shutdown|reset|status}"
exit 1
;;
esac
exit 0
Там есть хороший учебник для получения дополнительной информации.
Аддон к @kdmurray ответу.
Если вы получаете сообщение об ошибке:
VBoxManage modifyvm <uuid|vmname> --autostart-enabled on
Чтобы решить эту проблему, мне пришлось вручную создавать файлы «username» .start и «username» .stop с:
sudo touch "username".start
sudo touch "username".stop
И измените владельца с помощью:
sudo chown "username" "username".start
sudo chown "username" "username".stop
перезапустите:
VBoxManage modifyvm <uuid|vmname> --autostart-enabled on
, затем перезапустите службу:
sudo service vboxautostart-service stop
sudo service vboxautostart-service start
проверьте, все ли в порядке с:
top
и вы должны увидеть процесс "VBox ..." в списке, если виртуальная машина запущена
Я нашел более простой способ в Ubuntu 16.04 с VBox 5.1.34.
Находясь в VBox, щелкните правой кнопкой мыши на работающей или неактивной виртуальной машине в списке и выберите «Создать ярлык на рабочем столе». Как только вы увидите значок на рабочем столе, откройте его любым инструментом, который позволит вам увидеть базовый Команда VBox создана (в моей системе я щелкаю правой кнопкой мыши и выбираю «свойства»). Скопируйте это в буфер обмена.
Откройте программу, чтобы обновить «автозагрузку приложений» и создайте новое приложение, которое запускается во время загрузки, вставляя в команде, которую вы скопировали из ссылки на рабочем столе, созданной VirtualBox.
В дополнение к хорошему описанию службы vboxautostart выше, вы можете сделать
VBoxManage modifyvm server --autostop-type savestate
для автоматической остановки гостя при завершении работы. Для Ubuntu 14.04 мне пришлось добавить sleep 30 в раздел остановки vboxautostart-service, чтобы он ожидал, пока guest не будет полностью сохранен.
После многих несчастных часов, пытаясь заставить работать процедуры из из kdmurray выше, я безуспешно нашел метод, который работал просто.
Сначала мой Linux-хост (Mint 17) был настроен во время загрузки для автоматического входа в мою основную учетную запись.
Во-вторых, я использовал средства VirtualBox GUI (v4.3.12), чтобы создать ярлык для каждой виртуальной машины на рабочем столе. {щелкните правой кнопкой мыши виртуальную машину в левом столбце & amp; выберите «Создать ярлык на рабочем столе»}
Далее: я уже обнаружил, что при вызове Меню-> Центр управления -> Автозагрузка приложений -> Добавить и добавлении ярлыков на рабочем столе были получены файлы, которые не работали, я заметил из другой ответ на этой странице, что расположение стартапов - /home/USERNAME/.config/autostart, поэтому я щелкнул правой кнопкой мыши по каждому из ярлыков виртуальной машины на рабочем столе, а затем вставил их в эту папку, переписав более ранние файлы дерьма. Теперь они разработали «красивые» иконки VirtualBox.
И, конечно же, при перезапуске главного компьютера эти 3 виртуальные машины запускались автоматически.
:-)
Билл Уильямс
PS: увы, у меня все еще чего-то не хватает, потому что часто виртуальные машины не запускаются при загрузке, вместо этого они генерируют диалог ошибки окно, в котором написано, что они заблокированы, даже если я сказал им отключиться до перезагрузки хоста.
Вы можете использовать vboxmanage startvm "my virtual machine" --type=headless|gui|sdl
(один из них). Используйте «безголовый», если они являются серверами, к которым вы подключаетесь не с помощью графического интерфейса.
Чтобы на самом деле запускать эти команды в нужное время во время загрузки, вам нужно прочитать об Upstart.
У меня были похожие несчастные случаи, когда я пытался выполнить эту операцию на ванильном LTS.
~$ cat /etc/os-release
NAME="Ubuntu"
VERSION="14.04.1 LTS, Trusty Tahr"
В этой версии файл ключа /etc/init.d/vboxautostart-service не был установлен.
Насколько мне известно, все VitualBox и требования были введены с помощью apt-get, поэтому я не могу сказать, почему файл 'vboxautostart-service' также не был предоставлен. Но чтобы преодолеть это, вот мое обновление к посту kdmurray.
1) Для меня существовал файл / etc / default / virtualbox . Поэтому необходимо добавить переменные:
VBOXAUTOSTART_DB=/etc/vbox
VBOXAUTOSTART_CONFIG=/etc/vbox/autostart.cfg
2) Необходимо создать /etc/vbox/autostart.cfg , как указано в OP.
6b) Нужно получить скрипт vboxautostart-service и сделать его исполняемым.
cd /etc/init.d/
sudo wget http://www.virtualbox.org/browser/vbox/trunk/src/VBox/Installer/linux/vboxautostart-service.sh?format=raw -O vboxautostart-service
sudo chmod +x vboxautostart-service
6c) Оповещение контроллера rc.d, но я использовал 24 в качестве времени запуска. Ставлю только 20 и он не запускается. Возможно, он работал еще до того, как работал virtualbox.
sudo update-rc.d vboxautostart-service defaults 24 24
Затем перезагрузка запустила виртуальную машину правильно.
Чтобы запустить ВМ при входе в нашу сессию, мы можем определить файл .desktop:
Когда этот файл был скопирован или перемещен в наш каталог автозапуска, он будет выполнен после того, как мы войдем в систему:
Запуск Virtual Box в пространстве пользователя может помочь избежать нежелательных побочных эффектов запуска их во время загрузки (например, виртуальная машина запускается как root, время загрузки невероятно увеличивается, ...).