Запустіть VBoxHeadless VM при запуску


16

Я, здається, не можу заставити свій VM працювати при запуску.

Я спробував "програми запуску" та update-rc.d без удачі.

sudo update-rc.d startvms defaults 99 10

Це створило всі відповідні символьні посилання для різних рівнів запуску, але VM все ще не запускається.

Ось мій сценарій startvms:

#!/bin/bash
### BEGIN INIT INFO
# Provides:          startvms
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start my VMs at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO
case "$1" in
  start)
        echo "Starting"
        nohup VBoxHeadless --startvm "UbuntuServer" &
        ;;
  stop)
        echo "Stopping $DESC"
        VBoxManage controlvm "UbuntuServer" poweroff
        ;;

  restart|force-reload)
        echo "Restarting $DESC"
        VBoxManage controlvm "UbuntuServer" poweroff
        nohup VBoxHeadless --startvm "UbuntuServer" &
        ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac

Що я роблю неправильно?


Ви оновили Virtual Box до PUEL, щоб включити підтримку VRDP (потрібна для режиму без голови)?
Таккат

@Takkat: так, я повинен був би згадати: безголовий режим працює для мене чудово ... я просто не можу його запустити при запуску.
Капдрагон

1
Що робити, якщо ви спробували VBoxManage startvm --type headless "UbuntuServer"замість VBoxHeadlessкоманди?
Таккат

Можливо, вам також знадобиться мати корінь, щоб запустити його su -c 'VBoxHeadless --startvm <MACHINE>'.
Таккат

@Takkat: без кісток. Але знову ж таки, я можу змусити VBoxHeadless добре працювати з командою, яку я використовую. Це ТІЛЬКИ не працює, коли я це роблю в сценарії запуску.
Капдрагон

Відповіді:


27

ЦЕ це нарешті спрацювало!

1) Створіть файл сценарію запуску

в /etc/init.d - sudo nano /etc/init.d/StartVM.

Скопіюйте Вставте наступне у файл та замініть "Моє ім'я VM" на ваше ім'я vm:

#! /bin/sh
# /etc/init.d/StartVM
#

#Edit these variables!
VMUSER=spode
VMNAME="My VM Name"

case "$1" in
  start)
    echo "Starting VirtualBox VM..."
    sudo -H -b -u $VMUSER /usr/bin/VBoxVRDP -s "$VMNAME"
    ;;
  stop)
    echo "Saving state of Virtualbox VM..."
    sudo -H -u  $VMUSER /usr/bin/VBoxManage controlvm "$VMNAME" savestate
    ;;
  *)
    echo "Usage: /etc/init.d/StartVM {start|stop}"
    exit 1
    ;;
esac

exit 0

2) Дайте дозвіл на виконання сценарію

з sudo chmod +x /etc/init.d/StartVM.

3) Скажіть сценарій запускатися при запуску.

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

sudo update-rc.d StartVM defaults 99 01


2
хіба VRDP не додає додаткових накладних витрат, не VBoxManage startvm --type headlessбуде краще?
mojzis

3
У моєму конкретному випадку я хотів, щоб ВМ витончено відключилось, а не зберігало стан. замість "savestate" на "acpipowerbutton" спрацював ідеально для цього.
муццамо

2

FYI, це працює на Opensuse без нохупу.

VBoxHeadless -s "OpenSuSE 11.4 64bit" &

Тож я використовую той самий скрипт, що і у мене, за винятком того, що не залишаю nohup?
Капдрагон

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

2

Це добре працює з сервером Ubuntu 12.04 та VirtualBox 4.2.20.

#! /bin/sh
# /etc/init.d/StartVM
#
#Edit these variables!
VMUSER=username
case "$1" in
  start)
    echo "Starting VirtualBox VM SMARTHOST ..."
    sudo -u $VMUSER VBoxManage startvm SMARTHOST --type headless
    echo "Starting VirtualBox VM wxp-acceso ..."
    sudo -u $VMUSER VBoxManage startvm wxp-acceso --type headless
    echo "Starting VirtualBox VM wmmaq_edi ..."
    sudo -u $VMUSER VBoxManage startvm vmmaq_edi --type headless
    ;;
  stop)
    echo "Saving state of Virtualbox VM SMARTHOST ..."
    sudo -u $VMUSER VBoxManage controlvm SMARTHOST savestate
    echo "Saving state of Virtualbox VM wxp-acceso ..."
    sudo -u $VMUSER VBoxManage controlvm wxp-acceso savestate
    echo "Saving state of Virtualbox VM vmmaq_edi ..."
    sudo -u $VMUSER VBoxManage controlvm vmmaq_edi savestate
    ;;
  *)
    echo "Usage: /etc/init.d/StartVM {start|stop}"
    exit 1
    ;;
