# 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 ################################################################################ runvmwareconfheader () { echo "# This configuration file was generated by $0" >${conffile} # check for the ostype case "${vmostype}" in win31*) mem="32" cpu_cores="1" sound="sb16" shfolders="FALSE" ;; win95*) mem="92" cpu_cores="1" shfolders="FALSE" ;; win98*|winme*) mem="256" cpu_cores="1" shfolders="FALSE" ;; winxp*|windowsxp*) shfolders="TRUE" ;; winvista*|windowsvista*) shfolders="TRUE" ;; windows7*) shfolders="TRUE" ;; windows8*) shfolders="TRUE" ;; linux*|*ubuntu*|*suse*|debian*|*sci*) vmostype="linux" shfolders="TRUE" ;; macos*) cpu_cores="1" vmostype="other" shfolders="FALSE" ;; beos*) cpu_cores="1" vmostype="other" shfolders="FALSE" ;; *) vmostype="other" shfolders="FALSE" ;; esac case "$vmversion" in *) svga_autodetect="TRUE" numvcpus="1" echo ".encoding = \"UTF-8\" # version specific stuff - all versions config.version = \"8\"" >>${conffile} ;; esac case "$vmversion" in 2.*|3.*|4.*|6.*|7.*|8.*|9.*) [ ${shfolders} == FALSE ] || echo " # version specific stuff - ver. 2.*|3.*|6.*|7.*|8.*|9.* sharedFolder.option = \"alwaysEnabled\"" >>${conffile} ;; esac case "$vmversion" in 2.5|3.*|4.*|6.5|7.*|8.*|9.*) if [ "${cpu_cores}" -ge "2" 2>/dev/null ]; then numvcpus="2" fi if [ "${mem}" -ge "8000" 2>/dev/null ]; then mem=8000 fi cap3d="TRUE" # helper var for loging output echo " # version specific stuff - ver. 2.5|3.*|6.5|7.* ehci.present = \"TRUE\" mks.enable3d = \"${enable3d}\"" >>${conffile} ;; esac case "$vmversion" in 3.*|4.*|7.*|8.*|9.*) numvcpus="${cpu_cores}" if [ "${cpu_cores}" -ge "4" 2>/dev/null ]; then numvcpus="4" fi # svga_autodetect="FALSE" # if defined manual, see below echo " # version specific stuff - ver. 3.*|7.* cpuid.coresPerSocket = \"${cpu_cores}\" maxvcpus = \"4\" monitor.virtual_mmu = \"automatic\" monitor.virtual_exec = \"automatic\" floppy1.clientDevice = \"FALSE\" floppy1.readonly = \"TRUE\"" >>${conffile} ;; esac echo " # id virtualHW.version = \"${hwver}\" displayName = \"${displayname}\" guestOS = \"${vmostype}\" # CPU/MEM numvcpus = \"${numvcpus}\" memsize = \"${mem}\" MemAllowAutoScaleDown = \"FALSE\" MemTrimRate = \"-1\" # ide-disks ide0:0.present = \"${ide}\" ide0:0.fileName = \"${diskfile}\" ide0:0.mode = \"independent-nonpersistent\" 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 = \"${diskfile}\" scsi0.virtualDev = \"${hddrv}\" scsi0:0.mode = \"independent-nonpersistent\" # 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:${VM_ID}:${machostpart}\" 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 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}" >>${conffile} # set the appropriate permissions for the vmware config file chmod u+rwx ${conffile} >/dev/null 2>&1 } preferencesheader () { echo ".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" >${vmhome}/preferences # different eula parameters from Workstation 9+/ Player 5+ case "$vmversion" in 3.*|4.*|7.*|8.*) echo " 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}\"" >>${vmhome}/preferences ;; 5.*|9.*) # code echo " pref.eula.count = \"2\" pref.eula0.product = \"VMware Player\" pref.eula0.build = \"${vmbuild}\" pref.eula1.product = \"VMware Workstation\" pref.eula1.build = \"${vmbuild}\"" >>${vmhome}/preferences ;; esac } # declaration of default variables ################################################################################ # 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) 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 . ${OPENSLX_DEFAULT_CONFDIR}/plugins/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 "${enable3d}" in *true*|*yes*) enable3d="TRUE" ;; *) enable3d="FALSE" ;; esac # serial/parallel port defined (e.g. "ttyS0, lp0" or "autodetect") case "$serial" in tty*) serialdev="serial0.filename = \"/dev/${serial}\"" serial="TRUE" ;; auto*) serialdev="serial0.autodetect = \"TRUE\"" serial="TRUE" ;; *) serialdev="# no serial port configured" serial="FALSE" ;; esac case "$parallel" in lp*|parport*) paraldev="parallel0.filename = \"/dev/${parallel}\"" paralbidi="TRUE" parallel="TRUE" ;; auto*) paraldev="parallel0.autodetect = \"TRUE\"" paralbidi="TRUE" parallel="TRUE" ;; *) paraldev="# no parallel port configured" paralbidi="FALSE" parallel="FALSE" ;; esac # adjust memory available for vmware guests #if [ -n "${forcemem}" ]; then # mem="${forcemem}" #else # case "$vmversion" in # 2.*|6.*) # permem=30 # ;; # 3.*|7.*) # permem=25 # ;; # esac # if [ "${totalmem}" -ge "2500" ]; then # permem=40 # fi # # check if /tmp is on harddisk # if grep -qe "/dev/.* /tmp " /proc/mounts ; then # permem=60 # id44="1" # # Hack, if more than 2,5G RAM use 40% of Ram and write vmem into Ram as well # # (40% vmware | 40% confdir(vmem...) | 20% host # # VMplayer 2+ issue # if [ "${totalmem}" -ge "2500" ]; then # permem=40 # confdir=/dev/shm/vmware/$USER # conffile=${confdir}/run-vmware.conf # mkdir -p /dev/shm/vmware/$USER # fi # fi # mem=$(expr ${totalmem} / 100 \* ${permem} / 4 \* 4) # if [ "${id44}" = "1" ]; then # hostmem=$(expr ${totalmem} - ${mem}) # else # hostmem=$(expr ${totalmem} - ${mem} - ${mem}) # fi #fi # check if ide/scsi and hwver of image # read only the first 30 lines to be shure imghead=$(head -30 ${diskfile}) 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... for i in /opt/openslx/plugin-repo/vmware/*; do cp ${i}/nvram ${confdir}/nvram 2>/dev/null done # logging and stdout ################################################################################ # log script information writelog "# File created by $0 (VMversion ${vmversion})\n# on $(date)\n" writelog "Starting with non-persistent 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/rootfs/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 # using the modified version of the wrapper script VIRTCMD="${OPENSLX_DEFAULT_BINDIR}/vmplayer" VIRTCMDOPTS="${vmopt} ${conffile}" RMDIRS="${redodir} ${conffile}"