Как автоматически запускать машины Virtual Box при загрузке?

53

У меня в Ubuntu12.04 много виртуальных машин, каждый раз, когда я выключаюсь или перезагружаюсь, я должен запускать их одну за другой.

Я хочу помочь в написании скрипта для автоматического запуска машин VBox при загрузке.

Maythux
источник
@SergiyKolodyazhnyy Этот вопрос ни в коем случае не дублирует этот вопрос.
Мухаммед бин Юсрат

Ответы:

51

Вы можете использовать сервис автоматического запуска VirtualBox. Хороший учебник, описывающий, как это сделать, размещен в блоге «Life of a Geek Admin» .

Следующие шаги адаптированы из связанного сообщения в блоге:

  1. Сначала вам нужно создать файл /etc/default/virtualboxи добавить несколько переменных.

    VBOXAUTOSTART_DB, который содержит абсолютный путь к каталогу базы данных автозапуска, и
    VBOXAUTOSTART_CONFIG, который содержит расположение параметров конфигурации автозапуска. Файл должен выглядеть примерно так:

    # virtualbox defaults file
    VBOXAUTOSTART_DB=/etc/vbox
    VBOXAUTOSTART_CONFIG=/etc/vbox/vbox.cfg
  2. Теперь нам нужно создать /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файл.

  3. Установите права доступа к каталогу для группы vboxuser и убедитесь, что пользователи могут писать в каталог, а также прикреплять биты.

    sudo chgrp vboxusers /etc/vbox
    sudo chmod 1775 /etc/vbox
  4. Добавьте каждого пользователя в vboxusersгруппу.

    sudo usermod -a -G vboxusers USERNAME

    (заменить USERNAMEна имя пользователя)

ПРИМЕЧАНИЕ . Если вы изменили разрешения группы для текущего пользователя, выйдите из системы и снова войдите в нее, чтобы обновить разрешения. (кредит @ кР105)

  1. Каждый пользователь, который хочет включить автозапуск для отдельных машин, должен указать путь к каталогу базы данных автозапуска с помощью

    VBoxManage setproperty autostartdbpath /etc/vbox

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

    VBoxManage modifyvm <uuid|vmname> --autostart-enabled on

    Это создаст myuserid.start файл в /etc/vboxкаталоге

  2. Теперь перезапустите vboxautostart-service, чтобы прочитать изменения.

    sudo service vboxautostart-service restart
  3. Перезагрузите систему и ваша виртуальная машина должна запуститься

kdmurray
источник
как запустить конкретную виртуальную машину с помощью сценария запуска
Beginner
1
Мои 14.04 утверждают, что такой службы, как vboxautostart-service, нет, вы это тестировали?
Arronical
@Arronical ОП и инструкции, из которых был получен ответ, были предназначены для Ubuntu 12.04. YMMV с версиями после этого.
kdmurray
Оказывается, это virtualbox 4.3.10 не загружает сценарии инициализации 14.04, но ответ ndasuser ниже помог мне исправить это. +1 все вокруг!
Arronical
Я пытался заставить это решение работать на Ubuntu 15.10 безуспешно .. Я прекратил использовать этот пост freesoftwareservers.com/index.php/2015/10/24/… .. возможно, не правильный подход, но он работает
mozart_ar
15

У меня были похожие несчастные случаи, когда я пытался выполнить эту операцию на ванильном 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.

6б) Нужно получить скрипт 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

Затем перезагрузка запустила виртуальную машину правильно.

ndasusers
источник
1
В версии 5.2 вы должны отредактировать vboxautostart-service и заменить vboxdrvв # Required Start/ # Required Stopстроки на virtualbox. Кажется, они переименовали службу, поэтому ОС не может правильно определить приоритеты запуска / остановки. Я думаю, вам не нужен шаг 6с, если вы заменили эти строки.
рыбий кость
Огромное спасибо @fishbone, твой комментарий был трюком, которого мне не хватало
Хайро Андрес Веласко Ромеро
6

Вы можете использовать vboxmanage startvm "my virtual machine" --type=headless|gui|sdl(один из них). Используйте «безголовый», если они являются серверами, к которым вы подключаетесь не с помощью графического интерфейса.

Чтобы на самом деле запустить эти команды в нужное время во время загрузки, вам нужно прочитать об Upstart.

Джо-Эрленд Шинстад
источник
6

