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













                                                                               
                                                                      

                                                                               


                                              
                                

                                                                                

                      
                                                                 
 




























                                                      


                                









                                 
                                           
                              


                                 
                              








                                             
                                            

          
                                



                                                        
                                

                                 
                                     





                                              

                                      


                                          




                           






                                  
                
                                
                                            












                                    




                                        
 


                               
 

                                                            

 

                    
                           





                                             

                                    





                                     




                              




















                                            
                                                                

 











                                                                                
















                                                                       


                                                          
           













                                                                              

                                                   




                                               

                    
                                                             

                                                      
                                              



                                                                  




                                                           

                                                    









                                                          
































                                                                                 











                                                                                







                                             
                        
                                                              
                                                  
 

                              










                                                                              
                                    
                                        


                                  







                                         
          
 



















                                                                                
# run-virt.include
# -----------------------------------------------------------------------------
# Copyright (c) 2009 - RZ Uni Freiburg
# 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/
# -----------------------------------------------------------------------------
# run-virt.include
#    - component for vmware/player of the vmchooser plugin run-virt.sh
# -----------------------------------------------------------------------------

# include general configuration from vmchooser
. /etc/opt/openslx/run-virt.include

# configuration writer functions
################################################################################

runvmwareconfheader ()
{
echo "# This configuration file was generated by $0" >${conffile}

case "$vmversion" in
  1.0|5.5)
    shared_folder="FALSE"
    echo "
# version specific stuff
config.version = \"8\"
virtualHW.version = \"4\"" >>${conffile}
  ;;
  2.0|6.0)
    shared_folder="TRUE"
    echo "
# version specific stuff
config.version = \"8\"
virtualHW.version = \"6\"
sharedFolder.option = \"alwaysEnabled\"" >>${conffile}
  ;;
  2.5|6.5)
    shared_folder="TRUE"
    echo "
# version specific stuff
config.version = \"8\"
virtualHW.version = \"7\"
ehci.present= \"TRUE\"
sharedFolder.option = \"alwaysEnabled\"
mks.enable3d = \"FALSE\"" >>${conffile}    
  ;;
esac

echo "
# id
displayName = \"${displayname}\"
guestOS = \"${vmostype}\"

# CPU/MEM
memsize = \"${mem}\"
MemAllowAutoScaleDown = \"FALSE\"
MemTrimRate = \"-1\"
numvcpus = \"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 = \"lsilogic\" #\"${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\"
#ethernet0.virtualDev = \"e1000\"
ethernet0.connectionType = \"${network_kind}\"
#ethernet1.connectionType = \"custom\"
#ethernet1.vnet = \"/dev/vmnet2\"
ethernet0.address = \"00:50:56:0D:${mac}\"
ethernet0.wakeOnPcktRcv = \"FALSE\"

# sound
sound.present = \"TRUE\"
sound.fileName = \"-1\"
sound.autodetect = \"TRUE\"

# svga
svga.autodetect = \"TRUE\"

# usb
usb.present = \"TRUE\"
usb.generic.autoconnect = \"TRUE\"

# shared folders
sharedFolder0.present = \"TRUE\"
sharedFolder0.enabled = \"${shared_folder}\"
sharedFolder0.expiration = \"never\"
sharedFolder0.guestName = \"Home\"
sharedFolder0.hostPath = \"${HOME}\"
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}" >>${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.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.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
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
}

# declaration of default variables
################################################################################

# temporary disk space for logs, etc...
redodir=/tmp/vmware/${USER}
# dir for configs and vmem file
confdir=${redodir}
# configfile
conffile="${confdir}/run-vmware.conf"
# users vmware config folder
vmhome="${HOME}/.vmware"

# serial port defined (e.g. "ttyS0" or "autodetect")
serial=$(grep -i "<serial port=\"" ${xml} | awk -F "\"" '{ print $2 }')
case "$serial" in
  tty*)
    serialdev="serial0.filename = \"/dev/${serial}\""
    serial="TRUE"
    ;;
  autodetect)
    serialdev="serial0.autodetect = \"TRUE\""
    serial="TRUE"
    ;;
  *)
    serialdev=""
    serial="FALSE"
    ;;
esac

