diff options
| author | Manuel Schneider | 2013-10-16 14:09:45 +0200 |
|---|---|---|
| committer | Manuel Schneider | 2013-10-16 14:09:45 +0200 |
| commit | 9dba936ce697fa612ee327384e9291e319337169 (patch) | |
| tree | bc7267372173b5cda99f7dd2b0e17d0cf0d0bc6b /remote/modules/vmware/data/opt | |
| parent | [printergui] Changed qmake-qt4 to qmake. (diff) | |
| parent | Merge branch 'master' of git.openslx.org:openslx-ng/tm-scripts (diff) | |
| download | tm-scripts-9dba936ce697fa612ee327384e9291e319337169.tar.gz tm-scripts-9dba936ce697fa612ee327384e9291e319337169.tar.xz tm-scripts-9dba936ce697fa612ee327384e9291e319337169.zip | |
Merge branch 'master' of git.openslx.org:openslx-ng/tm-scripts
Diffstat (limited to 'remote/modules/vmware/data/opt')
| -rwxr-xr-x | remote/modules/vmware/data/opt/openslx/bin/vmplayer | 15 | ||||
| -rwxr-xr-x | remote/modules/vmware/data/opt/openslx/bin/vmware | 11 | ||||
| -rw-r--r-- | remote/modules/vmware/data/opt/openslx/etc/vmware/nvram | bin | 0 -> 8664 bytes | |||
| -rwxr-xr-x | remote/modules/vmware/data/opt/openslx/etc/vmware/run-virt.include | 644 | ||||
| -rw-r--r-- | remote/modules/vmware/data/opt/openslx/etc/vmware/vmware.conf | 8 | ||||
| -rwxr-xr-x | remote/modules/vmware/data/opt/openslx/scripts/systemd-vmware_env | 281 |
6 files changed, 959 insertions, 0 deletions
diff --git a/remote/modules/vmware/data/opt/openslx/bin/vmplayer b/remote/modules/vmware/data/opt/openslx/bin/vmplayer new file mode 100755 index 00000000..147f514f --- /dev/null +++ b/remote/modules/vmware/data/opt/openslx/bin/vmplayer @@ -0,0 +1,15 @@ +#!/bin/sh +# radically simplified version of the original script vmplayer by VMware Inc. +PREFIX=/usr/lib/vmware # depends on the vmware location + +# HACK: Let the OpenGL driver report s3tc capability even if not present, so 3D will be enabled +export force_s3tc_enable=true + +exec "$PREFIX"'/lib/wrapper-gtk24.sh' \ + "$PREFIX"'/lib' \ + "$PREFIX"'/bin/vmplayer' \ + "$PREFIX"'/libconf' "$@" + + + + diff --git a/remote/modules/vmware/data/opt/openslx/bin/vmware b/remote/modules/vmware/data/opt/openslx/bin/vmware new file mode 100755 index 00000000..1fe9b11d --- /dev/null +++ b/remote/modules/vmware/data/opt/openslx/bin/vmware @@ -0,0 +1,11 @@ +#!/bin/sh +# radically simplified version of the original script vmplayer by VMware Inc. +PREFIX=/usr/lib/vmware # depends on the vmware location +exec "$PREFIX"'/lib/wrapper-gtk24.sh' \ + "$PREFIX"'/lib' \ + "$PREFIX"'/bin/vmware' \ + "$PREFIX"'/libconf' "$@" + + + + diff --git a/remote/modules/vmware/data/opt/openslx/etc/vmware/nvram b/remote/modules/vmware/data/opt/openslx/etc/vmware/nvram Binary files differnew file mode 100644 index 00000000..85125f1e --- /dev/null +++ b/remote/modules/vmware/data/opt/openslx/etc/vmware/nvram diff --git a/remote/modules/vmware/data/opt/openslx/etc/vmware/run-virt.include b/remote/modules/vmware/data/opt/openslx/etc/vmware/run-virt.include new file mode 100755 index 00000000..e60d5a5b --- /dev/null +++ b/remote/modules/vmware/data/opt/openslx/etc/vmware/run-virt.include @@ -0,0 +1,644 @@ +# run-virt.include +# ----------------------------------------------------------------------------- +# Copyright (c) 2009..2012 - RZ Uni Freiburg +# Copyright (c) 2009..2013 - OpenSLX GmbH +# +# This program is free software distributed under the GPL version 2. +# See http://openslx.org/COPYING +# +# If you have any feedback please consult http://openslx.org/feedback and +# send your suggestions, praise, or complaints to feedback@openslx.org +# +# General information about OpenSLX can be found at http://openslx.org/ +# ----------------------------------------------------------------------------- +# run-virt.include +# - component for vmware/player of the vmchooser plugin run-virt.sh +################################################################################ + +# configuration writer functions +################################################################################ + +function clean_string () +{ + if [ "$#" -ge 1 ]; then + echo "$@" | tr '[A-Z]' '[a-z]' | tr -d '\t _./' + else + cat - | tr '[A-Z]' '[a-z]' | tr -d '\t _./' + fi +} + +vmostype=$(clean_string "$vmostype") + +runvmwareconfheader () +{ + echo "# This configuration file was generated by $0" > "$conffile" + + # does this makes sense? Depends on the VMworkstation in use + MAXMEM="9999999" + MAXCORES="4" + + # check for the ostype + # 1) memory limits + case "$vmostype" in + win31*|windows31*) + MAXMEM="32" + vmostype="win31" + ;; + winnt*|windowsnt*) + MAXMEM="1000" + vmostype="winnt" + ;; + win95*|windows95*) + MAXMEM="96" + vmostype="win95" + ;; + win98*|windows98*) + MAXMEM="384" + vmostype="win98" + ;; + winme*|windowsme*) + MAXMEM="384" + vmostype="winme" + ;; + win2000|windows2000|win2000pro*) + MAXMEM="4000" + vmostype="win2000pro" + ;; + win2000srv*|windows2000srv*|win2000serv*|windows2000serv*) + MAXMEM="4000" + vmostype="win2000serv" + ;; + win2000adv*|windows2000adv*|win2000dat*|windows2000dat*) + MAXMEM="8000" + vmostype="win2000advserv" + ;; + winnet*64|win*2003*64|windowsnet*64) + MAXMEM="8000" + vmostype="winnetstandard-64" + ;; + winnet*|win*2003*|windowsnet*) + MAXMEM="4000" + vmostype="winnetstandard" + ;; + winxphome*|windowsxphome*) + MAXMEM="4000" + vmostype="winxphome" + ;; + winxp*64|windowsxp*64) + MAXMEM="8000" + vmostype="winxppro-64" + ;; + winxp*|windowsxp*) + MAXMEM="4000" + vmostype="winxppro" + ;; + winvista*64|windowsvista*64) + MAXMEM="16000" + vmostype="winvista-64" + ;; + winvista*|windowsvista*) + MAXMEM="8000" + vmostype="winvista" + ;; + win7*64|windows7*64) + MAXMEM="32000" + vmostype="windows7-64" + ;; + win7*|windows7*) + MAXMEM="8000" + vmostype="windows7" + ;; + win*64) + MAXMEM="16000" + ;; + win*) + MAXMEM="8000" + ;; + dos|msdos*|ms-dos*) + MAXMEM="128" + vmostype="dos" + ;; + *64) + MAXMEM="123456" + ;; + *) + MAXMEM="8000" + ;; + esac + + # 2) other hardware + capabilities + shfolders="FALSE" + case "$vmostype" in + win31) + MAXCORES="1" + sound="sb16" + ;; + winnt) + MAXCORES="2" + sound="sb16" + ;; + win95|win98|winme) + MAXCORES="1" + ;; + win2000pro) # Don't know if Win 2000 supports shared folders, disabled to be safe + MAXCORES="2" + ;; + win2000serv) + MAXCORES="4" + ;; + win2000advserv) + MAXCORES="8" + ;; + winxphome) + MAXCORES="1" + shfolders="TRUE" + ;; + winxp*|winvista*|windows7*) + MAXCORES="4" + shfolders="TRUE" + ;; + winnet*) + shfolders="TRUE" + ;; + linux*|ubuntu*|suse*|debian*) + shfolders="TRUE" + ;; + macos*64) + MAXCORES="2" + vmostype="freebsd-64" + ;; + macos*) + MAXCORES="1" + vmostype="freebsd" + ;; + beos*) + vmostype="other" + ;; + # Unknown guestOS setting in .xml - use conservative defaults + *64) + vmostype="other-64" + ;; + *) + vmostype="other" + ;; + esac + + svga_autodetect="TRUE" + + real_core_count="$cpu_cores" + [ "$cpu_cores" -gt "$MAXCORES" ] && cpu_cores="$MAXCORES" + # It currently makes no sense to set the virtual number of cores + # to a different value than the virtual number of cores per virtual CPU. + cores_per_socket="$cpu_cores" + + if [ "x$shfolders" != "xFALSE" ]; then + ENABLE_SHARE='sharedFolder.option = "alwaysEnabled"' + else + ENABLE_SHARE='' + fi + + [ "$mem" -ge "$MAXMEM" ] && mem="$MAXMEM" + [ "$hwver" -lt "7" -a "$mem" -gt "3500" ] && mem="3500" + + cap3d="WHAT IS THIS VAR USED FOR?" # helper var for loging output + + cat >> "$conffile" <<HEREEND +.encoding = "UTF-8" +config.version = "8" + +# general hardware (ehci, 3d accel) +ehci.present = "TRUE" +$FORCE3D +mks.enable3d = "$enable3d" + +monitor.virtual_mmu = "automatic" +monitor.virtual_exec = "automatic" +floppy1.clientDevice = "FALSE" +floppy1.readonly = "TRUE" + +# id +virtualHW.version = "$hwver" +displayName = "$displayname" +guestOS = "$vmostype" + +# CPU/MEM +numvcpus = "$cpu_cores" +cpuid.coresPerSocket = "$cores_per_socket" +maxvcpus = "$real_core_count" +memsize = "$mem" +MemAllowAutoScaleDown = "FALSE" +MemTrimRate = "-1" + +# ide-disks +ide0:0.present = "$ide" +ide0:0.fileName = "$vm_diskfile" +## Edited for persistent mode. +ide0:0.mode = "independent-${diskmode}" +## +ide1:0.present = "$cdrom0" +ide1:0.autodetect = "TRUE" +ide1:0.fileName = "auto detect" +ide1:0.deviceType = "cdrom-raw" +ide1:1.present = "$cdrom1" +ide1:1.autodetect = "TRUE" +ide1:1.fileName = "auto detect" +ide1:1.deviceType = "cdrom-raw" + +# scsi-disks +scsi0.present = "$scsi" +scsi0:0.present = "$scsi" +scsi0:0.fileName = "$vm_diskfile" +scsi0.virtualDev = "$hddrv" +## Edited for persistent mode. +scsi0:0.mode = "independent-${diskmode}"$stateFileConfiguration +## + +# floppies +floppy0.present = "$floppy0" +floppy0.startConnected = "FALSE" +floppy0.autodetect = "TRUE" +floppy0.fileName = "auto detect" + +# we need floppy b: for our windows client configuration +floppy1.present = "$floppy1" +floppy1.startConnected = "TRUE" +floppy1.fileType = "file" +floppy1.fileName = "$floppy1name" + +# nics +ethernet0.present = "TRUE" +ethernet0.addressType = "static" +$network_virtualDev +ethernet0.connectionType = "$network_kind" +#ethernet1.connectionType = "custom" +#ethernet1.vnet = "/dev/vmnet2" +ethernet0.address = "00:50:56:$macaddrsuffix" +ethernet0.wakeOnPcktRcv = "FALSE" + +# sound +sound.present = "TRUE" +sound.fileName = "-1" +sound.autodetect = "TRUE" +sound.virtualdev = "$sound" + +# svga +svga.autodetect = "$svga_autodetect" + +# usb +usb.present = "TRUE" +usb.generic.autoconnect = "TRUE" + +# pci configuration +usb.pciSlotNumber = "16" +ethernet0.pciSlotNumber = "17" +sound.pciSlotNumber = "18" +ehci.pciSlotNumber = "19" +scsi0.pciSlotNumber = "20" + +# shared folders +$ENABLE_SHARE +sharedFolder0.present = "$shfolders" +sharedFolder0.enabled = "$shfolders" +sharedFolder0.expiration = "never" +sharedFolder0.guestName = "$sharename" +sharedFolder0.hostPath = "$sharepath" +sharedFolder0.readAccess = "TRUE" +sharedFolder0.writeAccess = "TRUE" +sharedFolder.maxNum = "1" + +# dirs/configs +tmpDirectory = "$redodir" +redoLogDir = "$redodir" +mainMem.useNamedFile = "TRUE" +snapshot.disabled = "TRUE" +tools.syncTime = "TRUE" +isolation.tools.hgfs.disable = "FALSE" +hgfs.mapRootShare = "TRUE" +isolation.tools.dnd.disable = "FALSE" +isolation.tools.copy.enable = "TRUE" +isolation.tools.paste.enabled = "TRUE" + +# serial port +serial0.present = "$serial" +$serialdev + +# parallel port +parallel0.present = "$parallel" +parallel0.bidirectional = "$paralbidi" +$paraldev +HEREEND + + # set the appropriate permissions for the vmware config file + chmod u+rwx ${conffile} >/dev/null 2>&1 +} + +preferencesheader () +{ + cat > "$vmhome/preferences" <<HEREEND +.encoding = "UTF-8" +# This configuration file was generated by $0 + +# updates/tips +webUpdate.enabled = "FALSE" +pref.downloadPermission = "deny" +pref.vmplayer.downloadPermission = "deny" +pref.vmplayer.webUpdateOnStartup = "FALSE" +pref.tip.startup = "FALSE" +hints.hideAll = "TRUE" +hint.vmui.showAllUSBDevs = "FALSE" + +# configs +prefvmx.defaultVMPath = "$vmhome" +prefvmx.mru.config = "$conffile:" + +# hot keys +pref.hotkey.control = "true" +pref.hotkey.alt = "true" +pref.hotkey.shift = "true" +pref.hotkey.gui = "true" +gui.restricted = "true" + +# fullscreen/mouse/keyboard +pref.fullscreen.toolbarPixels = "0" +pref.vmplayer.fullscreen.autohide = "TRUE" +pref.grabOnMouseClick = "TRUE" +pref.grabOnKeyPress = "FALSE" +pref.motionGrab = "TRUE" +pref.motionUngrab = "TRUE" +pref.hideCursorOnUngrab = "TRUE" +pref.autoFit = "TRUE" +pref.autoFitFullScreen = "fitGuestToHost" +pref.vmplayer.exit.vmAction = "poweroff" +pref.vmplayer.confirmOnExit = "TRUE" + +# shared folders +pref.enableAllSharedFolders = "TRUE" + +# eula + +HEREEND + + # different eula parameters from Workstation 9+/ Player 5+ + case "$vmversion" in + 3.*|4.*|7.*|8.*) + cat >> "$vmhome/preferences" <<HEREEND +pref.eula.size = "2" +pref.eula.0.appName = "VMware Player" +pref.eula.0.buildNumber = "$vmbuild" +pref.eula.1.appName = "VMware Workstation" +pref.eula.1.buildNumber = "$vmbuild" +HEREEND + ;; + 5.*|9.*) + # code + cat >> "$vmhome/preferences" <<HEREEND +pref.eula.count = "2" +pref.eula0.product = "VMware Player" +pref.eula0.build = "$vmbuild" +pref.eula1.product = "VMware Workstation" +pref.eula1.build = "$vmbuild" +HEREEND + ;; + esac + +} + + +# declaration of default variables +################################################################################ + + +[ "$mem" -gt 3800 -a "$(uname -m)" != "x86_64" ] && mem=3800 + +# VM-ID static (0D), remove if changed to 00 +VM_ID="0D" +# should be dynamic +if [ "x$(which bc)" != "x" ]; then + VM_ID=$(echo "obase=16; $$" | bc) + VM_ID=$(expr substr $VM_ID $(expr ${#VM_ID} - 1) 2) +else + VM_ID=$[ $$ % 100 ] +fi +# temporary disk space for logs, etc... +redodir=/tmp/vmware/${USER}.$$ +# dir for configs and vmem file +confdir=/tmp/vmware/${USER}.$$ +# configfile +conffile="${confdir}/run-vmware.conf" +# diskfile +diskfile="${vmpath}" +# users vmware config folder +vmhome="${HOME}/.vmware" + +# get several version infos for vmware/player +. /opt/openslx/etc/vmware/vmware.conf +vmbuild=$buildversion +vmversion=$version + +# VMware start options +# "-X": start in fullscreen +vmopt="-X" + + +# hardware checks +################################################################################ + +# use different network card (default e1000, vlance, vmxnet) +if [ -n "${network_card}" ]; then + network_virtualDev="ethernet0.virtualDev = \"${network_card}\"" +else + network_virtualDev='# using default virtualDev for ethernet0' +fi + +# set standard sound card, overwrite depending on OS (options sb16, es1371, hdaudio) +sound="es1371" + +# check for 3D configuration setting +case "$(clean_string "$enable3d")" in + true|yes) + enable3d="TRUE" + ;; + *) + enable3d="FALSE" + ;; +esac + +# check for whitelisted HW-3D +. /opt/openslx/config +FORCE3D="" +if [ -n "$SLX_VMWARE_3D" ]; then + FORCE3D='mks.gl.allowBlacklistedDrivers = "TRUE"' +fi + +# serial/parallel port defined (e.g. "ttyS0, lp0" or "autodetect") +case "$serial" in + tty*) + if [ -e "/dev/$serial" ]; then + serialdev="serial0.filename = \"/dev/${serial}\"" + serial="TRUE" + else + serialdev="# no serial port configured" + serial="FALSE" + fi + ;; + auto*) + serialdev="serial0.autodetect = \"TRUE\"" + serial="TRUE" + ;; + *) + serialdev="# no serial port configured" + serial="FALSE" + ;; +esac + +case "$parallel" in + lp*|parport*) + if [ -e "/dev/$parallel" ]; then + paraldev="parallel0.filename = \"/dev/${parallel}\"" + paralbidi="TRUE" + parallel="TRUE" + else + paraldev="# no parallel port configured" + paralbidi="FALSE" + parallel="FALSE" + fi + ;; + auto*) + paraldev="parallel0.autodetect = \"TRUE\"" + paralbidi="TRUE" + parallel="TRUE" + ;; + *) + paraldev="# no parallel port configured" + paralbidi="FALSE" + parallel="FALSE" + ;; +esac + +# check if ide/scsi and hwver of image +# read only the first 30 lines to be sure +imghead=$(head -n 30 "${diskfile}") +## Added to handle persistent snapshots. +if [[ "$originalVMDKFilePath" ]]; then + echo "Select \"${originalVMDKFilePath}\" as information base for \"${diskfile}\"." + imghead=$(head -n 30 "$originalVMDKFilePath") && \ + # Support suspend mode. + stateFilePath="$(readlink -f "$(dirname "$diskfile")/"*.vmss)" && \ + if [ -f "$stateFilePath" ]; then + echo "Found state file \"$stateFilePath\"." && \ + stateFileConfiguration=" +checkpoint.vmState = \"$stateFilePath\"" + fi + POSTRUN="stateFilePath=\"\$(readlink -f \"${confdir}/\"*.vmss)\" && memoryFilePath=\"\$(readlink -f \"${confdir}/\"*.vmem)\" && [ -f \"\$stateFilePath\" ] && echo \"Saving state and memory file \\\"\$stateFilePath\\\" and \\\"\$memoryFilePath\\\".\" && mv -f \"\$stateFilePath\" \"$(dirname "$diskfile")/\" && mv -f \"\$memoryFilePath\" \"$(dirname "$diskfile")/\"" +fi +## +hddrv=$(echo "${imghead}" | grep -m1 -ia "ddb.adapterType" | awk -F '"' '{print $2}') +hwver=$(echo "${imghead}" | grep -m1 -ia "ddb.virtualHWVersion" | awk -F '"' '{print $2}') +case "${hddrv}" in + ide) + ide="TRUE" + scsi="FALSE" + ;; + lsilogic|buslogic) + ide="FALSE" + scsi="TRUE" + ;; +esac + +# write configuration files +################################################################################ + +# create vmware directories +mkdir -p "$redodir" >/dev/null 2>&1 +mkdir -p "$confdir" >/dev/null 2>&1 +mkdir -p "$vmhome/dndlogs" >/dev/null 2>&1 +touch "$vmhome/dndlogs/dndlog.conf" >/dev/null 2>&1 + +# create preferences +preferencesheader + +# create VMware startup file +runvmwareconfheader + +# link to conffile if confdir != redodir +ln -s "$conffile" "$redodir/run-vmware.conf" >/dev/null 2>&1 + +# sync is needed to ensure that data is really written to virtual disk +sync + +# own nvram. We need it for floppy drive b, default nvram has just drive a +# TODO: optimize, currently kinda inefficient, too much copys, but we +# don't know which one is installed... +cp "/opt/openslx/etc/vmware/nvram" "$confdir/nvram" 2>/dev/null + + +# logging and stdout +################################################################################ + +# log script information +writelog "# File created by $0 (VMversion ${vmversion})\n# on $(date)\n" +## Edited for persistent mode. +writelog "Starting with ${diskmode} mode ...\n" +## + +# write all results to logfile +# log disksetup +writelog "Directories:" +writelog "\tConfdir:\t${confdir}" +writelog "\tConffile:\t${conffile}" +writelog "\tRedodir:\t${redodir}" +writelog "\tVMhome:\t\t${vmhome}" +writelog "\t/tmp info: \ +$(grep "/tmp " /proc/mounts) $(df -h | grep " /tmp$" | awk '{print $2}')" +# hw setup +writelog "Hardware:" +writelog "\tMAC:\t\t00:50:56:${VM_ID}:${machostpart}" +if [ -n "${network_card}" ]; then + writelog "\tNet Adaptor:\t${network_card}" +fi +writelog "\tMem:\t\t${mem} MB" +# echo nur wenn hostmem gesetzt +[ -n "${hostmem}" ] && writelog "\tHostmem:\t${hostmem} MB" +writelog "\tMax. res.:\t${xres}x${yres}" +writelog "\tCD-ROM1:\t${cdrom0}" +writelog "\tCD-ROM2:\t${cdrom1}" +writelog "\tFloppy_A:\t${floppy0}" +if [ "${serial}" = "TRUE" ]; then + writelog "\tSerial Port:\t${serialdev}" +fi +if [ "${parallel}" = "TRUE" ]; then + writelog "\tParallel Port:\t${paraldev}" +fi +# image +writelog "Diskimage:" +writelog "\tDiskfile:\t${diskfile}" +writelog "\tDisktype:\t${hddrv}" +writelog "\tHWVersion:\t${hwver}" +writelog "\tVMostype:\t${vmostype}" +# misc +writelog "Misc:" +writelog "\tDisplayname:\t${displayname}" +if [ "${cap3d}" = "TRUE" -a "${enable3d}" = "TRUE" ]; then + writelog "\t3D Graphics:\tenabled" +fi +# empty line at end +writelog "" + + +# finally set env for run-virt.sh +################################################################################ + +# configure and start samba service to provide user's home directory +#if [ -f /usr/sbin/smbd ] ; then +# sudo /opt/openslx/bin/sed -i /etc/vmware/smb.conf -e "s,USER,$USER," +# sudo /usr/sbin/nmbd -s /etc/vmware/smb.conf +# sudo /usr/sbin/smbd -s /etc/vmware/smb.conf +#fi + +# For debugging +cp "$conffile" "/tmp/vmware-last-config" + +# using the modified version of the wrapper script +VIRTCMD="/opt/openslx/bin/vmplayer" +VIRTCMDOPTS="${vmopt} ${conffile}" +RMDIRS="${redodir} ${conffile}" diff --git a/remote/modules/vmware/data/opt/openslx/etc/vmware/vmware.conf b/remote/modules/vmware/data/opt/openslx/etc/vmware/vmware.conf new file mode 100644 index 00000000..210b814f --- /dev/null +++ b/remote/modules/vmware/data/opt/openslx/etc/vmware/vmware.conf @@ -0,0 +1,8 @@ +#configuration file for vmware background services written in stage3 setup +vmnet0=true +vmnet1=192.168.101.1/24 +vmnet1nat=true +vmnet8=192.168.102.1/24 +#stage1 variables produced during plugin install +version="5.0" +buildversion="1031769" diff --git a/remote/modules/vmware/data/opt/openslx/scripts/systemd-vmware_env b/remote/modules/vmware/data/opt/openslx/scripts/systemd-vmware_env new file mode 100755 index 00000000..175f3bef --- /dev/null +++ b/remote/modules/vmware/data/opt/openslx/scripts/systemd-vmware_env @@ -0,0 +1,281 @@ +#!/bin/sh +# Copyright (c) 2009 - OpenSLX GmbH +# +# This program is free software distributed under the GPL version 2. +# See http://openslx.org/COPYING +# +# If you have any feedback please consult http://openslx.org/feedback and +# send your suggestions, praise, or complaints to feedback@openslx.org +# +# General information about OpenSLX can be found at http://openslx.org/ +# ----------------------------------------------------------------------------- + +export PATH=$PATH:/opt/openslx/bin:/opt/openslx/sbin:/opt/openslx/usr/bin:/opt/openslx/usr/sbin + +VMWARE_CONF_DIR=/opt/openslx/etc/vmware + +for wait in 1 1 2 2 3 end; do + grep '^SLX_DNS' /opt/openslx/config > /dev/null && break + [ "$wait" == "end" ] && echo "No DNS config found, using google dns" && break + echo "Waiting for DNS config.." + sleep "$wait" +done + +#source config file +. /opt/openslx/config +. ${VMWARE_CONF_DIR}/vmware.conf + +vm_dhcpd() { + + #from plugins/vmware/init-hooks/60-have-servconfig/vm-dhcpd.sh + + # read the DNS configuration and if available set WPAD configuration + [ -z "${SLX_DNS}" ] && SLX_DNS="8.8.8.8" + [ -n "${wpad}" ] && wpad_config="option wpad ${wpad}" + + # configuring dhcpd stub for virtual networks +cat > ${VMWARE_CONF_DIR}/udhcpd.conf << EOF +# general udhcpd configuration file for virtual machines written by $0 + +# start and end of the IP lease block +start CNETWORK.20 +end CNETWORK.100 + +# interface that udhcpd will use +interface NWIF + +# how long an offered address is reserved (leased) in seconds +offer_time 6000 + +# location of the leases file +lease_file LEASEFILE + +# location of the pid file +pidfile PIDFILE + +option dns ${SLX_DNS} +option subnet 255.255.255.0 +option router CNETWORK.1 +option wins CNETWORK.10 +option domain ${SLX_NET_DOMAIN} virtual.site +${wpad_config} + +# additional options known to udhcpd +#subnet #timezone +#router #timesvr +#namesvr #dns +#logsvr #cookiesvr +#lprsvr #bootsize +#domain #swapsvr +#rootpath #ipttl +#mtu #broadcast +#wins #lease +#ntpsrv #tftp +#bootfile #wpad +EOF + +} + +setup_network() { + #from plugins/vmware/XX_vmware.sh + + mkdir -p /tmp/virt/vmware -m 1777 + mkdir -p /dev/shm/vmware -m 1777 + mkdir -p /var/run/vmware -m 1777 + mkdir -p /etc/vmware/udhcpd + + # variable might contain ",NAT" which is to be taken off + if [ -n "$vmnet1" ] ; then + local vmip=${vmnet1%/*} # x.x.x.x/yy => 'x.x.x.x'"> + local vmsub=$(echo $vmip |sed 's,\(.*\)\..*,\1,') # x.x.x.x => x.x.x + # setting up the udhcpd configuration + sed -e "s,NWIF,vmnet1,;s,/misc/,/vmware/," \ + -e "s,CNETWORK,$vmsub,;s,PIDFILE,/var/run/vmware/udhcpd-vmnet1.pid," \ + -e "s,LEASEFILE,/var/run/vmware/udhcpd-vmnet1.leases," \ + ${VMWARE_CONF_DIR}/udhcpd.conf >/etc/vmware/udhcpd/udhcpd-vmnet1.conf + # setting the base samba configuration if available + if [ -f /etc/openslx/vmchooser/smb.conf \ + -a -f /usr/sbin/smbd ] ; then + sed -e "s#NWIF#vmnet1,vmnet8#;s,PIDDIR,/var/run/vmware," \ + ${VMCHOOSER_CONF_DIR}/smb.conf \ + >/etc/vmware/smb.conf + fi + fi + + # vmware nat interface configuration + if [ -n "$vmnet8" ] ; then + local vmnet8ip=${vmnet8%/*} + local vmpx=${vmnet8#*/} + local vmsub=$(echo $vmnet8ip |sed 's,\(.*\)\..*,\1,') # x.x.x.x => x.x.x"> + # vmip is user for vmnet8 device + # vmnet is user for config files nat.conf/dhcp + local vmip="${vmsub}.1" + local vmnet="${vmsub}.2" + # setting up the udhcpd configuration + sed -e "s,NWIF,vmnet8,;s,/misc/,/vmware/," \ + -e "s,CNETWORK,$vmsub,;s,PIDFILE,/var/run/vmware/udhcpd-vmnet8.pid," \ + -e "s,LEASEFILE,/var/run/vmware/udhcpd-vmnet8.leases," \ + ${VMWARE_CONF_DIR}/udhcpd.conf >/etc/vmware/udhcpd/udhcpd-vmnet8.conf + # might be not needed any more ... + echo -e "# Linux NAT configuration file" \ + > /etc/vmware/nat.conf + echo -e "[host]" \ + >> /etc/vmware/nat.conf + echo -e "ip = $vmnet/$vmpx" \ + >> /etc/vmware/nat.conf + echo -e "device = /dev/vmnet8" \ + >> /etc/vmware/nat.conf + echo -e "activeFTP = 1" \ + >> /etc/vmware/nat.conf + echo -e "[udp]" \ + >> /etc/vmware/nat.conf + echo -e "timeout = 60" \ + >> /etc/vmware/nat.conf + echo -e "[incomingtcp]" \ + >> /etc/vmware/nat.conf + echo -e "[incomingudp]" \ + >> /etc/vmware/nat.conf + echo "00:50:56:F1:30:50" > /etc/vmware/vmnet-natd-8.mac + fi + + ############################################################################ + # vmware stuff second part: setting up the environment + # make udhcpd more silent + touch /var/run/vmware/udhcpd-vmnet1.leases \ + /var/run/vmware/udhcpd-vmnet8.leases + + # create the needed devices which effects all vmware options + # they are not created automatically via module load + for i in "/dev/vmnet0 c 119 0" "/dev/vmnet1 c 119 1" \ + "/dev/vmnet8 c 119 8" "/dev/vmmon c 10 165"; do + mknod $i + done + + chmod 0700 /dev/vmnet* +} + +adapt_tmpfs() { + # from plugins/vmware/init-hooks/80-after-plugins/adapt-tmpfs.sh + # Init hook to adapt the tmpfs size for VMware/Player + # (should be kept identical to the files of virtualbox plugin) + ############################################################################# + + # adapt tmpfs size (overbook) + case $(grep tmpfs /proc/mounts) in + */tmp*) + mount -o remount,size=175% /tmp + ;; + */uniontmp*) + mount -o remount,size=175% /uniontmp + ;; + esac +} + +#from /etc/init.d/vmware-env + +#functions: helper functions +tempdir () { + # Create a special tempfs directory + mkdir -m 1777 -p /tmp/vmware + # Don't mount special tempfs, when using local harddrive for /tmp + [ ! -n "$(cat /proc/mounts |grep ' /tmp '|grep '/dev/sd')" ] \ + && mount -t tmpfs -o size=180%,mode=1777 tmpfs /tmp/vmware +} + +load_modules () { + # VMplayer common stuff + insmod /lib/modules/vmware/vmmon.ko + insmod /lib/modules/vmware/vmnet.ko + # VMplayer 3.X specific stuff + insmod /lib/modules/vmware/vmci.ko + insmod /lib/modules/vmware/vmblock.ko + insmod /lib/modules/vmware/vsock.ko +} + +unload_modules () { + rmmod vmnet vmmonvsock vmci vmblock +} + +vmnetif () { +# let point the path directly to the directory where the binary lives +location="/usr/bin" +if [ -n "$vmnet0" ] ; then + # the path might be directly point to the plugin dir + $location/vmnet-bridge -d /var/run/vmnet-bridge-0.pid -n 0 +fi +if [ -n "$vmnet1" ] ; then + $location/vmnet-netifup -d /var/run/vmnet-netifup-vmnet1.pid \ + /dev/vmnet1 vmnet1 + ip addr add $vmnet1 dev vmnet1 + ip link set vmnet1 up + if [ -n "$vmnet1nat" ] ; then + echo "1" >/proc/sys/net/ipv4/conf/vmnet1/forwarding + echo "1" >/proc/sys/net/ipv4/conf/br0/forwarding 2>/dev/null + fi + /opt/openslx/usr/sbin/udhcpd \ + -S /etc/vmware/udhcpd/udhcpd-vmnet1.conf +fi +if [ -n "$vmnet8" ] ; then + $location/vmnet-netifup -d /var/run/vmnet-netifup-vmnet8.pid \ + /dev/vmnet8 vmnet8 + ip addr add $vmnet8 dev vmnet8 + ip link set vmnet8 up + echo "1" >/proc/sys/net/ipv4/conf/vmnet8/forwarding + echo "1" >/proc/sys/net/ipv4/conf/br0/forwarding 2>/dev/null + iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE + # /etc/vmware/vmnet-natd-8.mac simply contains a mac like 00:50:56:F1:30:50 + $location/vmnet-natd -d /var/run/vmnet-natd-8.pid \ + -m /etc/vmware/vmnet-natd-8.mac -c /etc/vmware/nat.conf # or logfile + /opt/openslx/usr/sbin/udhcpd \ + -S /etc/vmware/udhcpd/udhcpd-vmnet8.conf +fi + +} + +vmblock () { +# let point the path directly to the directory where the binary lives + /usr/bin/vmware-usbarbitrator +} + + + +case "$1" in + start) + #start: defines start function for initscript + vm_dhcpd + setup_network +# adapt_tmpfs + # hack to access the first serial/parallel port + chmod a+rw /dev/ttyS0 + chmod a+rw /dev/parport0 + tempdir + load_modules + vmnetif + vmblock + ;; + stop) + #stop: defines stop function for initscript + killall vmnet-netifup vmnet-natd vmnet-bridge vmware vmplayer \ + vmware-tray vmnet-dhcpd + # might take a while until all services are shut down + sleep 1 + umount -l /tmp/vmware 2>/dev/null + unload_modules + + ;; + restart) + #restart: defines restart function for initscript + $0 stop && $0 start + ;; + status) + #status: defines status function for initscript + vmstatus + ;; + *) + #usage: defines usage function for initscript + ## print out usage + echo "Usage: $0 {start, stop, restart, status}" >&2 + exit 1 + ;; +esac + |