esac

exit 0

І

sudo chmod +x /etc/init.d/StartVM

і

sudo update-rc.d StartVM defaults 99 01

як зазначено в попередній відповіді.


Це чудово працює для мене! За винятком Vbox 5.0 Його sudo -u $ VMUSER VBoxHeadless --startvm $ VMNAME & так startvm має 2 "-", і ви просто подаєте в суд на VBoxHeadless замість - типу безголового. Також варто відзначити, що, хоча я впевнений, що ми на сервері, без "&" наприкінці, сервер не завантажується підказки для входу, але всі сервіси працюють як SSH, RDP і т. Д., Лише щось, що я помітив. Це залишає сервер застряг при детальній інформації про вхід при завантаженні!
FreeSoftwareServers

1

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

Чи можете ви спробувати замінити виклики VBoxHeadless у скрипті цим?

env USER=username HOME=/path/to/user/homedir VBoxHeadless ...same options as before...

Тут "ім'я користувача" та шлях до домашнього каталогу слід змінити так, щоб вони відповідали тим, хто користувач використовує для запуску VM.

Якщо це працює, можливо, ви захочете використовувати su -l для запуску VBoxHeadless замість цього хака env .


+1 для su -l- це хороший момент!
Таккат

ні ... все ще не працює. Я вирішив просто скористатися роботою з крон
capdragon

1

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

На жаль, посібник дає лише контурні інструкції та не оновлювався протягом століть. Я знайшов цю публікацію на форумах virtualbox з деякими додатковими подробицями.

Ви можете просто поставити рядок у rc.local, щоб запустити свій сервер, але якщо ви хочете зробити це "офіційним" способом, читайте далі ..

Додайте ці рядки до / etc / default / virtualbox:

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

Редагувати /etc/vbox/vboxautostart.cfg (цей приклад забороняє дозвіл на автозапуск для всіх користувачів, окрім користувача "Bob":

# Default policy is to deny starting a VM, the other option is "allow".
default_policy = deny

# Bob is allowed to start virtual machines but starting them
# will be delayed for 10 seconds
bob = {
    allow = true
    startup_delay = 10
}

# Alice is not allowed to start virtual machines, useful to exclude certain users
# if the default policy is set to allow.
alice = {
    allow = false
}

Додайте групу vboxusers в / etc / vbox та клейкий біт:

# chgrp vboxusers /etc/vbox
# chmod 1775 /etc/vbox

Додайте всіх користувачів, які будуть використовувати virtualbox, до групи "vboxusers", наприклад:

# adduser Bob vboxusers

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

$ VBoxManage setproperty autostartdbpath /etc/vbox

Потім користувачі можуть встановити віртуальну машину для автоматичного запуску та налаштувати, як вони зупинятимуться (наприклад, savestate, acpishutdown) за допомогою:

$ VBoxManage modifyvm <vmname> --autostart-enabled on
$ VBoxManage modifyvm <vmname> --autostop-type acpishutdown

Вищезазначене працювало для мене з Virtualbox 5, встановленим із сховища virtualbox.org.


Чорт, щойно закінчив викручувати це лише, щоб дізнатися, що тут уже відповіли , грунтуючись на цій публікації в блозі
Jules

0

також можна встановити порт безпосередньо під час використання vrdp .. коментар до верхньої відповіді, який відокремлює, що добре використовувати різні сценарії для різних vms

VBoxVRDP -startvm "myVM" -vrdpport 3391 &

0

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

VBoxHeadless -s "Ubuntu Server"

в моєму файлі rc.local у каталозі / etc /, який працював досить добре. Запускає віртуальну машину автоматично при перезавантаженні.

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