summaryrefslogblamecommitdiffstats
path: root/src/os-plugins/plugins/vmware/files/run-virt.include
blob: 30e2c3e637fb1a5c014ddc4b88bdd1eb3fec460b (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14

                                                                               
                                            
                                         









                                                                               
                                                                      
                                                                                
 
                                

                                                                                

                      
                                                                 
 

                      



                 
                     



                 
                     



                 
                     
    
                    
                    

                          
                    

            



                    


                                       
                    



                    
                     



                    
                     


                    






                          






                                       
                                       








                                                       


                                                




                                                                  

    
                    
                      
                           


                                                   




                                                                  





                                          

      
    
                                

                                

         
                          


                                 



                                 
                                           
                              


                                 
                              







                                  
                               
                                            

          
                                



                                                        
                                

                                 
                                     



                                  
                     
                                              

                                      
                                                        

                                   



                           
                               
 
      
                                        




                                  




                              
                          
 
                

                                        
                                    

                                          









                                    




                                        
 

                               





                                          
 

                                                            

 

                    
                           



                                             
                                  
                                           

                                            

                                    





                                     


                              
                          
                         




                                            
                               










                                           






                                               




                                                                 
                  
            

                      




                                                          


                  

 
 


                                                                                

                                            


                                   
                                                     
  
                                       
                              
                               
                              

                                     

                  


                            
                                             
                                                       



                      
                           

          



                                                                                
                                                            
                                  
                                                                 



                                                               



                                                                                    

                     






                    
                                                                  




                                                     
        



                                             
                                           


                  
                   
               









                                                        
                                            



                     
 
                                           


































                                                                                 
 
                                      







                                                                  

                

                    
               


               
 





                                                                                
                                          
                                                   





                            

                                                            














                                                                                
                        
                                                                        
                                                  
 
                              
               






                                                                              
          
                    
                                                     


                                            
                              

                                                           
                                        


                                  






                                          


                                   
                                 
                                   


                                         

                                                          
  

                   
 



                                                                                

                                                                    
                                                                             

                                             

  
                                                  
                                            
                                  
                               
# 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.*)
    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+

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.*)
		# 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}"