summaryrefslogtreecommitdiffstats
path: root/os-plugins
diff options
context:
space:
mode:
authorVolker Uhrig2008-02-17 03:28:41 +0100
committerVolker Uhrig2008-02-17 03:28:41 +0100
commitda8b2bf2b5860698f71372c22b473dba8fcb18b4 (patch)
tree5da67e630f9da8bcf853bd90bcdb557bbd9b5202 /os-plugins
parent* Added example how you can copy files outside of the chroot (diff)
downloadcore-da8b2bf2b5860698f71372c22b473dba8fcb18b4.tar.gz
core-da8b2bf2b5860698f71372c22b473dba8fcb18b4.tar.xz
core-da8b2bf2b5860698f71372c22b473dba8fcb18b4.zip
* cleaned up code
* fixed tabs * plugin includes now all needed files. they will get copied from the plugin dir git-svn-id: http://svn.openslx.org/svn/openslx/trunk@1553 95ad53e4-c205-0410-b2fa-d234c58c8868
Diffstat (limited to 'os-plugins')
-rw-r--r--os-plugins/plugins/vmware/OpenSLX/OSPlugin/vmware.pm24
-rw-r--r--os-plugins/plugins/vmware/XX_vmware.sh747
-rw-r--r--os-plugins/plugins/vmware/files/README23
-rwxr-xr-xos-plugins/plugins/vmware/files/Vorlage_VMwareImageAdministrator.xml43
-rw-r--r--os-plugins/plugins/vmware/files/client-config.xml.default8
-rw-r--r--os-plugins/plugins/vmware/files/dhcpd.conf22
-rw-r--r--os-plugins/plugins/vmware/files/nat.conf46
-rw-r--r--os-plugins/plugins/vmware/files/nvram.5.0bin0 -> 8664 bytes
-rw-r--r--os-plugins/plugins/vmware/files/runvmware-v2559
9 files changed, 828 insertions, 644 deletions
diff --git a/os-plugins/plugins/vmware/OpenSLX/OSPlugin/vmware.pm b/os-plugins/plugins/vmware/OpenSLX/OSPlugin/vmware.pm
index d3d5375a..048f0f38 100644
--- a/os-plugins/plugins/vmware/OpenSLX/OSPlugin/vmware.pm
+++ b/os-plugins/plugins/vmware/OpenSLX/OSPlugin/vmware.pm
@@ -79,6 +79,30 @@ sub getAttrInfo
};
}
+sub preInstallationPhase
+{ # called before chrooting into vendor-OS root, should be used if any files
+ # have to be downloaded outside of the chroot (which might be necessary
+ # if the required files can't be installed via the meta-packager)
+ my $self = shift;
+ my $pluginRepositoryPath = shift;
+ # the folder where the stage1-plugin should store all files
+ # required by the corresponding stage3 runlevel script
+ my $pluginTempPath = shift;
+ # a temporary playground that will be cleaned up automatically
+
+ # get path of files we need to install
+ my $pluginName = $self->{'name'};
+ my $pluginFilesPath
+ = "$openslxConfig{'base-path'}/lib/plugins/$pluginName/files";
+
+ # copy all needed files now
+ my @files = ("dhcpd.conf", "nat.conf", "nvram.5.0", "runvmware-v2");
+ foreach my $file (@files) {
+ copyFile("$pluginFilesPath/$file", "$pluginRepositoryPath");
+ }
+}
+
+
sub suggestAdditionalKernelModules
{
my $self = shift;
diff --git a/os-plugins/plugins/vmware/XX_vmware.sh b/os-plugins/plugins/vmware/XX_vmware.sh
index 86f7854d..741bc013 100644
--- a/os-plugins/plugins/vmware/XX_vmware.sh
+++ b/os-plugins/plugins/vmware/XX_vmware.sh
@@ -1,5 +1,7 @@
#! /bin/sh
+#TODO: nvram,functions
+
# check if the configuration file is available
if [ -e /initramfs/plugin-conf/vmware.conf ]; then
@@ -24,42 +26,41 @@ if [ -e /initramfs/plugin-conf/vmware.conf ]; then
# vmware stuff first part: two scenarios
# * VM images in /usr/share/vmware - then simply link
# * VM images via additional mount (mount source NFS, NBD, ...)
- if [ "x${vmware}" != "x" ] && [ "x${vmware}" != "xno" ] ; then
- # map slxgrp to pool, so it's better to understand
- pool=${slxgrp}
- # if we dont have slxgrp defined
- [ -z "${pool}" ] && pool="default"
-
- # get source of vmware image server (get type, server and path)
- if strinstr "/" "${vmware}" ; then
- vmimgprot=$(uri_token ${vmware} prot)
- vmimgserv=$(uri_token ${vmware} server)
- vmimgpath="$(uri_token ${vmware} path)"
- fi
- if [ -n "${vmimgserv}" ] ; then
- testmkd /mnt/var/lib/vmware
- case "${vmimgprot}" in
- *nbd)
- ;;
- lbdev)
- # we expect the stuff on toplevel directory, filesystem type should be
- # autodetected here ... (vmimgserv is blockdev here)
- vmbdev=/dev/${vmimgserv}
- waitfor ${vmbdev} 20000
- echo -e "ext2\nreiserfs\nvfat\nxfs" >/etc/filesystems
- mount -o ro ${vmbdev} /mnt/var/lib/vmware || error "$scfg_evmlm" nonfatal
- ;;
- *)
- # we expect nfs mounts here ...
- for proto in tcp udp fail; do
- [ $proto = "fail" ] && { error "$scfg_nfs" nonfatal;
- noimg=yes; break;}
- mount -n -t nfs -o ro,nolock,$proto ${vmimgserv}:${vmimgpath} \
- /mnt/var/lib/vmware && break
- done
- ;;
- esac
- fi
+
+ # map slxgrp to pool, so it's better to understand
+ pool=${slxgrp}
+ # if we dont have slxgrp defined
+ [ -z "${pool}" ] && pool="default"
+
+ # get source of vmware image server (get type, server and path)
+ if strinstr "/" "${vmware}" ; then
+ vmimgprot=$(uri_token ${vmware} prot)
+ vmimgserv=$(uri_token ${vmware} server)
+ vmimgpath="$(uri_token ${vmware} path)"
+ fi
+ if [ -n "${vmimgserv}" ] ; then
+ testmkd /mnt/var/lib/vmware
+ case "${vmimgprot}" in
+ *nbd)
+ ;;
+ lbdev)
+ # we expect the stuff on toplevel directory, filesystem type should be
+ # autodetected here ... (vmimgserv is blockdev here)
+ vmbdev=/dev/${vmimgserv}
+ waitfor ${vmbdev} 20000
+ echo -e "ext2\nreiserfs\nvfat\nxfs" >/etc/filesystems
+ mount -o ro ${vmbdev} /mnt/var/lib/vmware || error "$scfg_evmlm" nonfatal
+ ;;
+ *)
+ # we expect nfs mounts here ...
+ for proto in tcp udp fail; do
+ [ $proto = "fail" ] && { error "$scfg_nfs" nonfatal;
+ noimg=yes; break;}
+ mount -n -t nfs -o ro,nolock,$proto ${vmimgserv}:${vmimgpath} \
+ /mnt/var/lib/vmware && break
+ done
+ ;;
+ esac
fi
echo " * vmware part 2"
@@ -68,624 +69,82 @@ if [ -e /initramfs/plugin-conf/vmware.conf ]; then
# vmware stuff second part: setting up the environment
# create needed directories and files
- if [ "x${vmware}" != "x" ] && [ "x${vmware}" != "xno" ] ; then
- for i in /etc/vmware/vmnet1/dhcpd /etc/vmware/vmnet8/nat \
- /etc/vmware/vmnet8/dhcpd /var/run/vmware /etc/vmware/loopimg \
- /etc/vmware/fd-loop /var/X11R6/bin /etc/X11/sessions; do
- testmkd /mnt/$i
- done
- # create needed devices (not created automatically via module load)
- for i in "/dev/vmnet0 c 119 0" "/dev/vmnet1 c 119 1" \
- "/dev/vmnet8 c 119 8" "/dev/vmmon c 10 165"; do
- mknod $i
- done
- # create the vmware startup configuration file /etc/vmware/locations
- # fixme --> ToDo
- # echo -e "answer VNET_8_NAT yes\nanswer VNET_8_HOSTONLY_HOSTADDR \n\
- #192.168.100.1\nanswer VNET_8_HOSTONLY_NETMASK 255.255.255.0\n\
- #file /etc/vmware/vmnet8/dhcpd/dhcpd.conf\n\
- # remove_file /etc/vmware/not_configured" >/mnt/etc/vmware/locations
+ for i in /etc/vmware/vmnet1/dhcpd /etc/vmware/vmnet8/nat \
+ /etc/vmware/vmnet8/dhcpd /var/run/vmware /etc/vmware/loopimg \
+ /etc/vmware/fd-loop /var/X11R6/bin /etc/X11/sessions; do
+ testmkd /mnt/$i
+ done
+
+ # create needed devices (not created automatically via module load)
+ for i in "/dev/vmnet0 c 119 0" "/dev/vmnet1 c 119 1" \
+ "/dev/vmnet8 c 119 8" "/dev/vmmon c 10 165"; do
+ mknod $i
+ done
+
+ # create the vmware startup configuration file /etc/vmware/locations
+ # fixme --> ToDo
+ # echo -e "answer VNET_8_NAT yes\nanswer VNET_8_HOSTONLY_HOSTADDR \n\
+ #192.168.100.1\nanswer VNET_8_HOSTONLY_NETMASK 255.255.255.0\n\
+ #file /etc/vmware/vmnet8/dhcpd/dhcpd.conf\n\
+ # remove_file /etc/vmware/not_configured" >/mnt/etc/vmware/locations
- chmod 0700 /dev/vmnet*
- chmod 1777 /mnt/etc/vmware/fd-loop
- # loop file for exchanging information between linux and vmware guest
- if modprobe ${MODPRV} loop; then
- mdev -s
- else
- : #|| error "" nonfatal
- fi
- # mount a clean tempfs (bug in UnionFS prevents loopmount to work)
- strinfile "unionfs" /proc/mounts && \
- mount -n -o size=1500k -t tmpfs vm-loopimg /mnt/etc/vmware/loopimg
- # create an empty floppy image of 1.4MByte size
- dd if=/dev/zero of=/mnt/etc/vmware/loopimg/fd.img \
- count=2880 bs=512 2>/dev/null
- chmod 0777 /mnt/etc/vmware/loopimg/fd.img
- # use dos formatter from rootfs (later stage4)
- LD_LIBRARY_PATH=/mnt/lib /mnt/sbin/mkfs.msdos \
- /mnt/etc/vmware/loopimg/fd.img >/dev/null 2>&1 #|| error
- mount -n -t msdos -o loop,umask=000 /mnt/etc/vmware/loopimg/fd.img \
- /mnt/etc/vmware/fd-loop
- echo -e "usbfs\t\t/proc/bus/usb\tusbfs\t\tauto\t\t 0 0" >> /mnt/etc/fstab
- # needed for VMware 5.5.3 and versions below
- echo -e "\tmount -t usbfs usbfs /proc/bus/usb 2>/dev/null" \
- >>/mnt/etc/${D_INITDIR}/boot.slx
- # TODO: we still use this function? Prove if we can delete it.
- config_vmware
- chmod 1777 /mnt/var/run/vmware
- # define a variable where gdm/kdm should look for additional sessions
- # do we really need it? looks like we can delete it...
- # export vmsessions=/var/lib/vmware/vmsessions
+ chmod 0700 /dev/vmnet*
+ chmod 1777 /mnt/etc/vmware/fd-loop
+
+ # loop file for exchanging information between linux and vmware guest
+ if modprobe ${MODPRV} loop; then
+ mdev -s
+ else
+ : #|| error "" nonfatal
+ fi
+ # mount a clean tempfs (bug in UnionFS prevents loopmount to work)
+ strinfile "unionfs" /proc/mounts && \
+ mount -n -o size=1500k -t tmpfs vm-loopimg /mnt/etc/vmware/loopimg
+ # create an empty floppy image of 1.4MByte size
+ dd if=/dev/zero of=/mnt/etc/vmware/loopimg/fd.img \
+ count=2880 bs=512 2>/dev/null
+ chmod 0777 /mnt/etc/vmware/loopimg/fd.img
+ # use dos formatter from rootfs (later stage4)
+ LD_LIBRARY_PATH=/mnt/lib /mnt/sbin/mkfs.msdos \
+ /mnt/etc/vmware/loopimg/fd.img >/dev/null 2>&1 #|| error
+ mount -n -t msdos -o loop,umask=000 /mnt/etc/vmware/loopimg/fd.img \
+ /mnt/etc/vmware/fd-loop
+ echo -e "usbfs\t\t/proc/bus/usb\tusbfs\t\tauto\t\t 0 0" >> /mnt/etc/fstab
+ # needed for VMware 5.5.3 and versions below
+ echo -e "\tmount -t usbfs usbfs /proc/bus/usb 2>/dev/null" \
+ >>/mnt/etc/${D_INITDIR}/boot.slx
+ # TODO: we still use this function? Prove if we can delete it.
+ config_vmware
+ chmod 1777 /mnt/var/run/vmware
+ # define a variable where gdm/kdm should look for additional sessions
+ # do we really need it? looks like we can delete it...
+ # export vmsessions=/var/lib/vmware/vmsessions
- # we configured vmware, so we can delete the not_configured file
- rm /mnt/etc/vmware/not_configured 2>/dev/null
+ # we configured vmware, so we can delete the not_configured file
+ rm /mnt/etc/vmware/not_configured 2>/dev/null
- # copy dhcpd.conf and nat for vmnet8 (nat)
- # fixme: It should be possible to start just one vmware dhcp which should
- # listen to both interfaces vmnet1 and vmnet8 ...
- #TODO: copy it from plugin source...
- cp /mnt/var/lib/vmware/templates/dhcpd.conf \
- /mnt/etc/vmware/vmnet8/dhcpd 2>/dev/null
- cp /mnt/var/lib/vmware/templates/nat.conf \
- /mnt/etc/vmware/vmnet8/nat 2>/dev/null
- fi
+ # copy dhcpd.conf and nat for vmnet8 (nat)
+ # fixme: It should be possible to start just one vmware dhcp which should
+ # listen to both interfaces vmnet1 and vmnet8 ...
+ echo " * DEBUG:"
+ ls /mnt/opt/openslx/plugin-repo/vmware/
+ echo " * DEBUG2:"
+ ls /mnt/etc/vmware/vmnet8/{nat,dhcpd}
+ cp /mnt/opt/openslx/plugin-repo/vmware/dhcpd.conf \
+ /mnt/etc/vmware/vmnet8/dhcpd 2>/dev/null
+ cp /mnt/opt/openslx/plugin-repo/vmware/nat.conf \
+ /mnt/etc/vmware/vmnet8/nat 2>/dev/null
+ echo " * DEBUG3:"
+ ls /mnt/etc/vmware/vmnet8/{nat,dhcp}
- # TODO: plugin should copy it... find out how
# TODO: perhaps we can a) kick out vmdir
# b) configure vmdir by plugin configuration
# TODO: How to start it. See Wiki. Currently a) implemnted
# a) we get get information and start the programm with
# /var/X11R6/bin/run-vmware.sh "$imagename" "$name_for_vmwindow" "$ostype_of_vm" "$kind_of_network"
# b) we write a wrapper and get the xml-file as attribute
- cat <<EOF > /mnt/var/X11R6/bin/run-vmware.sh
-#!/bin/bash
-#
-# Description: Script for preparing VMware environment Diskless
-# X Stations and interactive session chooser (v4)
-#
-# Author(s): see project authors file
-# letzte Änderung Dirk, 15.10.
-# Copyright: (c) 2003, 2006 - RZ Universitaet Freiburg
-#
-# Version: 0.16.611
-#
-################################################################################
-
-
-################################################################################
-##
-## Put $HOME to another location
-##
-################################################################################
-
-# We need to change $HOME so it saves everything to /tmp
-#export HOME="/tmp/${USER}"
-# following mkdir we have now twice in this script... but better twice
-# as not seperated. Now its no problem to delete this
-# "Put $HOME to another location" section later
-#mkdir /tmp/${USER}
-#ln -s /home/${USER}/.Xauthority /tmp/${USER}/.Xauthority
-
-
-
-### VARIABLES SECTION ##########################################################
-##
-## declaration of default variables
-##
-################################################################################
-
-## "static" variables only changed within the script
-
-# The PATH...
-export PATH="\${PATH}:/var/X11R6/bin:/usr/X11R6/bin"
-
-# Last two values for MAC address
-mac=
-
-# memory information. permem is value to calculate needed memory
-mem=
-totalmem=
-permem=66
-
-# virtual fd/cd/dvd and drive devices, floppy b: for configuration
-#floppya is always false, if we have a floppy device or not isn't
-#important.
-floppya="FALSE"
-floppyb="TRUE"
-floppybname="/etc/vmware/loopimg/fd.img"
-cdr_1="FALSE"
-cdr_2="FALSE"
-# ide is expected default, test for the virtual disk image type should
-# be done while creating the runscripts ...
-ide="TRUE"
-scsi="FALSE"
-hddrv="lsilogic"
-
-# Displayresolution needed for vmware.config
-hostres=\$(xvidtune -show 2>/dev/null| grep -ve "^$")
-xres=\$(echo "\${hostres}" | awk '{print \$3}')
-yres=\$(echo "${hostres}" | awk '{print \$7}')
-
-# VMplayer buildversion
-vmbuild=
-
-# VMware start options
-#-X = fullscreen
-vmopt="-X"
-
-# temporary disk space for logs, etc...
-# use /tmp/vmware/\${USER} if /tmp sits on NFS import
-export tmpdir=/tmp/\${USER}
-
-# configfile
-confile="\${tmpdir}/runvmware.conf"
-
-# users vmware config folder
-vmhome="\${HOME}/.vmware"
-#vmhome="/tmp/\${USER}/.vmware"
-
-
-# unknow variables needed vor vmwplayer configuration
-confver=8
-hver=4
-
-# set hostname: using original hostname and adding string "-vm"
-# variable isn't used anywhere in this script. but still works (however)
-# TODO: Test it commented out
-hostname="VM-\${HOST}"
-
-# Folder of VirtualMachine Images
-vmdir="/var/lib/vmware"
-
-# special Variables, persistence vmware?
-#TODO: do we really need it? Should be everywhere nonpersistent
-np="independent-nonpersistent"
-
-########
-## TODO: everything clean till here
-########
-
-# File if its a link. Stupid crap
-#TODO: perhaps we don't need it
-rightsfile=
-#TODO: don't know what it is for. check later
-noimage=0
-# image checking variable
-filecheck=
-
-
-## Image depending variables. This values will be changed by the script
-
-# vmware image file
-imagename="\$1"
-diskfile="\${vmdir}/\${imagename}"
-
-#TODO: check for a faster way, perhaps we should put this into XML
-# oh - yeah!! Why not do it on the SERVER??? It has enough power and has
-# to do it once and not during every start on a client :)
-#grepping every file could take much (network) resources. And if its
-#an IDE Image, but has somewhere the string ddb.adapterType stuff can
-#become screwed
-# NOOOOOOO - We do not check on every start on every client!!!
-# check if IDE or SCSI
-#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
-
-# define name for VMware window
-displayname="\$2"
-
-# Definition of the client system
-vmostype="\$3"
-
-# Definition of the client system
-network="\$4"
-
-
-# command line variables
-# start with this this default commmand line options + extra
-# TODO: defaults laut datei --include /var/lib/vmware/tmpl/winconfig
-# --include <includefile> include code right before program start
-
-# Should we debug? Hell yes, we should always debug!
-debug=0
-
-#TODO: Bad done... we should do this another way later
-last_changes=\$(head -n 15 \$0 | grep "@" | awk -F ", " '{print \$2}' \
- | awk -F "-" '{print \$3" "\$2" "\$1}' | sort -bfnr \
- | awk '{print \$3"-"\$2"-"\$1}' | grep -m 1 [0-9])
-version=\$(head -n 15 \$0 | grep "# Version: " | awk '{print \$3}')
-
-#############
-## TODO: End of uncleaned area
-#############
-
-
-
-
-
-
-### FUNCTION SECTION ###########################################################
-##
-## In this script used functions
-##
-################################################################################
-
-### write runvmware.conf #######################################################
-#TODO: only not yet checked function
-filecheck ()
-{
- filecheck=\$(LANG=us ls -lh \${diskfile} 2>&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've 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 runvmware.conf #######################################################
-runvmwareconfheader ()
-{
- echo "
- ##############################################################################
- ###### This configuration file was generated by 'runvmware', ######
- ###### dont use it for your own configurations - it will be overwritten ######
- ###### ######
-
- ###### identity ##############################################################
- displayName = \"\${displayname}\"
- guestOS = \"\${vmostype}\"
- config.version = \"\${confver}\"
- virtualHW.version = \"\${hver}\"
-
- memsize = \"\${mem}\"
- numvcpus = \"1\"
-
- ###### ide-disks #############################################################
- ide0:0.mode = \"\${np}\"
- ide0:0.present = \"\${ide}\"
- ide0:0.fileName = \"\${diskfile}\"
-
- 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.virtualDev = \"lsilogic\"
- scsi0:0.mode = \"\${np}\"
- scsi0:0.present = \"\${scsi}\"
- scsi0:0.fileName = \"\${diskfile}\"
-
- ###### nics ##################################################################
- ethernet0.present = \"TRUE\"
- ethernet0.addressType = \"static\"
- ethernet0.connectionType = \"\${network}\"
- ethernet0.address = \"00:50:56:0D:\${mac}\"
-
- ###### sound #################################################################
- sound.present = \"TRUE\"
- sound.virtualDev = \"es1371\"
-
- ###### usb ###################################################################
- usb.present = \"TRUE\"
- usb.generic.autoconnect = \"TRUE\"
-
- ###### floppies ##############################################################
- floppy0.present = \"\${floppya}\"
- floppy0.fileName = \"auto detect\"
-
- # we need floppy b: this for our windows client configuration
- floppy1.present = \"\${floppyb}\"
- floppy1.fileType = \"file\"
- floppy1.fileName = \"\${floppybname}\"
- floppy1.startConnected = \"TRUE\"
-
- ###### ports #################################################################
- parallel0.present = \"FALSE\"
-
- serial0.present = \"FALSE\"
-
- ###### shared folders ########################################################
- sharedFolder0.present = \"TRUE\"
- sharedFolder0.enabled = \"TRUE\"
- sharedFolder0.expiration = \"never\"
- sharedFolder0.guestName = \"Home\"
- sharedFolder0.hostPath = \"\${HOME}\"
- sharedFolder0.readAccess = \"TRUE\"
- sharedFolder0.writeAccess = \"TRUE\"
- sharedFolder.maxNum = \"1\"
-
- ###### misc ##################################################################
- tmpDirectory = \"\${tmpdir}\"
- mainMem.useNamedFile = \"TRUE\"
- snapshot.disabled = \"TRUE\"
- tools.syncTime = \"TRUE\"
- # use redoLogDir = \"/dev/shm\" if sitting on NFS import
- redoLogDir = \"\${tmpdir}\"
- hints.hideAll = \"TRUE\"
- logging = \"FALSE\"
- isolation.tools.hgfs.disable = \"FALSE\"
- isolation.tools.dnd.disable = \"TRUE\"
- isolation.tools.copy.enable = \"TRUE\"
- isolation.tools.paste.enabled = \"TRUE\"
- gui.restricted = \"TRUE\"
- pref.hotkey.shift = \"TRUE\"
- pref.hotkey.control = \"TRUE\"
- pref.hotkey.alt = \"TRUE\"
- svga.maxWidth = \"\${xres}\"
- svga.maxHeight = \"\${yres}\"
- " \
- >\${confile}
-
- # set the appropriate permissions for the vmware config file
- chmod u+rwx \${confile} >/dev/null 2>&1
-}
-
-
-### creates user configurationfile in \${vmhome} ################################
-preferencesheader ()
-{
- echo "
- ##############################################################################
- ###### This configuration file was generated by 'runvmware', ######
- ###### dont use it for your own configurations - it will be overwritten ######
- ###### ######
- ################################## Wichtig! ##################################
- ###### *.vmem wird immer angelegt und frisst soviel Speicher, wie fuer ######
- ###### den Gast vorgesehen. Sollte nicht im tempfs liegen. NFS OK, da ######
- ###### IO nur einmal beim Start erheblich. Wird gesteuert ueber ######
- ###### tmpDirectory = /nfs-viel-platz und darin wird dann vmware-\$user ######
- ###### angelegt.
-
- hints.hideAll = \"true\"
- pref.exchangeSelections = \"true\"
- pref.hotkey.shift = \"true\"
- pref.tip.startup = \"false\"
- pref.vmplayer.exit.vmAction = \"poweroff\"
- pref.vmplayer.fullscreen.autohide = \"true\"
- pref.vmplayer.webUpdateOnStartup = \"false\"
- prefvmx.defaultVMPath = \"\${vmhome}\"
- prefvmx.mru.config = \"\${confile}:\"
- tmpDirectory = \"\${tmpdir}\"
- webUpdate.checkPeriod = \"manual\"
- 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" >>\${tmpdir}/runvmware.\${USER}.log
-}
-
-
-
-
-### MAIN SECTION ###############################################################
-##
-## Main part of the script...
-##
-################################################################################
-
-# Delete the LOCK file. its unsecure, but ...
-rm -f \${tmpdir}/*LOCK >/dev/null 2>&1
-
-# create vmware directories
-mkdir -p \${tmpdir} >/dev/null 2>&1
-mkdir -p \${vmhome} >/dev/null 2>&1
-
-# NO X-server, no runvmware ;)
-[ -z "\$DISPLAY" ] && echo -e "\n\tStart only within a desktop!\n" && exit 1
-
-# logo for console
-cat <<EOL
-
- .----.--.--.-----.--.--.--------.--.--.--.---.-.----.-----.
- | _| | | | | | | | | | _ | _| -__|
- |__| |_____|__|__|\___/|__|__|__|________|___._|__| |_____|
- Script for preparing VMware environment...(v\${version})
-
-
-EOL
-
-
-### CHECK MACHINE SETUP ########################################################
-
-## log script information
-writelog "##################################################\n"
-writelog "# File created by \$0 (v.\${version})\n# on \$(date)\n"
-writelog "##################################################\n"
-writelog "Starting...\$(echo \${np} | sed 's/i.*-//g' \
- | tr [a-z] [A-Z])-mode\n"
-
-## log disksetup
-writelog "Directories:
- \tTmpdir:\t\t\${tmpdir}\n\tVMhome:\t\t\${vmhome}\n\tTmpdir info:\
- \t\$(mount | grep -i "/tmp ")\n"
-
-## 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"
-
-## Get last two MAC values for VMPlayer
-# NF = Number of Fields of found values in awk
-mac=\$(/sbin/ifconfig eth0 | grep eth0 | sed -e "s/ //g" \
- | awk -F ":" '{print \$(NF-1)":"\$NF}')
-
-
-## check if we have enough free memory
-
-# get memory in MB
-totalmem=\$(expr \$(grep -i "memtotal" /proc/meminfo | awk '{print \$2}') / 1024)
-
-# calculate memory for vmplayer
-# TODO: unhappy how it is calculated
-mem=\$(expr \${totalmem} / 100 \* \${permem} / 4 \* 4)
-
-# check memory range
-memtest=\${totalmem}-128
-if [ "\${mem}" -lt "128" ] || [ "\${mem}" -gt "\${totalmem}" ]; then
- writelog "\n\n\tYour memory is out of range: \${mem} MB.
- \tMin. 128 MB for host and guest!\n\tTry --mem option.\n"
- exit 1
-fi
-
-
-## look for cdrom, dvd and add them to the vm config file
-if [ -L /dev/cdrom ] ; then
- cdr_1="TRUE"
-fi
-
-if [ -L /dev/cdrom1 ] ; then
- cdr_2="TRUE"
-fi
-
-
-## Write all results to logfile
-writelog "finished\nResults:\n\tMAC:\t\t00:50:56:0D:\${mac}\n\tMem:\t\t
- \${mem} MB \tMax. res.:\t\${xres}x\${yres}\n\t\tCD-ROM_1:\t\${cdr_1}\n\t
- CD-ROM_2:\t\${cdr_2}\n"
-writelog "finished\nResults:\n\tDiskfile:\t\${diskfile}\n\tDisktype:\t\${hddrv}
- \tVMostype:\t\${vmostype}\n\tDisplayname:\t\${displayname}\n"
-
-# check if image exists, etc...
-filecheck
-
-# VMPlayer Version.
-# strings is the fastest and most secure way, vmplayer -v takes too much time
-# and resources
-vmbuild=\$(strings /usr/lib/vmware/bin/vmplayer \
- | grep -m 1 "build-"|sed 's/.*build-//')
-if [ ! -n \${vmbuild} ]; then
- vmbuild=\$(vmplayer -v | sed 's/.*build-//')
-fi
-
-### write configuration files ##################################################
-# create preferences
-preferencesheader
-
-# create VMware startup file
-runvmwareconfheader
-
-# poolconfiguration config.xml
-#TODO: change default to global variable \${POOL} in the future
-#comment out cause of scanner... we do it now by hand... just a hack
-#TODO: cleaner source...
-#sed -e "s/HOSTNAME/\${hostname}/" \
-# -e "s/USER/\${USER}/" /var/lib/vmware/templates/client-config.xml.default \
-# > /etc/vmware/fd-loop/config.xml
-echo "<settings>" > /etc/vmware/fd-loop/config.xml
-echo " <eintrag>" >> /etc/vmware/fd-loop/config.xml
-echo " <computername param=\"\${hostname}\">" >> /etc/vmware/fd-loop/config.xml
-echo " </computername>" >> /etc/vmware/fd-loop/config.xml
-echo " <username param=\"\${USER}\">" >> /etc/vmware/fd-loop/config.xml
-echo " </username>" >> /etc/vmware/fd-loop/config.xml
-# if we have a scanner, then copy scannerinformation to this xml
-sanelines="\$(wc -l /etc/sane.d/net.conf|awk '{ print \$1 };')"
-if [ -f /etc/sane.d/net.conf ] && [ "\${sanelines}" -eq 1 ]; then
- echo "<scanner param=\"\$(cat /etc/sane.d/net.conf)\">" \
- >> /etc/vmware/fd-loop/config.xml
- echo "</scanner>" >> /etc/vmware/fd-loop/config.xml
-fi
-echo " </eintrag>" >> /etc/vmware/fd-loop/config.xml
-echo "</settings>" >> /etc/vmware/fd-loop/config.xml
-
-# 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 copy it from plugin location (like this script)
-cp /var/lib/vmware/templates/nvram.5.0 \${tmpdir}/nvram
-
-# adjust volume
-writelog "Unmuting sound...\c"
-amixer -q sset Master 28 unmute
-amixer -q sset PCM 28 unmute
-writelog "finished\n"
-
-### run vmplayer ###############################################################
-# ...with the automatically written config file
-if [ \$(which vmplayer 2>/dev/null) ]; then writelog "\nStarting VMplayer..."
- # run VMplayer
- writelog "... vmplayer \${vmopt} \${confile}...\n"
- vmplayer \${vmopt} \${confile} 2>&1 >/dev/null
-else
- writelog "\nNo VMware/VMPlayer found!\n"
- exit 1
-fi
-
-writelog "\nBye.\n"
-exit 0
-EOF
+ cp /mnt/opt/openslx/plugin-repo/vmware/runvmware-v2 \
+ /mnt/var/X11R6/bin/run-vmware.sh
[ $DEBUGLEVEL -gt 0 ] && echo "done with 'vmware' os-plugin ...";
diff --git a/os-plugins/plugins/vmware/files/README b/os-plugins/plugins/vmware/files/README
new file mode 100644
index 00000000..4bf303ec
--- /dev/null
+++ b/os-plugins/plugins/vmware/files/README
@@ -0,0 +1,23 @@
+Files
+- client-config.xml.default
+ Describes how the xml config needs to look like which will be used by
+ the Virtual Machine (see nvram below). Currently used internal and
+ shouldn't affect normal OpenSLX users. Data will be available on every
+ OpenSLX Client.
+- dhcpd.conf
+ DHCP Configuration file, which will be copied to
+ /etc/vmware/vmnet8/dhcpd/
+ Needed if you want to use NAT
+- nat.conf
+ NAT Configuration file, which will be copied to
+ /etc/vmware/vmnet8/nat/
+- nvram.5.0
+ This nvram supports a second Floppy drive. Helpfull if you want to
+ get some data from linux to your Windows VirtualMachine (like
+ Scanner-IP or Userinformation)
+- runvmware-v2
+ The main script which will configure and start the Virtual Machine
+- Vorlage_VMwareImageAdministrator.xml
+ This example files shows which VMware features are configureable for
+ each virtual machine.
+ Should be moved sooner or later to the vm-chooser plugin
diff --git a/os-plugins/plugins/vmware/files/Vorlage_VMwareImageAdministrator.xml b/os-plugins/plugins/vmware/files/Vorlage_VMwareImageAdministrator.xml
new file mode 100755
index 00000000..e58d829b
--- /dev/null
+++ b/os-plugins/plugins/vmware/files/Vorlage_VMwareImageAdministrator.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<settings>
+ <eintrag>
+ # Imagename with proper suffix
+ <image_name param="Vorlage_VMwareImageAdministrator.vmdk">
+ </image_name>
+ # Information of the image creator
+ <creator param="Your Name">
+ </creator>
+ <email param="your@email.address.tld">
+ </email>
+ <phone param="---">
+ </phone>
+ # Short description, shown in the menu
+ <short_description param="Vorlagen-Image">
+ </short_description>
+ # Define long description shown when the Image is chosen
+ <long_description param="Diese Image dient Ihnen als Vorlage für Ihre Installationen. Laden Sie es auf Ihre lokale Festplatte und installieren Sie Ihre Programme!">
+ </long_description>
+ #os running in vmware, needed for vmware config file
+ <os param="Windows XP">
+ </os>
+ # Network nat or bridged?
+ <network param="nat">
+ </network>
+ # values: vmware or virtualbox
+ <virtualmachine param="vmware">
+ </virtualmachine>
+ #Description: Should the current image in use? if yes value is "true"
+ <active param="true">
+ </active>
+ #Description: where should the current image be used? in the past slxgrp
+ <pools param="default chemie">
+ </pools>
+ #Description: as xdm menu? If yes "true", else "false"
+ <xdm param="false">
+ </xdm>
+ #Description: priority, use a number to get it to a special position
+ # should only be used by our department and noone else
+ <priority param="1">
+ </priority>
+ </eintrag>
+</settings>
diff --git a/os-plugins/plugins/vmware/files/client-config.xml.default b/os-plugins/plugins/vmware/files/client-config.xml.default
new file mode 100644
index 00000000..f1612fc9
--- /dev/null
+++ b/os-plugins/plugins/vmware/files/client-config.xml.default
@@ -0,0 +1,8 @@
+<settings>
+ <eintrag>
+ <computername param="HOSTNAME">
+ </computername>
+ <username param="USER">
+ </username>
+ </eintrag>
+</settings>
diff --git a/os-plugins/plugins/vmware/files/dhcpd.conf b/os-plugins/plugins/vmware/files/dhcpd.conf
new file mode 100644
index 00000000..6bc581a4
--- /dev/null
+++ b/os-plugins/plugins/vmware/files/dhcpd.conf
@@ -0,0 +1,22 @@
+#
+# Configuration file for ISC 2.0b6pl1 vmnet-dhcpd operating on vmnet8.
+#
+# This file was automatically generated by the VMware configuration program.
+# If you modify it, it will be backed up the next time you run the
+# configuration program.
+#
+# We set domain-name-servers to make some DHCP clients happy
+# (dhclient as configued in SuSE, TurboLinux, etc.).
+# We also supply a domain name to make pump (Red Hat 6.x) happy.
+#
+allow unknown-clients;
+default-lease-time 1800; # 30 minutes
+max-lease-time 7200; # 2 hours
+
+subnet 192.168.100.0 netmask 255.255.255.0 {
+ range 192.168.100.100 192.168.100.101;
+ option broadcast-address 192.168.100.255;
+ option domain-name-servers 192.168.100.2;
+ option domain-name "localdomain";
+ option routers 192.168.100.2;
+}
diff --git a/os-plugins/plugins/vmware/files/nat.conf b/os-plugins/plugins/vmware/files/nat.conf
new file mode 100644
index 00000000..07d684f0
--- /dev/null
+++ b/os-plugins/plugins/vmware/files/nat.conf
@@ -0,0 +1,46 @@
+# Linux NAT configuration file
+[host]
+# NAT gateway address
+ip = 192.168.100.2
+netmask = 255.255.255.0
+# or ip = 172.16.184.2/24
+
+# enable configuration; disabled by default for security reasons
+#configport = 33445
+
+# VMnet device if not specified on command line
+device = /dev/vmnet8
+
+# Allow PORT/EPRT FTP commands (they need incoming TCP stream...)
+activeFTP = 1
+
+# Allows the source to have any OUI. Turn this one if you change the OUI
+# in the MAC address of your virtual machines.
+#allowAnyOUI = 1
+
+[udp]
+# Timeout in seconds, 0 = no timeout, default = 60; real value might
+# be up to 100% longer
+timeout = 60
+
+[incomingtcp]
+# Use these with care - anyone can enter into your VM through these...
+
+# FTP (both active and passive FTP is always enabled)
+# ftp localhost 8887
+#8887 = 172.16.184.128:21
+
+# WEB (make sure that if you are using named webhosting, names point to
+# your host, not to guest... And if you are forwarding port other
+# than 80 make sure that your server copes with mismatched port
+# number in Host: header)
+# lynx http://localhost:8888
+#8888 = 172.16.184.128:80
+
+# SSH
+# ssh -p 8889 root@localhost
+#8889 = 172.16.184.128:22
+
+[incomingudp]
+# UDP port forwarding example
+#6000 = 172.16.184.128:6001
diff --git a/os-plugins/plugins/vmware/files/nvram.5.0 b/os-plugins/plugins/vmware/files/nvram.5.0
new file mode 100644
index 00000000..85125f1e
--- /dev/null
+++ b/os-plugins/plugins/vmware/files/nvram.5.0
Binary files differ
diff --git a/os-plugins/plugins/vmware/files/runvmware-v2 b/os-plugins/plugins/vmware/files/runvmware-v2
new file mode 100644
index 00000000..eaa35b0e
--- /dev/null
+++ b/os-plugins/plugins/vmware/files/runvmware-v2
@@ -0,0 +1,559 @@
+#!/bin/bash
+#
+# Description: Script for preparing VMware environment Diskless
+# X Stations and interactive session chooser (v4)
+#
+# Author(s): see project authors file
+# letzte Änderung Volker, 17 .Feb 2008
+# Copyright: (c) 2003 - 2008 - RZ Universitaet Freiburg
+#
+# Version: 0.16.611
+#
+################################################################################
+
+
+################################################################################
+##
+## Put $HOME to another location
+##
+################################################################################
+
+# We need to change $HOME so it saves everything to /tmp
+#export HOME="/tmp/${USER}"
+# following mkdir we have now twice in this script... but better twice
+# as not seperated. Now its no problem to delete this
+# "Put $HOME to another location" section later
+#mkdir /tmp/${USER}
+#ln -s /home/${USER}/.Xauthority /tmp/${USER}/.Xauthority
+
+
+
+### VARIABLES SECTION ##########################################################
+##
+## declaration of default variables
+##
+################################################################################
+
+## "static" variables only changed within the script
+
+# The PATH...
+export PATH="${PATH}:/var/X11R6/bin:/usr/X11R6/bin"
+
+# Last two values for MAC address
+mac=
+
+# memory information. permem is value to calculate needed memory
+mem=
+totalmem=
+permem=66
+
+# virtual fd/cd/dvd and drive devices, floppy b: for configuration
+#floppya is always false, if we have a floppy device or not isn't
+#important.
+floppya="FALSE"
+floppyb="TRUE"
+floppybname="/etc/vmware/loopimg/fd.img"
+cdr_1="FALSE"
+cdr_2="FALSE"
+# ide is expected default, test for the virtual disk image type should
+# be done while creating the runscripts ...
+ide="TRUE"
+scsi="FALSE"
+hddrv="lsilogic"
+
+# Displayresolution needed for vmware.config
+hostres=$(xvidtune -show 2>/dev/null| grep -ve "^$")
+xres=$(echo "${hostres}" | awk '{print $3}')
+yres=$(echo "${hostres}" | awk '{print $7}')
+
+# VMplayer buildversion
+vmbuild=
+
+# VMware start options
+#-X = fullscreen
+vmopt="-X"
+
+# temporary disk space for logs, etc...
+# use /tmp/vmware/${USER} if /tmp sits on NFS import
+export tmpdir=/tmp/${USER}
+
+# configfile
+confile="${tmpdir}/runvmware.conf"
+
+# users vmware config folder
+vmhome="${HOME}/.vmware"
+#vmhome="/tmp/${USER}/.vmware"
+
+
+# unknow variables needed vor vmwplayer configuration
+confver=8
+hver=4
+
+# set hostname: using original hostname and adding string "-vm"
+# variable isn't used anywhere in this script. but still works (however)
+# TODO: Test it commented out
+hostname="VM-${HOST}"
+
+# Folder of VirtualMachine Images
+vmdir="/var/lib/vmware"
+
+# special Variables, persistence vmware?
+#TODO: do we really need it? Should be everywhere nonpersistent
+np="independent-nonpersistent"
+
+########
+## TODO: everything clean till here
+########
+
+# File if its a link. Stupid crap
+#TODO: perhaps we don't need it
+rightsfile=
+#TODO: don't know what it is for. check later
+noimage=0
+# image checking variable
+filecheck=
+
+
+## Image depending variables. This values will be changed by the script
+
+# vmware image file
+#imagename="CHANGEIT"
+imagename="$1"
+diskfile="${vmdir}/${imagename}"
+
+#TODO: check for a faster way, perhaps we should put this into XML
+# oh - yeah!! Why not do it on the SERVER??? It has enough power and has
+# to do it once and not during every start on a client :)
+#grepping every file could take much (network) resources. And if its
+#an IDE Image, but has somewhere the string ddb.adapterType stuff can
+#become screwed
+# NOOOOOOO - We do not check on every start on every client!!!
+# check if IDE or SCSI
+#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
+
+# define name for VMware window
+#displayname="CHANGEIT"
+displayname="$2"
+
+# Definition of the client system
+#vmostype="CHANGEIT"
+vmostype="$3"
+
+# Definition of the client system
+#network="CHANGEIT"
+network="$4"
+
+
+# command line variables
+# start with this this default commmand line options + extra
+# TODO: defaults laut datei --include /var/lib/vmware/tmpl/winconfig
+# --include <includefile> include code right before program start
+
+# Should we debug? Hell yes, we should always debug!
+debug=0
+
+#TODO: Bad done... we should do this another way later
+last_changes=$(head -n 15 $0 | grep "@" | awk -F ", " '{print $2}' \
+ | awk -F "-" '{print $3" "$2" "$1}' | sort -bfnr \
+ | awk '{print $3"-"$2"-"$1}' | grep -m 1 [0-9])
+version=$(head -n 15 $0 | grep "# Version: " | awk '{print $3}')
+
+#############
+## TODO: End of uncleaned area
+#############
+
+
+
+
+
+
+### FUNCTION SECTION ###########################################################
+##
+## In this script used functions
+##
+################################################################################
+
+### write runvmware.conf #######################################################
+#TODO: only not yet checked function
+filecheck ()
+{
+ filecheck=$(LANG=us ls -lh ${diskfile} 2>&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've 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 runvmware.conf #######################################################
+runvmwareconfheader ()
+{
+ echo "
+ ##############################################################################
+ ###### This configuration file was generated by 'runvmware', ######
+ ###### dont use it for your own configurations - it will be overwritten ######
+ ###### ######
+
+ ###### identity ##############################################################
+ displayName = \"${displayname}\"
+ guestOS = \"${vmostype}\"
+ config.version = \"${confver}\"
+ virtualHW.version = \"${hver}\"
+
+ memsize = \"${mem}\"
+ numvcpus = \"1\"
+
+ ###### ide-disks #############################################################
+ ide0:0.mode = \"${np}\"
+ ide0:0.present = \"${ide}\"
+ ide0:0.fileName = \"${diskfile}\"
+
+ 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.virtualDev = \"lsilogic\"
+ scsi0:0.mode = \"${np}\"
+ scsi0:0.present = \"${scsi}\"
+ scsi0:0.fileName = \"${diskfile}\"
+
+ ###### nics ##################################################################
+ ethernet0.present = \"TRUE\"
+ ethernet0.addressType = \"static\"
+ ethernet0.connectionType = \"${network}\"
+ ethernet0.address = \"00:50:56:0D:${mac}\"
+
+ ###### sound #################################################################
+ sound.present = \"TRUE\"
+ sound.virtualDev = \"es1371\"
+
+ ###### usb ###################################################################
+ usb.present = \"TRUE\"
+ usb.generic.autoconnect = \"TRUE\"
+
+ ###### floppies ##############################################################
+ floppy0.present = \"${floppya}\"
+ floppy0.fileName = \"auto detect\"
+
+ # we need floppy b: this for our windows client configuration
+ floppy1.present = \"${floppyb}\"
+ floppy1.fileType = \"file\"
+ floppy1.fileName = \"${floppybname}\"
+ floppy1.startConnected = \"TRUE\"
+
+ ###### ports #################################################################
+ parallel0.present = \"FALSE\"
+
+ serial0.present = \"FALSE\"
+
+ ###### shared folders ########################################################
+ sharedFolder0.present = \"TRUE\"
+ sharedFolder0.enabled = \"TRUE\"
+ sharedFolder0.expiration = \"never\"
+ sharedFolder0.guestName = \"Home\"
+ sharedFolder0.hostPath = \"${HOME}\"
+ sharedFolder0.readAccess = \"TRUE\"
+ sharedFolder0.writeAccess = \"TRUE\"
+ sharedFolder.maxNum = \"1\"
+
+ ###### misc ##################################################################
+ tmpDirectory = \"${tmpdir}\"
+ mainMem.useNamedFile = \"TRUE\"
+ snapshot.disabled = \"TRUE\"
+ tools.syncTime = \"TRUE\"
+ # use redoLogDir = \"/dev/shm\" if sitting on NFS import
+ redoLogDir = \"${tmpdir}\"
+ hints.hideAll = \"TRUE\"
+ logging = \"FALSE\"
+ isolation.tools.hgfs.disable = \"FALSE\"
+ isolation.tools.dnd.disable = \"TRUE\"
+ isolation.tools.copy.enable = \"TRUE\"
+ isolation.tools.paste.enabled = \"TRUE\"
+ gui.restricted = \"TRUE\"
+ pref.hotkey.shift = \"TRUE\"
+ pref.hotkey.control = \"TRUE\"
+ pref.hotkey.alt = \"TRUE\"
+ svga.maxWidth = \"${xres}\"
+ svga.maxHeight = \"${yres}\"
+ " \
+ >${confile}
+
+ # set the appropriate permissions for the vmware config file
+ chmod u+rwx ${confile} >/dev/null 2>&1
+}
+
+
+### creates user configurationfile in ${vmhome} ################################
+preferencesheader ()
+{
+ echo "
+ ##############################################################################
+ ###### This configuration file was generated by 'runvmware', ######
+ ###### dont use it for your own configurations - it will be overwritten ######
+ ###### ######
+ ################################## Wichtig! ##################################
+ ###### *.vmem wird immer angelegt und frisst soviel Speicher, wie fuer ######
+ ###### den Gast vorgesehen. Sollte nicht im tempfs liegen. NFS OK, da ######
+ ###### IO nur einmal beim Start erheblich. Wird gesteuert ueber ######
+ ###### tmpDirectory = /nfs-viel-platz und darin wird dann vmware-\$user ######
+ ###### angelegt. ######
+
+ # DEBUG: some versions accept it only upper or lowercase... which one?
+ # The following 4 could also be uppercase
+ hints.hideAll = \"true\"
+ pref.exchangeSelections = \"true\"
+ pref.hotkey.shift = \"true\"
+ pref.tip.startup = \"false\"
+ pref.vmplayer.exit.vmAction = \"poweroff\"
+ # DEBUG: some versions accept it only upper or lowercase... which one?
+ # The following 2 could also be uppercase
+ pref.vmplayer.fullscreen.autohide = \"true\"
+ pref.vmplayer.webUpdateOnStartup = \"false\"
+ prefvmx.defaultVMPath = \"${vmhome}\"
+ prefvmx.mru.config = \"${confile}:\"
+ tmpDirectory = \"${tmpdir}\"
+ webUpdate.checkPeriod = \"manual\"
+ 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" >>${tmpdir}/runvmware.${USER}.log
+}
+
+
+
+
+
+
+### MAIN SECTION ###############################################################
+##
+## Main part of the script...
+##
+################################################################################
+
+# Delete the LOCK file. its unsecure, but ...
+rm -f ${tmpdir}/*LOCK >/dev/null 2>&1
+
+# create vmware directories
+mkdir -p ${tmpdir} >/dev/null 2>&1
+mkdir -p ${vmhome} >/dev/null 2>&1
+
+# NO X-server, no runvmware ;)
+[ -z "$DISPLAY" ] && echo -e "\n\tStart only within a desktop!\n" && exit 1
+
+# logo for console
+cat <<EOL
+
+ .----.--.--.-----.--.--.--------.--.--.--.---.-.----.-----.
+ | _| | | | | | | | | | _ | _| -__|
+ |__| |_____|__|__|\___/|__|__|__|________|___._|__| |_____|
+ Script for preparing VMware environment...(v${version})
+
+
+EOL
+
+
+### CHECK MACHINE SETUP ########################################################
+
+## log script information
+writelog "##################################################\n"
+writelog "# File created by $0 (v.${version})\n# on $(date)\n"
+writelog "##################################################\n"
+writelog "Starting...$(echo ${np} | sed 's/i.*-//g' \
+ | tr [a-z] [A-Z])-mode\n"
+
+## log disksetup
+writelog "Directories:
+ \tTmpdir:\t\t${tmpdir}\n\tVMhome:\t\t${vmhome}\n\tTmpdir info:\
+ \t$(mount | grep -i "/tmp ")\n"
+
+## 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"
+
+## Get last two MAC values for VMPlayer
+# NF = Number of Fields of found values in awk
+mac=$(/sbin/ifconfig eth0 | grep eth0 | sed -e "s/ //g" \
+ | awk -F ":" '{print $(NF-1)":"$NF}')
+
+
+## check if we have enough free memory
+
+# get memory in MB
+totalmem=$(expr $(grep -i "memtotal" /proc/meminfo | awk '{print $2}') / 1024)
+
+# calculate memory for vmplayer
+# TODO: unhappy how it is calculated
+mem=$(expr ${totalmem} / 100 \* ${permem} / 4 \* 4)
+
+# check memory range
+memtest=${totalmem}-128
+if [ "${mem}" -lt "128" ] || [ "${mem}" -gt "${totalmem}" ]; then
+ writelog "\n\n\tYour memory is out of range: ${mem} MB.
+ \tMin. 128 MB for host and guest!\n\tTry --mem option.\n"
+ exit 1
+fi
+
+
+## look for cdrom, dvd and add them to the vm config file
+if [ -L /dev/cdrom ] ; then
+ cdr_1="TRUE"
+fi
+
+if [ -L /dev/cdrom1 ] ; then
+ cdr_2="TRUE"
+fi
+
+
+## Write all results to logfile
+writelog "finished\nResults:\n\tMAC:\t\t00:50:56:0D:${mac}\n\tMem:\t\t
+ ${mem} MB \tMax. res.:\t${xres}x${yres}\n\t\tCD-ROM_1:\t${cdr_1}\n\t
+ CD-ROM_2:\t${cdr_2}\n"
+writelog "finished\nResults:\n\tDiskfile:\t${diskfile}\n\tDisktype:\t${hddrv}
+ \tVMostype:\t${vmostype}\n\tDisplayname:\t${displayname}\n"
+
+# check if image exists, etc...
+filecheck
+
+# VMPlayer Version.
+# strings is the fastest and most secure way, vmplayer -v takes too much time
+# and resources
+vmbuild=$(strings /usr/lib/vmware/bin/vmplayer \
+ | grep -m 1 "build-"|sed 's/.*build-//')
+if [ ! -n ${vmbuild} ]; then
+ vmbuild=$(vmplayer -v | sed 's/.*build-//')
+fi
+
+### write configuration files ##################################################
+# create preferences
+preferencesheader
+
+# create VMware startup file
+runvmwareconfheader
+
+# poolconfiguration config.xml
+#TODO: change default to global variable ${POOL} in the future
+#comment out cause of scanner... we do it now by hand... just a hack
+#TODO: cleaner source...
+#sed -e "s/HOSTNAME/${hostname}/" \
+# -e "s/USER/${USER}/" /var/lib/vmware/templates/client-config.xml.default \
+# > /etc/vmware/fd-loop/config.xml
+echo "<settings>" > /etc/vmware/fd-loop/config.xml
+echo " <eintrag>" >> /etc/vmware/fd-loop/config.xml
+echo " <computername param=\"${hostname}\">" >> /etc/vmware/fd-loop/config.xml
+echo " </computername>" >> /etc/vmware/fd-loop/config.xml
+echo " <username param=\"${USER}\">" >> /etc/vmware/fd-loop/config.xml
+echo " </username>" >> /etc/vmware/fd-loop/config.xml
+# if we have a scanner, then copy scannerinformation to this xml
+sanelines="$(wc -l /etc/sane.d/net.conf|awk '{ print $1 };')"
+if [ -f /etc/sane.d/net.conf ] && [ "${sanelines}" -eq 1 ]; then
+ echo "<scanner param=\"$(cat /etc/sane.d/net.conf)\">" \
+ >> /etc/vmware/fd-loop/config.xml
+ echo "</scanner>" >> /etc/vmware/fd-loop/config.xml
+fi
+echo " </eintrag>" >> /etc/vmware/fd-loop/config.xml
+echo "</settings>" >> /etc/vmware/fd-loop/config.xml
+
+
+# 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: Take care if plugin-repo changes
+#cp /var/lib/vmware/templates/nvram.5.0 ${tmpdir}/nvram
+cp /opt/openslx/plugin-repo/nvram.5.0 ${tmpdir}/nvram
+
+# adjust volume
+writelog "Unmuting sound...\c"
+amixer -q sset Master 28 unmute
+amixer -q sset PCM 28 unmute
+writelog "finished\n"
+
+### run vmplayer ###############################################################
+# ...with the automatically written config file
+if [ $(which vmplayer 2>/dev/null) ]; then writelog "\nStarting VMplayer..."
+ # run VMplayer
+ writelog "... vmplayer ${vmopt} ${confile}...\n"
+ vmplayer ${vmopt} ${confile} 2>&1 >/dev/null
+else
+ writelog "\nNo VMware/VMPlayer found!\n"
+ exit 1
+fi
+
+writelog "\nBye.\n"
+exit 0