Як автоматично запускати машини Virtual Box при завантаженні?


53

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

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



@SergiyKolodyazhnyy Це питання жодним чином не є його копією.
Мухаммед бен Юсрат

Відповіді:


51

Ви можете скористатися послугою автоматичного запуску VirtualBox. Хороший підручник, що описує, як це зробити, розміщено в блозі "Життя адміністратора прислужника" .

Наступні кроки адаптовані із пов’язаної публікації блогу:

  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ім'ям користувача)

ПРИМІТКА . Якщо ви змінили групові дозволи для поточного користувача, вийдіть із системи та знову ввійдіть, щоб оновити дозволи. (кредит @ kR105)

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

    VBoxManage setproperty autostartdbpath /etc/vbox

    і включити автозапуск для окремого VM за допомогою

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

    Це створить myuserid.start файл у /etc/vboxкаталозі

  2. Тепер перезапустіть сервіс vboxautostart для читання змін.

    sudo service vboxautostart-service restart
  3. Перезавантажте систему, і ваш VM повинен запуститися


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

1
Мій 14.04 стверджує, що немає такої послуги, як "vboxautostart-service", ви протестували це?
Арронічний

@Arronical ОП та інструкції, з яких отримано відповідь, були для Ubuntu 12.04. YMMV з версіями після цього.
kdmurray

Виявляється, він virtualbox 4.3.10 не завантажує скрипти init 14.04, але відповідь ndasuser нижче допомогла мені це виправити. + 1 круглий круг!
Арронічний

Я намагався змусити це рішення працювати на 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 існував для мене. Тому потрібно додати vars:

VBOXAUTOSTART_DB=/etc/vbox
VBOXAUTOSTART_CONFIG=/etc/vbox/autostart.cfg

2) Потрібно створити /etc/vbox/autostart.cfg, як зазначено в ОП.

6b) Потрібно отримати скрипт служби vboxautostart і зробити його виконуваним.

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

Потім перезавантаження запустила VM правильно.


1
У версії 5.2 вам потрібно відредагувати vboxautostart-service та замінити vboxdrvв # Required Start/ # Required Stopрядках на virtualbox. Здається, вони перейменували послугу, тому ОС не може правильно визначити пріоритети запуску / зупинки. Я думаю, що вам не потрібен крок 6с, якщо ви замінили ці рядки.
рибна кістка

Дякую тобі @fishbone, твій коментар не вистачає мені трюку
Jairo Andres Velasco Romero

6

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

Щоб реально запустити ці команди в потрібний час під час завантаження, вам потрібно буде прочитати на Upstart.


6

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

Спочатку мій Linux-хост (Монетний двір 17) був створений під час завантаження для автоматичного входу в основний акаунт.

По-друге, я використовував засоби в VirtualBox GUI (v4.3.12), щоб створити ярлик для кожної віртуальної машини на робочому столі. {клацніть правою кнопкою миші VM у лівій колонці та виберіть "Створити ярлик на робочому столі"}

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

І досить впевнено перезавантаживши хост-комп'ютер, 3 VM запустилися автоматично.

:-)

Білл Вільямс

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


1
FYI немає "відповіді 5". Число, яке ви бачите зліва від кожної відповіді, - це загальний підрахунок голосів. Сказавши це, ваш - хороший альтернативний метод GUI. Дякуємо за внесок.
hmayag

5

Окрім гарного опису vboxautostart-сервісу вище, ви можете зробити

VBoxManage modifyvm server --autostop-type savestate

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


2

Я знайшов більш простий спосіб під Ubuntu 16.04 під управлінням VBox 5.1.34.

Перебуваючи у VBox, клацніть правою кнопкою миші на працюючому або простою VM у списку, виберіть "Створити ярлик на робочому столі". Після того, як ви побачите піктограму на робочому столі, відкрийте будь-який інструмент, який дозволить побачити створену базову команду VBox (на моєму система, я клацну правою кнопкою миші та виберіть "властивості") Скопіюйте це у буфер обміну.

Відкрийте програму, щоб оновити "програми запуску" та створити нову програму, яка запускається під час завантаження, вставляючи в команду, яку ви скопіювали із посилання на робочий стіл, створеного VirtualBox.


1

Щоб запустити VM при вході в наш сеанс, можливо, нам потрібно визначити .desktop файл:

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

Запуск віртуальної скриньки в просторі користувача може допомогти уникнути небажаних побічних ефектів від їх запуску під час завантаження (наприклад, VM працює як root, час завантаження неймовірно збільшується, ...).


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 ..." процес у списку, якщо віртуальна машина працює


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 для цієї роботи. Ось мій запис на кроні:

@reboot VBoxHeadless --startvm "Centos" &

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
  • Замініть "валідусер" своїм іменем користувача
  • Замініть "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 - Перезавантаження.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.