#!/bin/sh # # Description: Script for preparing VMware environment Diskless X Stations # (v4.0) # # Author(s): Dirk von Suchodoletz , 05-08-2005 # Michael Janczyk , 10-03-2006 # Copyright: (c) 2003, 2006 - RZ Universitaet Freiburg # VERSION=pre0.14; LAST_CHANGES=10.03.06 ################################################################################ ### VERBOSE? ################################################################### # set verbose mode (set -x(v)) #set -xv # TO BE CHANGED!!!! # TO BE CHANGED!!!! # TO BE CHANGED!!!! # TO BE CHANGED!!!! # TO BE CHANGED!!!! # TO BE CHANGED!!!! # TO BE CHANGED!!!! # TO BE CHANGED!!!! # TO BE CHANGED!!!! # TO BE CHANGED!!!! # TO BE CHANGED!!!! # TO BE CHANGED!!!! # TO BE CHANGED!!!! # TO BE CHANGED!!!! # TO BE CHANGED!!!! # TO BE CHANGED!!!! ### HEADER SECTION ############################################################# # VMware guestOS variable declaration ostypeheader () { echo ' # This configuration can be changed in runvmware ##### # For OSType use the first part of the image-name. # -OSType- | -VMWare name- | -Description (use "-" for space)- ##### windows98 win98 Windows-98 windows2000 win2000pro Windows-2000-Professional windowsxp winxppro Windows-XP-Professional suse suse Novell-SuSe-Linux kubuntu other26xlinux kubuntu debian other26xlinux debian ##### # What to boot if none of the obove is found, equivalent to * # -else- | -VMWare name- | -Description (use "-" for space)- ##### else other Unspecified-OS ' } # runvmware alias header aliasheader () { echo ' # This configuration can be changed in runvmware # # -NO DUPLICATE ENTRIES!!!- ###### # -OSType- | -aliases separated through spaces- ##### windows98 win98 windows2000 win2k windowsxp winxppro winxp suse suse93 ##### # -Spec names- | -aliases separated through spaces- ##### kursversion kurs k ' } # runvmware.conf runvmwareconfheader () { echo " # This configuration file was generated by 'runvmware', dont use it for your # own configurations - it will be overwritten apmSuspend = \"FALSE\" config.version = \"$CONFVER\" debug = \"FALSE\" disable_acceleration = \"FALSE\" displayName = \"$DISPLAYNAME\" ethernet0.address = \"00:50:56:0D:$MAC\" ethernet0.addressType = \"static\" ethernet0.connectionType = \"bridged\" ethernet0.present = \"TRUE\" $FLOPPYA floppy1.fileName = \"$FILENAME\" floppy1.fileType = \"file\" floppy1.present = \"TRUE\" floppy1.startConnected = \"TRUE\" guestOS = \"$VMOSTYPE\" hard-disk.enableIBR = \"FALSE\" ide0:0.fileName = \"$TMPDIR/disk\" ide0:0.mode = \"$NP\" ide0:0.present = \"TRUE\" isolation.tools.dnd.disable = \"TRUE\" logging = \"FALSE\" memsize = \"$MEM\" parallel0.bidirectional = \"FALSE\" parallel0.fileName = \"/dev/parport0\" parallel0.present = \"FALSE\" priority.grabbed = \"normal\" priority.ungrabbed = \"normal\" redoLogDir = \"$TMPDIR\" resume.repeatable = \"FALSE\" scsi0:0.deviceType = \"cdrom-raw\" scsi0:0.fileName = \"$CDR_1_NAME\" scsi0:0.present = \"$CDR_1\" scsi0:1.deviceType = \"cdrom-raw\" scsi0:1.fileName = \"$CDR_2_NAME\" scsi0:1.present = \"$CDR_2\" scsi0.present = \"$VMSCSI\" serial0.fileName = \"/dev/ttyS0\" serial0.present = \"TRUE\" sharedFolder0.enabled = \"TRUE\" sharedFolder0.expiration = \"never\" sharedFolder0.guestName = \"home\" sharedFolder0.hostPath = \"$HOME\" sharedFolder0.present = \"TRUE\" sharedFolder0.readAccess = \"TRUE\" sharedFolder0.writeAccess = \"TRUE\" sharedFolder.maxNum = \"1\" sound.present = \"TRUE\" suspendToDisk = \"TRUE\" tmpDirectory = \"$TMPDIR\" tools.syncTime = \"TRUE\" usb.present = \"TRUE\" virtualHW.version = \"4\" " \ >$CONFILE # Set the appropriate permissions for the vmware config file chmod u+rwx $CONFILE >/dev/null 2>&1 } preferencesheader () { echo " # This configuration file was generated by 'runvmware', dont use it for your # own configurations - it will be overwritten hint.buslogic.needDriver = \"FALSE\" hint.cpuid.unknownfeature = \"FALSE\" hint.disklib.lockerror = \"FALSE\" hint.guestos.xp = \"FALSE\" hint.gui.poweroff = \"FALSE\" hint.gui.reset = \"FALSE\" hint.mks.fullscreen = \"FALSE\" hint.mks.notLocal = \"FALSE\" hint.moninit.newKernel = \"FALSE\" hint.nfsmounted.persistent = \"FALSE\" hint.nfsmounted.undoable = \"FALSE\" hint.nologging = \"FALSE\" hint.scsi.needDriver = \"FALSE\" hint.sound.openMixerFailed = \"FALSE\" hint.tools.toolsImage = \"FALSE\" hint.upgrade.legacyVM = \"FALSE\" hint.usbgLinux.altuhci = \"FALSE\" hint.vmui.poweroff = \"FALSE\" hint.xkeymap.notLocal = \"FALSE\" pref.allowInsanePkgs = \"FALSE\" pref.autoFitFullScreen = \"fitHostToGuest\" pref.autoRaise = \"FALSE\" pref.exchangeSelections = \"TRUE\" pref.grabOnKeyPress = \"FALSE\" pref.hotkey.shift = \"true\" pref.motionGrab = \"TRUE\" pref.motionScrollBarrier = \"100000\" pref.motionUngrabBarrier = \"1\" pref.openedVM0.present = \"TRUE\" pref.openedVM.maxNum = \"1\" pref.syncTime = \"FALSE\" pref.tip.startup = \"FALSE\" pref.toolbarIcons = \"FALSE\" pref.view.navBar.type = \"favorites\" pref.vmplayer.exit.vmAction = \"poweroff\" pref.vmplayer.fullscreen.autohide = \"TRUE\" pref.vmplayer.webUpdateOnStartup = \"FALSE\" prefvmx.defaultVMPath = \".vmware\" prefvmx.mru.config = \"$CONFILE:\" prefvmx.mru.suspended = \"\" tmpDirectory = \"$CONFDIR\" webUpdate.checkLast = \"1120235802\" webUpdate.checkPeriod = \"manual\" " \ >$VMDIR/preferences } # Create Windows 98 config files win98header () { echo -e "\tREGEDIT4\r [HKEY_CURRENT_USER\Networ\Persistent\H]\r \"RemotePath\"=\"\\\\192.168.1.2\\$USER\"\r \"UserName\"=\"$USER\"\r \"ProviderName\"=\"Microsoft Network\"\r" \ > /media/loop0/home.reg echo -e "\tREGEDIT4\r [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VNETSUP]\r \"ComputerName\"=\"$HOSTNAME\"\r \"Workgroup\"=\"$WORKGROUP\"\r \"Comment\"=\"$COMMENT\"\r \"StaticVxD\"=\"vnetsup.vxd\"\r \"Start\"=hex:00\r \"NetClean\"=hex:01\r [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ComputerName\\\ ComputerName]\r \"ComputerName\"=\"$HOSTNAME\"\r" \ > /media/loop0/rechner.reg echo -e "\tREGEDIT4\r [HKEY_LOCAL_MACHINE\Network\Logon]\r \"username\"=\"$USER\"\r \"PrimaryProvider\"=\"Microsoft Network\"\r \"LMLogon\"=hex:00,00,00,00\r" \ > /media/loop0/logon.reg } winresheader () { echo -e "\r \r \r \r \r \r \r \r \r \r \r" \ > /media/loop0/config.xml } ### VARIABLES SECTION ########################################################## # Declaration of default variables # Hardware variables # Temporary disk space for logs, etc... export TMPDIR=/tmp/vmware_temporary/$USER/tmp # ;) MAC= declare -i MEM=0 declare -i MEMTEST=0 MEMOPT= PERMEM=66 # Virtual Devices VMSCSI=FALSE CDR_1=FALSE CDR_2=FALSE FLOPPYA="floppy0.present = \"FALSE\"" # Resolution HOSTRES=`xvidtune -show | grep -ve "^$"` X_PARAM=`echo "$HOSTRES" | awk '{print $3}'` Y_PARAM=`echo "$HOSTRES" | awk '{print $7}'` # VMware variables # VMware start options VMOPT="-X -q" # Config directory and file CONFDIR=/tmp/vmware_temporary/$USER/vmware CONFILE=$CONFDIR/runvmware.conf VMDIR=$HOME/.vmware # Zenity SESS_ZEN="/etc/X11/sessions" # VMware version VM_VER=5 # Special Variables #UNDOPOINT="keep" CONFVER=7 NP="independent-nonpersistent" # Set hostname: using original hostname and adding string "-vm" HOSTNAME=`hostname`"-vm" # Set samba workgroup WORKGROUP="tux-net" # Place for the virtual floppy "B:" FILENAME=`mount | grep -i "$HOST-1440.img" | awk '{print $1}'` COMMENT="Diskless Workstation VMware-Image" # Image Variables IMGDIR="/usr/share/vmware" ALIAS= SPEC= ENDING="vmdk" DISKFILE= RIGHTSFILE= NOIMAGE=0 OSTYPE= DISPLAYNAME="Unknown OS" # Image checking variable FILECHECK= # Command line variables # Command line options, transform to lower case LINEOPTS=( `echo $@ | tr [A-Z] [a-z]` ) SILENT= DEBUG=0 INTER= COMDEF= NARG= ### FUNCTIONS SECTION ########################################################## # Function to write to stdout/logfile # Logs labeled with $2=0 write to stdout, if debug set, write to logfile writelog () { # Write to stdout ! [ $SILENT ] && [ "$2" = "0" ] && echo -e "$1" # Check if range given e.g. 0 0 if [ -z "$2" ] || [ -z "$3" ];then echo -e "\n\nNO RANGE IN WRITELOG STATEMENT:\n$1\n\tPlease correct!\n" exit 1 fi # Log if level greater than 1 and log only from level $2 to level $3 [ "$DEBUG" -ge "1" ] && [ "$DEBUG" -ge "$2" ] && [ "$DEBUG" -le "$3" ] && \ echo -e "$1" >>$CONFDIR/runvmware.$DEBUG.log } help () { cat < start ostype, e.g. windowsxp, suse,... (first part of image name) -s specify your image, e.g. standard (second part of image name) -a use aliases in runvmware header --silent no stdout from runvmware --displayaliases aliases you can use with option -a --mem override autoallocation of memory, in percent m,M megabyte, g,G gigabyte, h,H reserve f. host --delay delay the start of the script n seconds --image specify image directory --persistent use persistent mode --define-vm-ostype overwrite vmware ostype VMware options: --run specify programm, e.g. vmware, vmplayer, ... --windowed start in windowed mode --edit only open config file in vmware (only VMware) --donotquit do not quit after image stopped (only VMware) runvmware options: -h|--help this help --version --debug level 1 -> print stdout to file Dirk von Suchodoletz, Michael Janczyk , EOH # Print Version , remove path echo -e "$0: LAST CHANGES $LAST_CHANGES | VERSION $VERSION\n" |\ awk -F "/" '{print "\t\t"$NF}' exit 0 } checkalias () { writelog "Checking alias for $OSTYPE${SPEC:+", $SPEC"}...\c" 0 1 # OSTYPE= OSALIAS=`aliasheader | grep -v "#.*" | grep -w "$OSTYPE" | awk '{print $1}'` [ -n "$OSALIAS" ] && OSTYPE=$OSALIAS # SPEC= [ -n "$SPEC" ] && \ SPECALIAS=`aliasheader | grep -v "#.*" | grep -w "$SPEC" | awk '{print $1}'` [ -n "$SPECALIAS" ] && SPEC=$SPECALIAS writelog "finished\nResult:\n\tOS=$OSTYPE${SPEC:+"\\\n\\\tSPEC=$SPEC"}\n" 0 1 } x_dialog () { DESKTOPS=( `ls $SESS_ZEN 2>/dev/null | sed -e "s,.desktop,,"` ) DESKTOPSNR=`ls $SESS_ZEN 2>/dev/null | wc -l` (( NARG=0 )) while [ "$DESKTOPSNR" -gt "$NARG" ]; do MENU="$MENU ${DESKTOPS[$NARG]} ${DESKTOPS[$NARG]}" (( NARG=$NARG+1 )) done # --stderr because of 1>/dev/nul Xdialog --title "VMware Image Menu" \ --stderr \ --no-tags \ --ok-label "Run Image" \ --cancel-label "Abort Runvmware" \ --menubox "Please choose the image you would like to run:" 24 51 6 \ $MENU 1>/dev/null } filecheck () { FILECHECK=`LANG=us ls -lh $DISKFILE 2>&1` writelog "Filecheck:\n$FILECHECK\n" 0 1 NOIMAGE=`echo $FILECHECK | grep -i "No such file or directory" | wc -l` RIGHTSFILE=$DISKFILE # Check if link if [ -L "$DISKFILE" ]; then writelog "Vmware Image Problem:\c" 0 1 writelog "\tThe image you've specified is a link.\n" 0 1 writelog "\tContinuing to start VMware, but it may cause problems!\n" 0 0 # Take link target RIGHTSFILE=`ls -lh $DISKFILE 2>&1 | awk -F "->" '{print $2}'` FILECHECK=`LANG=us ls -lh $RIGHTSFILE 2>&1` fi # Does file exist if [ "$NOIMAGE" -ge "1" ]; then writelog "Vmware Image Problem:\c" 0 0 writelog "\tThe image you've specified doesn't exist." 0 0 writelog "Filecheck says:\c" 0 1 writelog "\t\t$DISKFILE:\n\t\t\tNo such file or directory" 0 1 writelog "Hint:\c" 0 0 writelog "\t\t\tCompare spelling of the image with your options.\n" 0 0 exit 1 fi # Readable? if ! [ -r "$DISKFILE" ]; then # $RIGHTSFILE see above writelog "Vmware Image Problem:\c" 0 1 writelog "\tThe image you've specified has wrong rights." 0 1 writelog "Filecheck says:\t\t`echo $FILECHECK |\ awk '{print $1" "$3" "$4}'` $RIGHTSFILE" 0 1 writelog "Hint:\t\t\tChange rights with: chmod a+r $RIGHTSFILE\n" 0 0 exit 1 fi } #### INTERPRET COMMAND LINE OPTIONS ############################################ # Print help if no clo if [ $# = "0" ]; then help exit 0 fi # Start (( NARG=0 )) while [ $# -gt "$NARG" ]; do case "${LINEOPTS[$NARG]}" in -h|--help) help ;; --version) echo -e "\n$0: LAST CHANGES $LAST_CHANGES | VERSION $VERSION\n" |\ awk -F "/" '{print "\t"$NF}' exit 0 ;; -i) INTER="yes" ;; -o) (( NARG=$NARG+1 )) # Needed for checking unknown options OSTYPE=${LINEOPTS[$NARG]} ;; -s) (( NARG=$NARG+1 )) SPEC=${LINEOPTS[$NARG]} ;; -a) ALIAS="yes" ;; --silent) SILENT=true ;; --displayaliases) aliasheader; exit 0 ;; --delay) (( NARG=$NARG+1 )) sleep ${LINEOPTS[$NARG]} ;; --image) (( NARG=$NARG+1 )) IMGDIR=${LINEOPTS[$NARG]} ;; --persistent) NP="independent-persistent" ;; --define-vm-ostype) (( NARG=$NARG+1 )) VMOSTYPE=${LINEOPTS[$NARG]} COMDEF="yes" ;; --mem) (( NARG=$NARG+1 )) MEMOPT=${LINEOPTS[$NARG]} ;; --run) (( NARG=$NARG+1 )) VMRUN=${LINEOPTS[$NARG]} ;; --debug) (( NARG=$NARG+1 )) DEBUG=${LINEOPTS[$NARG]} ;; --windowed) VMOPT=`echo $VMOPT | sed -e "s,-X,-x,"` ;; --edit) VMOPT="" ;; --donotquit) VMOPT=`echo $VMOPT | sed -e "s,-q,,"` ;; *) echo -e "\n\tOption \"${LINEOPTS[$NARG]}\" not found, please correct.\n" sleep 1 help ;; esac (( NARG=$NARG+1 )) done ### STARTING ################################################################### # Logo for console cat </dev/null 2>&1 rm -f $CONFDIR/*LOCK >/dev/null 2>&1 rm -f $CONFDIR/*.$DEBUG.log >/dev/null 2>&1 # Check if /tmp/vmware_temporary is existing writelog "Checking /tmp/vmware_temporary directory...\c" 0 99 if ! [ -d "/tmp/vmware_temporary" ]; then writelog "\n/tmp/vmware_temporary does not exist, or is no directory!" 0 99 writelog "\n\tExiting!\n" 0 99 exit 1 fi writelog "OK!" 0 99 # Create vmware directories mkdir -p $TMPDIR >/dev/null 2>&1 mkdir -p $CONFDIR >/dev/null 2>&1 mkdir -p $VMDIR >/dev/null 2>&1 # Start logging, because now we have the directories created ;) writelog "##################################################" 1 99 writelog "#\n# File created by $0 (v.$VERSION)\n# on `date`" 1 99 writelog "# LOGLEVEL=$DEBUG\n#" 1 99 writelog "##################################################\n" 1 99 # Repeat only for logfile ;) writelog "Starting...`echo $NP|sed -e \"s,i.*-,,g\"|tr [a-z] [A-z]`-mode\n" 1 1 # Log disksetup writelog "Directories:" 0 1 writelog "\tTMPDIR=$TMPDIR\n\tCONFDIR=$CONFDIR\n\tVMDIR=$VMDIR\n" 0 1 writelog "vmware_temporary:\n`ls -l /tmp/vmware_temporary`\n" 0 1 # Configuring MAC address: first four bytes are fixed (00:50:56:0D) the # last two bytes are taken from the local network adaptor writelog "Starting hardware/device detection...\c" 0 1 MAC=`/sbin/ifconfig eth0 | grep eth0 | sed -e "s, ,,g" | \ awk -F : '{print $(NF-1)":"$NF}'` # Gather memory info and set virtual machine memory size accordingly MEMTEST=`cat /proc/meminfo | grep MemTotal | sed -e 's,[0-9][0-9][0-9] kB,,' \ -e 's,MemTotal: *,,'` # Check if command line option given and calculate memory for vmware if [ -n "$MEMOPT" ]; then # Memory allocation for host or guest? MEMHOST=`echo $MEMOPT | grep -i "h"`\ && MEMOPT=`echo $MEMOPT | sed -e "s,[h,H],,"` # Memory given in megabyte MEMMEG=`echo $MEMOPT | grep -i "m"` # Memory given in gigabyte MEMGIG=`echo $MEMOPT | grep -i "g"` # Remove m or M [ -n "$MEMMEG" ] && MEM=`echo $MEMOPT | sed -e "s,[m,M],,"` # Remove g or G and convert to megabyte [ -n "$MEMGIG" ] && MEM=`echo $MEMOPT | sed -e "s,[g,G],,"`\ && MEM=$MEM*1024 # If no m or g, then it is percent [ -z "$MEMMEG" ] && [ -z "$MEMGIG" ] && MEM=$MEMTEST/100*$MEMOPT/4*4 # Memory allocation for host or guest? If host calculate for guest. [ -n "$MEMHOST" ] && MEM=$MEMTEST-$MEM # Else use PERMEM variable to calculate memory percentage for vmware else MEM=$MEMTEST/100*$PERMEM/4*4 fi # Check memory range MEMTEST=$MEMTEST-128 if [ "$MEM" -lt "128" ] || [ "$MEM" -gt "$MEMTEST" ]; then writelog "\n\n\tYour memory is out of range: $MEM MB.\n\ \tMin. 128 MB for host and guest!\n\tTry --mem option.\n" 0 1 exit 1 fi # Look for cdrom,dvd and floppy and add them to the vm config file if [ -L /dev/cdrom1 ] ; then VMSCSI=TRUE CDR_1=TRUE CDR_1_NAME="/dev/cdrom1" fi if [ -L /dev/cdrom2 ] ; then VMSCSI=TRUE CDR_2=TRUE CDR_2_NAME="/dev/cdrom2" fi # Floppy [ -d /sys/block/fd0 ] && FLOPPYA="floppy0.fileName = /dev/fd0" writelog "finished\nResults:\n\tMAC=$MAC\n\tMEM=$MEM\n\tVMSCSI=$VMSCSI" 0 1 writelog "\tCDR_1=$CDR_1\n\tCDR_2=$CDR_2\n" 0 1 ### SELECT VIRTUAL IMAGE ####################################################### # Interactive mode if [ -n "$INTER" ]; then writelog "Starting interactive mode...\c" 0 0 MENUTEST=`ls $SESS_ZEN 2>/dev/null | wc -l` # Check for session files if [ "$MENUTEST" = "0" ]; then writelog "\rNo sessions found in /etc/X11/sessions for option -i" 0 99 writelog "Please use option -o/-s and check your configuration \n" 0 0 exit 1 fi # Check for Xdialog if ! [ `which Xdialog 2>/dev/null` ]; then writelog "\rXdialog not found!\t\t" 0 99 writelog "Please install Xdialog for interactive mode, \c" 0 0 writelog "or use options -o/-s.\n" 0 0 exit 1 fi # Create Menu, etc... ARGS=`x_dialog 2>&1 | tr [A-Z] [a-z] | sed -e "s,-, ,"` # 2>&1, see function OSTYPE=`echo $ARGS | awk '{print $1}'` SPEC=`echo $ARGS | awk '{print $2}'` if [ -z "$ARGS" ]; then writelog "\rNo image selected, please retry or use option -o / -s\n" 0 0 writelog "No image was selected (opton -i); return value is: $ARGS\n" 2 2 exit 1 fi writelog "finished.\nResult:\n\tostype=$OSTYPE${SPEC:+\n\tspec=$SPEC}\n" 0 1 fi # Aliases [ -n "$ALIAS" ] && checkalias # Image allocation writelog "Starting image detection...\c" 0 1 DISKFILE="$IMGDIR/$OSTYPE${SPEC:+"-$SPEC"}.$ENDING" # Check if VMOSTYPE defined via command line if [ -z "$COMDEF" ]; then VMOSTYPE=`ostypeheader | grep -v "#.*" | grep -w "$OSTYPE" | \ awk '{print $2}'` DISPLAYNAME=`ostypeheader | grep -v "#.*" | grep -w "$OSTYPE" |\ awk '{print $3}' | sed -e "s,-, ,g"` # If OSTYPE not found use else statement VMOSTYPE=${VMOSTYPE:-`ostypeheader | grep -v "#.*" | grep -w "else" | \ awk '{print $2}'`} DISPLAYNAME=${DISPLAYNAME:-`ostypeheader | grep -v "#.*" | \ grep -w "else" | awk '{print $3}' |\ sed -e "s,-, ,g"`} fi writelog "finished\nResults:\n\tDISKFILE=$DISKFILE\n\tVMOSTYPE=$VMOSTYPE" 0 1 writelog "\tDISPLAYNAME=$DISPLAYNAME\n" 0 1 # Link to windows image writelog "Linking \"ln -fs $DISKFILE $TMPDIR/disk\"...\c" 0 1 ln -fs $DISKFILE $TMPDIR/disk writelog "finished\nResult:\n`ls -l $TMPDIR/disk`\n" 0 1 # Check if image exists, etc... filecheck ### WRITE CONFIGURATION FILES ################################################## # Create preferences preferencesheader # Create VMware startup file runvmwareconfheader # Prepare config files for the clientOS (win) [ "$VMOSTYPE" = "win98" ] && win98header # Windows 98 specific # Set Resolution for Windows guest winresheader ### DELETE IF OBSOLETE ######################################################### # old, delete when obsolete xvidtune -show | grep -ve "^$"| \ awk {'print "[resolution]\r\nx="$3"\r\ny="$7"\r\n\r\n[username]\r\n\ user_name="ENVIRON["USER"]"\r\n"'} \ > /media/loop0/config.ini ### RUN VMWARE(-Player) ######################################################## # ...with the automatically written config file if [ `which vmplayer 2>/dev/null` ] && [ -z "$VMRUN" ]\ || [ "$VMRUN" = "vmplayer" ]; then writelog "\nStarting VMplayer..." 0 0 cp /usr/share/dxs/VMware/nvram.5.0 $CONFDIR/nvram 2>&1 >/dev/null VMOPT=`echo $VMOPT | sed -e "s,-q,," -e "s,-x,,"` # Remove unsupported opts. vmplayer $VMOPT $CONFILE 2>&1 >/dev/null elif [ `which vmware 2>/dev/null` ] && [ -z "$VMRUN" ]\ || [ "$VMRUN" = "vmware" ]; then # Copy licence file and virtual bios to VMware directory writelog "copying nvram and licence..." 0 0 cp /usr/share/dxs/VMware/license.ws.5.0 $VMDIR 2>&1 >/dev/null cp /usr/share/dxs/VMware/nvram.5.0 $CONFDIR/nvram 2>&1 >/dev/null # Run VMware writelog "\nStarting VMware..." 0 0 vmware $VMOPT $CONFILE 2>&1 >/dev/null else writelog "\nNo VMware/VMPlayer found!\n" 0 99 exit 1 fi writelog "\nBye.\n" 0 0 exit 0 ################################################################################