User Tools

Site Tools


virtualbox

This is an old revision of the document!


VirtualBox

VirtualBox is a free/opensource Hypervisor from Sun Microsystems. It has performance on par with VMware and is very mature. We have two virtualization servers, biovbox and biovboxtesting.

Create a VM

Copy an ISO to your home directory:

$scp ubuntu-9.04-desktop-i386.iso alan@172.26.0.200:~/
  • SSH to VM server: 172.26.0.200
$ ssh alan@172.26.0.200
  • start the virtualbox application
$ VirtualBox
  • Follow the wizard to create a VM with the following properties:
    1. Base Memory: less than 512 MB
    2. Network : NAT
    3. Hard disk size: less than 30Gb

Networking

Bridged Networking

If your guest is using bridged networking you MUST use this command to allow other users to use the host's physical network card. Make sure your virtual machine is shut down and then run this command:

VBoxManage setextradata MyMachine VBoxInternal/Devices/pcnet/0/LUN#0/Config/RestrictAccess 0

Each and every VM using bridged networking must use this command. If you are seeing errors like VERR_PERMISSION_DENIED regarding the network interface, this is the cause!

As of VirtualBox 3.1.2 this is still a known issue.

Port Forwarding

If your guest OS is using NAT for networking and you want to access services like Apache or SSH, you will need to enable port forwarding. There is no GUI for this in VirtualBox, but you can use VBoxManage setextradata to make the required changes. If you want to SSH to your VM, for example:

$ VBoxManage setextradata Ubuntu "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/HostPort" 2223
$ VBoxManage setextradata Ubuntu "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/GuestPort" 22
$ VBoxManage setextradata Ubuntu "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/Protocol" TCP

Then you can log in to the VM from your own computer using the port you've forwarded above:

$ ssh -p 2223 username@172.26.0.200

Updating VirtualBox

To update VirtualBox to a new version you must shutdown all the running VMs. You can do this by first looking to see which VMs are running (ps auxw | grep VBox) and then shutting down or saving the state of each one.

[jmagochi@biovbox ~]$ VBoxManage controlvm CentOS savestate
VirtualBox Command Line Management Interface Version 3.0.8
(C) 2005-2009 Sun Microsystems, Inc.
All rights reserved.

0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
[jmagochi@biovbox ~]$ sudo /etc/init.d/vboxdrv stop

$ yum install virtualbox-3.1

Commonly-used commands

List your VMs

$ VBoxManage list vms

List your running VMs

$ VBoxManage list runningvms 

Autostart VMs at host boot


How do I get my VirtualBox Guest VM’s to start and stop when the host system reboots, shutdown, or starts.

Solution / Answer:

Create an init.d script so that VirtualBox Guest VM are controlled as a system service. VBoxTool http://vboxtool.sourceforge.net

http://www.kernelhardware.org/virtualbox-auto-start-vm-centos-fedora-redhat


Create Config File for vboxcontrol service script

# mkdir /etc/virtualbox</code
<code># 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
"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}

Add Guest VM’s to “machines_enabled” include one VM name per line

# vi /etc/virtualbox/machines_enabled
Centos_HDLES_x86_1
Centos_HDLES_x86_3
Centos_HDLES_LAMP

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 <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="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 <VM
name>|stop-vm <VM name>|poweroff-vm <VM name>}"
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
virtualbox.1274537972.txt.gz · Last modified: 2010/07/04 20:05 (external edit)