From 5a884d7cf51c20d79f9be88b93519e65b21cd41b Mon Sep 17 00:00:00 2001 From: Oliver Tappe Date: Fri, 11 Jan 2008 16:03:15 +0000 Subject: * added hook mechanism to initramfs-init which can be used by plugins to trigger execution of their own script at a certain point in the initramfs-init execution path. This is not active yet * added basic implementation outline for Theme (a.k.a splash) plugin - unable to test anything, though, as VMware does not seem to provide a VESA framebuffer, so splashy won't run git-svn-id: http://svn.openslx.org/svn/openslx/trunk@1466 95ad53e4-c205-0410-b2fa-d234c58c8868 --- config-db/slxconfig-demuxer | 2 - initramfs/initrd-stuff/etc/functions | 11 +++ initramfs/initrd-stuff/init | 22 +++++- os-plugins/plugins/Theme/OpenSLX/OSPlugin/Theme.pm | 84 ++++++++++++++++++++++ os-plugins/plugins/Theme/XX_Theme.sh | 18 +++++ .../Theme/init-hooks/05-have-kernelvars/Theme.sh | 10 +++ .../Theme/init-hooks/15-have-ip-config/Theme.sh | 1 + .../Theme/init-hooks/25-have-network-root/Theme.sh | 1 + .../Theme/init-hooks/40-started-hw-config/Theme.sh | 1 + .../Theme/init-hooks/50-have-layered-fs/Theme.sh | 1 + .../Theme/init-hooks/60-have-servconfig/Theme.sh | 1 + .../Theme/init-hooks/70-before-plugins/Theme.sh | 1 + .../Theme/init-hooks/80-after-plugins/Theme.sh | 1 + .../Theme/init-hooks/99-handing-over/Theme.sh | 1 + .../plugins/VMware/OpenSLX/OSPlugin/VMware.pm | 2 +- 15 files changed, 153 insertions(+), 4 deletions(-) create mode 100644 os-plugins/plugins/Theme/OpenSLX/OSPlugin/Theme.pm create mode 100644 os-plugins/plugins/Theme/XX_Theme.sh create mode 100644 os-plugins/plugins/Theme/init-hooks/05-have-kernelvars/Theme.sh create mode 100644 os-plugins/plugins/Theme/init-hooks/15-have-ip-config/Theme.sh create mode 100644 os-plugins/plugins/Theme/init-hooks/25-have-network-root/Theme.sh create mode 100644 os-plugins/plugins/Theme/init-hooks/40-started-hw-config/Theme.sh create mode 100644 os-plugins/plugins/Theme/init-hooks/50-have-layered-fs/Theme.sh create mode 100644 os-plugins/plugins/Theme/init-hooks/60-have-servconfig/Theme.sh create mode 100644 os-plugins/plugins/Theme/init-hooks/70-before-plugins/Theme.sh create mode 100644 os-plugins/plugins/Theme/init-hooks/80-after-plugins/Theme.sh create mode 100644 os-plugins/plugins/Theme/init-hooks/99-handing-over/Theme.sh diff --git a/config-db/slxconfig-demuxer b/config-db/slxconfig-demuxer index f1cfd41e..3edbecf7 100755 --- a/config-db/slxconfig-demuxer +++ b/config-db/slxconfig-demuxer @@ -382,8 +382,6 @@ sub writePXEMenus $pxeTemplate .= slurpFile($pxeThemeConfig); } -print "$pxeTemplate\n"; - # fetch info about margin and replace the corresponding placeholders my $margin = $openslxConfig{'pxe-theme-menu-margin'} || 0; my $marginAsText = ' ' x $margin; diff --git a/initramfs/initrd-stuff/etc/functions b/initramfs/initrd-stuff/etc/functions index e6c57d82..830e7008 100644 --- a/initramfs/initrd-stuff/etc/functions +++ b/initramfs/initrd-stuff/etc/functions @@ -552,6 +552,17 @@ echo "config completed" > /tmp/cfgcomplete 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 + done +fi +} + ############################################################################# # localization simply derived from $language variable set in machine-setup or # other sources - mostly taken from knoppix diff --git a/initramfs/initrd-stuff/init b/initramfs/initrd-stuff/init index f3d4ae7a..7cfba25b 100755 --- a/initramfs/initrd-stuff/init +++ b/initramfs/initrd-stuff/init @@ -12,8 +12,8 @@ # # Main script for new type of initial ramdisk for OpenSLX linux stateless # clients version 4 - ############################################################################# + # device files get their own filesystem (to be move mounted later) devdir="/dev" mount -n -t tmpfs -o 'size=25%,mode=0755' initramfsdevs ${devdir} @@ -94,6 +94,8 @@ nfsro="nfs" # admin has to wait until second run of hwsetup late in stage3) hwautocfg pre +runinithook '00-started' + # run pre init script and user defined preinit.local, copied by mkdxsinitrd # from /var/lib/openslx/config/... in stage2 preinit @@ -277,6 +279,8 @@ $0\n# deprecated: please use rootfs=nfs://...\nnfsroot=\"${nfsroot}\"\n" \ esac done +runinithook '05-have-kernelvars' + # splashy stuff [ ${nosplash} = 0 ] && /bin/splashy boot 2>/dev/null @@ -417,6 +421,8 @@ sed "s,@@@serverip@@@,$serverip," -i /etc/machine-setup # ... or via tftp file get (in background) [ -n "$file" ] && fileget & +runinithook '15-have-ip-config' + # if root filesystem should be imported via local or a network block device if [ -n "${bldmod}" ] ; then # load block device driver(s) if needed @@ -591,6 +597,8 @@ if [ -z "${bldmod}" -a -z "${bldserver}" ] ; then [ $DEBUGLEVEL -eq 20 ] && echo "** finished nfs mount at $(sysup)" fi +runinithook '20-have-network-root' + # get the complete collection of kernel modules available mount -n --bind /mnt/lib/modules/${KERNEL} /lib/modules/${KERNEL} || \ error "$init_moddir" @@ -605,6 +613,8 @@ $(sysup)" hwautocfg main & fi +runinithook '25-started-hw-config' + union_type="" # try to use unionfs for rw access if available if [ -n "${unionfs}" ]; then @@ -702,6 +712,8 @@ elif [ -z "${cowloop}" ] ; then # run some specific stuff !? fi +runinithook '50-have-layered-fs' + # splashy stuff [ ${nosplash} = 0 ] && /bin/splashy_update "progress 50" 2>/dev/null @@ -758,6 +770,8 @@ else error "$init_infldcfg" nonfatal fi +runinithook '60-have-servconfig' + # splashy stuff [ ${nosplash} = 0 ] && /bin/splashy_update "progress 80" 2>/dev/null @@ -798,6 +812,8 @@ if [ -n "$uniondirs" ]; then include_in_fsroot_union "$union_type" "$uniondirs" fi +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 @@ -807,6 +823,8 @@ if [ -d /initramfs/plugin-init.d ]; then done fi +runinithook '80-after-plugins' + # post init for some distro specific postinit [ -s /initramfs/postinit.local ] && { @@ -855,6 +873,8 @@ unset client debug date initrd ip bldroot nfsroot rootfs ticks vci vga unset BOOT_IMAGE KCMDLINE KERNEL MODPRV NWMODULES OLDPWD UDEVD_EVENT_TIMEOUT \ SLXVERSION UDEVD_EXPECTED_SEQNUM PATH +runinithook '99-handing-over' + # splashy stuff [ ${nosplash} = 0 ] && /bin/splashy_update "progress 100" 2>/dev/null diff --git a/os-plugins/plugins/Theme/OpenSLX/OSPlugin/Theme.pm b/os-plugins/plugins/Theme/OpenSLX/OSPlugin/Theme.pm new file mode 100644 index 00000000..5975fa3f --- /dev/null +++ b/os-plugins/plugins/Theme/OpenSLX/OSPlugin/Theme.pm @@ -0,0 +1,84 @@ +# Copyright (c) 2007 - 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/ +# ----------------------------------------------------------------------------- +# Theme.pm +# - implementation of the 'Theme' plugin, which applies theming to the +# following places: +# + bootsplash (via splashy) +# + displaymanager (gdm, kdm, ...) +# + desktop (to be done) +# ----------------------------------------------------------------------------- +package OpenSLX::OSPlugin::Theme; + +use strict; +use warnings; + +use base qw(OpenSLX::OSPlugin::Base); + +use OpenSLX::Basics; +use OpenSLX::Utils; + +sub new +{ + my $class = shift; + + my $self = {}; + + return bless $self, $class; +} + +sub getInfo +{ + my $self = shift; + + return { + description => unshiftHereDoc(<<' End-of-Here'), + applies a graphical theme to the bootsplash and the displaymanager + End-of-Here + mustRunAfter => [], + }; +} + +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 + 'theme::active' => { + applies_to_systems => 1, + applies_to_clients => 0, + description => unshiftHereDoc(<<' End-of-Here'), + should the 'Theme'-plugin be executed during boot? + End-of-Here + content_regex => qr{^(0|1)$}, + content_descr => '1 means active - 0 means inactive', + default => '1', + }, + # attribute 'precedence' is mandatory for all plugins + 'theme::precedence' => { + applies_to_systems => 1, + applies_to_clients => 0, + description => unshiftHereDoc(<<' End-of-Here'), + the execution precedence of the 'Theme' plugin + End-of-Here + content_regex => qr{^\d\d$}, + content_descr => 'allowed range is from 01-99', + default => 30, + }, + + }; +} + +1; diff --git a/os-plugins/plugins/Theme/XX_Theme.sh b/os-plugins/plugins/Theme/XX_Theme.sh new file mode 100644 index 00000000..81d2a729 --- /dev/null +++ b/os-plugins/plugins/Theme/XX_Theme.sh @@ -0,0 +1,18 @@ +#! /bin/sh +# +# 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 ! [ -n $active ]; then + exit 0 +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 new file mode 100644 index 00000000..c2d4551a --- /dev/null +++ b/os-plugins/plugins/Theme/init-hooks/05-have-kernelvars/Theme.sh @@ -0,0 +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 + export Theme_nosplash=0 +else + export Theme_nosplash=1 +fi + +[ ${Theme_nosplash} = 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 new file mode 100644 index 00000000..6a3b0737 --- /dev/null +++ b/os-plugins/plugins/Theme/init-hooks/15-have-ip-config/Theme.sh @@ -0,0 +1 @@ +[ ${Theme_nosplash} = 0 ] && /bin/splashy_update "progress 15" 2>/dev/null 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 new file mode 100644 index 00000000..043d58d0 --- /dev/null +++ b/os-plugins/plugins/Theme/init-hooks/25-have-network-root/Theme.sh @@ -0,0 +1 @@ +[ ${Theme_nosplash} = 0 ] && /bin/splashy_update "progress 25" 2>/dev/null 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 new file mode 100644 index 00000000..7b56298b --- /dev/null +++ b/os-plugins/plugins/Theme/init-hooks/40-started-hw-config/Theme.sh @@ -0,0 +1 @@ +[ ${Theme_nosplash} = 0 ] && /bin/splashy_update "progress 40" 2>/dev/null 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 new file mode 100644 index 00000000..77505155 --- /dev/null +++ b/os-plugins/plugins/Theme/init-hooks/50-have-layered-fs/Theme.sh @@ -0,0 +1 @@ +[ ${Theme_nosplash} = 0 ] && /bin/splashy_update "progress 50" 2>/dev/null 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 new file mode 100644 index 00000000..a305e1b9 --- /dev/null +++ b/os-plugins/plugins/Theme/init-hooks/60-have-servconfig/Theme.sh @@ -0,0 +1 @@ +[ ${Theme_nosplash} = 0 ] && /bin/splashy_update "progress 60" 2>/dev/null 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 new file mode 100644 index 00000000..f96bf7da --- /dev/null +++ b/os-plugins/plugins/Theme/init-hooks/70-before-plugins/Theme.sh @@ -0,0 +1 @@ +[ ${Theme_nosplash} = 0 ] && /bin/splashy_update "progress 70" 2>/dev/null 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 new file mode 100644 index 00000000..4a749752 --- /dev/null +++ b/os-plugins/plugins/Theme/init-hooks/80-after-plugins/Theme.sh @@ -0,0 +1 @@ +[ ${Theme_nosplash} = 0 ] && /bin/splashy_update "progress 80" 2>/dev/null 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 new file mode 100644 index 00000000..92bd6572 --- /dev/null +++ b/os-plugins/plugins/Theme/init-hooks/99-handing-over/Theme.sh @@ -0,0 +1 @@ +[ ${Theme_nosplash} = 0 ] && /bin/splashy_update "progress 100" 2>/dev/null diff --git a/os-plugins/plugins/VMware/OpenSLX/OSPlugin/VMware.pm b/os-plugins/plugins/VMware/OpenSLX/OSPlugin/VMware.pm index 2dc141cc..c12750e7 100644 --- a/os-plugins/plugins/VMware/OpenSLX/OSPlugin/VMware.pm +++ b/os-plugins/plugins/VMware/OpenSLX/OSPlugin/VMware.pm @@ -71,7 +71,7 @@ sub getAttrInfo End-of-Here content_regex => qr{^\d\d$}, content_descr => 'allowed range is from 01-99', - default => 50, + default => 70, }, }; -- cgit v1.2.3-55-g7522