# 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\"" >>${conffile} ;; 2.0|6.0) shared_folder="TRUE" echo " # version specific stuff config.version = \"8\" sharedFolder.option = \"alwaysEnabled\"" >>${conffile} ;; 2.5|6.5) shared_folder="TRUE" cap3d="TRUE" echo " # version specific stuff config.version = \"8\" ehci.present = \"TRUE\" sharedFolder.option = \"alwaysEnabled\" mks.enable3d = \"${enable3d}\"" >>${conffile} ;; esac echo " # id virtualHW.version = \"${hwver}\" 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 = \"${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} # 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.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" # get several version infos for vmware/player . /etc/vmware/slxvmconfig vmbuild=$buildversion vmversion=$version # VMware start options # "-X": start in fullscreen vmopt="-X" # hardware checks ################################################################################ # enable 3D enable3d=$(grep -i "/dev/null | \ awk -F '=' {'print $2'}) case "$enable3d" in *true*|*TRUE*|*yes*|*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="" serial="FALSE" ;; esac case "$parallel" in lp*) paraldev="parallel0.filename = \"/dev/${parallel}\"" paralbidi="TRUE" parallel="TRUE" ;; auto*) paraldev="parallel0.autodetect = \"TRUE\"" paralbidi="TRUE" parallel="TRUE" ;; *) paraldev="" paralbidi="FALSE" parallel="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 # 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" # 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} >/dev/null 2>&1 # 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 ${confdir}/nvram 2>/dev/null done # logging and stdout ################################################################################ logfile=${vmhome}/run-vmware.`hostname`.log # remove ols logs rm ${vmhome}/run-vmware.* >/dev/null 2>&1 # function to write to stdout and logfile writelog () { # write to stdout echo -e "$1" # log in file echo -e "$1" >>${logfile} } # log script information writelog "# File created by $0 (VMversion ${vmversion})\n# on $(date)\n" writelog "Starting with non-persistent mode ...\n" # check memory range if [ "${mem}" -lt "256" ] || [ "${memhost}" -lt "256" ]; then writelog "\tMemory out of range: ${mem} MB (guest) / ${memhost} MB (host)!" writelog "\tMin. 256 MB for host and guest!" exit 1 fi # 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 "\tLogfile:\t${logfile}" 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 "\tHWVersion:\t${hwver}" writelog "\tVMostype:\t${vmostype}" if [ "${cap3d}" = "TRUE" -a "${enable3d}" = "TRUE" ]; then writelog "\t3D Graphics:\tenabled" else writelog "\t3D Graphics:\tdisabled" fi writelog "\tDisplayname:\t${displayname}\n" # finally set env for run-virt.sh ################################################################################ VIRTCMD=vmplayer VIRTCMDOPTS="${vmopt} ${conffile}"