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

16

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

Я попробовал "запуск приложений" и update-rc.d без удачи.

sudo update-rc.d startvms defaults 99 10

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

Вот мой скрипт 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

Что я делаю неправильно?

capdragon
источник
Вы обновили Virtual Box до PUEL, чтобы включить поддержку VRDP (необходим для режима без наушников)?
Таккат
@ Takkat: да, я должен был упомянуть: безголовый режим отлично работает для меня ... я просто не могу запустить его при запуске.
Капдрагон
1
Что делать, если вы пытались VBoxManage startvm --type headless "UbuntuServer"вместо VBoxHeadlessкоманды?
Таккат
Вам также может потребоваться быть пользователем root, чтобы запустить его как su -c 'VBoxHeadless --startvm <MACHINE>'.
Таккат
@Takkat: нет кости. Но опять же, я могу заставить VBoxHeadless работать нормально с командой, которую я использую. Это ТОЛЬКО не работает, когда я делаю это в сценарии запуска.
Капдрагон

Ответы:

27

ЭТО является то , что в конце концов сработало!

1) Создайте файл сценария запуска

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

Скопируйте Вставьте следующее в файл и замените «Имя моей виртуальной машины» на имя вашего виртуального компьютера:

#! /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

capdragon
источник
2
VRDP не добавляет дополнительные издержки, не VBoxManage startvm --type headlessбудет ли лучше?
Мойзис
3
В моем конкретном случае я хотел, чтобы виртуальная машина корректно отключалась, а не сохраняла состояние. замена «savestate» на «acpipowerbutton» отлично сработала для этого.
Muzzamo
2

К вашему сведению, это работает на Opensuse без nohup.

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

как указано в предыдущем ответе.

user224910
источник
Это прекрасно работает для меня! За исключением Vbox 5.0. Это sudo -u $ VMUSER VBoxHeadless --startvm $ VMNAME и, следовательно, startvm имеет 2 "-", и вы просто подаете в суд на VBoxHeadless вместо --type без заголовка. Также стоит отметить, что, хотя я уверен, что мы на сервере, без «&» в конце, сервер не загружается для приглашения к входу в систему, но все службы работают как SSH, RDP и т. Д. И т. Д., Что я заметил. Это оставляет сервер застрял при загрузке подробной информации входа в систему!
FreeSoftwareServers
1

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

Можете ли вы попытаться заменить вызовы VBoxHeadless в скрипте этим?

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

Здесь «имя пользователя» и путь к домашнему каталогу должны быть изменены, чтобы соответствовать именам пользователя, которого вы используете для запуска ВМ.

Если это работает, вы можете захотеть использовать su -l для запуска VBoxHeadless вместо этого хака env .

Риккардо Мурри
источник
+1 за su -l- это хороший момент!
Таккат
Нет ... все еще не работает. Я решил просто использовать работу cron
capdragon
1

В последних версиях Virtualbox (начиная с 4.2.0) вам не нужно запускать собственный сценарий для автоматического запуска ВМ, но для этого требуется некоторая настройка. См. Раздел 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.

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

Можно также захотеть установить порт непосредственно при использовании vrdp .. комментарий к верхнему ответу, который хорошо разделяет использование разных скриптов для разных vms

VBoxVRDP -startvm "myVM" -vrdpport 3391 &
ebricca
источник
0

Вау ... Я вижу все эти решения, которые кажутся немного сложными, но это мой третий ноутбук, на котором я просто написал:

VBoxHeadless -s "Ubuntu Server"

в моем файле rc.local в каталоге / etc /, и это работало довольно хорошо. Запускает виртуальную машину автоматически при перезагрузке.

Мухаммед бин Юсрат
источник