Fix syntax error in checkbootparam()
[grml-autoconfig.git] / autoconfig.functions
index fd699fc..b8579b7 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/zsh
 # Filename:      autoconfig.functions
 # Purpose:       basic system configuration and hardware setup for grml system
-# Authors:       grml-team (grml.org), (c) Klaus Knopper <knopper@knopper.net>, (c) Michael Prokop <mika@grml.org>
+# Authors:       grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
 # Bug-Reports:   see http://grml.org/bugs/
 # License:       This file is licensed under the GPL v2.
 ################################################################################
@@ -32,51 +32,59 @@ fi
 iszsh && setopt no_nomatch # || echo "Warning: not running under zsh!"
 # }}}
 
-### {{{ Utility Functions
-
-# Simple shell grep
-stringinfile(){
-  case "$(cat $2)" in *$1*) return 0;; esac
-  return 1
-}
+# {{{ Read in boot parameters
+if [ -z "$CMDLINE" ]; then
+  # if CMDLINE was set from the outside, we're debugging.
+  # otherwise, take CMDLINE from Kernel and config files.
+  CMDLINE="$(cat /proc/cmdline)"
+  [ -d /cdrom/bootparams/ ]      && CMDLINE="$CMDLINE $(cat /cdrom/bootparams/* | tr '\n' ' ')"
+  [ -d /live/image/bootparams/ ] && CMDLINE="$CMDLINE $(cat /live/image/bootparams/* | tr '\n' ' ')"
+fi
+# }}}
 
-# same for strings
-stringinstring(){
-  case "$2" in *$1*) return 0;; esac
-  return 1
-}
+### {{{ Utility Functions
 
-# Reread boot command line; echo last parameter's argument or return false.
+# Get a bootoption's parameter: read boot command line and either
+# echo last parameter's argument or return false.
 getbootparam(){
-  stringinstring " $1=" "$CMDLINE" || return 1
-  result="${CMDLINE##* $1=}"
-  result="${result%%[  ]*}"
-  echo "$result"
-  return 0
+  case "$CMDLINE" in
+    *$1=*)
+      result="${CMDLINE##* $1=}"
+      result="${result%%[      ]*}"
+      echo "$result"
+      return 0 ;;
+    *) # no match?
+      return 1 ;;
+  esac
 }
 
 # Check boot commandline for specified option
 checkbootparam(){
-  stringinstring " $1" "$CMDLINE"
-  return "$?"
+  [ -n "$1" ] || ( echo "Error: missing argument to checkbootparam()" ; return 1 )
+  # make sure we match beginning and end of line as well
+  # but don't match 'vg' if we want to check for 'vga'
+  if echo "$CMDLINE" | grep -qw "$1" ; then
+     return 0
+  else
+     return 1
+  fi
 }
 
+# Check wheter a configuration variable (like $CONFIG_TOHD) is
+# enabled or not
 checkvalue(){
-  if [ "$1" = "yes" ] ; then
-    return 0
-  else
-    return 1
-  fi
+  case "$1" in
+    [yY][eE][sS])     return 0 ;; # it's set to 'yes'
+    [tT][rR][uU][eE]) return 0 ;; # it's set to 'true'
+                   *) return 1 ;; # default
+  esac
 }
 
+# Are we using grml-small?
 checkgrmlsmall(){
   grep -q small /etc/grml_version 2>>$DEBUG && return 0 || return 1
 }
 
