Uruchom VBoxHeadless VM podczas uruchamiania

16

Nie mogę uruchomić mojej maszyny wirtualnej podczas uruchamiania.

Próbowałem „aplikacji startowych” i update-rc.d bez powodzenia.

sudo update-rc.d startvms defaults 99 10

Utworzyło to wszystkie odpowiednie dowiązania symboliczne dla różnych poziomów uruchamiania, ale maszyna wirtualna nadal się nie uruchamia.

Oto mój skrypt 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

Co ja robię źle?

capdragon
źródło
Czy zaktualizowałeś Virtual Box do PUEL w celu włączenia obsługi VRDP (potrzebne do trybu bezgłowego)?
Takkat
@Takkat: tak, powinienem wspomnieć: tryb bezgłowy działa dla mnie świetnie ... po prostu nie mogę go uruchomić przy starcie.
capdragon
1
Co jeśli spróbujesz VBoxManage startvm --type headless "UbuntuServer"zamiast VBoxHeadlesspolecenia?
Takkat
Konieczne może być także rootowanie, aby działał jak su -c 'VBoxHeadless --startvm <MACHINE>'.
Takkat
@Takkat: bez kości. Ale znowu mogę sprawić, że VBoxHeadless będzie działał dobrze z poleceniem, którego używam. Nie działa TYLKO, gdy robię to w skrypcie uruchamiania.
capdragon

Odpowiedzi:

27

TO jest to, co w końcu udało się!

1) Utwórz plik skryptu uruchamiania

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

Kopiuj Wklej następujące elementy w pliku i zastąp „My VM Name” dla swojej nazwy 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) Nadaj skryptowi uprawnienia do wykonywania

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

3) Powiedz skryptowi, aby uruchomił się przy starcie.

powiedz skryptowi, aby pierwszy się zamknął, a ostatni uruchomił się.

sudo update-rc.d StartVM defaults 99 01

capdragon
źródło
2
czy VRDP nie dodaje dodatkowego obciążenia, czy nie VBoxManage startvm --type headlessbyłoby lepiej?
mojzis
3
W moim konkretnym przypadku chciałem, aby maszyna wirtualna zamknęła się z wdziękiem, zamiast zapisywać stan. zastąpienie „savestate” przez „acpipowerbutton” działało idealnie do tego.
muzzamo
2

Do Twojej wiadomości, Działa to nauseuse bez nohup.

VBoxHeadless -s "OpenSuSE 11.4 64bit" &
Rachunek
źródło
Więc używam tego samego skryptu, który mam oprócz pomijania nohup?
capdragon
Pozbyłem się hohup, wciąż nie działa. Muszę robić coś innego źle. Czy na pewno korzystamy z tego samego skryptu? Zmodyfikuj swoją odpowiedź i dołącz skrypt, aby móc go wypróbować.
capdragon
2

Działa to poprawnie z serwerem Ubuntu 12.04 i 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

I

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

i

sudo update-rc.d StartVM defaults 99 01

jak wskazano w poprzedniej odpowiedzi.

użytkownik224910
źródło
To działa świetnie dla mnie! Z wyjątkiem Vbox 5.0 Jego sudo -u $ VMUSER VBoxHeadless --startvm $ VMNAME, więc startvm ma 2 "-", a ty po prostu pozywasz VBoxHeadless zamiast --typ bezgłowy. Warto również zauważyć, że chociaż jestem pewien, że jesteśmy na serwerze, bez „&” na końcu, serwer nie uruchamia się w celu zalogowania, ale wszystkie usługi działają jak SSH, RDP itp., Po prostu coś, co zauważyłem. Pozostawia serwer zablokowany przy pełnej informacji o logowaniu do rozruchu!
FreeSoftwareServers
1

Ponieważ wspominasz, że VBoxHeadless działa dobrze, jeśli wpiszesz go z linii poleceń terminala, ale nie uruchomi żadnej maszyny wirtualnej po uruchomieniu ze skryptu init, domyślam się, że szuka jakiejś zmiennej środowiskowej, która jest zdefiniowana po uruchomieniu powłoki w twoim terminalu, ale niezdefiniowany w środowisku skryptowym init (który jest zasadniczo pusty, z wyjątkiem parametrów podanych w wierszu poleceń jądra).

Czy możesz spróbować zastąpić to wywołaniem VBoxHeadless w skrypcie?

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

Tutaj „nazwa użytkownika” i ścieżka katalogu domowego powinny zostać zmienione, aby pasowały do ​​użytkownika, którego używasz do uruchomienia maszyny wirtualnej.

Jeśli to zadziała , możesz użyć su -l do uruchomienia VBoxHeadless zamiast hacka w env .

Riccardo Murri
źródło
+1 za su -l- to dobry punkt!
Takkat
nie ... nadal nie działa. Zdecydowałem się po prostu skorzystać z zadania crona
capdragon
1

W najnowszych wersjach Virtualbox (od wersji 4.2.0) nie trzeba uruchamiać własnego skryptu, aby automatycznie uruchomić maszynę wirtualną, ale wymaga to trochę konfiguracji. Zobacz rozdział 9.24 instrukcji Virtualbox „ Uruchamianie maszyn wirtualnych podczas uruchamiania systemu

Niestety instrukcja zawiera jedynie ogólne instrukcje i nie była aktualizowana od wieków. Znalazłem ten post na forach virtualbox z dodatkowymi szczegółami.

Możesz po prostu wstawić wiersz w rc.local, aby uruchomić serwer, ale jeśli chcesz to zrobić, „oficjalny” sposób czytaj dalej ...

Dodaj te linie do / etc / default / virtualbox:

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

Edytuj /etc/vbox/vboxautostart.cfg (w tym przykładzie odmawia się uprawnień do autostartu wszystkim użytkownikom z wyjątkiem użytkownika „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
}

Dodaj grupę vboxusers do / etc / vbox i lepki bit:

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

Dodaj wszystkich użytkowników, którzy będą korzystać z virtualbox, do grupy „vboxusers”, np .:

# adduser Bob vboxusers

Każdy użytkownik, który chce włączyć autostart dla poszczególnych komputerów, musi ustawić ścieżkę do katalogu bazy danych autostartu za pomocą:

$ VBoxManage setproperty autostartdbpath /etc/vbox

Użytkownicy mogą następnie ustawić maszyny wirtualne na automatyczne uruchamianie i skonfigurować sposób ich zatrzymania (np. Savestate, acpishutdown) za pomocą:

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

Powyższe działało dla mnie z Virtualbox 5, zainstalowanym z repozytorium virtualbox.org.

Jules
źródło
Cholera, właśnie skończyłem pisać, aby dowiedzieć się, że już tu jest odpowiedź , na podstawie tego postu
Jules
0

można również chcieć ustawić port bezpośrednio przy użyciu vrdp .. komentarza do najwyższej odpowiedzi, która dobrze dzieli na przedziały, aby używać różnych skryptów dla różnych vms

VBoxVRDP -startvm "myVM" -vrdpport 3391 &
ebricca
źródło
0

Wow .. Widzę wszystkie te rozwiązania, które wydają się nieco skomplikowane, ale to mój trzeci laptop, na którym skończyłem po prostu pisząc:

VBoxHeadless -s "Ubuntu Server"

w moim pliku rc.local w katalogu / etc / i działało całkiem nieźle. Automatycznie uruchamia maszynę wirtualną po ponownym uruchomieniu.

Muhammad bin Yusrat
źródło