diff options
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 |