diff options
| author | Dirk | 2013-12-13 20:52:00 +0100 |
|---|---|---|
| committer | Dirk | 2013-12-13 20:52:00 +0100 |
| commit | efd86cc8b5b138e4076bf1657ea888dc52e62901 (patch) | |
| tree | dde241d9c0041f10584415e97c6b6f326e03cd3f /remote/modules/vbox | |
| parent | Merge branch 'master' of git.openslx.org:openslx-ng/tm-scripts (diff) | |
| download | tm-scripts-efd86cc8b5b138e4076bf1657ea888dc52e62901.tar.gz tm-scripts-efd86cc8b5b138e4076bf1657ea888dc52e62901.tar.xz tm-scripts-efd86cc8b5b138e4076bf1657ea888dc52e62901.zip | |
Heavily reworked the networking for the various virtual machines:
There will be three types of network interfaces for virtual machines available
all will be configured for every type of virtualization tool
a) br0 is the direct host bridge into the local LAN (br0 already exists)
vmnet0 for VMware
vboxnet0 for VirtualBox
kvmnet0* for Qemu/KVM
b) nat1 is an internal bridge which "NATes" into the local LAN (with DHCP)
vmnet1 for VMware
vboxnet1 for VirtualBox
kvmnet1* for Qemu/KVM
c) vsw2 is an internal host bridge to connect software defined LANs to
vmnet2 for VMware
vboxnet2 for VirtualBox
kvmnet2* for Qemu/KVM
Diffstat (limited to 'remote/modules/vbox')
| -rwxr-xr-x | remote/modules/vbox/data/opt/openslx/etc/virtualbox/run-virt.include | 642 | ||||
| -rwxr-xr-x | remote/modules/vbox/data/opt/openslx/scripts/systemd-vbox_env | 291 | ||||
| -rw-r--r-- | remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/empty-diff.vdi.gz | bin | 0 -> 285 bytes | |||
| -rw-r--r-- | remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/machine.include | 124 | ||||
| -rwxr-xr-x | remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/run-virt.include | 430 | ||||
| -rw-r--r-- | remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/rwimg.vdi.gz | bin | 0 -> 268 bytes | |||
| -rw-r--r-- | remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/virtualbox.conf (renamed from remote/modules/vbox/data/opt/openslx/etc/virtualbox/virtualbox.conf) | 0 | ||||
| -rw-r--r-- | remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/virtualbox.include | 57 |
8 files changed, 635 insertions, 909 deletions
diff --git a/remote/modules/vbox/data/opt/openslx/etc/virtualbox/run-virt.include b/remote/modules/vbox/data/opt/openslx/etc/virtualbox/run-virt.include deleted file mode 100755 index b755133f..00000000 --- a/remote/modules/vbox/data/opt/openslx/etc/virtualbox/run-virt.include +++ /dev/null @@ -1,642 +0,0 @@ -# run-virt.include -# ----------------------------------------------------------------------------- -# Copyright (c) 2009..2012 - RZ Uni Freiburg -# Copyright (c) 2009..2013 - 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/ -# ----------------------------------------------------------------------------- -# run-virt.include -# - component for vmware/player of the vmchooser plugin run-virt.sh -################################################################################ - -# configuration writer functions -################################################################################ - -function clean_string () -{ - if [ "$#" -ge 1 ]; then - echo "$@" | tr '[A-Z]' '[a-z]' | tr -d '\t _./' - else - cat - | tr '[A-Z]' '[a-z]' | tr -d '\t _./' - fi -} - -vmostype=$(clean_string "$vmostype") - -runvmwareconfheader () -{ - echo "# This configuration file was generated by $0" > "$conffile" - - MAXMEM="9999999" - MAXCORES="256" - - # check for the ostype - # 1) memory limits - case "$vmostype" in - win31*|windows31*) - MAXMEM="32" - vmostype="win31" - ;; - winnt*|windowsnt*) - MAXMEM="1000" - vmostype="winnt" - ;; - win95*|windows95*) - MAXMEM="96" - vmostype="win95" - ;; - win98*|windows98*) - MAXMEM="384" - vmostype="win98" - ;; - winme*|windowsme*) - MAXMEM="384" - vmostype="winme" - ;; - win2000|windows2000|win2000pro*) - MAXMEM="4000" - vmostype="win2000pro" - ;; - win2000srv*|windows2000srv*|win2000serv*|windows2000serv*) - MAXMEM="4000" - vmostype="win2000serv" - ;; - win2000adv*|windows2000adv*|win2000dat*|windows2000dat*) - MAXMEM="8000" - vmostype="win2000advserv" - ;; - winnet*64|win*2003*64|windowsnet*64) - MAXMEM="8000" - vmostype="winnetstandard-64" - ;; - winnet*|win*2003*|windowsnet*) - MAXMEM="4000" - vmostype="winnetstandard" - ;; - winxphome*|windowsxphome*) - MAXMEM="4000" - vmostype="winxphome" - ;; - winxp*64|windowsxp*64) - MAXMEM="8000" - vmostype="winxppro-64" - ;; - winxp*|windowsxp*) - MAXMEM="4000" - vmostype="winxppro" - ;; - winvista*64|windowsvista*64) - MAXMEM="16000" - vmostype="winvista-64" - ;; - winvista*|windowsvista*) - MAXMEM="8000" - vmostype="winvista" - ;; - win7*64|windows7*64) - MAXMEM="32000" - vmostype="windows7-64" - ;; - win7*|windows7*) - MAXMEM="8000" - vmostype="windows7" - ;; - win*64) - MAXMEM="16000" - ;; - win*) - MAXMEM="8000" - ;; - dos|msdos*|ms-dos*) - MAXMEM="128" - vmostype="dos" - ;; - *64) - MAXMEM="123456" - ;; - *) - MAXMEM="8000" - ;; - esac - - # 2) other hardware + capabilities - shfolders="FALSE" - case "$vmostype" in - win31) - MAXCORES="1" - sound="sb16" - ;; - winnt) - MAXCORES="2" - sound="sb16" - ;; - win95|win98|winme) - MAXCORES="1" - ;; - win2000pro) # Don't know if Win 2000 supports shared folders, disabled to be safe - MAXCORES="2" - ;; - win2000serv) - MAXCORES="4" - ;; - win2000advserv) - MAXCORES="8" - ;; - winxphome) - MAXCORES="1" - shfolders="TRUE" - ;; - winxp*|winvista*|windows7*) - shfolders="TRUE" - ;; - winnet*) - shfolders="TRUE" - ;; - linux*|ubuntu*|suse*|debian*) - shfolders="TRUE" - ;; - macos*64) - MAXCORES="2" - vmostype="freebsd-64" - ;; - macos*) - MAXCORES="1" - vmostype="freebsd" - ;; - beos*) - vmostype="other" - ;; - # Unknown guestOS setting in .xml - use conservative defaults - *64) - vmostype="other-64" - ;; - *) - vmostype="other" - ;; - esac - - svga_autodetect="TRUE" - - real_core_count="$cpu_cores" - [ "$cpu_cores" -gt "$MAXCORES" ] && cpu_cores="$MAXCORES" - # It currently makes no sense to set the virtual number of cores - # to a different value than the virtual number of cores per virtual CPU. - cores_per_socket="$cpu_cores" - - if [ "x$shfolders" != "xFALSE" ]; then - ENABLE_SHARE='sharedFolder.option = "alwaysEnabled"' - else - ENABLE_SHARE='' - fi - - [ "$mem" -ge "$MAXMEM" ] && mem="$MAXMEM" - [ "$hwver" -lt "7" -a "$mem" -gt "3500" ] && mem="3500" - - cap3d="WHAT IS THIS VAR USED FOR?" # helper var for loging output - - cat >> "$conffile" <<HEREEND -.encoding = "UTF-8" -config.version = "8" - -# general hardware (ehci, 3d accel) -ehci.present = "TRUE" -$FORCE3D -mks.enable3d = "$enable3d" - -monitor.virtual_mmu = "automatic" -monitor.virtual_exec = "automatic" -floppy1.clientDevice = "FALSE" -floppy1.readonly = "TRUE" - -# id -virtualHW.version = "$hwver" -displayName = "$displayname" -guestOS = "$vmostype" - -# CPU/MEM -numvcpus = "$cpu_cores" -cpuid.coresPerSocket = "$cores_per_socket" -maxvcpus = "$real_core_count" -memsize = "$mem" -MemAllowAutoScaleDown = "FALSE" -MemTrimRate = "-1" - -# ide-disks -ide0:0.present = "$ide" -ide0:0.fileName = "$vm_diskfile" -## Edited for persistent mode. -ide0:0.mode = "independent-${diskmode}" -## -ide1:0.present = "$cdrom0" -ide1:0.autodetect = "TRUE" -ide1:0.fileName = "auto detect" -ide1:0.deviceType = "cdrom-raw" -ide1:1.present = "$cdrom1" -ide1:1.autodetect = "TRUE" -ide1:1.fileName = "auto detect" -ide1:1.deviceType = "cdrom-raw" - -# scsi-disks -scsi0.present = "$scsi" -scsi0:0.present = "$scsi" -scsi0:0.fileName = "$vm_diskfile" -scsi0.virtualDev = "$hddrv" -## Edited for persistent mode. -scsi0:0.mode = "independent-${diskmode}"$stateFileConfiguration -## - -# floppies -floppy0.present = "$floppy0" -floppy0.startConnected = "FALSE" -floppy0.autodetect = "TRUE" -floppy0.fileName = "auto detect" - -# we need floppy b: for our windows client configuration -floppy1.present = "$floppy1" -floppy1.startConnected = "TRUE" -floppy1.fileType = "file" -floppy1.fileName = "$floppy1name" - -# nics -ethernet0.present = "TRUE" -ethernet0.addressType = "static" -$network_virtualDev -ethernet0.connectionType = "$network_kind" -#ethernet1.connectionType = "custom" -#ethernet1.vnet = "/dev/vmnet2" -ethernet0.address = "00:50:56:$macaddrsuffix" -ethernet0.wakeOnPcktRcv = "FALSE" - -# sound -sound.present = "TRUE" -sound.fileName = "-1" -sound.autodetect = "TRUE" -sound.virtualdev = "$sound" - -# svga -svga.autodetect = "$svga_autodetect" - -# usb -usb.present = "TRUE" -usb.generic.autoconnect = "TRUE" - -# pci configuration -usb.pciSlotNumber = "16" -ethernet0.pciSlotNumber = "17" -sound.pciSlotNumber = "18" -ehci.pciSlotNumber = "19" -scsi0.pciSlotNumber = "20" - -# shared folders -$ENABLE_SHARE -sharedFolder0.present = "$shfolders" -sharedFolder0.enabled = "$shfolders" -sharedFolder0.expiration = "never" -sharedFolder0.guestName = "$sharename" -sharedFolder0.hostPath = "$sharepath" -sharedFolder0.readAccess = "TRUE" -sharedFolder0.writeAccess = "TRUE" -sharedFolder.maxNum = "1" - -# dirs/configs -tmpDirectory = "$redodir" -redoLogDir = "$redodir" -mainMem.useNamedFile = "TRUE" -snapshot.disabled = "TRUE" -tools.syncTime = "TRUE" -isolation.tools.hgfs.disable = "FALSE" -hgfs.mapRootShare = "TRUE" -isolation.tools.dnd.disable = "FALSE" -isolation.tools.copy.enable = "TRUE" -isolation.tools.paste.enabled = "TRUE" - -# serial port -serial0.present = "$serial" -$serialdev - -# parallel port -parallel0.present = "$parallel" -parallel0.bidirectional = "$paralbidi" -$paraldev -HEREEND - - # set the appropriate permissions for the vmware config file - chmod u+rwx ${conffile} >/dev/null 2>&1 -} - -preferencesheader () -{ - cat > "$vmhome/preferences" <<HEREEND -.encoding = "UTF-8" -# This configuration file was generated by $0 - -# updates/tips -webUpdate.enabled = "FALSE" -pref.downloadPermission = "deny" -pref.vmplayer.downloadPermission = "deny" -pref.vmplayer.webUpdateOnStartup = "FALSE" -pref.tip.startup = "FALSE" -hints.hideAll = "TRUE" -hint.vmui.showAllUSBDevs = "FALSE" - -# configs -prefvmx.defaultVMPath = "$vmhome" -prefvmx.mru.config = "$conffile:" - -# hot keys -pref.hotkey.control = "true" -pref.hotkey.alt = "true" -pref.hotkey.shift = "true" -pref.hotkey.gui = "true" -gui.restricted = "true" - -# fullscreen/mouse/keyboard -pref.fullscreen.toolbarPixels = "0" -pref.vmplayer.fullscreen.autohide = "TRUE" -pref.grabOnMouseClick = "TRUE" -pref.grabOnKeyPress = "FALSE" -pref.motionGrab = "TRUE" -pref.motionUngrab = "TRUE" -pref.hideCursorOnUngrab = "TRUE" -pref.autoFit = "TRUE" -pref.autoFitFullScreen = "fitGuestToHost" -pref.vmplayer.exit.vmAction = "poweroff" -pref.vmplayer.confirmOnExit = "TRUE" - -# shared folders -pref.enableAllSharedFolders = "TRUE" - -# eula - -HEREEND - - # different eula parameters from Workstation 9+/ Player 5+ - case "$vmversion" in - 3.*|4.*|7.*|8.*) - cat >> "$vmhome/preferences" <<HEREEND -pref.eula.size = "2" -pref.eula.0.appName = "VMware Player" -pref.eula.0.buildNumber = "$vmbuild" -pref.eula.1.appName = "VMware Workstation" -pref.eula.1.buildNumber = "$vmbuild" -HEREEND - ;; - 5.*|9.*) - # code - cat >> "$vmhome/preferences" <<HEREEND -pref.eula.count = "2" -pref.eula0.product = "VMware Player" -pref.eula0.build = "$vmbuild" -pref.eula1.product = "VMware Workstation" -pref.eula1.build = "$vmbuild" -HEREEND - ;; - esac - -} - - -# declaration of default variables -################################################################################ - - -[ "$mem" -gt 3800 -a "$(uname -m)" != "x86_64" ] && mem=3800 - -# VM-ID static (0D), remove if changed to 00 -VM_ID="0D" -# should be dynamic -if [ "x$(which bc)" != "x" ]; then - VM_ID=$(echo "obase=16; $$" | bc) - VM_ID=$(expr substr $VM_ID $(expr ${#VM_ID} - 1) 2) -else - VM_ID=$[ $$ % 100 ] -fi -# temporary disk space for logs, etc... -redodir=/tmp/vmware/${USER}.$$ -# dir for configs and vmem file -confdir=/tmp/vmware/${USER}.$$ -# configfile -conffile="${confdir}/run-vmware.conf" -# diskfile -diskfile="${vmpath}" -# users vmware config folder -vmhome="${HOME}/.vmware" - -# get several version infos for vmware/player -. /opt/openslx/etc/vmware/vmware.conf -vmbuild=$buildversion -vmversion=$version - -# VMware start options -# "-X": start in fullscreen -vmopt="-X" - - -# hardware checks -################################################################################ - -# use different network card (default e1000, vlance, vmxnet) -if [ -n "${network_card}" ]; then - network_virtualDev="ethernet0.virtualDev = \"${network_card}\"" -else - network_virtualDev='# using default virtualDev for ethernet0' -fi - -# set standard sound card, overwrite depending on OS (options sb16, es1371, hdaudio) -sound="es1371" - -# check for 3D configuration setting -case "$(clean_string "$enable3d")" in - true|yes) - enable3d="TRUE" - ;; - *) - enable3d="FALSE" - ;; -esac - -# check for whitelisted HW-3D -. /opt/openslx/config -FORCE3D="" -if [ -n "$SLX_VMWARE_3D" ]; then - FORCE3D='mks.gl.allowBlacklistedDrivers = "TRUE"' -fi - -# serial/parallel port defined (e.g. "ttyS0, lp0" or "autodetect") -case "$serial" in - tty*) - if [ -e "/dev/$serial" ]; then - serialdev="serial0.filename = \"/dev/${serial}\"" - serial="TRUE" - else - serialdev="# no serial port configured" - serial="FALSE" - fi - ;; - auto*) - serialdev="serial0.autodetect = \"TRUE\"" - serial="TRUE" - ;; - *) - serialdev="# no serial port configured" - serial="FALSE" - ;; -esac - -case "$parallel" in - lp*|parport*) - if [ -e "/dev/$parallel" ]; then - paraldev="parallel0.filename = \"/dev/${parallel}\"" - paralbidi="TRUE" - parallel="TRUE" - else - paraldev="# no parallel port configured" - paralbidi="FALSE" - parallel="FALSE" - fi - ;; - auto*) - paraldev="parallel0.autodetect = \"TRUE\"" - paralbidi="TRUE" - parallel="TRUE" - ;; - *) - paraldev="# no parallel port configured" - paralbidi="FALSE" - parallel="FALSE" - ;; -esac - -# check if ide/scsi and hwver of image -# read only the first 30 lines to be sure -imghead=$(head -n 30 "${diskfile}") -## Added to handle persistent snapshots. -if [[ "$originalVMDKFilePath" ]]; then - echo "Select \"${originalVMDKFilePath}\" as information base for \"${diskfile}\"." - imghead=$(head -n 30 "$originalVMDKFilePath") && \ - # Support suspend mode. - stateFilePath="$(readlink -f "$(dirname "$diskfile")/"*.vmss)" && \ - if [ -f "$stateFilePath" ]; then - echo "Found state file \"$stateFilePath\"." && \ - stateFileConfiguration=" -checkpoint.vmState = \"$stateFilePath\"" - fi - POSTRUN="stateFilePath=\"\$(readlink -f \"${confdir}/\"*.vmss)\" && memoryFilePath=\"\$(readlink -f \"${confdir}/\"*.vmem)\" && [ -f \"\$stateFilePath\" ] && echo \"Saving state and memory file \\\"\$stateFilePath\\\" and \\\"\$memoryFilePath\\\".\" && mv -f \"\$stateFilePath\" \"$(dirname "$diskfile")/\" && mv -f \"\$memoryFilePath\" \"$(dirname "$diskfile")/\"" -fi -## -hddrv=$(echo "${imghead}" | grep -m1 -ia "ddb.adapterType" | awk -F '"' '{print $2}') -hwver=$(echo "${imghead}" | grep -m1 -ia "ddb.virtualHWVersion" | awk -F '"' '{print $2}') -case "${hddrv}" in - ide) - ide="TRUE" - scsi="FALSE" - ;; - lsilogic|buslogic) - ide="FALSE" - scsi="TRUE" - ;; -esac - -# write configuration files -################################################################################ - -# create vmware directories -mkdir -p "$redodir" >/dev/null 2>&1 -mkdir -p "$confdir" >/dev/null 2>&1 -mkdir -p "$vmhome/dndlogs" >/dev/null 2>&1 -touch "$vmhome/dndlogs/dndlog.conf" >/dev/null 2>&1 - -# create preferences -preferencesheader - -# create VMware startup file -runvmwareconfheader - -# link to conffile if confdir != redodir -ln -s "$conffile" "$redodir/run-vmware.conf" >/dev/null 2>&1 - -# sync is needed to ensure that data is really written to virtual disk -sync - -# own nvram. We need it for floppy drive b, default nvram has just drive a -# TODO: optimize, currently kinda inefficient, too much copys, but we -# don't know which one is installed... -cp "/opt/openslx/etc/vmware/nvram" "$confdir/nvram" 2>/dev/null - - -# logging and stdout -################################################################################ - -# log script information -writelog "# File created by $0 (VMversion ${vmversion})\n# on $(date)\n" -## Edited for persistent mode. -writelog "Starting with ${diskmode} mode ...\n" -## - -# write all results to logfile -# log disksetup -writelog "Directories:" -writelog "\tConfdir:\t${confdir}" -writelog "\tConffile:\t${conffile}" -writelog "\tRedodir:\t${redodir}" -writelog "\tVMhome:\t\t${vmhome}" -writelog "\t/tmp info: \ -$(grep "/tmp " /proc/mounts) $(df -h | grep " /tmp$" | awk '{print $2}')" -# hw setup -writelog "Hardware:" -writelog "\tMAC:\t\t00:50:56:${VM_ID}:${machostpart}" -if [ -n "${network_card}" ]; then - writelog "\tNet Adaptor:\t${network_card}" -fi -writelog "\tMem:\t\t${mem} MB" -# echo nur wenn hostmem gesetzt -[ -n "${hostmem}" ] && writelog "\tHostmem:\t${hostmem} MB" -writelog "\tMax. res.:\t${xres}x${yres}" -writelog "\tCD-ROM1:\t${cdrom0}" -writelog "\tCD-ROM2:\t${cdrom1}" -writelog "\tFloppy_A:\t${floppy0}" -if [ "${serial}" = "TRUE" ]; then - writelog "\tSerial Port:\t${serialdev}" -fi -if [ "${parallel}" = "TRUE" ]; then - writelog "\tParallel Port:\t${paraldev}" -fi -# image -writelog "Diskimage:" -writelog "\tDiskfile:\t${diskfile}" -writelog "\tDisktype:\t${hddrv}" -writelog "\tHWVersion:\t${hwver}" -writelog "\tVMostype:\t${vmostype}" -# misc -writelog "Misc:" -writelog "\tDisplayname:\t${displayname}" -if [ "${cap3d}" = "TRUE" -a "${enable3d}" = "TRUE" ]; then - writelog "\t3D Graphics:\tenabled" -fi -# empty line at end -writelog "" - - -# finally set env for run-virt.sh -################################################################################ - -# configure and start samba service to provide user's home directory -#if [ -f /usr/sbin/smbd ] ; then -# sudo /opt/openslx/bin/sed -i /etc/vmware/smb.conf -e "s,USER,$USER," -# sudo /usr/sbin/nmbd -s /etc/vmware/smb.conf -# sudo /usr/sbin/smbd -s /etc/vmware/smb.conf -#fi - -# For debugging -cp "$conffile" "/tmp/vmware-last-config" - -# using the modified version of the wrapper script -VIRTCMD="/opt/openslx/bin/vmplayer" -VIRTCMDOPTS="${vmopt} ${conffile}" -RMDIRS="${redodir} ${conffile}" diff --git a/remote/modules/vbox/data/opt/openslx/scripts/systemd-vbox_env b/remote/modules/vbox/data/opt/openslx/scripts/systemd-vbox_env index 8bdfc515..a69719ac 100755 --- a/remote/modules/vbox/data/opt/openslx/scripts/systemd-vbox_env +++ b/remote/modules/vbox/data/opt/openslx/scripts/systemd-vbox_env @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/ash # ----------------------------------------------------------------------------- # Copyright (c) 2007..2013 - RZ Uni FR # Copyright (c) 2007..2013 - OpenSLX GmbH @@ -19,271 +19,28 @@ export PATH="$PATH":/opt/openslx/bin:/opt/openslx/sbin:/opt/openslx/usr/bin:/opt VBOX_CONF_DIR=/opt/openslx/etc/vbox VBOXMANAGE=$(which vboxmanage) - -for wait in 1 1 2 2 3 end; do - grep '^SLX_DNS' /opt/openslx/config > /dev/null && break - [ "$wait" == "end" ] && echo "No DNS config found, using google dns" && break - echo "Waiting for DNS config.." - sleep "$wait" +# load required Vbox modules +for module in vboxdrv.ko vboxnetadp.ko vboxnetflt.ko vboxpci.ko ; do + insmod /lib/modules/vbox/${module} || slxlog "vbox-systemd" "Loading of ${module} failed." done -#source config file -. /opt/openslx/config -# . ${VMWARE_CONF_DIR}/vmware.conf -. ${VBOX_CONF_DIR}/vbox.conf - -vm_dhcpd() { - - #from plugins/vmware/init-hooks/60-have-servconfig/vm-dhcpd.sh - - # read the DNS configuration and if available set WPAD configuration - [ -z "${SLX_DNS}" ] && SLX_DNS="8.8.8.8" - [ -n "${wpad}" ] && wpad_config="option wpad ${wpad}" - - # configuring dhcpd stub for virtual networks -cat > ${VMWARE_CONF_DIR}/udhcpd.conf << EOF -# general udhcpd configuration file for virtual machines written by $0 - -# start and end of the IP lease block -start CNETWORK.20 -end CNETWORK.100 - -# interface that udhcpd will use -interface NWIF - -# how long an offered address is reserved (leased) in seconds -offer_time 6000 - -# location of the leases file -lease_file LEASEFILE - -# location of the pid file -pidfile PIDFILE - -option dns ${SLX_DNS} -option subnet 255.255.255.0 -option router CNETWORK.1 -option wins CNETWORK.10 -option domain virtual.site ${domain_name} -${wpad_config} - -# additional options known to udhcpd -#subnet #timezone -#router #timesvr -#namesvr #dns -#logsvr #cookiesvr -#lprsvr #bootsize -#domain #swapsvr -#rootpath #ipttl -#mtu #broadcast -#wins #lease -#ntpsrv #tftp -#bootfile #wpad -EOF - -} - -setup_network() { - #from plugins/vmware/XX_vmware.sh - - mkdir -p /tmp/virt/vmware -m 1777 - mkdir -p /dev/shm/vmware -m 1777 - mkdir -p /var/run/vmware -m 1777 - mkdir -p /etc/vmware/udhcpd - - # variable might contain ",NAT" which is to be taken off - if [ -n "$vmnet1" ] ; then - local vmip=${vmnet1%/*} # x.x.x.x/yy => 'x.x.x.x'"> - local vmsub=$(echo $vmip |sed 's,\(.*\)\..*,\1,') # x.x.x.x => x.x.x - # setting up the udhcpd configuration - sed -e "s,NWIF,vmnet1,;s,/misc/,/vmware/," \ - -e "s,CNETWORK,$vmsub,;s,PIDFILE,/var/run/vmware/udhcpd-vmnet1.pid," \ - -e "s,LEASEFILE,/var/run/vmware/udhcpd-vmnet1.leases," \ - ${VMWARE_CONF_DIR}/udhcpd.conf >/etc/vmware/udhcpd/udhcpd-vmnet1.conf - # setting the base samba configuration if available - if [ -f /etc/openslx/vmchooser/smb.conf \ - -a -f /usr/sbin/smbd ] ; then - sed -e "s#NWIF#vmnet1,vmnet8#;s,PIDDIR,/var/run/vmware," \ - ${VMCHOOSER_CONF_DIR}/smb.conf \ - >/etc/vmware/smb.conf - fi - fi - - # vmware nat interface configuration - if [ -n "$vmnet8" ] ; then - local vmnet8ip=${vmnet8%/*} - local vmpx=${vmnet8#*/} - local vmsub=$(echo $vmnet8ip |sed 's,\(.*\)\..*,\1,') # x.x.x.x => x.x.x"> - # vmip is user for vmnet8 device - # vmnet is user for config files nat.conf/dhcp - local vmip="${vmsub}.1" - local vmnet="${vmsub}.2" - # setting up the udhcpd configuration - sed -e "s,NWIF,vmnet8,;s,/misc/,/vmware/," \ - -e "s,CNETWORK,$vmsub,;s,PIDFILE,/var/run/vmware/udhcpd-vmnet8.pid," \ - -e "s,LEASEFILE,/var/run/vmware/udhcpd-vmnet8.leases," \ - ${VMWARE_CONF_DIR}/udhcpd.conf >/etc/vmware/udhcpd/udhcpd-vmnet8.conf - # might be not needed any more ... - echo -e "# Linux NAT configuration file" \ - > /etc/vmware/nat.conf - echo -e "[host]" \ - >> /etc/vmware/nat.conf - echo -e "ip = $vmnet/$vmpx" \ - >> /etc/vmware/nat.conf - echo -e "device = /dev/vmnet8" \ - >> /etc/vmware/nat.conf - echo -e "activeFTP = 1" \ - >> /etc/vmware/nat.conf - echo -e "[udp]" \ - >> /etc/vmware/nat.conf - echo -e "timeout = 60" \ - >> /etc/vmware/nat.conf - echo -e "[incomingtcp]" \ - >> /etc/vmware/nat.conf - echo -e "[incomingudp]" \ - >> /etc/vmware/nat.conf - echo "00:50:56:F1:30:50" > /etc/vmware/vmnet-natd-8.mac - fi - - ############################################################################ - # vmware stuff second part: setting up the environment - # make udhcpd more silent - touch /var/run/vmware/udhcpd-vmnet1.leases \ - /var/run/vmware/udhcpd-vmnet8.leases - - # create the needed devices which effects all vmware options - # they are not created automatically via module load - for i in "/dev/vmnet0 c 119 0" "/dev/vmnet1 c 119 1" \ - "/dev/vmnet8 c 119 8" "/dev/vmmon c 10 165"; do - mknod $i - done - - chmod 0700 /dev/vmnet* -} - -adapt_tmpfs() { - # from plugins/vmware/init-hooks/80-after-plugins/adapt-tmpfs.sh - # Init hook to adapt the tmpfs size for VMware/Player - # (should be kept identical to the files of virtualbox plugin) - ############################################################################# - - # adapt tmpfs size (overbook) - case $(grep tmpfs /proc/mounts) in - */tmp*) - mount -o remount,size=175% /tmp - ;; - */uniontmp*) - mount -o remount,size=175% /uniontmp - ;; - esac -} - -#from /etc/init.d/vmware-env - -#functions: helper functions -tempdir () { - # Create a special tempfs directory - mkdir -m 1777 -p /tmp/vmware - # Don't mount special tempfs, when using local harddrive for /tmp - [ ! -n "$(cat /proc/mounts |grep ' /tmp '|grep '/dev/sd')" ] \ - && mount -t tmpfs -o size=180%,mode=1777 tmpfs /tmp/vmware -} - -load_modules () { - # VMplayer common stuff - insmod /lib/modules/vbox/vboxdrv.ko - insmod /lib/modules/vbox/vboxnetadp.ko - insmod /lib/modules/vbox/vboxnetflt.ko - insmod /lib/modules/vbox/vboxpci.ko -} - -unload_modules () { - rmmod vboxpci vboxnetflt vboxnetadp vboxdrv -} - -vmnetif () { -# let point the path directly to the directory where the binary lives -location="/usr/bin" -if [ -n "$vmnet0" ] ; then - # the path might be directly point to the plugin dir - $location/vmnet-bridge -d /var/run/vmnet-bridge-0.pid -n 0 -fi -if [ -n "$vmnet1" ] ; then - $location/vmnet-netifup -d /var/run/vmnet-netifup-vmnet1.pid \ - /dev/vmnet1 vmnet1 - ip addr add $vmnet1 dev vmnet1 - ip link set vmnet1 up - if [ -n "$vmnet1nat" ] ; then - echo "1" >/proc/sys/net/ipv4/conf/vmnet1/forwarding - echo "1" >/proc/sys/net/ipv4/conf/br0/forwarding 2>/dev/null - fi - /opt/openslx/usr/sbin/udhcpd \ - -S /etc/vmware/udhcpd/udhcpd-vmnet1.conf -fi -if [ -n "$vmnet8" ] ; then - $location/vmnet-netifup -d /var/run/vmnet-netifup-vmnet8.pid \ - /dev/vmnet8 vmnet8 - ip addr add $vmnet8 dev vmnet8 - ip link set vmnet8 up - echo "1" >/proc/sys/net/ipv4/conf/vmnet8/forwarding - echo "1" >/proc/sys/net/ipv4/conf/br0/forwarding 2>/dev/null - iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE - # /etc/vmware/vmnet-natd-8.mac simply contains a mac like 00:50:56:F1:30:50 - $location/vmnet-natd -d /var/run/vmnet-natd-8.pid \ - -m /etc/vmware/vmnet-natd-8.mac -c /etc/vmware/nat.conf # or logfile - /opt/openslx/usr/sbin/udhcpd \ - -S /etc/vmware/udhcpd/udhcpd-vmnet8.conf -fi - -} - -vmblock () { -# let point the path directly to the directory where the binary lives - /usr/bin/vmware-usbarbitrator -} - - - -case "$1" in - start) - #start: defines start function for initscript - # vm_dhcpd - # setup_network - # adapt_tmpfs - # hack to access the first serial/parallel port - # chmod a+rw /dev/ttyS0 - # chmod a+rw /dev/parport0 - # tempdir - load_modules - # vmnetif - # vmblock - ;; - stop) - # stop: defines stop function for initscript - # killall vmnet-netifup vmnet-natd vmnet-bridge vmware vmplayer \ - # vmware-tray vmnet-dhcpd - # might take a while until all services are shut down - # sleep 1 - # umount -l /tmp/vmware 2>/dev/null - unload_modules - ;; - restart) - #restart: defines restart function for initscript - $0 stop && $0 start - ;; - - status) - #status: defines status function for initscript - echo "Listing loaded kernel modules:" - lsmod | grep vbox - echo "Running VMs:" - $VBOXMANAGE list vms - ;; - *) - #usage: defines usage function for initscript - ## print out usage - echo "Usage: $0 {start, stop, restart, status}" >&2 - exit 1 - ;; -esac - +# unload modules if proper systemd shutdown is provided +#unload_modules () { +# rmmod vboxpci vboxnetflt vboxnetadp vboxdrv +#} + +mknod -m 0660 /dev/vboxdrv c 10 59 +chown root:vboxusers /dev/vboxdrv + + +# pretty dumb you can just create host-only interfaces, but not assign a specific +# name/number +vboxmanage hostonlyif create +ip link set dev vboxnet0 up +brctl addif br0 vboxnet0 +vboxmanage hostonlyif create +ip link set dev vboxnet1 up +brctl addif nat1 vboxnet1 +vboxmanage hostonlyif create +ip link set dev vboxnet2 up +brctl addif vsw2 vboxnet2 diff --git a/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/empty-diff.vdi.gz b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/empty-diff.vdi.gz Binary files differnew file mode 100644 index 00000000..c6abbd57 --- /dev/null +++ b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/empty-diff.vdi.gz diff --git a/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/machine.include b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/machine.include new file mode 100644 index 00000000..d1c77f02 --- /dev/null +++ b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/machine.include @@ -0,0 +1,124 @@ +# ----------------------------------------------------------------------------- +# Copyright (c) 2010..2012 - 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 file (machine template) for run-virt.include of the OpenSLX virtual- +# box plugin +cat << EOF > "${machconfig}" +<?xml version="1.0"?> +<VirtualBox xmlns="http://www.innotek.de/VirtualBox-settings" version="1.12-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/MiniToolBarAutoHide" value="on"/> + <ExtraDataItem name="GUI/MiniToolBarAlignment" value="top"/> + <ExtraDataItem name="GUI/ShowMiniToolBar" value="yes"/> + <ExtraDataItem name="GUI/SaveMountedAtRuntime" value="yes"/> + <ExtraDataItem name="GUI/Seamless" value="off"/> + </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> + <!-- check for xml configured enable3d parameter --> + <Display VRAMSize="${vram}" monitorCount="1" accelerate3D="${enable3d}" accelerate2DVideo="${enable2d}"/> + <!-- 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="${vdemacaddr}" cable="true" speed="0" type="${vb_network_card}"> + <GenericInterface driver="VDE"> + <Properties name="network" value="/tmp/vde-switch"/> + </GenericInterface> + </Adapter> + <Adapter slot="2" enabled="false" MACAddress="080027A3A3CC" cable="true" speed="0" type="Am79C973"/> + <Adapter slot="3" enabled="false" MACAddress="0800277356CC" cable="true" speed="0" type="Am79C973"/> + <Adapter slot="4" enabled="false" MACAddress="080027CEA8CC" cable="true" speed="0" type="Am79C973"/> + <Adapter slot="5" enabled="false" MACAddress="0800271B8DCC" cable="true" speed="0" type="Am79C973"/> + <Adapter slot="6" enabled="false" MACAddress="08002771BBCC" cable="true" speed="0" type="Am79C973"/> + <Adapter slot="7" enabled="false" MACAddress="080027EB6ACC" 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> + <!-- should be configured depending on the chosen operating system --> + <AudioAdapter controller="${guestaudio}" driver="Alsa" enabled="${audio}"/> <!-- OSS, Alsa, Pulse --> + <!-- should be configured depending on the chosen operating system --> + <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="1268140071072799000" flags="TRANSIENT, RDONLYGUEST"/> + <GuestProperty name="/VirtualBox/HostGuest/SysprepArgs" value="" timestamp="1268140071072949000" flags="TRANSIENT, RDONLYGUEST"/> + <GuestProperty name="/VirtualBox/GuestInfo/OS/Product" value="Linux" timestamp="1268140267864540000" flags=""/> + <GuestProperty name="/VirtualBox/GuestInfo/OS/Release" value="4.1.2" timestamp="1268140267894449000" flags=""/> + <GuestProperty name="/VirtualBox/GuestInfo/OS/LoggedInUsersList" value="vbox" timestamp="1268164075149967000" flags=""/> + </GuestProperties> + --> + </Hardware> + <!-- should be configured depending on the chosen operating system --> + <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 (HD)!!! --> + <AttachedDevice passthrough="false" type="DVD" port="0" device="1"> + <HostDrive src="${cdrom_0}"/> + </AttachedDevice> <!-- PLEASE DO NOT REMOVE THIS COMMENT (CD)!!! --> + </StorageController> + <StorageController name="Floppy Controller" type="I82078" PortCount="1"> + <AttachedDevice type="Floppy" port="0" device="0"> + </AttachedDevice> + <AttachedDevice type="Floppy" port="0" device="1"> + <Image uuid="{288d5452-2dd3-44f2-bfc8-78e205a4fa87}"/> + </AttachedDevice> + </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/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/run-virt.include b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/run-virt.include new file mode 100755 index 00000000..1a87e01b --- /dev/null +++ b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/run-virt.include @@ -0,0 +1,430 @@ +# ----------------------------------------------------------------------------- +# Copyright (c) 2009..2011 - RZ Uni Freiburg +# Copyright (c) 2009..2013 - 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 +# - component for virtualbox of the vmchooser plugin vmchooser-run_virt +################################################################################ + +################################################################################ +### declaration of default variables +################################################################################ + +VMCHOOSERVBOX="/opt/openslx/vmchooser/${self}" +# create TMPDIR for all users +TMPDIR=/tmp/virt/${self} +mkdir -m 1777 ${TMPDIR} 2>/dev/null +# dir for configs +confdir="/tmp/virt/${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/virt/.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 +# default guest audio controller (SB16, AC97, HDA) +guestaudio="HDA" +# default guest network adaptor (Am79C970A, Am79C973, 82540EM) +vb_network_card="82540EM" +# default setting for accelerated 2D grapics (OS dependent) +enable2d="true" +# set default graphics ram +vram="128" + +# configure our own rwimg, empty image which we provide +if [ "${imgmode}" = "rwimg" ]; then + # what is our rwimg called? + imgname="${vm_shortname}.vdi" + vmpath=${imgpath}/${imgname} + if ! [ -e "${vmpath}" ]; then + cat /opt/openslx/vmchooser/virtualbox/rwimg.vdi.gz | gunzip > "${vmpath}" + fi +fi + +# link to image +diskfile="${diskfolder}/${imgname}" +[ ${diskless} -eq 0 ] && ln -sf ${vmpath} ${diskfile} + +# check the file type +if echo ${imgname} | grep -qiE "vdi|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|vhd), exiting!" + cleanexit 1 +fi + +# 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" + +# set some base configuration depending on the guest operating system +case "${vmostype}" in + win31*) + guestaudio="SB16" + vb_network_card="Am79C973" + vmostype="Windows31" + mem="32" + vram="16" + cpu_cores=1 + enablevt="false" + ;; + win95*) + vmostype="Windows95" + guestaudio="SB16" + vb_network_card="Am79C973" + mem="92" + vram="32" + cpu_cores=1 + enablevt="false" + ;; + win98*) + vmostype="Windows98" + guestaudio="SB16" + vb_network_card="Am79C973" + mem="256" + vram="64" + cpu_cores=1 + ;; + winme*) + vmostype="WindowsMe" + guestaudio="AC97" + vb_network_card="Am79C973" + mem="256" + vram="64" + cpu_cores=1 + ;; + winxp*|windowsxp*) + vmostype="WindowsXP" + guestaudio="AC97" + ;; + winvista*|windowsvista*) + vmostype="WindowsVista" + ;; + windows7*) + vmostype="Windows7" + ;; + windows8*) + vmostype="Windows8" + ;; + 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 + ;; + os2*) + mem="256" + vmostype="OS2eCS" + cpu_cores=1 + enable2d="false" + ;; + macos*|MacOS*) + vmostype="MacOS" + enable2d="false" + ;; + *) + vmostype="Other" + enable2d="false" + ;; +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 and generate a VDE (virtual device ethernet) +# MAC addr from the first one (put in prefix 0DE) +macaddr=$(echo ${macaddr} | sed 's/://g') +vdemacaddr=$(echo ${macaddr} | sed 's/^..../00DE/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="34f617be-192a-46b3-a8ae-bce1029e093f" +# 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 ${VMCHOOSERVBOX}/empty-diff.vdi.gz \ + | gunzip > "${snapshotdir}/{${snapshotuuid}}.vdi" + # patch the disk file uuid into the snapshot vdi file + dd if=${diskfile} of="${snapshotdir}/{${snapshotuuid}}.vdi" seek=424 \ + skip=392 bs=1 count=16 conv=notrunc +fi + +# TODO: MEM muss noch angepasst werden. Maschine crasht wenn mehr 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 +# 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}) +#fi + +# 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 + +# translate network kinds (nat, bridged, host-only) +case "${network_kind}" in + bridge*) + network_kind='HostOnlyInterface name="vboxnet0"' + ;; + host*) + network_kind='HostOnlyInterface name="vboxnet2"' + ;; + *) + network_kind='HostOnlyInterface name="vboxnet1"' +esac + +# configure 3d settings +case "${enable3d}" in + *true*|*yes*) + enable3d="true" + ;; + *) + enable3d="false" + ;; +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 + +# external GUI +vrdpport=${remotedesktopport} + +[ ${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\t${cdrom0}" +#writelog "\tCD-ROM2:\t\t${cdrom1}" +writelog "\tFloppy_A:\t\t${floppy0}" +writelog "\tFloppy_B:\t\t${floppy1}" +# defined in run-virt.sh and run-vmgrid.sh +writelog "\tShared Folders '${sharename}':\t${sharepath}" + +################################################################################ +### Pepare and configure virtual machine and disk image +################################################################################ + +# create Virtualbox.xml +. ${VMCHOOSERVBOX}/virtualbox.include + +# remove snapshot disk when using rw images +if [ "${imgtype}" != "Immutable" ]; then + sed -i "/${snapshotuuid}/d" "${confdir}/VirtualBox.xml" +fi + +# TODO: add rawdisk if requested +#"raw.vmdk" format="VMDK" type="Writethrough"/> + +# create machine.xml +. ${VMCHOOSERVBOX}/machine.include + +# remove CD-ROM if not available +if [ "${cdrom0}" != "TRUE" ]; then + sed -i "/HostDrive/d" ${machconfig} + sed -i '/AttachedDevice.*type="DVD"/d' ${machconfig} + sed -i "/<!-- PLEASE DO NOT REMOVE THIS COMMENT (CD)!!! -->/d" ${machconfig} +fi + +# 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 (HD)!!! -->/d" ${machconfig} +fi + +# 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 + +################################################################################ +### Set env for vmchooser-run_virt +################################################################################ + +# 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) +VIRTCMDOPTS="--startvm ${machineuuid} --start-running" + +# set headless mode (-v off to disable vrdp) +VIRTCMDHL=$(which VBoxHeadless 2>/dev/null) +VIRTCMDOPTSHL="-s ${machineuuid}" +RMDIRS="${TMPDIR}" + diff --git a/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/rwimg.vdi.gz b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/rwimg.vdi.gz Binary files differnew file mode 100644 index 00000000..e2133d6d --- /dev/null +++ b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/rwimg.vdi.gz diff --git a/remote/modules/vbox/data/opt/openslx/etc/virtualbox/virtualbox.conf b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/virtualbox.conf index 8a7a58e4..8a7a58e4 100644 --- a/remote/modules/vbox/data/opt/openslx/etc/virtualbox/virtualbox.conf +++ b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/virtualbox.conf diff --git a/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/virtualbox.include b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/virtualbox.include new file mode 100644 index 00000000..477eebde --- /dev/null +++ b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/virtualbox.include @@ -0,0 +1,57 @@ +# ----------------------------------------------------------------------------- +# Copyright (c) 2010..2013 - 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 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.12-linux"> <!-- 1.12-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/HostScreenSaverDisabled" value="false"/> + <ExtraDataItem name="GUI/LicenseAgreed" value="1,2,3,4,5,6,7,8,9"/> + <ExtraDataItem name="GUI/MaxGuestResolution" value="any"/> <!-- auto, width,height --> + <ExtraDataItem name="GUI/UpdateCheckCount" value="2"/> + <ExtraDataItem name="GUI/UpdateDate" value="never"/> + <ExtraDataItem name="GUI/SuppressMessages" value=",remindAboutAutoCapture,confirmInputCapture,remindAboutWrongColorDepth,confirmGoingFullscreen,remindAboutMouseIntegrationOn,remindAboutMouseIntegrationOff,showRuntimeError.warning.DevATA_DISKFULL,remindAboutPausedVMInput,confirmVMReset,showRuntimeError.warning.HostAudioNotResponding,showRuntimeError.warning.ExtPackNoEhci"/> + <ExtraDataItem name="GUI/TrayIcon/Enabled" value="false"/> + </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/> + --> + <FloppyImages> + <Image uuid="{288d5452-2dd3-44f2-bfc8-78e205a4fa87}" location="${floppy1name}"/> + </FloppyImages> + </MediaRegistry> + <NetserviceRegistry> + <DHCPServers> + <DHCPServer networkName="HostInterfaceNetworking-vboxnet0" IPAddress="0.0.0.0" networkMask="0.0.0.0" lowerIP="0.0.0.0" upperIP="0.0.0.0" enabled="0"/> + <!-- + <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="VBoxAuth" webServiceAuthLibrary="VBoxAuth" LogHistoryCount="3"/> + <USBDeviceFilters/> + </Global> +</VirtualBox> +EOF |
