diff options
Diffstat (limited to 'remote/modules/vbox/data')
| -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 |
