У мене в Ubuntu12.04 у мене багато віртуальних машин, кожен раз, коли я закриваюсь або перезавантажуюсь, я повинен запускати їх по черзі.
Я хочу допомогти в написанні сценарію для автоматичної автоматичної запуску машин VBox під час завантаження.
У мене в 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
ім'ям користувача)
ПРИМІТКА . Якщо ви змінили групові дозволи для поточного користувача, вийдіть із системи та знову ввійдіть, щоб оновити дозволи. (кредит @ kR105)
Кожен користувач, який хоче включити автозапуск для окремих машин, повинен встановити шлях до каталогу баз даних автозапуску
VBoxManage setproperty autostartdbpath /etc/vbox
і включити автозапуск для окремого VM за допомогою
VBoxManage modifyvm <uuid|vmname> --autostart-enabled on
Це створить myuserid.start
файл у /etc/vbox
каталозі
Тепер перезапустіть сервіс vboxautostart для читання змін.
sudo service vboxautostart-service restart
Перезавантажте систему, і ваш VM повинен запуститися
У мене були подібні нещасні випадки, намагаючись цю операцію на ванільній 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 правильно.
vboxdrv
в # Required Start
/ # Required Stop
рядках на virtualbox
. Здається, вони перейменували послугу, тому ОС не може правильно визначити пріоритети запуску / зупинки. Я думаю, що вам не потрібен крок 6с, якщо ви замінили ці рядки.
Ви можете використовувати vboxmanage startvm "my virtual machine" --type=headless|gui|sdl
(один із них). Використовуйте "без голови", якщо це сервери, до яких ви підключаєтесь іншим способом, ніж за допомогою gui.
Щоб реально запустити ці команди в потрібний час під час завантаження, вам потрібно буде прочитати на Upstart.
Після багатьох нещасних годин, намагаючись змусити процедури з kdmurray вище працювати, я безрезультатно знайшов метод, який працював просто.
Спочатку мій Linux-хост (Монетний двір 17) був створений під час завантаження для автоматичного входу в основний акаунт.
По-друге, я використовував засоби в VirtualBox GUI (v4.3.12), щоб створити ярлик для кожної віртуальної машини на робочому столі. {клацніть правою кнопкою миші VM у лівій колонці та виберіть "Створити ярлик на робочому столі"}
Далі: я вже виявив, що відкриваючи Меню-> Центр управління -> Запуск програм -> Додавання та додавання ярликів робочого столу дають файли, які не працюють, я з інших відповідей на цій сторінці помітив, що розташування стартапів / home /USERNAME/.config/autostart, тому я клацнув правою кнопкою миші на кожному з ярликів VM на робочому столі, а потім вставив їх у цю папку, перезаписавши попередні файли лайно. Тепер вони розробили «досить» піктограми VirtualBox.
І досить впевнено перезавантаживши хост-комп'ютер, 3 VM запустилися автоматично.
:-)
Білл Вільямс
PS: на жаль, у мене все ще щось не вистачає, тому що часто віртуальні машини не запускаються під час завантаження, натомість вони генерують діалогове вікно помилок, яке говорить про те, що вони заблоковані, навіть якщо я сказав їм відключитись до того, як хост перезавантажився.
Окрім гарного опису vboxautostart-сервісу вище, ви можете зробити
VBoxManage modifyvm server --autostop-type savestate
щоб автоматично зупинити гостя при відключенні. Для Ubuntu 14.04 мені довелося додати режим сну 30 до розділу зупинки vboxautostart-service, щоб він чекав, поки гість не буде врятований повністю.
Я знайшов більш простий спосіб під Ubuntu 16.04 під управлінням VBox 5.1.34.
Перебуваючи у VBox, клацніть правою кнопкою миші на працюючому або простою VM у списку, виберіть "Створити ярлик на робочому столі". Після того, як ви побачите піктограму на робочому столі, відкрийте будь-який інструмент, який дозволить побачити створену базову команду VBox (на моєму система, я клацну правою кнопкою миші та виберіть "властивості") Скопіюйте це у буфер обміну.
Відкрийте програму, щоб оновити "програми запуску" та створити нову програму, яка запускається під час завантаження, вставляючи в команду, яку ви скопіювали із посилання на робочий стіл, створеного VirtualBox.
Щоб запустити VM при вході в наш сеанс, можливо, нам потрібно визначити .desktop файл:
Коли цей файл було скопійовано або переміщено в наш каталог автозапуску, він буде виконуватися після входу в систему:
Запуск віртуальної скриньки в просторі користувача може допомогти уникнути небажаних побічних ефектів від їх запуску під час завантаження (наприклад, VM працює як root, час завантаження неймовірно збільшується, ...).
Це можна зробити за допомогою інтерфейсу управління командним рядком 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 ..." процес у списку, якщо віртуальна машина працює
Ви також можете отримати тут описаного менеджера сеансів 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
Ось так я запускаю Centos (ім'я моєї віртуальної машини), коли моя хост-машина перезавантажується. Я використовую crontab для цієї роботи. Ось мій запис на кроні:
@reboot VBoxHeadless --startvm "Centos" &
Для сервера 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
Я сподіваюся, що це може допомогти
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 - Перезавантаження.