Démarrez VBoxHeadless VM au démarrage

16

Je n'arrive pas à faire fonctionner ma machine virtuelle au démarrage.

J'ai essayé les "applications de démarrage" et update-rc.d sans succès.

sudo update-rc.d startvms defaults 99 10

Cela a créé tous les liens symboliques appropriés pour les différents niveaux d'exécution, mais la machine virtuelle ne démarre toujours pas.

Voici mon 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

Qu'est-ce que je fais mal?

capdragon
la source
Avez-vous mis à niveau Virtual Box vers PUEL pour inclure la prise en charge VRDP (nécessaire pour le mode sans tête)?
Takkat
@Takkat: oui, j'aurais dû mentionner: le mode sans tête fonctionne très bien pour moi ... je ne peux tout simplement pas le faire fonctionner au démarrage.
capdragon
1
Et si vous essayiez à la VBoxManage startvm --type headless "UbuntuServer"place de la VBoxHeadlesscommande?
Takkat
Vous devrez peut-être également être root pour le faire fonctionner comme su -c 'VBoxHeadless --startvm <MACHINE>'.
Takkat
@Takkat: pas de dés. Mais encore une fois, je peux faire fonctionner VBoxHeadless très bien avec la commande que j'utilise. Cela ne fonctionne QUE lorsque je le fais dans un script de démarrage.
capdragon

Réponses:

27

C'est ce qui a finalement fonctionné!

1) Créez le fichier de script de démarrage

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

Copiez Collez ce qui suit dans le fichier et remplacez "My VM Name" pour votre nom 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) Accordez au script exécutable la permission

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

3) Dites au script de s'exécuter au démarrage.

dites au script d'être le premier à s'arrêter et le dernier à démarrer.

sudo update-rc.d StartVM defaults 99 01

capdragon
la source
2
le VRDP n'ajoute-t-il pas une surcharge supplémentaire, ne VBoxManage startvm --type headlessserait-ce pas mieux?
mojzis
3
Dans mon cas spécifique, je voulais que la machine virtuelle s'arrête correctement plutôt que d'enregistrer l'état. remplacer "savestate" par "acpipowerbutton" a parfaitement fonctionné pour cela.
muzzamo
2

Pour info, cela fonctionne sur Opensuse sans nohup.

VBoxHeadless -s "OpenSuSE 11.4 64bit" &
Facture
la source
Donc j'utilise le même script que j'ai, sauf laisser de côté le nohup?
capdragon
Débarrassé de hohup, ne fonctionne toujours pas. Je dois faire autre chose de mal. Êtes-vous sûr que nous utilisons le même script? Veuillez modifier votre réponse et inclure votre script afin que je puisse l'essayer.
capdragon
2

Cela fonctionne bien avec le serveur Ubuntu 12.04 et 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

Et

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

et

sudo update-rc.d StartVM defaults 99 01

comme indiqué dans une réponse précédente.

user224910
la source
Cela fonctionne très bien pour moi! Sauf avec Vbox 5.0 Son sudo -u $ VMUSER VBoxHeadless --startvm $ VMNAME & ainsi startvm a 2 "-" et vous poursuivez simplement VBoxHeadless au lieu de --type sans tête. Il convient également de noter que même si je suis sûr que nous sommes sur un serveur, sans le "&" à la fin, le serveur ne démarre pas à l'invite de connexion, mais tous les services fonctionnent comme SSH, RDP, etc., juste quelque chose que j'ai remarqué. Il laisse le serveur bloqué à l'ouverture de session des informations détaillées!
FreeSoftwareServers
1

Étant donné que vous mentionnez que VBoxHeadless fonctionne correctement si vous le tapez à partir de la ligne de commande d'un terminal, mais ne démarre aucune machine virtuelle lorsqu'il est lancé à partir d'un script init, je suppose qu'il recherche une variable d'environnement qui est définie lorsque vous exécutez un shell dans votre terminal mais non défini dans l'environnement de script init (qui est essentiellement vide, à l'exception des paramètres donnés sur la ligne de commande du noyau).

Pouvez-vous essayer de remplacer les invocations VBoxHeadless dans le script par ceci?

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

Ici, "nom d'utilisateur" et le chemin du répertoire personnel doivent être modifiés pour correspondre à ceux de l'utilisateur que vous utilisez pour démarrer la machine virtuelle.

Si cela fonctionne, vous voudrez peut-être utiliser su -l pour exécuter VBoxHeadless au lieu de ce hack env .

Riccardo Murri
la source
+1 pour su -l- c'est un bon point!
Takkat
non ... ne fonctionne toujours pas. J'ai décidé d'utiliser un travail cron
capdragon
1

Sur les versions récentes de Virtualbox (4.2.0 et suivantes), vous n'avez pas besoin de lancer votre propre script pour démarrer automatiquement une machine virtuelle, mais cela prend une certaine configuration. Voir la section 9.24 du manuel Virtualbox " Démarrage des machines virtuelles pendant le démarrage du système "

Malheureusement, le manuel ne donne que des instructions générales et n'a pas été mis à jour depuis des siècles. J'ai trouvé cet article sur les forums de virtualbox avec quelques détails supplémentaires.

Vous pouvez simplement mettre une ligne dans rc.local pour démarrer votre serveur mais si vous voulez le faire de la manière "officielle", lisez la suite.

Ajoutez ces lignes à / etc / default / virtualbox:

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

Modifiez /etc/vbox/vboxautostart.cfg (cet exemple refuse l'autorisation de démarrage automatique pour tous les utilisateurs sauf l'utilisateur "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
}

Ajoutez le groupe vboxusers à / etc / vbox et le sticky bit:

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

Ajoutez tous les utilisateurs qui utiliseront virtualbox au groupe "vboxusers", par exemple:

# adduser Bob vboxusers

Chaque utilisateur qui souhaite activer le démarrage automatique pour des machines individuelles doit définir le chemin d'accès au répertoire de la base de données de démarrage automatique avec:

$ VBoxManage setproperty autostartdbpath /etc/vbox

Les utilisateurs peuvent ensuite configurer les machines virtuelles pour démarrer automatiquement et configurer la façon dont elles s'arrêteront (par exemple, savestate, acpishutdown) avec:

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

Ce qui précède a fonctionné pour moi avec Virtualbox 5, installé à partir du référentiel virtualbox.org.

Jules
la source
Merde, je viens de finir de me tordre pour découvrir que c'est déjà répondu ici , basé sur ce blog
Jules
0

on peut également vouloir définir directement le port lors de l'utilisation de vrdp .. commenter la réponse du haut, qui cloisonne bien pour utiliser différents scripts pour différentes vms

VBoxVRDP -startvm "myVM" -vrdpport 3391 &
Ebricca
la source
0

Wow .. Je vois toutes ces solutions, qui semblent un peu complexes, mais c'est mon troisième ordinateur portable sur lequel j'ai fini par écrire simplement:

VBoxHeadless -s "Ubuntu Server"

dans mon fichier rc.local dans le répertoire / etc / et cela a plutôt bien fonctionné. Exécute la machine virtuelle automatiquement au redémarrage.

Muhammad bin Yusrat
la source