summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Janczyk2010-03-19 17:33:58 +0100
committerMichael Janczyk2010-03-19 17:33:58 +0100
commit0da1acc25f8d5f36c660f2d2fa83d1c0240c3909 (patch)
tree233449e24758c5c903faa8aa84189962e31a0581
parentvirtualbox, vmgrix und xen anpassungen (diff)
downloadcore-0da1acc25f8d5f36c660f2d2fa83d1c0240c3909.tar.gz
core-0da1acc25f8d5f36c660f2d2fa83d1c0240c3909.tar.xz
core-0da1acc25f8d5f36c660f2d2fa83d1c0240c3909.zip
virtualbox, vmgrix und xen anpassungen, jetzt auch geadded
-rw-r--r--os-plugins/plugins/virtualbox/files/VirtualBox.xml41
-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.include132
-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/virtualbox.include47
-rw-r--r--os-plugins/plugins/vmgrid/OpenSLX/OSPlugin/vmgrid.pm244
-rw-r--r--os-plugins/plugins/vmgrid/XX_vmgrid.sh85
-rw-r--r--os-plugins/plugins/vmgrid/files/run-vmgrid.sh310
-rw-r--r--os-plugins/plugins/vmgrid/files/vmgrid195
-rwxr-xr-xos-plugins/plugins/vmgrid/files/xmlfilter.sh50
-rwxr-xr-xos-plugins/plugins/xen/init-hooks/20-nw-bridge-config/bridge.sh30
17 files changed, 1616 insertions, 0 deletions
diff --git a/os-plugins/plugins/virtualbox/files/VirtualBox.xml b/os-plugins/plugins/virtualbox/files/VirtualBox.xml
new file mode 100644
index 00000000..d9a36795
--- /dev/null
+++ b/os-plugins/plugins/virtualbox/files/VirtualBox.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0"?>
+<VirtualBox xmlns="http://www.innotek.de/VirtualBox-settings" version="1.9-linux">
+ <Global>
+ <ExtraData>
+ <ExtraDataItem name="GUI/Input/AutoCapture" value="true"/>
+ <ExtraDataItem name="GUI/Input/HostKey" value="65300"/>
+ <ExtraDataItem name="GUI/LastVMSelected" value="00000000-0000-0000-0000-00505601fe23"/>
+ <ExtraDataItem name="GUI/LastWindowPostion" value="455,235,770,550"/>
+ <ExtraDataItem name="GUI/LicenseAgreed" value="7"/>
+ <ExtraDataItem name="GUI/MaxGuestResolution" value="any"/>
+ <ExtraDataItem name="GUI/SUNOnlineData" value="triesLeft=0"/>
+ <ExtraDataItem name="GUI/SuppressMessages" value=",remindAboutAutoCapture,confirmInputCapture,remindAboutWrongColorDepth,confirmGoingFullscreen,remindAboutMouseIntegrationOn,remindAboutMouseIntegrationOff,showRuntimeError.warning.DevATA_DISKFULL,remindAboutPausedVMInput,confirmVMReset"/>
+ <ExtraDataItem name="GUI/TrayIcon/Enabled" value="false"/>
+ <ExtraDataItem name="GUI/UpdateCheckCount" value="2"/>
+ <ExtraDataItem name="GUI/UpdateDate" value="never"/>
+ </ExtraData>
+ <MachineRegistry>
+ <MachineEntry uuid="{00000000-0000-0000-0000-00505601fe23}" src="Machines/WinXP-Standard-01/WinXP-Standard-01.xml"/>
+ </MachineRegistry>
+ <MediaRegistry>
+ <HardDisks>
+ <HardDisk uuid="{9cc859b2-955c-4047-9c34-8e3cb164f50e}" location="/tmp/virtualbox/np4/HardDisks/WinXP-Standard-01.vdi" format="VDI" type="Normal">
+ <HardDisk uuid="{88bc8b6d-f248-468a-95fe-318084904f8b}" location="/tmp/virtualbox/np4/HardDisks/empty-diff-00.vdi" format="VDI"/>
+ <HardDisk uuid="{42f5033e-9913-41ff-8cba-1c986ba5db8d}" location="/tmp/virtualbox/np4/HardDisks/empty-diff-01.vdi" format="VDI"/>
+ <HardDisk uuid="{1b66fdcb-8ede-4bb8-aaec-417bc2074633}" location="/tmp/virtualbox/np4/HardDisks/empty-diff-02.vdi" format="VDI"/>
+ <HardDisk uuid="{563d2c5e-c9a2-4fbb-be51-8d279a558e6c}" location="/tmp/virtualbox/np4/HardDisks/empty-diff-03.vdi" format="VDI"/>
+ <HardDisk uuid="{efff0c85-c1c8-420d-a25f-6e66f117e1f2}" location="/tmp/virtualbox/np4/HardDisks/empty-diff-04.vdi" format="VDI"/>
+ </HardDisk>
+ </HardDisks>
+ <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"/>
+ </DHCPServers>
+ </NetserviceRegistry>
+ <SystemProperties defaultMachineFolder="/tmp/virtualbox/np4/Machines" defaultHardDiskFolder="/tmp/virtualbox/np4/HardDisks" defaultHardDiskFormat="VDI" remoteDisplayAuthLibrary="VRDPAuth" webServiceAuthLibrary="VRDPAuth" LogHistoryCount="3"/>
+ <USBDeviceFilters/>
+ </Global>
+</VirtualBox>
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..7488126a
--- /dev/null
+++ b/os-plugins/plugins/virtualbox/files/machine.include
@@ -0,0 +1,132 @@
+# Include file (machine template) for run-virt.include of the virtualbox plugin
+cat <<EOF
+<?xml version="1.0"?>
+<VirtualBox xmlns="http://www.innotek.de/VirtualBox-settings" version="1.9-linux">
+ <Machine uuid="{${machineuuid}}" name="${vm_name}" OSType="${vmostype}"> <!-- stateFile="Snapshots/{1e5f5eb0-6b13-4407-9906-36114eca1e61}.sav" lastStateChange="2010-03-09T19:48:32Z"> -->
+ <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="1">
+ <HardwareVirtEx enabled="false" exclusive="true"/>
+ <HardwareVirtExNestedPaging enabled="false"/>
+ <HardwareVirtExVPID enabled="false"/>
+ <PAE enabled="true"/>
+ </CPU>
+ <Memory RAMSize="${mem}"/>
+ <Boot>
+ <Order position="1" device="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="true"/> <!-- OSS, Alsa, Pulse (HANGS!) -->
+ <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="{${snapshotuuid}}"/>
+ </AttachedDevice>
+ <!--
+ <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.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/virtualbox.include b/os-plugins/plugins/virtualbox/files/virtualbox.include
new file mode 100644
index 00000000..e0c41290
--- /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
+<?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"/>
+ <ExtraDataItem name="GUI/TrayIcon/Enabled" value="false"/>
+ <ExtraDataItem name="GUI/UpdateCheckCount" value="2"/>
+ <ExtraDataItem name="GUI/UpdateDate" value="never"/> <!-- value="1 d, DATE, stable" -->
+ </ExtraData>
+ <MachineRegistry>
+ <MachineEntry uuid="{${machineuuid}}" src="Machines/${vm_shortname}/${vm_shortname}.xml"/>
+ </MachineRegistry>
+ <MediaRegistry>
+ <HardDisks>
+ <HardDisk uuid="{${diskuuid}}" location="${diskfile}" format="${imgtype}" type="Immutable">
+ <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
diff --git a/os-plugins/plugins/vmgrid/OpenSLX/OSPlugin/vmgrid.pm b/os-plugins/plugins/vmgrid/OpenSLX/OSPlugin/vmgrid.pm
new file mode 100644
index 00000000..a4f08bc1
--- /dev/null
+++ b/os-plugins/plugins/vmgrid/OpenSLX/OSPlugin/vmgrid.pm
@@ -0,0 +1,244 @@
+# Copyright (c) 2008, 2009 - OpenSLX GmbH
+#
+# This program 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 suggestions, praise, or complaints to feedback@openslx.org
+#
+# General information about OpenSLX can be found at http://openslx.org/
+# -----------------------------------------------------------------------------
+# vmgrid.pm
+# - ...
+# -----------------------------------------------------------------------------
+package OpenSLX::OSPlugin::vmgrid;
+
+use strict;
+use warnings;
+
+use base qw(OpenSLX::OSPlugin::Base);
+
+use OpenSLX::Basics;
+use OpenSLX::Utils;
+
+sub new
+{
+ my $class = shift;
+
+ my $self = {
+ name => 'vmgrid',
+ };
+
+ return bless $self, $class;
+}
+
+# TODO: desc
+sub getInfo
+{
+ my $self = shift;
+
+ return {
+ description => unshiftHereDoc(<<' End-of-Here'),
+ ...
+ End-of-Here
+ precedence => 80,
+ #required => [ qr{^(vmware|virtualbox|qemukvm|xen)$} ],
+ #openvz|vserver
+ # TODO: virtaul plugin (requires, provides?)
+ #required => [ qw( virtualization ) ],
+ #provided => [ qw( virtualization ) ],
+ };
+}
+
+sub getAttrInfo
+{
+ my $self = shift;
+
+ return {
+ 'vmgrid::active' => {
+ applies_to_systems => 1,
+ applies_to_clients => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ should the 'vmgrid'-plugin be executed during boot?
+ End-of-Here
+ content_regex => qr{^(0|1)$},
+ content_descr => '1 means active - 0 means inactive',
+ default => '1',
+ },
+ 'vmgrid::virt' => {
+ applies_to_systems => 1,
+ applies_to_clients => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ which virtualization technique schould be used?
+ End-of-Here
+ content_regex => qr{^(vmware|virtualbox|qemukvm|xen)$},
+ #openvz|vserver
+ content_descr => 'possible values: vmware, virtualbox, qemukvm, xen',
+ #openvz, vserver
+ default => undef,
+ },
+ 'vmgrid::roshare' => {
+ applies_to_systems => 1,
+ applies_to_clients => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ do you want to mount external resources?
+ e.g. NFS share /w virt images ...
+ will be mounted to /var/lib/virt/vmgrid
+ End-of-Here
+ content_regex => qr{^nfs://},
+ content_descr => 'NFS share as URI (nfs://...)',
+ default => undef,
+ },
+ 'vmgrid::rwshare' => {
+ applies_to_systems => 1,
+ applies_to_clients => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ do you want a persistent storage device?
+ use local hard drive (ID45) or NFS share.
+ will be mounted to /var/opt/openslx/plugins/vmgrid/share
+ End-of-Here
+ content_regex => qr{^(id45|nfs://)},
+ content_descr => 'NFS share as URI (nfs://...) or "id45"',
+ default => undef,
+ },
+ 'vmgrid::imgpath' => {
+ applies_to_systems => 1,
+ applies_to_clients => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ location of virtual images
+ for starts /wo full path
+ End-of-Here
+ content_descr => 'absolute path to vm image files',
+ default => '/var/lib/virt/vmgrid/images',
+ },
+ 'vmgrid::xmlpath' => {
+ applies_to_systems => 1,
+ applies_to_clients => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ location of XML configuration for virtual images
+ for starts /wo full path
+ End-of-Here
+ content_descr => 'absolute path to vm xml files',
+ default => '/var/lib/virt/vmgrid/xml',
+ },
+ 'vmgrid::startvms' => {
+ applies_to_systems => 1,
+ applies_to_clients => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ which virtaul machines should be started per default
+ comma separated list. first will be started first,
+ second second, and so on, max. 4 VMs
+ End-of-Here
+ content_descr => 'name of xml file e.g. scilin-5.4-wn(.xml)',
+ default => undef,
+ },
+ 'vmgrid::hvm' => {
+ applies_to_systems => 1,
+ applies_to_clients => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ use hardware virtualization, if applicable
+ override the settings of the corresponding virt plugin
+ (only if supported by plugin)
+ End-of-Here
+ content_regex => qr{^(0|1)$},
+ content_descr => 'possible values: "0", "1" or "-" (for unset)',
+ default => undef,
+ },
+ 'vmgrid::maxvcpus' => {
+ applies_to_systems => 1,
+ applies_to_clients => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ use this number of vcpus as maximum for one vm
+ will be used only if applicable
+ (only if supported by plugin)
+ End-of-Here
+ content_regex => qr{^(1|2|4|8|16)$},
+ content_descr => 'possible values: 1, 2, 4, 8, 16',
+ default => undef,
+ },
+ 'vmgrid::minvcpus' => {
+ applies_to_systems => 1,
+ applies_to_clients => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ use this number of vcpus as minimum for one vm
+ will be used only if applicable
+ (only if supported by plugin)
+ End-of-Here
+ content_regex => qr{^(1|2|4|8|16)$},
+ content_descr => 'possible values: 1, 2, 4, 8, 16',
+ default => undef,
+ },
+ 'vmgrid::memratio' => {
+ applies_to_systems => 1,
+ applies_to_clients => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ define memory ratio in nn%
+ order: grid client 1, 2, 3, 4, other VMs, host
+ if desktop virtualization defined the free memory will be
+ distributed between the remaining grid clients,
+ according to their ratio
+ if less than 4 VMs defined in startvms the memory is being
+ reserved for a later manual start
+ set to 0 if you don't intend to start them manually
+ (only if supported by plugin)
+ End-of-Here
+ content_regex => qr{^(\d\d??,\d\d??,\d\d??,\d\d??,\d\d??,\d\d??)$},
+ content_descr => 'vals: \d\d??,\d\d??,\d\d??,\d\d??,\d\d??,\d\d??',
+ default => '40,0,0,0,40,20',
+ },
+ 'vmgrid::maxram' => {
+ applies_to_systems => 1,
+ applies_to_clients => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ maximum of RAM used for ALL vms
+ will be used only if applicable
+ (only if supported by plugin)
+ End-of-Here
+ content_regex => qr{^(1|2|3|4|5|6|7|8|9)},
+ content_descr => 'values can be absolute or relative e.g. 512 or 50%',
+ default => undef,
+ },
+ 'vmgrid::minram' => {
+ applies_to_systems => 1,
+ applies_to_clients => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ minimum of RAM used for ALL vms
+ will be used only if applicable
+ (only if supported by plugin)
+ End-of-Here
+ content_regex => qr{^(1|2|3|4|5|6|7|8|9)},
+ content_descr => 'values can be absolute or relative e.g. 512 or 50%',
+ default => undef,
+ },
+ };
+}
+
+sub installationPhase
+{
+ my $self = shift;
+ my $info = shift;
+
+ my $pluginRepoPath = $info->{'plugin-repo-path'};
+ my $openslxBasePath = $info->{'openslx-base-path'};
+
+ # copy all needed files now:
+ my $pluginName = $self->{'name'};
+ my $pluginBasePath = "$openslxBasePath/lib/plugins/$pluginName/files";
+ foreach my $file ( qw( vmgrid run-vmgrid.sh ) ) {
+ copyFile("$pluginBasePath/$file", "$pluginRepoPath/");
+ chmod 0755, "$pluginRepoPath/$file";
+ }
+
+ return;
+}
+
+sub removalPhase
+{
+ my $self = shift;
+ my $info = shift;
+
+ return;
+}
+
+1;
+
diff --git a/os-plugins/plugins/vmgrid/XX_vmgrid.sh b/os-plugins/plugins/vmgrid/XX_vmgrid.sh
new file mode 100644
index 00000000..7aa7dba5
--- /dev/null
+++ b/os-plugins/plugins/vmgrid/XX_vmgrid.sh
@@ -0,0 +1,85 @@
+# Copyright (c) 2008..2010 - RZ Uni Freiburg
+# Copyright (c) 2008..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
+#
+# 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/vmgrid.conf"
+PLUGINCONFDIR=/mnt/${OPENSLX_DEFAULT_CONFDIR}/plugins/vmgrid
+VIRTUALIZATIONPLUGIN=/mnt/${OPENSLX_DEFAULT_CONFDIR}/plugins/virtualization
+RWSHARE=/mnt/${OPENSLX_DEFAULT_VARDIR}/plugins/vmgrid/share
+BINDIR=/mnt/${OPENSLX_DEFAULT_BINDIR}
+PLUGINDIR=${OPENSLX_DEFAULT_DIR}/plugin-repo/vmgrid
+VIRTDIR=/mnt/${OPENSLX_DEFAULT_VIRTDIR}/vmgrid
+LOGDIR=/mnt/${OPENSLX_DEFAULT_LOGDIR}
+
+if [ -f $CONFFILE ]; then
+
+ # load needed variables
+ . $CONFFILE
+
+ if [ $vmgrid_active -ne 0 ] ; then
+ [ $DEBUGLEVEL -gt 0 ] && echo "executing the 'vmgrid' os-plugin ..."
+
+ # load general configuration
+ . /initramfs/machine-setup
+
+ testmkd ${PLUGINCONFDIR}
+ # create folder for virtual virtualization plugin
+ testmkd ${VIRTUALIZATIONPLUGIN}
+ testmkd ${VIRTDIR}
+ cp $CONFFILE ${PLUGINCONFDIR}/vmgrid.conf
+ # create link to binpath
+ ln -fs ${PLUGINDIR}/vmgrid ${BINDIR}/vmgrid
+ ln -fs ${PLUGINDIR}/run-vmgrid.sh ${BINDIR}/run-vmgrid.sh
+
+ # mount nfs virt ro share
+ if strinstr "nfs://" "${vmgrid_roshare}"; then
+ virtsrcprot=$(uri_token ${vmgrid_roshare} prot)
+ virtsrcserv=$(uri_token ${vmgrid_roshare} server)
+ virtsrcpath="$(uri_token ${vmgrid_roshare} path)"
+ if [ -n "${virtsrcprot}" -a -n "${virtsrcserv}" -a -n "${virtsrcpath}" ];
+ then
+ virtsrctarget=${VIRTDIR}
+ # mount the vmgrid source ro
+ fsmount ${virtsrcprot} ${virtsrcserv} ${virtsrcpath} ${virtsrctarget} \
+ ro
+ fi
+ fi
+
+ # bind mount id 45 to ${RWSHARE}
+ if strinstr "id45" "${vmgrid_rwshare}" ; then
+ if grep "/mnt/var/scratch " /proc/mounts; then
+ mount --bind -n /mnt/var/scratch ${RWSHARE} >${LOGDIR}/vmgrid.log 2>&1
+ fi
+ # mount nfs rw share
+ elif strinstr "nfs://" "${vmgrid_rwshare}" ; then
+ rwshareprot=$(uri_token ${vmgrid_rwshare} prot)
+ rwshareserv=$(uri_token ${vmgrid_rwshare} server)
+ rwsharepath="$(uri_token ${vmgrid_rwshare} path)"
+ if [ -n "${rwshareprot}" -a -n "${rwshareserv}"-a -n "${rwsharepath}" ];
+ then
+ rwtarget=${RWSHARE}
+ # mount the vmgrid source rw
+ fsmount ${rwshareprot} ${rwshareserv} ${rwsharepath} ${rwtarget} rw
+ fi
+ fi
+
+ # TODO: virtual virtualization plugin
+
+ # finished ...
+ [ $DEBUGLEVEL -gt 0 ] && echo "done with 'vmgrid' os-plugin ..."
+ fi
+[ $DEBUGLEVEL -gt 0 ] && echo " * configuration of 'vmgrid' os-plugin failed"
+fi
diff --git a/os-plugins/plugins/vmgrid/files/run-vmgrid.sh b/os-plugins/plugins/vmgrid/files/run-vmgrid.sh
new file mode 100644
index 00000000..c8ebb1a1
--- /dev/null
+++ b/os-plugins/plugins/vmgrid/files/run-vmgrid.sh
@@ -0,0 +1,310 @@
+#!/bin/bash
+# -----------------------------------------------------------------------------
+# Copyright (c) 2007..2010 - RZ Uni FR
+# Copyright (c) 2007..2010 - OpenSLX GmbH
+#
+# This program 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 suggestions, praise, or complaints to feedback@openslx.org
+#
+# General information about OpenSLX can be found at http://openslx.org/
+# -----------------------------------------------------------------------------
+# vmgrid
+# - This is the generic wrapper for the several virtualization solutions...
+################################################################################
+
+. /etc/opt/openslx/openslx.conf
+
+################################################################################
+### Functions used throughout the script
+################################################################################
+
+# function to write to stdout and logfile
+writelog () {
+ # write to stdout
+ echo -e "$1"
+ # log into file
+ echo -e "$1" >> ${OPENSLX_DEFAULT_LOGDIR}/run-vmgrid.${USER}.$$.log
+}
+
+################################################################################
+### Define default dirs / get configs
+################################################################################
+
+PLUGINCONFROOT=${OPENSLX_DEFAULT_CONFDIR}/plugins
+PLUGINCONFVMGRID=${PLUGINCONFROOT}/vmgrid
+# include general configuration from vmgrid
+[ -f ${PLUGINCONFVMGRID}/vmgrid.conf ] && \
+ . ${PLUGINCONFVMGRID}/vmgrid.conf
+#[ -f ${PLUGINCONFVMGRID}/vmgrid.include ] && \
+# . ${PLUGINCONFVMGRID}/vmgrid.include
+# get the vmchooser_active var
+[ -f ${PLUGINCONFROOT}/vmchooser/vmchooser.conf ] && \
+ . ${PLUGINCONFROOT}/vmchooser/vmchooser.conf
+
+################################################################################
+### Get XML file and dir
+################################################################################
+
+# check if forcemem set
+if [ "$1" = "--forcemem" ]; then
+ forcemem=$2
+ xmlfile=${3##*/}
+else
+ xmlfile=${1##*/}
+fi
+
+# absolute or relative path?
+if ls ${1} 2>/dev/null | grep '/' >/dev/null 2>&1; then
+ xmlpath=$(dirname ${1})
+else
+ xmlpath=${vmgrid_xmlpath}
+fi
+# full path
+xmlfile="${xmlpath}/${xmlfile%.xml}.xml"
+
+################################################################################
+### Sanity checks
+################################################################################
+
+# test if the xml file is valid
+if ! [ -r "${xmlfile}" ]; then
+ echo -e "Usage: run-vmgrid.sh [--forcemem <memorysize in MB>] \c"
+ echo -e "[/path/]filename[.xml]"
+ exit 1
+fi
+
+# test how many instances running
+runningvms=$(ps aux | grep "run-vmgrid.sh " | grep -v grep | wc -l)
+runningvms=$(expr ${runningvms} - 1)
+# check value
+if [ $runningvms -le 0 ]; then
+ writelog "Error in value: Running VMs: ${runningvms}. Exit!"
+ exit 1
+fi
+# check if vmchooser plugin installed
+if [ ${vmchooser_active} = "1" 2>/dev/null] && [ ${runningvms} -gt 1 ]; then
+ # only allow one instance of vmgrid
+ writelog "Already 1 VMs running and vmchooser plugin is active."
+ writelog "Can't start ${xmlfile}, exiting!"
+ exit 1
+# else allow max. 4 instances
+elif [ ${runningvms} -gt 4 ]; then
+ writelog "Already 4 VMs running, exiting!"
+ exit 1
+fi
+VM_ID="0${runningvms}"
+
+# test if XML file
+if ! grep '<?xml' "${xmlfile}" >/dev/null 2>&1; then
+ writelog \
+ "Submitted configuration file ${xmlfile} seems to have wrong XML format"
+ exit 1
+fi
+
+################################################################################
+### Logo for console
+################################################################################
+
+cat <<EOL
+
+ __ __
+ .----.--.--.-----.___.--.--.--------.-----.----.|__|.--| |
+ | _| | | |___| | | | _ | _|| || _ |
+ |__| |_____|__|__| \___/|__|__|__|___ |__| |__||_____|
+ |_____|
+ OpenSLX virtual machine environment preparation script ...
+
+EOL
+
+################################################################################
+### Read needed variables from XML file
+################################################################################
+
+writelog "Starting configuration..."
+writelog "\tVM-ID:\t\t\t${VM_ID}"
+writelog "\tLogfile:\t\t${OPENSLX_DEFAULT_LOGDIR}/run-vmgrid.${USER}.$$.log"
+writelog "\t$(df -h | grep " /tmp$" | awk '{print $2}') \c"
+writelog "/tmp info:\t\t$(grep "/tmp " /proc/mounts | sed -e "s,/tmp ,,")"
+writelog "\tVM XML dir:\t\t${vmgrid_xmlpath}"
+writelog "\tVM Image dir:\t\t${vmgrid_imgpath}"
+writelog "VM config:"
+
+if ! grep '<?xml' "${xmlfile}" >/dev/null 2>&1; then
+ writelog \
+ "\tSubmitted configuration file ${xmlfile} seems to have wrong XML format"
+ exit 1
+fi
+
+writelog "\tXML file:\t\t$xmlfile"
+
+imgpath=${vmgrid_imgpath}
+
+# name of the virt image of dir
+imgname=$(grep -io 'image_name param=.*"' ${xmlfile} | sed -e "s/&.*;/; /g" | \
+ awk -F '"' '{ print $2 }')
+# full path
+vmpath=${imgpath}/${imgname}
+
+# check if virtual machine container file exists
+if ! [ -e $vmpath ]; then
+ writelog "\tVirtual machine image or directory ${vmpath} not found!"
+ exit 1
+fi
+
+writelog "\tVM file/dir:\t\t$vmpath"
+
+# name of the virt machine, sed because of Windows formatting
+vm_name=$(grep -o 'short_description param=.*"' ${xmlfile} | \
+ sed -e "s/&.*;/; /g" | awk -F '"' '{print $2}')
+
+# is there an additional configuration provided?
+additional_config=$(grep -o 'additional_config param=.*"' ${xmlfile} | \
+ sed -e "s/&.*;/; /g" | awk -F '"' '{print $2}')
+
+# if ${vm_name} not defined use ${imgname}
+vm_name=${vm_name:-"${imgname%.*}"}
+displayname=${vm_name}
+# remove blanks
+
+# image is for the following virtual machine
+xmlvirt=$(grep -o 'virtualmachine param=.*"' ${xmlfile} | \
+ sed -e "s/&.*;/; /g" | awk -F '"' '{print $2}')
+
+# make a guess from the filename extension if ${xmlvirt} is empty
+# (not set within the XML file)
+if [ -z "${xmlvirt}" ] && [ -n "${additional_config}" ]; then
+ writelog "\tNo virtual machine parameter defined in ${xmlfile}"
+ writelog "\tTrying to guess VM...\c"
+ case "$(cat ${additional_config} | tr [A-Z] [a-z])" in
+ *config.version*|*virtualhw.version*|*independent-nonpersistent*|*vmdk*)
+ xmlvirt="vmware"
+ ;;
+ *innotek*|*virtualbox*)
+ xmlvirt="virtualbox"
+ ;;
+ *qemu*|*kvm*)
+ xmlvirt="qemukvm"
+ ;;
+ *)
+ xmlvirt="none"
+ ;;
+ esac
+elif [ -z "${xmlvirt}" ]; then
+ case "$(echo ${imgname##*.} | tr [A-Z] [a-z])" in
+ vmdk)
+ xmlvirt="vmware"
+ ;;
+ vbox)
+ xmlvirt="virtualbox"
+ ;;
+ img|qcow*)
+ xmlvirt="qemukvm"
+ ;;
+ *)
+ xmlvirt="none"
+ ;;
+ esac
+ writelog "result:\t${xmlvirt}"
+fi
+
+# TODO: confs von openvz lesen?
+if [ "${vmgrid_virt}" != "${xmlvirt}" ]; then
+ writelog "\tThe virtual machine specified in ${xmlfile}"
+ writelog "\tdoes not match the virtualization used here (${vmgrid_virt})"
+ exit 1
+fi
+
+# definition of the client system
+vmostype=$(grep -io '<os param=.*"' ${xmlfile} | awk -F '"' '{ print $2 }')
+
+# definition of the networking the client system is connected to
+network_kind=$(grep -io 'network param=.*"' ${xmlfile} | \
+ awk -F '"' '{ print $2 }')
+network_card=$(grep -io 'netcard param=.*"' ${xmlfile} | \
+ awk -F '"' '{ print $2 }')
+
+writelog "\tVirtualization:\t\t$xmlvirt"
+writelog "\tVM Name:\t\t$vm_name"
+writelog "\tVM Displayname:\t\t$displayname"
+
+###############################################################################
+### Declaration of default variables
+###############################################################################
+
+# TODO: cpu cores
+#vmgrid::maxvcpus
+#vmgrid::minvcpus
+#cpu_cores="${cpu_cores}"
+
+# check for CPU virtualization flags
+#vmgrid::hvm
+
+# get total amount of memory installed in your machine
+totalmem=$(expr $(grep -i "memtotal" /proc/meminfo | awk '{print $2}') / 1024)
+permem=60
+mem=$(expr ${totalmem} / 100 \* ${permem} / 4 \* 4)
+#vmgrid::maxram
+#vmgrid::minram
+
+# configuring ethernet mac address: first 3 bytes are fixed (00:50:56)
+# 4th byte is the VM-ID
+# last two bytes are taken from the bridge of the host
+# define one MAC per guest
+macguestpart="00:50:56:${VM_ID}"
+machostpart=$($(which ifconfig) br0 | grep br0 | sed -e "s/ //g" | \
+ awk -F ":" '{print $(NF-1)":"$NF}')
+macaddr=$(echo "${macguestpart}:${machostpart}" | tr [a-z] [A-Z])
+
+# ide is expected default, test for the virtual disk image type should
+# be done while creating the runscripts ...
+# TODO: cdrom / floppy?
+ide="TRUE"
+scsi="FALSE"
+hddrv="ide"
+
+# TODO: vncclient IP:55101
+
+# set hostname: using original hostname and adding string
+hostname="vmgrid${VM_ID}-$(hostname)"
+
+writelog "\tVM Hostname:\t\t$hostname"
+
+################################################################################
+### Setup the rest of the environment and run the configured vm
+################################################################################
+
+# Copy guest configuration (with added information) config.xml to be accessed
+# via virtual floppy
+# TODO: virt-floppy needed?
+
+# Get all virtual machine specific stuff from the respective include file
+# TODO: rename to run-vuirt.include
+if [ -e ${PLUGINCONFROOT}/${vmgrid_virt}/run-virt.include ] ; then
+ writelog "Strating ${vmgrid_virt} specific part ..."
+ self=${vmgrid_virt}
+ . ${PLUGINCONFROOT}/${vmgrid_virt}/run-virt.include
+else
+ writelog "Failed because of missing ${vmgrid_virt} plugin"
+ exit 1
+fi
+
+# start headless
+if [ -n "${VIRTCMDHL}" ]; then
+ writelog "Starting ${vmgrid_virt} head-less..."
+ ${VIRTCMDHL} ${VIRTCMDOPTSHL}
+else
+ writelog "${vmgrid_virt}: No headless mode defined, exiting!"
+ exit 1
+fi
+
+writelog "${vmgrid_virt} exited. Cleanning up...\c"
+if echo "${RMDIRS}" 2>/dev/null | grep ${vmgrid_virt} >/dev/null 2>&1; then
+ rm -rf ${RMDIRS} >/dev/null 2>&1
+fi
+writelog "done"
+writelog "Bye."
+
+exit 0
diff --git a/os-plugins/plugins/vmgrid/files/vmgrid b/os-plugins/plugins/vmgrid/files/vmgrid
new file mode 100644
index 00000000..66291aea
--- /dev/null
+++ b/os-plugins/plugins/vmgrid/files/vmgrid
@@ -0,0 +1,195 @@
+#!/bin/bash
+# -----------------------------------------------------------------------------
+# Copyright (c) 2007..2010 - RZ Uni FR
+# Copyright (c) 2007..2010 - OpenSLX GmbH
+#
+# This program 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 suggestions, praise, or complaints to feedback@openslx.org
+#
+# General information about OpenSLX can be found at http://openslx.org/
+# -----------------------------------------------------------------------------
+# vmgrid
+# - Script for autostarts defined in vmgrid::startvms
+################################################################################
+
+# include default directories
+. /etc/opt/openslx/openslx.conf
+
+################################################################################
+### Manual Start
+################################################################################
+
+if [ -n "$1" ]; then
+ if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
+ echo "Usage: vmgrid [[/path/]filename[.xml]]"
+ exit 0
+ else
+ run-vmgrid.sh $1 &
+ exit 0
+ fi
+fi
+
+################################################################################
+### Functions used throughout the script
+################################################################################
+
+# function to write to stdout and logfile
+writelog () {
+ # write to stdout
+ echo -e "$1"
+ # log into file
+ echo -e "$1" >> ${OPENSLX_DEFAULT_LOGDIR}/run-vmgrid.${USER}.$$.log
+}
+
+################################################################################
+### Define default dirs / get configs
+################################################################################
+
+PLUGINCONFROOT=${OPENSLX_DEFAULT_CONFDIR}/plugins
+PLUGINCONFDIR=${PLUGINCONFROOT}/vmgrid
+# include general configuration from vmgrid
+[ -f ${PLUGINCONFDIR}/vmgrid.conf ] && \
+ . ${PLUGINCONFDIR}/vmgrid.conf
+# get the vmchooser_active var
+[ -f ${PLUGINCONFROOT}/vmchooser/vmchooser.conf ] && \
+ . ${PLUGINCONFROOT}/vmchooser/vmchooser.conf
+
+################################################################################
+### Configure VMs for autostart and set RAM
+################################################################################
+
+# remove blanks
+vmgrid_memratio=$(echo ${vmgrid_memratio} | sed -e "s, *,,g")
+vmgrid_startvms=$(echo ${vmgrid_startvms} | sed -e "s, *,,g")
+
+# get total amount of memory installed in your machine
+# TODO: stage 3? virtaulization plugin
+totalmem=$(expr $(grep -i "memtotal" /proc/meminfo | awk '{print $2}') / 1024)
+
+# get hostmem
+hostratio=$(echo ${vmgrid_memratio} | awk -F ',' '{print $6}')
+hostmem=$(expr ${totalmem} \* ${hostratio} / 100 2>/dev/null)
+if [ ${hostmem} -lt 256 2>/dev/null ]; then
+ hostmem=256
+ writelog "${hostmem} MB RAM reserved for host"
+fi
+
+# get other vm mem
+if [ ${vmchooser_active} -eq 1 ]; then
+ othervmratio=$(echo ${vmgrid_memratio} | awk -F ',' '{print $5}')
+ othervmmem=$(expr ${totalmem} \* ${othervmratio} / 100 2>/dev/null)
+ if [ ${othervmmem} -lt 512 2>/dev/null ]; then
+ othervmmem=512
+ writelog "${othervmmem} MB RAM reserved for other virtualization solutions"
+ fi
+else
+ othervmratio=0
+ othervmmem=0
+fi
+
+# calculate freemem
+freemem=$(expr ${totalmem} - ${hostmem} - ${othervmmem} 2>/dev/null)
+if [ ${freemem} -lt 512 2>/dev/null ]; then
+ writelog "Not enough free RAM for this plugin, free: ${freemem} MB"
+ exit 1
+fi
+
+# ratio minus other vms and host
+restratio=$(expr 100 - ${hostratio} - ${othervmratio})
+
+# get clients mem ratio
+vmsumratios=0
+for i in {1..4}; do
+ vm[$i]=$(echo ${vmgrid_startvms} | awk -F ',' '{print $1}')
+ # remove ${vm[$i]} from list because of '{print $1}'
+ vmgrid_startvms=$(echo ${vmgrid_startvms} | sed -e "s/${vm[$i]},*//")
+ vmratio[$i]=$(echo ${vmgrid_memratio} | awk -F ',' '{print $1}')
+ # remove ${vmratio[$i]} from list because of '{print $1}'
+ vmgrid_memratio=$(echo ${vmgrid_memratio} | sed -e "s/${vmratio[$i]},*//")
+ vmsumratios=$(expr ${vmsumratios} + ${vmratio[$i]} 2>/dev/null)
+done
+
+# ratio test: 100 - host - other vm + grid ratios
+ratiotest=$(expr 100 - ${restratio} + ${vmsumratios} 2>/dev/null)
+if [ ${ratiotest} -gt 100 ]; then
+ #writelog "you managed to get over 100% in ratio Einstein: ${ratiotest}%"
+ exit 1
+fi
+
+for i in {1..4}; do
+ # calculate vms mem: mem = $freemem * $vmratio/100 * 100/$restratio
+ # multiple of 4
+ vmmem[$i]=$(expr ${freemem} \* ${vmratio[$i]} / ${restratio} / 4 \* 4 \
+ 2>/dev/null)
+ if [ -n "${vm[$i]}" ] && [ ${vmmem[$i]} -lt 512 2>/dev/null ]; then
+ writelog "Not enough free RAM for ${vm[$i]} (min. 512 MB), \c"
+ writelog "free: ${vmmem[$i]} MB"
+ unset vm[$i]
+ fi
+done
+
+################################################################################
+### Start the VMs
+################################################################################
+
+# start vms
+for i in {1..4}; do
+ if [ -n "${vm[$i]}" ]; then
+ alreadyrunning=$(ps aux | grep run-vmgrid.sh | grep -v grep | \
+ grep "${vm[$i]}" | wc -l)
+ if [ ${alreadyrunning} -gt 0 2>/dev/null ]; then
+ writelog "${vm[$i]} already running, skipping!"
+ else
+ writelog "Starting ${vm[$i]} via run-vmgrid.sh with ${vmmem[$i]} MB RAM"
+ run-vmgrid.sh --forcemem ${vmmem[$i]} ${vm[$i]} &
+ # wait 5 secs for the next vm to start
+ sleep 5
+ fi
+ fi
+done
+
+exit 0
+
+################################################################################
+### old stuff with xml files
+################################################################################
+#
+#filter_autostart=$(grep -i "active param" ${vmgrid_xmlpath}/*.xml | \
+# grep -E "true|1" | awk -F ":" '{print $1}')
+#
+## wozu mehrere starten -> siehe cherkasova
+#
+#filter_virt=
+#for i in ${filter_autostart}; do
+# filter_temp=
+# filter_temp=$(cat $i | grep -i "virtualmachine param.*${vmgrid_virt}" | \
+# wc -l)
+# if [ ${filter_temp} -eq 1 ]; then
+# filter_virt="${filter_virt} $i"
+# fi
+#done
+#
+## remove already started ${vmgrid_startvm}
+#filter_virt=$(echo $filter_virt | \
+# sed -e "s,${vmgrid_xmlpath}/${vmgrid_startvm%.xml}.xml,,g")
+#
+#sort_virt=$(grep 'priority param' ${vmgrid_xmlpath}/*.xml | sort -n | \
+# awk -F ":" '{print $1}')
+#
+#for i in ${sort_virt}; do
+# j=$(echo $filter_virt | grep $i | wc -l)
+# if [ $j -eq 1 ]; then
+# filter_virt=$(echo $filter_virt | sed -e "s,$i,,g")
+# vmgrid ${i#${vmgrid_xmlpath}/}
+# fi
+#done
+#
+## start vms /wo priority
+#for i in ${filter_virt}; do
+# vmgrid ${i#${vmgrid_xmlpath}/}
+#done
+#
+#exit 0
diff --git a/os-plugins/plugins/vmgrid/files/xmlfilter.sh b/os-plugins/plugins/vmgrid/files/xmlfilter.sh
new file mode 100755
index 00000000..5196992c
--- /dev/null
+++ b/os-plugins/plugins/vmgrid/files/xmlfilter.sh
@@ -0,0 +1,50 @@
+#!/bin/bash
+# -----------------------------------------------------------------------------
+# Copyright (c) 2007..2009 - RZ Uni FR
+# Copyright (c) 2007..2009 - OpenSLX GmbH
+#
+# This program 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 suggestions, praise, or complaints to feedback@openslx.org
+#
+# General information about OpenSLX can be found at http://openslx.org/
+# -----------------------------------------------------------------------------
+# xmlfilter.sh
+# - This script is invoked by the vmchooser tool. It simply filters xml-
+# files (taking the path to these files in $1). You might modify it in any
+# way to match your needs, e.g. ask some database instead. You can re-
+# implement it in any other programming language too. You simply have to
+# return a list of proper xml files to be interpreted by the vmchooser
+# binary). Please check for vmchooser.sh too ...
+# -----------------------------------------------------------------------------
+
+# This script .
+#
+# currently:
+# - filter for slxgrp (which comes from /etc/machine-setup)
+#
+
+# include default directories
+. /etc/opt/openslx/openslx.conf
+
+if [ -f ${OPENSLX_DEFAULT_CONFDIR}/plugins/vmchooser/vmchooser.conf ]; then
+ . ${OPENSLX_DEFAULT_CONFDIR}/plugins/vmchooser/vmchooser.conf
+fi
+
+for FILE in $1/*.xml; do
+ # filter all xmls which aren't set active
+ if [ $(grep "<active param=.*true.*" ${FILE} | wc -l) -eq 1 ]; then
+ if [ -n ${vmchooser_env} ]; then
+ # filter all xmls with pool-param not equal to vmchooser::env
+ if [ $(grep "<pools param=\"${vmchooser_env}\"" ${FILE} | wc -l) -eq 1 ];\
+ then
+ echo ${FILE};
+ fi
+ else
+ # if there is no pool set, just take all available xmls
+ echo -e ${active}
+ fi
+ fi
+done
diff --git a/os-plugins/plugins/xen/init-hooks/20-nw-bridge-config/bridge.sh b/os-plugins/plugins/xen/init-hooks/20-nw-bridge-config/bridge.sh
new file mode 100755
index 00000000..6aabe8ad
--- /dev/null
+++ b/os-plugins/plugins/xen/init-hooks/20-nw-bridge-config/bridge.sh
@@ -0,0 +1,30 @@
+#!/bin/ash
+# Copyright (c) 2009 - OpenSLX GmbH
+#
+# This program 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
+#
+# Init hook to create a bridge on the active network interface
+# (should be kept identical to the files of virtualbox and qemukvm plugins)
+#############################################################################
+
+local bridge=br0
+local brnwif=${nwif}
+local nwifmac=${macaddr}
+
+# bridge 0 already defined or some other problem
+brctl addbr ${bridge} || exit 0
+brctl stp ${bridge} 0
+brctl setfd ${bridge} 0.000000000001
+ip link set addr ${nwifmac} ${bridge}
+ip link set dev ${nwif} up
+brctl addif ${bridge} ${nwif}
+
+# fixme: sending back the variable to init does not work properly at the
+# moment
+nwif=${bridge}