web-dev-qa-db-fra.com

Comment démarrer les machines Virtualbox automatiquement lors du démarrage?

J'ai plusieurs machines Virtual Box dans mon Ubuntu12.04, chaque fois que je ferme ou redémarre, je dois les démarrer un par un.

Je veux une aide dans l'écriture de script pour le démarrage automatique automatique des machines VBox lors du démarrage.

50
Maythux

Vous pouvez utiliser le service de démarrage automatique de VirtualBox. Un bon tutoriel décrivant la marche à suivre est disponible sur le blog blog "Life of a Geek Admin" .

Les étapes suivantes sont adaptées de l'article de blog lié:

  1. Vous devez d’abord créer le fichier /etc/default/virtualbox et ajouter quelques variables.

    VBOXAUTOSTART_DB qui contient un chemin absolu vers le répertoire de base de données à démarrage automatique et
    VBOXAUTOSTART_CONFIG qui contient l'emplacement des paramètres de configuration à démarrage automatique. Le fichier devrait ressembler à ceci:

    # virtualbox defaults file
    VBOXAUTOSTART_DB=/etc/vbox
    VBOXAUTOSTART_CONFIG=/etc/vbox/vbox.cfg
    
  2. Maintenant, nous devons créer le fichier /etc/vbox/vbox.cfg et ajouter

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

    Remarque: Si le nom de fichier vbox.cfg ne fonctionne pas ci-dessus, essayez de le nommer autostart.cfg.

    Si vous êtes le seul utilisateur, vous pouvez simplement ajouter la ligne default_policy = allow au fichier vbox.cfg.

  3. Définissez les autorisations sur le répertoire sur le groupe vboxuser et assurez-vous que les utilisateurs peuvent écrire dans le répertoire ainsi que le nombre de post-it.

    Sudo chgrp vboxusers /etc/vbox
    Sudo chmod 1775 /etc/vbox
    
  4. Ajoutez chacun des utilisateurs au groupe vboxusers.

    Sudo usermod -a -G vboxusers USERNAME
    

    (remplacez USERNAME par le nom d'utilisateur)

NOTE: Si vous avez modifié les autorisations de groupe pour l'utilisateur actuel, déconnectez-vous puis reconnectez-vous pour actualiser les autorisations. . (crédit @ kR105)

  1. Chaque utilisateur souhaitant activer le démarrage automatique pour des machines individuelles doit définir le chemin d'accès au répertoire de la base de démarrage automatique avec

    VBoxManage setproperty autostartdbpath /etc/vbox
    

    et activez le démarrage automatique pour une personne VM avec

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

    Cela créera un fichier myuserid.start dans le répertoire /etc/vbox

  2. Maintenant, redémarrez le service vboxautostart pour lire les modifications.

    Sudo service vboxautostart-service restart
    
  3. Redémarrez votre système et votre VM devrait démarrer

50
kdmurray

J'ai eu des incidents similaires malheureux d'essayer cette opération sur le LTS Vanilla.

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

Sur cette version, le fichier de clé / etc/init.d/vboxautostart-service n'était pas installé.

Autant que je sache, apt-get a mis tout le VitualBox et toutes les exigences requises, aussi je ne peux pas dire pourquoi le fichier 'vboxautostart-service' n'a pas été fourni. Mais pour en revenir à ceci, voici ma mise à jour du post de kdmurray.

1) / etc/default/virtualbox le fichier existait pour moi. Il faut donc ajouter des vars:

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

2) Doit créer / etc/vbox/autostart.cfg comme indiqué par OP.

6b) Besoin d’obtenir un script vboxautostart-service et de le rendre exécutable.

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) Alerte le contrôleur rc.d, mais j’ai utilisé 24 comme heure de début. Mettant seulement 20 et il n'a pas démarré. Peut-être que cela fonctionnait avant même que virtualbox ne fonctionne.

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

Ensuite, le redémarrage a correctement lancé le VM.

13
ndasusers

Vous pouvez utiliser vboxmanage startvm "my virtual machine" --type=headless|gui|sdl (un de ceux-ci). Utilisez "headless" s'il s'agit de serveurs auxquels vous vous connectez par d'autres moyens que l'utilisation de l'interface graphique.

Pour que ces commandes soient exécutées au bon moment au démarrage, vous devez lire Upstart.

6
Jo-Erlend Schinstad

Après de nombreuses heures malheureuses à essayer d’obtenir les procédures dans de kdmurray ci-dessus, sans succès j’ai finalement trouvé une méthode qui fonctionnait simplement.

D'abord mon hôte Linux (Mint 17) a été configuré au démarrage pour se connecter automatiquement à mon compte principal.

Deuxièmement, j'ai utilisé les fonctionnalités de l'interface graphique de VirtualBox (v4.3.12) pour créer un raccourci pour chaque machine virtuelle du bureau. {cliquez avec le bouton droit sur la VM dans la colonne de gauche et sélectionnez "Créer un raccourci sur le bureau"}

Suivant: J'avais déjà constaté que l'affichage du menu-> Centre de contrôle -> Applications de démarrage -> Ajouter et ajouter des raccourcis sur le bureau donnait des fichiers qui ne fonctionnaient pas, j'ai remarqué dans une autre réponse sur cette page que l'emplacement des démarrages était/home /USERNAME/.config/autostart alors j’ai fait un clic droit sur chacun des raccourcis du bureau VM, puis les ai collés dans ce dossier, écrasant ainsi les anciens fichiers. Maintenant, ils ont développé les "jolies" icônes VirtualBox.

