Lancer la machine en tant que service
- Sous le compte root :
- Créer un répertoire pour enregistrer le "Process ID" avec les droits adéquats :
mkdir /var/run/utilisateur
chown utilisateur:utilisateur /var/run/utilisateur
Créer un script de démarrage de service, dans ce cas /etc/init.d/myserver. Lui donner des droits d'exécution.
Voir le script
#! /bin/sh
#
# Copyright (c) 2010 Christopher Thompson
# All rights reserved.
#
# Author: Christopher Thompson, 2010
# Modifié par Bruno ANSELME pour fonctionner en mode utilisateur sous Mageia
#
# /etc/init.d/myserver
#
# Description: The virtualbox headless service allows a specified virtualbox
# VM to be run with just RDP access.
#
### BEGIN INIT INFO
# Provides: myserver
# Required-Start: $virtualbox
# Required-Stop: $virtualbox
# Default-Start: 3 4 5
# Short-Description: MyServer, Mageai dans une VirtualBox
# Description: MyServer, Mageai dans une VirtualBox en mode Headless.
### END INIT INFO
# 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 0
fi
SERVICENAME=myserver
VIRTUALMACHINE="MyServer"
VUSER=utilisateur
#echo "VirtualBox Virtual Machine details"
#echo "=================================="
#echo "VIRTUALMACHINE=$VIRTUALMACHINE"
VMSTATUS=`su $VUSER -c "VBoxManage list runningvms | grep $VIRTUALMACHINE | wc -l"`
PIDFILE="/var/run/myserver/$SERVICENAME-$VIRTUALMACHINE.pid"
# Check for missing binaries
VIRTUALBOX_BIN=/usr/bin/VBoxHeadless
VIRTUALBOX_CONTROL_BIN=/usr/bin/VBoxManage
test -x $VIRTUALBOX_BIN || -x $VIRTUALBOX_CONTROL_BIN || { echo "$VIRTUALBOX_BIN or $VIRTUALBOX_CONTROL_BIN not installed";
if [ "$1" = "stop" ]; then exit 0;
else exit 5; fi; }
# Check for existence of needed config file and read it
#VIRTUALMACHINE_CONFIG="/etc/virtualbox/$VIRTUALMACHINE.xml"
VIRTUALMACHINE_CONFIG="/home/$VUSER/.VirtualBox/Machines/$VIRTUALMACHINE/$VIRTUALMACHINE.vbox"
# echo "VIRTUALMACHINE_CONFIG=$VIRTUALMACHINE_CONFIG"
#echo " "
test -r "$VIRTUALMACHINE_CONFIG" || { echo "$VIRTUALMACHINE_CONFIG does not exist";
if [ "$1" = "stop" ]; then exit 0;
else exit 6; fi; }
case "$1" in
start)
echo -n "Starting $SERVICENAME: $VIRTUALMACHINE "
if [ $VMSTATUS = "1" ]; then echo "ALREADY RUNNING"; exit 2; else echo ""; fi;
## Start daemon.
daemon su - $VUSER -c \"$VIRTUALBOX_BIN -s $VIRTUALMACHINE\" &
;;
stop)
echo "ACPI power button depression sent to Virtual Machine."
echo -n "Shutting down $SERVICENAME: $VIRTUALMACHINE "
if [ $VMSTATUS = "0" ]; then echo "NOT RUNNING"; exit 2; else echo ""; fi;
su $VUSER -c "VBoxManage controlvm $VIRTUALMACHINE acpipowerbutton"
echo -n "Please wait for shutdown to complete: "
while [ `su $VUSER -c "VBoxManage list runningvms | grep $VIRTUALMACHINE | wc -l"` != "0" ]
do
echo -n "."
sleep 2
done
echo "Done"
rm -f "$PIDFILE"
;;
force-stop)
echo "This is a very harsh way of managing the machines, please shut them down using SSH or RDP"
echo -n "Shutting down $SERVICENAME: $VIRTUALMACHINE"
if [ $VMSTATUS = "0" ]; then echo "NOT RUNNING"; exit 2; else echo ""; fi;
while [ `su $VUSER -c "$VIRTUALBOX_CONTROL_BIN list runningvms | grep $VIRTUALMACHINE | wc -l"` != "0" ]
do
echo -n "."
result=`su $VUSER -c "$VIRTUALBOX_CONTROL_BIN controlvm $VIRTUALMACHINE poweroff"`
sleep 1
done
echo "Done"
;;
restart)
## Stop the service and regardless of whether it was running or not, start it again.
$0 stop
$0 start
;;
status)
echo -n "Checking for service $SERVICENAME : "
if [ $VMSTATUS = "1" ]; then echo "RUNNING";
else echo "NOT RUNNING"; fi;
su $VUSER -c "VBoxManage showvminfo $VIRTUALMACHINE"
;;
*)
## If no parameters are given, print which are avaiable.
echo "Usage: $0 {start|stop|force-stop|status|restart}"
echo " "
exit 1
;;
esac
:
echo " "
C'est l'adaptation d'un script trouvé ici
pour fonctionner avec un utilisateur autre que root.
Modifier les variables SERVICENAME et VIRTUALMACHINE avec le nom de votre machine virtuelle
et le nom de service que vous souhaitez utiliser.
Le démarrage de la machine est réalisé par la commande VBoxHeadless -s "$VIRTUALMACHINE".
L'arrêt de la machine est réalisé par la commande VBoxManage controlvm "$VIRTUALMACHINE" acpipowerbutton
qui envoie un signal ACPI d'extinction au système.
Signaler au système le nouveau service, affecter ses runlevel :
chkconfig --add myserver
chkconfig --level 35 myserver on
Démarrer manuellement le service :
service myserver start
Laisser un peu de temps à la machine pour démarrer avant de vous y connecter.
Il est possible de surveiller l'avancement du boot en exécutant VirtualBox, mais pas de prendre la main dessus.