summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Tappe2008-01-13 19:19:14 +0100
committerOliver Tappe2008-01-13 19:19:14 +0100
commitdb3bdeb697a06b35cce61b52d83858757e82b8ec (patch)
tree4edca1f2e15dc4fcb6a7f77e1a65727743fdf320
parent* avoid possible warnings about undefined values in regex-substitution (diff)
downloadcore-db3bdeb697a06b35cce61b52d83858757e82b8ec.tar.gz
core-db3bdeb697a06b35cce61b52d83858757e82b8ec.tar.xz
core-db3bdeb697a06b35cce61b52d83858757e82b8ec.zip
reimplemented splashy stuff via Theme plugin:
* activated invocation of init-hooks * removed explicit splashy calls from init (they are now done in several init-hooks provided by the Theme plugin) * the stage3 plugins are now invoked via '.' instead via a separate shell, such that they can export changed environment variables * changed invocation of initial_boot() - we now pass in the list of initscripts as otherwise I have been unable to let this function access a changed D_INITSCRIPTS variable (it would only see initial content) * moved invocation of initial_boot from servconfig to init (again such that a changed D_INITSCRIPTS will be handled correctly) * config-demuxer now passes the active plugins into mkdxsinitrd * mkdxsinitrd accepts a list of active plugins (-p) and copies the hooks directly into the initialramfs, such that they are available immediately in stage3 The bootsplash stuff (splashy) seems to work properly, but the handling of displaymanager themes is currently broken. I will look into that tomorrow. git-svn-id: http://svn.openslx.org/svn/openslx/trunk@1472 95ad53e4-c205-0410-b2fa-d234c58c8868
-rwxr-xr-xconfig-db/slxconfig-demuxer38
-rw-r--r--initramfs/distro-specs/gentoo/functions-default3
-rwxr-xr-xinitramfs/initrd-stuff/bin/servconfig25
-rw-r--r--initramfs/initrd-stuff/etc/functions12
-rwxr-xr-xinitramfs/initrd-stuff/init38
-rwxr-xr-xinitramfs/mkdxsinitrd12
-rw-r--r--lib/OpenSLX/Utils.pm2
-rw-r--r--os-plugins/plugins/Example/XX_Example.sh23
-rw-r--r--os-plugins/plugins/Theme/OpenSLX/OSPlugin/Theme.pm10
-rw-r--r--os-plugins/plugins/Theme/XX_Theme.sh24
-rw-r--r--os-plugins/plugins/Theme/init-hooks/05-have-kernelvars/Theme.sh4
-rw-r--r--os-plugins/plugins/Theme/init-hooks/15-have-ip-config/Theme.sh2
-rw-r--r--os-plugins/plugins/Theme/init-hooks/25-have-network-root/Theme.sh2
-rw-r--r--os-plugins/plugins/Theme/init-hooks/40-started-hw-config/Theme.sh2
-rw-r--r--os-plugins/plugins/Theme/init-hooks/50-have-layered-fs/Theme.sh2
-rw-r--r--os-plugins/plugins/Theme/init-hooks/60-have-servconfig/Theme.sh2
-rw-r--r--os-plugins/plugins/Theme/init-hooks/70-before-plugins/Theme.sh2
-rw-r--r--os-plugins/plugins/Theme/init-hooks/80-after-plugins/Theme.sh20
-rw-r--r--os-plugins/plugins/Theme/init-hooks/99-handing-over/Theme.sh2
-rw-r--r--os-plugins/plugins/VMware/XX_VMware.sh338
20 files changed, 277 insertions, 286 deletions
diff --git a/config-db/slxconfig-demuxer b/config-db/slxconfig-demuxer
index 2906e8fe..5d089e1d 100755
--- a/config-db/slxconfig-demuxer
+++ b/config-db/slxconfig-demuxer
@@ -33,6 +33,7 @@ use Config::General;
use Fcntl qw(:DEFAULT :flock);
use File::Basename;
use File::Find;
+use File::Path;
use Getopt::Long qw(:config pass_through);
use Pod::Usage;
@@ -130,8 +131,8 @@ END { unlockScript($lockFile) if defined $lockFile; }
my $tempPath = "$openslxConfig{'temp-path'}/slxconfig-demuxer";
if (!$dryRun) {
- slxsystem("rm -rf $tempPath");
- slxsystem("mkdir -p $tempPath");
+ rmtree($tempPath);
+ mkpath($tempPath);
if (!-d $tempPath) {
die _tr("Unable to create or access temp-path '%s'!", $tempPath);
}
@@ -139,7 +140,7 @@ if (!$dryRun) {
my $tftpbootPath = "$openslxConfig{'public-path'}/tftpboot";
if (!$dryRun) {
slxsystem("rm -rf $tftpbootPath/*");
- slxsystem("mkdir -p $tftpbootPath/client-config $tftpbootPath/pxelinux.cfg");
+ mkpath( [ "$tftpbootPath/client-config", "$tftpbootPath/pxelinux.cfg" ] );
if (!-d $tftpbootPath) {
die _tr("Unable to create or access tftpboot-path '%s'!",
$tftpbootPath);
@@ -297,7 +298,7 @@ sub copyExternalSystemConfig
return if $dryRun;
slxsystem("rm -rf $targetPath");
- mkdir $targetPath;
+ mkpath $targetPath;
# first copy default files ...
my $defaultConfigPath = "$clientConfigPath/default";
@@ -333,7 +334,7 @@ sub createTarOfPath
vlog(1, _tr('creating tar %s', $tarFile));
return if $dryRun;
- mkdir $destinationPath;
+ mkpath $destinationPath;
my $tarCmd = "cd $buildPath && tar czf $tarFile *";
if (slxsystem("$tarCmd") != 0) {
die _tr("unable to execute shell-command:\n\t%s \n\t(%s)", $tarCmd, $!);
@@ -491,6 +492,11 @@ sub generateInitalRamFS
# use theme 'openslx':
$cmd .= "-s openslx ";
+
+ my $activePlugins = $info->{'active-plugins'};
+ if ($activePlugins) {
+ $cmd .= '-p ' . join(',', @$activePlugins) . ' ';
+ }
# always use dhclient instead of the busybox-provided dhcp-client
# (since the latter is unable to fetch NIS-stuff):
@@ -536,7 +542,7 @@ sub writeSystemPXEFiles
my $pxePath = "$tftpbootPath";
my $pxeVendorOSPath = "$pxePath/$info->{'vendor-os'}->{name}";
- mkdir $pxeVendorOSPath unless -e $pxeVendorOSPath || $dryRun;
+ mkpath $pxeVendorOSPath unless -e $pxeVendorOSPath || $dryRun;
my $targetKernel = "$pxeVendorOSPath/$kernelName";
if (!-e $targetKernel) {
@@ -637,12 +643,10 @@ sub writePluginConfigurationsForSystem
my $info = shift || confess 'need to pass in info-hash!';
my $buildPath = shift || confess 'need to pass in build-path!';
- my $pluginConfPath = "$buildPath/initramfs/plugin-conf";
- slxsystem("mkdir -p $pluginConfPath") unless -d $pluginConfPath;
-
+ my $pluginConfPath = "$buildPath/initramfs/plugin-conf";
my $pluginInitdPath = "$buildPath/initramfs/plugin-init.d";
- slxsystem("mkdir -p $pluginInitdPath") unless -d $pluginInitdPath;
-
+ my $initHooksPath = "$buildPath/initramfs/init-hooks";
+
my $attrs = $info->{attrs} || {};
my @activePlugins;
@@ -655,6 +659,10 @@ sub writePluginConfigurationsForSystem
push @activePlugins, $pluginName;
+ next if $dryRun;
+
+ mkpath([ $pluginConfPath, $pluginInitdPath, $initHooksPath]);
+
vlog(2, _tr("writing configuration file for plugin '%s'", $pluginName));
# write plugin configuration to a file:
my $content;
@@ -663,8 +671,7 @@ sub writePluginConfigurationsForSystem
my $attrVal = $attrs->{$attr};
next if !defined $attrVal;
my $attrName = substr($attr, index($attr, '::')+2);
- next if $attrName eq 'active' || $attrName eq 'precedence';
- $content .= qq[$attrName="$attrVal"\n];
+ $content .= qq[${pluginName}_$attrName="$attrVal"\n];
}
my $fileName = "$pluginConfPath/${pluginName}.conf";
spitFile($fileName, $content);
@@ -677,9 +684,9 @@ sub writePluginConfigurationsForSystem
# copy runlevel script to be used in stage3:
my $precedence
= sprintf('%02d', $attrs->{"${pluginScope}::precedence"});
- my $scriptFolder
+ my $pluginFolder
= "$openslxConfig{'base-path'}/lib/plugins/$pluginName";
- my $scriptName = "$scriptFolder/XX_${pluginName}.sh";
+ my $scriptName = "$pluginFolder/XX_${pluginName}.sh";
my $targetName = "$pluginInitdPath/${precedence}_${pluginName}.sh";
if (slxsystem("cp $scriptName $targetName && chmod a+x $targetName")) {
die _tr(
@@ -688,6 +695,7 @@ sub writePluginConfigurationsForSystem
);
}
}
+ $info->{'active-plugins'} = \@activePlugins;
my $activePluginStr = @activePlugins ? join ',', @activePlugins : '<none>';
vlog(0, _tr("active plugins: %s", $activePluginStr));
return;
diff --git a/initramfs/distro-specs/gentoo/functions-default b/initramfs/distro-specs/gentoo/functions-default
index 363d35b3..74d0e794 100644
--- a/initramfs/distro-specs/gentoo/functions-default
+++ b/initramfs/distro-specs/gentoo/functions-default
@@ -55,6 +55,7 @@ echo -e "\tafter $1\n}" >> /tmp/sedscript
# setup initial boot scripts (rather strange concept I did not get
# completely)
initial_boot () {
+local scripts=$*
local after=""
local script
d_mkrlscript init boot "Starting Gentoo base initialization"
@@ -120,7 +121,7 @@ cat >>/mnt/etc/${D_INITDIR}/boot <<EOF
eend \${ret} "\${errstr}"
EOF
d_mkrlscript close boot
-for script in boot boot.slx ${D_INITSCRIPTS} ; do
+for script in boot boot.slx $scripts ; do
# to get a certain order of scripts the after token of depends () might be
# used
rllinker "$script" "$after"
diff --git a/initramfs/initrd-stuff/bin/servconfig b/initramfs/initrd-stuff/bin/servconfig
index 2b8ff72c..2b7a4cf2 100755
--- a/initramfs/initrd-stuff/bin/servconfig
+++ b/initramfs/initrd-stuff/bin/servconfig
@@ -187,22 +187,6 @@ test -n "$domain_name_servers" && {
done; }
#############################################################################
-# initial boot scripts
-# delete and create runlevel links for initial booting (SuSE, Debian, Ubuntu,
-# Fedora, ...)
-# splashy stuff
-if [ ${nosplash} = 0 ]; then
- D_INITSCRIPTS="${D_INITSCRIPTS} splashy.stop"
- d_mkrlscript init splashy.stop "Stopping Splashy ..."
- echo -e "\t/var/lib/openslx/bin/splashy_update exit 2>/dev/null
- \tkillall -9 splashy\n\trm -f /var/lib/openslx/bin/splashy_update" \
- >>/mnt/etc/${D_INITDIR}/splashy.stop
- d_mkrlscript close splashy.stop ""
-fi
-
-initial_boot
-
-#############################################################################
# run distro specific configuration function
config_distro
@@ -439,15 +423,6 @@ if [ "x$vmware" != "x" ] && [ "x$vmware" != "xno" ] ; then
fi
#############################################################################
-# theming
-testmkd /mnt/var/lib/openslx/themes/displaymanager
-testmkd /mnt/var/lib/openslx/bin
-[ -d /usr/share/themes/displaymanager ] && \
- cp -a /usr/share/themes/displaymanager /mnt/var/lib/openslx/themes
-[ -d /etc/splashy -a ${nosplash} = 0 ] && (cp -a /bin/splashy_update \
- /mnt/var/lib/openslx/bin)
-
-#############################################################################
# preparation of /tmp directory (partition 44, nfs scratch, ramdisk). there
# might be the chance that we have a disk partition available, so wait for
# completion of detection, setup process
diff --git a/initramfs/initrd-stuff/etc/functions b/initramfs/initrd-stuff/etc/functions
index 830e7008..577bf9b8 100644
--- a/initramfs/initrd-stuff/etc/functions
+++ b/initramfs/initrd-stuff/etc/functions
@@ -556,9 +556,9 @@ fi
# execute all shell scripts in the given init-hook folder
runinithook () {
local hook=$1
-if [ -d /initramfs/init-hooks/$hook ]; then
- for hook_script in /initramfs/init-hooks/$hook/*; do
- . hook_script
+if [ -d /etc/init-hooks/$hook ]; then
+ for hook_script in /etc/init-hooks/$hook/*; do
+ . $hook_script
done
fi
}
@@ -846,15 +846,17 @@ esac
# setup initial boot scripts (for most standard distributions, gentoo is to
# be handled differently)
initial_boot () {
+local scripts=$*
local count=10
# boot.slx is a special runlevel script generated within initialramfs which
# should be executed before the normal runlevel scripts. Proper shutdown is
# not needed!?
-for i in boot.slx ${D_INITSCRIPTS}; do
+for i in boot.slx $scripts; do
count=$(($count + 1))
- revcnt=$((41 - $count))
+ echo "boot-runlevelscript $i"
ln -sf /etc${D_INITDIR}/$i /mnt/etc/${D_INITBOOTD}/S${count}$i
# uncomment if proper shutdown of bootup scripts is required
+ #revcnt=$((41 - $count))
#ln -sf /etc${D_INITDIR}/$i /mnt/etc/${D_INITBOOTD}/K${revcnt}$i
done
}
diff --git a/initramfs/initrd-stuff/init b/initramfs/initrd-stuff/init
index 7cfba25b..28a98459 100755
--- a/initramfs/initrd-stuff/init
+++ b/initramfs/initrd-stuff/init
@@ -113,15 +113,6 @@ echo "noldap" > /tmp/ldap-done
# standard path (.../tftpboot/client-config/ ...)
file="yes"
-# splashy stuff seems to depend on /proc/fb with VESA!?
-# only activate with kernel option quiet
-if grep -E "(VESA|VGA)" /proc/fb > /dev/null 2>&1 \
- && grep -qi " quiet " /proc/cmdline > /dev/null 2>&1; then
- export nosplash=0
-else
- export nosplash=1
-fi
-
# read kernel commandline
read KCMDLINE < /proc/cmdline
export KCMDLINE
@@ -137,14 +128,12 @@ in $0\ncountry=\"${COUNTRY}\"" >> /etc/machine-setup
# single token for debugging ...
debug)
DEBUGLEVEL=1
- nosplash=1
;;
# ... or a specified debug level
debug=*)
DEBUGLEVEL=${opts#debug=}
[ $DEBUGLEVEL -eq 8 -o $DEBUGLEVEL -eq 20 ] && \
echo "** SLX init started near $(sysup)"
- [ ${DEBUGLEVEL} != 0 ] && nosplash=1
;;
# essid for WLAN boot (experimental, might be moved to a module component
# in later versions
@@ -281,9 +270,6 @@ done
runinithook '05-have-kernelvars'
-# splashy stuff
-[ ${nosplash} = 0 ] && /bin/splashy boot 2>/dev/null
-
# at this point a timer should be started to ensure an automated reboot
# or halt of the machine if SLX init does not succeed (e.g. missing kernel
# module for the network adaptor)
@@ -566,9 +552,6 @@ $(sysup)"
# and should be generalized for nbd, dnbd, iscsi
fi
-# splashy stuff
-[ ${nosplash} = 0 ] && /bin/splashy_update "progress 10" 2>/dev/null
-
# if no type of root filesystem is passed via kernel command line try
# information gathered from dhcp process (only valid for nfs)
if [ -z "${bldmod}" -a -z "${bldhost}" -a -z "${nfsroot}" ] ; then
@@ -637,9 +620,6 @@ if [ -n "${aufs}" ]; then
fi
fi
-# splashy stuff
-[ ${nosplash} = 0 ] && /bin/splashy_update "progress 30" 2>/dev/null
-
# setup of client root filesystem dependent on the availability of UnionFS
if [ -n "${unionfs}" -o -n "${aufs}" ] ; then
echo "Using ${union_type} for rw access"
@@ -714,9 +694,6 @@ fi
runinithook '50-have-layered-fs'
-# splashy stuff
-[ ${nosplash} = 0 ] && /bin/splashy_update "progress 50" 2>/dev/null
-
# script for stuff to execute during early bootup
d_mkrlscript init boot.slx "Running configuration postponed from InitRamFS"
echo "fs complete at $(sysup)" >/tmp/fscmpl
@@ -772,9 +749,6 @@ fi
runinithook '60-have-servconfig'
-# splashy stuff
-[ ${nosplash} = 0 ] && /bin/splashy_update "progress 80" 2>/dev/null
-
# wait a while for hardware setup to complete and copy stuff to stage4
waitfor /tmp/hwcfg 20000 || error "$init_errhw"
[ -f /tmp/scanner-udev ] && cat /tmp/scanner-udev \
@@ -817,14 +791,17 @@ runinithook '70-before-plugins'
# check for any plugin-specific runlevel scripts and run them, if found:
if [ -d /initramfs/plugin-init.d ]; then
for plugin_starter in /initramfs/plugin-init.d/*; do
- [ $DEBUGLEVEL -gt 0 ] && \
- echo "Running plugin starter $plugin_starter ..."
- /bin/sh $plugin_starter
+ [ $DEBUGLEVEL -gt 0 ] \
+ && echo "Running plugin starter $plugin_starter ..."
+ . $plugin_starter
done
fi
runinithook '80-after-plugins'
+# create links for initial stage4 boot scripts
+initial_boot $D_INITSCRIPTS
+
# post init for some distro specific
postinit
[ -s /initramfs/postinit.local ] && {
@@ -875,8 +852,5 @@ unset BOOT_IMAGE KCMDLINE KERNEL MODPRV NWMODULES OLDPWD UDEVD_EVENT_TIMEOUT \
runinithook '99-handing-over'
-# splashy stuff
-[ ${nosplash} = 0 ] && /bin/splashy_update "progress 100" 2>/dev/null
-
# new style of pivoting (switch_root or run-init)
exec /bin/switch_root -c dev/console /mnt /sbin/init || error "$init_runinit"
diff --git a/initramfs/mkdxsinitrd b/initramfs/mkdxsinitrd
index 46225024..b822ee9e 100755
--- a/initramfs/mkdxsinitrd
+++ b/initramfs/mkdxsinitrd
@@ -82,6 +82,7 @@ usage()
echo " -f list of blockdev/filesystem modules"
echo " -n list of network adaptor modules"
echo " -m list of misc modules not covered by -f or -n"
+ echo " -p list of active plugins"
echo " -r path to stage1 root (vendor OS, e.g. /var/opt/openslx/stage1/suse-..."
echo " -S name of the system for which the initramfs is built"
echo " -s theme (for splash)"
@@ -298,7 +299,7 @@ echo
#########################################################################
# End of function declaration
-while getopts :Cdhk:c:i:r:o:s:f:n:m:S:tu:wI:a: a ; do
+while getopts :Cdhk:c:i:r:o:s:f:n:m:p:S:tu:wI:a: a ; do
case $a in
\:|\?)
case $OPTARG in
@@ -308,6 +309,7 @@ while getopts :Cdhk:c:i:r:o:s:f:n:m:S:tu:wI:a: a ; do
f) echo "-f requires file system module (list) parameter";;
n) echo "-n requires network module (list) parameter";;
m) echo "-m requires misc module (list) parameter";;
+ p) echo "-p requires plugins (list) parameter";;
r) echo "-r requires root dir parameter";;
s) echo "-s may require theme name";;
I) echo "-I requires network interface parameter";;
@@ -326,6 +328,7 @@ while getopts :Cdhk:c:i:r:o:s:f:n:m:S:tu:wI:a: a ; do
f) FSMODULES=$OPTARG;;
n) NWMODULES=$OPTARG;;
m) MISCMODULES=$OPTARG;;
+ p) PLUGINS=$OPTARG;;
r) ROOTDIR=$OPTARG;;
s) theme=$OPTARG;;
S) SYSTEM_NAME=$OPTARG;;
@@ -730,6 +733,13 @@ if [ -z "$cdboot" ] ; then
test -f ${SLX_PRIVATE_PATH}/config/$cfg && \
cp ${SLX_PRIVATE_PATH}/config/$cfg ${INSTDIR}/bin
done
+ # copy init-hooks from all plugins which are going to be executed in stage3
+ mkdir -p ${INSTDIR}/etc/init-hooks
+ for plugin in $PLUGINS ; do
+ test -d ${SLX_BASE_PATH}/lib/plugins/$plugin/init-hooks && \
+ cp -r ${SLX_BASE_PATH}/lib/plugins/$plugin/init-hooks/* \
+ ${INSTDIR}/etc/init-hooks/
+ done
# custom hardware configuration files pcitable.local and Cards.local
# fixme!! New source for these files (instead of templates)!
if [ -f ${SLX_SHARE_PATH}/templates/pcitable.local ] ; then
diff --git a/lib/OpenSLX/Utils.pm b/lib/OpenSLX/Utils.pm
index f3a13e48..7668cba0 100644
--- a/lib/OpenSLX/Utils.pm
+++ b/lib/OpenSLX/Utils.pm
@@ -123,7 +123,7 @@ sub slurpFile
sub spitFile
{
my $fileName = shift || croak 'need to pass in a fileName!';
- my $content = shift;
+ my $content = shift || '';
my $flags = shift || {};
checkParams($flags, {
diff --git a/os-plugins/plugins/Example/XX_Example.sh b/os-plugins/plugins/Example/XX_Example.sh
index 3f58d483..cee76daf 100644
--- a/os-plugins/plugins/Example/XX_Example.sh
+++ b/os-plugins/plugins/Example/XX_Example.sh
@@ -24,20 +24,15 @@
# if you have any questions regarding the use of this file, please drop a mail
# to: ot@openslx.com, or join the IRC-channel '#openslx' (on freenode).
-if ! [ -e /initramfs/plugin-conf/Example.conf ]; then
- exit 1
-fi
+if [ -e /initramfs/plugin-conf/Example.conf ]; then
+ . /initramfs/plugin-conf/Example.conf
+ if [ $Example_active -ne 0 ]; then
+ [ $DEBUGLEVEL -gt 0 ] && echo "executing the 'Example' os-plugin ...";
-# for this example plugin, we simply take a filename from the configuration ...
-. /initramfs/plugin-conf/Example.conf
+ # for this example plugin, we simply take a filename from the
+ # configuration and cat that file (output the smiley):
+ cat /mnt/opt/openslx/plugin-repo/Example/$preferred_side
-if ! [ -n $active ]; then
- exit 0
+ [ $DEBUGLEVEL -gt 0 ] && echo "done with 'Example' os-plugin ...";
+ fi
fi
-
-echo "executing the 'Example' os-plugin ...";
-
-# ... and cat that file (output the smiley):
-cat /mnt/opt/openslx/plugin-repo/Example/$preferred_side
-
-echo "done with 'Example' os-plugin ...";
diff --git a/os-plugins/plugins/Theme/OpenSLX/OSPlugin/Theme.pm b/os-plugins/plugins/Theme/OpenSLX/OSPlugin/Theme.pm
index 5975fa3f..b029919e 100644
--- a/os-plugins/plugins/Theme/OpenSLX/OSPlugin/Theme.pm
+++ b/os-plugins/plugins/Theme/OpenSLX/OSPlugin/Theme.pm
@@ -78,6 +78,16 @@ sub getAttrInfo
default => 30,
},
+ 'theme::name' => {
+ applies_to_systems => 1,
+ applies_to_clients => 0,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ the name of the theme to apply (or unset for no theme)
+ End-of-Here
+ content_regex => undef,
+ content_descr => undef,
+ default => undef,
+ },
};
}
diff --git a/os-plugins/plugins/Theme/XX_Theme.sh b/os-plugins/plugins/Theme/XX_Theme.sh
index 81d2a729..c1814d6f 100644
--- a/os-plugins/plugins/Theme/XX_Theme.sh
+++ b/os-plugins/plugins/Theme/XX_Theme.sh
@@ -2,17 +2,17 @@
#
# stage3 part of 'Theme' plugin - the runlevel script
#
-if ! [ -e /initramfs/plugin-conf/Theme.conf ]; then
- exit 1
-fi
-. /initramfs/plugin-conf/Theme.conf
+if [ -e /initramfs/plugin-conf/Theme.conf ]; then
+ . /initramfs/plugin-conf/Theme.conf
+ if [ $Theme_active -ne 0 ]; then
+ [ $DEBUGLEVEL -gt 0 ] && echo "executing the 'Theme' os-plugin ...";
+
+# testmkd /mnt/var/lib/openslx/themes/displaymanager
+# testmkd /mnt/var/lib/openslx/bin
+# [ -d /usr/share/themes/displaymanager ] \
+# && cp -a /usr/share/themes/displaymanager \
+# /mnt/var/lib/openslx/themes
-if ! [ -n $active ]; then
- exit 0
+ [ $DEBUGLEVEL -gt 0 ] && echo "done with 'Theme' os-plugin ...";
+ fi
fi
-
-echo "executing the 'Theme' os-plugin ...";
-
-# nothing to do here, really
-
-echo "done with 'Theme' os-plugin ...";
diff --git a/os-plugins/plugins/Theme/init-hooks/05-have-kernelvars/Theme.sh b/os-plugins/plugins/Theme/init-hooks/05-have-kernelvars/Theme.sh
index c2d4551a..48c08581 100644
--- a/os-plugins/plugins/Theme/init-hooks/05-have-kernelvars/Theme.sh
+++ b/os-plugins/plugins/Theme/init-hooks/05-have-kernelvars/Theme.sh
@@ -1,10 +1,10 @@
# splashy stuff seems to depend on /proc/fb with VESA!?
# only activate with kernel option quiet
if grep -E "(VESA|VGA)" /proc/fb > /dev/null 2>&1 \
- && grep -qi " quiet " /proc/cmdline > /dev/null 2>&1; then
+ && grep -qi " quiet " /proc/cmdline > /dev/null 2>&1 ; then
export Theme_nosplash=0
else
export Theme_nosplash=1
fi
-[ ${Theme_nosplash} = 0 ] && /bin/splashy boot 2>/dev/null
+[ ${Theme_nosplash} -eq 0 ] && /bin/splashy boot 2>/dev/null
diff --git a/os-plugins/plugins/Theme/init-hooks/15-have-ip-config/Theme.sh b/os-plugins/plugins/Theme/init-hooks/15-have-ip-config/Theme.sh
index 6a3b0737..357db1fc 100644
--- a/os-plugins/plugins/Theme/init-hooks/15-have-ip-config/Theme.sh
+++ b/os-plugins/plugins/Theme/init-hooks/15-have-ip-config/Theme.sh
@@ -1 +1 @@
-[ ${Theme_nosplash} = 0 ] && /bin/splashy_update "progress 15" 2>/dev/null
+[ ${Theme_nosplash} = 0 ] && /bin/splashy_update "progress 15" >/dev/null 2>&1
diff --git a/os-plugins/plugins/Theme/init-hooks/25-have-network-root/Theme.sh b/os-plugins/plugins/Theme/init-hooks/25-have-network-root/Theme.sh
index 043d58d0..a0e4c7a9 100644
--- a/os-plugins/plugins/Theme/init-hooks/25-have-network-root/Theme.sh
+++ b/os-plugins/plugins/Theme/init-hooks/25-have-network-root/Theme.sh
@@ -1 +1 @@
-[ ${Theme_nosplash} = 0 ] && /bin/splashy_update "progress 25" 2>/dev/null
+[ ${Theme_nosplash} = 0 ] && /bin/splashy_update "progress 25" >/dev/null 2>&1
diff --git a/os-plugins/plugins/Theme/init-hooks/40-started-hw-config/Theme.sh b/os-plugins/plugins/Theme/init-hooks/40-started-hw-config/Theme.sh
index 7b56298b..934162c5 100644
--- a/os-plugins/plugins/Theme/init-hooks/40-started-hw-config/Theme.sh
+++ b/os-plugins/plugins/Theme/init-hooks/40-started-hw-config/Theme.sh
@@ -1 +1 @@
-[ ${Theme_nosplash} = 0 ] && /bin/splashy_update "progress 40" 2>/dev/null
+[ ${Theme_nosplash} = 0 ] && /bin/splashy_update "progress 40" >/dev/null 2>&1
diff --git a/os-plugins/plugins/Theme/init-hooks/50-have-layered-fs/Theme.sh b/os-plugins/plugins/Theme/init-hooks/50-have-layered-fs/Theme.sh
index 77505155..6801826d 100644
--- a/os-plugins/plugins/Theme/init-hooks/50-have-layered-fs/Theme.sh
+++ b/os-plugins/plugins/Theme/init-hooks/50-have-layered-fs/Theme.sh
@@ -1 +1 @@
-[ ${Theme_nosplash} = 0 ] && /bin/splashy_update "progress 50" 2>/dev/null
+[ ${Theme_nosplash} -eq 0 ] && /bin/splashy_update "progress 50" >/dev/null 2>&1
diff --git a/os-plugins/plugins/Theme/init-hooks/60-have-servconfig/Theme.sh b/os-plugins/plugins/Theme/init-hooks/60-have-servconfig/Theme.sh
index a305e1b9..9a21f208 100644
--- a/os-plugins/plugins/Theme/init-hooks/60-have-servconfig/Theme.sh
+++ b/os-plugins/plugins/Theme/init-hooks/60-have-servconfig/Theme.sh
@@ -1 +1 @@
-[ ${Theme_nosplash} = 0 ] && /bin/splashy_update "progress 60" 2>/dev/null
+[ ${Theme_nosplash} = 0 ] && /bin/splashy_update "progress 60" >/dev/null 2>&1
diff --git a/os-plugins/plugins/Theme/init-hooks/70-before-plugins/Theme.sh b/os-plugins/plugins/Theme/init-hooks/70-before-plugins/Theme.sh
index f96bf7da..96603a5a 100644
--- a/os-plugins/plugins/Theme/init-hooks/70-before-plugins/Theme.sh
+++ b/os-plugins/plugins/Theme/init-hooks/70-before-plugins/Theme.sh
@@ -1 +1 @@
-[ ${Theme_nosplash} = 0 ] && /bin/splashy_update "progress 70" 2>/dev/null
+[ ${Theme_nosplash} = 0 ] && /bin/splashy_update "progress 70" >/dev/null 2>&1
diff --git a/os-plugins/plugins/Theme/init-hooks/80-after-plugins/Theme.sh b/os-plugins/plugins/Theme/init-hooks/80-after-plugins/Theme.sh
index 4a749752..2e976ac5 100644
--- a/os-plugins/plugins/Theme/init-hooks/80-after-plugins/Theme.sh
+++ b/os-plugins/plugins/Theme/init-hooks/80-after-plugins/Theme.sh
@@ -1 +1,19 @@
-[ ${Theme_nosplash} = 0 ] && /bin/splashy_update "progress 80" 2>/dev/null
+if [ ${Theme_nosplash} -eq 0 ]; then
+
+ /bin/splashy_update "progress 80" >/dev/null 2>&1
+
+ # make the splashy_update binary available in stage4 ...
+ mkdir -p /mnt/var/lib/openslx/bin
+ cp -a /bin/splashy_update /mnt/var/lib/openslx/bin
+
+ # ... and create a runlevelscript that will stop splashy somewhere near
+ # the end of stage4
+ d_mkrlscript init splashy.stop "Stopping Splashy ..."
+ echo -e "\t/var/lib/openslx/bin/splashy_update exit 2>/dev/null \
+ \n\ttype killall >/dev/null 2>&1 && killall -9 splashy \
+ \n\trm -f /var/lib/openslx/bin/splashy_update 2>/dev/null" \
+ >>/mnt/etc/${D_INITDIR}/splashy.stop
+ d_mkrlscript close splashy.stop ""
+ D_INITSCRIPTS="${D_INITSCRIPTS} splashy.stop"
+
+fi \ No newline at end of file
diff --git a/os-plugins/plugins/Theme/init-hooks/99-handing-over/Theme.sh b/os-plugins/plugins/Theme/init-hooks/99-handing-over/Theme.sh
index 92bd6572..7a2c5856 100644
--- a/os-plugins/plugins/Theme/init-hooks/99-handing-over/Theme.sh
+++ b/os-plugins/plugins/Theme/init-hooks/99-handing-over/Theme.sh
@@ -1 +1 @@
-[ ${Theme_nosplash} = 0 ] && /bin/splashy_update "progress 100" 2>/dev/null
+[ ${Theme_nosplash} -eq 0 ] && /bin/splashy_update "progress 100" >/dev/null 2>&1
diff --git a/os-plugins/plugins/VMware/XX_VMware.sh b/os-plugins/plugins/VMware/XX_VMware.sh
index b73c56bb..4dd7a8d2 100644
--- a/os-plugins/plugins/VMware/XX_VMware.sh
+++ b/os-plugins/plugins/VMware/XX_VMware.sh
@@ -1,173 +1,171 @@
#! /bin/sh
# check if the configuration file is available
-if ! [ -e /initramfs/plugin-conf/VMware.conf ]; then
- exit 1
-fi
-
-# load needed variables
-. /initramfs/plugin-conf/VMware.conf
-
-# Test if this plugin is activated
-if ! [ -n $active ]; then
- exit 0
-fi
-
-
-echo "executing the 'VMware' os-plugin ...";
-
-# Load general configuration
-. /initramfs/machine-setup
-# we need to load the function file for:
-# uri_token, testmkd
-. /etc/functions
-# D_INITDIR is defined in the following file:
-. /etc/sysconfig/config
-
-echo " * VMware part 1"
-#############################################################################
-# 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
-fi
-
-echo " * VMware part 2"
-
-#############################################################################
-# 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
-
- 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? # export vmsessions=/var/lib/vmware/vmsessions
-
- # directory of templates and xdialog files
- vmdir=/mnt/var/lib/vmware
-
- if cp ${vmdir}/templates/xdialog.sh /mnt/var/X11R6/bin/ 2>/dev/null; then
- # create default.desktop for kdm
- echo -e "[Desktop Entry]\nEncoding=UTF8\nName=Default\nName[de]=Standard"\
- >/mnt/etc/X11/sessions/default.desktop
-
- #I dont like this part, but there is no simple workaround. We need to
- #create xdialog.sh on every box :(
- echo "Exec=/var/X11R6/bin/xdialog.sh" \
- >>/mnt/etc/X11/sessions/default.desktop
- echo "Type=Application" >>/mnt/etc/X11/sessions/default.desktop
-
- # /usr/share/xsessions/* files for the menu
- for i in /mnt/usr/share/xsessions/*.desktop; do
- # execute
- echo "\"$(grep '^Exec=' ${i}|sed 's/^Exec=//')\" \\" \
- >>/mnt/var/X11R6/bin/xdialog.sh
- # short description
- echo "\"$(grep '^Name=' ${i}|sed 's/^Name=//')\" \\" \
- >>/mnt/var/X11R6/bin/xdialog.sh
- # long description
- echo "\"$(grep '^Comment=' ${i}|sed 's/^Comment=//')\" \\" \
- >>/mnt/var/X11R6/bin/xdialog.sh
- done
- # all virtual machine clients
- cat ${vmdir}/xdialog-files/${pool}/*.xdialog \
- >>/mnt/var/X11R6/bin/xdialog.sh
- # closing bracket as last line ends with '\'
- echo ")" >>/mnt/var/X11R6/bin/xdialog.sh
- chmod 755 /mnt/var/X11R6/bin/xdialog.sh
-
- # copy xdm files, so we could choose them before we log in
- for i in ${vmdir}/xdmsessions/${pool}/*.desktop;do
- cp ${i} /mnt/etc/X11/sessions/
- done
- else
- error "$scfg_vmchs" nonfatal
- fi
- # 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 ...
- 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
-
-echo "done with 'VMware' os-plugin ...";
+if [ -e /initramfs/plugin-conf/VMware.conf ]; then
+
+ # load needed variables
+ . /initramfs/plugin-conf/VMware.conf
+
+ # Test if this plugin is activated
+ if [ $VMware_active -ne 0 ]; then
+
+ [ $DEBUGLEVEL -gt 0 ] && echo "executing the 'VMware' os-plugin ...";
+
+ # Load general configuration
+ . /initramfs/machine-setup
+ # we need to load the function file for:
+ # uri_token, testmkd
+ . /etc/functions
+ # D_INITDIR is defined in the following file:
+ . /etc/sysconfig/config
+
+ echo " * VMware part 1"
+ #############################################################################
+ # 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
+ fi
+
+ echo " * VMware part 2"
+
+ #############################################################################
+ # 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
+
+ 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? # export vmsessions=/var/lib/vmware/vmsessions
+
+ # directory of templates and xdialog files
+ vmdir=/mnt/var/lib/vmware
+
+ if cp ${vmdir}/templates/xdialog.sh /mnt/var/X11R6/bin/ 2>/dev/null; then
+ # create default.desktop for kdm
+ echo -e "[Desktop Entry]\nEncoding=UTF8\nName=Default\nName[de]=Standard"\
+ >/mnt/etc/X11/sessions/default.desktop
+
+ #I dont like this part, but there is no simple workaround. We need to
+ #create xdialog.sh on every box :(
+ echo "Exec=/var/X11R6/bin/xdialog.sh" \
+ >>/mnt/etc/X11/sessions/default.desktop
+ echo "Type=Application" >>/mnt/etc/X11/sessions/default.desktop
+
+ # /usr/share/xsessions/* files for the menu
+ for i in /mnt/usr/share/xsessions/*.desktop; do
+ # execute
+ echo "\"$(grep '^Exec=' ${i}|sed 's/^Exec=//')\" \\" \
+ >>/mnt/var/X11R6/bin/xdialog.sh
+ # short description
+ echo "\"$(grep '^Name=' ${i}|sed 's/^Name=//')\" \\" \
+ >>/mnt/var/X11R6/bin/xdialog.sh
+ # long description
+ echo "\"$(grep '^Comment=' ${i}|sed 's/^Comment=//')\" \\" \
+ >>/mnt/var/X11R6/bin/xdialog.sh
+ done
+ # all virtual machine clients
+ cat ${vmdir}/xdialog-files/${pool}/*.xdialog \
+ >>/mnt/var/X11R6/bin/xdialog.sh
+ # closing bracket as last line ends with '\'
+ echo ")" >>/mnt/var/X11R6/bin/xdialog.sh
+ chmod 755 /mnt/var/X11R6/bin/xdialog.sh
+
+ # copy xdm files, so we could choose them before we log in
+ for i in ${vmdir}/xdmsessions/${pool}/*.desktop;do
+ cp ${i} /mnt/etc/X11/sessions/
+ done
+ else
+ error "$scfg_vmchs" nonfatal
+ fi
+ # 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 ...
+ 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
+
+ [ $DEBUGLEVEL -gt 0 ] && echo "done with 'VMware' os-plugin ...";
+
+ fi
+fi \ No newline at end of file