summaryrefslogtreecommitdiffstats
path: root/remote/modules
diff options
context:
space:
mode:
authorChristian Rößler2015-09-11 17:29:54 +0200
committerChristian Rößler2015-09-11 17:29:54 +0200
commit0490caf38b0625b612e050bff57d4ce92c87c2af (patch)
tree4811d2eaeeacc3d03a61565123fb055203ffb029 /remote/modules
parent[chroot] Little bug fix: removed forgotten dev.-mount (diff)
downloadtm-scripts-0490caf38b0625b612e050bff57d4ce92c87c2af.tar.gz
tm-scripts-0490caf38b0625b612e050bff57d4ce92c87c2af.tar.xz
tm-scripts-0490caf38b0625b612e050bff57d4ce92c87c2af.zip
[runvirt] [vmware] WARNING: Further testing needed! Two branches: Non-Legacy, Legacy.
Big scripts vmchooser-run_virt and vmware runvirt include broken into includes, tidied. More cosmetics needed, but it works so far.
Diffstat (limited to 'remote/modules')
-rw-r--r--remote/modules/run-virt/data/opt/openslx/scripts/check_lpd.inc11
-rw-r--r--remote/modules/run-virt/data/opt/openslx/scripts/check_runvirt_needed_files.inc53
-rw-r--r--remote/modules/run-virt/data/opt/openslx/scripts/check_runvirt_xml_sanity_legacy.inc23
-rw-r--r--remote/modules/run-virt/data/opt/openslx/scripts/detect_legacy.inc25
-rw-r--r--remote/modules/run-virt/data/opt/openslx/scripts/get_xml_file_dir_legacy.inc50
-rw-r--r--remote/modules/run-virt/data/opt/openslx/scripts/get_xml_file_variables.inc99
-rw-r--r--remote/modules/run-virt/data/opt/openslx/scripts/get_xml_file_variables_legacy.inc120
-rw-r--r--remote/modules/run-virt/data/opt/openslx/scripts/print_runvirt_console_logo.inc12
-rw-r--r--remote/modules/run-virt/data/opt/openslx/scripts/set_runvirt_hardware_variables.inc88
-rw-r--r--remote/modules/run-virt/data/opt/openslx/scripts/set_runvirt_hardware_variables_legacy.inc89
-rw-r--r--remote/modules/run-virt/data/opt/openslx/scripts/set_runvirt_variables.inc14
-rw-r--r--remote/modules/run-virt/data/opt/openslx/scripts/setup_image_access.inc54
-rw-r--r--remote/modules/run-virt/data/opt/openslx/scripts/setup_printer_lpd.inc34
-rw-r--r--remote/modules/run-virt/data/opt/openslx/scripts/setup_sound.inc62
-rw-r--r--remote/modules/run-virt/data/opt/openslx/scripts/setup_virtual_floppy.inc21
-rw-r--r--remote/modules/run-virt/data/opt/openslx/scripts/setup_vm_hypervisor.inc19
-rw-r--r--remote/modules/run-virt/data/opt/openslx/scripts/start_pvs.inc11
-rw-r--r--remote/modules/run-virt/data/opt/openslx/scripts/start_windowmanager.inc18
-rwxr-xr-xremote/modules/run-virt/data/opt/openslx/scripts/systemd-run_virt_env2
-rwxr-xr-xremote/modules/run-virt/data/opt/openslx/scripts/vmchooser-run_virt678
-rw-r--r--remote/modules/run-virt/data/opt/openslx/scripts/vmchooser_runvirt_functions.inc45
-rw-r--r--remote/modules/vmware/data/opt/openslx/vmchooser/vmware/create_vmhome_preferences_file.inc53
-rw-r--r--remote/modules/vmware/data/opt/openslx/vmchooser/vmware/create_vmware_config_file.inc175
-rw-r--r--remote/modules/vmware/data/opt/openslx/vmchooser/vmware/create_vmware_config_file_legacy.inc312
-rw-r--r--remote/modules/vmware/data/opt/openslx/vmchooser/vmware/logging.inc57
-rw-r--r--remote/modules/vmware/data/opt/openslx/vmchooser/vmware/parse_vmx.inc78
-rw-r--r--remote/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include657
-rw-r--r--remote/modules/vmware/data/opt/openslx/vmchooser/vmware/set_hardware.inc71
-rw-r--r--remote/modules/vmware/data/opt/openslx/vmchooser/vmware/set_hardware_legacy.inc180
-rw-r--r--remote/modules/vmware/data/opt/openslx/vmchooser/vmware/set_vmware_include_variables.inc43
-rw-r--r--remote/modules/vmware/data/opt/openslx/vmchooser/vmware/write_config_files.inc26
-rw-r--r--remote/modules/vmware/data/opt/openslx/vmchooser/vmware/write_config_files_legacy.inc29
32 files changed, 1969 insertions, 1240 deletions
diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/check_lpd.inc b/remote/modules/run-virt/data/opt/openslx/scripts/check_lpd.inc
new file mode 100644
index 00000000..8286bbaa
--- /dev/null
+++ b/remote/modules/run-virt/data/opt/openslx/scripts/check_lpd.inc
@@ -0,0 +1,11 @@
+############################################
+# Include: Checking whether lpd is running #
+############################################
+
+# Check if tcpsvd is running. Do this down here so we do not check
+# immediately after trying to spawn it, as this could result in
+# success even if it's not really working.
+
+if ! kill -0 "$PID_LPD"; then
+ slxlog "virt-lpd" "Could not start tcpsvd/lpd for virtual machine session"
+fi
diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/check_runvirt_needed_files.inc b/remote/modules/run-virt/data/opt/openslx/scripts/check_runvirt_needed_files.inc
new file mode 100644
index 00000000..fbb0bc70
--- /dev/null
+++ b/remote/modules/run-virt/data/opt/openslx/scripts/check_runvirt_needed_files.inc
@@ -0,0 +1,53 @@
+#################################################################
+# Include: Check for important files used by vmchooser_run-virt #
+#################################################################
+
+# WARNING: This is perhaps vestigial!
+
+filecheck() {
+ filecheck=$(LANG=us ls -lh ${diskfile} 2>&1)
+ writelog "Filecheck:\n${filecheck}\n"
+ noimage=$(echo ${filecheck} | grep -i "no such file or directory" | wc -l)
+ rightsfile=${diskfile}
+
+ # check if link
+ if [ -L "${diskfile}" ]; then
+ # take link target
+ rightsfile=$(ls -lh ${diskfile} 2>&1 | awk -F '-> *' '{print $2}')
+ rightsfile=${vmdir}/${rightsfile}
+ filecheck=$(LANG=us ls -lh ${rightsfile} 2>&1)
+ fi
+
+ # does file exist
+ if [ "${noimage}" -ge "1" ]; then
+ writelog "Virtual Machine Image Problem:\c "
+ writelog "\tThe image you've specified doesn't exist."
+ writelog "Filecheck says:\c "
+ writelog "\t\t${diskfile}:\n\t\t\tNo such file or directory"
+ writelog "Hint:\c "
+ writelog "\t\t\tCompare spelling of the image with your options.\n"
+ exit 1
+ fi
+ # readable by calling user
+ if ! [ -r "${diskfile}" >/dev/null 2>&1 \
+ -o -r "${diskfile}" >/dev/null 2>&1 ]; then
+ writelog "Vmware Image Problem:\c "
+ writelog "\tThe image you've specified has wrong rights."
+ writelog "Filecheck says:\t\t$(echo ${filecheck} \
+ | awk '{print $1" "$3" "$4}') ${rightsfile}"
+ writelog "Hint:\t\t\tChange rights with: chmod a+r ${rightsfile}\n"
+ exit 1
+ fi
+
+ # writable (for persistent-mode)?
+ if ! [ -w "${diskfile}" >/dev/null 2>&1 \
+ -o -w "${diskfile}" >/dev/null 2>&1 ] \
+ && [ "${np}" = "independent-persistent" ]; then
+ writelog "Vmware Image Problem:\c "
+ writelog "\tThe image you have specified has wrong rights."
+ writelog "Filecheck says:\t\t$(echo ${filecheck} \
+ | awk '{print $1" "$3" "$4}') ${rightsfile}"
+ writelog "Hint:\t\t\tUse nonpersistent-mode or change rights to rw\n"
+ exit 1
+ fi
+}
diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/check_runvirt_xml_sanity_legacy.inc b/remote/modules/run-virt/data/opt/openslx/scripts/check_runvirt_xml_sanity_legacy.inc
new file mode 100644
index 00000000..d331e1af
--- /dev/null
+++ b/remote/modules/run-virt/data/opt/openslx/scripts/check_runvirt_xml_sanity_legacy.inc
@@ -0,0 +1,23 @@
+#######################################################
+# Include: check xml file for sanity (legacy, old way #
+#######################################################
+
+# test if the xml file is valid
+if ! [ -r "${xmlfile}" ]; then
+ writelog "${xmlfile} not a readable XML file!"
+ slxlog "virt-nonreadable-xml" "XML file not readable: $xmlfile"
+ exit 1
+fi
+
+# test if XML file
+if ! grep -q '<?xml' "${xmlfile}"; then
+ writelog "Submitted configuration file ${xmlfile} seems to have wrong XML format"
+ slxlog "virt-invalid-xml" "Malformed XML file: $xmlfile" "$xmlfile"
+ exit 1
+fi
+
+# check for running in graphical environment otherwise no much use here
+if [ -z "$DISPLAY" ]; then
+ echo -e "\n\tStart only within a graphical desktop!\n"
+ exit 1
+fi
diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/detect_legacy.inc b/remote/modules/run-virt/data/opt/openslx/scripts/detect_legacy.inc
new file mode 100644
index 00000000..4c3a2f2b
--- /dev/null
+++ b/remote/modules/run-virt/data/opt/openslx/scripts/detect_legacy.inc
@@ -0,0 +1,25 @@
+########################################################
+# Include: Detect, whether runvirt runs in legacy mode #
+########################################################
+
+# Legacy mode: As runvirt has been before.
+# New mode: uuid in xml _and_ vmx given via http.
+
+# First, let's try to extract an imguuid from xmlfile:
+IMGUUID=$(grep -io '<uuid param=.*"' "${xmlfile}" | sed -e "s/&.*;/; /g" | awk -F '"' '{ print $2 }')
+
+# Temporary directory for run-virt related stuff
+TMPDIR=$(mktemp -d -p /tmp/virt)
+
+# Then get a template (vmx) file via http/wget:
+wget --output-document="$TMPDIR/$IMGUUID" "${SLX_VMCHOOSER_BASE_URL}/lecture/${IMGUUID}"
+
+writelog "IMGUUID: -$IMGUUID- --- TMPDIR: ${TMPDIR}"
+
+if [ -n "$IMGUUID" ] && [ -n "$TMPDIR/$IMGUUID" ]; then
+ LEGACY= # no legacy; both strings set
+ writelog "Current (non-legacy) mode detected."
+else
+ LEGACY=: # legacy: One or both strings not set
+ writelog "Legacy mode detected."
+fi
diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/get_xml_file_dir_legacy.inc b/remote/modules/run-virt/data/opt/openslx/scripts/get_xml_file_dir_legacy.inc
new file mode 100644
index 00000000..c3c6f7b3
--- /dev/null
+++ b/remote/modules/run-virt/data/opt/openslx/scripts/get_xml_file_dir_legacy.inc
@@ -0,0 +1,50 @@
+#########################################################
+# Include: Get xml file and directory (legacy, old way) #
+#########################################################
+
+## Added for persistent support.
+diskmode='nonpersistent'
+if [[ "$(grep --extended-regexp \
+ '< *short_description *param=".+ --persistent--"' "$1")" ]]; then
+ diskmode='persistent'
+ imageFilePath="$(grep -io '<image_path param=.*"' "$1" | sed -e "s/&.*;/; /g" | awk -F '"' '{ print $2 }')"
+ [ -z "$imageFilePath" ] && imageFilePath="$(grep -io '<image_name param=.*"' "$1" | sed -e "s/&.*;/; /g" | awk -F '"' '{ print $2 }')"
+ originalXMLFilePath="$(grep -io '<original_xml_file_path param=.*"' "$1" \
+ | sed -e "s/&.*;/; /g" | awk -F '"' '{ print $2 }')"
+ originalImageFileName="$(grep -io '<image_name param=.*"' \
+ "$originalXMLFilePath" | sed -e "s/&.*;/; /g" | awk -F '"' \
+ '{ print $2 }')"
+ originalVMDKFilePath="$(dirname \
+ "$originalXMLFilePath")/${originalImageFileName}"
+ # Added to workaround path prefix coming from temporary generated xml file
+ # by vmchooser.
+ if [[ "$(grep --extended-regexp '^/tmp/tmp\.[^\/]+/' <<< \
+ "$imageFilePath")" ]]; then
+ imageFilePath=$(sed -r 's/^\/?tmp\/[^\/]+\///g' \
+ <<< "$imageFilePath")
+ sed -ir \
+ "s/(<image_name param=\")[^\"]*(\")/\\1$(sed -e \
+ 's/\\/\\\\/g' -e 's/\//\\\//g' -e \
+ 's/&/\\\&/g' <<< "$imageFilePath")\\2/g" "$1"
+ fi
+ # Create linked clone if not exists.
+ if [ ! -f "$imageFilePath" ]; then
+ mkdir -p "$(dirname "$imageFilePath")" && \
+ bash "$(dirname "$0")/vmchooser-clc" "$originalXMLFilePath" \
+ "$imageFilePath" --debug --verbose &>"${LOGFILE}"
+ fi
+fi
+
+# absolute or relative path?
+xmlfile=$1
+if ls "${xmlfile}" 2>/dev/null | grep '/' >/dev/null 2>&1; then
+ xmlpath=$(dirname "${xmlfile}")
+ xmlfile=$(basename "${xmlfile}")
+else
+ xmlpath=${vmchooser_xmlpath}
+fi
+# full path
+xmlfile="${xmlpath}/${xmlfile%.xml}.xml"
+
+DO_PROFILE="$(grep -c -E -i '<\s*profile\s*param="?(true|yes)"?' "$xmlfile")"
+
diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/get_xml_file_variables.inc b/remote/modules/run-virt/data/opt/openslx/scripts/get_xml_file_variables.inc
new file mode 100644
index 00000000..90d59beb
--- /dev/null
+++ b/remote/modules/run-virt/data/opt/openslx/scripts/get_xml_file_variables.inc
@@ -0,0 +1,99 @@
+###########################################
+# Include: Set hardware related variables #
+###########################################
+
+writelog "Starting configuration..."
+writelog "\tLogfile:\t\t${LOGFILE}"
+writelog "\t/tmp info:\t\t$(df -h | grep " /tmp$" | awk '{print $2}') \c"
+writelog "$(grep "/tmp " /proc/mounts | awk '{print $1" "$2" "$3" "$4}')"
+writelog "\tVM XML dir:\t\t$(dirname "${xmlfile}")"
+writelog "\tXML file:\t\t${xmlfile}"
+writelog "Enable 3D:\t\t${enable3d}"
+writelog "VM config:"
+
+# # Name of the virt image
+imgname=$(grep -io '<image_path param=.*"' "${xmlfile}" | sed -e "s/&.*;/; /g" | awk -F '"' '{ print $2 }')
+imgrelpath=$(grep -io '<image_name param=.*"' "${xmlfile}" | sed -e "s/&.*;/; /g" | awk -F '"' '{ print $2 }')
+# [ -z "$imgname" ] && imgname="${imgrelpath}"
+imgrelpath=${imgrelpath#/mnt/vmstore/}
+
+writelog "imgname: $imgname--"
+
+# Imagename w/ full path
+if echo "${imgname}" | grep -q '^/'; then
+ imgpath="$(dirname "${imgname}")"
+ imgname="$(basename "${imgname}")"
+ vmpath="${imgpath}/${imgname}"
+ # If old vmchooser binary stuff
+ # We do not need folder name as it is already included by vmchooser
+elif echo "${xmlfile}" | grep -q '^/tmp/'; then
+ vmpath="$imgname"
+ imgname="$(basename "${imgname}")"
+ ## Added for persistent support.
+else
+ # Else use same path as xml
+ imgpath="${xmlpath}"
+ vmpath="${imgpath}/${imgname}"
+fi
+
+# If ${vm_name} not defined use ${xmlfile}
+vm_name="${vm_name:-${xmlfile%.xml}}"
+
+# Define vm_shortname since vm_name can be very long
+vm_shortname="$(basename "${xmlfile%.xml}" | sed -e "s, ,-,g")"
+
+# vm_name = displayname, define for old scripts
+displayname="${vm_name}"
+
+# image is for the following virtual machine
+xmlvirt=$(grep -o 'virtualmachine param=.*"' "${xmlfile}" \
+ | sed -e "s/&.*;/; /g" | awk -F '"' '{print $2}')
+
+# choose the proper virtualization/emulator plugin
+[ "x${xmlvirt}" != "x" -a "x${xmlvirt}" != "xqemukvm" -a "x${xmlvirt}" != "xvirtualbox" -a "x${xmlvirt}" != "xvmware" ] && xmlvirt="emufe"
+
+# make a guess from the filename extension if ${xmlvirt} is empty
+# (not set within the XML file)
+# TODO: implement possibility to submit own configuration files
+if [ -z "${xmlvirt}" ] && [ -n "${additional_config}" ]; then
+ writelog "No virtual machine parameter defined in ${xmlfile}"
+ writelog "Trying to guess VM...\c"
+ case "$(cat ${additional_config} | tr \"[A-Z]\" \"[a-z]\")" in
+ *config.version*|*virtualhw.version*|*independent-nonpersistent*|*vmdk*)
+ xmlvirt="vmware"
+ ;;
+ *innotek*|*virtualbox*)
+ xmlvirt="virtualbox"
+ ;;
+ *qemu*|*kvm*)
+ xmlvirt="qemukvm"
+ ;;
+ *)
+ xmlvirt="none"
+ ;;
+ esac
+ elif [ -z "${xmlvirt}" ]; then
+ case "$(echo ${imgname##*.} | tr \"[A-Z]\" \"[a-z]\")" in
+ vmdk)
+ xmlvirt="vmware"
+ ;;
+ vbox|vdi)
+ xmlvirt="virtualbox"
+ ;;
+ qcow*)
+ xmlvirt="qemukvm"
+ ;;
+ *)
+ xmlvirt="emufe"
+ ;;
+ esac
+ writelog "result:\t${xmlvirt}"
+fi
+
+# Set redirects to 0, see vmgrid if you want to define some
+redirects=0
+
+writelog "\tVirtualization:\t\t$xmlvirt"
+writelog "\tVM name:\t\t$vm_name"
+writelog "\tVM short name:\t\t$vm_shortname"
+
diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/get_xml_file_variables_legacy.inc b/remote/modules/run-virt/data/opt/openslx/scripts/get_xml_file_variables_legacy.inc
new file mode 100644
index 00000000..3fdc06d2
--- /dev/null
+++ b/remote/modules/run-virt/data/opt/openslx/scripts/get_xml_file_variables_legacy.inc
@@ -0,0 +1,120 @@
+###########################################
+# Include: Set hardware related variables #
+###########################################
+
+writelog "Starting configuration..."
+writelog "\tLogfile:\t\t${LOGFILE}"
+writelog "\t/tmp info:\t\t$(df -h | grep " /tmp$" | awk '{print $2}') \c"
+writelog "$(grep "/tmp " /proc/mounts | awk '{print $1" "$2" "$3" "$4}')"
+writelog "\tVM XML dir:\t\t$(dirname "${xmlfile}")"
+writelog "\tXML file:\t\t${xmlfile}"
+writelog "Enable 3D:\t\t${enable3d}"
+writelog "VM config:"
+
+# Name of the virt image
+imgname=$(grep -io '<image_path param=.*"' "${xmlfile}" | sed -e "s/&.*;/; /g" | awk -F '"' '{ print $2 }')
+imgrelpath=$(grep -io '<image_name param=.*"' "${xmlfile}" | sed -e "s/&.*;/; /g" | awk -F '"' '{ print $2 }')
+[ -z "$imgname" ] && imgname="${imgrelpath}"
+imgrelpath=${imgrelpath#/mnt/vmstore/}
+
+## Added for persistent support.
+if [[ "$userBranchFilePath" ]]; then
+ imgname="$userBranchFilePath"
+fi
+
+# Imagename w/ full path
+if echo "${imgname}" | grep -q '^/'; then
+ imgpath="$(dirname "${imgname}")"
+ imgname="$(basename "${imgname}")"
+ vmpath="${imgpath}/${imgname}"
+ # If old vmchooser binary stuff
+ # We do not need folder name as it is already included by vmchooser
+elif echo "${xmlfile}" | grep -q '^/tmp/'; then
+ vmpath="$imgname"
+ imgname="$(basename "${imgname}")"
+ ## Added for persistent support.
+elif [[ "$userBranchFilePath" ]]; then
+ vmpath="$userBranchFilePath"
+else
+ # Else use same path as xml
+ imgpath="${xmlpath}"
+ vmpath="${imgpath}/${imgname}"
+fi
+
+# Name of the virt machine, sed because of Windows formatting
+vm_name=$(grep -o 'short_description param=.*"' "${xmlfile}" \
+ | sed -e "s/&.*;/; /g" | awk -F '"' '{print $2}')
+
+# If ${vm_name} not defined use ${xmlfile}
+vm_name="${vm_name:-${xmlfile%.xml}}"
+
+# Define vm_shortname since vm_name can be very long
+vm_shortname="$(basename "${xmlfile%.xml}" | sed -e "s, ,-,g")"
+
+# vm_name = displayname, define for old scripts
+displayname="${vm_name}"
+
+# image is for the following virtual machine
+xmlvirt=$(grep -o 'virtualmachine param=.*"' "${xmlfile}" \
+ | sed -e "s/&.*;/; /g" | awk -F '"' '{print $2}')
+
+# choose the proper virtualization/emulator plugin
+[ "x${xmlvirt}" != "x" -a "x${xmlvirt}" != "xqemukvm" -a "x${xmlvirt}" != "xvirtualbox" -a "x${xmlvirt}" != "xvmware" ] && xmlvirt="emufe"
+
+# make a guess from the filename extension if ${xmlvirt} is empty
+# (not set within the XML file)
+# TODO: implement possibility to submit own configuration files
+if [ -z "${xmlvirt}" ] && [ -n "${additional_config}" ]; then
+ writelog "No virtual machine parameter defined in ${xmlfile}"
+ writelog "Trying to guess VM...\c"
+ case "$(cat ${additional_config} | tr \"[A-Z]\" \"[a-z]\")" in
+ *config.version*|*virtualhw.version*|*independent-nonpersistent*|*vmdk*)
+ xmlvirt="vmware"
+ ;;
+ *innotek*|*virtualbox*)
+ xmlvirt="virtualbox"
+ ;;
+ *qemu*|*kvm*)
+ xmlvirt="qemukvm"
+ ;;
+ *)
+ xmlvirt="none"
+ ;;
+ esac
+ elif [ -z "${xmlvirt}" ]; then
+ case "$(echo ${imgname##*.} | tr \"[A-Z]\" \"[a-z]\")" in
+ vmdk)
+ xmlvirt="vmware"
+ ;;
+ vbox|vdi)
+ xmlvirt="virtualbox"
+ ;;
+ qcow*)
+ xmlvirt="qemukvm"
+ ;;
+ *)
+ xmlvirt="emufe"
+ ;;
+ esac
+ writelog "result:\t${xmlvirt}"
+fi
+
+# Definition of the client system
+vmostype=$(grep -io '<os param=.*"' "${xmlfile}" | awk -F '"' '{ print $2 }' | tr "[A-Z]" "[a-z]")
+
+# Definition of the networking the client system is connected to
+network_kind=$(grep -io '<network param=.*"' "${xmlfile}" | awk -F '"' '{ print $2 }' | tr "[A-Z]" "[a-z]")
+network_card=$(grep -io '<netcard param=.*"' "${xmlfile}" | awk -F '"' '{ print $2 }'| tr "[A-Z]" "[a-z]")
+override_hddtype=$(grep -io '<hddtype param=.*"' "${xmlfile}" | awk -F '"' '{ print $2 }'| tr "[A-Z]" "[a-z]")
+
+# Set redirects to 0, see vmgrid if you want to define some
+redirects=0
+
+# Serial/parallel ports defined (e.g. "ttyS0" or "autodetect")
+serial=$(grep -io '<serialport param=.*"' "${xmlfile}" | awk -F '"' '{ print $2 }')
+parallel=$(grep -io '<parport param=.*"' "${xmlfile}" | awk -F '"' '{ print $2 }')
+
+writelog "\tVirtualization:\t\t$xmlvirt"
+writelog "\tVM name:\t\t$vm_name"
+writelog "\tVM short name:\t\t$vm_shortname"
+
diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/print_runvirt_console_logo.inc b/remote/modules/run-virt/data/opt/openslx/scripts/print_runvirt_console_logo.inc
new file mode 100644
index 00000000..649cf956
--- /dev/null
+++ b/remote/modules/run-virt/data/opt/openslx/scripts/print_runvirt_console_logo.inc
@@ -0,0 +1,12 @@
+#######################################
+# Include: Print Logo for console use #
+#######################################
+
+cat <<EOL
+ __ __
+ .----.--.--.-----.___.--.--.|__|.----.| |_
+ | _| | | |___| | || || _|| _|
+ |__| |_____|__|__| \___/ |__||__| |____|
+ OpenSLX virtual machine environment preparation script ...
+
+EOL
diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/set_runvirt_hardware_variables.inc b/remote/modules/run-virt/data/opt/openslx/scripts/set_runvirt_hardware_variables.inc
new file mode 100644
index 00000000..400c1bf4
--- /dev/null
+++ b/remote/modules/run-virt/data/opt/openslx/scripts/set_runvirt_hardware_variables.inc
@@ -0,0 +1,88 @@
+###########################################
+# Include: Set hardware related variables #
+###########################################
+
+# take last two digits of current pid...
+VM_ID=$(expr substr $$ $(expr ${#$} - 1) 2)
+
+# Make sure cpu_cores is not empty
+cpu_cores=${cpu_cores:-"1"}
+
+# Amount of memory for the VM. Be generous if diff is written to HDD
+if mount | grep -q '^/dev/sd.*on.*/tmp'; then
+ reserve=20
+ min=768
+ max=1536
+else
+ reserve=65
+ min=768
+ max=8192
+fi
+
+# Calculate absulute amount of RAM that should stay available to the host
+reserve="$[ ( $totalmem * $reserve ) / 100 ]"
+# Respect some upper and lower bounds for the host amount
+[ "$reserve" -lt "$min" ] && reserve="$min"
+[ "$reserve" -gt "$max" ] && reserve="$max"
+
+# Get a result which can be divided by 4
+mem="$[ ( ( $totalmem - $reserve ) / 4 ) * 4 ]"
+if [ -n "$mainvirtmem" ]; then
+ forcemem="$[ "$mainvirtmem" / 4 * 4 ]"
+ mem="$forcemem"
+fi
+hostmem="$[ $totalmem - $mem ]"
+
+# TODO: We should only generate the suffix here (last 3 octets) as the first 3 are
+# dependant on the virtualizer/emulator. Check if any run-virt.include still relies on
+# $macguestpart/$macaddr. If so, fix it to use its specific first 3 bytes
+# and append $macaddrssuffix
+macguestpart="00:50:56:${VM_ID}"
+machostpart=$(echo "${hostmacaddr}" | awk -F ":" '{print $(NF-1)":"$NF}')
+macaddr=$(echo "${macguestpart}:${machostpart}" | tr "[a-z]" "[A-Z]")
+macaddrsuffix=$(echo "${VM_ID}:${machostpart}" | tr "[a-z]" "[A-Z]")
+
+if ! echo "$macaddrsuffix" | grep -q -E '^[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}$'; then
+ slxlog "virt-mac" "Could not properly generate mac address suffix (got $macaddrsuffix)"
+fi
+
+# Virtual fd/cd/dvd and drive devices, floppy b: for configuration
+# if $floppy_0 from virtualization.conf set then fdtest="TRUE"
+fdtest=${floppy_0:+"TRUE"}
+# if $fdtest not set floppy0="FALSE", else "TRUE"
+floppy0=${fdtest:-"FALSE"}
+floppy1="TRUE"
+floppy1name="$VMCHOOSER_DIR/data/loopimg/fd.img"
+# if $cdrom_0 from virtualization.conf set then cdtest="TRUE"
+cdtest=${cdrom_0:+"TRUE"}
+# if $cdtest not set cdrom0="FALSE", else "TRUE"
+cdrom0=${cdtest:-"FALSE"}
+# if $cdrom_1 from virtualization.conf set then cdtest="TRUE"
+cdtest=${cdrom_1:+"TRUE"}
+# if $cdtest not set cdrom1="FALSE", else "TRUE"
+cdrom1=${cdtest:-"FALSE"}
+# IDE is expected default, test for the virtual disk image type should
+# be done while creating the runscripts ...
+# TODO enable SCSI support instead of just disabling it.
+ide="TRUE"
+scsi="FALSE"
+hddrv="ide"
+audio="true"
+remotedesktopport="590${VM_ID}"
+
+# Enable 3D
+enable3d=$(grep -i -o "<enable3d param=.*" "${xmlfile}" | awk -F '"' '{print $2}' | rv_clean_string)
+
+# Add rw share for home dir
+homesharepath="${HOME}/PERSISTENT"
+homesharename="home"
+
+# Add common share
+commonsharepath="${HOME}/SHARE"
+commonsharename="share"
+
+# Set hostname: using original hostname and adding string
+hostname="virt-$(hostname)"
+
+writelog "\tVM Hostname:\t\t$hostname"
+
diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/set_runvirt_hardware_variables_legacy.inc b/remote/modules/run-virt/data/opt/openslx/scripts/set_runvirt_hardware_variables_legacy.inc
new file mode 100644
index 00000000..0da5e2be
--- /dev/null
+++ b/remote/modules/run-virt/data/opt/openslx/scripts/set_runvirt_hardware_variables_legacy.inc
@@ -0,0 +1,89 @@
+###########################################
+# Include: Set hardware related variables #
+###########################################
+
+# take last two digits of current pid...
+VM_ID=$(expr substr $$ $(expr ${#$} - 1) 2)
+
+# Make sure cpu_cores is not empty
+cpu_cores=${cpu_cores:-"1"}
+
+# Amount of memory for the VM. Be generous if diff is written to HDD
+if mount | grep -q '^/dev/sd.*on.*/tmp'; then
+ reserve=20
+ min=768
+ max=1536
+else
+ reserve=65
+ min=768
+ max=8192
+fi
+
+# Calculate absulute amount of RAM that should stay available to the host
+reserve="$[ ( $totalmem * $reserve ) / 100 ]"
+# Respect some upper and lower bounds for the host amount
+[ "$reserve" -lt "$min" ] && reserve="$min"
+[ "$reserve" -gt "$max" ] && reserve="$max"
+
+# Get a result which can be divided by 4
+mem="$[ ( ( $totalmem - $reserve ) / 4 ) * 4 ]"
+if [ -n "$mainvirtmem" ]; then
+ forcemem="$[ "$mainvirtmem" / 4 * 4 ]"
+ mem="$forcemem"
+fi
+hostmem="$[ $totalmem - $mem ]"
+
+# TODO: We should only generate the suffix here (last 3 octets) as the first 3 are
+# dependant on the virtualizer/emulator. Check if any run-virt.include still relies on
+# $macguestpart/$macaddr. If so, fix it to use its specific first 3 bytes
+# and append $macaddrssuffix
+macguestpart="00:50:56:${VM_ID}"
+machostpart=$(echo "${hostmacaddr}" | awk -F ":" '{print $(NF-1)":"$NF}')
+macaddr=$(echo "${macguestpart}:${machostpart}" | tr "[a-z]" "[A-Z]")
+macaddrsuffix=$(echo "${VM_ID}:${machostpart}" | tr "[a-z]" "[A-Z]")
+
+if ! echo "$macaddrsuffix" | grep -q -E '^[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}$'; then
+ slxlog "virt-mac" "Could not properly generate mac address suffix (got $macaddrsuffix)"
+fi
+
+# Virtual fd/cd/dvd and drive devices, floppy b: for configuration
+# if $floppy_0 from virtualization.conf set then fdtest="TRUE"
+fdtest=${floppy_0:+"TRUE"}
+# if $fdtest not set floppy0="FALSE", else "TRUE"
+floppy0=${fdtest:-"FALSE"}
+floppy1="TRUE"
+floppy1name="$VMCHOOSER_DIR/data/loopimg/fd.img"
+# if $cdrom_0 from virtualization.conf set then cdtest="TRUE"
+cdtest=${cdrom_0:+"TRUE"}
+# if $cdtest not set cdrom0="FALSE", else "TRUE"
+cdrom0=${cdtest:-"FALSE"}
+# if $cdrom_1 from virtualization.conf set then cdtest="TRUE"
+cdtest=${cdrom_1:+"TRUE"}
+# if $cdtest not set cdrom1="FALSE", else "TRUE"
+cdrom1=${cdtest:-"FALSE"}
+# IDE is expected default, test for the virtual disk image type should
+# be done while creating the runscripts ...
+# TODO enable SCSI support instead of just disabling it.
+ide="TRUE"
+scsi="FALSE"
+hddrv="ide"
+audio="true"
+remotedesktopport="590${VM_ID}"
+
+
+# Enable 3D
+enable3d=$(grep -i -o "<enable3d param=.*" "${xmlfile}" | awk -F '"' '{print $2}' | rv_clean_string)
+
+# Add rw share for home dir
+homesharepath="${HOME}/PERSISTENT"
+homesharename="home"
+
+# Add common share
+commonsharepath="${HOME}/SHARE"
+commonsharename="share"
+
+# Set hostname: using original hostname and adding string
+hostname="virt-$(hostname)"
+
+writelog "\tVM Hostname:\t\t$hostname"
+
diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/set_runvirt_variables.inc b/remote/modules/run-virt/data/opt/openslx/scripts/set_runvirt_variables.inc
new file mode 100644
index 00000000..9525a290
--- /dev/null
+++ b/remote/modules/run-virt/data/opt/openslx/scripts/set_runvirt_variables.inc
@@ -0,0 +1,14 @@
+######################################################
+# Include: Declaration of run-virt default variables #
+######################################################
+
+VMCHOOSER_DIR="/opt/openslx/vmchooser"
+VMCHOOSER_CONF_DIR="$VMCHOOSER_DIR/config"
+LOGFILE="/var/log/openslx/run-virt.${USER}.$$.log"
+
+# include general configuration from vmchooser
+[ -f "$VMCHOOSER_CONF_DIR/vmchooser.conf" ] && . "$VMCHOOSER_CONF_DIR/vmchooser.conf"
+# load general virtualization information
+[ -f "$VMCHOOSER_CONF_DIR/virtualization.conf" ] && . "$VMCHOOSER_CONF_DIR/virtualization.conf"
+# Load general openslx config
+[ -f "/opt/openslx/config" ] && . "/opt/openslx/config"
diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/setup_image_access.inc b/remote/modules/run-virt/data/opt/openslx/scripts/setup_image_access.inc
new file mode 100644
index 00000000..9e0caa5e
--- /dev/null
+++ b/remote/modules/run-virt/data/opt/openslx/scripts/setup_image_access.inc
@@ -0,0 +1,54 @@
+###########################################################
+# Include: Setup dnbd for image access, nfs/cifs fallback #
+###########################################################
+
+writelog "Now in setup_image_access.inc ..."
+
+# Try to use dnbd3 to access the image
+unset vm_diskfile
+unset vm_revision
+unset dnbd3
+unset dnbd3error
+if [ -n "$SLX_DNBD3_SERVERS" -o -n "$SLX_DNBD3_PRIO_SERVERS" ] && [ "x$SLX_VM_DNBD3" = "xyes" ]; then
+ if [ -e "/dev/dnbd0" -a -e "/var/run/dnbd3.socket" ]; then
+ # Shuffle server list
+ [ -n "$SLX_DNBD3_SERVERS" ] && TMP_SERVERS=$(for SRV in $SLX_DNBD3_SERVERS; do echo "$RANDOM $SRV"; done | sort -u | sed -r 's/^[0-9]+ //')
+ for SRV in $SLX_DNBD3_PRIO_SERVERS $TMP_SERVERS; do
+ dnbd3=$(dnbd3-client -h "$SRV" -i "${imgrelpath}" -r 0)
+ RET=$?
+ if [ "$RET" = "0" ]; then
+ vm_revision=$(cat "/sys/block/${dnbd3#/dev/}/net/rid")
+ writelog "DNBD3: $vm_diskfile on $dnbd3 with rid $vm_revision"
+ vm_diskfile="$dnbd3"
+ vmpath="$vm_diskfile"
+ break
+ fi
+ dnbd3error="$dnbd3error ($RET/$dnbd3)"
+ usleep 200000
+ done
+ if [ -z "$vm_diskfile" ]; then
+ slxlog "virt-dnbd3" "No dnbd3 server for ${imgrelpath} found ($SLX_DNBD3_PRIO_SERVERS $TMP_SERVERS $dnbd3error), trying NFS/CIFS..."
+ writelog "No working dnbd3 server found :-("
+ fi
+ else
+ writelog "Can't use dnbd3 as it's not loaded, or the daemon is not running..."
+ fi
+else
+ writelog "Can't use dnbd3 as no servers are given in config"
+fi
+
+# $vm_diskfile will be empty if dnbd3 is not used or failed. Let's try to fall back to NFS/CIFS via file system
+if [ -z "$vm_diskfile" ]; then
+ new_vmpath=$(ls "${vmpath}.r"* | grep -E -o '\.r[0-9]+$' | grep -o -E '[0-9]+' | sort -n | tail -1)
+ [ -n "$new_vmpath" ] && vmpath="${vmpath}.r${new_vmpath}"
+ vm_diskfile="$vmpath"
+fi
+
+# Check if virtual machine container file exists
+if ! [ -e "${vmpath}" ]; then
+ slxlog "virt-image-missing" "VM image $vmpath not found!"
+ writelog "Virtual machine image ${vmpath} not found!"
+ cleanexit 1
+fi
+
+writelog "Used diskfile: $vm_diskfile"
diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/setup_printer_lpd.inc b/remote/modules/run-virt/data/opt/openslx/scripts/setup_printer_lpd.inc
new file mode 100644
index 00000000..425ae9d9
--- /dev/null
+++ b/remote/modules/run-virt/data/opt/openslx/scripts/setup_printer_lpd.inc
@@ -0,0 +1,34 @@
+#####################################
+# Include: Setup printer daemon LPD #
+#####################################
+
+QUEUE="STANDARD" # This has to match the queue you configured in your VM
+USER="$(/usr/bin/whoami)"
+SPOOLDIR=
+
+### Disabled: 100megs is not enough, some jobs are HUGE, try to use temp which should be on disk
+## Try using user's tmpfs home first, as it gets wiped on logout
+#if [ -n "${HOME}" ] && [ -w "${HOME}" ]; then
+# SPOOLDIR="${HOME}/.spool"
+# mkdir -p "${SPOOLDIR}/${QUEUE}"
+#fi
+# If failed, try to fall back to /tmp
+
+if [ -z "${SPOOLDIR}" ] || [ ! -w "${SPOOLDIR}/${QUEUE}" ]; then
+ SPOOLDIR="/tmp/printergui-${USER}-$$-${RANDOM}"
+ rm -rf -- "${SPOOLDIR}"
+ if ! mkdir -p "${SPOOLDIR}/${QUEUE}"; then
+ slxlog "virt-spooldir" "Could not create spool directory ($SPOOLDIR) for $USER - printing will not work!"
+ # TODO: Warn user
+ fi
+ chmod 0700 "${SPOOLDIR}/${QUEUE}"
+fi
+
+# Start the lpdaemon listening on the given port
+# TODO: externalize with something like runvirt.d (other parts might benefit from that too)
+tcpsvd -E 192.168.101.1 5515 \
+ lpd "$SPOOLDIR" \
+ ash -c "/opt/openslx/cups/printergui '${USER}' \"${SPOOLDIR}/${QUEUE}/\$DATAFILE\"" &
+
+# PID to kill the process
+PID_LPD="$!"
diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/setup_sound.inc b/remote/modules/run-virt/data/opt/openslx/scripts/setup_sound.inc
new file mode 100644
index 00000000..7b505474
--- /dev/null
+++ b/remote/modules/run-virt/data/opt/openslx/scripts/setup_sound.inc
@@ -0,0 +1,62 @@
+########################
+# Include: Setup sound #
+########################
+# 8086:1e20: Sound card in bwPX4
+
+if lspci -n | grep -E -i '8086:1e20( |$)'; then
+ VOL="100%" # bwPC 4: Speaker too quiet :-(
+else
+ VOL="85%"
+fi
+
+if true; then
+ # detecting which card is to be used
+ echo "Detecting which sound card to use ..."
+ PROC="/proc/asound/cards"
+ if [ ! -r "$PROC" ]; then
+ echo "'${PROC}' not found or not readable."
+ SOUND_CARD_INDEX=0
+ SOUND_CARD_COUNT=1
+ else
+ # Try to filter HDMI cards first
+ SOUND_CARD_INDEX=$(grep -v -i 'HDMI' "${PROC}" | grep -E -o '^[[:space:]]{0,2}[0-9]+[[:space:]]+' | head -n 1)
+ # If empty, try again with all
+ [ -z "${SOUND_CARD_INDEX}" ] && SOUND_CARD_INDEX=$(cat "${PROC}" | grep -E -o '^[[:space:]]{0,2}[0-9]+[[:space:]]+' | head -n 1)
+ if [ -z "${SOUND_CARD_INDEX}" ]; then
+ echo "No sound card found."
+ SOUND_CARD_INDEX=0
+ fi
+ SOUND_CARD_COUNT=$(grep -E '^[[:space:]]{0,2}[0-9]+[[:space:]]+' "${PROC}" | wc -l)
+ fi
+
+ SOUND_CARD_INDEX="$(grep -E -o '[0-9]+' <<<$SOUND_CARD_INDEX)"
+ echo "Detected sound card index is: $SOUND_CARD_INDEX"
+ echo "Sound card count: $SOUND_CARD_COUNT"
+
+ # Adjust sound volume (playback)... Random mixer names we have encountered during testing
+ echo "Setting up volume..."
+ amixer -q -c "$SOUND_CARD_INDEX" sset 'Master' "$VOL" unmute
+ amixer -q -c "$SOUND_CARD_INDEX" sset 'PCM' "$VOL" unmute
+ amixer -q -c "$SOUND_CARD_INDEX" sset 'CD' "$VOL" unmute
+ amixer -q -c "$SOUND_CARD_INDEX" sset 'Headphone' "$VOL" unmute
+ amixer -q -c "$SOUND_CARD_INDEX" sset 'Front' "$VOL" unmute
+ amixer -q -c "$SOUND_CARD_INDEX" sset 'Speaker' "$VOL" unmute
+ # Recording. It seems that (most) devices need the volume set to 0, so you
+ # don't hear your own mic input, but should be unmuted. Also on some cards,
+ # you need to set the cap option on the mic you want to use, while other cards
+ # will just ignore that option.
+ # Plus, most cards have a Capture mixer, which needs to be set to cap too, and
+ # have its volume turned up. (There'll probably be some cards that need yet
+ # another setup, but this works for now on 4 tested cards)
+ amixer -q -c "$SOUND_CARD_INDEX" sset 'Rear Mic Boost' "50%" cap unmute
+ amixer -q -c "$SOUND_CARD_INDEX" sset 'Rear Mic' "0%" cap unmute
+ amixer -q -c "$SOUND_CARD_INDEX" sset 'Front Mic Boost' "50%" cap unmute
+ amixer -q -c "$SOUND_CARD_INDEX" sset 'Front Mic' "0%" cap unmute
+ amixer -q -c "$SOUND_CARD_INDEX" sset 'Mic Boost' "50%" cap unmute
+ amixer -q -c "$SOUND_CARD_INDEX" sset 'Mic' "0%" cap unmute
+ amixer -q -c "$SOUND_CARD_INDEX" sset 'Capture' "100%" cap unmute
+ amixer -q -c "$SOUND_CARD_INDEX" sset 'Input Source' 'Front Mic' # Let's hope nobody uses rear mic...
+ # fix random static noise when starting vmplayer when module snd_pcsp (not pcspkr) is loaded
+ amixer -q -c pcsp sset Master "0%" mute
+ echo "Done setting up volume."
+fi >> "${LOGFILE}" 2>&1
diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/setup_virtual_floppy.inc b/remote/modules/run-virt/data/opt/openslx/scripts/setup_virtual_floppy.inc
new file mode 100644
index 00000000..4b8e10aa
--- /dev/null
+++ b/remote/modules/run-virt/data/opt/openslx/scripts/setup_virtual_floppy.inc
@@ -0,0 +1,21 @@
+##############################################
+# Include: Setup virtual floppy for drive b: #
+##############################################
+
+# Copy guest configuration (with added information) config.xml to be accessed
+# via virtual floppy
+cp "$xmlfile" "$VMCHOOSER_DIR/fd-loop/config.xml"
+
+# Add another file with resolution information
+xrandr | grep -o -E 'connected\s*(primary)?\s*[0-9]+x[0-9]+\+0\+0' | grep -o -E '[0-9]+x[0-9]+' | head -n 1 > "$VMCHOOSER_DIR/fd-loop/hostres.txt"
+
+# Add our magic openslx binary that sets the correct guest resolution
+cp "$VMCHOOSER_DIR/data/openslx.exe" "$VMCHOOSER_DIR/fd-loop/"
+cp "$VMCHOOSER_DIR/data/SHARELWS.BAT" "$VMCHOOSER_DIR/fd-loop/"
+rm "$VMCHOOSER_DIR/fd-loop/SHARELW.CFG"
+
+for SHARE in $(grep -o -E '^SLX_SHARE_.*_PATH' /opt/openslx/config); do
+ eval "echo -n \$${SHARE} | /opt/openslx/bin/tr '/' '\' " >> "$VMCHOOSER_DIR/fd-loop/SHARELW.CFG"
+ #eval echo -n " \$${SHARE%PATH}AUTH_PASS /user:\$${SHARE%PATH}AUTH_USER" >> "$VMCHOOSER_DIR/fd-loop/SHARELW.CFG"
+ echo -e '\r\n' >> "$VMCHOOSER_DIR/fd-loop/SHARELW.CFG"
+done
diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/setup_vm_hypervisor.inc b/remote/modules/run-virt/data/opt/openslx/scripts/setup_vm_hypervisor.inc
new file mode 100644
index 00000000..b7bb8f01
--- /dev/null
+++ b/remote/modules/run-virt/data/opt/openslx/scripts/setup_vm_hypervisor.inc
@@ -0,0 +1,19 @@
+##########################################################################
+# Include: Setup virtual machine hypervisor via vm-specific include file #
+##########################################################################
+
+# Get all virtual machine specific stuff from the respective include file
+if [ ! -e "$VMCHOOSER_DIR/$xmlvirt/run-virt.include" ] ; then
+ # TODO: Tell user
+ slxlog "virt-plugin-missing" "Could not find run-virt.include for $xmlvirt ($VMCHOOSER_DIR/$xmlvirt/run-virt.include)"
+ writelog "Failed because of missing ${xmlvirt} plugin."
+ cleanexit 1
+fi
+
+ self="${xmlvirt}"
+
+# Now including the hypervisor specific include file:
+if ! source "$VMCHOOSER_DIR/$xmlvirt/run-virt.include"; then
+ slxlog "virt-plugin-error" "run-virt.include for $xmlvirt could not be sourced (contains syntax errors?)" "$xmlvirt"
+ writelog "Erroneous run-virt.include for $xmlvirt"
+fi
diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/start_pvs.inc b/remote/modules/run-virt/data/opt/openslx/scripts/start_pvs.inc
new file mode 100644
index 00000000..90cd237b
--- /dev/null
+++ b/remote/modules/run-virt/data/opt/openslx/scripts/start_pvs.inc
@@ -0,0 +1,11 @@
+#######################################################
+# Include: Starting PVS (Pool Video switch) if wanted #
+#######################################################
+
+# if [ -e /etc/xdg/autostart/pvsgui.desktop ]; then
+# /usr/local/bin/pvsgui -p 2 -b >/dev/null 2>&1 &
+# fi
+
+if [[ "$DO_PROFILE" -ge "1" ]]; then
+ wget "http://132.230.8.113/profile/do.php?action=start" &
+fi
diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/start_windowmanager.inc b/remote/modules/run-virt/data/opt/openslx/scripts/start_windowmanager.inc
new file mode 100644
index 00000000..a3149c24
--- /dev/null
+++ b/remote/modules/run-virt/data/opt/openslx/scripts/start_windowmanager.inc
@@ -0,0 +1,18 @@
+####################################################
+# Include: Start windowmanager for easier handling #
+####################################################
+
+# Some problems may arise with windows opening in background when
+# using eg. vmware without a window manager.
+
+for dm in openbox kwin xfwm4 metacity blackbox twm fvwm2 ; do
+ if which $dm >/dev/null 2>&1 ; then
+ if [ "$dm" = "fvwm2" ] ; then
+ echo "EdgeScroll 0 0" > ${redodir}/fvwm
+ fvwm2 -f ${redodir}/fvwm >/dev/null 2>&1 &
+ else
+ $dm >/dev/null 2>&1 &
+ fi
+ break
+ fi
+done
diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/systemd-run_virt_env b/remote/modules/run-virt/data/opt/openslx/scripts/systemd-run_virt_env
index c39803cd..2d1ceb0f 100755
--- a/remote/modules/run-virt/data/opt/openslx/scripts/systemd-run_virt_env
+++ b/remote/modules/run-virt/data/opt/openslx/scripts/systemd-run_virt_env
@@ -53,6 +53,8 @@ mount -n -t msdos -o loop,umask=000 "${VMCHOOSER_DIR}/data/loopimg/fd.img" "${VM
# setup more scratch space for virtual machines, if configured
mkdir -p /tmp/virt /var/log/samba /run/samba
+chmod +rwxt /tmp/virt
+
# enable normal users to setup the extended virtual machine redo file space
# and image source via network block device (NBD only at the moment)
# allow to start/stop samba on virtual devices (latter one ignores multiple
diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/vmchooser-run_virt b/remote/modules/run-virt/data/opt/openslx/scripts/vmchooser-run_virt
index 21c01df6..9845ead6 100755
--- a/remote/modules/run-virt/data/opt/openslx/scripts/vmchooser-run_virt
+++ b/remote/modules/run-virt/data/opt/openslx/scripts/vmchooser-run_virt
@@ -19,630 +19,91 @@
# fied virtualization tool.
################################################################################
-################################################################################
-### Define default dirs / get configs
-################################################################################
-
-VMCHOOSER_DIR="/opt/openslx/vmchooser"
-VMCHOOSER_CONF_DIR="$VMCHOOSER_DIR/config"
-
-# include general configuration from vmchooser
-[ -f "$VMCHOOSER_CONF_DIR/vmchooser.conf" ] && . "$VMCHOOSER_CONF_DIR/vmchooser.conf"
-# load general virtualization information
-[ -f "$VMCHOOSER_CONF_DIR/virtualization.conf" ] && . "$VMCHOOSER_CONF_DIR/virtualization.conf"
-# Load general openslx config
-[ -f "/opt/openslx/config" ] && . "/opt/openslx/config"
-
-################################################################################
-### Functions used throughout the script
-################################################################################
-
-# function to write to stdout and logfile
-LOGFILE="/var/log/openslx/run-virt.${USER}.$$.log"
-writelog () {
- # write to stdout
- echo -e "$1"
- # log into file
- echo -e "$1" >> "${LOGFILE}"
-}
-
-# Clean exit will be called at the end of this script
-cleanexit () {
- sleep 1
- # remove config dirs when exit
- if echo "${RMDIRS}" 2>/dev/null | grep -q "${xmlvirt}"; then
- writelog "${xmlvirt} exited. Cleaning up... \c"
- rm -rf -- ${RMDIRS} >/dev/null 2>&1
- writelog "done"
- fi
- # Disconnect dnbd3 device
- if [ -n "$dnbd3" ]; then
- for timeout in 1 1 2; do
- dnbd3-client -d "$dnbd3" -c -d "$dnbd3" -c && break
- writelog "dnbd3 still busy...."
- sleep "$timeout"
- done
- fi
- # Kill LPD
- kill "$PID_LPD"
- # Remove spool directory for printjobs from VM
- [ -n "${SPOOLDIR}" ] && rm -rf -- "${SPOOLDIR}"
-
- [ $# -gt 0 ] && exit "$1"
- exit 129 # No exit code was given :/
-}
-
-function rv_clean_string ()
-{
- if [ "$#" -ge 1 ]; then
- echo "$@" | tr '[A-Z]' '[a-z]' | tr -d -c '[a-z0-9]'
- else
- tr '[A-Z]' '[a-z]' | tr -d -c '[a-z0-9]'
- fi
-}
-
-trap cleanexit SIGINT SIGTERM
-
-# check for important files used
-filecheck ()
-{
- filecheck=$(LANG=us ls -lh ${diskfile} 2>&1)
- writelog "Filecheck:\n${filecheck}\n"
- noimage=$(echo ${filecheck} | grep -i "no such file or directory" | wc -l)
- rightsfile=${diskfile}
-
- # check if link
- if [ -L "${diskfile}" ]; then
- # take link target
- rightsfile=$(ls -lh ${diskfile} 2>&1 | awk -F '-> *' '{print $2}')
- rightsfile=${vmdir}/${rightsfile}
- filecheck=$(LANG=us ls -lh ${rightsfile} 2>&1)
- fi
-
- # does file exist
- if [ "${noimage}" -ge "1" ]; then
- writelog "Virtual Machine Image Problem:\c "
- writelog "\tThe image you've specified doesn't exist."
- writelog "Filecheck says:\c "
- writelog "\t\t${diskfile}:\n\t\t\tNo such file or directory"
- writelog "Hint:\c "
- writelog "\t\t\tCompare spelling of the image with your options.\n"
- exit 1
- fi
-
- # readable by calling user
- if ! [ -r "${diskfile}" >/dev/null 2>&1 \
- -o -r "${diskfile}" >/dev/null 2>&1 ]; then
- writelog "Vmware Image Problem:\c "
- writelog "\tThe image you've specified has wrong rights."
- writelog "Filecheck says:\t\t$(echo ${filecheck} \
- | awk '{print $1" "$3" "$4}') ${rightsfile}"
- writelog "Hint:\t\t\tChange rights with: chmod a+r ${rightsfile}\n"
- exit 1
- fi
-
- # writable (for persistent-mode)?
- if ! [ -w "${diskfile}" >/dev/null 2>&1 \
- -o -w "${diskfile}" >/dev/null 2>&1 ] \
- && [ "${np}" = "independent-persistent" ]; then
- writelog "Vmware Image Problem:\c "
- writelog "\tThe image you have specified has wrong rights."
- writelog "Filecheck says:\t\t$(echo ${filecheck} \
- | awk '{print $1" "$3" "$4}') ${rightsfile}"
- writelog "Hint:\t\t\tUse nonpersistent-mode or change rights to rw\n"
- exit 1
- fi
-}
-
-################################################################################
-### Get XML file and dir
-################################################################################
-
-## Added for persistent support.
-diskmode='nonpersistent'
-if [[ "$(grep --extended-regexp \
- '< *short_description *param=".+ --persistent--"' "$1")" ]]; then
- diskmode='persistent'
- imageFilePath="$(grep -io '<image_path param=.*"' "$1" | sed -e "s/&.*;/; /g" | awk -F '"' '{ print $2 }')"
- [ -z "$imageFilePath" ] && imageFilePath="$(grep -io '<image_name param=.*"' "$1" | sed -e "s/&.*;/; /g" | awk -F '"' '{ print $2 }')"
- originalXMLFilePath="$(grep -io '<original_xml_file_path param=.*"' "$1" \
- | sed -e "s/&.*;/; /g" | awk -F '"' '{ print $2 }')"
- originalImageFileName="$(grep -io '<image_name param=.*"' \
- "$originalXMLFilePath" | sed -e "s/&.*;/; /g" | awk -F '"' \
- '{ print $2 }')"
- originalVMDKFilePath="$(dirname \
- "$originalXMLFilePath")/${originalImageFileName}"
- # Added to workaround path prefix coming from temporary generated xml file
- # by vmchooser.
- if [[ "$(grep --extended-regexp '^/tmp/tmp\.[^\/]+/' <<< \
- "$imageFilePath")" ]]; then
- imageFilePath=$(sed -r 's/^\/?tmp\/[^\/]+\///g' \
- <<< "$imageFilePath")
- sed -ir \
- "s/(<image_name param=\")[^\"]*(\")/\\1$(sed -e \
- 's/\\/\\\\/g' -e 's/\//\\\//g' -e \
- 's/&/\\\&/g' <<< "$imageFilePath")\\2/g" "$1"
- fi
- # Create linked clone if not exists.
- if [ ! -f "$imageFilePath" ]; then
- mkdir -p "$(dirname "$imageFilePath")" && \
- bash "$(dirname "$0")/vmchooser-clc" "$originalXMLFilePath" \
- "$imageFilePath" --debug --verbose &>"${LOGFILE}"
- fi
-fi
-##
-
-# absolute or relative path?
-xmlfile=$1
-if ls "${xmlfile}" 2>/dev/null | grep '/' >/dev/null 2>&1; then
- xmlpath=$(dirname "${xmlfile}")
- xmlfile=$(basename "${xmlfile}")
-else
- xmlpath=${vmchooser_xmlpath}
-fi
-# full path
-xmlfile="${xmlpath}/${xmlfile%.xml}.xml"
-
-DO_PROFILE="$(grep -c -E -i '<\s*profile\s*param="?(true|yes)"?' "$xmlfile")"
-
-################################################################################
-### Sanity checks
-################################################################################
-
-# test if the xml file is valid
-if ! [ -r "${xmlfile}" ]; then
- writelog "${xmlfile} not a readable XML file!"
- slxlog "virt-nonreadable-xml" "XML file not readable: $xmlfile"
- exit 1
-fi
-
-# test if XML file
-if ! grep -q '<?xml' "${xmlfile}"; then
- writelog "Submitted configuration file ${xmlfile} seems to have wrong XML format"
- slxlog "virt-invalid-xml" "Malformed XML file: $xmlfile" "$xmlfile"
- exit 1
-fi
-
-# check for running in graphical environment otherwise no much use here
-if [ -z "$DISPLAY" ]; then
- echo -e "\n\tStart only within a graphical desktop!\n"
- exit 1
-fi
-
-################################################################################
-### Logo for console
-################################################################################
-
-cat <<EOL
- __ __
- .----.--.--.-----.___.--.--.|__|.----.| |_
- | _| | | |___| | || || _|| _|
- |__| |_____|__|__| \___/ |__||__| |____|
- OpenSLX virtual machine environment preparation script ...
-
-EOL
-
-################################################################################
-### Read needed variables from XML file
-################################################################################
-
-writelog "Starting configuration..."
-writelog "\tLogfile:\t\t${LOGFILE}"
-writelog "\t/tmp info:\t\t$(df -h | grep " /tmp$" | awk '{print $2}') \c"
-writelog "$(grep "/tmp " /proc/mounts | awk '{print $1" "$2" "$3" "$4}')"
-writelog "\tVM XML dir:\t\t$(dirname "${xmlfile}")"
-writelog "\tXML file:\t\t${xmlfile}"
-writelog "Enable 3D:\t\t${enable3d}"
-writelog "VM config:"
-
-# Name of the virt image
-imgname=$(grep -io '<image_path param=.*"' "${xmlfile}" | sed -e "s/&.*;/; /g" | awk -F '"' '{ print $2 }')
-imgrelpath=$(grep -io '<image_name param=.*"' "${xmlfile}" | sed -e "s/&.*;/; /g" | awk -F '"' '{ print $2 }')
-[ -z "$imgname" ] && imgname="${imgrelpath}"
-imgrelpath=${imgrelpath#/mnt/vmstore/}
-
-## Added for persistent support.
-if [[ "$userBranchFilePath" ]]; then
- imgname="$userBranchFilePath"
-fi
-##
-
-# Imagename w/ full path
-if echo "${imgname}" | grep -q '^/'; then
- imgpath="$(dirname "${imgname}")"
- imgname="$(basename "${imgname}")"
- vmpath="${imgpath}/${imgname}"
- # If old vmchooser binary stuff
- # We do not need folder name as it is already included by vmchooser
-elif echo "${xmlfile}" | grep -q '^/tmp/'; then
- vmpath="$imgname"
- imgname="$(basename "${imgname}")"
-## Added for persistent support.
-elif [[ "$userBranchFilePath" ]]; then
- vmpath="$userBranchFilePath"
-##
- # Else use same path as xml
-else
- imgpath="${xmlpath}"
- vmpath="${imgpath}/${imgname}"
-fi
-
-
-# Name of the virt machine, sed because of Windows formatting
-vm_name=$(grep -o 'short_description param=.*"' "${xmlfile}" \
-| sed -e "s/&.*;/; /g" | awk -F '"' '{print $2}')
-# If ${vm_name} not defined use ${xmlfile}
-vm_name="${vm_name:-${xmlfile%.xml}}"
-
-# Define vm_shortname since vm_name can be very long
-vm_shortname="$(basename "${xmlfile%.xml}" | sed -e "s, ,-,g")"
-
-# vm_name = displayname, define for old scripts
-displayname="${vm_name}"
-
-# image is for the following virtual machine
-xmlvirt=$(grep -o 'virtualmachine param=.*"' "${xmlfile}" \
-| sed -e "s/&.*;/; /g" | awk -F '"' '{print $2}')
-
-# choose the proper virtualization/emulator plugin
-[ "x${xmlvirt}" != "x" -a "x${xmlvirt}" != "xqemukvm" -a "x${xmlvirt}" != "xvirtualbox" -a "x${xmlvirt}" != "xvmware" ] && xmlvirt="emufe"
-
-# make a guess from the filename extension if ${xmlvirt} is empty
-# (not set within the XML file)
-# TODO: implement possibility to submit own configuration files
-if [ -z "${xmlvirt}" ] && [ -n "${additional_config}" ]; then
- writelog "No virtual machine parameter defined in ${xmlfile}"
- writelog "Trying to guess VM...\c"
- case "$(cat ${additional_config} | tr \"[A-Z]\" \"[a-z]\")" in
- *config.version*|*virtualhw.version*|*independent-nonpersistent*|*vmdk*)
- xmlvirt="vmware"
- ;;
- *innotek*|*virtualbox*)
- xmlvirt="virtualbox"
- ;;
- *qemu*|*kvm*)
- xmlvirt="qemukvm"
- ;;
- *)
- xmlvirt="none"
- ;;
- esac
- elif [ -z "${xmlvirt}" ]; then
- case "$(echo ${imgname##*.} | tr \"[A-Z]\" \"[a-z]\")" in
- vmdk)
- xmlvirt="vmware"
- ;;
- vbox|vdi)
- xmlvirt="virtualbox"
- ;;
- qcow*)
- xmlvirt="qemukvm"
- ;;
- *)
- xmlvirt="emufe"
- ;;
- esac
- writelog "result:\t${xmlvirt}"
-fi
-
-# Definition of the client system
-vmostype=$(grep -io '<os param=.*"' "${xmlfile}" | awk -F '"' '{ print $2 }' | tr "[A-Z]" "[a-z]")
-
-# Definition of the networking the client system is connected to
-network_kind=$(grep -io '<network param=.*"' "${xmlfile}" | awk -F '"' '{ print $2 }' | tr "[A-Z]" "[a-z]")
-network_card=$(grep -io '<netcard param=.*"' "${xmlfile}" | awk -F '"' '{ print $2 }'| tr "[A-Z]" "[a-z]")
-override_hddtype=$(grep -io '<hddtype param=.*"' "${xmlfile}" | awk -F '"' '{ print $2 }'| tr "[A-Z]" "[a-z]")
-
-# Set redirects to 0, see vmgrid if you want to define some
-redirects=0
-
-# Serial/parallel ports defined (e.g. "ttyS0" or "autodetect")
-serial=$(grep -io '<serialport param=.*"' "${xmlfile}" | awk -F '"' '{ print $2 }')
-parallel=$(grep -io '<parport param=.*"' "${xmlfile}" | awk -F '"' '{ print $2 }')
-
-writelog "\tVirtualization:\t\t$xmlvirt"
-writelog "\tVM name:\t\t$vm_name"
-writelog "\tVM short name:\t\t$vm_shortname"
-
-###############################################################################
-### Declaration of default variables
-###############################################################################
-
-# take last two digits of current pid...
-VM_ID=$(expr substr $$ $(expr ${#$} - 1) 2)
-
-# Make sure cpu_cores is not empty
-cpu_cores=${cpu_cores:-"1"}
-
-# Amount of memory for the VM. Be generous if diff is written to HDD
-if mount | grep -q '^/dev/sd.*on.*/tmp'; then
- reserve=20
- min=768
- max=1536
+RUNVIRTINCLUDEDIR=/opt/openslx/scripts/
+xmlfile="$1"
+
+# Functions needed by vmchooser-run_virt (writelog(), cleanexit(), rv_clean_string())
+source ${RUNVIRTINCLUDEDIR}/vmchooser_runvirt_functions.inc && trap cleanexit SIGINT SIGTERM
+# Define default dirs / get configs
+source ${RUNVIRTINCLUDEDIR}/set_runvirt_variables.inc
+# Function to detect whether we can use the new way (vmx via http) or the old way (legacy):
+source ${RUNVIRTINCLUDEDIR}/detect_legacy.inc # This yields IMGUUID, IMGVMX
+
+if [ "$LEGACY" ]; then
+ # check for important files used (filecheck()) - vestigial?
+ source ${RUNVIRTINCLUDEDIR}/check_runvirt_needed_files.inc
+ # Get XML file and dir, legacy (old way)
+ source ${RUNVIRTINCLUDEDIR}/get_xml_file_dir_legacy.inc # xmlfile=$1
+ # xml file sanity checks, legacy
+ source ${RUNVIRTINCLUDEDIR}/check_runvirt_xml_sanity_legacy.inc
+ # print console logo
+ source ${RUNVIRTINCLUDEDIR}/print_runvirt_console_logo.inc
+ # Read needed variables from XML file
+ source ${RUNVIRTINCLUDEDIR}/get_xml_file_variables_legacy.inc
+ # Declaration of hardware relatedt variables
+ source ${RUNVIRTINCLUDEDIR}/set_runvirt_hardware_variables_legacy.inc
+ # Sound setup the rest of the environment and run the configured vm
+ source ${RUNVIRTINCLUDEDIR}/setup_sound.inc
+ # Start printer daemon
+ source ${RUNVIRTINCLUDEDIR}/setup_printer_lpd.inc
+ # Setup virtual floppy b: for windows guests with config.xml, openslx.exe etc.
+ source ${RUNVIRTINCLUDEDIR}/setup_virtual_floppy.inc
+ # Try to use dnbd3 to access the image, nfs/cifs fallback
+ source ${RUNVIRTINCLUDEDIR}/setup_image_access.inc
+ # Get all virtual machine specific stuff from the respective include file
+ source ${RUNVIRTINCLUDEDIR}/setup_vm_hypervisor.inc
+ # start a windowmanager for easier handling
+ source ${RUNVIRTINCLUDEDIR}/start_windowmanager.inc
+ # Start poolvideoswitch if DO_PROFILE has been set (WARNING: fixed IP!)
+ source ${RUNVIRTINCLUDEDIR}/start_pvs.inc
+ # Check if tcpsvd is running. Do not check immediately after spawning,
+ # as this could result in success even if it's not really working.
+ source ${RUNVIRTINCLUDEDIR}/check_lpd.inc
else
- reserve=65
- min=768
- max=8192
-fi
-
-# Calculate absulute amount of RAM that should stay available to the host
-reserve="$[ ( $totalmem * $reserve ) / 100 ]"
-# Respect some upper and lower bounds for the host amount
-[ "$reserve" -lt "$min" ] && reserve="$min"
-[ "$reserve" -gt "$max" ] && reserve="$max"
+ # check for important files used (filecheck()) - vestigial?
+ # This include does not currently work. TODO.
+ # source ${RUNVIRTINCLUDEDIR}/check_runvirt_needed_files.inc && filecheck
-# Get a result which can be divided by 4
-mem="$[ ( ( $totalmem - $reserve ) / 4 ) * 4 ]"
-if [ -n "$mainvirtmem" ]; then
- forcemem="$[ "$mainvirtmem" / 4 * 4 ]"
- mem="$forcemem"
-fi
-hostmem="$[ $totalmem - $mem ]"
+ # Read needed variables from XML file
+ source ${RUNVIRTINCLUDEDIR}/get_xml_file_variables.inc
-# TODO: We should only generate the suffix here (last 3 octets) as the first 3 are
-# dependant on the virtualizer/emulator. Check if any run-virt.include still relies on
-# $macguestpart/$macaddr. If so, fix it to use its specific first 3 bytes
-# and append $macaddrssuffix
-macguestpart="00:50:56:${VM_ID}"
-machostpart=$(echo "${hostmacaddr}" | awk -F ":" '{print $(NF-1)":"$NF}')
-macaddr=$(echo "${macguestpart}:${machostpart}" | tr "[a-z]" "[A-Z]")
-macaddrsuffix=$(echo "${VM_ID}:${machostpart}" | tr "[a-z]" "[A-Z]")
+ # Sound setup the rest of the environment and run the configured vm
+ source ${RUNVIRTINCLUDEDIR}/setup_sound.inc
-if ! echo "$macaddrsuffix" | grep -q -E '^[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}$'; then
- slxlog "virt-mac" "Could not properly generate mac address suffix (got $macaddrsuffix)"
-fi
+ # Declaration of hardware relatedt variables
+ source ${RUNVIRTINCLUDEDIR}/set_runvirt_hardware_variables.inc
-# Virtual fd/cd/dvd and drive devices, floppy b: for configuration
-# if $floppy_0 from virtualization.conf set then fdtest="TRUE"
-fdtest=${floppy_0:+"TRUE"}
-# if $fdtest not set floppy0="FALSE", else "TRUE"
-floppy0=${fdtest:-"FALSE"}
-floppy1="TRUE"
-floppy1name="$VMCHOOSER_DIR/data/loopimg/fd.img"
-# if $cdrom_0 from virtualization.conf set then cdtest="TRUE"
-cdtest=${cdrom_0:+"TRUE"}
-# if $cdtest not set cdrom0="FALSE", else "TRUE"
-cdrom0=${cdtest:-"FALSE"}
-# if $cdrom_1 from virtualization.conf set then cdtest="TRUE"
-cdtest=${cdrom_1:+"TRUE"}
-# if $cdtest not set cdrom1="FALSE", else "TRUE"
-cdrom1=${cdtest:-"FALSE"}
-# IDE is expected default, test for the virtual disk image type should
-# be done while creating the runscripts ...
-# TODO enable SCSI support instead of just disabling it.
-ide="TRUE"
-scsi="FALSE"
-hddrv="ide"
-audio="true"
-remotedesktopport="590${VM_ID}"
+ # Start printer daemon
+ source ${RUNVIRTINCLUDEDIR}/setup_printer_lpd.inc
+ # Setup virtual floppy b: for windows guests with config.xml, openslx.exe etc.
+ source ${RUNVIRTINCLUDEDIR}/setup_virtual_floppy.inc
-# Enable 3D
-enable3d=$(grep -i -o "<enable3d param=.*" "${xmlfile}" | awk -F '"' '{print $2}' | rv_clean_string)
+ # Get all virtual machine specific stuff from the respective include file
+ source ${RUNVIRTINCLUDEDIR}/setup_image_access.inc
-# Add rw share for home dir
-homesharepath="${HOME}/PERSISTENT"
-homesharename="home"
+ # start a windowmanager for easier handling
+ source ${RUNVIRTINCLUDEDIR}/setup_vm_hypervisor.inc
-# Add common share
-commonsharepath="${HOME}/SHARE"
-commonsharename="share"
+ # Try to use dnbd3 to access the image, nfs/cifs fallback
+ source ${RUNVIRTINCLUDEDIR}/start_windowmanager.inc
-# Set hostname: using original hostname and adding string
-hostname="virt-$(hostname)"
+ # Start poolvideoswitch if DO_PROFILE has been set (WARNING: fixed IP!)
+ source ${RUNVIRTINCLUDEDIR}/start_pvs.inc
-writelog "\tVM Hostname:\t\t$hostname"
+ # Check if tcpsvd is running. Do not check immediately after spawning,
+ # as this could result in success even if it's not really working.
+ source ${RUNVIRTINCLUDEDIR}/check_lpd.inc
-################################################################################
-### Setup the rest of the environment and run the configured vm
-################################################################################
-# 8086:1e20
-if lspci -n | grep -E -i '8086:1e20( |$)'; then
- VOL="100%" # bwPC 4: Speaker too quiet :-(
-else
- VOL="85%"
fi
-if true; then
- # detecting which card is to be used
- echo "Detecting which sound card to use ..."
- PROC="/proc/asound/cards"
- if [ ! -r "$PROC" ]; then
- echo "'${PROC}' not found or not readable."
- SOUND_CARD_INDEX=0
- SOUND_CARD_COUNT=1
- else
- # Try to filter HDMI cards first
- SOUND_CARD_INDEX=$(grep -v -i 'HDMI' "${PROC}" | grep -E -o '^[[:space:]]{0,2}[0-9]+[[:space:]]+' | head -n 1)
- # If empty, try again with all
- [ -z "${SOUND_CARD_INDEX}" ] && SOUND_CARD_INDEX=$(cat "${PROC}" | grep -E -o '^[[:space:]]{0,2}[0-9]+[[:space:]]+' | head -n 1)
- if [ -z "${SOUND_CARD_INDEX}" ]; then
- echo "No sound card found."
- SOUND_CARD_INDEX=0
- fi
- SOUND_CARD_COUNT=$(grep -E '^[[:space:]]{0,2}[0-9]+[[:space:]]+' "${PROC}" | wc -l)
- fi
-
- SOUND_CARD_INDEX="$(grep -E -o '[0-9]+' <<<$SOUND_CARD_INDEX)"
- echo "Detected sound card index is: $SOUND_CARD_INDEX"
- echo "Sound card count: $SOUND_CARD_COUNT"
-
- # Adjust sound volume (playback)... Random mixer names we have encountered during testing
- echo "Setting up volume..."
- amixer -q -c "$SOUND_CARD_INDEX" sset 'Master' "$VOL" unmute
- amixer -q -c "$SOUND_CARD_INDEX" sset 'PCM' "$VOL" unmute
- amixer -q -c "$SOUND_CARD_INDEX" sset 'CD' "$VOL" unmute
- amixer -q -c "$SOUND_CARD_INDEX" sset 'Headphone' "$VOL" unmute
- amixer -q -c "$SOUND_CARD_INDEX" sset 'Front' "$VOL" unmute
- amixer -q -c "$SOUND_CARD_INDEX" sset 'Speaker' "$VOL" unmute
- # Recording. It seems that (most) devices need the volume set to 0, so you
- # don't hear your own mic input, but should be unmuted. Also on some cards,
- # you need to set the cap option on the mic you want to use, while other cards
- # will just ignore that option.
- # Plus, most cards have a Capture mixer, which needs to be set to cap too, and
- # have its volume turned up. (There'll probably be some cards that need yet
- # another setup, but this works for now on 4 tested cards)
- amixer -q -c "$SOUND_CARD_INDEX" sset 'Rear Mic Boost' "50%" cap unmute
- amixer -q -c "$SOUND_CARD_INDEX" sset 'Rear Mic' "0%" cap unmute
- amixer -q -c "$SOUND_CARD_INDEX" sset 'Front Mic Boost' "50%" cap unmute
- amixer -q -c "$SOUND_CARD_INDEX" sset 'Front Mic' "0%" cap unmute
- amixer -q -c "$SOUND_CARD_INDEX" sset 'Mic Boost' "50%" cap unmute
- amixer -q -c "$SOUND_CARD_INDEX" sset 'Mic' "0%" cap unmute
- amixer -q -c "$SOUND_CARD_INDEX" sset 'Capture' "100%" cap unmute
- amixer -q -c "$SOUND_CARD_INDEX" sset 'Input Source' 'Front Mic' # Let's hope nobody uses rear mic...
- # fix random static noise when starting vmplayer when module snd_pcsp (not pcspkr) is loaded
- amixer -q -c pcsp sset Master "0%" mute
- echo "Done setting up volume."
-fi >> "${LOGFILE}" 2>&1
-
-# Start printer daemon
-QUEUE="STANDARD" # This has to match the queue you configured in your VM
-USER="$(/usr/bin/whoami)"
-SPOOLDIR=
-### Disabled: 100megs is not enough, some jobs are HUGE, try to use temp which should be on disk
-## Try using user's tmpfs home first, as it gets wiped on logout
-#if [ -n "${HOME}" ] && [ -w "${HOME}" ]; then
-# SPOOLDIR="${HOME}/.spool"
-# mkdir -p "${SPOOLDIR}/${QUEUE}"
-#fi
-# If failed, try to fall back to /tmp
-if [ -z "${SPOOLDIR}" ] || [ ! -w "${SPOOLDIR}/${QUEUE}" ]; then
- SPOOLDIR="/tmp/printergui-${USER}-$$-${RANDOM}"
- rm -rf -- "${SPOOLDIR}"
- if ! mkdir -p "${SPOOLDIR}/${QUEUE}"; then
- slxlog "virt-spooldir" "Could not create spool directory ($SPOOLDIR) for $USER - printing will not work!"
- # TODO: Warn user
- fi
- chmod 0700 "${SPOOLDIR}/${QUEUE}"
-fi
-
-# Start the lpdaemon listening on the given port
-# TODO: externalize with something like runtvirt.d (other parts might benefit from that too)
-tcpsvd -E 192.168.101.1 5515 \
- lpd "$SPOOLDIR" \
- ash -c "/opt/openslx/cups/printergui '${USER}' \"${SPOOLDIR}/${QUEUE}/\$DATAFILE\"" &
-
-# PID to kill the process
-PID_LPD="$!"
-
-# Copy guest configuration (with added information) config.xml to be accessed
-# via virtual floppy
-cp "$xmlfile" "$VMCHOOSER_DIR/fd-loop/config.xml"
-# Add another file with resolution information
-xrandr | grep -o -E 'connected\s*(primary)?\s*[0-9]+x[0-9]+\+0\+0' | grep -o -E '[0-9]+x[0-9]+' | head -n 1 > "$VMCHOOSER_DIR/fd-loop/hostres.txt"
-# Add our magic openslx binary that sets the correct guest resolution
-cp "$VMCHOOSER_DIR/data/openslx.exe" "$VMCHOOSER_DIR/fd-loop/"
-cp "$VMCHOOSER_DIR/data/SHARELWS.BAT" "$VMCHOOSER_DIR/fd-loop/"
-rm "$VMCHOOSER_DIR/fd-loop/SHARELW.CFG"
-for SHARE in $(grep -o -E '^SLX_SHARE_.*_PATH' /opt/openslx/config); do
- eval "echo -n \$${SHARE} | /opt/openslx/bin/tr '/' '\' " >> "$VMCHOOSER_DIR/fd-loop/SHARELW.CFG"
- #eval echo -n " \$${SHARE%PATH}AUTH_PASS /user:\$${SHARE%PATH}AUTH_USER" >> "$VMCHOOSER_DIR/fd-loop/SHARELW.CFG"
- echo -e '\r\n' >> "$VMCHOOSER_DIR/fd-loop/SHARELW.CFG"
-done
-
-
-# Try to use dnbd3 to access the image
-unset vm_diskfile
-unset vm_revision
-unset dnbd3
-unset dnbd3error
-if [ -n "$SLX_DNBD3_SERVERS" -o -n "$SLX_DNBD3_PRIO_SERVERS" ] && [ "x$SLX_VM_DNBD3" = "xyes" ]; then
- if [ -e "/dev/dnbd0" -a -e "/var/run/dnbd3.socket" ]; then
- # Shuffle server list
- [ -n "$SLX_DNBD3_SERVERS" ] && TMP_SERVERS=$(for SRV in $SLX_DNBD3_SERVERS; do echo "$RANDOM $SRV"; done | sort -u | sed -r 's/^[0-9]+ //')
- for SRV in $SLX_DNBD3_PRIO_SERVERS $TMP_SERVERS; do
- dnbd3=$(dnbd3-client -h "$SRV" -i "${imgrelpath}" -r 0)
- RET=$?
- if [ "$RET" = "0" ]; then
- vm_revision=$(cat "/sys/block/${dnbd3#/dev/}/net/rid")
- writelog "DNBD3: $vm_diskfile on $dnbd3 with rid $vm_revision"
- vm_diskfile="$dnbd3"
- vmpath="$vm_diskfile"
- break
- fi
- dnbd3error="$dnbd3error ($RET/$dnbd3)"
- usleep 200000
- done
- if [ -z "$vm_diskfile" ]; then
- slxlog "virt-dnbd3" "No dnbd3 server for ${imgrelpath} found ($SLX_DNBD3_PRIO_SERVERS $TMP_SERVERS $dnbd3error), trying NFS/CIFS..."
- writelog "No working dnbd3 server found :-("
- fi
- else
- writelog "Won't use dnbd3 as it's not loaded, or the daemon is not running..."
- fi
-else
- writelog "Won't use dnbd3 as no servers are given in config"
-fi
-
-# $vm_diskfile will be empty if dnbd3 is not used or failed. Let's try to fall back to NFS/CIFS via file system
-if [ -z "$vm_diskfile" ]; then
- new_vmpath=$(ls "${vmpath}.r"* | grep -E -o '\.r[0-9]+$' | grep -o -E '[0-9]+' | sort -n | tail -1)
- [ -n "$new_vmpath" ] && vmpath="${vmpath}.r${new_vmpath}"
- vm_diskfile="$vmpath"
-fi
-
-# Check if virtual machine container file exists
-if ! [ -e "${vmpath}" ]; then
- slxlog "virt-image-missing" "VM image $vmpath not found!"
- writelog "Virtual machine image ${vmpath} not found!"
- cleanexit 1
-fi
-
-writelog "Used diskfile: $vm_diskfile"
-
-# Get all virtual machine specific stuff from the respective include file
-if [ ! -e "$VMCHOOSER_DIR/$xmlvirt/run-virt.include" ] ; then
- # TODO: Tell user
- slxlog "virt-plugin-missing" "Could not find run-virt.include for $xmlvirt ($VMCHOOSER_DIR/$xmlvirt/run-virt.include)"
- writelog "Failed because of missing ${xmlvirt} plugin."
- cleanexit 1
-fi
-
-self="${xmlvirt}"
-if ! . "$VMCHOOSER_DIR/$xmlvirt/run-virt.include"; then
- slxlog "virt-plugin-error" "run-virt.include for $xmlvirt could not be sourced (contains syntax errors?)" "$xmlvirt"
- writelog "Erroneous run-virt.include for $xmlvirt"
-fi
-
-# start a windowmanager for easier handling
-# (expect problems w/ windows opening in background w/ vmware without wm)
-for dm in openbox kwin xfwm4 metacity blackbox twm fvwm2 ; do
- if which $dm >/dev/null 2>&1 ; then
- if [ "$dm" = "fvwm2" ] ; then
- echo "EdgeScroll 0 0" > ${redodir}/fvwm
- fvwm2 -f ${redodir}/fvwm >/dev/null 2>&1 &
- else
- $dm >/dev/null 2>&1 &
- fi
- break
- fi
-done
-
-# Start poolvideoswitch if we find the autostarter file
-#if [ -e /etc/xdg/autostart/pvsgui.desktop ]; then
-# /usr/local/bin/pvsgui -p 2 -b >/dev/null 2>&1 &
-#fi
-
-if [[ "$DO_PROFILE" -ge "1" ]]; then
- wget "http://132.230.8.113/profile/do.php?action=start" &
-fi
-
-# Check if tcpsvd is running. Do this down here so we do not check immediately after trying to spawn it,
-# as this could result in success even if it's not really working
-if ! kill -0 "$PID_LPD"; then
- slxlog "virt-lpd" "Could not start tcpsvd/lpd for virtual machine session"
-fi
-
-# Configure and start samba service to provide user's home directory
-#if [ -f /usr/sbin/smbd ] ; then
-# sudo /opt/openslx/bin/sed -i /opt/openslx/vmchooser/smb.conf -e "s,USER,$USER,"
-# sudo /usr/sbin/nmbd -s /opt/openslx/vmchooser/config/smb.conf
-# sudo /usr/sbin/smbd -s /opt/openslx/vmchooser/config/smb.conf
-#fi
# This will start the VM
writelog "VM command: eval ${VIRTCMD} ${VIRTCMDOPTS}"
+
+# Transported from vmware-runvirt include
+sync
+
eval ${VIRTCMD} ${VIRTCMDOPTS}
-#
writelog "Bye."
# Postrun for commands after virtualization finishes
@@ -650,7 +111,4 @@ if [ -n "${POSTRUN}" ]; then
eval ${POSTRUN} >/dev/null 2>&1
fi
-
cleanexit 0
-
-
diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/vmchooser_runvirt_functions.inc b/remote/modules/run-virt/data/opt/openslx/scripts/vmchooser_runvirt_functions.inc
new file mode 100644
index 00000000..7b64653c
--- /dev/null
+++ b/remote/modules/run-virt/data/opt/openslx/scripts/vmchooser_runvirt_functions.inc
@@ -0,0 +1,45 @@
+#######################################################
+# Include: Set functions needed by vmchooser-run_virt #
+#######################################################
+
+# function to write to stdout and logfile
+writelog() {
+ # write to stdout
+ echo -e "$1"
+ # log into file
+ echo -e "$1" >> "${LOGFILE}"
+}
+
+# Clean exit will be called at the end of vmchooser-run_virt
+cleanexit() {
+ sleep 1
+ # remove config dirs when exit
+ if echo "${RMDIRS}" 2>/dev/null | grep -q "${xmlvirt}"; then
+ writelog "${xmlvirt} exited. Cleaning up... \c"
+# rm -rf -- ${RMDIRS} >/dev/null 2>&1
+ writelog "done"
+ fi
+ # Disconnect dnbd3 device
+ if [ -n "$dnbd3" ]; then
+ for timeout in 1 1 2; do
+ dnbd3-client -d "$dnbd3" -c -d "$dnbd3" -c && break
+ writelog "dnbd3 still busy...."
+ sleep "$timeout"
+ done
+ fi
+ # Kill LPD
+ [ -n "$PID_LPD" ] && kill "$PID_LPD"
+ # Remove spool directory for printjobs from VM
+ [ -n "${SPOOLDIR}" ] && rm -rf -- "${SPOOLDIR}"
+
+ [ $# -gt 0 ] && exit "$1"
+ exit 129 # No exit code was given :/
+}
+
+rv_clean_string() {
+ if [ "$#" -ge 1 ]; then
+ echo "$@" | tr '[A-Z]' '[a-z]' | tr -d -c '[a-z0-9]'
+ else
+ tr '[A-Z]' '[a-z]' | tr -d -c '[a-z0-9]'
+ fi
+}
diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/create_vmhome_preferences_file.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/create_vmhome_preferences_file.inc
new file mode 100644
index 00000000..a5f2cbee
--- /dev/null
+++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/create_vmhome_preferences_file.inc
@@ -0,0 +1,53 @@
+create_vmhome_preferences_file() {
+ cat > "$vmhome/preferences" <<-HEREEND
+ .encoding = "UTF-8"
+ # This configuration file was generated by $0
+
+ # updates/tips
+ webUpdate.enabled = "FALSE"
+ webUpdate.lastCheck.status = "done_updates"
+ webUpdate.checkPeriod = "manual"
+ 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.vmplayer.fullscreen.nobar = 1
+ pref.grabOnMouseClick = "TRUE"
+ pref.grabOnKeyPress = "TRUE"
+ pref.motionGrab = "TRUE"
+ pref.motionUngrab = "TRUE"
+ pref.hideCursorOnUngrab = "TRUE"
+ pref.autoFit = "TRUE"
+ pref.autoFitFullScreen = "fitGuestToHost"
+ pref.autoFitGuestToWindow = "TRUE"
+ pref.vmplayer.exit.vmAction = "poweroff"
+ pref.vmplayer.confirmOnExit = "TRUE"
+
+ # shared folders
+ pref.enableAllSharedFolders = "TRUE"
+
+ # eula
+ pref.eula.count = "2"
+ pref.eula0.product = "VMware Player"
+ pref.eula0.build = "$vmbuild"
+ pref.eula1.product = "VMware Workstation"
+ pref.eula1.build = "$vmbuild"
+ HEREEND
+}
diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/create_vmware_config_file.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/create_vmware_config_file.inc
new file mode 100644
index 00000000..bac61be6
--- /dev/null
+++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/create_vmware_config_file.inc
@@ -0,0 +1,175 @@
+########################################
+# Include: Create vmware startup files #
+########################################
+
+writelog "create_vmware_config_file.inc: conffile: -$conffile-"
+
+MAXMEM="9999999"
+MAXCORES="4"
+shfolders="TRUE"
+sound="es1371"
+
+# define hardware configuration depending on the guest OS used
+# this needs to be fixed and is the base for the creation of new VMs
+case "$vmostype" in
+ win31*|windows31*)
+ vmostype="win31"
+ shfolders="FALSE"
+ sound="sb16"
+ MAXMEM="32"
+ MAXCORES="1"
+ ;;
+ winnt*|windowsnt*)
+ vmostype="winnt"
+ shfolders="FALSE"
+ sound="sb16"
+ MAXMEM="1000"
+ MAXCORES="2"
+ ;;
+ win95*|windows95*)
+ vmostype="win95"
+ shfolders="FALSE"
+ MAXMEM="96"
+ MAXCORES="1"
+ ;;
+ win98*|windows98*)
+ vmostype="win98"
+ MAXMEM="256"
+ MAXCORES="1"
+ ;;
+ winme*|windowsme*)
+ vmostype="winme"
+ MAXMEM="384"
+ MAXCORES="1"
+ ;;
+ win2000|windows2000|win2000pro*)
+ vmostype="win2000pro"
+ MAXMEM="4000"
+ MAXCORES="2"
+ ;;
+ win2000srv*|windows2000srv*|win2000serv*|windows2000serv*)
+ vmostype="win2000serv"
+ shfolders="FALSE"
+ MAXMEM="4000"
+ MAXCORES="4"
+ ;;
+ win2000adv*|windows2000adv*|win2000dat*|windows2000dat*)
+ vmostype="win2000advserv"
+ shfolders="FALSE"
+ MAXMEM="8000"
+ MAXCORES="8"
+ ;;
+ winnet*64|win*2003*64|windowsnet*64)
+ vmostype="winnetstandard-64"
+ MAXMEM="8000"
+ ;;
+ winnet*|win*2003*|windowsnet*)
+ vmostype="winnetstandard"
+ MAXMEM="4000"
+ ;;
+ winxphome*|windowsxphome*)
+ vmostype="winxphome"
+ MAXMEM="4000"
+ MAXCORES="1"
+ ;;
+ winxp*64|windowsxp*64)
+ vmostype="winxppro-64"
+ MAXMEM="8000"
+ MAXCORES="2"
+ ;;
+ winxp*|windowsxp*)
+ vmostype="winxppro"
+ MAXMEM="4000"
+ MAXCORES="1"
+ ;;
+ winvista*64|windowsvista*64)
+ vmostype="winvista-64"
+ MAXMEM="16000"
+ MAXCORES="2"
+ ;;
+ winvista*|windowsvista*)
+ vmostype="winvista"
+ MAXMEM="8000"
+ MAXCORES="2"
+ ;;
+ win7*64|windows7*64)
+ vmostype="windows7-64"
+ MAXMEM="32000"
+ MAXCORES="4"
+ ;;
+ win7*|windows7*)
+ vmostype="windows7"
+ MAXMEM="8000"
+ MAXCORES="4"
+ ;;
+ win8*64|windows8*64)
+ vmostype="windows8-64"
+ MAXMEM="32000"
+ MAXCORES="4"
+ ;;
+ win8*|windows8*)
+ vmostype="windows8"
+ MAXMEM="8000"
+ MAXCORES="4"
+ ;;
+ win*64)
+ MAXMEM="16000"
+ MAXCORES="4"
+ ;;
+ win*)
+ MAXMEM="8000"
+ ;;
+ dos|msdos*|ms-dos*)
+ vmostype="dos"
+ shfolders="FALSE"
+ MAXMEM="128"
+ ;;
+ macos*64)
+ vmostype="freebsd-64"
+ MAXMEM="4000"
+ MAXCORES="2"
+ ;;
+ macos*)
+ vmostype="freebsd"
+ MAXMEM="4000"
+ MAXCORES="1"
+ ;;
+ beos*)
+ vmostype="other"
+ shfolders="FALSE"
+ ;;
+ # Unknown guestOS setting in .xml - use conservative defaults
+ *64)
+ vmostype="other-64"
+ shfolders="FALSE"
+ MAXMEM="123456"
+ MAXCORES="4"
+ ;;
+ *)
+ vmostype="other"
+ shfolders="FALSE"
+ MAXMEM="8000"
+ MAXCORES="1"
+ ;;
+esac
+
+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"
+
+# set the appropriate permissions for the vmware config file
+chmod u+rwx "${conffile}" >/dev/null 2>&1
+
diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/create_vmware_config_file_legacy.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/create_vmware_config_file_legacy.inc
new file mode 100644
index 00000000..1d6b2185
--- /dev/null
+++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/create_vmware_config_file_legacy.inc
@@ -0,0 +1,312 @@
+########################################
+# Include: Create vmware startup files #
+########################################
+
+create_vmware_config_file_legacy() {
+ echo "# This configuration file was generated by $0" > "$conffile"
+
+ MAXMEM="9999999"
+ MAXCORES="4"
+ shfolders="TRUE"
+ sound="es1371"
+
+ # define hardware configuration depending on the guest OS used
+ # this needs to be fixed and is the base for the creation of new VMs
+ case "$vmostype" in
+ win31*|windows31*)
+ vmostype="win31"
+ shfolders="FALSE"
+ sound="sb16"
+ MAXMEM="32"
+ MAXCORES="1"
+ ;;
+ winnt*|windowsnt*)
+ vmostype="winnt"
+ shfolders="FALSE"
+ sound="sb16"
+ MAXMEM="1000"
+ MAXCORES="2"
+ ;;
+ win95*|windows95*)
+ vmostype="win95"
+ shfolders="FALSE"
+ MAXMEM="96"
+ MAXCORES="1"
+ ;;
+ win98*|windows98*)
+ vmostype="win98"
+ MAXMEM="256"
+ MAXCORES="1"
+ ;;
+ winme*|windowsme*)
+ vmostype="winme"
+ MAXMEM="384"
+ MAXCORES="1"
+ ;;
+ win2000|windows2000|win2000pro*)
+ vmostype="win2000pro"
+ MAXMEM="4000"
+ MAXCORES="2"
+ ;;
+ win2000srv*|windows2000srv*|win2000serv*|windows2000serv*)
+ vmostype="win2000serv"
+ shfolders="FALSE"
+ MAXMEM="4000"
+ MAXCORES="4"
+ ;;
+ win2000adv*|windows2000adv*|win2000dat*|windows2000dat*)
+ vmostype="win2000advserv"
+ shfolders="FALSE"
+ MAXMEM="8000"
+ MAXCORES="8"
+ ;;
+ winnet*64|win*2003*64|windowsnet*64)
+ vmostype="winnetstandard-64"
+ MAXMEM="8000"
+ ;;
+ winnet*|win*2003*|windowsnet*)
+ vmostype="winnetstandard"
+ MAXMEM="4000"
+ ;;
+ winxphome*|windowsxphome*)
+ vmostype="winxphome"
+ MAXMEM="4000"
+ MAXCORES="1"
+ ;;
+ winxp*64|windowsxp*64)
+ vmostype="winxppro-64"
+ MAXMEM="8000"
+ MAXCORES="2"
+ ;;
+ winxp*|windowsxp*)
+ vmostype="winxppro"
+ MAXMEM="4000"
+ MAXCORES="1"
+ ;;
+ winvista*64|windowsvista*64)
+ vmostype="winvista-64"
+ MAXMEM="16000"
+ MAXCORES="2"
+ ;;
+ winvista*|windowsvista*)
+ vmostype="winvista"
+ MAXMEM="8000"
+ MAXCORES="2"
+ ;;
+ win7*64|windows7*64)
+ vmostype="windows7-64"
+ MAXMEM="32000"
+ MAXCORES="4"
+ ;;
+ win7*|windows7*)
+ vmostype="windows7"
+ MAXMEM="8000"
+ MAXCORES="4"
+ ;;
+ win8*64|windows8*64)
+ vmostype="windows8-64"
+ MAXMEM="32000"
+ MAXCORES="4"
+ ;;
+ win8*|windows8*)
+ vmostype="windows8"
+ MAXMEM="8000"
+ MAXCORES="4"
+ ;;
+ win*64)
+ MAXMEM="16000"
+ MAXCORES="4"
+ ;;
+ win*)
+ MAXMEM="8000"
+ ;;
+ dos|msdos*|ms-dos*)
+ vmostype="dos"
+ shfolders="FALSE"
+ MAXMEM="128"
+ ;;
+ macos*64)
+ vmostype="freebsd-64"
+ MAXMEM="4000"
+ MAXCORES="2"
+ ;;
+ macos*)
+ vmostype="freebsd"
+ MAXMEM="4000"
+ MAXCORES="1"
+ ;;
+ beos*)
+ vmostype="other"
+ shfolders="FALSE"
+ ;;
+ # Unknown guestOS setting in .xml - use conservative defaults
+ *64)
+ vmostype="other-64"
+ shfolders="FALSE"
+ MAXMEM="123456"
+ MAXCORES="4"
+ ;;
+ *)
+ vmostype="other"
+ shfolders="FALSE"
+ MAXMEM="8000"
+ MAXCORES="1"
+ ;;
+ esac
+ 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 the 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 = "hostonly"
+ ethernet0.connectionType = "custom"
+ ethernet0.vnet = "$hostdev"
+ ethernet0.address = "00:50:56:$macaddrsuffix"
+ ethernet0.wakeOnPcktRcv = "FALSE"
+
+ # sound
+ sound.present = "TRUE"
+ $sound_fileName
+ sound.virtualdev = "$sound"
+ pciSound.enableVolumeControl = "FALSE"
+ sound.enableVolumeControl = "FALSE"
+
+ # svga
+ svga.autodetect = "TRUE"
+
+ # 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"
+
+ $PCIE
+
+ # shared folders
+ $ENABLE_SHARE
+ sharedFolder0.present = "$shfolders"
+ sharedFolder0.enabled = "$shfolders"
+ sharedFolder0.expiration = "never"
+ sharedFolder0.guestName = "$homesharename"
+ sharedFolder0.hostPath = "$homesharepath"
+ sharedFolder0.readAccess = "TRUE"
+ sharedFolder0.writeAccess = "TRUE"
+ sharedFolder1.present = "$shfolders"
+ sharedFolder1.enabled = "$shfolders"
+ sharedFolder1.expiration = "never"
+ sharedFolder1.guestName = "$commonsharename"
+ sharedFolder1.hostPath = "$commonsharepath"
+ sharedFolder1.readAccess = "TRUE"
+ sharedFolder1.writeAccess = "TRUE"
+ sharedFolder.maxNum = "2"
+
+ # 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
+}
diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/logging.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/logging.inc
new file mode 100644
index 00000000..62b1c691
--- /dev/null
+++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/logging.inc
@@ -0,0 +1,57 @@
+###############################
+# Include: Logging and stdout #
+###############################
+
+logging() {
+ # 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:$macaddrsuffix" # TODO: Make var at top for this, it's hard coded twice
+ 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 ""
+
+}
diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/parse_vmx.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/parse_vmx.inc
new file mode 100644
index 00000000..7b9f46c3
--- /dev/null
+++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/parse_vmx.inc
@@ -0,0 +1,78 @@
+######################################################################
+# Include: Parsing the non-legacy delivered vmxfile $TMPDIR/$IMGUUID #
+######################################################################
+
+writelog "Now in parse_vmx.inc."
+
+# check for vmdk file marker %VM_DISK_PATH% and put vmdk path in it's place: also VM_DISK_MODE
+# and VM_DISK_REDOLOGDIR.
+# IMAGE=$(grep -io '<image_path.*"' "${xmlfile}" | sed -e "s/&.*;/; /g" | awk -F '"' '{ print $2 }')
+sed -i 's#%VM_DISK_PATH%#'"$vm_diskfile"'#g' "$TMPDIR/$IMGUUID"
+sed -i 's#%VM_DISK_MODE%#'"independent-nonpersistent"'#g' "$TMPDIR/$IMGUUID"
+sed -i 's#%VM_DISK_REDOLOGDIR%#'"$redodir"'#g' "$TMPDIR/$IMGUUID"
+
+# Ethernet: All we do is entering a generated MAC, as we do not want to interfere
+# in the possible case no networking is wanted.
+writelog "Guest MAC: $macaddr"
+echo 'ethernet0.address = "'"${macaddr}"'"' >> "$TMPDIR/$IMGUUID"
+
+# Massenspeicher: DVD, CDROM
+cat >> "$TMPDIR/$IMGUUID" <<-HEREEND
+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"
+HEREEND
+
+# Floppies:
+cat >> "$TMPDIR/$IMGUUID" <<-HEREEND
+floppy0.present = "$floppy0"
+floppy0.startConnected = "FALSE"
+floppy0.autodetect = "TRUE"
+floppy0.fileName = "auto detect"
+floppy1.present = "$floppy1"
+floppy1.startConnected = "TRUE"
+floppy1.fileType = "file"
+floppy1.fileName = "$floppy1name"
+HEREEND
+
+# RAM, CPUs
+cat >> "$TMPDIR/$IMGUUID" <<-HEREEND
+numvcpus = "$cpu_cores"
+cpuid.coresPerSocket = "$cores_per_socket"
+maxvcpus = "$real_core_count"
+memsize = "$mem"
+MemAllowAutoScaleDown = "FALSE"
+MemTrimRate = "-1"
+HEREEND
+
+# USB
+cat >> "$TMPDIR/$IMGUUID" <<-HEREEND
+usb.present = "TRUE"
+usb.generic.autoconnect = "TRUE"
+HEREEND
+
+# Seriell, Parallel: Empty, nothing is being currently set. TODO later.
+
+# rausziehen: Hardwareversion
+# hwver=$(echo "${imghead}" | grep -m1 -ia "ddb.virtualHWVersion" | awk -F '"' '{print $2}')
+# writelog "hwver: $hwver"
+# sed -i "s/virtualHW.version.*/virtualHW.version = $hwver/g" "$TMPDIR/$IMGUUID"
+# cleanexit 1
+
+# rausziehen: GuestOS
+
+# Killing duplicate lines (output much nicer as sort -u):
+awk '!a[$0]++' "${TMPDIR}/${IMGUUID}" > "${TMPDIR}/${IMGUUID}.tmp" && mv "${TMPDIR}/${IMGUUID}.tmp" "${TMPDIR}/${IMGUUID}"
+
+# At last_ Let's copy it to $confdir/run-vmware.conf
+cp -p "$TMPDIR/$IMGUUID" "$conffile" && writelog "Copied TMPDIR/IMGUUID -$TMPDIR/$IMGUUID- to conffile -$conffile-" || \
+ ( writelog "Could not copy TMPDIR/IMGUUID -$TMPDIR/$IMGUUID- to conffile -$conffile-!"; cleanexit 1 )
+
+# TODO: Move this to cleanexit.
+rm -f "$TMPDIR/$IMGUUID" || writelog "Could not delete $TMPDIR/$IMGUUID."
+rmdir "$TMPDIR" || writelog "Could not rmdir $TMPDIR"
diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include
index ae978036..806d9921 100644
--- a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include
+++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include
@@ -19,644 +19,41 @@
### This needs bash, not dash or ash! (indented HEREDOC)
################################################################################
+VMWAREINCLUDEDIR=/opt/openslx/vmchooser/vmware
vmostype=$(rv_clean_string "$vmostype")
-runvmwareconfheader ()
-{
- echo "# This configuration file was generated by $0" > "$conffile"
-
- MAXMEM="9999999"
- MAXCORES="4"
- shfolders="TRUE"
- sound="es1371"
-
- # define hardware configuration depending on the guest OS used
- # this needs to be fixed and is the base for the creation of new VMs
- case "$vmostype" in
- win31*|windows31*)
- vmostype="win31"
- shfolders="FALSE"
- sound="sb16"
- MAXMEM="32"
- MAXCORES="1"
- ;;
- winnt*|windowsnt*)
- vmostype="winnt"
- shfolders="FALSE"
- sound="sb16"
- MAXMEM="1000"
- MAXCORES="2"
- ;;
- win95*|windows95*)
- vmostype="win95"
- shfolders="FALSE"
- MAXMEM="96"
- MAXCORES="1"
- ;;
- win98*|windows98*)
- vmostype="win98"
- MAXMEM="256"
- MAXCORES="1"
- ;;
- winme*|windowsme*)
- vmostype="winme"
- MAXMEM="384"
- MAXCORES="1"
- ;;
- win2000|windows2000|win2000pro*)
- vmostype="win2000pro"
- MAXMEM="4000"
- MAXCORES="2"
- ;;
- win2000srv*|windows2000srv*|win2000serv*|windows2000serv*)
- vmostype="win2000serv"
- shfolders="FALSE"
- MAXMEM="4000"
- MAXCORES="4"
- ;;
- win2000adv*|windows2000adv*|win2000dat*|windows2000dat*)
- vmostype="win2000advserv"
- shfolders="FALSE"
- MAXMEM="8000"
- MAXCORES="8"
- ;;
- winnet*64|win*2003*64|windowsnet*64)
- vmostype="winnetstandard-64"
- MAXMEM="8000"
- ;;
- winnet*|win*2003*|windowsnet*)
- vmostype="winnetstandard"
- MAXMEM="4000"
- ;;
- winxphome*|windowsxphome*)
- vmostype="winxphome"
- MAXMEM="4000"
- MAXCORES="1"
- ;;
- winxp*64|windowsxp*64)
- vmostype="winxppro-64"
- MAXMEM="8000"
- MAXCORES="2"
- ;;
- winxp*|windowsxp*)
- vmostype="winxppro"
- MAXMEM="4000"
- MAXCORES="1"
- ;;
- winvista*64|windowsvista*64)
- vmostype="winvista-64"
- MAXMEM="16000"
- MAXCORES="2"
- ;;
- winvista*|windowsvista*)
- vmostype="winvista"
- MAXMEM="8000"
- MAXCORES="2"
- ;;
- win7*64|windows7*64)
- vmostype="windows7-64"
- MAXMEM="32000"
- MAXCORES="4"
- ;;
- win7*|windows7*)
- vmostype="windows7"
- MAXMEM="8000"
- MAXCORES="4"
- ;;
- win8*64|windows8*64)
- vmostype="windows8-64"
- MAXMEM="32000"
- MAXCORES="4"
- ;;
- win8*|windows8*)
- vmostype="windows8"
- MAXMEM="8000"
- MAXCORES="4"
- ;;
- win*64)
- MAXMEM="16000"
- MAXCORES="4"
- ;;
- win*)
- MAXMEM="8000"
- ;;
- dos|msdos*|ms-dos*)
- vmostype="dos"
- shfolders="FALSE"
- MAXMEM="128"
- ;;
- macos*64)
- vmostype="freebsd-64"
- MAXMEM="4000"
- MAXCORES="2"
- ;;
- macos*)
- vmostype="freebsd"
- MAXMEM="4000"
- MAXCORES="1"
- ;;
- beos*)
- vmostype="other"
- shfolders="FALSE"
- ;;
- # Unknown guestOS setting in .xml - use conservative defaults
- *64)
- vmostype="other-64"
- shfolders="FALSE"
- MAXMEM="123456"
- MAXCORES="4"
- ;;
- *)
- vmostype="other"
- shfolders="FALSE"
- MAXMEM="8000"
- MAXCORES="1"
- ;;
- esac
-
- 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 the 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 = "hostonly"
- ethernet0.connectionType = "custom"
- ethernet0.vnet = "$hostdev"
- ethernet0.address = "00:50:56:$macaddrsuffix"
- ethernet0.wakeOnPcktRcv = "FALSE"
-
- # sound
- sound.present = "TRUE"
- $sound_fileName
- sound.virtualdev = "$sound"
- pciSound.enableVolumeControl = "FALSE"
- sound.enableVolumeControl = "FALSE"
-
- # svga
- svga.autodetect = "TRUE"
-
- # 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"
-
- $PCIE
-
- # shared folders
- $ENABLE_SHARE
- sharedFolder0.present = "$shfolders"
- sharedFolder0.enabled = "$shfolders"
- sharedFolder0.expiration = "never"
- sharedFolder0.guestName = "$homesharename"
- sharedFolder0.hostPath = "$homesharepath"
- sharedFolder0.readAccess = "TRUE"
- sharedFolder0.writeAccess = "TRUE"
- sharedFolder1.present = "$shfolders"
- sharedFolder1.enabled = "$shfolders"
- sharedFolder1.expiration = "never"
- sharedFolder1.guestName = "$commonsharename"
- sharedFolder1.hostPath = "$commonsharepath"
- sharedFolder1.readAccess = "TRUE"
- sharedFolder1.writeAccess = "TRUE"
- sharedFolder.maxNum = "2"
-
- # 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"
-webUpdate.lastCheck.status = "done_updates"
-webUpdate.checkPeriod = "manual"
-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.vmplayer.fullscreen.nobar = 1
-pref.grabOnMouseClick = "TRUE"
-pref.grabOnKeyPress = "TRUE"
-pref.motionGrab = "TRUE"
-pref.motionUngrab = "TRUE"
-pref.hideCursorOnUngrab = "TRUE"
-pref.autoFit = "TRUE"
-pref.autoFitFullScreen = "fitGuestToHost"
-pref.autoFitGuestToWindow = "TRUE"
-pref.vmplayer.exit.vmAction = "poweroff"
-pref.vmplayer.confirmOnExit = "TRUE"
-
-# shared folders
-pref.enableAllSharedFolders = "TRUE"
-
-# eula
-pref.eula.count = "2"
-pref.eula0.product = "VMware Player"
-pref.eula0.build = "$vmbuild"
-pref.eula1.product = "VMware Workstation"
-pref.eula1.build = "$vmbuild"
-HEREEND
-}
-
-
-# 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/virt/vmware/${USER}.$$
-# dir for configs and vmem file
-confdir=/tmp/virt/vmware/${USER}.$$
-# configfile
-conffile="${confdir}/run-vmware.conf"
-# diskfile
-diskfile="${vmpath}"
-# users vmware config folder
-[ -z "${HOME}" ] && HOME=$(getent passwd "$(/usr/bin/whoami)" | awk -F ':' '{print $6}')
-vmhome="${HOME}/.vmware"
-
-# get several version infos for vmware/player
-. /opt/openslx/vmchooser/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
-
-# use different network card (default e1000, vlance, vmxnet)
-hostdev="/dev/vmnet1"
-case "${network_kind}" in
- bridge|bridged)
- hostdev="/dev/vmnet0"
- ;;
- nat)
- hostdev="/dev/vmnet1"
- ;;
- hostonly|host-only)
- hostdev="/dev/vmnet2"
- ;;
-esac
-
-# set standard sound card, overwrite depending on OS (options sb16, es1371, hdaudio)
-sound="es1371"
-
-# set sound card explicitly if there is more than one card in the host system
-if [ -n "$SOUND_CARD_INDEX" ] && [ "$SOUND_CARD_INDEX" -ne 0 ]; then
- sound_fileName="sound.fileName = \"sysdefault:CARD=${SOUND_CARD_INDEX}\"
-sound.autodetect = \"FALSE\""
-else
- sound_fileName='sound.fileName = "-1"
-sound.autodetect = "TRUE"'
-fi
-
-# check for 3D configuration setting
-case "$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
-##
-hwver=$(echo "${imghead}" | grep -m1 -ia "ddb.virtualHWVersion" | awk -F '"' '{print $2}')
-
-
-if [ -z "$override_hddtype" ]; then
- hddrv=$(echo "${imghead}" | grep -m1 -ia "ddb.adapterType" | awk -F '"' '{print $2}')
+if [ "$LEGACY" ]; then
+ # declaration of default variables for vmware
+ source "${VMWAREINCLUDEDIR}/set_vmware_include_variables.inc" && set_vmware_include_variables
+ # hardware checks
+ # sources /opt/openslx/config to check for whitelisted HW-3D
+ source "${VMWAREINCLUDEDIR}/set_hardware_legacy.inc" && set_hardware_legacy
+ # write configuration files
+ # write_config_files calls:
+ # set_vmhome_preferences_header
+ # set_vmware_startup_file
+ source "${VMWAREINCLUDEDIR}/write_config_files_legacy.inc" && write_config_files_legacy
+ # logging and stdout
+ # needs writelog() from vmchooser-run_virt
+ source "${VMWAREINCLUDEDIR}/logging.inc" && logging
else
- hddrv=$override_hddtype
-fi
+ # declaration of default variables for vmware
+ source "${VMWAREINCLUDEDIR}/set_vmware_include_variables.inc" && set_vmware_include_variables
-PCIE=
-case "${hddrv}" in
- ide)
- ide="TRUE"
- scsi="FALSE"
- ;;
- lsisas*)
- ide="FALSE"
- scsi="TRUE"
- PCIE='pciBridge4.present = "TRUE"
- pciBridge4.virtualDev = "pcieRootPort"
- pciBridge4.functions = "8"'
- ;;
- lsilogic|buslogic)
- ide="FALSE"
- scsi="TRUE"
- ;;
- scsi)
- ide="FALSE"
- scsi="TRUE"
- hddrv="lsilogic"
- ;;
- *)
- slxlog "virt-vmware-hdd" "vmware: Unknown HDD adapter type $hddrv"
- ;;
-esac
+ # hardware checks: sources /opt/openslx/config to check for whitelisted HW-3D
+ source "${VMWAREINCLUDEDIR}/set_hardware.inc"
-# 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
+ # write configuration files
+ source "${VMWAREINCLUDEDIR}/write_config_files.inc"
-# link to conffile if confdir != redodir
-ln -s "$conffile" "$redodir/run-vmware.conf" >/dev/null 2>&1
+ # parse the given vmx file
+ source "${VMWAREINCLUDEDIR}/parse_vmx.inc"
-# sync is needed to ensure that data is really written to virtual disk
-# TODO: Move to general run-virt, right before exec of vm
-sync
+ # logging and stdout
+ # needs writelog() from vmchooser-run_virt
+ source "${VMWAREINCLUDEDIR}/logging.inc" && logging
-# own nvram. We need it for floppy drive b, default nvram has just drive a
-if ! cp "/opt/openslx/vmchooser/vmware/nvram" "$confdir/nvram"; then
- slxlog "virt-vmware-nvram" "Could not copy nvram from '/opt/openslx/vmchooser/vmware/nvram' '$confdir/nvram'"
-fi
-
-
-# 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:$macaddrsuffix" # TODO: Make var at top for this, it's hard coded twice
-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 ""
-
-
-################################################################################
-### Set env for vmchooser-run_virt
-################################################################################
+fi
# For debugging
cp "$conffile" "/tmp/vmware-last-config"
diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/set_hardware.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/set_hardware.inc
new file mode 100644
index 00000000..174bf314
--- /dev/null
+++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/set_hardware.inc
@@ -0,0 +1,71 @@
+#########################################
+# Include: Hardware checks and settings #
+#########################################
+
+# check for 3D configuration setting
+case "$enable3d" in
+ true|yes)
+ enable3d="TRUE"
+ ;;
+ *)
+ enable3d="FALSE"
+ ;;
+esac
+
+# set standard sound card, overwrite depending on OS (options sb16, es1371, hdaudio)
+sound="es1371"
+
+# set sound card explicitly if there is more than one card in the host system
+if [ -n "$SOUND_CARD_INDEX" ] && [ "$SOUND_CARD_INDEX" -ne 0 ]; then
+ sound_fileName="sound.fileName = \"sysdefault:CARD=${SOUND_CARD_INDEX}\"
+ sound.autodetect = \"FALSE\""
+else
+ sound_fileName='sound.fileName = "-1"
+ sound.autodetect = "TRUE"'
+fi
+
+# check for whitelisted HW-3D
+source /opt/openslx/config
+FORCE3D=""
+if [ -n "$SLX_VMWARE_3D" ]; then
+ FORCE3D='mks.gl.allowBlacklistedDrivers = "TRUE"'
+fi
+
+# read only the first 30 lines to be sure
+imghead=$(head -n 30 "${diskfile}")
+hwver=$(echo "${imghead}" | grep -m1 -ia "ddb.virtualHWVersion" | awk -F '"' '{print $2}')
+
+
+if [ -z "$override_hddtype" ]; then
+ hddrv=$(echo "${imghead}" | grep -m1 -ia "ddb.adapterType" | awk -F '"' '{print $2}')
+else
+ hddrv=$override_hddtype
+fi
+
+PCIE=
+case "${hddrv}" in
+ ide)
+ ide="TRUE"
+ scsi="FALSE"
+ ;;
+ lsisas*)
+ ide="FALSE"
+ scsi="TRUE"
+ PCIE='pciBridge4.present = "TRUE"
+ pciBridge4.virtualDev = "pcieRootPort"
+ pciBridge4.functions = "8"'
+ ;;
+ lsilogic|buslogic)
+ ide="FALSE"
+ scsi="TRUE"
+ ;;
+ scsi)
+ ide="FALSE"
+ scsi="TRUE"
+ hddrv="lsilogic"
+ ;;
+ *)
+ slxlog "virt-vmware-hdd" "vmware: Unknown HDD adapter type $hddrv"
+ ;;
+esac
+
diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/set_hardware_legacy.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/set_hardware_legacy.inc
new file mode 100644
index 00000000..f87d43cf
--- /dev/null
+++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/set_hardware_legacy.inc
@@ -0,0 +1,180 @@
+#########################################
+# Include: Hardware checks and settings #
+#########################################
+
+set_hardware_legacy() {
+
+# 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
+
+# use different network card (default e1000, vlance, vmxnet)
+hostdev="/dev/vmnet1"
+case "${network_kind}" in
+ bridge|bridged)
+ hostdev="/dev/vmnet0"
+ ;;
+ nat)
+ hostdev="/dev/vmnet1"
+ ;;
+ hostonly|host-only)
+ hostdev="/dev/vmnet2"
+ ;;
+esac
+
+# set standard sound card, overwrite depending on OS (options sb16, es1371, hdaudio)
+sound="es1371"
+
+# set sound card explicitly if there is more than one card in the host system
+if [ -n "$SOUND_CARD_INDEX" ] && [ "$SOUND_CARD_INDEX" -ne 0 ]; then
+ sound_fileName="sound.fileName = \"sysdefault:CARD=${SOUND_CARD_INDEX}\"
+sound.autodetect = \"FALSE\""
+else
+ sound_fileName='sound.fileName = "-1"
+sound.autodetect = "TRUE"'
+fi
+
+# check for 3D configuration setting
+case "$enable3d" in
+ true|yes)
+ enable3d="TRUE"
+ ;;
+ *)
+ enable3d="FALSE"
+ ;;
+esac
+
+# set standard sound card, overwrite depending on OS (options sb16, es1371, hdaudio)
+sound="es1371"
+
+# set sound card explicitly if there is more than one card in the host system
+if [ -n "$SOUND_CARD_INDEX" ] && [ "$SOUND_CARD_INDEX" -ne 0 ]; then
+ sound_fileName="sound.fileName = \"sysdefault:CARD=${SOUND_CARD_INDEX}\"
+sound.autodetect = \"FALSE\""
+else
+ sound_fileName='sound.fileName = "-1"
+sound.autodetect = "TRUE"'
+fi
+
+# check for 3D configuration setting
+case "$enable3d" in
+ true|yes)
+ enable3d="TRUE"
+ ;;
+ *)
+ enable3d="FALSE"
+ ;;
+esac
+
+# check for whitelisted HW-3D
+source /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
+
+##
+hwver=$(echo "${imghead}" | grep -m1 -ia "ddb.virtualHWVersion" | awk -F '"' '{print $2}')
+
+
+if [ -z "$override_hddtype" ]; then
+ hddrv=$(echo "${imghead}" | grep -m1 -ia "ddb.adapterType" | awk -F '"' '{print $2}')
+else
+ hddrv=$override_hddtype
+fi
+
+PCIE=
+case "${hddrv}" in
+ ide)
+ ide="TRUE"
+ scsi="FALSE"
+ ;;
+ lsisas*)
+ ide="FALSE"
+ scsi="TRUE"
+ PCIE='pciBridge4.present = "TRUE"
+ pciBridge4.virtualDev = "pcieRootPort"
+ pciBridge4.functions = "8"'
+ ;;
+ lsilogic|buslogic)
+ ide="FALSE"
+ scsi="TRUE"
+ ;;
+ scsi)
+ ide="FALSE"
+ scsi="TRUE"
+ hddrv="lsilogic"
+ ;;
+ *)
+ slxlog "virt-vmware-hdd" "vmware: Unknown HDD adapter type $hddrv"
+ ;;
+esac
+
+}
diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/set_vmware_include_variables.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/set_vmware_include_variables.inc
new file mode 100644
index 00000000..78f8c634
--- /dev/null
+++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/set_vmware_include_variables.inc
@@ -0,0 +1,43 @@
+#####################################################################
+# Include: Declaration of vmware run-virt-include default variables #
+#####################################################################
+
+set_vmware_include_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/virt/vmware/${USER}.$$
+
+ # dir for configs and vmem file
+ confdir=/tmp/virt/vmware/${USER}.$$
+
+ # configfile
+ conffile="${confdir}/run-vmware.conf"
+
+ # diskfile
+ diskfile="${vmpath}"
+
+ # users vmware config folder
+ [ -z "${HOME}" ] && HOME=$(getent passwd "$(/usr/bin/whoami)" | awk -F ':' '{print $6}')
+ vmhome="${HOME}/.vmware"
+
+ # get several version infos for vmware/player
+ source /opt/openslx/vmchooser/vmware/vmware.conf
+ vmbuild=$buildversion
+ vmversion=$version
+
+ # VMware start options
+ # "-X": start in fullscreen
+ vmopt="-X"
+}
diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/write_config_files.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/write_config_files.inc
new file mode 100644
index 00000000..05ee1dd5
--- /dev/null
+++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/write_config_files.inc
@@ -0,0 +1,26 @@
+###############################
+# Include: Write config files #
+###############################
+
+writelog "redodir: -$redodir- confdir: -$confdir- vmhome/dndlogs: -$vmhome/dndlogs- conffile: -$conffile-"
+
+# 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 file ${vmhome}/preferences
+source "${VMWAREINCLUDEDIR}/create_vmhome_preferences_file.inc" && create_vmhome_preferences_file
+
+# create VMware config file (conffile)
+source "${VMWAREINCLUDEDIR}/create_vmware_config_file.inc"
+
+# link to conffile if confdir != redodir
+[ "$confdir" != "$redodir" ] && ln -s "$conffile" "$redodir/run-vmware.conf" >/dev/null 2>&1
+
+# own nvram. We need it for floppy drive b, default nvram has just drive a
+if ! cp "/opt/openslx/vmchooser/vmware/nvram" "$confdir/nvram"; then
+ slxlog "virt-vmware-nvram" "Could not copy nvram from '/opt/openslx/vmchooser/vmware/nvram' '$confdir/nvram'"
+fi
+
diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/write_config_files_legacy.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/write_config_files_legacy.inc
new file mode 100644
index 00000000..52a341ba
--- /dev/null
+++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/write_config_files_legacy.inc
@@ -0,0 +1,29 @@
+###############################
+# Include: Write config files #
+###############################
+
+write_config_files_legacy() {
+ # 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 file ${vmhome}/preferences
+ source "${VMWAREINCLUDEDIR}/create_vmhome_preferences_file.inc" && create_vmhome_preferences_file
+
+ # create VMware config file (conffile)
+ source "${VMWAREINCLUDEDIR}/create_vmware_config_file_legacy.inc" && create_vmware_config_file_legacy
+
+ # link to conffile if confdir != redodir
+ [ "$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
+ # TODO: Move to general run-virt, right before exec of vm
+ sync
+
+ # own nvram. We need it for floppy drive b, default nvram has just drive a
+ if ! cp "/opt/openslx/vmchooser/vmware/nvram" "$confdir/nvram"; then
+ slxlog "virt-vmware-nvram" "Could not copy nvram from '/opt/openslx/vmchooser/vmware/nvram' '$confdir/nvram'"
+ fi
+}