Come avviare automaticamente i box machine virtuali all'avvio?


53

Ho molte macchine box virtuali nel mio Ubuntu12.04, ogni volta che spengo o riavvio devo avviarle una per una.

Voglio un aiuto nella scrittura di script per l'avvio automatico delle macchine VBox all'avvio.



@SergiyKolodyazhnyy Questa domanda non è un duplicato di ciò, in alcun modo.
Muhammad bin Yusrat,

Risposte:


51

È possibile utilizzare il servizio di avvio automatico di VirtualBox. Un buon tutorial che descrive come farlo è pubblicato sul blog "Life of a Geek Admin" .

I seguenti passaggi sono adattati dal post sul blog collegato:

  1. Per prima cosa devi creare il file /etc/default/virtualboxe aggiungere alcune variabili.

    VBOXAUTOSTART_DB che contiene un percorso assoluto per la directory del database di
    avvio automatico e VBOXAUTOSTART_CONFIG che contiene il percorso delle impostazioni di configurazione dell'avvio automatico. Il file dovrebbe essere simile al seguente:

    # virtualbox defaults file
    VBOXAUTOSTART_DB=/etc/vbox
    VBOXAUTOSTART_CONFIG=/etc/vbox/vbox.cfg
    
  2. Ora dobbiamo creare il /etc/vbox/vbox.cfgfile e aggiungere

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

    Nota: se il nome file vbox.cfgnon funziona sopra, prova a nominarlo autostart.cfg.

    Se sei l'unico utente, puoi semplicemente aggiungere la linea default_policy = allowal vbox.cfgfile.

  3. Impostare le autorizzazioni sulla directory per il gruppo vboxuser e assicurarsi che gli utenti possano scrivere nella directory e anche nel bit appiccicoso.

    sudo chgrp vboxusers /etc/vbox
    sudo chmod 1775 /etc/vbox
    
  4. Aggiungi ciascuno degli utenti al vboxusersgruppo.

    sudo usermod -a -G vboxusers USERNAME

    (sostituisci USERNAMEcon il nome utente)

NOTA : se sono state modificate le autorizzazioni di gruppo per l'utente corrente, disconnettersi e riconnettersi per aggiornare le autorizzazioni. (credito @ kR105)

  1. Ogni utente che desidera abilitare l'avvio automatico per i singoli computer deve impostare il percorso della directory del database di avvio automatico con

    VBoxManage setproperty autostartdbpath /etc/vbox

    e abilitare l'avvio automatico per una singola macchina virtuale con

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

    Questo creerà un myuserid.start file nella /etc/vboxdirectory

  2. Ora riavvia il servizio vboxautostart per leggere le modifiche.

    sudo service vboxautostart-service restart
  3. Riavvia il sistema e la VM dovrebbe avviarsi


come avviare una particolare macchina virtuale usando lo script di avvio
Principiante

1
Il mio 14.04 afferma che non esiste un servizio come "vboxautostart-service", l'hai provato?
Arronical,

@Arronical L'OP e le istruzioni da cui è stata fornita la risposta erano entrambi per Ubuntu 12.04. YMMV con versioni successive.
kdmurray,

Si scopre che virtualbox 4.3.10 non scarica gli script init su 14.04, ma la risposta di ndasuser di seguito mi ha aiutato a risolverlo. +1 a tutto tondo!
Arronical,

Stavo provando a far funzionare questa soluzione su Ubuntu 15.10 senza successo .. Ho finito con questo post freesoftwareservers.com/index.php/2015/10/24/… .. forse non è l'approccio corretto, ma funziona
mozart_ar

15

Ho avuto incidenti infelici simili provando questa operazione sull'LTS vaniglia.

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

In questa versione, il file chiave /etc/init.d/vboxautostart-service non è stato installato.

Per quanto ne so tutti i requisiti e i requisiti di VitualBox sono stati inseriti da apt-get, quindi non posso dire perché il file 'vboxautostart-service' non sia stato fornito. Ma per superare questo, ecco il mio aggiornamento al post di kdmurray.

1) Il file / etc / default / virtualbox esisteva per me. Quindi deve aggiungere var:

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

2) È necessario creare /etc/vbox/autostart.cfg come indicato da OP.

6b) È necessario ottenere uno script vboxautostart-service e renderlo eseguibile.

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) Avvisa il controller rc.d, ma ho usato 24 come ora di inizio. Mettendo solo 20 e non si è avviato. Forse ha funzionato anche prima che virtualbox funzionasse.

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

Quindi il riavvio ha avviato correttamente la VM.


1
Nella versione 5.2 è necessario modificare vboxautostart-service e sostituirlo vboxdrvin # Required Start/ # Required Stoplines con virtualbox. Sembra che abbiano rinominato il servizio, quindi il sistema operativo non è in grado di rilevare correttamente le priorità di avvio / arresto. Penso che non sia necessario il passaggio 6c se hai sostituito quelle righe.
lisca di pesce,

Grazie mille @fishbone il tuo commento è stato il trucco che mi manca
Jairo Andres Velasco Romero,

6

Puoi usare vboxmanage startvm "my virtual machine" --type=headless|gui|sdl(uno di quelli). Usa "senza testa" se si tratta di server a cui ti connetti con altri mezzi oltre all'utilizzo della GUI.

Per eseguire effettivamente questi comandi al momento giusto durante l'avvio, ti consigliamo di leggere su Upstart.


6

Dopo molte ore infelici nel tentativo di far funzionare le procedure da kdmurray sopra, senza successo alla fine ho trovato un metodo che ha funzionato semplicemente.

Innanzitutto il mio host Linux (Mint 17) è stato impostato all'avvio per accedere automaticamente al mio account principale.

