Wie starte ich Virtual Box-Maschinen beim Booten automatisch?


53

Ich habe viele Virtual Box-Maschinen in meinem Ubuntu 12.04, jedes Mal, wenn ich herunterfahre oder neu starte, muss ich sie einzeln starten.

Ich möchte eine Hilfe beim Schreiben eines Skripts für den automatischen Autostart der VBox-Maschinen beim Booten.



@SergiyKolodyazhnyy Diese Frage ist keinesfalls ein Duplikat davon.
Muhammad bin Yusrat

Antworten:


51

Sie können den VirtualBox-Autostartdienst verwenden. Ein gutes Tutorial, das beschreibt, wie das geht, finden Sie im Blog "Life of a Geek Admin" .

Die folgenden Schritte werden aus dem verlinkten Blog-Beitrag angepasst:

  1. Zuerst müssen Sie die Datei erstellen /etc/default/virtualboxund einige Variablen hinzufügen.

    VBOXAUTOSTART_DB, der einen absoluten Pfad zum Autostart-Datenbankverzeichnis enthält, und
    VBOXAUTOSTART_CONFIG, der den Speicherort der Autostart-Konfigurationseinstellungen enthält. Die Datei sollte ungefähr so ​​aussehen:

    # virtualbox defaults file
    VBOXAUTOSTART_DB=/etc/vbox
    VBOXAUTOSTART_CONFIG=/etc/vbox/vbox.cfg
  2. Jetzt müssen wir die /etc/vbox/vbox.cfgDatei erstellen und hinzufügen

    # 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
    }

    Hinweis: Wenn der Dateiname vbox.cfgoben nicht funktioniert, versuchen Sie ihn zu benennen autostart.cfg.

    Wenn Sie der einzige Benutzer sind, können Sie die Zeile einfach default_policy = allowzur vbox.cfgDatei hinzufügen .

  3. Legen Sie die Berechtigungen für das Verzeichnis für die vboxuser-Gruppe fest und stellen Sie sicher, dass Benutzer sowohl in das Verzeichnis als auch in das Sticky-Bit schreiben können.

    sudo chgrp vboxusers /etc/vbox
    sudo chmod 1775 /etc/vbox
  4. Fügen Sie jeden Benutzer der vboxusersGruppe hinzu.

    sudo usermod -a -G vboxusers USERNAME

    (durch USERNAMEden Benutzernamen ersetzen )

HINWEIS : Wenn Sie die Gruppenberechtigungen für den aktuellen Benutzer geändert haben, melden Sie sich ab und wieder an, um die Berechtigungen zu aktualisieren. (credit @ kR105)

  1. Jeder Benutzer, der den Autostart für einzelne Computer aktivieren möchte, muss den Pfad zum Autostart-Datenbankverzeichnis mit festlegen

    VBoxManage setproperty autostartdbpath /etc/vbox

    und aktivieren Sie den Autostart für eine einzelne VM mit

    VBoxManage modifyvm <uuid|vmname> --autostart-enabled on

    Dadurch wird eine myuserid.start Datei im /etc/vboxVerzeichnis erstellt

  2. Starten Sie nun den vboxautostart-Dienst neu, um die Änderungen einzulesen.

    sudo service vboxautostart-service restart
  3. Starten Sie Ihr System neu und Ihre VM sollte starten


Starten einer bestimmten virtuellen Maschine mithilfe eines Startskripts
Anfänger

1
Mein 14.04 behauptet, dass es keinen solchen Dienst wie 'vboxautostart-service' gibt. Haben Sie das getestet?
Arronical

@Arronical Das OP und die Anweisungen, von denen die Antwort stammt, waren beide für Ubuntu 12.04. YMMV mit Versionen danach.
kdmurray

Es stellt sich heraus, dass die Virtualbox 4.3.10 die Init-Skripte am 14.04 nicht herunterlädt, aber die Antwort von ndasuser unten hat mir geholfen, das zu beheben. +1 rundum!
Arronical

Ich habe versucht, diese Lösung auf Ubuntu 15.10 ohne Erfolg zum Laufen zu bringen. Ich habe diesen Beitrag beendet . Freesoftwareservers.com/index.php/2015/10/24/… .. Vielleicht nicht der richtige Ansatz, aber es funktioniert
mozart_ar

15

Ich hatte ähnliche unglückliche Zwischenfälle, als ich diese Operation an der Vanilla LTS versuchte.

~$ cat /etc/os-release 
NAME="Ubuntu" 
VERSION="14.04.1 LTS, Trusty Tahr" 

In dieser Version wurde die Schlüsseldatei /etc/init.d/vboxautostart-service nicht installiert.

Soweit ich weiß, wurden alle VitualBoxen und Anforderungen von apt-get eingegeben, daher kann ich nicht sagen, warum die Datei 'vboxautostart-service' nicht ebenfalls bereitgestellt wurde. Aber um darüber hinwegzukommen, hier ist mein Update zu kdmurrays Post.

