Avviare VBoxHeadless VM all'avvio


16

Non riesco a far funzionare la mia VM all'avvio.

Ho provato le "applicazioni di avvio" e update-rc.d senza fortuna.

sudo update-rc.d startvms defaults 99 10

Ciò ha creato tutti i collegamenti simbolici appropriati per i diversi livelli di esecuzione ma la macchina virtuale non si avvia ancora.

Ecco il mio script 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

Che cosa sto facendo di sbagliato?


Hai aggiornato Virtual Box a PUEL per includere il supporto VRDP (necessario per la modalità senza testa)?
Takkat,

@Takkat: sì, avrei dovuto menzionarlo: la modalità senza testa funziona benissimo per me ... non riesco a farla funzionare all'avvio.
capdragon,

1
E se provassi VBoxManage startvm --type headless "UbuntuServer"invece di VBoxHeadlesscomandare?
Takkat,

Potrebbe anche essere necessario essere root per farlo funzionare come su -c 'VBoxHeadless --startvm <MACHINE>'.
Takkat,

@Takkat: nessun dado. Ma ancora una volta, riesco a far funzionare VBoxHeadless perfettamente con il comando che sto usando. Non funziona SOLO quando lo faccio in uno script di avvio.
capdragon

Risposte:


27

Questo è ciò che finalmente ha funzionato!

1) Creare il file di script di avvio

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

Copia Incolla quanto segue nel file e sostituisci "Il mio nome VM" per il tuo nome 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) Autorizza lo script eseguibile

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

3) Di 'allo script di essere eseguito all'avvio.

dire allo script di essere il primo a chiudere e l'ultimo ad avviarsi.

sudo update-rc.d StartVM defaults 99 01


2
il VRDP non aggiunge costi aggiuntivi, non VBoxManage startvm --type headlesssarebbe meglio?
Mojzis,

3
Nel mio caso specifico, volevo che la VM si arrestasse correttamente anziché salvare lo stato. la sostituzione di "savestate" con "acpipowerbutton" ha funzionato perfettamente per questo.
Muzzamo,

2

Cordiali saluti, Funziona su Opensuse senza nohup.

VBoxHeadless -s "OpenSuSE 11.4 64bit" &

Quindi uso lo stesso copione che ho se non tralasciando il nohup?
capdragon,

Mi sono sbarazzato di hohup, ancora non funziona. Devo fare qualcos'altro che non va. Sei sicuro che stiamo usando lo stesso script? Modifica la tua risposta e includi il tuo script in modo che io possa provarlo.
capdragon,

2

Funziona bene con Ubuntu server 12.04 e 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

E

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

e

sudo update-rc.d StartVM defaults 99 01

come indicato in una risposta precedente.


Questo funziona alla grande per me! Tranne che con Vbox 5.0 è sudo -u $ VMUSER VBoxHeadless --startvm $ VMNAME e quindi startvm ha 2 "-" e fai causa a VBoxHeadless invece di --type senza testa. Vale anche la pena notare che mentre sono sicuro che siamo su un server, senza "&" alla fine, il server non si avvia al prompt di accesso ma tutti i servizi funzionano come SSH, RDP ecc ecc., Solo qualcosa che ho notato. Lascia il server bloccato all'avvio delle informazioni dettagliate sull'accesso!
FreeSoftwareServers

1

Dato che dici che VBoxHeadless funziona bene se lo digiti dalla riga di comando di un terminale ma non avvia alcuna VM quando viene avviato da uno script di init, suppongo che stia cercando una variabile di ambiente definita quando si esegue una shell nel tuo terminale ma non definito nell'ambiente di script di init (che è sostanzialmente vuoto, ad eccezione dei parametri forniti nella riga di comando del kernel).

Puoi provare a sostituire le invocazioni VBoxHeadless nello script con questo?

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

Qui "nome utente" e il percorso della directory principale devono essere modificati in modo che corrispondano a quelli dell'utente utilizzato per avviare la macchina virtuale.

Se funziona, potresti voler usare su -l per eseguire VBoxHeadless invece di questo hack env .


+1 per su -l- questo è un buon punto!
Takkat,

no ... continua a non funzionare. Ho deciso di usare solo un lavoro cron
capdragon il

1

Nelle versioni recenti di Virtualbox (dalla 4.2.0 in poi) non è necessario eseguire il rollup del proprio script per avviare automaticamente una macchina virtuale, ma richiede una certa configurazione. Vedere la sezione 9.24 del Manuale di Virtualbox " Avvio di macchine virtuali durante l'avvio del sistema "

Purtroppo il manuale fornisce solo istruzioni di contorno e non è stato aggiornato da anni. Ho trovato questo post sui forum di virtualbox con qualche dettaglio in più.

Potresti semplicemente mettere una riga in rc.local per avviare il tuo server, ma se vuoi farlo nel modo "ufficiale" continua a leggere ..

Aggiungi queste righe a / etc / default / virtualbox:

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

Modifica /etc/vbox/vboxautostart.cfg (questo esempio nega l'autorizzazione di avvio automatico per tutti gli utenti tranne l'utente "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
}

Aggiungi il gruppo vboxusers a / etc / vbox e sticky bit:

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

Aggiungi tutti gli utenti che useranno virtualbox al gruppo "vboxusers", ad esempio:

# adduser Bob vboxusers

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

Gli utenti possono quindi impostare le macchine virtuali per l'avvio automatico e configurare il modo in cui si fermeranno (ad es. Savestate, acpishutdown) con:

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

Quanto sopra ha funzionato per me con Virtualbox 5, installato dal repository virtualbox.org.


Accidenti, ho appena finito di scrivere questo solo per scoprire che ha già risposto qui , in base a questo post del blog
Jules,

0

si potrebbe anche voler impostare direttamente la porta quando si utilizza vrdp .. commentare la risposta principale, che si compartimenta bene per usare script diversi per vms diversi

VBoxVRDP -startvm "myVM" -vrdpport 3391 &

0

Wow .. sto vedendo tutte queste soluzioni, che sembrano un po 'complesse, ma questo è il mio terzo laptop su cui ho finito semplicemente per scrivere:

VBoxHeadless -s "Ubuntu Server"

nel mio file rc.local nella directory / etc / e ha funzionato abbastanza bene. Esegue automaticamente la macchina virtuale al riavvio.

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.