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

16

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

Я попробовал «запускать приложения» и 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 "" 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 15.08.2011 в 18:33
источник

7 ответов

27

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

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

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

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

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

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

case "" 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 16.04.2012 в 19:33
источник
2

FYI, это работает на Opensuse без nohup.

VBoxHeadless -s "OpenSuSE 11.4 64bit" &
    
ответ дан Bill 07.11.2011 в 17:09
1

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

Вы можете попробовать заменить вызовы VBoxHeadless в скрипте?

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

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

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

ответ дан Riccardo Murri 15.08.2011 в 20:07
1

Это нормально работает с сервером Ubuntu 12.04 и VirtualBox 4.2.20.

#! /bin/sh
# /etc/init.d/StartVM
#
#Edit these variables!
VMUSER=username
case "" 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 16.12.2013 в 22:57
0

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

VBoxVRDP -startvm "myVM" -vrdpport 3391 &
    
ответ дан ebricca 09.03.2015 в 11:36
0

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

VBoxHeadless -s "Ubuntu Server"

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

    
ответ дан Muhammad bin Yusrat 19.06.2017 в 00:37
0

В последних версиях Virtualbox (4.2.0) вам не нужно запускать собственный скрипт для автозапуска виртуальной машины, но он требует некоторой конфигурации. См. Раздел 9.24 руководства Virtualbox « Запуск виртуальных машин во время загрузки системы»

К сожалению, руководство содержит только краткие инструкции и не обновлялось в возрасте. Я нашел этот пост на форумах виртуальных сайтов с некоторыми дополнительными деталями.

Вы могли бы просто поместить строку в rc.local, чтобы запустить ваш сервер, но если вы хотите сделать это, «официальный» способ читать дальше.

Добавьте эти строки в / etc / default / virtualbox:

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

Редактировать /etc/vbox/vboxautostart.cfg (в этом примере запрещается разрешение автозапуска для всех пользователей, кроме пользователя «Боб»:

# 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

Добавьте всех пользователей, которые будут использовать виртуальный бокс в группу «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 28.07.2017 в 17:37