# 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 # - # ----------------------------------------------------------------------------- # declaration of default variables ################################################################################ # serial port defined (e.g. "ttyS0" or "autodetect") serial=$(grep -i "&1) writelog "Filecheck:\n${filecheck}\n" #TODO: don't understand the sence in it noimage=$(echo ${filecheck} | grep -i "no such file or directory" | wc -l) rightsfile=${diskfile} # check if link # TODO: mistake with 2nd rightsfile if its in another directory? if [ -L "${diskfile}" ]; then # take link target rightsfile=$(ls -lh ${diskfile} 2>&1 | awk -F "-> *" '{print $2}') rightsfile=${vmdir}/${rightsfile} filecheck=$(LANG=us ls -lh ${rightsfile} 2>&1) fi # does file exist if [ "${noimage}" -ge "1" ]; then writelog "Vmware Image Problem:\c " writelog "\tThe image you've specified doesn't exist." writelog "Filecheck says:\c " writelog "\t\t${diskfile}:\n\t\t\tNo such file or directory" writelog "Hint:\c " writelog "\t\t\tCompare spelling of the image with your options.\n" exit 1 fi # readable? if ! [ -r "${diskfile}" >/dev/null 2>&1 \ -o -r "${diskfile}" >/dev/null 2>&1 ]; then writelog "Vmware Image Problem:\c " writelog "\tThe image you've specified has wrong rights." writelog "Filecheck says:\t\t$(echo ${filecheck} \ | awk '{print $1" "$3" "$4}') ${rightsfile}" writelog "Hint:\t\t\tChange rights with: chmod a+r ${rightsfile}\n" exit 1 fi # writable (for persistent-mode)? if ! [ -w "${diskfile}" >/dev/null 2>&1 \ -o -w "${diskfile}" >/dev/null 2>&1 ] \ && [ "${np}" = "independent-persistent" ]; then writelog "Vmware Image Problem:\c " writelog "\tThe image you have specified has wrong rights." writelog "Filecheck says:\t\t$(echo ${filecheck} \ | awk '{print $1" "$3" "$4}') ${rightsfile}" writelog "Hint:\t\t\tUse nonpersistent-mode or change rights to rw\n" exit 1 fi } ### write run-vmware.conf ####################################################### runvmwareconfheader () { echo ".encoding = \"UTF-8\" # This configuration file was generated by $0 # id displayName = \"${displayname}\" guestOS = \"${vmostype}\" config.version = \"${confver}\" virtualHW.version = \"${hver}\" # CPU/MEM memsize = \"${mem}\" MemAllowAutoScaleDown = \"FALSE\" MemTrimRate = \"-1\" numvcpus = \"1\" # ide-disks ide0:0.present = \"${ide}\" ide0:0.fileName = \"${diskfile}\" ide0:0.mode = \"${np}\" ide1:0.present = \"${cdr_1}\" ide1:0.autodetect = \"TRUE\" ide1:0.fileName = \"auto detect\" ide1:0.deviceType = \"cdrom-raw\" ide1:1.present = \"${cdr_2}\" 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 = \"${np}\" # floppies floppy0.present = \"${floppya}\" floppy0.startConnected = \"FALSE\" floppy0.autodetect = \"TRUE\" floppy0.fileName = \"auto detect\" # we need floppy b: for our windows client configuration floppy1.present = \"${floppyb}\" floppy1.startConnected = \"TRUE\" floppy1.fileType = \"file\" floppy1.fileName = \"${floppybname}\" # nics ethernet0.present = \"TRUE\" ethernet0.addressType = \"static\" #ethernet0.virtualDev = \"e1000\" ethernet0.connectionType = \"${network_kind}\" ethernet0.address = \"00:50:56:0D:${mac}\" ethernet0.wakeOnPcktRcv = \"FALSE\" # usb usb.present = \"TRUE\" ehci.present= \"TRUE\" # graphics svga.autodetect = \"TRUE\" mks.enable3d = \"TRUE\" # sound sound.present = \"TRUE\" sound.fileName = \"-1\" sound.autodetect = \"TRUE\" # shared folders sharedFolder.option = \"alwaysEnabled\" sharedFolder0.present = \"TRUE\" sharedFolder0.enabled = \"TRUE\" 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\" hints.hideAll = \"TRUE\" hint.vmui.showAllUSBDevs = \"FALSE\" isolation.tools.hgfs.disable = \"FALSE\" hgfs.mapRootShare = \"TRUE\" isolation.tools.dnd.disable = \"FALSE\" isolation.tools.copy.enable = \"TRUE\" isolation.tools.paste.enabled = \"TRUE\" gui.restricted = \"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 } ### creates user configurationfile in ${vmhome} ################################ 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\" # configs prefvmx.defaultVMPath = \"${vmhome}\" prefvmx.mru.config = \"${conffile}:\" # hot keys pref.hotkey.shift = \"true\" pref.hotkey.gui = \"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 } ### 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 $(echo ${np} | sed 's/i.*-//g')-mode ...\n" ## look for cdrom, dvd and add them to the vm config file (( cdri=1 )) for cdrs in /dev/cdrom*; do if [ -L $cdrs ]; then declare cdr_${cdri}="TRUE" (( cdri=${cdri}+1 )) fi done ## Write all results to logfile writelog "finished" ## 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 "\tMax. res.:\t${xres}x${yres}" writelog "\tCD-ROM_1:\t${cdr_1}" writelog "\tCD-ROM_2:\t${cdr_2}" # 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 # VMPlayer Version. # strings is the fastest and most secure way, vmplayer -v takes too much time # and resources # TODO: fine a faster solution with different installed vmplayer # perhaps via stage1 + /etc/vmware/vmversion #vmbuild=$(strings /usr/lib/vmware/bin/vmplayer \ # | grep -m 1 "build-"|sed 's/.*build-//') if [ -z ${vmbuild} ]; then vmbuild=$(vmplayer -v | sed 's/.*build-//') fi ### 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}"