Et bien sûr, lors du redémarrage de l'ordinateur hôte, les 3 ordinateurs virtuels ont démarré automatiquement.

:-)

Bill Williams

PS: hélas, il me manque encore quelque chose, car souvent les machines virtuelles ne démarrent pas au démarrage. Elles génèrent plutôt une boîte de dialogue d'erreur indiquant qu'elles sont verrouillées, même si je leur ai dit de s'arrêter avant l'hôte redémarré.

6
Bill Williams

En plus de la bonne description du service vboxautostart ci-dessus, vous pouvez faire

VBoxManage modifyvm server --autostop-type savestate

pour arrêter automatiquement l'invité à l'arrêt. Pour Ubuntu 14.04, je devais ajouter un sommeil à la section d'arrêt vboxautostart-service, afin qu'il attende que l'invité soit complètement enregistré.

5

J'ai trouvé un moyen plus simple sous Ubuntu 16.04 sous VBox 5.1.34.

Dans la VBox, cliquez avec le bouton droit de la souris sur le VM en cours d'exécution ou inactif dans la liste, sélectionnez "Créer un raccourci sur le bureau". Une fois l'icône affichée sur votre bureau, ouvrez-la à l'aide de n'importe quel outil permettant d'afficher les données sous-jacentes. commande VBox créée (sur mon système, je clique avec le bouton droit de la souris et sélectionne 'propriétés') Copiez ceci dans le presse-papier.

Ouvrez le programme pour mettre à jour les "applications de démarrage" et créer une nouvelle application qui démarre au démarrage, en collant la commande que vous avez copiée à partir du lien de bureau créé par VirtualBox.

2
Dave Nagy

Cela peut être fait en utilisant l'interface de gestion de ligne de commande de VirtualBox. Il suffit d’exécuter le script suivant au démarrage.

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

There est un tutoriel de Nice pour plus d’informations.

1
Artex

Ajout à la réponse @kdmurray.

Si vous obtenez une erreur sur:

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

Pour résoudre ce problème, j'ai dû créer manuellement les fichiers "nom d'utilisateur" .start et "nom d'utilisateur" .stop avec:

Sudo touch "username".start
Sudo touch "username".stop

Et changer de propriétaire avec:

Sudo chown "username" "username".start
Sudo chown "username" "username".stop

rediffusion:

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

puis redémarrez le service:

Sudo service vboxautostart-service stop
Sudo service vboxautostart-service start

vérifier est tout va bien avec:

top

et vous devriez voir le processus "VBox ..." dans une liste, si la machine virtuelle est en cours d'exécution

1
Solata

Pour démarrer un VM lors de la connexion à notre session, nous pouvons définir un fichier .desktop:

Lorsque ce fichier a été copié ou déplacé vers notre répertoire de démarrage automatique, il sera exécuté après la connexion:

L'exécution de Virtual Box dans l'espace utilisateur peut aider à éviter les effets secondaires indésirables de leur démarrage lors du démarrage (par exemple, la VM est exécutée en tant que root, le temps de démarrage augmente de manière incroyable, ...).

1
Takkat

Pour le serveur Ubuntu 16.04.1 LTS, j'ai résolu ceci en faisant:

Commencez par activer le service rc-local.

Sudo systemctl enable rc-local.service

Ajoutez la ligne suivante dans /etc/rc.local

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

Notez que la virtual_box_user est celle qui peut voir la machine virtuelle (que vous êtes prêt à démarrer) en exécutant la commande:

VBoxManage list vms

Exemple:

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

Le /etc/rc.local modifié devrait ressembler à ceci

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

Si vous ne choisissez pas le bon propriétaire de virtualbox, vous devriez voir l'erreur en tapant la commande:

Sudo systemctl status rc-local.service

J'espère que cela peut aider

0
Alessandro Cimbelli

1 - Créer un fichier:

nano /etc/init.d/vm-start

Coller ceci:

#!/bin/bash
/bin/echo "* Starting VMS..."
/bin/sleep 1
/bin/su validuser -c "/usr/bin/vboxmanage startvm MACHINENAME--type headless"
/bin/sleep 1
  • Remplacez "validuser" par votre nom d'utilisateur
  • Remplacez "MACHINENAME" par le nom de votre machine virtuelle.
  • Si vous devez démarrer plus d'une machine, répétez la ligne ci-dessus avec le nom de votre machine virtuelle:

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

2 - Rendre le fichier vm-start exécutable:

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

3 - Éditez rc.local

nano /etc/rc.local

Ajoute ça:

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

4 - Redémarrage.

0
Lucas Catani

C'est ainsi que je démarre mon Centos (nom de ma machine virtuelle) lorsque ma machine hôte redémarre. J'utilise crontab pour ce travail. Voici mon entrée crontab:

@reboot VBoxHeadless --startvm "Centos" &
0
user514700

Vous pouvez également obtenir le gestionnaire de session gnome décrit ici. Gnome Session Manager Il se trouve dans le centre logiciel ou vous pouvez simplement aller sur un terminal et taper Sudo apt-get install gnome-session-common

Ensuite, vous pouvez créer un petit script à exécuter et utiliser le gestionnaire de session gnome pour le démarrer. Voici un petit exemple de script pour vous aider à démarrer ...

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