Avvia VM VBoxHeadless all'avvio

16

Non riesco a far funzionare la mia macchina virtuale all'avvio.

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

sudo update-rc.d startvms defaults 99 10

Questo ha creato tutti i collegamenti simbolici appropriati per i diversi livelli di esecuzione ma la VM 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 "" 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 male?

    
posta capdragon 15.08.2011 - 20:33

7 risposte

27

QUESTO è che cosa finalmente ha funzionato!

1) Crea il file 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 "" 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) Assegna all'autorizzazione eseguibile dello script

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

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

indica allo script di essere il primo allo spegnimento e l'ultimo all'avvio.

sudo update-rc.d StartVM defaults 99 01

    
risposta data capdragon 16.04.2012 - 21:33
2

FYI, Funziona su Opensuse senza nohup.

VBoxHeadless -s "OpenSuSE 11.4 64bit" &
    
risposta data Bill 07.11.2011 - 18:09
1

Dato che hai menzionato che VBoxHeadless funziona bene se lo inserisci dalla riga di comando di un terminale ma non avvii alcuna VM quando lanciato da uno script di init, suppongo che stia cercando una variabile d'ambiente che viene definita quando si esegue una shell nel terminale ma non definita nell'ambiente di script init (che è fondamentalmente 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 home devono essere modificati per corrispondere a quelli dell'utente che usi per avviare la VM.

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

    
risposta data Riccardo Murri 15.08.2011 - 22:07
1

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

E

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

e

sudo update-rc.d StartVM defaults 99 01

come indicato in una risposta precedente.

    
risposta data user224910 16.12.2013 - 23:57
0

si potrebbe anche voler impostare direttamente la porta quando si usa il commento vrdp .. alla risposta in alto, che suddivide in compartimenti bene per usare diversi script per diversi vms

VBoxVRDP -startvm "myVM" -vrdpport 3391 &
    
risposta data ebricca 09.03.2015 - 12:36
0

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

VBoxHeadless -s "Ubuntu Server"

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

    
risposta data Muhammad bin Yusrat 19.06.2017 - 02:37
0

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

Sfortunatamente il manuale fornisce solo istruzioni di massima e non è stato aggiornato da secoli. Ho trovato questo post sui forum di virtualbox con alcuni dettagli aggiuntivi.

Potresti semplicemente mettere una riga in rc.local per avviare il tuo server, ma se vuoi farlo il modo "ufficiale" leggi su ..

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 all'avvio 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 es.

# adduser Bob vboxusers

Ogni utente che desidera abilitare l'avvio automatico per le singole macchine 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 all'avvio automatico e configurare il modo in cui si fermeranno (ad esempio 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.

    
risposta data Jules 28.07.2017 - 19:37

Leggi altre domande sui tag