# percentage of memory to use for vmwares in standard case
permem=30
if [ "${totalmem}" -ge "1600" ]; 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
  memhost=$(expr ${totalmem} - ${mem})
else
  memhost=$(expr ${totalmem} - ${mem} - ${mem})
fi

# check memory range
if [ "${mem}" -lt "256" ] || [ "${memhost}" -lt "256" ]; then
  writelog "\n\n"
  writelog "\tYour memory is out of range: ${mem} MB."
  writelog "\tMin. 256 MB for host and guest!"
  exit 1
fi

# virtual fd/cd/dvd and drive devices, floppy b: for configuration
# if $floppy_0 from run-virt.include set then fdtest="TRUE"
fdtest=
fdtest=${floppy_0:+"TRUE"}
# if $fdtest not set floppy0="FALSE", else "TRUE"
floppy0=${fdtest:-"FALSE"}
floppy1="TRUE"
floppy1name="/var/lib/virt/vmchooser/loopimg/fd.img"
# if $cdrom_0 from run-virt.include set then cdtest="TRUE"
cdtest=
cdtest=${cdrom_0:+"TRUE"}
# if $cdtest not set cdrom0="FALSE", else "TRUE"
cdrom0=${cdtest:-"FALSE"}
# if $cdrom_1 from run-virt.include set then cdtest="TRUE"
cdtest=
cdtest=${cdrom_1:+"TRUE"}
# if $cdtest not set cdrom1="FALSE", else "TRUE"
cdrom1=${cdtest:-"FALSE"}
# ide is expected default, test for the virtual disk image type should
# be done while creating the runscripts ...
ide="TRUE"
scsi="FALSE"
hddrv="ide"

# get several version infos for vmware/player
. /etc/vmware/slxvmconfig
vmbuild=$buildversion
vmversion=$version

# VMware start options
#-X = fullscreen
vmopt="-X"

#TODO: check for a faster way, perhaps we should put this into XML
# the grepping under some circumstances lets wait the user for ages ...
if [ $(echo ${imagename} | grep -cv "\-flat.vmdk") ]; then
  hddrv=$(grep -m 1 -ia "ddb.adapterType" ${diskfile} | awk -F "\"" '{print $2}')
  if [ "${hddrv}" = "ide" ]; then
    ide="TRUE"
    scsi="FALSE"
  elif [ "${hddrv}" = "lsilogic" ]; then
    ide="FALSE"
    scsi="TRUE"  
  elif [ "${hddrv}" = "buslogic" ]; then
    ide="FALSE"
    scsi="TRUE"  
  fi
fi

# Should we debug? Hell yes, we should always debug!
debug=0

### log function ###############################################################
# function to write to stdout and logfile
writelog ()
{
  # write to stdout
  echo -e "$1"

  # log in file
  echo -e "$1" >>${redodir}/run-vmware.${USER}.log
}

# Delete the LOCK file. its insecure, but ...
rm -f ${confdir}/*LOCK >/dev/null 2>&1

# create vmware directories
mkdir -p ${redodir} >/dev/null 2>&1
mkdir -p ${confdir} >/dev/null 2>&1
mkdir -p ${vmhome} >/dev/null 2>&1

# log script information
writelog "# File created by $0 (v.${version})\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:0D:${mac}"
writelog "\tMem:\t\t${mem} MB"
writelog "\tHostmem:\t${memhost} MB"
writelog "\tMax. res.:\t${xres}x${yres}"
writelog "\tCD-ROM1:\t${cdrom0}"
writelog "\tCD-ROM2:\t${cdrom1}"
writelog "\tFloppy_A:\t${floppy0}"
# Image
writelog "Diskimage:"
writelog "\tDiskfile:\t${diskfile}"
writelog "\tDisktype:\t${hddrv}"
writelog "\tVMostype:\t${vmostype}"
writelog "\tDisplayname:\t${displayname}"

# check if image exists, etc...
#filecheck

### write configuration files ##################################################
# create preferences
preferencesheader

# create VMware startup file
runvmwareconfheader

# 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.5.0 ${confdir}/nvram 2>/dev/null
done

# set the variables appropriately
VIRTCMD=vmplayer
VIRTCMDOPTS="${vmopt} ${conffile}"