После многих несчастных часов, пытаясь заставить работать процедуры из kdmurray выше, я безуспешно нашел способ, который работал просто.

Сначала мой хост Linux (Mint 17) был настроен во время загрузки для автоматического входа в мою основную учетную запись.

Во-вторых, я использовал средства VirtualBox GUI (v4.3.12), чтобы создать ярлык для каждой виртуальной машины на рабочем столе. {щелкните правой кнопкой мыши виртуальную машину в левом столбце и выберите «Создать ярлык на рабочем столе»}

Далее: я уже обнаружил, что при вызове Меню-> Центр управления -> Запускаемые приложения -> Добавить и добавлении ярлыков на рабочем столе были получены файлы, которые не работали, я заметил из другого ответа на этой странице, что местоположение стартапов - / home /USERNAME/.config/autostart, поэтому я щелкнул правой кнопкой мыши по каждому ярлыку виртуальной машины на рабочем столе, а затем вставил их в эту папку, переписав более ранние файлы дерьма. Теперь они разработали «красивые» иконки VirtualBox.

И, конечно же, при перезапуске хост-компьютера 3 виртуальные машины запускались автоматически.

:-)

Билл Уильямс

PS: увы, у меня все еще чего-то не хватает, потому что часто виртуальные машины не запускаются при загрузке, вместо этого они генерируют диалоговое окно с сообщением об ошибке, в котором говорится, что они заблокированы, даже если я сказал им отключиться до перезагрузки хоста.

Билл Уильямс
источник
1
К вашему сведению нет "ответ 5". Число, которое вы видите слева от каждого ответа, является общим количеством голосов. Сказав это, ваш хороший альтернативный метод GUI. Спасибо за вклад.
Хмаяг
5

В дополнение к хорошему описанию vboxautostart-службы выше, вы можете сделать

VBoxManage modifyvm server --autostop-type savestate

автоматически останавливать гостя при выключении. Для Ubuntu 14.04 мне пришлось добавить спящий режим 30 в раздел остановки vboxautostart-service, чтобы он ожидал, пока guest не будет полностью сохранен.

Майкл Шлютер
источник
2

Я нашел более простой способ под Ubuntu 16.04 с VBox 5.1.34.

Находясь в VBox, щелкните правой кнопкой мыши на работающей или неиспользуемой виртуальной машине в списке и выберите «Создать ярлык на рабочем столе». Как только вы увидите значок на рабочем столе, откройте его любым инструментом, который позволит вам увидеть основную команду, созданную VBox (на моем Система, я щелкаю правой кнопкой мыши и выбираю «Свойства») Скопируйте это в буфер обмена.

Откройте программу для обновления «автозапуска приложений» и создайте новое приложение, которое запускается во время загрузки, вставив команду, скопированную из ссылки на рабочем столе, созданной VirtualBox.

Дэйв Надь
источник
1

Чтобы запустить ВМ при входе в нашу сессию, мы можем определить файл .desktop:

Когда этот файл был скопирован или перемещен в наш каталог автозапуска, он будет выполнен после того, как мы войдем в систему:

Запуск Virtual Box в пользовательском пространстве может помочь избежать нежелательных побочных эффектов запуска их во время загрузки (например, виртуальная машина работает от имени пользователя root, время загрузки невероятно увеличивается, ...).

Takkat
источник
1

Это можно сделать с помощью интерфейса управления 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

Есть хороший учебник для получения дополнительной информации.

Артекс
источник
Добро пожаловать .. Пожалуйста, скопируйте / вставьте важную информацию по ссылке
шторм
1

Аддон к ответу @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 ..." в списке, если виртуальная машина работает

Solata
источник
0

Вы также можете получить описанный здесь менеджер сессий 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
Скотт Гудгейм
источник
0

Вот так я запускаю свой Centos (имя моей виртуальной машины), когда моя хост-машина перезагружается. Я использую crontab для этой работы. Вот моя запись в crontab:

@reboot VBoxHeadless --startvm "Centos" &
user514700
источник
0

Для сервера Ubuntu 16.04.1 LTS я решил это, выполнив:

Сначала активируйте rc-local.service

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

Я надеюсь, что это может помочь

Алессандро Чимбелли
источник
0

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
  • Замените «validuser» на ваше имя пользователя
  • Замените «MACHINENAME» на имя вашей виртуальной машины.
  • Если вам нужно запустить более 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 - перезагрузка.

Лукас Катани
источник