summaryrefslogblamecommitdiffstats
path: root/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include
blob: 2e7aeaf5dba006b7eed9110dfd7be3e71b0c0878 (plain) (tree)



















                                                                                
                        
 
                               
                                                               
            
                                                           

          
 
                                    
 



                                                                          
                                                              
                        
                    





























































































                                                                          
                                    


                                    
                                    


                                    
                                    

                                                                                                 
                                    

                            
                                    

                               
                                    

                          
                                    


                                           
                                    








                                             
                                    


                                             
                                    














                                                                             





                                                                                






                                                                    

                                                               



                                                                                            







                                   



                                  
 
    


                            

         


                                          


                               

           
                       
                                


                                       







                               

            

                         
                                 
                           


                                                               

          




                                
                                                        



                                 

      





                                          
                                             
                                 

       



                           

      
                                    

     

                                








                              








                                      

              









                                      

             

                           

               



                                      

                                                                    
                                                 



                    

                                             


                                             






                                          

         

                                 

          




                            

                           










                                          

                


                                    
 
       

                                                                  
                            
                                






                                                      
                  

                              






                                                      
                  
            
        





                                                                                


                                                            



                                            



                                                           







                                       
                    



                                             
                                           











                                                                                
                                 
                                                                       
    
                                                                     





                                                                                    


                                     
          

                                
          

    

                             
          

                                                         

  

                                                                  










                                                                         
                             

          

                                                       
          
    
 
                   












                                                                            

                                

          


                                                        
          

    
                                      
                                         
                                   










                                                                                      
                                                                                                                                                                                                                                                                                                                                                                                 

  

                                                                                          
                  


                            
          


                           
          





                                                                                



                                                   





                            
 
                                        
                                                            






                                                                          
                                                                     






                                                                                


                                               








                                   
                                                                         



                                                     
                                                  








                                                           
                                               

                                   
                                                










                                                          
                                          








                                                                                







                                                                            




                                                  
# 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/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

# 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/vmchooser/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}"