jeudi 21 février 2013

VIRTUALBOX sous LINUX : démarrage automatique des VMs

VirtualBox démarrage automatique VM Centos Fedora RedHat

Le principe est de faire démarrer de façon automatique au démarrage de l'OS les VM enregistrées dans VirtualBOX.
Créer un fichier de configuration pour le script du service vboxcontrol
# mkdir /etc/virtualbox # touch /etc/virtualbox/machines_enabled

Dans le fichier "machines_enabled" situé dans "/ etc / virtualbox" nous allons indiquer le nom des VMs que nous voulons contrôler.

Pour obtenir la liste des noms actuels de vos machine virtuelle, exécutez la commande suivante et notez le nom est dans " ":




$ VBoxManage list vms "Centos_HDLES_x86_1" {5087b02a-5816-4c76-b302-c13175623023} "Centos_HDLES_x86_3" {bcae660a-f627-46d6-8c95-9da97363eeea} "Centos_HDLES_LAMP" {3907173c-cc15-4820-a930-f0bb3c13cb7e}

Ajouter les VMs à la liste "machines_enabled» avec le nom de VM par ligne


# vi /etc/virtualbox/machines_enabled Centos_HDLES_x86_1 Centos_HDLES_x86_3 Centos_HDLES_LAMP

Ajouter le script service VM VirtualBOX
Créer un nouveau fichier init.d script de service et de donner les droits d'exécution

# touch /etc/init.d/vboxcontrol
# chmod 755 /etc/init.d/vboxcontrol


Editer le fichier de service vboxcontrol:

#vim /etc/init.d/vboxcontrol


Et copiez le code suivant dans le fichier "/ etc / init.d / vboxcontrol"




#! /bin/sh
# vboxcontrol   Startup script for VirtualBox Virtual Machines
#
# chkconfig: 345 98 02
# description: Manages VirtualBox VMs
# processname: vboxcontrol
#
# pidfile: /var/run/vboxcontrol/vboxcontrol.pid
#
### BEGIN INIT INFO
#
### END INIT INFO
#
# Version 20090301 by Kevin Swanson <kswan.info> based on:
# Version 2008051100 by Jochem Kossen <jochem.kossen@gmail.com>
# http://farfewertoes.com
#
# Released in the public domain
#
# This file came with a README file containing the instructions on how
# to use this script.
#

# Source function library.
if [ -f /etc/init.d/functions ] ; then
. /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ] ; then
. /etc/rc.d/init.d/functions
else
exit 1
fi

################################################################################
# INITIAL CONFIGURATION
VBOXDIR="/etc/virtualbox"
VM_USER="root"
USE_NAT="no"

export PATH="${PATH:+$PATH:}/bin:/usr/bin:/usr/sbin:/sbin"

if [ -f $VBOXDIR/config ]; then
. $VBOXDIR/config
fi

SU="su $VM_USER -c"
VBOXMANAGE="VBoxManage -nologo"

################################################################################
# FUNCTIONS

# Determine if USE_NAT is set to "yes"
use_nat() {
if [ "$USE_NAT" = "yes" ]; then
return `true`
else
return `false`
fi
}

log_failure_msg() {
echo $1
}

log_action_msg() {
echo $1
}

# Check for running machines every few seconds; return when all machines are
# down
wait_for_closing_machines() {
RUNNING_MACHINES=`$SU "$VBOXMANAGE list runningvms" | wc -l`
if [ $RUNNING_MACHINES != 0 ]; then
sleep 5
wait_for_closing_machines
fi
}

################################################################################
# RUN
case "$1" in
start)
if [ -f /etc/virtualbox/machines_enabled ]; then

cat /etc/virtualbox/machines_enabled | while read VM; do
log_action_msg "Starting VM: $VM ..."
$SU "$VBOXMANAGE startvm "$VM" -type vrdp"
RETVAL=$?
done
touch /var/lock/subsys/vboxcontrol
fi
;;
stop)
# NOTE: this stops all running VM's. Not just the ones listed in the
# config
$SU "$VBOXMANAGE list runningvms" | while read VM; do
log_action_msg "Shutting down VM: $VM ..."
$SU "$VBOXMANAGE controlvm "$VM" acpipowerbutton"
done
rm -f /var/lock/subsys/vboxcontrol
wait_for_closing_machines

;;
start-vm)
log_action_msg "Starting VM: $2 ..."
$SU "$VBOXMANAGE startvm "$2" -type vrdp"
;;
stop-vm)
log_action_msg "Stopping VM: $2 ..."
$SU "$VBOXMANAGE controlvm "$2" acpipowerbutton"
;;
poweroff-vm)
log_action_msg "Powering off VM: $2 ..."
$SU "$VBOXMANAGE controlvm "$2" poweroff"
;;
status)
echo "The following virtual machines are currently running:"
$SU "$VBOXMANAGE list runningvms" | while read VM; do
echo -n "$VM ("
echo -n `$SU "VBoxManage showvminfo ${VM%% *}|grep Name:|sed -e 's/^Name:s*//g'"`
echo ')'
done
;;
*)
echo "Usage: $0 {start|stop|status|start-vm <VM
name>|stop-vm <VM name>|poweroff-vm <VM name>}"
exit 3
esac

exit 0

Ajouter le service vboxcontrol au registre avec chkconfig:


# chkconfig --add vboxcontrol


Créer des liens symboliques pour les niveaux d'exécution et d'activer le service vboxcontrol

# chkconfig vboxcontrol on


Comment utiliser vboxcontrol pour le contrôler via le terminal en tant que service:
Demarrer toutes les machines viruelles listées dans le fichier "machines_enabled":

# service vboxcontrol start
Si on obtient ce message à l'exécution de cette commande:
# service vboxcontrol start
Starting VM: VM1 ...
Waiting for VM "VM1" to power on...
VBoxManage: error: This VM was configured to use 3D acceleration. However, the 3D support of the host is not working properly and the VM cannot be started. To fix this problem, either fix the host 3D support (update the host graphics driver?) or disable 3D acceleration in the VM settings (VERR_NOT_AVAILABLE)
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component Console, interface IConsole

 il faut désactiver l'option d'affichage 3D dans le logiciel VirtualBOX pour la/les VMs:



Arrêter toutes les machines virtuelles en cours d'exécution:

# service vboxcontrol stop


Voir le status des machines virtuelles:

# service vboxcontrol status


Démarrer une machine virtuelle en particulier:

# service vboxcontrol start-vm <VM NAME>


Arrêter une machine virtuelle en particulier;

# service vboxcontrol stop-vm <VM-NAME>


Envoyer un signal d'arrêt sur une machine virtuelle (mise hors tension immédiate)

# service vboxcontrol poweroff-vm <VM-NAME>


PS: si on veut supprimer la demande de mot de passe au démarrage de la VM pour que le démarrage en mode graphique se fasse sans intervention:

Il faut modifier le fichier suivant:

#vim /etc/gdm/custom.conf


ajouter les lignes suivantes dedant:
[daemon]
 AutomaticLoginEnable=true
 AutomaticLogin=username
<--le user qui va être configuré pour démarrer en auto biensur !!




Aucun commentaire: