summaryrefslogtreecommitdiffstats
path: root/os-plugins
diff options
context:
space:
mode:
authorDirk von Suchodoletz2008-12-22 20:41:06 +0100
committerDirk von Suchodoletz2008-12-22 20:41:06 +0100
commit9e13a8aa47cf7c11020793c312e478424266c56a (patch)
treed863dc5b0c47ad2815e851c1e09b6df7feb30e12 /os-plugins
parentPing to the nfs server added to init: Before the NFS root is mounted an (diff)
downloadcore-9e13a8aa47cf7c11020793c312e478424266c56a.tar.gz
core-9e13a8aa47cf7c11020793c312e478424266c56a.tar.xz
core-9e13a8aa47cf7c11020793c312e478424266c56a.zip
Starting with qemukvm plugin (another virtualisation environment).
See #312 too ... git-svn-id: http://svn.openslx.org/svn/openslx/openslx/trunk@2445 95ad53e4-c205-0410-b2fa-d234c58c8868
Diffstat (limited to 'os-plugins')
-rw-r--r--os-plugins/plugins/qemukvm/OpenSLX/Distro/Base.pm59
-rw-r--r--os-plugins/plugins/qemukvm/OpenSLX/Distro/Debian.pm41
-rw-r--r--os-plugins/plugins/qemukvm/OpenSLX/Distro/Suse.pm43
-rw-r--r--os-plugins/plugins/qemukvm/OpenSLX/Distro/Ubuntu.pm23
-rw-r--r--os-plugins/plugins/qemukvm/OpenSLX/OSPlugin/qemukvm.pm158
-rw-r--r--os-plugins/plugins/qemukvm/XX_qemukvm.sh66
-rw-r--r--os-plugins/plugins/qemukvm/files/run-qemukvm510
7 files changed, 900 insertions, 0 deletions
diff --git a/os-plugins/plugins/qemukvm/OpenSLX/Distro/Base.pm b/os-plugins/plugins/qemukvm/OpenSLX/Distro/Base.pm
new file mode 100644
index 00000000..603942a2
--- /dev/null
+++ b/os-plugins/plugins/qemukvm/OpenSLX/Distro/Base.pm
@@ -0,0 +1,59 @@
+# Copyright (c) 2008 - 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/
+# -----------------------------------------------------------------------------
+# qemukvm/OpenSLX/Distro/Base.pm
+# - provides base implementation of the Distro API for the qemukvm plugin.
+# -----------------------------------------------------------------------------
+package qemukvm::OpenSLX::Distro::Base;
+
+use strict;
+use warnings;
+
+our $VERSION = 1.01; # API-version . implementation-version
+
+use OpenSLX::Basics;
+use OpenSLX::Utils;
+
+################################################################################
+### interface methods
+################################################################################
+sub new
+{
+ my $class = shift;
+ my $self = {};
+ return bless $self, $class;
+
+}
+
+sub initialize
+{
+ my $self = shift;
+ my $engine = shift;
+
+ return 1;
+}
+
+sub fillRunlevelScript
+{
+ my $self = shift;
+ my $location = shift;
+ my $kind = shift;
+
+ my $script = unshiftHereDoc(<<" End-of-Here");
+
+ # cpuvirt=$(grep -e "vmx|svm" /proc/cpuinfo)
+ # modprobe $cpuvirt
+
+ End-of-Here
+
+ return $script;
+}
+
+1;
diff --git a/os-plugins/plugins/qemukvm/OpenSLX/Distro/Debian.pm b/os-plugins/plugins/qemukvm/OpenSLX/Distro/Debian.pm
new file mode 100644
index 00000000..94a06009
--- /dev/null
+++ b/os-plugins/plugins/qemukvm/OpenSLX/Distro/Debian.pm
@@ -0,0 +1,41 @@
+# Copyright (c) 2008 - 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/
+# -----------------------------------------------------------------------------
+# qemukvm/OpenSLX/Distro/debian.pm
+# - provides Debian-specific overrides of the Distro API for the qemukvm
+# plugin.
+# -----------------------------------------------------------------------------
+package qemukvm::OpenSLX::Distro::Debian;
+
+use strict;
+use warnings;
+
+use base qw(qemukvm::OpenSLX::Distro::Base);
+
+use OpenSLX::Basics;
+use OpenSLX::Utils;
+
+################################################################################
+### interface methods
+################################################################################
+
+sub fillRunlevelScript
+{
+ my $self = shift;
+ my $location = shift;
+ my $kind = shift;
+
+ my $script = unshiftHereDoc(<<' End-of-Here');
+
+ End-of-Here
+ return $script;
+}
+
+1;
diff --git a/os-plugins/plugins/qemukvm/OpenSLX/Distro/Suse.pm b/os-plugins/plugins/qemukvm/OpenSLX/Distro/Suse.pm
new file mode 100644
index 00000000..a72f11c7
--- /dev/null
+++ b/os-plugins/plugins/qemukvm/OpenSLX/Distro/Suse.pm
@@ -0,0 +1,43 @@
+# Copyright (c) 2008 - 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/
+# -----------------------------------------------------------------------------
+# qemukvm/OpenSLX/Distro/Suse.pm
+# - provides SUSE specific overrides of the distro API for the qemukvm
+# plugin.
+# -----------------------------------------------------------------------------
+package qemukvm::OpenSLX::Distro::Suse;
+
+use strict;
+use warnings;
+
+use base qw(qemukvm::OpenSLX::Distro::Base);
+
+use OpenSLX::Basics;
+use OpenSLX::Utils;
+
+################################################################################
+### interface methods
+################################################################################
+
+sub fillRunlevelScript
+{
+ my $self = shift;
+ my $location = shift;
+ my $kind = shift;
+
+ my $script = bla;
+
+ # cpuvirt=$(grep -e "vmx|svm" /proc/cpuinfo)
+ # modprobe $cpuvirt
+
+ return $script;
+}
+
+1;
diff --git a/os-plugins/plugins/qemukvm/OpenSLX/Distro/Ubuntu.pm b/os-plugins/plugins/qemukvm/OpenSLX/Distro/Ubuntu.pm
new file mode 100644
index 00000000..9b318a22
--- /dev/null
+++ b/os-plugins/plugins/qemukvm/OpenSLX/Distro/Ubuntu.pm
@@ -0,0 +1,23 @@
+# Copyright (c) 2008 - 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/
+# -----------------------------------------------------------------------------
+# qemukvm/OpenSLX/Distro/Ubuntu.pm
+# - provides Ubuntu-specific overrides of the Distro API for the qemukvm
+# plugin.
+# -----------------------------------------------------------------------------
+package qemukvm::OpenSLX::Distro::Ubuntu;
+
+use strict;
+use warnings;
+
+# inherit everything from Debian (as Ubuntu is based on it anyway)
+use base qw(qemukvm::OpenSLX::Distro::Debian);
+
+1;
diff --git a/os-plugins/plugins/qemukvm/OpenSLX/OSPlugin/qemukvm.pm b/os-plugins/plugins/qemukvm/OpenSLX/OSPlugin/qemukvm.pm
new file mode 100644
index 00000000..2d49ede7
--- /dev/null
+++ b/os-plugins/plugins/qemukvm/OpenSLX/OSPlugin/qemukvm.pm
@@ -0,0 +1,158 @@
+# Copyright (c) 2008 - 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/
+# -----------------------------------------------------------------------------
+# vmware.pm
+# - declares necessary information for the qemukvmplugin
+# -----------------------------------------------------------------------------
+package OpenSLX::OSPlugin::vmware;
+
+use strict;
+use warnings;
+
+use base qw(OpenSLX::OSPlugin::Base);
+
+use File::Basename;
+use File::Path;
+
+use OpenSLX::Basics;
+use OpenSLX::Utils;
+
+sub new
+{
+ my $class = shift;
+
+ my $self = {
+ name => 'qemukvm',
+ };
+
+ return bless $self, $class;
+}
+
+sub getInfo
+{
+ my $self = shift;
+
+ return {
+ description => unshiftHereDoc(<<' End-of-Here'),
+ Module for enabling services for the Linux kvm using qemu for
+ IO on an OpenSLX stateless client.
+ End-of-Here
+ precedence => 70,
+ required => [ qw( desktop ) ],
+ };
+}
+
+sub getAttrInfo
+{
+ # returns a hash-ref with information about all attributes supported
+ # by this specific plugin
+ my $self = shift;
+
+ # This default configuration will be added as attributes to the default
+ # system, such that it can be overruled for any specific system by means
+ # of slxconfig.
+ return {
+ # attribute 'active' is mandatory for all plugins
+ 'qemukvm::active' => {
+ applies_to_systems => 1,
+ applies_to_clients => 0,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ should the 'qemukvm'-plugin be executed during boot?
+ End-of-Here
+ content_regex => qr{^(0|1)$},
+ content_descr => '1 means active - 0 means inactive',
+ default => '1',
+ },
+ # attribute 'imagesrc' defines where we can find qemukvm images
+ 'qemukvm::imagesrc' => {
+ applies_to_systems => 1,
+ applies_to_clients => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ Where do we store our qemukvm images? NFS? Filesystem?
+ End-of-Here
+ #TODO: check if the input is valid
+ #content_regex => qr{^(0|1)$},
+ content_descr => 'Allowed values: local path or URI',
+ default => '',
+ },
+ # attribute 'bridge' defines if bridged network mode should be
+ # switched on
+ 'qemukvm::bridge' => {
+ applies_to_systems => 1,
+ applies_to_clients => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ Should the bridging (direct access of the qemukvm clients
+ to the ethernet the host is connected to) be enabled
+ End-of-Here
+ content_regex => qr{^(0|1)$},
+ content_descr => 'Allowed values: 0 or 1',
+ default => '1',
+ },
+
+ };
+}
+
+sub installationPhase
+{
+ my $self = shift;
+ my $info = shift;
+
+ $self->{pluginRepositoryPath} = $info->{'plugin-repo-path'};
+ $self->{pluginTempPath} = $info->{'plugin-temp-path'};
+ $self->{openslxBasePath} = $info->{'openslx-base-path'};
+ $self->{openslxConfigPath} = $info->{'openslx-config-path'};
+ $self->{attrs} = $info->{'plugin-attrs'};
+
+ my $engine = $self->{'os-plugin-engine'};
+
+ # different names of the tool (should be unified somehow!?)
+ if (!isInPath('qemu-kvm' || !isInPath('kvm')) {
+ $engine->installPackages(
+ $engine->getInstallablePackagesForSelection('qemu-kvm')
+ );
+ }
+ return;
+}
+
+sub removalPhase
+{
+ my $self = shift;
+ my $info = shift;
+
+
+ return;
+}
+
+sub checkStage3AttrValues
+{
+ my $self = shift;
+ my $stage3Attrs = shift;
+ my $vendorOSAttrs = shift;
+ my @problems;
+
+ my $vmimg = $stage3Attrs->{'qemukvm::imagesrc'} || '';
+
+ return;
+}
+
+# write the runlevelscript
+sub _writeRunlevelScript
+{
+ my $self = shift;
+ my $location = shift;
+ my $file = shift;
+ my $kind = shift;
+
+ my $runlevelScript = $self->{distro}->fillRunlevelScript($location, $kind);
+
+ spitFile($file, $runlevelScript);
+}
+
+1;
diff --git a/os-plugins/plugins/qemukvm/XX_qemukvm.sh b/os-plugins/plugins/qemukvm/XX_qemukvm.sh
new file mode 100644
index 00000000..1c0e4b87
--- /dev/null
+++ b/os-plugins/plugins/qemukvm/XX_qemukvm.sh
@@ -0,0 +1,66 @@
+# Copyright (c) 2008 - OpenSLX GmbH
+#
+# This program/file 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 feedback to feedback@openslx.org
+#
+# General information about OpenSLX can be found at http://openslx.org
+#
+# script is included from init via the "." load function - thus it has all
+# variables and functions available
+
+
+# check if the configuration file is available
+if [ -e /initramfs/plugin-conf/qemukvm.conf ]; then
+
+ # load needed variables
+ . /initramfs/plugin-conf/qemukvm.conf
+
+ # Test if this plugin is activated... more or less useless with the
+ # new plugin system
+ if [ $qemukvm_active -ne 0 ]; then
+
+ [ $DEBUGLEVEL -gt 0 ] && echo "executing the 'qemukvm' os-plugin ...";
+ # Load general configuration
+ . /initramfs/machine-setup
+
+ # get source of qemukvm image server (get type, server and path)
+ if strinstr "/" "${qemukvm_imagesrc}" ; then
+ qkimgprot=$(uri_token ${qemukvm_imagesrc} prot)
+ qkimgserv=$(uri_token ${qemukvm_imagesrc} server)
+ qkimgpath="$(uri_token ${qemukvm_imagesrc} path)"
+ fi
+ if [ -n "${qkimgserv}" ] ; then
+ # directory where qemu images are expected in
+ testmkd /mnt/var/lib/qemukvm
+ case "${qkimgprot}" in
+ *nbd)
+ # TODO: to be filled in ...
+ ;;
+ lbdev)
+ # we expect the stuff on toplevel directory, filesystem type should be
+ # autodetected here ... (vmimgserv is blockdev here)
+ qkbdev=/dev/${qkimgserv}
+ waitfor ${qkbdev} 20000
+ echo -e "ext2\nreiserfs\nvfat\nxfs" >/etc/filesystems
+ mount -o ro ${qkbdev} /mnt/var/lib/qemukvm || \
+ 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 ${qkimgserv}:${qkimgpath} \
+ /mnt/var/lib/qemukvm && break
+ done
+ ;;
+ esac
+ fi
+
+ fi
+else
+ [ $DEBUGLEVEL -gt 0 ] && echo " * Configuration of qemukvm plugin failed"
+fi
diff --git a/os-plugins/plugins/qemukvm/files/run-qemukvm b/os-plugins/plugins/qemukvm/files/run-qemukvm
new file mode 100644
index 00000000..0536ee3e
--- /dev/null
+++ b/os-plugins/plugins/qemukvm/files/run-qemukvm
@@ -0,0 +1,510 @@
+#!/bin/bash
+# Copyright (c) 2008 - OpenSLX GmbH
+#
+# This program/file 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 feedback to feedback@openslx.org
+#
+# General information about OpenSLX can be found at http://openslx.org
+#
+# Start script for running the QEMU/Linux KVM virtual machine on an OpenSLX
+# client. The script is copied to /var/X11R6/bin during stage3.
+
+################################################################################
+##
+## Read needed variables from XML file
+##
+################################################################################
+xml=$1
+
+# file name of the image
+imagename=$(grep -i "<image_name param=\"" ${xml} | awk -F "\"" '{ print $2 }')
+
+# define name for VMware window. no utf8, perhaps we don't need it any
+# more. else change the next two lines
+#iconv -c -f utf-8 -t utf-8 < ${xml} > ${xml}.utf
+short_description=$(grep "short_description param=\"" ${xml} | sed -e "s%&.*;%; %g" | awk -F "\"" '{print $2}')
+# if ${short_description} not defined use ${image_name}
+short_description=${short_description:-"${image_name}"}
+displayname=${short_description}
+
+# Definition of the client system
+vmostype=$(grep -i "<os param=\"" ${xml} | awk -F "\"" '{ print $2 }')
+
+# Definition of the client system
+network_kind=$(grep -i "<network param=\"" ${xml} | awk -F "\"" '{ print $2 }')
+
+
+### 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"
+hddrv="ide"
+
+# 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}')
+
+# Folder of VirtualMachine images
+vmdir="/var/lib/qemukvmw"
+
+## Image depending variables. This values will be changed by the script
+
+# vmware image file
+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
+
+
+# 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
+version=$(head -n 20 $0 | grep "# Version: " | awk '{print $3}')
+
+#############
+## TODO: End of uncleaned area
+#############
+
+
+
+
+
+
+### FUNCTION SECTION ###########################################################
+##
+## In this script used functions
+##
+################################################################################
+
+### write run-vmware.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 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 "
+ ##############################################################################
+ ###### This configuration file was generated by run-vmware.sh, ######
+ ###### 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_kind}\"
+ 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 = \"${redodir}\"
+ mainMem.useNamedFile = \"TRUE\"
+ snapshot.disabled = \"TRUE\"
+ tools.syncTime = \"TRUE\"
+ redoLogDir = \"${redodir}\"
+ 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}\"
+ svga.autodetect = \"TRUE\"
+ " \
+ >${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 "
+ ##############################################################################
+ ###### This configuration file was generated by run-vmware.sh, ######
+ ###### 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 ######
+ ###### confdir=/nfs-viel-platz ######
+
+ # 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 = \"${conffile}:\"
+ tmpDirectory = \"${redodir}\"
+ 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" >>${redodir}/run-vmware.${USER}.log
+}
+
+
+
+
+
+
+### MAIN SECTION ###############################################################
+##
+## Main part of the script...
+##
+################################################################################
+
+# 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
+
+# NO X-server, no run-vmware ;)
+[ -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 "# File created by $0 (v.${version})\n# on $(date)\n"
+writelog "Starting with $(echo ${np} | sed 's/i.*-//g')-mode ...\n"
+
+## HW deteщtion start
+writelog "Starting hardware / device detection...\c "
+
+## configuring MAC address: first four bytes are fixed (00:50:56:0D) the
+## last two bytes are taken from the local network adaptor
+## 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)
+
+# TODO: Hack, ig more than 2,5G RAM use 40% of Ram and write vmem into
+# Ram as well (40% vmware | 40% confdir(vmem...) | 20% host
+if [ "${totalmem}" -ge "2500" ]; then
+ permem=40
+ confdir=/dev/shm/vmware/$USER
+ conffile=${confdir}/run-vmware.conf
+ mkdir -p /dev/shm/vmware/$USER
+fi
+
+# 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"
+ writelog "\tYour memory is out of range: ${mem} MB."
+ writelog "\tMin. 128 MB for host and guest!"
+ writelog "tTry --mem option."
+ exit 1
+fi
+
+
+## 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
+
+# poolconfiguration config.xml
+cp ${xml} /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: 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
+
+# adjust volume
+writelog "Unmuting sound...\c "
+amixer -q sset Master 28 unmute 2>/dev/null
+amixer -q sset PCM 28 unmute 2>/dev/null
+amixer -q sset Headphone 28 unmute 2>/dev/null
+amixer -q sset Front 0 mute 2>/dev/null
+writelog "finished\n"
+
+### run vmplayer ###############################################################
+# ...with the automatically written config file
+if [ $(which vmplayer 2>/dev/null) ]; then writelog "Starting ..."
+ # run VMplayer
+ writelog "... vmplayer ${vmopt} ${conffile}\n"
+ vmplayer ${vmopt} ${conffile} >/dev/null 2>&1
+else
+ writelog "No VMware/VMPlayer found!\n"
+ exit 1
+fi
+
+writelog "Bye.\n"
+exit 0