# run-virtualbox.include # # Copyright (c) 2009, 2010 - OpenSLX GmbH # # This program/file is free software distributed under the GPL version 2. # See http://openslx.org/COPYING # # If you have any feedback please consult http://openslx.org/feedback and # send your feedback to feedback@openslx.org # # General information about OpenSLX can be found at http://openslx.org # # Include script for running the Virtual Box on an OpenSLX client via the # run-virt.sh. The stuff is copied to /etc/opt/openslx/virtualbox/run- # virtualbox.include during stage3. ################################################################################ ### General settings ################################################################################ # include general configuration from vmchooser . /etc/opt/openslx/plugins/virtualbox/virtualbox.conf # Current ID, to make sure it won't run into conflicts if started more # as once at the same time, else delete would make the trick... ID=$$ machname="$(basename ${diskfile})" machname=${machname%.*} # use alternate configuration directory instead of $HOME/.VirtualBox export VBOX_USER_HOME="/tmp/vbox-${USER}" rm -rf ${VBOX_USER_HOME}/* /tmp/.vbox-${USER}-ipc machfolder="${VBOX_USER_HOME}/Machines" machconfig="${machfolder}/${machname}/${machname}.xml" diskfolder="${VBOX_USER_HOME}/HardDisks" mkdir -p ${machfolder}/${machname}/Snapshots ${diskfolder} ln -sf ${diskfile} ${diskfolder}/${machname}.vdi # Get ID of VBox Image... diskuid="$(VBoxManage -nologo showvdiinfo ${diskfile} |grep UUID|awk '{ print $2; }')" # produce proper mac address format mac="0050560d$(echo ${mac}|sed 's/://;y/ABCDEF/abcdef/')" date="$(date +%Y-%m-%dT%H:%M:%SZ)" # Operating system. Possible: VBoxManage -nologo list ostypes: WindowsXP, # WindowsVista, Windows7, Linux26 etc. # keeps compatibility to vmware plugin run-virt.include # Todo: maybe rewrite, to reduce checks, merge it with network option, # so we can have a "compatibility to vmware config" section if [ "${vmostype}" = "winxppro" ]; then vmostype="WindowsXP" elif [ "${vmostype}" = "winvista" ]; then vmostype="WindowsVista" elif [ "${vmostype}" = "Windows7" ]; then vmostype="Windows7" elif [ "${vmostype}" = "linux" ]; then vmostype="Linux26" elif [ -n "${vmostype}" ]; then vmostype="${vmostype}" fi # translate network kinds (nat, bridged, host-only) if [ "${network_kind}" = "nat" ]; then network_kind="NAT" elif [ "${network_kind}" = "bridged" ]; then network_kind="" elif [ "${network_kind}" = "host-only" ]; then network_kind="" fi # memory part equal to vmware plugin # percentage of memory to use for virtualbox in standard case permem=30 if [ "${totalmem}" -ge "1600" ]; then permem=40 fi # check if /tmp is on harddisk if grep -qe "/dev/.* /tmp " /proc/mounts ; then permem=60 id44="1" # Hack, if more than 2,5G RAM use 40% of Ram and write vmem into Ram as well # (40% vmware | 40% confdir(vmem...) | 20% host # VMplayer 2+ issue if [ "${totalmem}" -ge "2500" ]; then permem=40 #mkdir /dev/shm/vbox/${USER} snapshotdir=/dev/shm/vbox/$USER fi fi mem=$(expr ${totalmem} / 100 \* ${permem}) if [ "${id44}" = "1" ]; then memhost=$(expr ${totalmem} - ${mem}) else memhost=$(expr ${totalmem} - ${mem} - ${mem}) fi #permem=40 #mem=$(expr ${totalmem} * ${permem}) if [ "${mem}" -lt "256" ] || [ "${memhost}" -lt "256" ]; then writelog "\tMemory out of range: ${mem} MB (guest) / ${memhost} MB (host)!" writelog "\tMin. 256 MB for host and guest!" exit 1 fi # most of the following does not make much sense yet ... # # virtual fd/cd/dvd and drive devices, floppy b: for configuration # if $floppy_0 from run-virt.include set then fdtest="TRUE" fdtest= fdtest=${floppy_0:+"TRUE"} # if $fdtest not set floppy0="FALSE", else "TRUE" floppy0=${fdtest:-"FALSE"} floppy1="TRUE" floppy1name="/var/lib/virt/vmchooser/loopimg/fd.img" # if $cdrom_0 from run-virt.include set then cdtest="TRUE" cdtest= cdtest=${cdrom_0:+"TRUE"} # if $cdtest not set cdrom0="FALSE", else "TRUE" cdrom0=${cdtest:-"FALSE"} # if $cdrom_1 from run-virt.include set then cdtest="TRUE" cdtest= cdtest=${cdrom_1:+"TRUE"} # if $cdtest not set cdrom1="FALSE", else "TRUE" cdrom1=${cdtest:-"FALSE"} # ide is expected default, test for the virtual disk image type should # be done while creating the runscripts ... ide="TRUE" hddrv="ide" ################################################################################ ### Pepare and configure virtual machine and disk image ################################################################################ # produce the machine configuration XML sed -e "s,MACHINE,${machname},g;s,OSTYPE,${vmostype},;s,MEMSIZE,${mem}," \ -e "s,DISKUID,${diskuid},;s,MACADDR,${mac},;s,DATE,${date}," \ -e "s,NETTYPE,${network_kind},;s,OPTDEVICE,/dev/sr0," \ /etc/opt/openslx/plugins/virtualbox/MachineTemplate.xml \ >${machconfig} # shortened date YYYY-MM-DD date=${date%T*} # produce the general and containers configuration file sed -e "s,DISKUID,${diskuid},;s,FD1NAME,${floppy1name},;s,DATE,${date}," \ -e "s,DISKFILE,${diskfolder}/${machname}.vdi,;s,MACHINE,${machname},g;s,MACADDR,${mac}," \ -e "s,MACHFOLDER,${machfolder},;s,DISKFOLDER,${diskfolder}," \ /etc/opt/openslx/plugins/virtualbox/VirtualBox.xml \ >${VBOX_USER_HOME}/VirtualBox.xml cat /opt/openslx/plugin-repo/virtualbox/empty-diff.vdi.gz | \ gunzip >${machfolder}/${machname}/Snapshots/{88bc8b6d-f248-468a-95fe-318084904f8b}.vdi #\t # finally set env for run-virt.sh ################################################################################ # wait for a certain command to settle while [ TRUE ] ; do ps aux|grep -v grep|grep -q VBoxSVC || break done # set the variables appropriately (several interfaces with different names) VIRTCMD=$(which VirtualBox 2>/dev/null) VIRTCMDOPTS="--startvm 00000000-1111-2222-3456-${mac} --start-running"