How to start Virtual Machines automatically in VirtualBox
Create Config File for vboxcontrol service script
# mkdir /etc/virtualbox
# touch /etc/virtualbox/machines_enabled
The file “machines_enabled” located in “/etc/virtualbox” is where we list the names of the Guest VM’s that we want vboxcontrol to control.
To get a list of your current Guest VM names execute the following command and notice the name is in ” “:
$ VBoxManage list vms
"Windows XP" {5087b02a-5816-4c76-b302-c13175623023}
"Windows 7" {bcae660a-f627-46d6-8c95-9da97363eeea}
"Windows 2008" {3907173c-cc15-4820-a930-f0bb3c13cb7e}
Add Guest VM’s to “machines_enabled” include one VM name per line
# vi /etc/virtualbox/machines_enabled
Windows XP
Windows 7
Windows 2008
Add VirtualBox VM Service script
Create new init.d service script file and give execute permissions
# touch /etc/init.d/vboxcontrol
# chmod 755 /etc/init.d/vboxcontrol
Copy the following code into file “/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 based on:
# Version 2008051100 by Jochem Kossen
# 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="vmadmin"
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 name>|stop-vm |poweroff-vm }"
exit 3
esac
exit 0
Add vboxcontrol service to chkconfig registry
# chkconfig --add vboxcontrol
Tell chkconfig to create symlinks for runlevels and activate service vboxcontrol
# chkconfig vboxcontrol on
How to use vboxcontrol to control Guest VM’s running as a service
Start ALL VirtalMachines listed in machines_enable file:
# service vboxcontrol start
Stop ALL VirtualMachines currently running !!
# service vboxcontrol stop
View Status of Running VirtualMachines
# service vboxcontrol status
Start a Specific VirtualMachine Only !!
# service vboxcontrol start-vm
Stop a Specific VirtualMachine Only ( send acpipowerbutton signal )
# service vboxcontrol stop-vm
Send Power Kill signal to VirtualMachine (immediate power off)
# service vboxcontrol poweroff-vm
# mkdir /etc/virtualbox
# touch /etc/virtualbox/machines_enabled
The file “machines_enabled” located in “/etc/virtualbox” is where we list the names of the Guest VM’s that we want vboxcontrol to control.
To get a list of your current Guest VM names execute the following command and notice the name is in ” “:
$ VBoxManage list vms
"Windows XP" {5087b02a-5816-4c76-b302-c13175623023}
"Windows 7" {bcae660a-f627-46d6-8c95-9da97363eeea}
"Windows 2008" {3907173c-cc15-4820-a930-f0bb3c13cb7e}
Add Guest VM’s to “machines_enabled” include one VM name per line
# vi /etc/virtualbox/machines_enabled
Windows XP
Windows 7
Windows 2008
Add VirtualBox VM Service script
Create new init.d service script file and give execute permissions
# touch /etc/init.d/vboxcontrol
# chmod 755 /etc/init.d/vboxcontrol
Copy the following code into file “/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
# Version 2008051100 by Jochem Kossen
# 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="vmadmin"
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
exit 3
esac
exit 0
Add vboxcontrol service to chkconfig registry
# chkconfig --add vboxcontrol
Tell chkconfig to create symlinks for runlevels and activate service vboxcontrol
# chkconfig vboxcontrol on
How to use vboxcontrol to control Guest VM’s running as a service
Start ALL VirtalMachines listed in machines_enable file:
# service vboxcontrol start
Stop ALL VirtualMachines currently running !!
# service vboxcontrol stop
View Status of Running VirtualMachines
# service vboxcontrol status
Start a Specific VirtualMachine Only !!
# service vboxcontrol start-vm
Stop a Specific VirtualMachine Only ( send acpipowerbutton signal )
# service vboxcontrol stop-vm
Send Power Kill signal to VirtualMachine (immediate power off)
# service vboxcontrol poweroff-vm
Comments