1) / etc / default / virtualbox Datei existierte für mich. Also muss man vars hinzufügen:

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

2) Es muss /etc/vbox/autostart.cfg wie von OP angegeben erstellt werden.

6b) Sie müssen ein vboxautostart-service-Skript abrufen und es ausführbar machen.

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) Alarmiere den rc.d Controller, aber ich habe 24 als Startzeit verwendet. Putting nur 20 und es hat nicht angefangen. Vielleicht lief es noch bevor virtualbox funktionierte.

sudo update-rc.d vboxautostart-service defaults 24 24

Nach dem Neustart wurde die VM korrekt gestartet.


1
In Version 5.2 müssen Sie den vboxautostart-Dienst bearbeiten und vboxdrvin den # Required Start/ # Required StopZeilen durch ersetzen virtualbox. Es scheint, dass sie den Dienst umbenannt haben, sodass das Betriebssystem die Start- / Stopp-Prioritäten nicht richtig erkennen kann. Ich denke, Sie brauchen Schritt 6c nicht, wenn Sie diese Zeilen ersetzt haben.
Fishbone

Vielen Dank @fishbone Ihr Kommentar war der Trick, der mir gefehlt hat
Jairo Andres Velasco Romero

6

Sie können vboxmanage startvm "my virtual machine" --type=headless|gui|sdl(eine davon) verwenden. Verwenden Sie "headless", wenn es sich um Server handelt, zu denen Sie eine andere Verbindung als über die GUI herstellen.

Um diese Befehle während des Startvorgangs zum richtigen Zeitpunkt auszuführen, sollten Sie Upstart lesen.


6

Nach vielen unglücklichen Stunden, die versuchten, die Prozeduren von kdmurray oben zur Arbeit zu bringen, fand ich schließlich ohne Erfolg eine Methode, die einfach funktionierte.

Zuerst wurde mein Linux-Host (Mint 17) beim Booten so eingerichtet, dass er sich automatisch bei meinem Hauptkonto anmeldet.

Zweitens habe ich die Funktionen in VirtualBox GUI (v4.3.12) verwendet, um eine Verknüpfung für jede virtuelle Maschine auf dem Desktop zu erstellen. {Klicken Sie mit der rechten Maustaste auf die VM in der linken Spalte und wählen Sie "Verknüpfung auf dem Desktop erstellen".}

Als Nächstes: Ich hatte bereits festgestellt, dass das Aufrufen von Menü-> Kontrollzentrum -> Startanwendungen -> Hinzufügen und Hinzufügen der Desktop-Verknüpfungen Dateien ergab, die nicht funktionierten. Aus einer anderen Antwort auf dieser Seite ging hervor, dass der Speicherort der Starts / home ist /USERNAME/.config/autostart, also habe ich mit der rechten Maustaste auf die Verknüpfungen der Desktop-VM geklickt und sie dann in diesen Ordner eingefügt und die früheren Mistdateien überschrieben. Jetzt haben sie die 'hübschen' VirtualBox-Icons entwickelt.

Und beim Neustart des Host-Computers wurden die 3 VMs automatisch gestartet.

:-)

Bill Williams

PS: Leider fehlt noch etwas, da die virtuellen Maschinen häufig nicht beim Booten gestartet werden. Stattdessen wird ein Fehlerdialogfeld generiert, in dem angegeben wird, dass sie gesperrt sind, auch wenn ich sie angewiesen habe, herunterzufahren, bevor der Host neu gestartet wurde.


1
Zu Ihrer Information gibt es keine "Antwort 5". Die Zahl, die Sie links neben jeder Antwort sehen, gibt die Gesamtzahl der abgegebenen Stimmen an. Abgesehen davon ist Ihre eine gute alternative GUI-Methode. Danke für den Beitrag.
hmayag

5

Zusätzlich zu der guten Beschreibung des obigen vboxautostart-Dienstes können Sie dies tun

VBoxManage modifyvm server --autostop-type savestate

um den Gast beim Herunterfahren automatisch zu stoppen. Für Ubuntu 14.04 musste ich dem Abschnitt vboxautostart-service stop einen sleep 30 hinzufügen , damit dieser wartet, bis der Gast vollständig gespeichert wurde.


2

Ich habe einen einfacheren Weg unter Ubuntu 16.04 gefunden, auf dem VBox 5.1.34 läuft.

Klicken Sie in VBox mit der rechten Maustaste auf die aktive oder inaktive VM in der Liste und wählen Sie "Verknüpfung auf dem Desktop erstellen". Sobald Sie das Symbol auf Ihrem Desktop sehen, öffnen Sie es mit einem beliebigen Tool, mit dem Sie den zugrunde liegenden Befehl VBox erstellt sehen können (auf my System, ich rechtsklicke und wähle "Eigenschaften") Kopieren Sie diese in die Zwischenablage.

