5 votes

Démarrer VirtualBox Headless VM au démarrage

Je fais tourner deux VMs sans tête VirtualBox sur un hôte Ubuntu 12.04. J'aimerais que ces VMs démarrent automatiquement lorsque le système démarre.

J'ai deux entrées crontab définies comme suit (sous l'utilisateur qui possède les VM) :

@reboot /usr/bin/vboxheadless -startvm io
@reboot /usr/bin/vboxheadless -startvm pbx

Mais il semble que cela ne suffise pas. Si je lance la commande directement depuis le terminal, les machines démarrent sans problème, mais je n'arrive pas à les faire démarrer une fois que le système a démarré. Je pense que la crontab s'exécute peut-être avant que le programme/bibliothèque VirtualBox ne soit chargé.

Comment démarrer automatiquement ces machines virtuelles ?

7voto

EagleSilver Points 13

Voici ce que j'utilise. Il démarre les VM au démarrage et sauvegarde leur état à l'arrêt/au redémarrage.

#!/bin/bash
### BEGIN INIT INFO
# Provides:       vmboot
# Required-Start: vboxdrv
# Required-Stop:
# Default-Start:  2 3 4 5
# Default-Stop:   0 1 6
# Short-Description: Stop/Start VMs on System shutdown
### END INIT INFO

VBOXUSER=vboxuser
SU="sudo -H -u $VBOXUSER"
VBOXMANAGE=/usr/bin/VBoxManage
VBOXHEADLESS=/usr/bin/VBoxHeadless
RUNNINGVMS=$($SU $VBOXMANAGE --nologo list runningvms | sed -e 's/^".*".*{\(.*\)}/\1/')
ALLVMS=$($SU $VBOXMANAGE --nologo list vms | sed -e 's/^".*".*{\(.*\)}/\1/')

case $1 in
stop)
if [[ -n $RUNNINGVMS ]]; then
echo "Saving the state of all running VMs..."
for v in $RUNNINGVMS; do
    $SU $VBOXMANAGE --nologo controlvm $v savestate
done
fi
;;
start)
for v in $ALLVMS; do
if [[ -n $($SU $VBOXMANAGE --nologo showvminfo $v | grep saved) ]]; then
    echo "Restoring VMs..." && $SU $VBOXHEADLESS -s $v & > /dev/null
fi
done
;;
*)
echo "Usage: /etc/init.d/vmboot start | stop"; exit 1
;;
esac
exit 0

Sauvegardez-le dans /etc/init.d. J'ai nommé le mien vbox. Exécuter update-rc.d <script name> defaults et y

1voto

Ansgar Wiechers Points 5210

Je soupçonne que vous êtes connecté avec un compte autre que root lorsque vous démarrez les machines virtuelles manuellement, alors que vous êtes connecté avec un compte autre que root lorsque vous démarrez les machines virtuelles manuellement. cron s'exécute en tant que root et ne connaît donc pas vos VM. Vous pouvez le vérifier en exécutant la commande

sudo /usr/bin/vboxheadless -startvm io

Si vous obtenez une erreur

Invalid machine name or UUID!

la VM n'est pas enregistrée avec le compte root. Dans ce cas, créez un Shell Shell pour exécuter les commandes sous votre compte et planifiez ce Shell avec cron :

#!/bin/sh

USERNAME=...

su -c "/usr/bin/vboxheadless -startvm io" - $USERNAME
su -c "/usr/bin/vboxheadless -startvm pbx" - $USERNAME

0voto

EagleSilver Points 13

A

Q

egrep -c '(vmx|svm)' /proc/cpuinfo

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X