summaryrefslogtreecommitdiffstats
path: root/os-plugins/plugins/virtualbox
diff options
context:
space:
mode:
Diffstat (limited to 'os-plugins/plugins/virtualbox')
-rw-r--r--os-plugins/plugins/virtualbox/OpenSLX/OSPlugin/virtualbox.pm124
-rw-r--r--os-plugins/plugins/virtualbox/XX_virtualbox.sh70
-rw-r--r--os-plugins/plugins/virtualbox/files/empty-diff-00.vdi.gzbin0 -> 282 bytes
-rw-r--r--os-plugins/plugins/virtualbox/files/empty-diff-01.vdi.gzbin0 -> 279 bytes
-rw-r--r--os-plugins/plugins/virtualbox/files/empty-diff-02.vdi.gzbin0 -> 284 bytes
-rw-r--r--os-plugins/plugins/virtualbox/files/empty-diff-03.vdi.gzbin0 -> 282 bytes
-rw-r--r--os-plugins/plugins/virtualbox/files/empty-diff-04.vdi.gzbin0 -> 282 bytes
-rw-r--r--os-plugins/plugins/virtualbox/files/empty-diff.vdi.gzbin0 -> 282 bytes
-rw-r--r--os-plugins/plugins/virtualbox/files/machine.include134
-rw-r--r--os-plugins/plugins/virtualbox/files/run-virt.include465
-rw-r--r--os-plugins/plugins/virtualbox/files/run-virt.include.bak159
-rw-r--r--os-plugins/plugins/virtualbox/files/run-virt2.include323
-rw-r--r--os-plugins/plugins/virtualbox/files/rwimg.vdi.gzbin0 -> 268 bytes
-rw-r--r--os-plugins/plugins/virtualbox/files/virtualbox.include47
14 files changed, 1136 insertions, 186 deletions
diff --git a/os-plugins/plugins/virtualbox/OpenSLX/OSPlugin/virtualbox.pm b/os-plugins/plugins/virtualbox/OpenSLX/OSPlugin/virtualbox.pm
index fd1424f1..07ec9dc0 100644
--- a/os-plugins/plugins/virtualbox/OpenSLX/OSPlugin/virtualbox.pm
+++ b/os-plugins/plugins/virtualbox/OpenSLX/OSPlugin/virtualbox.pm
@@ -1,3 +1,4 @@
+# Copyright (c) 2009..2010 - RZ Uni Freiburg
# Copyright (c) 2009..2010 - OpenSLX GmbH
#
# This program is free software distributed under the GPL version 2.
@@ -45,7 +46,8 @@ sub getInfo
stateless client.
End-of-Here
precedence => 70,
- required => [ qw( desktop ) ],
+ # headless mode does not require a desktop!
+ #required => [ qw( desktop ) ],
};
}
@@ -67,7 +69,7 @@ sub getAttrInfo
should the 'virtualbox'-plugin be executed during boot?
End-of-Here
content_regex => qr{^(0|1)$},
- content_descr => '1 means active - 0 means inactive',
+ content_descr => '1 for active, 0 for inactive',
default => '1',
},
# attribute 'imagesrc' defines where we can find virtualbox images
@@ -77,13 +79,14 @@ sub getAttrInfo
description => unshiftHereDoc(<<' End-of-Here'),
Where do we store our virtualbox images? NFS? Filesystem?
End-of-Here
- #TODO: check if the input is valid
- #content_regex => qr{^(0|1)$},
- content_descr => 'Allowed values: local path or URI',
- default => '',
+ content_regex => qr{^(/|nfs://)},
+ content_descr => 'local path or URI or "-" (unset)',
+ default => undef,
},
# attribute 'bridge' defines if bridged network mode should be
# switched on
+ # TODO: change to net -> nat, bridge, hostonly?
+ # TODO: since we use def in XML maybe use to override
'virtualbox::bridge' => {
applies_to_systems => 1,
applies_to_clients => 1,
@@ -92,10 +95,46 @@ sub getAttrInfo
to the ethernet the host is connected to) be enabled
End-of-Here
content_regex => qr{^(0|1)$},
- content_descr => 'Allowed values: 0 or 1',
+ content_descr => '0 or 1',
default => '1',
},
-
+ # attribute 'mem' defines if memory should be forced
+ 'virtualbox::mem' => {
+ applies_to_systems => 1,
+ applies_to_clients => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ Do you want to force a ralative amount of RAM?
+ (Not implemented right now!)
+ End-of-Here
+ content_regex => qr{^(\d\d??)$},
+ content_descr => 'Between 0 - 99',
+ default => undef,
+ },
+ # attribute 'kvm' defines if KVM modules should be forced
+ 'virtualbox::kvm' => {
+ applies_to_systems => 1,
+ applies_to_clients => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ Do you want to force the usage of KVM modules where applicable?
+ (Not implemented right now!)
+ End-of-Here
+ content_regex => qr{^(0|1)$},
+ content_descr => '0 or 1',
+ default => undef,
+ },
+ # attribute 'tftpdir' defines TFTP dir for network boots /w NAT
+ 'virtualbox::tftpdir' => {
+ applies_to_systems => 1,
+ applies_to_clients => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ Do you want to define a stage 4 TFTP dir for netwoork boots when
+ using NAT?
+ Hint: Mount your TFTP ro via NFS to a local dir
+ End-of-Here
+ content_regex => qr{^(/)},
+ content_descr => 'local path or "-" (unset)',
+ default => '/var/lib/virt/virtualbox',
+ },
};
}
@@ -103,7 +142,7 @@ sub installationPhase
{
my $self = shift;
my $info = shift;
-
+
$self->{pluginRepositoryPath} = $info->{'plugin-repo-path'};
$self->{pluginTempPath} = $info->{'plugin-temp-path'};
$self->{openslxBasePath} = $info->{'openslx-base-path'};
@@ -111,22 +150,31 @@ sub installationPhase
$self->{attrs} = $info->{'plugin-attrs'};
my $engine = $self->{'os-plugin-engine'};
-
+
# Different names of the tool (should be unified somehow!?)
if (!isInPath('VirtualBox')) {
# todo: fix this
- $self->{distro}->installVbox();
+ $self->{distro}->installVbox();
}
if (!isInPath('VirtualBox')) {
- print "VirtualBox is not installed. VirtualBox Plugin won't be installed!\n";
-# exit
- }
+ print
+ "VirtualBox is not installed. VirtualBox Plugin won't be installed!\n"
+ ;
+ #exit
+ }
$self->_writeRunlevelScript();
- # Copy run-virt.include to the appropriate place for inclusion in stage4
- copyFile("$self->{openslxBasePath}/lib/plugins/virtualbox/files/run-virt.include",
- "$self->{pluginRepositoryPath}/");
+ # Copy run-virt.include and template files to the appropriate place for
+ # inclusion in stage4
+ my $pluginName = $self->{'name'};
+ my $pluginBasePath =
+ "$self->{openslxBasePath}/lib/plugins/$pluginName/files";
+ foreach my $file ( qw( run-virt.include virtualbox.include machine.include
+ empty-diff.vdi.gz rwimg.vdi.gz ) ) {
+ copyFile("$pluginBasePath/$file", "$self->{pluginRepositoryPath}/");
+ chmod 0644, "$self->{pluginRepositoryPath}/$file";
+ }
return;
}
@@ -155,8 +203,8 @@ sub checkStage3AttrValues
sub _writeRunlevelScript
{
my $self = shift;
-
my $initfile = newInitFile();
+ my $script = "";
$initfile->setName("vbox-slx");
$initfile->setDesc("Setup environment for virtualbox. Part of OpenSLX virtualbox plugin.");
@@ -166,30 +214,34 @@ sub _writeRunlevelScript
'running',
'lsmod | grep -q "$1[^_-]"'
);
+ #
+ $script = unshiftHereDoc(<<' End-of-Here');
+ if running vboxdrv; then
+ if running vboxnetflt; then
+ echo "VirtualBox kernel modules (vboxdrv and vboxnetflt) are loaded."
+ else
+ echo "VirtualBox kernel module is loaded."
+ fi
+ #TODO: check it: ignore user check. handling our own way:
+ for i in /tmp/.vbox-*-ipc; do
+ echo "Running: "
+ $(VBoxManage -q list runningvms | sed -e 's/^".*"//' 2>/dev/null)
+ done
+ else
+ echo "VirtualBox kernel module(s) are not loaded."
+ fi
+ End-of-Here
$initfile->addFunction(
- 'vmstatus',
- 'if running vboxdrv; then
- if running vboxnetflt; then
- echo "VirtualBox kernel modules (vboxdrv and vboxnetflt) are loaded."
- else
- echo "VirtualBox kernel module is loaded."
- fi
- #TODO: check it: ignore user check. handling our own way:
- for i in /tmp/.vbox-*-ipc; do
- echo "Running: "
- $(VBoxManage --nologo list runningvms | sed -e \'s/^".*"//\' 2>/dev/null)
- done
- else
- echo "VirtualBox kernel module is not loaded."
- fi'
+ "vmstatus",
+ "$script"
);
$initfile->addFunction(
'start',
- ' modprobe vboxdrv && modprobe vboxnetflt',
+ ' modprobe -qa vboxdrv vboxnetflt vboxnetadp',
);
$initfile->addFunction(
'stop',
- ' rmmod vboxnetflt && rmmod vboxdrv',
+ ' rmmod vboxnetadp vboxnetflt vboxdrv',
);
$initfile->addToCase(
'start',
@@ -212,8 +264,6 @@ sub _writeRunlevelScript
my $distro = (split('-',$self->{'os-plugin-engine'}->distroName()))[0];
my $runlevelscript = getInitFileForDistro($initfile, $distro);
- # todo: because we dont have distribution or version dependend
- # init scripts we could put it directly into /etc/init.d...
spitFile("$self->{'pluginRepositoryPath'}/vbox-slx", $runlevelscript);
}
diff --git a/os-plugins/plugins/virtualbox/XX_virtualbox.sh b/os-plugins/plugins/virtualbox/XX_virtualbox.sh
index 38dd80ec..b54b4bec 100644
--- a/os-plugins/plugins/virtualbox/XX_virtualbox.sh
+++ b/os-plugins/plugins/virtualbox/XX_virtualbox.sh
@@ -1,4 +1,5 @@
-# Copyright (c) 2009 - OpenSLX GmbH
+# Copyright (c) 2009..2010 - RZ Uni Freiburg
+# Copyright (c) 2009..2010 - OpenSLX GmbH
#
# This program/file is free software distributed under the GPL version 2.
# See http://openslx.org/COPYING
@@ -11,19 +12,28 @@
# script is included from init via the "." load function - thus it has all
# variables and functions available
+# include default directories
+. /etc/openslx.conf
+
+CONFFILE=/initramfs/plugin-conf/virtualbox.conf
+PLUGINCONFDIR=/mnt/${OPENSLX_DEFAULT_CONFDIR}/plugins/virtualbox
+PLUGINDIR=/mnt/${OPENSLX_DEFAULT_DIR}/plugin-repo/virtualbox
+VIRTDIR=/mnt/${OPENSLX_DEFAULT_VIRTDIR}/virtualbox
+
# check if the configuration file is available
-if [ -e /initramfs/plugin-conf/virtualbox.conf ]; then
+if [ -e ${CONFFILE} ]; then
# load needed variables
- . /initramfs/plugin-conf/virtualbox.conf
+ . ${CONFFILE}
# Test if this plugin is activated... more or less useless with the
# new plugin system
- if [ $virtualbox_active -ne 0 ]; then
+ if [ $virtualbox_active -ne 0 2>/dev/null ]; then
[ $DEBUGLEVEL -gt 0 ] && echo "executing the 'virtualbox' os-plugin ...";
+
# load general configuration
- . /initramfs/machine-setup
+ . /etc/initramfs-setup
# get source of virtualbox image server (get type, server and path)
if strinstr "/" "${virtualbox_imagesrc}" ; then
@@ -33,28 +43,56 @@ if [ -e /initramfs/plugin-conf/virtualbox.conf ]; then
fi
if [ -n "${vbimgserv}" ] ; then
# directory where qemu images are expected in
- mnttarget=/mnt/var/lib/virt/virtualbox
+ mnttarget=${VIRTDIR}
# mount the virtualbox image source readonly (ro)
fsmount ${vbimgprot} ${vbimgserv} ${vbimgpath} ${mnttarget} ro
else
- [ $DEBUGLEVEL -gt 1 ] && error " * Incomplete information in variable \
-${virtualbox_imagesrc}." nonfatal
+ [ $DEBUGLEVEL -gt 1 ] && \
+ error " * Incomplete information in variable ${virtualbox_imagesrc}." \
+ nonfatal
fi
- # copy version depending files - the vmchooser expects for every virtua-
- # lization plugin a file named after it (here run-virtualbox.include)
- testmkd /mnt/etc/opt/openslx
- cp /mnt/opt/openslx/plugin-repo/virtualbox/run-virt.include \
- /mnt/etc/opt/openslx/run-virtualbox.include
+
+ # copy virtualization include files to config dir
+ testmkd ${PLUGINCONFDIR}
+ cp ${PLUGINDIR}/*.include ${PLUGINCONFDIR}
+ # copy ${CONFFILE} to ${PLUGINCONFDIR} just in case
+ cp ${CONFFILE} ${PLUGINCONFDIR}
+
+# # TODO: create rawdisk if requested
+# # create raw disk
+# for part in $(grep -qE " 44 | 45 " /etc/disk.partition); do
+# case "${part}" in
+# * 45 *)
+# id4x=$(grep " 45 " /etc/disk.partition | grep -E " 44 | 45 " \
+# | awk '{print $1}' | cut -c -8)
+# break
+# ;;
+# * 44 *)
+# id4x=$(grep " 44 " /etc/disk.partition | grep -E " 44 | 45 " \
+# | awk '{print $1}' | cut -c -8)
+# break
+# ;;
+# esac
+# if [ -n "${id4x}" ]; then
+# mount --bind /dev /mnt/dev
+# chroot /mnt VBoxManage -q internalcommands createrawvmdk -filename \
+# ${OPENSLX_DEFAULT_CONFDIR}/plugins/virtualbox/raw.vmdk -rawdisk ${id4x}
+# chmod 777 ${OPENSLX_DEFAULT_CONFDIR}/plugins/virtualbox/raw.vmdk
+# umount -f /mnt/dev 2>/dev/null
+# fi
# copy and activate init file
- cp /mnt/opt/openslx/plugin-repo/virtualbox/vbox-slx \
- /mnt/etc/init.d
+ cp ${PLUGINDIR}/vbox-slx /mnt/etc/init.d/
chmod 755 /mnt/etc/init.d/vbox-slx
rllinker "vbox-slx" 20 2
mknod -m 0660 /dev/vboxdrv c 10 59
chown root:vboxusers /dev/vboxdrv
+
+ # finished ...
+ [ $DEBUGLEVEL -gt 0 ] && echo "done with 'virtualbox' os-plugin ..."
fi
else
- [ $DEBUGLEVEL -gt 0 ] && echo " * Configuration of virtualbox plugin failed"
+ [ $DEBUGLEVEL -gt 0 ] \
+ && echo " * Configuration of 'virtualbox' plugin failed"
fi
diff --git a/os-plugins/plugins/virtualbox/files/empty-diff-00.vdi.gz b/os-plugins/plugins/virtualbox/files/empty-diff-00.vdi.gz
new file mode 100644
index 00000000..24697b58
--- /dev/null
+++ b/os-plugins/plugins/virtualbox/files/empty-diff-00.vdi.gz
Binary files differ
diff --git a/os-plugins/plugins/virtualbox/files/empty-diff-01.vdi.gz b/os-plugins/plugins/virtualbox/files/empty-diff-01.vdi.gz
new file mode 100644
index 00000000..138e51e8
--- /dev/null
+++ b/os-plugins/plugins/virtualbox/files/empty-diff-01.vdi.gz
Binary files differ
diff --git a/os-plugins/plugins/virtualbox/files/empty-diff-02.vdi.gz b/os-plugins/plugins/virtualbox/files/empty-diff-02.vdi.gz
new file mode 100644
index 00000000..1355f373
--- /dev/null
+++ b/os-plugins/plugins/virtualbox/files/empty-diff-02.vdi.gz
Binary files differ
diff --git a/os-plugins/plugins/virtualbox/files/empty-diff-03.vdi.gz b/os-plugins/plugins/virtualbox/files/empty-diff-03.vdi.gz
new file mode 100644
index 00000000..6e66af70
--- /dev/null
+++ b/os-plugins/plugins/virtualbox/files/empty-diff-03.vdi.gz
Binary files differ
diff --git a/os-plugins/plugins/virtualbox/files/empty-diff-04.vdi.gz b/os-plugins/plugins/virtualbox/files/empty-diff-04.vdi.gz
new file mode 100644
index 00000000..ddb8bb5f
--- /dev/null
+++ b/os-plugins/plugins/virtualbox/files/empty-diff-04.vdi.gz
Binary files differ
diff --git a/os-plugins/plugins/virtualbox/files/empty-diff.vdi.gz b/os-plugins/plugins/virtualbox/files/empty-diff.vdi.gz
new file mode 100644
index 00000000..24697b58
--- /dev/null
+++ b/os-plugins/plugins/virtualbox/files/empty-diff.vdi.gz
Binary files differ
diff --git a/os-plugins/plugins/virtualbox/files/machine.include b/os-plugins/plugins/virtualbox/files/machine.include
new file mode 100644
index 00000000..8d1e23c4
--- /dev/null
+++ b/os-plugins/plugins/virtualbox/files/machine.include
@@ -0,0 +1,134 @@
+# Include file (machine template) for run-virt.include of the virtualbox plugin
+cat << EOF > "${machconfig}"
+<?xml version="1.0"?>
+<VirtualBox xmlns="http://www.innotek.de/VirtualBox-settings" version="1.9-linux">
+ <Machine uuid="{${machineuuid}}" name="${vm_name}" OSType="${vmostype}">
+ <ExtraData>
+ <ExtraDataItem name="GUI/AutoresizeGuest" value="on"/>
+ <ExtraDataItem name="GUI/Fullscreen" value="on"/>
+ <ExtraDataItem name="GUI/LastCloseAction" value="powerOff"/>
+ <ExtraDataItem name="GUI/MiniToolBarAlignment" value="top"/>
+ <ExtraDataItem name="GUI/MiniToolBarAutoHide" value="on"/>
+ <ExtraDataItem name="GUI/SaveMountedAtRuntime" value="yes"/>
+ <ExtraDataItem name="GUI/Seamless" value="off"/>
+ <ExtraDataItem name="GUI/ShowMiniToolBar" value="yes"/>
+ </ExtraData>
+ <Hardware version="2">
+ <CPU count="${cpu_cores}">
+ <HardwareVirtEx enabled="${enablevt}" exclusive="true"/>
+ <HardwareVirtExNestedPaging enabled="${npaging}"/>
+ <HardwareVirtExVPID enabled="false"/>
+ <PAE enabled="true"/>
+ </CPU>
+ <Memory RAMSize="${mem}"/>
+ <Boot>
+ <Order position="1" device="${boot}"/> <!-- HardDisk, DVD, Network, Floppy -->
+ <Order position="2" device="None"/>
+ <Order position="3" device="None"/>
+ <Order position="4" device="None"/>
+ </Boot>
+ <Display VRAMSize="24" monitorCount="1" accelerate3D="false" accelerate2DVideo="false"/>
+ <!-- authType="External", "Guest", "Null" -->
+ <RemoteDisplay enabled="false" port="${vrdpport}" authType="Null" authTimeout="5000"/>
+ <BIOS>
+ <ACPI enabled="true"/>
+ <IOAPIC enabled="true"/>
+ <Logo fadeIn="false" fadeOut="false" displayTime="0"/>
+ <BootMenu mode="MessageAndMenu"/>
+ <TimeOffset value="0"/>
+ <PXEDebug enabled="false"/>
+ </BIOS>
+ <USBController enabled="true" enabledEhci="true"/>
+ <Network>
+ <Adapter slot="0" enabled="true" MACAddress="${macaddr}" cable="true" speed="0" type="${vb_network_card}">
+ <${network_kind}/>
+ </Adapter>
+ <Adapter slot="1" enabled="false" MACAddress="0800279312FB" cable="true" speed="0" type="Am79C973"/>
+ <Adapter slot="2" enabled="false" MACAddress="080027A3A3CA" cable="true" speed="0" type="Am79C973"/>
+ <Adapter slot="3" enabled="false" MACAddress="0800277356F6" cable="true" speed="0" type="Am79C973"/>
+ <Adapter slot="4" enabled="false" MACAddress="080027CEA83A" cable="true" speed="0" type="Am79C973"/>
+ <Adapter slot="5" enabled="false" MACAddress="0800271B8D7A" cable="true" speed="0" type="Am79C973"/>
+ <Adapter slot="6" enabled="false" MACAddress="08002771BBD7" cable="true" speed="0" type="Am79C973"/>
+ <Adapter slot="7" enabled="false" MACAddress="080027EB6A12" cable="true" speed="0" type="Am79C973"/>
+ </Network>
+ <UART>
+ <Port slot="0" enabled="false" IOBase="0x3f8" IRQ="4" hostMode="Disconnected"/>
+ <Port slot="1" enabled="false" IOBase="0x3f8" IRQ="4" hostMode="Disconnected"/>
+ </UART>
+ <LPT>
+ <Port slot="0" enabled="false" IOBase="0x378" IRQ="4"/>
+ <Port slot="1" enabled="false" IOBase="0x378" IRQ="4"/>
+ </LPT>
+ <AudioAdapter controller="AC97" driver="Alsa" enabled="${audio}"/> <!-- OSS, Alsa, Pulse (HANGS!) -->
+ <SharedFolders>
+ <SharedFolder name="${sharename}" hostPath="${sharepath}" writable="true"/>
+ </SharedFolders>
+ <Clipboard mode="Bidirectional"/>
+ <Guest memoryBalloonSize="0" statisticsUpdateInterval="0"/>
+ <!--
+ <GuestProperties>
+ <GuestProperty name="/VirtualBox/HostGuest/SysprepExec" value="" timestamp="1268140071072779000" flags="TRANSIENT, RDONLYGUEST"/>
+ <GuestProperty name="/VirtualBox/HostGuest/SysprepArgs" value="" timestamp="1268140071072939000" flags="TRANSIENT, RDONLYGUEST"/>
+ <GuestProperty name="/VirtualBox/GuestInfo/OS/Product" value="Linux" timestamp="1268140265864540000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/OS/Release" value="2.6.27.21" timestamp="1268140265894019000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/OS/Version" value="#3 SMP Fri Feb 26 16:38:21 CET 2010" timestamp="1268140265898448000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/OS/ServicePack" value="" timestamp="1268140265899571000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/Revision" value="57640" timestamp="1268140265900144000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/Version" value="3.1.4" timestamp="1268140265899937000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/OS/LoggedInUsers" value="1" timestamp="1268164075148440000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/Net/Count" value="4" timestamp="1268164075148790000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/Net/0/V4/IP" value="132.230.4.224" timestamp="1268164075149053000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/Net/0/V4/Broadcast" value="132.230.4.255" timestamp="1268164075149297000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/Net/0/V4/Netmask" value="255.255.255.0" timestamp="1268164075149596000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/Net/0/Status" value="Up" timestamp="1268164075149829000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/Net/1/V4/IP" value="192.168.112.1" timestamp="1268164075150037000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/Net/1/V4/Broadcast" value="192.168.112.255" timestamp="1268164075150238000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/Net/1/V4/Netmask" value="255.255.255.0" timestamp="1268164075150439000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/Net/1/Status" value="Up" timestamp="1268164075150635000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/Net/2/V4/IP" value="192.168.54.1" timestamp="1268164075150835000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/Net/2/V4/Broadcast" value="192.168.54.255" timestamp="1268164075151072000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/Net/2/V4/Netmask" value="255.255.255.0" timestamp="1268164075151282000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/Net/2/Status" value="Up" timestamp="1268164075151479000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/OS/NoLoggedInUsers" value="false" timestamp="1268140276063587000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/Vbgl/Video/SavedMode" value="1024x768x32" timestamp="1268140287190297000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/HostVerLastChecked" value="3.1.4" timestamp="1268140310962236000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/Net/3/V4/IP" value="192.168.122.1" timestamp="1268164075152293000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/Net/3/V4/Broadcast" value="192.168.122.255" timestamp="1268164075152615000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/Net/3/V4/Netmask" value="255.255.255.0" timestamp="1268164075152828000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/Net/3/Status" value="Up" timestamp="1268164075153029000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/Net/4/V4/IP" value="169.254.4.104" timestamp="1265728007966805000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/Net/4/V4/Broadcast" value="169.254.255.255" timestamp="1265728007967184000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/Net/4/V4/Netmask" value="255.255.0.0" timestamp="1265728007967487000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/Net/4/Status" value="Up" timestamp="1265728007967829000" flags=""/>
+ <GuestProperty name="/VirtualBox/HostInfo/GUI/LanguageID" value="de_DE" timestamp="1268140070610343000" flags=""/>
+ <GuestProperty name="/VirtualBox/HostInfo/VBoxVer" value="3.1.4" timestamp="1268154582522485000" flags="TRANSIENT, RDONLYGUEST"/>
+ <GuestProperty name="/VirtualBox/HostInfo/VBoxRev" value="57640" timestamp="1268154582522507000" flags="TRANSIENT, RDONLYGUEST"/>
+ <GuestProperty name="/VirtualBox/GuestInfo/OS/LoggedInUsersList" value="vmuser" timestamp="1268164075147867000" flags=""/>
+ </GuestProperties>
+ -->
+ </Hardware>
+ <StorageControllers>
+ <StorageController name="IDE-Controller" type="PIIX4" PortCount="2">
+ <AttachedDevice type="HardDisk" port="0" device="0">
+ <Image uuid="{${imageuuid}}"/>
+ </AttachedDevice> <!-- PLEASE DO NOT REMOVE THIS COMMENT!!! -->
+ <!--
+ <AttachedDevice passthrough="false" type="DVD" port="0" device="0">
+ <Image uuid="{dcd1e32a-729f-4faa-b319-67adca15e4a4}"/>
+ </AttachedDevice>
+ -->
+ </StorageController>
+ <!--
+ <StorageController name="Disketten-Controller" type="I82078" PortCount="1">
+ <AttachedDevice type="Floppy" port="0" device="0"/>
+ </StorageController>
+ <StorageController name="SCSI-Controller" type="LsiLogic" PortCount="16">
+ <AttachedDevice type="HardDisk" port="0" device="0">
+ <Image uuid="{812c82bf-bd1a-4f59-a5b6-b54ae2f6c669}"/>
+ </AttachedDevice>
+ </StorageController>
+ -->
+ </StorageControllers>
+ </Machine>
+</VirtualBox>
+EOF
diff --git a/os-plugins/plugins/virtualbox/files/run-virt.include b/os-plugins/plugins/virtualbox/files/run-virt.include
index e16e2edf..9dbe47ac 100644
--- a/os-plugins/plugins/virtualbox/files/run-virt.include
+++ b/os-plugins/plugins/virtualbox/files/run-virt.include
@@ -1,6 +1,7 @@
-# run-virtualbox.include
-#
-# Copyright (c) 2009 - OpenSLX GmbH
+# run-virt.include
+# -----------------------------------------------------------------------------
+# Copyright (c) 2009..2010 - RZ Uni Freiburg
+# Copyright (c) 2009..2010 - OpenSLX GmbH
#
# This program/file is free software distributed under the GPL version 2.
# See http://openslx.org/COPYING
@@ -9,53 +10,264 @@
# 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/run-virtualbox.include
-# during stage3.
+# -----------------------------------------------------------------------------
+# run-virt.include
+# - Include script for running the VirtualBox on an OpenSLX client via the
+# run-virt.sh or run-vmgrid.sh
+################################################################################
-# include general configuration from vmchooser
-. /etc/opt/openslx/run-virt.include
+################################################################################
+### Include general configuration
+################################################################################
+if [ -f ${OPENSLX_DEFAULT_CONFDIR}/plugins/${self}/${self}.conf ]; then
+ . ${OPENSLX_DEFAULT_CONFDIR}/plugins/${self}/${self}.conf
+else
+ writelog "Problems reading config file of ${self} plugin"
+ exit 1
+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
+################################################################################
+### Declaration of default variables
+################################################################################
+
+PLUGINCONFVIRTUALBOX="${PLUGINCONFROOT}/${self}"
+PLUGINDIRVIRTUALBOX="${OPENSLX_DEFAULT_DIR}/plugin-repo/${self}"
+# create TMPDIR for all users
+TMPDIR=/tmp/${self}
+mkdir -m 1777 ${TMPDIR} 2>/dev/null
+# dir for configs
+confdir="/tmp/${self}/${USER}/${VM_ID}"
+# use alternate configuration directory instead of $HOME/.VirtualBox
+export VBOX_USER_HOME=${confdir}
+# define dirs and files which can be removed after exit, be carefull!
+RMDIRS="${snapshotdir} ${confdir} /tmp/.vbox-${USER}-ipc"
+rm -rf ${RMDIRS} 2>/dev/null
+machfolder="${confdir}/Machines"
+# use vm_shortname for dir and config names since vm_name can be very long
+machconfig="${machfolder}/${vm_shortname}/${vm_shortname}.xml"
+diskfolder="${confdir}/HardDisks"
+snapshotdir=${machfolder}/${vm_shortname}/Snapshots
+mkdir -p ${diskfolder} ${snapshotdir} 2>/dev/null
+# check if diskless var empty?
+[ -z "${diskless}" ] && diskless=0
+
+# configure our own rwimg, empty image which we support
+if [ "${imgmode}" = "rwimg" ]; then
+ # what is our rwimg called?
+ imgname="${vm_shortname}.vdi"
+ vmpath=${imgpath}/${imgname}
+ if ! [ -e "${vmpath}" ]; then
+ cat ${PLUGINDIRVIRTUALBOX}/rwimg.vdi.gz | gunzip > "${vmpath}"
+ fi
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
+
+# link to image
+diskfile="${diskfolder}/${imgname}"
+[ ${diskless} -eq 0 ] && ln -sf ${vmpath} ${diskfile}
+
+# check the file type
+if echo ${imgname} | grep -qiE "vdi|vmdk|vhd" && [ ${diskless} -eq 0 ]; then
+ imgfmt=$(echo ${imgname##*.} | tr [a-z] [A-Z])
+elif [ ${diskless} -eq 0 ]; then
+ writelog "${imgname} is not a valid image format (vdi|vmdk|vhd), exiting!"
+ cleanexit 1
+fi
+
+# TODO: maybe rewrite, to reduce checks, merge it with network option,
+# so we can have a "compatibility to vmware config" section
+case "${vmostype}" in
+ winxp*|windowsxp*)
+ vmostype="WindowsXP"
+ ;;
+ winvista*|windowsvista*)
+ vmostype="WindowsVista"
+ ;;
+ windows7*)
+ vmostype="Windows7"
+ ;;
+ linux*|*ubuntu*|*suse*|debian*|*sci*)
+ if echo "${vmostype}" | grep -q "64"; then
+ vmostype="Linux26_64"
+ # check for vtflag
+ if [ ${vtflag} -ne 1 ]; then
+ writelog "You are trying to boot a 64 bit OS without a VT enabled CPU"
+ writelog "This is not supported, exiting!"
+ cleanexit 1
+ fi
+ # check if host is only 32 bit, then use only 1 cpu (only 1 supported)
+ if echo "${host_arch}" | grep -qE "i.86"; then
+ cpu_cores=1
+ fi
+ else
+ vmostype="Linux26"
+ fi
+ ;;
+esac
+
+writelog "Directories:"
+writelog "\tConfig dir:\t\t$confdir"
+writelog "\tMachines dir:\t\t$machfolder"
+writelog "\tMachine config:\t\t$machconfig"
+[ ${diskless} -eq 0 ] && writelog "\tHardDisks dir:\t\t$diskfolder"
+
+################################################################################
+### Hardware checks
+################################################################################
+
+# remove ':' from MAC addr for vbox
+macaddr=$(echo ${macaddr} | sed 's/://g')
+
+# machine UUID, MAC addr part of it
+machineuuid="00000000-0000-0000-0000-${macaddr}"
+# cosmetical, since UUID in lower case
+machineuuid=$(echo ${machineuuid} | tr [A-Z] [a-z])
+# get UUID of VBox image, if not diskless
+[ ${diskless} -eq 0 ] && diskuuid=$(VBoxManage -q showvdiinfo ${diskfile} \
+ | grep UUID | awk '{print $2}')
+# make disk immutable
+imgtype="Immutable"
+# snapshot UUID is static
+snapshotuuid="88bc8b6d-f248-468a-95fe-318084904f8b"
+# imageuuid in machine.include, dafault snapshotuuid
+imageuuid=${snapshotuuid}
+
+# check if rw image
+# remove disk and add rwimg if set
+if echo "${imgmode}" | grep -q rw; then
+ # lock existing?
+ if [ -e "${vmpath}.lock" ]; then
+ writelog "This rw image is already in use."
+ writelog "Found lock: ${vmpath}.lock, exiting!"
+ writelog "Remove lock if you are sure that this is not the case"
+ cleanexit 1
+ # image rw?
+ elif ! [ -w ${vmpath} ]; then
+ writelog "You defined mode rw, but image ${vmpath} is not rw! \c"
+ writelog "Please correct, exiting!"
+ cleanexit 1
fi
+ # add lock
+ touch "${vmpath}.lock"
+ # remove lock after VM stopped
+ RMDIRS="${RMDIRS} ${vmpath}.lock"
+ imgtype="Normal"
+ # replace image uuid in machine config
+ imageuuid=${diskuuid}
+elif [ ${diskless} -eq 0 ]; then
+ # use temp disk as snapshot
+ cat ${PLUGINDIRVIRTUALBOX}/empty-diff.vdi.gz \
+ | gunzip > "${snapshotdir}/{${snapshotuuid}}.vdi"
fi
-mem=$(expr ${totalmem} / 100 \* ${permem})
-if [ "${id44}" = "1" ]; then
- memhost=$(expr ${totalmem} - ${mem})
+
+# TODO: MEM muss noch angepasst werden. Maschine crasht wenn nehr als 50% MEM
+# memory part equal to vmware plugin
+# percentage of memory to use for virtualbox in standard case
+if [ -n "${forcemem}" ]; then
+ mem="${forcemem}"
else
- memhost=$(expr ${totalmem} - ${mem} - ${mem})
+ 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
+ # TODO: makes this sense for vbox?
+ #if [ "${totalmem}" -ge "2500" ]; then
+ #permem=40
+ #rmdir ${snapshotdir}
+ #snapshotdirold=${snapshotdir}
+ #snapshotdir=/dev/shm/${self}/${USER}/${VM_ID}
+ #mkdir -p ${snapshotdir}
+ #ln -sf ${snapshotdir} ${snapshotdirold}
+ #fi
+ fi
+ mem=$(expr ${totalmem} / 100 \* ${permem})
+ if [ "${id44}" = "1" ]; then
+ hostmem=$(expr ${totalmem} - ${mem})
+ else
+ hostmem=$(expr ${totalmem} - ${mem} - ${mem})
+ fi
+ #permem=40
+ #mem=$(expr ${totalmem} * ${permem})
+ if [ "${mem}" -lt "256" ] || [ "${hostmem}" -lt "256" ]; then
+ writelog "Memory out of range: ${mem} MB (guest) / ${hostmem} MB (host)!"
+ writelog "Min. 256 MB for host and guest!"
+ cleanexit 1
+ fi
fi
-#permem=40
-#mem=$(expr ${totalmem} * ${permem})
+# translate network cards
+case "${network_card}" in
+ e1000)
+ vb_network_card="82540EM"
+ ;;
+ virtio)
+ vb_network_card="virtio"
+ ;;
+ *)
+ network_card="pcnet"
+ vb_network_card="Am79C973"
+esac
-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
+# translate network kinds (nat, bridged, host-only)
+case "${network_kind}" in
+ bridge*)
+ network_kind='BridgedInterface name="br0"'
+ ;;
+ host*)
+ network_kind='HostOnlyInterface name="vboxnet0"'
+ ;;
+ *)
+ network_kind="NAT"
+esac
+# translate boot, use if set else set to HardDisk
+# usually support for a,c,d,n, stands for Floppy, HD, CD-ROM, Network
+# support nfs and tftp as well
+case ${boot} in
+ n*|tftp)
+ boot="Network"
+ if [ "${network_kind}" = "NAT" ] && [ -n "${virtualbox_tftpdir}" ]; then
+ # use vm_shortname to avoid Problems /w TFTP in NAT
+ vm_name=${vm_shortname}
+ # link TFTP dir for NAT TFTP boots
+ mkdir -p ${confdir}/TFTP
+ if [ -e ${virtualbox_tftpdir}/pxelinux.0 ]; then
+ cp ${virtualbox_tftpdir}/pxelinux.0 ${confdir}/TFTP/${vm_name}.pxe
+ else
+ writelog "${virtualbox_tftpdir}/pxelinux.0 not found!"
+ writelog "Network boot won't work, exiting!"
+ cleanexit 1
+ fi
+ for i in $(ls ${virtualbox_tftpdir}); do
+ ln -sf ${virtualbox_tftpdir}/${i} ${confdir}/TFTP/${i}
+ done
+ fi
+ ;;
+ # later maybe c|disk|hd*|sd*) for HD and d|cd*) for CD-ROM
+ *)
+ boot="HardDisk"
+ ;;
+esac
+# nested paging
+npaging="false"
+# enable VT
+enablevt="false"
+# check for VT, if not available use only 1 cpu (only 1 supported)
+[ ${vtflag} -eq 0 ] && cpu_cores=1
+[ ${vtflag} -eq 1 ] && enablevt="true"
-# most of the following does not make much sense yet ...
-#
+# external GUI
+vrdpport=${remotedesktopport}
+
+# TODO: nur bei vmchooser
+# TODO: 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=
@@ -78,115 +290,102 @@ cdrom1=${cdtest:-"FALSE"}
# be done while creating the runscripts ...
ide="TRUE"
hddrv="ide"
+audio=${audio:-"true"}
+[ ${diskless} -eq 0 ] && writelog "\tSnapshots dir:\t\t$snapshotdir"
+writelog "Diskimage:"
+[ ${diskless} -eq 0 ] && writelog "\tDisk file:\t\t$diskfile"
+[ ${diskless} -eq 0 ] && writelog "\tDisk format:\t\t$imgfmt"
+[ ${diskless} -eq 0 ] && writelog "\tDisk type:\t\t$imgtype"
+ writelog "\tVMostype:\t\t$vmostype"
+ writelog "\tMachine UUID:\t\t$machineuuid"
+[ ${diskless} -eq 0 ] && writelog "\tDisk UUID:\t\t$diskuuid"
+writelog "Virtual Hardware:"
+writelog "\tCPU cores:\t\t${cpu_cores}\c"
+[ ${vtflag} -eq 0 ] && writelog ""
+[ ${vtflag} -eq 1 ] && writelog " (VT enabled CPU)"
+writelog "\tGuest RAM:\t\t${mem} MB"
+# echo nur wenn hostmem gesetzt
+[ -n "${hostmem}" ] && writelog "\tHost RAM:\t\t${hostmem} MB"
+writelog "\tMAC address:\t\t$macaddr"
+writelog "\tNetwork card:\t\t${vb_network_card}"
+writelog "\tNetwork kind:\t\t${network_kind}"
+writelog "\tBooting from:\t\t${boot}\c"
+[ ${diskless} -eq 0 ] && writelog ""
+[ ${diskless} -eq 1 ] && writelog " 'diskless'"
+# TODO: server start activate via xml, etc...
+#writelog "\tGuest VRDP port:\t${vrdpport}"
+#writelog "\tCD-ROM1:\t${cdrom0}"
+#writelog "\tCD-ROM2:\t${cdrom1}"
+#writelog "\tFloppy_A:\t${floppy0}"
+#writelog "\tFloppy_B:\t${floppy1}"
+# defined in run-virt.sh and run-vmgrid.sh
+writelog "\tShared Folders '${sharename}':\t${sharepath}"
################################################################################
-### Pepare env and and configure Image
+### Pepare and configure virtual machine and disk image
################################################################################
-# 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=$$
-# Don't use $HOME/.VirtualBox!
-export VBOX_USER_HOME="/tmp/vbox-${USER}-${ID}"
-
-# Import Image to VirtualBox, which won't get changed
-VBoxManage -nologo registerimage disk ${diskfile} -type immutable
-
-# Get ID of VBox Image...
-diskuid="$(VBoxManage -nologo showvdiinfo ${diskfile} |grep UUID|awk '{ print $2; }')"
-# Create Image and register it, so we are able to modify and start it
-VBoxManage -nologo createvm -name "${ID}" -register
-
-################################################################################
-###
-### Modify VM
-###
-################################################################################
-
-## Add harddisk
-VBoxManage -nologo modifyvm "${ID}" -hda ${diskuid}
-
-## Configure VM memory
-VBoxManage -nologo modifyvm "${ID}" -memory ${mem}
+# create Virtualbox.xml
+. ${PLUGINCONFVIRTUALBOX}/virtualbox.include
-## Add cddrives
-## TODO: merge to new version, where run-virt.include has our drives
-#VBoxManage -nologo modifyvm "${ID}" -dvd host:${cdrs}
-
-# Enable hardware virtualization
-# TODO: check if CPU supports hw virtualization
-#VBoxManage -nologo modifyvm "${ID}" -hwvirtex on
-
-# HDD as boot device
-VBoxManage -nologo modifyvm "${ID}" -boot1 disk
-
-# enable audio (oss|null|none|alsa|pulse). OSS is backwardcompatible to v2.0
-VBoxManage -nologo modifyvm "${ID}" -audio oss
-
-# supress License and Message
-# TODO: Not clear if we are allowed to do this
-VBoxManage -nologo setextradata global "GUI/LicenseAgreed" "7"
-VBoxManage -nologo setextradata global "GUI/SuppressMessages" ",remindAboutAutoCapture"
-VBoxManage -nologo setextradata global "GUI/RegistrationData" "triesLeft=0"
-
-# if we have enough memory, we can put the snapshots (changes on immutable
-# disk) there
-if [ -n ${snapshotdir} ]; then
- VBoxManage -nologo modifyvm "${ID}" -snapshotfolder "${snapshotdir}"
+# remove snapshot disk when using rw images
+if [ "${imgtype}" != "Immutable" ]; then
+ sed -i "/${snapshotuuid}/d" "${confdir}/VirtualBox.xml"
fi
-# Operating system. Possible: VBoxManage -nologo list ostypes
-# WindowsXP, WindowsVista, Windows7, Linux26 etc.
-# keep compatibility to VMware
-# Todo: maybe rewrite, to reduce checks, merge it with network option,
-# so we can have a "compatibility to vmware config" section. Or include
-# it into vmchooser?
-if [ "${vmostype}" = "winxppro" -o "${vmostype}" = "WindowsXP" ]; then
- VBoxManage -nologo modifyvm "${ID}" -ostype "WindowsXP"
-elif [ "${vmostype}" = "winvista" -o "${vmostype}" = "WindowsVista" ]; then
- VBoxManage -nologo modifyvm "${ID}" -ostype "WindowsVista"
-elif [ "${vmostype}" = "Windows7" ]; then
- VBoxManage -nologo modifyvm "${ID}" -ostype "Windows7"
-elif [ "${vmostype}" = "linux" -o "${vmostype}" = "Linux26" ]; then
- VBoxManage -nologo modifyvm "${ID}" -ostype "Linux26"
-elif [ -n "${vmostype}" ]; then
- VBoxManage -nologo modifyvm "${ID}" -ostype "${vmostype}"
-fi
+# TODO: add rawdisk if requested
+#"raw.vmdk" format="VMDK" type="Writethrough"/>
+# create machine.xml
+. ${PLUGINCONFVIRTUALBOX}/machine.include
-# Network Configuration
-# only bridge differes to vmware. Compatibility option
-if [ "${network_kind}" = "bridge" ]; then
- network_kind="bridged"
-fi
-VBoxManage -nologo modifyvm "${ID}" -nic1 "${network_kind}"
-if [ "${network_kind}" = "bridged" ]; then
- VBoxManage -nologo modifyvm "${ID}" -bridgeadapter1 "eth1"
+# if diskless remove all disks
+if [ ${diskless} -eq 1 ]; then
+ sed -i "/<HardDisk/d;/<\/HardDisk/d" "${confdir}/VirtualBox.xml"
+ sed -i "/${imageuuid}/d" ${machconfig}
+ sed -i '/AttachedDevice type="HardDisk"/d' ${machconfig}
+ sed -i "/<!-- PLEASE DO NOT REMOVE THIS COMMENT!!! -->/d" ${machconfig}
fi
-if [ "${network_kind}" = "hostonly" ]; then
- VBoxManage -nologo modifyvm "${ID}" -hostonlyadapter1 "vboxnet0"
-fi
-
-# modify macaddress
-mac=$(echo ${mac}|sed 's/://') # ${mac/:/}
-VBoxManage -nologo modifyvm "${ID}" -macaddress1 "0050560D${mac}"
-
-
-# usb configuration
-# not available in free -ose version
-#VBoxManage -nologo modifyvm "${ID}" -usb on
-#VBoxManage -nologo modifyvm "${ID}" -usbehci on
+# define redirects
+if [ ${redirects} -ge 1 ]; then
+ (( i=1 ))
+ writelog "\tGuest redirects:\t\c"
+ while [ ${i} -le ${redirects} ]; do
+ extradataitem='<ExtraDataItem name="VBoxInternal/Devices'
+ extradataitem="${extradataitem}/${network_card}/0/LUN#0/Config"
+ extradataitem="${extradataitem}/${redirect_name[$i]}/"
+ extradataprotocol="Protocol\" value=\"${redirect_proto[$i]}\"/>"
+ extradatahostport="HostPort\" value=\"${redirect_hport[$i]}\"/>"
+ extradataguestport="GuestPort\" value=\"${redirect_gport[$i]}\"/>"
+ sed -i "s,</ExtraData>, ${extradataitem}${extradataguestport}\n\
+ ${extradataitem}${extradatahostport}\n\
+ ${extradataitem}${extradataprotocol}\n\
+ </ExtraData>," "${machconfig}"
+ writelog "${tabspace}${redirect_name[$i]} port: ${redirect_hport[$i]}"
+ tabspace='\t\t\t\t'
+ (( i=$i+1 ))
+ done
+fi
-# finally set env for run-virt.sh
################################################################################
+### finally set env for run-virt.sh
+################################################################################
+
+# wait for a certain command to settle
+# get the PID of the right process
+# kill PID, seems to work
+VBMANPID=$(pstree -p | grep VBoxXPCOMIPCD | grep -ivE "VirtualBox|VBoxHeadless"\
+ | sed -e "s/.*VBoxXPCOMIPCD(\(.*\)).*/\1/")
+for i in $(echo ${VBMANPID}); do
+ kill -9 ${VBMANPID} >/dev/null 2>&1
+done
# set the variables appropriately (several interfaces with different names)
-#VIRTCMD=$(which virtualbox 2>/dev/null)
-VIRTCMD=$(which VBoxManage -nologo 2>/dev/null)
-VIRTCMDOPTS="startvm ${ID} -type gui"
+VIRTCMD=$(which VirtualBox 2>/dev/null)
+VIRTCMDOPTS="--startvm ${machineuuid} --start-running"
-# todo: for debugging purpose during development
-echo "\n export VBOX_USER_HOME=\"/tmp/vbox-${USER}-${ID}\""
-echo " VBoxManage -nologo $VIRTCMDOPTS\n\n"
+# set headless mode (-v off to disable vrdp)
+VIRTCMDHL=$(which VBoxHeadless 2>/dev/null)
+VIRTCMDOPTSHL="-s ${machineuuid}"
diff --git a/os-plugins/plugins/virtualbox/files/run-virt.include.bak b/os-plugins/plugins/virtualbox/files/run-virt.include.bak
new file mode 100644
index 00000000..2fd81f6b
--- /dev/null
+++ b/os-plugins/plugins/virtualbox/files/run-virt.include.bak
@@ -0,0 +1,159 @@
+# 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
+
+
+#<DHCPServers>\t<DHCPServer\
+# networkName=\"HostInterfaceNetworking-vboxnet0\" IPAddress=\"192.168.56.100\"\
+# networkMask=\"255.255.255.0\" lowerIP=\"192.168.56.101\"\
+# upperIP=\"192.168.56.254\" enabled=\"1\"/> </DHCPServers>
+
+# 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"
diff --git a/os-plugins/plugins/virtualbox/files/run-virt2.include b/os-plugins/plugins/virtualbox/files/run-virt2.include
new file mode 100644
index 00000000..4f885abd
--- /dev/null
+++ b/os-plugins/plugins/virtualbox/files/run-virt2.include
@@ -0,0 +1,323 @@
+# run-virt.include
+# -----------------------------------------------------------------------------
+# Copyright (c) 2009..2010 - RZ Uni Freiburg
+# 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
+# -----------------------------------------------------------------------------
+# run-virt.include
+# - Include script for running the Virtual Box on an OpenSLX client via the
+# run-virt.sh or run-vmgrid.sh
+################################################################################
+
+################################################################################
+### Include general configuration
+################################################################################
+if [ -f ${OPENSLX_DEFAULT_CONFDIR}/plugins/${self}/${self}.conf ]; then
+ . ${OPENSLX_DEFAULT_CONFDIR}/plugins/${self}/${self}.conf
+else
+ writelog "Problems reading config file of ${self} plugin"
+ exit 1
+fi
+
+################################################################################
+### Declaration of default variables
+################################################################################
+
+PLUGINCONFVIRTUALBOX="${PLUGINCONFROOT}/${self}"
+# create TMPDIR for all users
+mkdir -m 1777 /tmp/${self} 2>/dev/null
+# dir for configs
+confdir="/tmp/${self}/${USER}"
+# use alternate configuration directory instead of $HOME/.VirtualBox
+export VBOX_USER_HOME=${confdir}
+
+# imgname is the name of the virtual image file
+imgnamebase=${imgname%.*}
+imgnameending=${imgname#*.}
+# use vm_shortname since vm_name can be very long + VM_ID
+vm_shortname="$(echo ${imgnamebase} | sed -e "s, ,-,g")-${VM_ID}"
+
+# mach folders config
+machfolder="${confdir}/Machines"
+machconfig="${machfolder}/${vm_shortname}/${vm_shortname}.xml"
+diskfolder="${confdir}/HardDisks"
+snapshotdir=${machfolder}/${vm_shortname}/Snapshots
+diskfile="${diskfolder}/${imgname}"
+
+# remove old stuff, RMDIRS can be used in calling script as well
+RMDIRS="${machfolder}/${vm_shortname} ${diskfile}"
+rm -rf ${RMDIRS}
+# create new stuff
+mkdir -p ${diskfolder} ${snapshotdir}
+# check if image already existing
+if [ "$(readlink -f ${diskfile})" = "${vmpath}" ]; then
+ diskuuid=$(grep "${diskfile}" "${confdir}/VirtualBox.xml" | \
+ sed -e "s,.*HardDisk uuid=\"{\(.*\)}\" location=.*,\1,")
+ diskexisting=1
+else
+ ln -sf ${vmpath} ${diskfile}
+fi
+
+# check the file type
+if echo ${imgname} | grep -iE "vdi" >/dev/null 2>&1; then #vmdk|vhd
+ imgtype=$(echo ${imgnameending} | tr [a-z] [A-Z])
+else
+ writelog "${imgname} is not a valid image type (vdi)" #vmdk|vhd
+fi
+
+# TODO: maybe rewrite, to reduce checks, merge it with network option,
+# so we can have a "compatibility to vmware config" section
+case "${vmostype}" in
+ winxp*)
+ vmostype="WindowsXP"
+ ;;
+ winvista*)
+ vmostype="WindowsVista"
+ ;;
+ Windows7*)
+ vmostype="Windows7"
+ ;;
+ linux*)
+ vmostype="Linux26"
+ ;;
+esac
+
+writelog "Directories:"
+writelog "\tConfig dir:\t\t$confdir"
+writelog "\tMachines dir:\t\t$machfolder"
+writelog "\tMachine config:\t\t$machconfig"
+writelog "\tHardDisks dir:\t\t$diskfolder"
+
+################################################################################
+### Hardware checks
+################################################################################
+
+# remove ':' from MAC addr for vbox
+macaddr=$(echo ${macaddr} | sed 's/://g')
+
+# memory part equal to vmware plugin
+# percentage of memory to use for virtualbox in standard case
+if [ -n "${forcemem}" ]; then
+ mem="${forcemem}"
+else
+ 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
+ # TODO: makes this sense for vbox?
+ #if [ "${totalmem}" -ge "2500" ]; then
+ #permem=40
+ #rmdir ${snapshotdir}
+ #snapshotdirold=${snapshotdir}
+ #snapshotdir=/dev/shm/${self}/${USER}
+ #mkdir -p ${snapshotdir}
+ #ln -sf ${snapshotdir} ${snapshotdirold}
+ #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 "Memory out of range: ${mem} MB (guest) / ${memhost} MB (host)!"
+ writelog "Min. 256 MB for host and guest!"
+ exit 1
+ fi
+fi
+
+# machine UUID, MAC addr part of it
+machineuuid="00000000-0000-0000-0000-${macaddr}"
+# cosmetical, since UUID in lower case
+machineuuid=$(echo ${machineuuid} | tr [A-Z] [a-z])
+# get UUID of VBox image
+[ -z "${diskuuid}" ] && diskuuid=$(VBoxManage -q showvdiinfo ${diskfile} | \
+ grep UUID | awk '{print $2}')
+# snapshot UUIDs (static)
+snapshotuuid[00]="88bc8b6d-f248-468a-95fe-318084904f8b"
+snapshotuuid[01]="42f5033e-9913-41ff-8cba-1c986ba5db8d"
+snapshotuuid[02]="1b66fdcb-8ede-4bb8-aaec-417bc2074633"
+snapshotuuid[03]="563d2c5e-c9a2-4fbb-be51-8d279a558e6c"
+snapshotuuid[04]="efff0c85-c1c8-420d-a25f-6e66f117e1f2"
+snapshotuuid=${snapshotuuid[$VM_ID]}
+
+cat ${OPENSLX_DEFAULT_DIR}/plugin-repo/virtualbox/empty-diff-${VM_ID}.vdi.gz | \
+ gunzip > "${snapshotdir}/{${snapshotuuid}}.vdi"
+
+#snapshotuuid=$(VBoxManage -q showvdiinfo \
+# "${snapshotdir}/${snapshotuuid}.vdi" | grep UUID | awk '{print $2}')
+
+# translate network cards
+if [ "${network_card}" = "e1000" ]; then
+ vb_network_card="82540EM"
+else
+ network_card="pcnet"
+ vb_network_card="Am79C973"
+fi
+
+# translate network kinds (nat, bridged, host-only)
+case "${network_kind}" in
+ bridged)
+ network_kind='BridgedInterface name="br0"'
+ ;;
+ host-only)
+ network_kind='HostOnlyInterface name="vboxnet0"'
+ ;;
+ *)
+ network_kind="NAT"
+ ;;
+esac
+
+vrdpport="590${VM_ID}"
+
+# TODO: 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"
+
+writelog "\tSnapshots dir:\t\t$snapshotdir"
+writelog "Diskimage:"
+writelog "\tDisk type:\t\t$imgtype"
+writelog "\tDisk file:\t\t$diskfile"
+writelog "\tVMostype:\t\t$vmostype"
+writelog "\tMachine UUID:\t\t$machineuuid"
+writelog "\tDisk UUID:\t\t$diskuuid"
+writelog "\tSnapshot UUID:\t\t$snapshotuuid"
+writelog "Virtual Hardware:"
+writelog "\tGuest RAM:\t\t${mem} MB"
+# echo nur wenn memhost gesetzt
+[ -n "${memhost}" ] && writelog "\tHost RAM:\t\t${memhost} MB"
+writelog "\tMAC address:\t\t$macaddr"
+writelog "\tNetwork card:\t\t${vb_network_card}"
+writelog "\tNetwork kind:\t\t${network_kind}"
+#writelog "\tCD-ROM1:\t${cdrom0}"
+#writelog "\tCD-ROM2:\t${cdrom1}"
+#writelog "\tFloppy_A:\t${floppy0}"
+
+################################################################################
+### Pepare and configure virtual machine and disk image
+################################################################################
+
+# TODO: date wichtig?
+#date="$(date +%Y-%m-%dT%H:%M:%SZ)"
+# check if VirtualBox.xml already existing
+# TODO: geht nicht!!!
+if grep -q "<HardDisk uuid=" "${confdir}/VirtualBox.xml"; then
+ # check if our HD and location present
+ extrahd="<HardDisk uuid=\"{${diskuuid}}\" location=\"${diskfile}\"" \
+ extrahd="${extrahd} format=\"${imgtype}\" type=\"Immutable\">"
+ extdiff="<HardDisk uuid=\"{${snapshotuuid}}\" location=\"${snapshotdir}" \
+ extdiff="${extdiff}/{${snapshotuuid}}.vdi\" format=\"VDI\"" \
+ extdiff="${extdiff} autoReset=\"true\"/>"
+ if [ -z "${diskexisting}" ]; then
+ sed -i "s,</HardDisks>, ${extrahd}\n ${extdiff}\n\
+ </HardDisk>\n </HardDisks>," \
+ "${confdir}/VirtualBox.xml"
+ elif [ ${diskexisting} -eq 1 2>/dev/null ]; then
+ sed -i "s,\(<HardDisk uuid="{${diskuuid}}".*\),\1\n ${extdiff}\n,"\
+ "${confdir}/VirtualBox.xml"
+ fi
+ # check if our machine and location present
+ extramach="<MachineEntry uuid=\"{${machineuuid}}\" src=\"Machines" \
+ extramach="${extramach}/${vm_shortname}/${vm_shortname}.xml\"/>"
+ if ! grep -q "${extramach}" "${confdir}/VirtualBox.xml"; then
+ sed -i "s,</MachineRegistry>, ${extramach}\n </MachineRegistry>," \
+ "${confdir}/VirtualBox.xml"
+ fi
+else
+ . ${PLUGINCONFVIRTUALBOX}/virtualbox.include > \
+ "${confdir}/VirtualBox.xml"
+fi
+
+# shortened date YYYY-MM-DD
+#date=${date%T*}
+. ${PLUGINCONFVIRTUALBOX}/machine.include >"${machconfig}"
+
+# add ssh port if linux and NAT
+if [ "${vmostype}" = "Linux26" ] && [ "${network_kind}" = "NAT" ]; then
+ vmsshport="220${VM_ID}"
+ extradataitem='<ExtraDataItem name="VBoxInternal/Devices' \
+ extradataitem="${extradataitem}/${network_card}/0/LUN#0/Config/ssh/"
+ extradataguestport='GuestPort" value="22"/>'
+ extradatahostport="HostPort\" value=\"${vmsshport}\"/>"
+ extradataprotocol='Protocol" value="TCP"/>'
+ sed -ni "s,</ExtraData>, ${extradataitem}${extradataguestport}\n\
+ ${extradataitem}${extradatahostport}\n\
+ ${extradataitem}${extradataprotocol}\n\
+ </ExtraData>," "${machconfig}"
+ writelog "\tGuest SSH port:\t\t${vmsshport}"
+fi
+
+################################################################################
+# finally set env for run-virt.sh
+################################################################################
+
+# wait for a certain command to settle
+# get the PID of the right process
+# TODO: not very good! But seems to work
+# TODO: not needed? KILL!!!
+VBMANPID=$(pstree -p | grep VBoxXPCOMIPCD | grep -ivE "VirtualBox|VBoxHeadless"\
+ | sed -e "s/.*VBoxXPCOMIPCD(\(.*\)).*/\1/")
+for i in $(echo ${VBMANPID}); do
+ kill -9 ${VBMANPID} >/dev/null 2>&1
+done
+# TODO: OLD Version, NOW: KILL process
+#VBMANPID=$(pstree -p | grep VBoxXPCOMIPCD | grep -ivE "VirtualBox|VBoxHeadless"\
+# | sed -e "s/.*VBoxXPCOMIPCD(\(.*\)).*/\1/" | tail -n 1)
+#for i in {0..999}; do
+# ps aux | grep -v grep | grep VBoxXPCOMIPCD | grep -q " ${VBMANPID} " || break
+# if [ $i -eq 999 ]; then
+# kill -9 ${VBMANPID} >/dev/null 2>&1
+# writelog "Process ID ${VBMANPID} did not finish, killing!"
+# fi
+#done
+
+# set the variables appropriately (several interfaces with different names)
+VIRTCMD=$(which VirtualBox 2>/dev/null)
+VIRTCMDOPTS="--startvm ${machineuuid} --start-running"
+
+# SDL tests
+#VIRTCMDSDL=$(which VBoxSDL 2>/dev/null)
+#VIRTCMDOPTSSDL="--startvm ${machineuuid} --fullscreen --hwvirtex --memory 1024 \
+# --fixedmode 1680 1050 24 --hostkey 302 0"
+
+# set headless mode
+VIRTCMDHL=$(which VBoxHeadless 2>/dev/null)
+VIRTCMDOPTSHL="-s ${machineuuid}"
+
diff --git a/os-plugins/plugins/virtualbox/files/rwimg.vdi.gz b/os-plugins/plugins/virtualbox/files/rwimg.vdi.gz
new file mode 100644
index 00000000..e2133d6d
--- /dev/null
+++ b/os-plugins/plugins/virtualbox/files/rwimg.vdi.gz
Binary files differ
diff --git a/os-plugins/plugins/virtualbox/files/virtualbox.include b/os-plugins/plugins/virtualbox/files/virtualbox.include
new file mode 100644
index 00000000..2a7af026
--- /dev/null
+++ b/os-plugins/plugins/virtualbox/files/virtualbox.include
@@ -0,0 +1,47 @@
+# Include file (general template) for run-virt.include of the virtualbox plugin
+cat << EOF > "${confdir}/VirtualBox.xml"
+<?xml version="1.0"?>
+<VirtualBox xmlns="http://www.innotek.de/VirtualBox-settings" version="1.9-linux"> <!-- 1.7-linux -->
+ <Global>
+ <ExtraData>
+ <ExtraDataItem name="GUI/Input/AutoCapture" value="true"/>
+ <ExtraDataItem name="GUI/Input/HostKey" value="65300"/> <!-- scroll lock / Rollen -->
+ <ExtraDataItem name="GUI/LastVMSelected" value="${machineuuid}"/>
+ <ExtraDataItem name="GUI/LicenseAgreed" value="7"/>
+ <ExtraDataItem name="GUI/MaxGuestResolution" value="any"/> <!-- auto, width,height -->
+ <ExtraDataItem name="GUI/SUNOnlineData" value="triesLeft=0"/>
+ <ExtraDataItem name="GUI/SuppressMessages" value=",remindAboutAutoCapture,confirmInputCapture,remindAboutWrongColorDepth,confirmGoingFullscreen,remindAboutMouseIntegrationOn,remindAboutMouseIntegrationOff,showRuntimeError.warning.DevATA_DISKFULL,remindAboutPausedVMInput,confirmVMReset,showRuntimeError.warning.HostAudioNotResponding"/>
+ <ExtraDataItem name="GUI/TrayIcon/Enabled" value="false"/>
+ <ExtraDataItem name="GUI/UpdateCheckCount" value="2"/>
+ <ExtraDataItem name="GUI/UpdateDate" value="never"/>
+ </ExtraData>
+ <MachineRegistry>
+ <MachineEntry uuid="{${machineuuid}}" src="Machines/${vm_shortname}/${vm_shortname}.xml"/>
+ </MachineRegistry>
+ <MediaRegistry>
+ <HardDisks>
+ <HardDisk uuid="{${diskuuid}}" location="${diskfile}" format="${imgfmt}" type="${imgtype}">
+ <HardDisk uuid="{${snapshotuuid}}" location="${snapshotdir}/{${snapshotuuid}}.vdi" format="VDI" autoReset="true"/>
+ </HardDisk>
+ </HardDisks>
+ <!--
+ <DVDImages>
+ <Image uuid="{dcd1e32a-729f-4faa-b319-67adca15e4a4}" location="/.../gpxe-1.0.0+-virtio-net.iso"/>
+ <Image uuid="{b71450c6-b8ff-43c1-a290-2a793b3023d8}" location="/.../gpxe-1.0.0+-e1000.iso"/>
+ </DVDImages>
+ -->
+ <FloppyImages/>
+ </MediaRegistry>
+ <NetserviceRegistry>
+ <DHCPServers>
+ <DHCPServer networkName="HostInterfaceNetworking-vboxnet0" IPAddress="192.168.56.100" networkMask="255.255.255.0" lowerIP="192.168.56.101" upperIP="192.168.56.254" enabled="1"/>
+ <!--
+ <DHCPServer networkName="HostInterfaceNetworking-vboxnet1" IPAddress="0.0.0.0" networkMask="0.0.0.0" lowerIP="0.0.0.0" upperIP="0.0.0.0" enabled="0"/>
+ -->
+ </DHCPServers>
+ </NetserviceRegistry>
+ <SystemProperties defaultMachineFolder="${machfolder}" defaultHardDiskFolder="${diskfolder}" defaultHardDiskFormat="VDI" remoteDisplayAuthLibrary="VRDPAuth" webServiceAuthLibrary="VRDPAuth" LogHistoryCount="3"/>
+ <USBDeviceFilters/>
+ </Global>
+</VirtualBox>
+EOF