Öffnen Sie das Programm, um "Startanwendungen" zu aktualisieren und eine neue Anwendung zu erstellen, die beim Start gestartet wird. Fügen Sie dazu den Befehl ein, den Sie von der von VirtualBox erstellten Desktop-Verknüpfung kopiert haben.


1

Um eine VM beim Anmelden an unserer Sitzung zu starten, möchten wir möglicherweise eine .desktop-Datei definieren:

Wenn diese Datei in unser Autostart-Verzeichnis kopiert oder verschoben wurde, wird sie ausgeführt, nachdem wir uns angemeldet haben:

Das Ausführen von Virtual Box im Benutzerbereich kann helfen, unerwünschte Nebeneffekte beim Starten während des Startvorgangs zu vermeiden (z. B. die VM wird als Root ausgeführt, die Startzeit verlängert sich erheblich usw.).


1

Dies kann über die VirtualBox Command Line Management Interface erfolgen. Führen Sie einfach das folgende Skript beim Start aus.

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

Es gibt ein nettes Tutorial für mehr Infos.


Willkommen .. Bitte kopieren Sie wichtige Informationen aus dem Link
Sturm

1

Addon zu @kdmurray Antwort.

Wenn Sie eine Fehlermeldung erhalten über:

VBoxManage modifyvm <uuid|vmname> --autostart-enabled on

Um dies zu lösen, musste ich manuell die Dateien "username" .start und "username" .stop erstellen mit:

sudo touch "username".start
sudo touch "username".stop

Und ändern Sie den Besitzer mit:

sudo chown "username" "username".start
sudo chown "username" "username".stop

Wiederholung:

VBoxManage modifyvm <uuid|vmname> --autostart-enabled on

dann starte den Dienst neu:

sudo service vboxautostart-service stop
sudo service vboxautostart-service start

Überprüfen Sie, ob alles in Ordnung ist mit:

top

und Sie sollten "VBox ..." in einer Liste sehen, wenn die virtuelle Maschine läuft


0

Sie können sich auch den hier beschriebenen Gnome Session Manager besorgen. Gnome Session Manager Es befindet sich im Software-Center oder Sie können einfach zu einem Terminal gehen und etwas eingeben sudo apt-get install gnome-session-common

Als nächstes können Sie ein kleines Skript erstellen, das ausgeführt werden soll, und den Gnome-Sitzungsmanager verwenden, um es zu starten. Hier ist ein kleines Beispielskript, um Sie zum Laufen zu bringen ...

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

0

So starte ich meinen Centos (Name meiner virtuellen Maschine), wenn meine Host-Maschine neu startet. Ich benutze Crontab für diesen Job. Hier ist mein Crontab-Eintrag:

@reboot VBoxHeadless --startvm "Centos" &

0

Für Ubuntu Server 16.04.1 LTS löste ich das folgendermaßen:

Aktivieren Sie zuerst den rc-local.service

sudo systemctl enable rc-local.service

Fügen Sie die folgende Zeile hinzu /etc/rc.local

su virtual_box_user -c "VBoxHeadless -startvm 'virtual_machine_name' &"

Beachten Sie, dass der Benutzer virtual_box_user derjenige ist, der die virtuelle Maschine (die Sie starten möchten) sehen kann, die den Befehl ausführt:

VBoxManage list vms

Beispiel:

$ VBoxManage list vms
"virtualbox1" {2eb3ba3b-bcb3-4515-95d9-d33bce214c28} 
"virtualbox2" {62365634-f2q4-40c0-b4ed-22f4ab84441a}

Die modifizierte /etc/rc.localsollte so aussehen

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

Wenn Sie nicht den richtigen Besitzer von virtualbox auswählen, sollte der Fehler bei der Eingabe des Befehls auftreten:

sudo systemctl status rc-local.service

Ich hoffe das kann helfen


0

1 - Erstellen Sie eine Datei:

nano /etc/init.d/vm-start

Fügen Sie dies ein:

#!/bin/bash
/bin/echo "* Starting VMS..."
/bin/sleep 1
/bin/su validuser -c "/usr/bin/vboxmanage startvm MACHINENAME--type headless"
/bin/sleep 1
  • Ersetzen Sie "validuser" durch Ihren Benutzernamen
  • Ersetzen Sie "MACHINENAME" durch den Namen Ihrer virtuellen Maschine
  • Wenn Sie mehr als einen Computer starten müssen, wiederholen Sie die obige Zeile mit dem Namen Ihres virtuellen Computers:

/bin/su validuser -c "/usr/bin/vboxmanage startvm MACHINENAME2--type headless" /bin/sleep 1

2 - Machen Sie die Datei vm-start ausführbar:

chmod +x /etc/init.d/vm-start

3 - Bearbeiten Sie rc.local

nano /etc/rc.local

Füge das hinzu:

#!/bin/bash
/etc/init.d/vm-start
exit 0

4 - Neustart.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.