In secondo luogo ho usato le funzionalità della GUI di VirtualBox (v4.3.12) per creare un collegamento per ogni macchina virtuale sul desktop. {fai clic con il pulsante destro del mouse sulla VM nella colonna di sinistra e seleziona "Crea collegamento sul desktop"}

Successivo: Avevo già scoperto che aprendo Menu-> Centro di controllo -> Applicazioni di avvio -> Aggiungi e aggiungendo le scorciatoie del desktop ha dato file che non funzionavano, ho notato da un'altra risposta su questa pagina che la posizione degli startup è / home /USERNAME/.config/autostart quindi ho fatto un clic con il tasto destro su ciascuna delle scorciatoie della VM desktop e poi le ho incollate in quella cartella, sovrascrivendo i precedenti file di schifezze. Ora hanno sviluppato le icone "graziose" di VirtualBox.

E abbastanza sicuro al riavvio del computer host, le 3 macchine virtuali si sono avviate automaticamente.

:-)

Bill Williams

PS: purtroppo mi manca ancora qualcosa, perché spesso le macchine virtuali non si avviano all'avvio, invece generano una finestra di dialogo di errore che dice che sono bloccate, anche se ho detto loro di arrestare prima che l'host fosse riavviato.


1
Cordiali saluti non esiste una "risposta 5". Il numero che vedi a sinistra di ogni risposta è il conteggio totale dei voti. Detto questo, il tuo è un buon metodo GUI alternativo. Grazie per il contributo
hmayag,

5

Oltre alla buona descrizione del servizio vboxautostart sopra, puoi farlo

VBoxManage modifyvm server --autostop-type savestate

per arrestare automaticamente l'ospite allo spegnimento. Per Ubuntu 14.04 ho dovuto aggiungere un sleep 30 alla sezione di arresto del servizio vboxautostart, in modo che attenda che il guest sia stato salvato completamente.


2

Ho trovato un modo più semplice in Ubuntu 16.04 con VBox 5.1.34.

Mentre sei in VBox, fai clic con il tasto destro del mouse sulla VM in esecuzione o inattiva nell'elenco, seleziona "Crea collegamento sul desktop". Una volta visualizzata l'icona sul desktop, apri con qualsiasi strumento che ti consenta di vedere il comando sottostante creato da VBox (sul mio sistema, faccio clic con il pulsante destro del mouse e seleziono 'Proprietà') Copia questo negli Appunti.

Aprire il programma per aggiornare le "applicazioni di avvio" e creare una nuova applicazione che si avvia all'avvio, incollando il comando copiato dal collegamento desktop creato da VirtualBox.


1

Per avviare una VM all'accesso alla nostra sessione, potremmo voler definire un file .desktop:

Quando questo file è stato copiato o spostato nella nostra directory di avvio automatico, verrà eseguito dopo l'accesso:

L'esecuzione di Virtual Box nello spazio utente può aiutare a evitare effetti collaterali indesiderati dell'avvio durante l'avvio (ad es. La VM funziona come root, il tempo di avvio aumenta incredibilmente, ...).


1

Questo può essere fatto utilizzando l'interfaccia di gestione della riga di comando di VirtualBox. Basta eseguire il seguente script all'avvio.

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

C'è un bel tutorial per maggiori informazioni.


Benvenuto. Copia / incolla le informazioni importanti dal link
tempesta,

1

Addon alla risposta @kdmurray.

Se viene visualizzato l'errore:

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

Per risolvere questo, ho dovuto creare manualmente i file "username" .start e "username" .stop con:

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

E cambia proprietario con:

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

rieseguire:

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

quindi riavviare il servizio:

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

il controllo è tutto ok con:

top

e dovresti vedere il processo "VBox ..." in un elenco, se la macchina virtuale è in esecuzione


0

Puoi anche far descrivere il gestore della sessione di gnome qui. Gnome Session Manager Si trova nel centro software o potresti semplicemente andare a un terminale e digitare sudo apt-get install gnome-session-common

Successivamente è possibile creare un piccolo script da eseguire e utilizzare il gestore sessioni gnome per avviarlo. Ecco un piccolo script di esempio per iniziare ...

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

Questo è il modo in cui avvio Centos (nome della mia macchina virtuale) al riavvio della macchina host. Uso crontab per quel lavoro. Ecco la mia voce crontab:

@reboot VBoxHeadless --startvm "Centos" &

0

Per il server Ubuntu 16.04.1 LTS ho risolto questo facendo:

Innanzitutto attivare rc-local.service

sudo systemctl enable rc-local.service

Aggiungi la seguente riga in /etc/rc.local

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

Si noti che virtual_box_user è quello che può vedere la macchina virtuale (che si è disposti ad avviare) eseguendo il comando:

VBoxManage list vms

Esempio:

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

Il modificato /etc/rc.localdovrebbe apparire così

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

Se non scegli il proprietario corretto di virtualbox, dovresti vedere l'errore digitando il comando:

sudo systemctl status rc-local.service

Spero che questo possa aiutare


0

1 - Crea un file:

nano /etc/init.d/vm-start

Incolla questo:

#!/bin/bash
/bin/echo "* Starting VMS..."
/bin/sleep 1
/bin/su validuser -c "/usr/bin/vboxmanage startvm MACHINENAME--type headless"
/bin/sleep 1
  • Sostituisci "validuser" con il tuo nome utente
  • Sostituisci "MACHINENAME" con il nome della tua macchina virtuale
  • Se è necessario avviare più di 1 macchina, ripetere la riga sopra con il nome della macchina virtuale:

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

2 - Rendi eseguibile il file vm-start:

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

3 - Modifica rc.local

nano /etc/rc.local

Aggiungi questo:

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

4 - Riavvia.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.