summaryrefslogtreecommitdiffstats
path: root/core/modules/vmware
diff options
context:
space:
mode:
Diffstat (limited to 'core/modules/vmware')
-rw-r--r--core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_static_directory_structure.inc23
-rw-r--r--core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_vmhome_preferences_file.inc1
-rw-r--r--core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/determine_hardware_limitations.inc185
-rw-r--r--core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/log_config_summary.inc60
-rw-r--r--core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/parse_vmx.inc126
-rw-r--r--core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/set_vmware_include_variables.inc5
-rw-r--r--core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/write_final_vmx.inc211
-rw-r--r--core/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include42
-rw-r--r--core/modules/vmware/module.build16
-rw-r--r--core/modules/vmware/module.conf6
-rw-r--r--core/modules/vmware/patches/vmmon__4.9__12.0.0-12.5.2.patch13
-rw-r--r--core/modules/vmware/patches/vmnet__4.9__12.0.0-12.5.2.patch13
12 files changed, 532 insertions, 169 deletions
diff --git a/core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_static_directory_structure.inc b/core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_static_directory_structure.inc
new file mode 100644
index 00000000..96363de3
--- /dev/null
+++ b/core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_static_directory_structure.inc
@@ -0,0 +1,23 @@
+###############################
+# Include: Write config files #
+###############################
+
+writelog "Redo directory: ${redodir}"
+writelog "Config directory: ${confdir}"
+writelog "Config file: ${conffile}"
+writelog "vmhome/dndlogs: ${vmhome}/dndlogs"
+
+# 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
+
+# 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/core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_vmhome_preferences_file.inc b/core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_vmhome_preferences_file.inc
index b618041c..d50402f3 100644
--- a/core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_vmhome_preferences_file.inc
+++ b/core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_vmhome_preferences_file.inc
@@ -68,4 +68,5 @@ create_vmhome_preferences_file() {
echo 'pref.hotkey.rightControl = "true"' >> "$vmhome/preferences"
fi
writelog "Vmware preferences file created in $vmhome."
+ true
}
diff --git a/core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/determine_hardware_limitations.inc b/core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/determine_hardware_limitations.inc
new file mode 100644
index 00000000..11ea2e3a
--- /dev/null
+++ b/core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/determine_hardware_limitations.inc
@@ -0,0 +1,185 @@
+########################################
+# Include: Determine hw limitations depending on hwver and guest os #
+########################################
+
+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 "$VM_OS_TYPE" in
+ win31*|windows31*)
+ VM_OS_TYPE="win31"
+ shfolders="FALSE"
+ sound="sb16"
+ MAXMEM="32"
+ MAXCORES="1"
+ ;;
+ winnt*|windowsnt*)
+ VM_OS_TYPE="winnt"
+ shfolders="FALSE"
+ sound="sb16"
+ MAXMEM="1000"
+ MAXCORES="2"
+ ;;
+ win95*|windows95*)
+ VM_OS_TYPE="win95"
+ shfolders="FALSE"
+ MAXMEM="96"
+ MAXCORES="1"
+ ;;
+ win98*|windows98*)
+ VM_OS_TYPE="win98"
+ MAXMEM="256"
+ MAXCORES="1"
+ ;;
+ winme*|windowsme*)
+ VM_OS_TYPE="winme"
+ MAXMEM="384"
+ MAXCORES="1"
+ ;;
+ win2000|windows2000|win2000pro*)
+ VM_OS_TYPE="win2000pro"
+ MAXMEM="4000"
+ MAXCORES="2"
+ ;;
+ win2000srv*|windows2000srv*|win2000serv*|windows2000serv*)
+ VM_OS_TYPE="win2000serv"
+ shfolders="FALSE"
+ MAXMEM="4000"
+ MAXCORES="4"
+ ;;
+ win2000adv*|windows2000adv*|win2000dat*|windows2000dat*)
+ VM_OS_TYPE="win2000advserv"
+ shfolders="FALSE"
+ MAXMEM="8000"
+ MAXCORES="8"
+ ;;
+ winnet*64|win*2003*64|windowsnet*64)
+ VM_OS_TYPE="winnetstandard-64"
+ MAXMEM="8000"
+ MAXCORES="8"
+ ;;
+ winnet*|win*2003*|windowsnet*)
+ VM_OS_TYPE="winnetstandard"
+ MAXMEM="4000"
+ MAXCORES="8"
+ ;;
+ winxphome*|windowsxphome*)
+ VM_OS_TYPE="winxphome"
+ MAXMEM="4000"
+ MAXCORES="2"
+ ;;
+ winxp*64|windowsxp*64)
+ VM_OS_TYPE="winxppro-64"
+ MAXMEM="8000"
+ MAXCORES="8"
+ ;;
+ winxp*|windowsxp*)
+ VM_OS_TYPE="winxppro"
+ MAXMEM="4000"
+ MAXCORES="4"
+ ;;
+ winvista-64)
+ VM_OS_TYPE="winvista-64"
+ MAXMEM="16000"
+ MAXCORES="4"
+ ;;
+ windows7-64)
+ VM_OS_TYPE="windows7-64"
+ MAXMEM="32000"
+ MAXCORES="8"
+ ;;
+ windows8-64)
+ VM_OS_TYPE="windows8-64"
+ MAXMEM="32000"
+ MAXCORES="8"
+ ;;
+ windows9-64)
+ VM_OS_TYPE="windows9-64"
+ MAXMEM="64000"
+ MAXCORES="8"
+ ;;
+ winvista)
+ VM_OS_TYPE="winvista"
+ MAXMEM="8000"
+ MAXCORES="2"
+ ;;
+ windows7)
+ VM_OS_TYPE="windows7"
+ MAXMEM="8000"
+ MAXCORES="4"
+ ;;
+ windows8)
+ VM_OS_TYPE="windows8"
+ MAXMEM="8000"
+ MAXCORES="4"
+ ;;
+ windows9)
+ VM_OS_TYPE="windows9"
+ MAXMEM="8000"
+ MAXCORES="4"
+ ;;
+ win*64)
+ MAXMEM="16000"
+ MAXCORES="4"
+ ;;
+ win*)
+ MAXMEM="8000"
+ MAXCORES="1"
+ ;;
+ dos|msdos*|ms-dos*)
+ VM_OS_TYPE="dos"
+ shfolders="FALSE"
+ MAXMEM="128"
+ MAXCORES="1"
+ ;;
+ macos*64)
+ VM_OS_TYPE="freebsd-64"
+ MAXMEM="4000"
+ MAXCORES="2"
+ ;;
+ macos*)
+ VM_OS_TYPE="freebsd"
+ MAXMEM="4000"
+ MAXCORES="1"
+ ;;
+ beos*)
+ VM_OS_TYPE="other"
+ shfolders="FALSE"
+ ;;
+ # Unknown guestOS setting in .xml - this encompasses linux too,
+ # as there is a multitude of different distributions. Perhaps further
+ # action will be needed if this leads to problems with exotic OSs.
+ *64)
+ VM_OS_TYPE="other-64"
+ # shfolders="FALSE"
+ MAXMEM="123456"
+ MAXCORES="4"
+ ;;
+ *)
+ VM_OS_TYPE="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" ] && [ "$SHARE_REMAP_MODE" != 1 ]; then
+ HGFS_DISABLED="FALSE"
+else
+ HGFS_DISABLED="TRUE"
+fi
+
+[ "$mem" -ge "$MAXMEM" ] && mem="$MAXMEM"
+[ "$HWVER" -lt "7" -a "$mem" -gt "3500" ] && mem="3500"
+
diff --git a/core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/log_config_summary.inc b/core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/log_config_summary.inc
new file mode 100644
index 00000000..41986b2a
--- /dev/null
+++ b/core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/log_config_summary.inc
@@ -0,0 +1,60 @@
+##################################################
+# Include: Print vm config summary into log file #
+##################################################
+
+# log script information
+writelog "# File created by $0 (VMware version ${vmware_version})\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\t$macaddr"
+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 "\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
+
+writelog "Shared folders:"
+if [ "${HGFS_DISABLED}" = "FALSE" ]; then
+ writelog "\tNo shared folders enabled."
+else
+ writelog "\Shared folders enabled."
+fi
+
+# image
+writelog "Diskimage:"
+writelog "\tDiskfile:\t${VM_DISKFILE_RO}"
+writelog "\tHWVersion:\t${HWVER}"
+writelog "\tVMostype:\t${VM_OS_TYPE}"
+
+# misc
+writelog "Misc:"
+writelog "\tDisplayname:\t${VM_DISPLAYNAME}"
+if [ "${cap3d}" = "TRUE" -a "${enable3d}" = "TRUE" ]; then
+ writelog "\t3D Graphics:\tenabled"
+fi
+# empty line at end
+writelog ""
+
diff --git a/core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/parse_vmx.inc b/core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/parse_vmx.inc
index 092abce5..dec80e1d 100644
--- a/core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/parse_vmx.inc
+++ b/core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/parse_vmx.inc
@@ -1,130 +1,8 @@
######################################################################
-# Include: Parsing the non-legacy delivered vmxfile $TMPDIR/$IMGUUID #
+# Include: Parsing the non-legacy delivered vmxfile ${TMPCONFIG} #
######################################################################
writelog "Parsing virtual machine description file..."
-# 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.addressType = "static"' >> "$TMPDIR/$IMGUUID"
-echo 'ethernet0.address = "'"${macaddr}"'"' >> "$TMPDIR/$IMGUUID"
-
-# DVD, CDROM
-# XXX: For now it's save to assume ide channel 1 is free, as we support only one HDD, and it it's IDE, it's on channel 0
-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
-
-writelog "numvcpus = ${cpu_cores} - maxvcpus=${real_core_count}"
-
-# 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
-if [ -n "$SLX_EXAM" ]; then
- # Exam mode: No USB (TODO: Configurable)
- sed -i '/^usb\./d' "$TMPDIR/$IMGUUID"
- echo 'usb.present = "FALSE"' >> "$TMPDIR/$IMGUUID"
-else
- cat >> "$TMPDIR/$IMGUUID" <<-HEREEND
- usb.present = "TRUE"
- usb.generic.autoconnect = "TRUE"
- HEREEND
-fi
-
-# shared folders
-cat >> "$TMPDIR/$IMGUUID" <<-HEREEND
-$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 = "FALSE"
-sharedFolder.maxNum = "2"
-hgfs.mapRootShare = "TRUE"
-hgfs.linkRootShare = "TRUE"
-HEREEND
-
-# Isolation tools: settings
-# It should be verified whether and when entries necessary
-cat >> "$TMPDIR/$IMGUUID" <<-HEREEND
-isolation.tools.hgfs.disable = "FALSE"
-isolation.tools.dnd.disable = "FALSE"
-isolation.tools.copy.enable = "TRUE"
-isolation.tools.paste.enabled = "TRUE"
-HEREEND
-
-# Serial, parallel: Empty, nothing is being currently set. TODO later.
-
-# Graphics, GPU: 3D will be enabled (even if vmware doesn't support the chip) if we whitelisted it.
-if [ -n "$SLX_VMWARE_3D" ]; then
- writelog "FORCE3D set - overriding 3D in vmx file."
- echo 'mks.gl.allowBlacklistedDrivers = "TRUE"' >> "$TMPDIR/$IMGUUID"
- # We override... play safe and cap the hwVersion to 10, since some i915 chips goofed up with 12
- # Investigate if we might have to do this in other cases where we don't override
- if grep -qi '^mks.enable3d.*true' "$TMPDIR/$IMGUUID"; then
- vmw_cap_hw_version "10"
- fi
-else
- writelog "FORCE3D not set - 3D will only work if GPU/driver is whitelisted by vmware."
-fi
-
-# Disable DPI scaling information passing via vmware tools
-sed -i '/^gui.applyHostDisplayScaling/d' "$TMPDIR/$IMGUUID"
-echo 'gui.applyHostDisplayScalingToGuest = "FALSE"' >> "$TMPDIR/$IMGUUID"
-
-# Additinal exam mode settings
-if [ -n "$SLX_EXAM" ]; then
- echo 'gui.restricted = "true"' >> "$TMPDIR/$IMGUUID"
-fi
-
-# Killing duplicate lines (output much nicer than 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 )
+HWVER=$(grep -i -m1 '^virtualHW.version *= *' "${TMPCONFIG}" | awk -F '=' '{print $2}' | sed -r 's/[^0-9]//g')
diff --git a/core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/set_vmware_include_variables.inc b/core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/set_vmware_include_variables.inc
index 0c45ee59..da820bc6 100644
--- a/core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/set_vmware_include_variables.inc
+++ b/core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/set_vmware_include_variables.inc
@@ -3,8 +3,6 @@
#####################################################################
set_vmware_include_variables() {
- [ "$mem" -gt 3800 -a "$(uname -m)" != "x86_64" ] && mem=3800
-
# temporary disk space for logs, etc...
redodir="/tmp/virt/vmware/${USER}.$$"
@@ -14,9 +12,6 @@ set_vmware_include_variables() {
# configfile
conffile="${confdir}/run-vmware.conf"
- # diskfile
- diskfile="${vmpath}"
-
# users vmware config folder
[ -z "${HOME}" ] && HOME=$(getent passwd "$(whoami)" | awk -F ':' '{print $6}')
vmhome="${HOME}/.vmware"
diff --git a/core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/write_final_vmx.inc b/core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/write_final_vmx.inc
new file mode 100644
index 00000000..f1395369
--- /dev/null
+++ b/core/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/write_final_vmx.inc
@@ -0,0 +1,211 @@
+
+# check for vmdk file marker %VM_DISK_PATH% and put vmdk path in it's place: also VM_DISK_MODE
+# and VM_DISK_REDOLOGDIR.
+sed -i 's#%VM_DISK_PATH%#'"$VM_DISKFILE_RO"'#g' "${TMPCONFIG}"
+sed -i 's#%VM_DISK_MODE%#'"independent-nonpersistent"'#g' "${TMPCONFIG}"
+sed -i 's#%VM_DISK_REDOLOGDIR%#'"$redodir"'#g' "${TMPCONFIG}"
+
+# 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.addressType = "static"' >> "${TMPCONFIG}"
+echo 'ethernet0.address = "'"${macaddr}"'"' >> "${TMPCONFIG}"
+
+# DVD, CDROM
+# XXX: For now it's safe to assume ide channel 1 is free, as we support only one HDD, and if it's IDE, it's on channel 0
+cat >> "${TMPCONFIG}" <<-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
+
+if [ -n "$FLOPPYIMG" ]; then
+ floppy1="TRUE"
+else
+ floppy1="FALSE"
+fi
+
+# Floppies:
+cat >> "${TMPCONFIG}" <<-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 = "$FLOPPYIMG"
+HEREEND
+
+writelog "numvcpus = ${cpu_cores} - maxvcpus=${real_core_count}"
+
+# RAM, CPUs
+cat >> "${TMPCONFIG}" <<-HEREEND
+numvcpus = "$cpu_cores"
+cpuid.coresPerSocket = "$cores_per_socket"
+maxvcpus = "$real_core_count"
+memsize = "$mem"
+MemAllowAutoScaleDown = "FALSE"
+MemTrimRate = "-1"
+HEREEND
+
+# USB fallback: Only write usb config if there's none
+if ! grep -q -i "^usb\.present" "${TMPCONFIG}"; then
+ # Nothing found, go ahead
+ if [ -n "$SLX_EXAM" ]; then
+ # Exam mode: Default to no USB
+ sed -i '/^usb\./Id' "${TMPCONFIG}"
+ echo 'usb.present = "FALSE"' >> "${TMPCONFIG}"
+ else
+ cat >> "${TMPCONFIG}" <<-HEREEND
+ usb.present = "TRUE"
+ HEREEND
+ fi
+fi
+sed -i '/^usb\.generic\.autoconnect/Id' "${TMPCONFIG}"
+echo 'usb.generic.autoconnect = "TRUE"' >> "${TMPCONFIG}"
+# USB 3.0 support changes quality and has different side effects
+# with every minor release of vmware. Always force 2.0 for now.
+# TODO: Get it fixed by vmware?
+sed -i '/^ehci\.present/Id;/^usb_xhci\.present/Id' "${TMPCONFIG}"
+echo 'ehci.present = "TRUE"' >> "${TMPCONFIG}"
+
+# shared folders
+if [ "$HGFS_DISABLED" = "FALSE" ]; then
+ cat >> "${TMPCONFIG}" <<-HEREEND
+ sharedFolder.option = "alwaysEnabled"
+ 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 = "FALSE"
+ sharedFolder.maxNum = "2"
+ hgfs.mapRootShare = "TRUE"
+ hgfs.linkRootShare = "TRUE"
+ HEREEND
+fi
+
+# Isolation tools: settings
+cat >> "${TMPCONFIG}" <<-HEREEND
+isolation.tools.hgfs.disable = "$HGFS_DISABLED"
+isolation.tools.dnd.disable = "FALSE"
+isolation.tools.copy.enable = "TRUE"
+isolation.tools.paste.enabled = "TRUE"
+HEREEND
+
+# Serial port
+if [ -n "$serial_0" ]; then
+ cat >> "${TMPCONFIG}" <<-HEREEND
+ serial0.present = "TRUE"
+ serial0.startConnected = "TRUE"
+ serial0.fileType = "device"
+ serial0.fileName = "$serial_0"
+ serial0.tryNoRxLoss = "FALSE"
+ serial0.autodetect = "FALSE"
+ HEREEND
+fi
+
+# Parallel port
+if [ -n "$parallel_0" ]; then
+ cat >> "${TMPCONFIG}" <<-HEREEND
+ parallel0.present = "TRUE"
+ parallel0.startConnected = "TRUE"
+ parallel0.fileType = "device"
+ parallel0.fileName = "$parallel_0"
+ parallel0.bidirectional = "TRUE"
+ parallel0.autodetect = "FALSE"
+ HEREEND
+fi
+
+# Graphics, GPU: 3D will be enabled (even if vmware doesn't support the chip) if we whitelisted it.
+if [ -n "$SLX_VMWARE_3D" ]; then
+ writelog "FORCE3D set - overriding 3D in vmx file."
+ echo 'mks.gl.allowBlacklistedDrivers = "TRUE"' >> "${TMPCONFIG}"
+ # We override... play safe and cap the hwVersion to 10, since some i915 chips goofed up with 12
+ # Investigate if we might have to do this in other cases where we don't override
+ if grep -qi '^mks.enable3d.*true' "${TMPCONFIG}"; then
+ vmw_cap_hw_version "10"
+ fi
+else
+ writelog "FORCE3D not set - 3D will only work if GPU/driver is whitelisted by vmware."
+fi
+
+# Disable DPI scaling information passing via vmware tools
+sed -i '/^gui.applyHostDisplayScaling/Id' "${TMPCONFIG}"
+echo 'gui.applyHostDisplayScalingToGuest = "FALSE"' >> "${TMPCONFIG}"
+
+# Additinal exam mode settings
+if [ -n "$SLX_EXAM" ]; then
+ echo 'gui.restricted = "true"' >> "${TMPCONFIG}"
+fi
+
+# Hack resolution if we know the desired one is not in the default list of vmx_svga
+# For now, only do it on the odd ones, as we don't know if this has any side effects
+# This seems unnecessary on Win7 but is required on WinXP - need more research for other OSs
+case "$RESOLUTION" in
+ 1600x900|2560x1440|2880x1800|3200x1800)
+ X=${RESOLUTION%x*}
+ Y=${RESOLUTION#*x}
+ BYTES=$(( ( ( X * Y * 4 + 65535 ) / 65536 ) * 65536 ))
+ [ "$BYTES" -lt 16777216 ] && BYTES=16777216
+ cat >> "${TMPCONFIG}" <<-EOF
+ svga.autodetect = "FALSE"
+ svga.vramSize = $BYTES
+ svga.maxWidth = $X
+ svga.maxHeight = $Y
+ EOF
+ ;;
+esac
+
+# Killing duplicate lines (output much nicer than sort -u):
+awk '!a[$0]++' "${TMPCONFIG}" > "${TMPCONFIG}.tmp" && mv -f "${TMPCONFIG}.tmp" "${TMPCONFIG}"
+
+# Apply $maxhardwareversion to final VMX
+if [ -n "$HWVER" ] && [ "$HWVER" -gt "$maxhardwareversion" ]; then
+ writelog "Hardware version capped to $maxhardwareversion (was $HWVER)"
+ sed -i 's/^virtualHW\.version.*$/virtualHW.version = "'$maxhardwareversion'"/I' "${TMPCONFIG}"
+ HWVER="$maxhardwareversion"
+fi
+
+# Enable nested virtualization if not specified in remote vmx
+if [ -e "/run/hwinfo" ] && ! grep -qi '^vhv\.enable' "${TMPCONFIG}" \
+ && grep -qE '^flags\s*:.*\b(ept|npt)\b' "/proc/cpuinfo" \
+ && [ "$HWVER" -ge "9" ]; then
+ . "/run/hwinfo"
+ [ "${HW_KVM}" = "ENABLED" ] && echo 'vhv.enable = "TRUE"' >> "${TMPCONFIG}"
+fi
+# TODO: Need a way to check if supported by hardware before enabling!
+#grep -qi '^vpmc\.enable' "${TMPCONFIG}" || echo 'vpmc.enable = "TRUE"' >> "${TMPCONFIG}"
+
+# Disable space check warnings
+sed -i '/^mainMem.freeSpaceCheck/Id' "${TMPCONFIG}"
+echo 'mainMem.freeSpaceCheck = "FALSE"' >> "${TMPCONFIG}"
+
+# See if there are any USB devices connected that we want to pass through immediately
+get_usb_devices 'usb.autoConnect.deviceXXXXX = "0x%VENDOR%:0x%PRODUCT%"' \
+ | sed -r 's/0x0+/0x/g' \
+ | awk '{sub(/XXXXX/,NR-1)}1' \
+ >> "${TMPCONFIG}"
+
+# At last_ Let's copy it to $confdir/run-vmware.conf
+if cp -p "${TMPCONFIG}" "$conffile"; then
+ writelog "Copied TMPDIR/IMGUUID ${TMPCONFIG} to conffile ${conffile}"
+else
+ writelog "Could not copy TMPDIR/IMGUUID -${TMPCONFIG}- to conffile ${conffile}!"
+ cleanexit 1
+fi
+
diff --git a/core/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include b/core/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include
index e25947e0..f66bc9b8 100644
--- a/core/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include
+++ b/core/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include
@@ -20,7 +20,7 @@
################################################################################
VMWAREINCLUDEDIR=/opt/openslx/vmchooser/vmware/includes
-vmostype=$(rv_clean_string "$vmostype")
+VM_OS_TYPE=$(rv_clean_string "$VM_OS_TYPE")
# declaration of default variables for vmware
source "${VMWAREINCLUDEDIR}/set_vmware_include_variables.inc" && set_vmware_include_variables
@@ -33,39 +33,23 @@ vmw_cap_hw_version() {
[ "$1" -lt "$maxhardwareversion" ] && maxhardwareversion="$1"
}
-if [ "$LEGACY" ]; then
- # hardware checks
- 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
-else
- # write configuration files
- source "${VMWAREINCLUDEDIR}/write_config_files.inc"
+# get information from downloaded vmx
+source "${VMWAREINCLUDEDIR}/parse_vmx.inc"
- # parse the given vmx file
- source "${VMWAREINCLUDEDIR}/parse_vmx.inc"
-fi
+# determine limitations wrt RAM and CPU count of VM
+source "${VMWAREINCLUDEDIR}/determine_hardware_limitations.inc"
-# logging and stdout
-# needs writelog() from vmchooser-run_virt
-source "${VMWAREINCLUDEDIR}/logging.inc" && logging
+# create file and directory structure for vmware setup
+source "${VMWAREINCLUDEDIR}/create_static_directory_structure.inc"
-# Apply $maxhardwareversion to final VMX
-HWVER=$(grep -i '^virtualHW.version *= *' "$conffile" | head -n 1 | awk -F '=' '{print $2}' | sed -r 's/[^0-9]//g')
-if [ -n "$HWVER" ] && [ "$HWVER" -gt "$maxhardwareversion" ]; then
- writelog "Hardware version capped to $maxhardwareversion (was $HWVER)"
- sed -i 's/^virtualHW\.version.*$/virtualHW.version = "'$maxhardwareversion'"/I' "$conffile"
-fi
+# create preferences file ${vmhome}/preferences
+source "${VMWAREINCLUDEDIR}/create_vmhome_preferences_file.inc" && create_vmhome_preferences_file
-# See if there are any USB devices connected that we want to pass through immediately
-get_usb_devices 'usb.autoConnect.deviceXXXXX = "0x%VENDOR%:0x%PRODUCT%"' \
- | sed -r 's/0x0+/0x/g' \
- | awk '{sub(/XXXXX/,NR-1)}1' \
- >> "$conffile"
+# parse the given vmx file
+source "${VMWAREINCLUDEDIR}/write_final_vmx.inc"
+# print summary - needs writelog() from vmchooser-run_virt
+source "${VMWAREINCLUDEDIR}/log_config_summary.inc"
# For debugging
cp "$conffile" "/tmp/vmware-last-config"
diff --git a/core/modules/vmware/module.build b/core/modules/vmware/module.build
index bac61583..f321b084 100644
--- a/core/modules/vmware/module.build
+++ b/core/modules/vmware/module.build
@@ -1,12 +1,12 @@
fetch_source() {
- [ -e "${MODULE_WORK_DIR}/src" -a -d "${MODULE_WORK_DIR}/src" ] && \
+ [ -d "${MODULE_WORK_DIR}/src" ] && \
{ rm -r "${MODULE_WORK_DIR}/src" || perror "Could not delete old src dir."; }
mkdir -p "${MODULE_WORK_DIR}/src" || perror "Could not mkdir src"
- cd "${MODULE_WORK_DIR}/src" || perror "cd fail."
+ cd "${MODULE_WORK_DIR}/src" || perror "cd to '${MODULE_WORK_DIR}/src' failed."
# Get directory listing
wget -O "index.html" "$REQUIRED_DOWNLOAD_BASE" || perror "Could not download vmware dir index"
-
+
VMWARE_BUNDLE_FILE=$(grep -E -o -i "href=\"VMware-$REQUIRED_TYPE-[^\"]+[\._\-]$ARCHREGEX[\._\-][^\"]+\"" "index.html" | head -n 1 | awk -F '"' '{printf $2}')
[ -z "$VMWARE_BUNDLE_FILE" ] && perror "Could not determine vmware $REQUIRED_TYPE bundle file for current arch from $MODULE_WORK_DIR/src/index.html"
# Download file
@@ -34,11 +34,11 @@ build() {
# prepare the build directory with the files needed during the chroot
cp "${MODULE_WORK_DIR}/src/$VMWARE_BUNDLE_FILE" "${MODULE_BUILD_DIR}/$VMWARE_BUNDLE_FILE"
- cp -r "${MODULE_WORK_DIR}/patches" "${MODULE_BUILD_DIR}"
+ cp -r "${MODULE_DIR}/patches" "${MODULE_BUILD_DIR}"
# sanity check to see if KERNEL_HEADERS_DIR is set and exists
[ -z "${KERNEL_HEADERS_DIR}" -o ! -e "${KERNEL_HEADERS_DIR}" ] && perror "KERNEL_HEADERS_DIR ('"${KERNEL_HEADERS_DIR}"') not found. Was the kernel module built?"
-
+
# build in two steps, to be able to use mltk function while patching modules
pinfo "Installing vmware per chroot..."
chroot_run "${MODULE_BUILD_DIR}" <<-EOF
@@ -54,7 +54,7 @@ build() {
for KMOD in *.tar; do
SHORT="${KMOD%%.tar}"
[ -e ".${SHORT}.patched" ] && continue
- for PATCH in $(find "${MODULE_WORK_DIR}/patches/" -name "${SHORT}__*__*.patch"); do
+ for PATCH in $(find "${MODULE_DIR}/patches/" -name "${SHORT}__*__*.patch"); do
parse_patch_name "$PATCH"
[ -z "${MIN_KERN}" -o -z "${MAX_KERN}" ] && perror "Could not parse patch filename"
if version_lt "$TARGET_KERNEL_SHORT" "$MIN_KERN" || version_gt "$TARGET_KERNEL_SHORT" "$MAX_KERN"; then
@@ -101,7 +101,7 @@ build() {
# This file was formerly stored in data/opt/openslx/vmchooser/vmware/vmware.conf.
mkdir -p "${MODULE_BUILD_DIR}/opt/openslx/vmchooser/vmware/" || perror "could not mkdir "${MODULE_BUILD_DIR}/opt/openslx/vmchooser/vmware/"."
-
+
cat > "${MODULE_BUILD_DIR}/opt/openslx/vmchooser/vmware/vmware.conf" <<-EOF
# configuration file written by vmware/module.build
vmnet0=true
@@ -127,7 +127,7 @@ post_copy() {
tarcopy "$(find /usr/lib/ /usr/lib64 -name gconv -type d)" "$TARGET_BUILD_DIR"
# Update Icon cache for vmplayer
- gtk-update-icon-cache-3.0 "${TARGET_BUILD_DIR}/usr/share/icons/hicolor/" || pwarning "update-icon-cache-3.0 failed."
+ gtk-update-icon-cache-3.0 "${TARGET_BUILD_DIR}/usr/share/icons/hicolor/" || pwarning "update-icon-cache-3.0 failed."
# fix vmware-usbarbitrator bug
date +'%Y.%m.%d' >"${TARGET_BUILD_DIR}/etc/arch-release"
diff --git a/core/modules/vmware/module.conf b/core/modules/vmware/module.conf
index 697ba546..02770c34 100644
--- a/core/modules/vmware/module.conf
+++ b/core/modules/vmware/module.conf
@@ -1,4 +1,4 @@
-REQUIRED_DOWNLOAD_BASE="http://softwareupdate.vmware.com/cds/vmw-desktop/ws/12.1.0/3272444/linux/core/"
+REQUIRED_DOWNLOAD_BASE="http://softwareupdate.vmware.com/cds/vmw-desktop/ws/12.5.2/4638234/linux/core/"
REQUIRED_TYPE="workstation"
REQUIRED_MODULES="kernel"
REQUIRED_DIRECTORIES="
@@ -38,8 +38,8 @@ REQUIRED_VMWARE_DELETIONS="
/etc/cups/thnuclnt.convs
/etc/cups/thnuclnt.types
/etc/modprobe.d/vmware-fuse.conf
- /lib/modules/3.11.0-13-generic/misc/vmnet.ko
- /lib/modules/3.11.0-13-generic/misc/vmmon.ko
+ /lib/modules/*-generic/misc/vmnet.ko
+ /lib/modules/*-generic/misc/vmmon.ko
/usr/share/mime/packages/vmware-player.xml
/usr/share/applications/vmware*
/usr/share/desktop-directories/vmware-ace-vms.directory
diff --git a/core/modules/vmware/patches/vmmon__4.9__12.0.0-12.5.2.patch b/core/modules/vmware/patches/vmmon__4.9__12.0.0-12.5.2.patch
new file mode 100644
index 00000000..054dd8a1
--- /dev/null
+++ b/core/modules/vmware/patches/vmmon__4.9__12.0.0-12.5.2.patch
@@ -0,0 +1,13 @@
+--- a/linux/hostif.c 2016-12-22 14:27:00.425933040 +0100
++++ b/linux/hostif.c 2016-12-22 14:27:38.746706220 +0100
+@@ -1162,7 +1162,9 @@
+ int retval;
+
+ down_read(&current->mm->mmap_sem);
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0)
++ retval = get_user_pages((unsigned long)uvAddr, numPages, 0, ppages, NULL);
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
+ retval = get_user_pages((unsigned long)uvAddr, numPages, 0, 0, ppages, NULL);
+ #else
+ retval = get_user_pages(current, current->mm, (unsigned long)uvAddr,
diff --git a/core/modules/vmware/patches/vmnet__4.9__12.0.0-12.5.2.patch b/core/modules/vmware/patches/vmnet__4.9__12.0.0-12.5.2.patch
new file mode 100644
index 00000000..18ef062b
--- /dev/null
+++ b/core/modules/vmware/patches/vmnet__4.9__12.0.0-12.5.2.patch
@@ -0,0 +1,13 @@
+--- a/userif.c 2016-12-22 14:29:43.237218623 +0100
++++ b/userif.c 2016-12-22 14:31:03.258834075 +0100
+@@ -113,7 +113,9 @@
+ int retval;
+
+ down_read(&current->mm->mmap_sem);
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0)
++ retval = get_user_pages(addr, 1, 0, &page, NULL);
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
+ retval = get_user_pages(addr, 1, 1, 0, &page, NULL);
+ #else
+ retval = get_user_pages(current, current->mm, addr,