Added tag 0.6.9 for changeset 912e6ba95eff1de9e134e85e5bef6272e8cf0080
[grml-autoconfig.git] / autoconfig.functions
index e69b041..7714ef2 100755 (executable)
@@ -4,7 +4,7 @@
 # Authors:       grml-team (grml.org), (c) Klaus Knopper <knopper@knopper.net>, (c) Michael Prokop <mika@grml.org>
 # Bug-Reports:   see http://grml.org/bugs/
 # License:       This file is licensed under the GPL v2.
-# Latest change: Fre Nov 10 00:33:15 CET 2006 [mika]
+# Latest change: Mon Nov 27 21:02:23 CET 2006 [mika]
 ################################################################################
 
 # {{{ path, variables, signals, umask, zsh
@@ -89,6 +89,7 @@ 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 /cdrom/bootparams/ ] && CMDLINE="$CMDLINE $(cat /cdrom/bootparams/* | tr '\n' ' ')"
 # }}}
@@ -196,7 +197,7 @@ config_language(){
 
  # set default to 'en' in live-cd mode if $LANGUAGE is not yet set:
  if [ -z "$INSTALLED" ] ; then
-    [ -n "$LANGUAGE" ] || LANGUAGE='en'
+    [ -n "$LANGUAGE" ] || LANGUAGE='en-utf8'
  fi
 
  # if bootoption lang is used update /etc/default/locale, otherwise *not*!
@@ -208,10 +209,11 @@ config_language(){
  if [ -z "$CONSOLEFONT" ] ; 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
-          CONSOLEFONT='Lat15-Terminus16'
+       # if [ -r /usr/share/consolefonts/Lat15-Terminus16.psf.gz ] ; then
+       if [ -r /usr/share/consolefonts/Uni3-Terminus14.psf.gz ] ; then
+          CONSOLEFONT='Uni3-Terminus14'
        else
-          ewarn "/usr/share/consolefonts/Lat15-Terminus16.psf.gz not available. Please upgrade package console-terminus." ; eend 1
+          ewarn "/usr/share/consolefonts/Uni3-Terminus14.psf.gz not available. Please upgrade package console-terminus." ; eend 1
        fi
     fi
  fi
@@ -279,9 +281,9 @@ config_language(){
      consolechars -f $CONSOLEFONT || consolechars -d
      eend $?
 
-     if [ -n "$UTF8" ] ; then
-        einfo "Notice: run 'filterm - dynafont' in your shell to enable a unicode capable console."
-     fi
+#     if [ -n "$UTF8" ] ; then
+#        einfo "Notice: run 'filterm - dynafont' in your shell to enable a unicode capable console."
+#     fi
   fi
 
   # we have to set up all consoles, therefore loop it over all ttys:
@@ -315,7 +317,13 @@ config_hostname(){
 
 # fstabuser (needed when running from harddisk with username != grml {{{
 config_userfstab(){
-  fstabuser=$(getent passwd 1000 | cut -d: -f1)
+  [ -r /etc/grml/autoconfig ] && . /etc/grml/autoconfig
+  if [ -n "$CONFIG_FSTAB_USER" ] ; then
+     fstabuser="$CONFIG_FSTAB_USER"
+  else
+     fstabuser=$(getent passwd 1000 | cut -d: -f1)
+  fi
+  # if not yet set fall back to default 'grml' user
   [ -n "$fstabuser" ] || fstabuser='grml'
 }
 # }}}
@@ -328,8 +336,20 @@ config_time(){
   checkbootparam utc >>$DEBUG 2>&1 && UTC="-u"
   checkbootparam gmt >>$DEBUG 2>&1 && UTC="-u"
   # hwclock uses the TZ variable
-  export TZ
-  hwclock $UTC -s
+  if [ -r /etc/default/locale ] ; then
+     . /etc/default/locale
+  else
+     TZ=Europe/Vienna
+  fi
+  ERROR=$(TZ="$TZ" hwclock $UTC -s 2>&1) ; RC=$?
+  if [ -n "$ERROR" ] ; then
+     eindent
+     ERROR=$(TZ="$TZ" hwclock $UTC -s --directisa 2>&1)
+     if [ -n "$ERROR" ] ; then
+        eerror "Problem running hwclock: $ERROR" ; eend 1
+     fi
+     eoutdent
+  fi
  fi
 }
 # }}}
@@ -897,7 +917,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, maybe not on hd-installations
+# Notice: Already done by linuxrc, but make sure it's done also on harddisk-installed systems
 config_dma(){
 if checkbootparam "nodma"; then
   ewarn "Skipping DMA accelleration as requested on boot commandline." ; eend 0
@@ -920,9 +940,9 @@ fi
 # {{{ Start creating /etc/fstab with HD partitions and USB SCSI devices now
 config_fstab(){
 
-NOSWAP=""
-if checkbootparam "noswap" -o checkbootparam "forensic" ; then
-   NOSWAP="yes"
+NOSWAP="yes" # we do not use swap by default!
+if checkbootparam "swap" -o checkbootparam "anyswap" ; then
+   NOSWAP=''
 fi
 
 if checkbootparam "nofstab" -o checkbootparam "forensic" ; then
@@ -943,8 +963,8 @@ else
   fi
 fi
 # Scan for swap, config, homedir
-if [ -z "$NOSWAP" -o -z "$INSTALLED" ]; then
-  einfo "Checking for swap partition(s)."
+if [ -z "$NOSWAP" ]; then
+   einfo "Searching for swap partition(s) as requested."
 fi
 GRML_IMG=""
 GRML_SWP=""
@@ -957,7 +977,9 @@ if [ -n "$partitions" ]; then
   case "$f" in swap)
    eindent
    if [ -n "$NOSWAP" ]; then
-    ewarn "Ignoring swap partition ${WHITE}$p${NORMAL} as requested." ; eend 0
+      if [ -z "$INSTALLED" ] ; then
+         ewarn "Ignoring swap partition ${WHITE}$p${NORMAL}. (Force usage via boot option 'swap', or execute grml-swapon)" ; eend 0
+      fi
    else
      case "$(dd if=$p bs=1 count=6 skip=4086 2>/dev/null)" in
              S1SUSP|S2SUSP|pmdisk|[zZ]*)
@@ -1890,55 +1912,64 @@ fi
 config_swraid(){
   if [ -z "$INSTALLED" ] ; then
   # notice: checkbootparam "forensic" is just for users who don't know how to really use the bootoption
-  if checkbootparam "noraid" -o checkbootparam "forensic" -o checkbootparam "raid=noautodetect" ; then
-     ewarn "Skipping search for SW-RAID as requested on boot commandline." ; eend 0
+  if checkbootparam 'noraid'   -o checkbootparam 'noswraid' -o \
+     checkbootparam 'forensic' -o checkbootparam 'raid=noautodetect' ; then
+     ewarn "Skipping SW-RAID code as requested on boot commandline." ; eend 0
   else
     if ! [ -x /sbin/mdadm ] ; then
        eerror "mdadm not available, can not execute it." ; eend 1
     else
 
+       # if ! egrep -qv '^(MAILADDR.*|#.*|)$' /etc/mdadm/mdadm.conf 2>>$DEBUG ; then
+       # find out whether we have a valid configuration file already
        if ! grep -q ARRAY /etc/mdadm/mdadm.conf 2>>$DEBUG ; then
-         einfo "Creating /etc/mdadm/mdadm.conf"
-         [ -r /etc/mdadm/mdadm.conf ] && mv /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf.old
-         /usr/share/mdadm/mkconf > /etc/mdadm/mdadm.conf ; eend $?
-       else
-         ewarn "/etc/mdadm/mdadm.conf looks like a configured mdadm setup, will not touch it." ; eend 0
+          einfo "Creating /etc/mdadm/mdadm.conf for use with mdadm."
+          [ -r /etc/mdadm/mdadm.conf ] && mv /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf.old
+          MDADM_MAILADDR__='root' /usr/share/mdadm/mkconf > /etc/mdadm/mdadm.conf ; eend $?
+        else
+          ewarn "/etc/mdadm/mdadm.conf looks like a configured mdadm setup, will not touch it." ; eend 0
        fi
 
-       einfo "Searching for software RAID arrays (disable via bootoption noraid):"
-       eindent
-         IFSOLD=${IFS:-}
-         IFS='
+       if ! checkbootparam 'swraid' ; then 
+          eindent
+          einfo "Just run 'Start mdadm-raid' to assemble md arrays or boot using 'swraid' as bootoption for autostart."
+          eoutdent
+       else
+          einfo "Bootoption swraid found. Searching for software RAID arrays:"
+          eindent
+           IFSOLD=${IFS:-}
+           IFS='
 '
-         for line in $(mdadm --assemble --scan --auto=yes --symlink=no 2>&1) ; do
-             case $line in
-               *'No arrays found'*)
-                 ewarn "$line" ; eend 0
-                 ;;
-               *)
-                 einfo "$line" ; eend 0
-                 ;;
-             esac
-         done
-         IFS=$IFSOLD
-       eoutdent
+           for line in $(mdadm --assemble --scan --auto=yes --symlink=no 2>&1) ; do
+               case $line in
+                 *'No arrays found'*)
+                   ewarn "$line" ; eend 0
+                   ;;
+                 *)
+                   einfo "$line" ; eend 0
+                   ;;
+               esac
+           done
+           IFS=$IFSOLD
+         eoutdent
 
-       if [ -r /proc/mdstat ] ; then
-          eindent
-          MDSTAT=$(grep '^md[0-9]' /proc/mdstat)
-          if [ -z "$MDSTAT" ] ; then
-             ewarn "No active arrays found" ; eend 0
-          else
-             IFSOLD=${IFS:-}
-             IFS='
+         if [ -r /proc/mdstat ] ; then
+            eindent
+            MDSTAT=$(grep '^md[0-9]' /proc/mdstat)
+            if [ -z "$MDSTAT" ] ; then
+               ewarn "No active arrays found" ; eend 0
+            else
+               IFSOLD=${IFS:-}
+               IFS='
 '
-             for line in $(grep '^md[0-9]' /proc/mdstat) ; do
-                 einfo "active arrays: $line" ; eend 0
-             done
-             IFS=$IFSOLD
-          fi
-          eoutdent
-       fi
+               for line in $(grep '^md[0-9]' /proc/mdstat) ; do
+                   einfo "active arrays: $line" ; eend 0
+               done
+               IFS=$IFSOLD
+            fi
+            eoutdent
+         fi # /proc/mdstat
+       fi # bootoption swraid
 
      fi # is /sbin/mdadm executable?
   fi # check for bootoptions