-checkgrmlusb(){
-  grep -q usb /etc/grml_version 2>>$DEBUG && return 0 || return 1
-}
-
 # execute flite only if it's present
 flitewrapper() {
    [ -x /usr/bin/flite ] && flite -o play -t "$*"
@@ -89,7 +97,7 @@ mount_proc(){
 }
 
 mount_pts(){
-  stringinfile "/dev/pts" /proc/mounts || mount -t devpts /dev/pts /dev/pts 2>/dev/null
+  grep -q "/dev/pts" /proc/mounts || mount -t devpts /dev/pts /dev/pts 2>/dev/null
 }
 
 mount_sys(){
@@ -97,23 +105,17 @@ mount_sys(){
 }
 # }}}
 
-# {{{ Read in boot parameters
-[ -f /proc/version ] || mount_proc # make sure we can access /proc/cmdline when sourcing this file too
-CMDLINE="$(cat /proc/cmdline)"
-[ -d "${LIVECD_PATH}"/bootparams/ ] && CMDLINE="$CMDLINE $(cat ${LIVECD_PATH}/bootparams/* | tr '\n' ' ')"
-# }}}
-
-# {{{ Check if we are running from the grml-CD or HD
+# {{{ Check if we are running in live mode or from HD
 INSTALLED=""
 [ -e /etc/grml_cd ] || INSTALLED="yes"
 
 # testcd
 TESTCD=""
-checkbootparam "testcd" >>$DEBUG 2>&1 && TESTCD="yes"
+checkbootparam 'testcd' >>$DEBUG 2>&1 && TESTCD="yes"
 # }}}
 
 # {{{ source lsb-functions , color handling
-if checkbootparam "nocolor"; then
+if checkbootparam 'nocolor'; then
   RC_NOCOLOR=yes
   . /etc/grml/lsb-functions
   einfo "Disabling colors in bootsequence as requested on commandline." ; eend 0
@@ -125,8 +127,8 @@ fi
 
 # {{{ debug
 config_debug(){
- checkbootparam "debug"                        && BOOTDEBUG="yes"
stringinstring "BOOT_IMAGE=debug " "$CMDLINE" && BOOTDEBUG="yes"
+ checkbootparam 'debug'            && BOOTDEBUG="yes"
checkbootparam "BOOT_IMAGE=debug" && BOOTDEBUG="yes"
 
  rundebugshell(){
   if [ -n "$BOOTDEBUG" ]; then
@@ -155,7 +157,7 @@ config_debug(){
 
 # {{{ log
 config_log(){
-if checkbootparam "log" || checkbootparam "debug" ; then
+if checkbootparam 'log' || checkbootparam 'debug' ; then
    export DEBUG="/tmp/grml.log.`date +%Y%m%d`"
    touch $DEBUG
    einfo "Bootparameter log found. Log files: ${DEBUG} and /var/log/boot"
@@ -171,7 +173,7 @@ fi
 
 # {{{ set firmware timeout via bootparam
 config_fwtimeout(){
- if checkbootparam fwtimeout ; then
+ if checkbootparam 'fwtimeout' ; then
    TIMEOUT="$(getbootparam 'fwtimeout' 2>>$DEBUG)"
    einfo "Bootoption fwtimeout found. (Re)Loading firmware_class module."
    rmmod firmware_class 1>>$DEBUG 2>&1
@@ -199,7 +201,7 @@ config_language(){
  grep -q ' lang=.*-utf8' /proc/cmdline && UTF8='yes' || UTF8=''
 
  # check for bootoption which overrides config from /etc/grml/autoconfig:
- BOOT_LANGUAGE="$(getbootparam lang 2>>$DEBUG)"
+ BOOT_LANGUAGE="$(getbootparam 'lang' 2>>$DEBUG)"
  [ -n "$BOOT_LANGUAGE" ] && LANGUAGE="$BOOT_LANGUAGE"
 
  # set default to 'en' in live-cd mode if $LANGUAGE is not yet set:
@@ -218,7 +220,7 @@ config_language(){
 
  # set console font
  if [ -z "$CONSOLEFONT" ] ; then
-    if ! checkbootparam "nodefaultfont" >>$DEBUG 2>&1 ; then
+    if ! checkbootparam 'nodefaultfont' >>$DEBUG 2>&1 ; then
        # [ -n "$UTF8" ] && CONSOLEFONT='LatArCyrHeb-16' || CONSOLEFONT='Lat15-Terminus16'
        # if [ -r /usr/share/consolefonts/Lat15-Terminus16.psf.gz ] ; then
        if [ -r /usr/share/consolefonts/Uni3-Terminus16.psf.gz ] ; then
@@ -241,7 +243,7 @@ config_language(){
  [ -r /etc/sysconfig/keyboard ] && . /etc/sysconfig/keyboard
 
  # now allow keyboard override by boot commandline for later use:
- KKEYBOARD="$(getbootparam keyboard 2>>$DEBUG)"
+ KKEYBOARD="$(getbootparam 'keyboard' 2>>$DEBUG)"
  [ -n "$KKEYBOARD" ] && KEYTABLE="$KKEYBOARD"
  # notce: de/at is a bad choice, so take de-latin1-nodeadkeys instead:
  [[ "$KKEYBOARD" == 'de' ]] && KEYTABLE=de-latin1-nodeadkeys
@@ -253,7 +255,7 @@ config_language(){
    local LANGUAGE="$BOOT_LANGUAGE"
    . /etc/grml/language-functions
    # allow setting xkeyboard explicitly different than console keyboard
-   KXKEYBOARD="$(getbootparam xkeyboard 2>>$DEBUG)"
+   KXKEYBOARD="$(getbootparam 'xkeyboard' 2>>$DEBUG)"
    if [ -n "$KXKEYBOARD" ]; then
       XKEYBOARD="$KXKEYBOARD"
       KDEKEYBOARD="$KXKEYBOARD"
@@ -265,7 +267,7 @@ config_language(){
    # duplicate of previous code to make sure /etc/grml/language-functions
    # does not overwrite our values....
    # now allow keyboard override by boot commandline for later use:
-   KKEYBOARD="$(getbootparam keyboard 2>>$DEBUG)"
+   KKEYBOARD="$(getbootparam 'keyboard' 2>>$DEBUG)"
    [ -n "$KKEYBOARD" ] && KEYTABLE="$KKEYBOARD"
    # notce: de/at is a bad choice, so take de-latin1-nodeadkeys instead:
    [[ "$KKEYBOARD" == 'de' ]] && KEYTABLE=de-latin1-nodeadkeys
@@ -313,7 +315,7 @@ config_language(){
     eend $RC
  fi
 
- if checkbootparam noconsolefont ; then
+ if checkbootparam 'noconsolefont' ; then
     ewarn "Skipping setting console font as requested on boot commandline." ; eend 0
  else
     if [ -n "$CONSOLEFONT" ] ; then
@@ -332,7 +334,7 @@ config_language(){
 
 # {{{ Set hostname
 config_hostname(){
- if checkbootparam hostname ; then
+ if checkbootparam 'hostname' ; then
   HOSTNAME="$(getbootparam 'hostname' 2>>$DEBUG)"
   einfo "Setting hostname to $HOSTNAME as requested."
   sed -i "s/^127.0.0.1.*localhost/127.0.0.1 $HOSTNAME localhost/" /etc/hosts
@@ -363,12 +365,12 @@ config_time(){
     # The default hardware clock timezone is stated as representing local time.
     UTC="--localtime"
     grep -q "^UTC=" /etc/default/rcS || echo "UTC=no" >> /etc/default/rcS
-    checkbootparam utc       >>$DEBUG 2>&1 && sed -i "s|^UTC=.*$|UTC=yes|" /etc/default/rcS
-    checkbootparam gmt       >>$DEBUG 2>&1 && sed -i "s|^UTC=.*$|UTC=yes|" /etc/default/rcS
-    checkbootparam localtime >>$DEBUG 2>&1 && sed -i "s|^UTC=.*$|UTC=no|"  /etc/default/rcS
+    checkbootparam 'utc'       >>$DEBUG 2>&1 && sed -i "s|^UTC=.*$|UTC=yes|" /etc/default/rcS
+    checkbootparam 'gmt'       >>$DEBUG 2>&1 && sed -i "s|^UTC=.*$|UTC=yes|" /etc/default/rcS
+    checkbootparam 'localtime' >>$DEBUG 2>&1 && sed -i "s|^UTC=.*$|UTC=no|"  /etc/default/rcS
     grep -q -i "^UTC=yes" /etc/default/rcS && UTC="-u"
     # hwclock uses the TZ variable
-    KTZ="$(getbootparam tz 2>>$DEBUG)"
+    KTZ="$(getbootparam 'tz' 2>>$DEBUG)"
     [ -z "$KTZ" ] && [ -r /etc/timezone ] && KTZ=$(cat /etc/timezone)
     if [ ! -f "/usr/share/zoneinfo/$KTZ" ] ; then
        ewarn "Warning: unknown timezone $KTZ" ; eend 1
@@ -416,12 +418,12 @@ config_kernel(){
 
 # {{{ vmware specific stuff
 config_vmware(){
-if checkbootparam novmware ; then
+if checkbootparam 'novmware' ; then
    ewarn "Skipping running vmware specific stuff as requested on boot commandline." ; eend 0
 else
    if [ -z "$INSTALLED" ] ; then
-      if vmware-detect || stringinstring "BOOT_IMAGE=vmware " "$CMDLINE" ; then
-         if ! checkbootparam qemu ; then
+      if vmware-detect || checkbootparam "BOOT_IMAGE=vmware" ; then
+         if ! checkbootparam 'qemu' ; then
             if [ -r /etc/X11/xorg.conf.vmware ] ; then
                einfo "VMware: Copying /etc/X11/xorg.conf.vmware to /etc/X11/xorg.conf"
                cp /etc/X11/xorg.conf.vmware /etc/X11/xorg.conf ; eend $?
@@ -440,7 +442,7 @@ fi
 
 # {{{ qemu specific stuff
 config_qemu(){
-if checkbootparam qemu ; then
+if checkbootparam 'qemu' ; then
    if [ -r /etc/X11/xorg.conf.example ] ; then
       einfo "Qemu: Copying /etc/X11/xorg.conf.example to /etc/X11/xorg.conf"
       cp /etc/X11/xorg.conf.example /etc/X11/xorg.conf ; eend $?
@@ -470,7 +472,7 @@ fi
 config_timezone(){
  # don't touch the files if running from harddisk:
  if [ -z "$INSTALLED" ]; then
-    KTZ="$(getbootparam tz 2>>$DEBUG)"
+    KTZ="$(getbootparam 'tz' 2>>$DEBUG)"
     if [ -n "$KTZ" ] ; then
        if [ ! -f "/usr/share/zoneinfo/$KTZ" ]
        then
@@ -499,7 +501,7 @@ RAM=$(/usr/bin/gawk '/MemTotal/{print $2}' /proc/meminfo)
 # MEM=$(/usr/bin/gawk 'BEGIN{m=0};/MemFree|Cached|SwapFree/{m+=$2};END{print m}' /proc/meminfo)
 eindent
 
-if checkbootparam "small"; then
+if checkbootparam 'small'; then
   einfo "Information: ${RAM} kB of RAM available." ; eend 0
   einfo "Bootoption small detected. Activating small system."
   if [ -r /etc/inittab.small ] ; then
@@ -541,8 +543,8 @@ eoutdent
 
 # skip startup of w3m {{{
 config_fast(){
-if checkbootparam "fast"; then
-  ewarn "Bootoption fast detected. Skipping startup of w3m."
+if checkbootparam 'fast'; then
+  ewarn "Bootoption fast detected. Skipping startup of grml-quickconfig."
     sed -i 's#^1:.*#1:12345:respawn:/usr/bin/openvt -f -c 1 -w -- /bin/zsh#' /etc/inittab
   /sbin/telinit q ; eend $?
 fi
@@ -551,11 +553,11 @@ fi
 
 # activate serial console {{{
 config_console(){
-if checkbootparam "console"; then
+if checkbootparam 'console'; then
   einfo "Bootoption (for serial) console detected."
   eindent
     if [ -r /etc/mgetty/mgetty.config ] ; then
-       MODE=$(getbootparam console | awk -F, '{print $2}')
+       MODE=$(getbootparam 'console' | awk -F, '{print $2}')
        MODE=${MODE%%n*}
        [ -n "$MODE" ] || MODE=9600 # default mode
        einfo "Setting speed in /etc/mgetty/mgetty.config to $MODE bps"
@@ -598,7 +600,7 @@ config_local_net(){
 # so let's create raw1394 device manually
 # http://www.michael-prokop.at/blog/index.php?p=352
 config_firewire_dev(){
-if checkbootparam "nofirewiredev" ; then
+if checkbootparam 'nofirewiredev' ; then
   ewarn "Skipping creating some firewire devices as requested on boot commandline." ; eend 0
 else
 #if [ "${KERNEL%-*}" == "2.6.11" ] ; then
@@ -655,7 +657,7 @@ fi
 
 # {{{ hardware detection via discover
 config_discover(){
-if checkbootparam "nodisc" ; then
+if checkbootparam 'nodisc' ; then
   ewarn "Skipping hardware detection via discover as requested on boot commandline." ; eend 0
 else
  if [ -x /sbin/discover ] ; then
@@ -674,7 +676,7 @@ fi
 
 # {{{ hardware detection via hwinfo
 config_hwinfo(){
-if checkbootparam hwinfo >>$DEBUG 2>&1; then
+if checkbootparam 'hwinfo' >>$DEBUG 2>&1; then
   einfo "Discovering hardware via hwinfo:"
   MODULES=$(su grml hwinfo | grep "Cmd: \"modprobe" | awk '{print $5}' | sed 's/"//')
   echo -n "  Loading modules: "
@@ -686,7 +688,7 @@ fi
 
 # {{{ disable hotplug agents on request
 config_hotplug_agent(){
-if checkbootparam "noagent" ; then
+if checkbootparam 'noagent' ; then
   AGENT="$(getbootparam 'noagent' 2>>$DEBUG)"
   AGENTLIST=$(echo "$AGENT" | sed 's/,/\\n/g')
   AGENTNL=$(echo "$AGENT" | sed 's/,/ /g')
@@ -701,7 +703,7 @@ fi
 
 # {{{ blacklist of hotplug-modules
 config_hotplug_blacklist(){
-if checkbootparam "black" ; then
+if checkbootparam 'black' ; then
   BLACK="$(getbootparam 'black' 2>>$DEBUG)"
   BLACKLIST=$(echo "$BLACK" | sed 's/,/\\n/g')
   BLACKNL=$(echo "$BLACK" | sed 's/,/ /g')
@@ -715,7 +717,7 @@ fi
 
 # {{{ run hotplug
 config_hotplug(){
-if checkbootparam "nohotplug" ; then
+if checkbootparam 'nohotplug' ; then
   ewarn "Skipping running hotplug as requested on boot commandline." ; eend 0
 else
   if [ -r /etc/init.d/hotplug ] ; then
@@ -735,17 +737,18 @@ fi
 
 # {{{ blacklist specific module [ used in /etc/init.d/udev ]
 config_blacklist(){
-if checkbootparam "blacklist" ; then
+if checkbootparam 'blacklist' ; then
  if [ -z "$INSTALLED" ]; then
   einfo "Bootoption blacklist found."
   BLACK="$(getbootparam 'blacklist' 2>>$DEBUG)"
+  BLACKLIST_FILE='/etc/modprobe.d/grml.conf'
   if [ -n "$BLACK" ] ; then
     for module in $(echo ${BLACK//,/ }) ; do
-        einfo "Blacklisting module ${module} via /etc/modprobe.d/grml."
-        echo "# begin entry generated by config_blacklist of grml-autoconfig" >> /etc/modprobe.d/grml
-        echo "blacklist $module"     >> /etc/modprobe.d/grml
-        echo "alias     $module off" >> /etc/modprobe.d/grml
-        echo "# end   entry generated by config_blacklist of grml-autoconfig" >> /etc/modprobe.d/grml ; eend $?
+        einfo "Blacklisting module ${module} via ${BLACKLIST_FILE}."
+        echo "# begin entry generated by config_blacklist of grml-autoconfig" >> "$BLACKLIST_FILE"
+        echo "blacklist $module"     >> "$BLACKLIST_FILE"
+        echo "alias     $module off" >> "$BLACKLIST_FILE"
+        echo "# end   entry generated by config_blacklist of grml-autoconfig" >> "$BLACKLIST_FILE" ; eend $?
     done
   else
    eerror "No given module for blacklist found. Blacklisting will not work therefore."
@@ -763,9 +766,9 @@ fi
 # {{{ ACPI
 config_acpi_apm(){
 if [ -d /proc/acpi ]; then
-  if checkbootparam "noacpi"; then
+  if checkbootparam 'noacpi'; then
     ewarn "Skipping ACPI Bios detection as requested via noacpi on boot commandline." ; eend 0
-  elif checkbootparam "nogrmlacpi" ; then
+  elif checkbootparam 'nogrmlacpi' ; then
     ewarn "Skipping ACPI Bios detection as requested via nogrmlacpi on boot commandline." ; eend 0
   else
     einfo "ACPI Bios found, activating modules (disable via bootoption noacpi / nogrmlacpi): "
@@ -802,7 +805,7 @@ if [ -d /proc/acpi ]; then
   fi
 else
 # APM
-  if checkbootparam "noapm"; then
+  if checkbootparam 'noapm'; then
     ewarn "Skipping APM Bios detection as requested on boot commandline." ; eend 0
   else
     modprobe apm power_off=1 >>$DEBUG 2>&1
@@ -822,7 +825,7 @@ fi
 # {{{ PCMCIA Check/Setup
 # This needs to be done before other modules are being loaded (by hwsetup)
 config_pcmcia(){
-if checkbootparam "nopcmcia"; then
+if checkbootparam 'nopcmcia'; then
   ewarn "Skipping PCMCIA detection as requested on boot commandline." ; eend 0
 else
   if /usr/sbin/laptop-detect ; then
@@ -848,7 +851,7 @@ fi
 
 # {{{ run software synthesizer via speakup
 config_swspeak(){
-   if checkbootparam swspeak ; then
+   if checkbootparam 'swspeak' ; then
       einfo "Bootoption swspeak found."
 
       if [ ! -d /proc/speakup/ ] && ! grep -q speakup_soft /proc/modules ; then
@@ -881,19 +884,48 @@ config_swspeak(){
 
 # {{{ support hardware synthesizer via speakup
 config_hwspeak(){
-   if checkbootparam hwspeak ; then
+   if checkbootparam 'speakup.synth' ; then
+      einfo "Bootoption speakup.synth found."
+      eindent
+
+      module="$(getbootparam 'speakup.synth' 2>>$DEBUG)"
+      if [ -z "$module" ] ; then
+         eerror "Sorry, no speakup module specified for bootoption speakup.synth."
+         flitewrapper "Sorry, no speakup module specified for bootoption speakup.synth."
+      else
+         einfo "Trying to load $module"
+         modprobe "speakup_${module}"
+         eend $?
+      fi
+
+      if [ -d /proc/speakup/ ] || grep -q speakup /proc/modules ; then
+         einfo "Kernel should support speakup now." ; eend 0
+         flitewrapper "Kernel should support speakup now."
+      else
+         eerror "Kernel or hardware do not seem to support speakup. Skipping hwspeak." ; eend 1
+         flitewrapper "Kernel or hardware do not seem to support speakup. Sorry."
+      fi
+
+      eoutdent
+
+   # hwspeak:
+   elif checkbootparam 'hwspeak' ; then
       einfo "Bootoption hwspeak found."
 
       if [ ! -d /proc/speakup/ ] && ! grep -q speakup /proc/modules ; then
-         ewarnKernel does not support hardware speakup - trying to load kernel modules:" ; eend 0
+         ewarn "Kernel does not support hardware speakup - trying to load kernel modules:" ; eend 0
          eindent
-         for module in $(find "/lib/modules/${KERNEL}/extra/speakup/" -name \*.ko | \
-                         sed 's#.*speakup/##g ; s#.ko$##g' | \
-                         grep -ve speakup_soft -ve speakup_dummy | sort -u) ; do
-            einfo "Trying to load $module"
-            modprobe $module
-            eend $?
-         done
+         if ! [ -d "/lib/modules/${KERNEL}/extra/speakup/" ] ; then
+            eerror "Kernel does not provide speakup modules, sorry." ; eend 1
+         else
+           for module in $(find "/lib/modules/${KERNEL}/extra/speakup/" -name \*.ko | \
+                           sed 's#.*speakup/##g ; s#.ko$##g' | \
+                           grep -ve speakup_soft -ve speakup_dummy | sort -u) ; do
+              einfo "Trying to load $module"
+              modprobe $module
+              eend $?
+           done
+         fi
          eoutdent
       fi
 
@@ -911,8 +943,8 @@ config_hwspeak(){
 # {{{ Check for blind option or brltty
 config_blind(){
 BLIND=""
-checkbootparam "blind" && BLIND="yes"
-BRLTTY="$(getbootparam brltty 2>>$DEBUG)"
+checkbootparam 'blind' && BLIND="yes"
+BRLTTY="$(getbootparam 'brltty' 2>>$DEBUG)"
 
 if [ -n "$BLIND" -o -n "$BRLTTY" ]; then
   if [ -x /sbin/brltty ]; then
@@ -959,16 +991,16 @@ config_interactive(){
 
 # {{{ AGP
 config_agp(){
-if checkbootparam forceagp ; then
+if checkbootparam 'forceagp' ; then
 # Probe for AGP. Hope this can fail safely
-  stringinfile "AGP" "/proc/pci" 2>>$DEBUG && { modprobe agpgart || modprobe agpgart agp_try_unsupported=1; } >>$DEBUG 2>&1 && einfo "AGP bridge detected." ; eend 0
+  grep -q "AGP" "/proc/pci" 2>>$DEBUG && { modprobe agpgart || modprobe agpgart agp_try_unsupported=1; } >>$DEBUG 2>&1 && einfo "AGP bridge detected." ; eend 0
 fi
 }
 # }}}
 
 # {{{ automount(er)
 config_automounter(){
-if checkbootparam automounter ; then
+if checkbootparam 'automounter' ; then
   RUNLEVEL="$(runlevel)"
   AUTOMOUNTER=""
   [ -x /etc/init.d/autofs ] && [ "$RUNLEVEL" != "N 1" ] && [ "$RUNLEVEL" != "N S" ] && AUTOMOUNTER="yes"
@@ -981,14 +1013,14 @@ addautomount(){
     [ -d "/mnt/auto/$d" ] || mkdir -p "/mnt/auto/$d"
     [ -L "/mnt/$d" ]      || ln -s "/mnt/auto/$d" "/mnt/$d"
     anew="$d        -fstype=auto,$2 :$i"
-    stringinfile "$anew" "/etc/auto.mnt" || echo "$anew" >> /etc/auto.mnt
+    grep -q "$anew" "/etc/auto.mnt" || echo "$anew" >> /etc/auto.mnt
     AUTOMOUNTS="$AUTOMOUNTS $d"
     new="$1 /mnt/auto/$d  auto   users,noauto,exec,$2 0 0"
   else
     [ -d /mnt/$d ] && mkdir -p /mnt/$d
     new="$1 /mnt/$d  auto   users,noauto,exec,$2 0 0"
   fi
-  stringinfile "$new" "/etc/fstab" || echo "$new" >> /etc/fstab
+  grep -q "$new" "/etc/fstab" || echo "$new" >> /etc/fstab
 }
 
   AUTOMOUNTS="floppy cdrom"
@@ -1042,7 +1074,7 @@ check_partitions 1>/dev/null 2>&1 # avoid output "check_partitions:3: read-only
 # {{{ Enable DMA for all IDE drives now if not disabled
 # Notice: Already done by linuxrc, but make sure it's done also on harddisk-installed systems
 config_dma(){
-if checkbootparam "nodma"; then
+if checkbootparam 'nodma'; then
   ewarn "Skipping DMA accelleration as requested on boot commandline." ; eend 0
 else
   for d in $(cd /proc/ide 2>>$DEBUG && echo hd[a-z]); do
@@ -1064,12 +1096,12 @@ fi
 config_fstab(){
 
 NOSWAP="yes" # we do not use swap by default!
-if checkbootparam "swap" || checkbootparam "anyswap" ; then
+if checkbootparam 'swap' || checkbootparam 'anyswap' ; then
    NOSWAP=''
-   checkbootparam "anyswap" && export ANYSWAP='yes' || export ANYSWAP=""
+   checkbootparam 'anyswap' && export ANYSWAP='yes' || export ANYSWAP=""
 fi
 
-if checkbootparam "nofstab" || checkbootparam "forensic" ; then
+if checkbootparam 'nofstab' || checkbootparam 'forensic' ; then
   ewarn "Skipping /etc/fstab creation as requested on boot commandline." ; eend 0
 else
   einfo "Scanning for harddisk partitions and creating /etc/fstab. (Disable this via boot option: nofstab)"
@@ -1087,7 +1119,7 @@ if [ -z "$INSTALLED" ] ; then
    [ -z "$NOSWAP" ] && einfo "Searching for swap partition(s) as requested."
    GRML_IMG=""
    GRML_SWP=""
-   HOMEDIR="$(getbootparam home)"
+   HOMEDIR="$(getbootparam 'home')"
    if [ -n "$partitions" ]; then
       while read p m f relax; do
         case "$p" in *fd0*|*proc*|*sys*|*\#*) continue;; esac
@@ -1153,7 +1185,7 @@ if [ -z "$INSTALLED" ] ; then
                 einfo "Using GRML swapfile ${WHITE}${SWAPFILE}${NORMAL}."
               eoutdent
               fnew="$SWAPFILE swap swap defaults 0 0"
-              stringinfile "$fnew" "/etc/fstab" || echo "$fnew" >> /etc/fstab
+              grep -q "$fnew" "/etc/fstab" || echo "$fnew" >> /etc/fstab
               GRML_SWP="$GRML_SWP $SWAPFILE"
               eend 0
            fi
@@ -1197,7 +1229,7 @@ fi
 # {{{ IPv6 configuration
 # Load IPv6 kernel module and print IP adresses
 config_ipv6(){
-if checkbootparam "ipv6"; then
+if checkbootparam 'ipv6'; then
   einfo "Enabling IPv6 as requested on boot commandline (sleeping for 2 seconds)"
   modprobe ipv6
   # we probably need some time until stateless autoconfiguration has happened
@@ -1225,7 +1257,7 @@ fi
 
 # {{{ Fat-Client-Version: DHCP Broadcast for IP address
 config_dhcp(){
-if checkbootparam "nodhcp"; then
+if checkbootparam 'nodhcp'; then
   ewarn "Skipping DHCP broadcast/network detection as requested on boot commandline." ; eend 0
 else
   NETDEVICES="$(awk -F: '/eth.:|tr.:|wlan.:/{print $1}' /proc/net/dev 2>>$DEBUG)"
@@ -1302,7 +1334,7 @@ return 1
 
 # {{{ CPU-detection
 config_cpu(){
-if checkbootparam "nocpu"; then
+if checkbootparam 'nocpu'; then
   ewarn "Skipping CPU detection as requested on boot commandline." ; eend 0
 else
   # check module dependencies
@@ -1405,7 +1437,7 @@ fi # checkbootparam nocpu
 
 # {{{ autostart of ssh
 config_ssh(){
-if checkbootparam ssh ; then
+if checkbootparam 'ssh' ; then
    SSH_PASSWD=''
    SSH_PASSWD="$(getbootparam 'ssh' 2>>$DEBUG)"
    einfo "Bootoption ssh found, trying to set password for user grml."
@@ -1435,7 +1467,12 @@ if checkbootparam ssh ; then
 
    # finally check if we have a password we can use:
    if [ -n "$SSH_PASSWD" ] ; then
-      echo "grml:$SSH_PASSWD" | chpasswd -m
+      # chpasswd sucks, seriously.
+      if chpasswd --help 2>&1 | grep -q -- '-m,' ; then
+        echo "grml:$SSH_PASSWD" | chpasswd -m
+      else
+        echo "grml:$SSH_PASSWD" | chpasswd
+      fi
    fi
 
    einfo 'Starting secure shell server in background.'
@@ -1452,7 +1489,7 @@ fi
 
 # {{{ set password for user grml
 config_passwd(){
-if checkbootparam passwd >>$DEBUG 2>&1; then
+if checkbootparam 'passwd' >>$DEBUG 2>&1; then
   einfo "Bootoption passwd found."
   PASSWD="$(getbootparam 'passwd' 2>>$DEBUG)"
   if [ -n "$PASSWD" ] ; then
@@ -1469,8 +1506,8 @@ fi
 
 # {{{ Check for persistent homedir option and eventually mount /home from there, or use a loopback file.
 config_homedir(){
-if checkbootparam home ; then
-   HOMEDIR="$(getbootparam home)"
+if checkbootparam 'home' ; then
+   HOMEDIR="$(getbootparam 'home')"
    MYHOMEDEVICE=""
    MYHOMEMOUNTPOINT=""
    MYHOMEDIR=""
@@ -1551,17 +1588,6 @@ fi # checkbootparam home
 }
 # }}}
 
-# {{{ Check for scripts on CD-ROM
-config_cdrom_scripts(){
-if checkbootparam "script"; then
-   for script in "${LIVECD_PATH}"/scripts/* ; do
-       einfo " grml script found on CD, executing ${WHITE}${script}${NORMAL}."
-       . $script
-   done
-fi
-}
-# }}}
-
 # {{{ Sound
 config_mixer(){
 if ! [ -x /usr/bin/aumix ] ; then
@@ -1573,7 +1599,7 @@ else
      return
   fi
 
-  if checkbootparam vol ; then
+  if checkbootparam 'vol' ; then
     VOL="$(getbootparam 'vol' 2>>$DEBUG)"
     if [ -z "$VOL" ] ; then
       eerror "Bootoption vol found but no volume level/parameter given. Using defaults." ; eend 1
@@ -1583,7 +1609,7 @@ else
     VOL='75' # default
   fi
 
-  if checkbootparam nosound ; then
+  if checkbootparam 'nosound' ; then
     einfo "Muting sound devices on request."
     # some IBM notebooks require the following stuff:
     if [ -x /usr/bin/amixer ] ; then
@@ -1609,7 +1635,7 @@ else
          fi
       fi
       # by default assume '0' as volume for microphone:
-      if checkbootparam micvol ; then
+      if checkbootparam 'micvol' ; then
          MICVOL="$(getbootparam 'micvol' 2>>$DEBUG)"
       else
          MICVOL=0
@@ -1631,7 +1657,7 @@ fi
 
 # {{{ modem detection
 config_modem(){
-if checkbootparam "nomodem"; then
+if checkbootparam 'nomodem'; then
   ewarn "Skipping check for AC97 modem controller as requested on boot commandline." ; eend 0
 else
   if [ -x /etc/init.d/sl-modem-daemon ] ; then
@@ -1646,7 +1672,7 @@ fi
 
 # {{{ keyboard add-ons
 config_setkeycodes(){
-if checkbootparam "setkeycodes" ; then
+if checkbootparam 'setkeycodes' ; then
  einfo "Setting keycodes as requested via bootparameter 'setkeycodes'."
   # MS MM keyboard add-on
   # fix
@@ -1674,8 +1700,8 @@ fi
 
 # {{{ wondershaper
 config_wondershaper(){
- if checkbootparam "wondershaper" ; then
-    WONDER="$(getbootparam wondershaper 2>>$DEBUG)"
+ if checkbootparam 'wondershaper' ; then
+    WONDER="$(getbootparam 'wondershaper' 2>>$DEBUG)"
     CMD=wondershaper
     DEVICE=""
     DOWNSTREAM=""
@@ -1706,7 +1732,7 @@ config_wondershaper(){
 
 # {{{ syslog-ng
 config_syslog(){
- if checkbootparam "nosyslog"; then
+ if checkbootparam 'nosyslog'; then
     ewarn "Not starting syslog daemon as requested on boot commandline." ; eend 0
  else
     SYSLOGD=''
@@ -1729,7 +1755,7 @@ config_syslog(){
 
 # {{{ gpm
 config_gpm(){
- if checkbootparam "nogpm"; then
+ if checkbootparam 'nogpm'; then
   ewarn "Not starting GPM as requested on boot commandline." ; eend 0
  else
    if ! [ -r /dev/input/mice ] ; then
@@ -1746,8 +1772,8 @@ config_gpm(){
 
 # {{{ services
 config_services(){
- if checkbootparam "services" ; then
-    SERVICE="$(getbootparam services 2>>$DEBUG)"
+ if checkbootparam 'services' ; then
+    SERVICE="$(getbootparam 'services' 2>>$DEBUG)"
     SERVICELIST=$(echo "$SERVICE" | sed 's/,/\\n/g')
     SERVICENL=$(echo "$SERVICE" | sed 's/,/ /g')
     einfo "Starting service(s) ${SERVICENL} in background."
@@ -1761,7 +1787,7 @@ config_services(){
 
 # {{{ config files
 config_netconfig(){
- if checkbootparam netconfig ; then
+ if checkbootparam 'netconfig' ; then
   CONFIG="$(getbootparam 'netconfig' 2>>$DEBUG)"
   CONFIGFILE='/tmp/netconfig.grml'
 
@@ -1790,7 +1816,7 @@ config_netconfig(){
 
 # {{{ blindsound
 config_blindsound(){
- if checkbootparam "blind" ; then
+ if checkbootparam 'blind' ; then
     beep
     flitewrapper "welcome to the gremel system"
  fi
@@ -1799,7 +1825,7 @@ config_blindsound(){
 
 # {{{ welcome sound
 config_welcome(){
- if checkbootparam welcome ; then
+ if checkbootparam 'welcome' ; then
     flitewrapper "welcome to the gremel system"
  fi
 }
@@ -1822,7 +1848,9 @@ create_mnt_dirs(){
 
 # {{{ start X window system via grml-x
 config_x_startup(){
-if checkbootparam startx ; then
+# make sure we start X only if startx is used *before* a nostartx option
+# so it's possible to disable automatic X startup using nostart
+if checkbootparam 'startx' && ! grep -q 'startx.*nostartx' "$CMDLINE" ; then
  if [ -x /usr/X11R6/bin/X ] ; then
   if [ -z "$INSTALLED" ] ; then
    WINDOWMANAGER="$(getbootparam 'startx' 2>>$DEBUG)"
@@ -1857,12 +1885,12 @@ EOF
    fi
 
   else
-    eerror "We are not running from CD - startx will not work, skipping it.
-     Please use something like xdm, gdm or kdm for starting X on a harddisk system!" ; eend 1
+    eerror "We are not running in live mode - startx will not work, skipping it."
+    eerror " -> Please use something like xdm, gdm or kdm for starting X on a harddisk system!" ; eend 1
   fi
  else
-   eerror "/usr/X11R6/bin/X is not present on this grml flavour.
-   Boot parameter startx does not work therefore." ; eend 1
+   eerror "/usr/X11R6/bin/X is not present on this grml flavour."
+   eerror "  -> Boot parameter startx does not work therefore." ; eend 1
  fi
 fi
 }
 
 # {{{ configuration framework
 config_extract(){
-if checkbootparam extract ; then
+if checkbootparam 'extract' ; then
  EXTRACT="$(getbootparam 'extract' 2>>$DEBUG)"
  EXTRACTOPTIONS="-- -x $EXTRACT"
 fi
 }
 
-config_unpack(){
-MOUNTDEVICE="$1"
-MESSAGE="$2"
-
-if [ ! -b "$MOUNTDEVICE" ] ; then
-   return;
-fi
-
-
-[ -d /mnt/grml ] || mkdir /mnt/grml
-umount /mnt/grml 1>>$DEBUG 2>&1 # make sure it is not mounted
-mount -o ro -t auto $MOUNTDEVICE /mnt/grml ; RC="$?"
-if [[ $RC == 0 ]]; then
-   einfo "Successfully mounted $MOUNTDEVICE $MESSAGE to /mnt/grml (readonly)." ; eend 0
-   eindent
-   CONFIG=''
-   CONFIG="$(/bin/ls -1d /mnt/grml/[Cc][Oo][Nn][Ff][Ii][Gg].[Tt][Bb][Zz] 2>>$DEBUG)"
-   if checkbootparam config ; then
-      FILENAME="$(getbootparam 'config' 2>>$DEBUG)"
-      if [ -e /mnt/grml/${FILENAME} ] ; then
-         einfo "Using /mnt/grml/$FILENAME instead of config.tbz"
-         CONFIG="/mnt/grml/$FILENAME"
-      fi
-   fi
-   if [ -n "$CONFIG" ]; then
-     einfo "Found file ${WHITE}${CONFIG}${NORMAL} - trying to extract it."
-     cd /
-     unp $CONFIG $EXTRACTOPTIONS ; eend $?
-   else
-     ewarn "Sorry, could not find file $FILENAME on device $MOUNTDEVICE $MESSAGE label GRMLCFG." ; eend 1
-   fi
-
-   SCRIPT=''
-   SCRIPT="$(/bin/ls -1d /mnt/grml/[Gg][Rr][Mm][Ll].[Ss][Hh] 2>>$DEBUG)"
-   if [ -n "$SCRIPT" ]; then
-     einfo "Found script ${WHITE}${SCRIPT}${NORMAL} - trying to execute it."
-     $SCRIPT ; eend $?
-   fi
-   eoutdent
-   else
-   einfo "Could not mount $MOUNTDEVICE to /mnt/grml - sorry." ; eend 1
-fi # mount $MOUNTDEVICE
-grep -q '/mnt/grml' /proc/mounts && umount /mnt/grml
-
-}
-
-config_automount(){
-if checkbootparam noautoconfig || checkbootparam forensic ; then
+config_finddcsdir() {
+#  - If no GRMLCFG partition is found and noautoconfig is _not_ given
+#    on the command line, nothing is changed and the dcs files are
+#    searched within the .iso, $dcs-dir is set to the root directory
+#    within the .iso
+#  - If a GRMLCFG partition is found, $dcs-dir is set to the root of
+#    the GRMLCFG partition unless noautoconfig is set. If noautoconfig is
+#    set, $dcs-dir is set to the root directory within the .iso.
+#  - If myconfig=foo is set on the command line, $dcs-dir is set to
+#    foo, even if a GRMLCFG partition is present.
+DCSDIR=""
+if checkbootparam 'noautoconfig' || checkbootparam 'forensic' ; then
   ewarn "Skipping running automount of device(s) labeled GRMLCFG as requested." ; eend 0
 else
- if [ -z "$INSTALLED" ] ; then
-     einfo "Searching for device(s) labeled with GRMLCFG. (Disable this via boot option: noautoconfig)" ; eend 0
-     eindent
-   # We do need the following fix so floppy disk is available to blkid in any case :-/
-     if [ -r /dev/fd0 ] ; then
+  if [ -z "$INSTALLED" ] ; then
+    if checkbootparam 'myconfig' ; then
+      DCSDEVICE="$(getbootparam 'myconfig' 2>>$DEBUG)"
+      if [ -z "$DCSDEVICE" ]; then
+        einfo "No device for bootoption myconfig provided." ; eend 1
+      fi # [ -z "$DCSDEVICE" ]
+    elif checkvalue $CONFIG_MYCONFIG; then # checkbootparam myconfig
+      einfo "Searching for device(s) labeled with GRMLCFG. (Disable this via boot option: noautoconfig)" ; eend 0
+      eindent
+      # We do need the following fix so floppy disk is available to blkid in any case :-/
+      if [ -r /dev/fd0 ] ; then
         einfo "Floppy device detected. Trying to access floppy disk."
-   #     dd if=/dev/fd0 of=/dev/null bs=512 count=1 1>>$DEBUG 2>&1
         if timeout 4 dd if=/dev/fd0 of=/dev/null bs=512 count=1 1>>$DEBUG 2>&1 ; then
            blkid /dev/fd0 1>>$DEBUG 2>&1
         fi
-     fi
-     DEVICE=$(blkid -t LABEL=GRMLCFG | head -1 | awk -F: '{print $1}')
-     config_unpack "$DEVICE" "labeled GRMCFG"
+      fi
+      DCSDEVICE=$(blkid -t LABEL=GRMLCFG | head -1 | awk -F: '{print $1}')
+    fi
+    if [ -n "$DCSDEVICE" ]; then
+      einfo "debs, config, scripts are read from $DCSDEVICE." ; eend 0
+      DCSDIR="$(< /proc/mounts awk -v DCSDEV=$DCSDEVICE '{if ($1 == DCSDEV) { print $2 }}')"
+      if [ -n "$DCSDIR" ]; then
+        einfo "$DCSDEVICE already mounted on $DCSDIR"; eend 0
+      else
+        [ -d /mnt/grml ] || mkdir /mnt/grml
+        umount /mnt/grml 1>>$DEBUG 2>&1 # make sure it is not mounted
+        mount -o ro -t auto $DCSDEVICE  /mnt/grml ; RC="$?"
+        if [[ $RC == 0 ]]; then
+          einfo "Successfully mounted $DCSDEVICE to /mnt/grml (readonly)." ; eend 0
+          eindent
+        fi
+        DCSDIR="/mnt/grml"
+      fi
+    fi
   fi
 fi
-}
-
-config_myconfig(){
 
-if checkbootparam "config" ; then
-  CONFIG="$(getbootparam 'config' 2>>$DEBUG)"
-  [ -z "$CONFIG" ] && CONFIG='config.tbz'
-  einfo "Bootoption config found. config is set to: $CONFIG"
-  eindent
-    einfo "Trying to extract configuration file ${CONFIG}:"
-    cd / && unp "${LIVECD_PATH}"/config/$CONFIG $EXTRACTOPTIONS ; eend $?
-  eoutdent
+if [ -n "$DCSDIR" ]; then
+  einfo "Debs, config, scripts will be read from $DCSDIR." ; eend 0
+elif checkbootparam 'debs' || checkbootparam 'config' || checkbootparam 'scripts'; then
+  einfo "Debs, config, scripts will be read from the live image directly." ; eend 0
 fi
+}
 
-if checkbootparam myconfig ; then
- MOUNTDEVICE="$(getbootparam 'myconfig' 2>>$DEBUG)"
- if [ -n "$MOUNTDEVICE" ]; then
-     config_unpack "$MOUNTDEVICE"
- else
-   einfo "Sorry, no device for bootoption myconfig provided. Skipping." ; eend 1
- fi # [ -n "$MOUNTDEVICE" ]
-fi # checkbootparam myconfig
 
-if checkbootparam "partconf" ; then
+config_partconf() {
+if checkbootparam 'partconf' ; then
  MOUNTDEVICE="$(getbootparam 'partconf' 2>>$DEBUG)"
  if [ -n "$MOUNTDEVICE" ]; then
    [ -d /mnt/grml ] || mkdir /mnt/grml
@@ -1989,26 +1989,69 @@ fi
 
 # {{{ /cdrom/.*-options
 config_debs(){
-if checkbootparam "debs" ; then
+if checkbootparam 'debs' ; then
    DEBS="$(getbootparam 'debs' 2>>$DEBUG)"
+   if ! echo $DEBS | grep -q '/'; then
+     # backwards compatibility: if no path is given get debs from debs/
+     DEBS="debs/$DEBS"
+   fi
    einfo "Tring to install debian package(s) ${DEBS}"
-   dpkg -i "${LIVECD_PATH}"/debs/$DEBS* ; eend $?
+   DEBS="$(eval echo ${DCSDIR}/$DEBS)"
+   dpkg -i $DEBS ; eend $?
 fi
 }
 
 config_scripts(){
-if checkbootparam "scripts" ; then
+if checkbootparam 'scripts' ; then
    SCRIPTS="$(getbootparam 'scripts' 2>>$DEBUG)"
-   [ -z "$SCRIPTS" ] && SCRIPTS='grml.sh'
-   einfo "Bootparameter scripts found. Trying to execute ${SCRIPTS}:"
-   sh -c "${LIVECD_PATH}"/scripts/$SCRIPTS ; eend $?
+   if [ -z "$SCRIPTS" ]; then
+     SCRIPTS="$(cd ${DCSDIR}/scripts; /bin/ls -1d [Gg][Rr][Mm][Ll].[Ss][Hh] 2>>$DEBUG)"
+   fi
+   if ! echo $SCRIPTS | grep -q '/'; then
+     # backwards compatibility: if no path is given get scripts from scripts/
+     SCRIPTS="scripts/$SCRIPTS"
+   fi
+   SCRIPTS="${DCSDIR}/$SCRIPTS"
+   if [ -d "$SCRIPTS" ]; then
+     einfo "Bootparameter scripts found. Trying to execute from directory ${SCRIPTS}:"
+     run-parts $SCRIPTS
+   else
+     einfo "Bootparameter scripts found. Trying to execute ${SCRIPTS}:"
+     sh -c $SCRIPTS
+   fi
 fi
 }
+
+config_config(){
+if checkbootparam 'config' ; then
+  CONFIG="$(getbootparam 'config' 2>>$DEBUG)"
+  if [ -z "$CONFIG" ]; then
+    CONFIG="$(cd ${DCSDIR}; ls -1d [Cc][Oo][Nn][Ff][Ii][Gg].[Tt][Bb][Zz] 2>>$DEBUG)"
+  fi
+  if [ -n "$CONFIG" ]; then
+    if [ -d "${DCSDIR}/${CONFIG}" ] ; then
+      einfo "Taking configuration from directory ${DCSDIR}/${CONFIG}"
+
+      cp -a ${DCSDIR}/${CONFIG}/* /
+    elif [ -f "${DCSDIR}/${CONFIG}" ]; then
+      einfo "Extracting configuration from file ${DCSDIR}/${CONFIG}"
+
+      cd /
+      unp ${DCSDIR}/${CONFIG} $EXTRACTOPTIONS ; eend $?
+    else
+      ewarn "Sorry, could not find configuration file or directory ${DCSDIR}/${FILENAME}." ; eend 1
+    fi
+  fi
+fi
+# umount /mnt/grml if it was mounted by finddcsdir
+# this doesn't really belong here
+grep -q '/mnt/grml' /proc/mounts && umount /mnt/grml
+}
 # }}}
 
 # {{{ mypath
 config_mypath(){
-if checkbootparam "mypath" ; then
+if checkbootparam 'mypath' ; then
    MY_PATH="$(getbootparam 'mypath' 2>>$DEBUG)"
    einfo "Bootparameter mypath found, adding ${MY_PATH} to /etc/grml/my_path"
    touch /etc/grml/my_path
@@ -2029,8 +2072,8 @@ fi
 
 # {{{ distcc
 config_distcc(){
-if checkbootparam "distcc" ; then
- OPTIONS="$(getbootparam distcc 2>>$DEBUG)"
+if checkbootparam 'distcc' ; then
+ OPTIONS="$(getbootparam 'distcc' 2>>$DEBUG)"
  if [ -n "$OPTIONS" ]; then
     NET=""
     INTERFACE=""
@@ -2079,8 +2122,8 @@ if checkbootparam "distcc" ; then
  fi
 fi
 
-if checkbootparam "gcc"; then
- GCC="$(getbootparam gcc 2>>$DEBUG)"
+if checkbootparam 'gcc'; then
+ GCC="$(getbootparam 'gcc' 2>>$DEBUG)"
  eindent
  einfo "Pointing /usr/bin/gcc to /usr/bin/gcc-${GCC}."
  eoutdent
@@ -2088,8 +2131,8 @@ if checkbootparam "gcc"; then
  ln -s /usr/bin/gcc-${GCC} /usr/bin/gcc ; eend $?
 fi
 
-if checkbootparam "gpp"; then
- GPP="$(getbootparam gpp 2>>$DEBUG)"
+if checkbootparam 'gpp'; then
+ GPP="$(getbootparam 'gpp' 2>>$DEBUG)"
  eindent
   einfo "Pointing /usr/bin/g++ to /usr/bin/g++-${GPP}."
   if [ -x /usr/bin/g++-${GPP} ] ; then
@@ -2113,7 +2156,7 @@ fi
 # in /etc/runlevel.conf
 config_modules(){
 MODULES_FILE=/etc/grml/modules
-if checkbootparam nomodules ; then
+if checkbootparam 'nomodules' ; then
   ewarn "Skipping loading of modules defined in ${MODULES_FILE} as requested." ; eend 0
 elif [ -z "$INSTALLED" ]; then
  if [ -r $MODULES_FILE ] ; then
@@ -2135,8 +2178,8 @@ fi
 
 # {{{ 915resolution
 config_915resolution(){
-if checkbootparam "915resolution" ; then
- OPTIONS="$(getbootparam 915resolution 2>>$DEBUG)"
+if checkbootparam '915resolution' ; then
+ OPTIONS="$(getbootparam '915resolution' 2>>$DEBUG)"
   if [ -x /usr/sbin/915resolution ]; then
     CMD=915resolution
     MODE=""
@@ -2264,7 +2307,7 @@ config_lvm(){
 
 # {{{ debnet: setup network based on an existing one found on a partition
 config_debnet(){
-if checkbootparam "debnet" ; then
+if checkbootparam 'debnet' ; then
  iszsh && setopt shwordsplit
  DEVICES="$(< /proc/partitions tail -n +3 | awk '{print "/dev/"$4}' | tr "\n" " ")"
  DEVICES="$DEVICES $(ls /dev/mapper/*)"
@@ -2296,7 +2339,7 @@ if checkbootparam "debnet" ; then
        mkdir /etc/network/run
        umount /mnt ; eend $?
      einfo "Starting network."
-       /etc/init.d/networking start ; eend $?
+       invoke-rc.d networking start ; eend $?
    else
      eerror "/etc/network/interfaces not found." ; eend 1
    fi
@@ -2323,7 +2366,7 @@ config_ipw3945() {
 
 # {{{ disable console blanking
 config_blanking(){
-if checkbootparam "noblank" ; then
+if checkbootparam 'noblank' ; then
   einfo "Bootoption noblank found. Disabling monitor blanking."
   setterm -blank 0 ; eend $?
 fi
@@ -2333,7 +2376,7 @@ fi
 # {{{ tohd= bootoption
 config_tohd()
 {
-  if checkbootparam "tohd" ; then
+  if checkbootparam 'tohd' ; then
      local TARGET="$(getbootparam 'tohd' 2>>$DEBUG)"
      if [ -z "$TARGET" ] ; then
         eerror "Error: tohd specified without any partition, can not continue." ; eend 1
@@ -2347,9 +2390,9 @@ config_tohd()
      fi
 
      if grep -q $TARGET /proc/mounts ; then
-       eerror "$TARGET already mounted, skipping execution of tohd therefore."
-       eend 1
-       return 1
+        eerror "$TARGET already mounted, skipping execution of tohd therefore."
+        eend 1
+        return 1
      fi
 
      local MOUNTDIR=$(mktemp -d)
@@ -2357,10 +2400,10 @@ config_tohd()
      if mount -o rw "$TARGET" "$MOUNTDIR" ; then
         einfo "Copyring live system to $TARGET - this might take a while"
         rsync -a --progress /live/image/live $MOUNTDIR
-       sync
-       umount "$MOUNTDIR"
+        sync
+        umount "$MOUNTDIR"
         eend $?
-       einfo "Booting with \"grml bootfrom=$TARGET\" should work now." ; eend 0
+        einfo "Booting with \"grml bootfrom=$TARGET\" should work now." ; eend 0
      else
         eerror "Error when trying to mount $TARGET, sorry."; eend 1
         return 1
@@ -2374,21 +2417,21 @@ config_tohd()
 # {{{ grml2hd: automatic installation
 config_grml2hd(){
 
-if stringinstring "BOOT_IMAGE=grml2hd " "$CMDLINE" ; then
+if checkbootparam "BOOT_IMAGE=grml2hd" ; then
 
-if checkbootparam "user" ; then
+if checkbootparam 'user' ; then
    NEWUSER=''
    NEWUSER="$(getbootparam 'user' 2>>$DEBUG)"
    sed -i "s/^NEWUSER=.*/NEWUSER=$NEWUSER/" /etc/grml2hd/config || export GRML2HD_FAIL=1
 fi
 
-if checkbootparam "filesystem" ; then
+if checkbootparam 'filesystem' ; then
    FILESYSTEM=''
    FILESYSTEM="$(getbootparam 'filesystem' 2>>$DEBUG)"
    sed -i "s/^FILESYSTEM=.*/FILESYSTEM=$FILESYSTEM/" /etc/grml2hd/config || export GRML2HD_FAIL=1
 fi
 
-if checkbootparam "partition" ; then
+if checkbootparam 'partition' ; then
    PARTITION=''
    PARTITION="$(getbootparam 'partition' 2>>$DEBUG)"
    # notice: the following checks whether the given partition is available, if not the skip
@@ -2400,7 +2443,7 @@ if checkbootparam "partition" ; then
    fi
 fi
 
-if checkbootparam "mbr" ; then
+if checkbootparam 'mbr' ; then
    BOOT_PARTITION=''
    BOOT_PARTITION="$(getbootparam 'mbr' 2>>$DEBUG)"
    sed -i "s#^BOOT_PARTITION=.*#BOOT_PARTITION=$BOOT_PARTITION#" /etc/grml2hd/config || export GRML2HD_FAIL=1
@@ -2419,14 +2462,14 @@ else
    ewarn "There was an error adjusting /etc/grml2hd/config. Skipping execution of grml2hd for security reasons." ; eend 1
 fi
 
-fi # if stringinstring "BOOT_IMAGE=grml2hd ...
+fi # if checkbootparam "BOOT_IMAGE=grml2hd ...
 }
 # }}}
 
 # {{{ debootstrap: automatic installation
 config_debootstrap(){
 
-if stringinstring "BOOT_IMAGE=debian2hd " "$CMDLINE" ; then
+if checkbootparam "BOOT_IMAGE=debian2hd" ; then
 
 einfo "Bootoption debian2hd found. Setting up environment for automatic installation via grml-debootstrap." ; eend 0
 
@@ -2437,7 +2480,7 @@ if ! [ -x /usr/sbin/grml-debootstrap ] ; then
    exit 1
 fi
 
-if checkbootparam "target" ; then
+if checkbootparam 'target' ; then
   TARGET=''
   TARGET="$(getbootparam 'target' 2>>$DEBUG)"
   # notice: the following checks whether the given partition is available, if not the skip
@@ -2452,32 +2495,32 @@ else
   exit 1
 fi
 
-if checkbootparam "grub" ; then
+if checkbootparam 'grub' ; then
   GRUB=''
   GRUB="$(getbootparam 'grub' 2>>$DEBUG)"
 fi
 
-if checkbootparam "groot" ; then
+if checkbootparam 'groot' ; then
   GROOT=''
   GROOT="$(getbootparam 'groot' 2>>$DEBUG)"
 fi
 
-if checkbootparam "release" ; then
+if checkbootparam 'release' ; then
   RELEASE=''
   RELEASE="$(getbootparam 'release' 2>>$DEBUG)"
 fi
 
-if checkbootparam "mirror" ; then
+if checkbootparam 'mirror' ; then
   MIRROR=''
   MIRROR="$(getbootparam 'mirror' 2>>$DEBUG)"
 fi
 
-if checkbootparam "boot_append" ; then
+if checkbootparam 'boot_append' ; then
   BOOT_APPEND=''
   BOOT_APPEND="$(getbootparam 'boot_append' 2>>$DEBUG)"
 fi
 
-if checkbootparam "password" ; then
+if checkbootparam 'password' ; then
   PASSWORD=''
   PASSWORD="$(getbootparam 'password' 2>>$DEBUG)"
 fi
@@ -2511,13 +2554,13 @@ screen /usr/bin/grml-debootstrap_noninteractive
 einfo "Invoking a shell, just exit to continue booting..."
 /bin/zsh
 
-fi # stringinstring "BOOT_IMAGE=debian2hd
+fi # checkbootparam "BOOT_IMAGE=debian2hd
 }
 # }}}
 
 # {{{ Support customization
 config_distri(){
-if checkbootparam "distri"; then
+if checkbootparam 'distri'; then
   DISTRI="$(getbootparam 'distri' 2>>$DEBUG)"
   if [ -r "${LIVECD_PATH}"/desktop/"$DISTRI".jpg ] ; then
      [ -n "$BOOTDEBUG" ] && einfo "Debug: bootoption distri found and file ${LIVECD_PATH}/desktop/${DISTRI} present" && eend 0