Added tag 0.7.32 for changeset 59efdc12a7fe586902720d76bbb0943fc29a6c72
[grml-autoconfig.git] / autoconfig.functions
index 06e5168..45604c9 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.
 # 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: Mit Jul 04 12:02:35 CEST 2007 [mika]
+# Latest change: Fre Nov 16 08:45:53 CET 2007 [mika]
 ################################################################################
 
 # {{{ path, variables, signals, umask, zsh
 ################################################################################
 
 # {{{ path, variables, signals, umask, zsh
@@ -96,7 +96,7 @@ CMDLINE="$(cat /proc/cmdline)"
 
 # {{{ Check if we are running from the grml-CD or HD
 INSTALLED=""
 
 # {{{ Check if we are running from the grml-CD or HD
 INSTALLED=""
-[ -e /GRML/etc/grml_cd ] || INSTALLED="yes"
+[ -e /etc/grml_cd ] || INSTALLED="yes"
 
 # testcd
 TESTCD=""
 
 # testcd
 TESTCD=""
@@ -157,11 +157,6 @@ fi
 }
 # }}}
 
 }
 # }}}
 
-# {{{ Check if we are in interactive startup mode
-INTERACTIVE=""
-stringinstring "BOOT_IMAGE=expert " "$CMDLINE" && INTERACTIVE="yes"
-# }}}
-
 # {{{ set firmware timeout via bootparam
 config_fwtimeout(){
  if checkbootparam fwtimeout ; then
 # {{{ set firmware timeout via bootparam
 config_fwtimeout(){
  if checkbootparam fwtimeout ; then
@@ -262,10 +257,12 @@ config_language(){
 
    # write keyboard related variables to file for later use
    [ -d /etc/sysconfig ] || mkdir /etc/sysconfig
 
    # write keyboard related variables to file for later use
    [ -d /etc/sysconfig ] || mkdir /etc/sysconfig
-   echo "KEYTABLE=\"$KEYTABLE\""          > /etc/sysconfig/keyboard
-   echo "XKEYBOARD=\"$XKEYBOARD\""       >> /etc/sysconfig/keyboard
-   echo "KDEKEYBOARD=\"$KDEKEYBOARD\""   >> /etc/sysconfig/keyboard
-   echo "KDEKEYBOARDS=\"$KDEKEYBOARDS\"" >> /etc/sysconfig/keyboard
+   if ! [ -e /etc/sysconfig/keyboard ] ; then
+      echo "KEYTABLE=\"$KEYTABLE\""          > /etc/sysconfig/keyboard
+      echo "XKEYBOARD=\"$XKEYBOARD\""       >> /etc/sysconfig/keyboard
+      echo "KDEKEYBOARD=\"$KDEKEYBOARD\""   >> /etc/sysconfig/keyboard
+      echo "KDEKEYBOARDS=\"$KDEKEYBOARDS\"" >> /etc/sysconfig/keyboard
+   fi
  fi
 
  [ -r /etc/sysconfig/keyboard ] && . /etc/sysconfig/keyboard
  fi
 
  [ -r /etc/sysconfig/keyboard ] && . /etc/sysconfig/keyboard
@@ -273,39 +270,44 @@ config_language(){
  # activate unicode console if running within utf8 environment
  if [ -r /etc/default/locale ] ; then
     if grep -q "LANG=.*UTF" /etc/default/locale ; then
  # activate unicode console if running within utf8 environment
  if [ -r /etc/default/locale ] ; then
     if grep -q "LANG=.*UTF" /etc/default/locale ; then
-       if checkgrmlsmall && [ -z "$INSTALLED" ] ; then
-          ewarn "Not runnning unicode_start: grml-small with reduced language support detected." ; eend 0
-       else
-          einfo "Setting up unicode environment."
-          unicode_start 2>>$DEBUG ; eend $?
-       fi
+       einfo "Setting up unicode environment."
+       unicode_start 2>>$DEBUG ; eend $?
     fi
  fi
 
  # Set default keyboard before interactive setup
  if [ -n "$KEYTABLE" ] ; then
     fi
  fi
 
  # Set default keyboard before interactive setup
  if [ -n "$KEYTABLE" ] ; then
-  einfo "Running loadkeys for ${WHITE}${KEYTABLE}${NORMAL} in background"
-  loadkeys -q $KEYTABLE &
-  eend $?
+    einfo "Running loadkeys for ${WHITE}${KEYTABLE}${NORMAL} in background"
+    loadkeys -q $KEYTABLE &
+    eend $?
  fi
 
  # we have to set up all consoles, therefore loop it over all ttys:
  fi
 
  # we have to set up all consoles, therefore loop it over all ttys:
- NUM_CONSOLES=`fgconsole --next-available`
- NUM_CONSOLES=`expr ${NUM_CONSOLES} - 1`
+ NUM_CONSOLES=$(fgconsole --next-available)
+ NUM_CONSOLES=$(expr ${NUM_CONSOLES} - 1)
  [ ${NUM_CONSOLES} -eq 1 ] && NUM_CONSOLES=6
  [ ${NUM_CONSOLES} -eq 1 ] && NUM_CONSOLES=6
+ CUR_CONSOLE=$(fgconsole)
+
  if [ -n "$CHARMAP" ] ; then
     einfo "Running consolechars for ${CHARMAP}"
     for vc in `seq 0 ${NUM_CONSOLES}`  ; do
         consolechars --tty=/dev/tty${vc} -m ${CHARMAP} ; RC=$?
     done
  if [ -n "$CHARMAP" ] ; then
     einfo "Running consolechars for ${CHARMAP}"
     for vc in `seq 0 ${NUM_CONSOLES}`  ; do
         consolechars --tty=/dev/tty${vc} -m ${CHARMAP} ; RC=$?
     done
+    [ -n "$CUR_CONSOLE" ] && chvt $CUR_CONSOLE
     eend $RC
  fi
     eend $RC
  fi
- if [ -n "$CONSOLEFONT" ] ; then
-    einfo "Running consolechars using ${CONSOLEFONT}"
-    for vc in `seq 0 ${NUM_CONSOLES}`  ; do
-        consolechars --tty=/dev/tty${vc} -f $CONSOLEFONT || consolechars --tty=/dev/tty${vc} -d
-    done
-    eend $?
+
+ if checkbootparam noconsolefont ; then
+    ewarn "Skipping setting console font as requested on boot commandline." ; eend 0
+ else
+    if [ -n "$CONSOLEFONT" ] ; then
+       einfo "Running consolechars using ${CONSOLEFONT}"
+       for vc in `seq 0 ${NUM_CONSOLES}`  ; do
+           consolechars --tty=/dev/tty${vc} -f $CONSOLEFONT ; RC=$?
+       done
+       [ -n "$CUR_CONSOLE" ] && chvt $CUR_CONSOLE
+       eend $?
+    fi
  fi
 
  eoutdent
  fi
 
  eoutdent
@@ -433,22 +435,17 @@ fi
 }
 # }}}
 
 }
 # }}}
 
-# update_progress {{{
-update_progress(){
-  # be sure we are non-blocking
-  (echo "$1" > /etc/sysconfig/progress) &
-}
-# }}}
-
 # {{{ timezone
 config_timezone(){
  # don't touch the files if running from harddisk:
  if [ -z "$INSTALLED" ]; then
 # {{{ timezone
 config_timezone(){
  # don't touch the files if running from harddisk:
  if [ -z "$INSTALLED" ]; then
-  einfo "Setting timezone."
-  KTZ="$(getbootparam tz 2>>$DEBUG)"
-  [ -f "/usr/share/zoneinfo/$KTZ" ] && TZ="$KTZ"
-  rm -f /etc/localtime
-  cp "/usr/share/zoneinfo/$TZ" /etc/localtime && eend 0
+    KTZ="$(getbootparam tz 2>>$DEBUG)"
+    if [ -n "$KTZ" ] ; then
+       einfo "Setting timezone."
+       [ -f "/usr/share/zoneinfo/$KTZ" ] && TZ="$KTZ"
+       rm -f /etc/localtime
+       cp "/usr/share/zoneinfo/$TZ" /etc/localtime ; eend $?
+    fi
  fi
 }
 # }}}
  fi
 }
 # }}}
@@ -588,21 +585,33 @@ config_fix_passwd(){
 # {{{ CD Checker
 config_testcd(){
 if [ -n "$TESTCD" ]; then
 # {{{ CD Checker
 config_testcd(){
 if [ -n "$TESTCD" ]; then
-  einfo "Checking CD data integrity as requested by '${WHITE}testcd${NORMAL}' boot option."
-  einfo "Reading files and checking against GRML/md5sums, this may take a while..."
-  echo -n "${RED}"
-  ( cd /cdrom/GRML/ ; rm -f /tmp/md5sum.log ; md5sum -c md5sums 2>&1 | tee /tmp/md5sum.log )
-  if [ "$?" = "0" ]; then
-    echo " ${GREEN}Everything looks OK${NORMAL}"
-    else
-    echo "${RED} *** CHECKSUM FAILED FOR THESE FILES:                          ***"
-    egrep -v '(^md5sum:|OK$)' /tmp/md5sum.log
-    echo "${RED} *** DATA ON YOUR CD MEDIUM IS POSSIBLY INCOMPLETE OR DAMAGED, ***${NORMAL}"
-    echo "${RED} *** OR YOUR COMPUTER HAS BAD RAM.                             ***${NORMAL}"
-    echo -n "${CYAN}Hit return to contine, or press the reset button to quit.${NORMAL}\a\a\a "
-    read a
-  fi
-  eend 0
+   einfo "Checking CD data integrity as requested by '${WHITE}testcd${NORMAL}' boot option."
+   einfo "Reading files and checking against GRML/md5sums, this may take a while..."
+   echo -n "${RED}"
+
+   # /linuxrc grml version:
+   [ -d /cdrom/GRML ]      && TESTCD_PATH=/cdrom/GRML
+   # live-initramfs version:
+   [ -d /live/image/GRML ] && TESTCD_PATH=/live/image/GRML
+
+   if [ -n "$TESTCD_PATH" ] ; then
+      ( cd "$TESTCD_PATH" ; rm -f /tmp/md5sum.log ; md5sum -c md5sums 2>&1 | tee /tmp/md5sum.log ; RC=$? )
+   else
+      echo "${RED} *** Error: Could not find md5sum file.                           ***"
+   fi
+
+   if [ "$RC" = "0" ]; then
+      einfo "Everything looks OK" ; eend 0
+   else
+      eerror 'Checksum failed for theses files:' ; eend 1
+      egrep -v '(^md5sum:|OK$)' /tmp/md5sum.log
+      eerror 'Data on the grml medium is possibly incomplete/damaged or...'
+      eerror '... RAM of your computer is broken.' ; eend 1
+      einfon "Hit return to continue, or press the reset button to quit."
+     read a
+   fi
+
+   eend 0
 fi
 }
 # }}}
 fi
 }
 # }}}
@@ -700,7 +709,7 @@ if checkbootparam "blacklist" ; then
     echo "alias     $BLACK off" >> /etc/modprobe.d/grml
     echo "# end   entry generated by config_blacklist of grml-autoconfig" >> /etc/modprobe.d/grml ; eend $?
   else
     echo "alias     $BLACK off" >> /etc/modprobe.d/grml
     echo "# end   entry generated by config_blacklist of grml-autoconfig" >> /etc/modprobe.d/grml ; eend $?
   else
-   eerror "No given module for blacklist found. Blacklisting will not work therefor."
+   eerror "No given module for blacklist found. Blacklisting will not work therefore."
   fi
  else
   ewarn "Backlisting via bootoption does not work on harddisk installations." ; eend 1
   fi
  else
   ewarn "Backlisting via bootoption does not work on harddisk installations." ; eend 1
@@ -716,9 +725,11 @@ fi
 config_acpi_apm(){
 if [ -d /proc/acpi ]; then
   if checkbootparam "noacpi"; then
 config_acpi_apm(){
 if [ -d /proc/acpi ]; then
   if checkbootparam "noacpi"; then
-    ewarn "Skipping ACPI Bios detection as requested on boot commandline." ; eend 0
+    ewarn "Skipping ACPI Bios detection as requested via noacpi on boot commandline." ; eend 0
+  elif checkbootparam "nogrmlacpi" ; then
+    ewarn "Skipping ACPI Bios detection as requested via nogrmlacpi on boot commandline." ; eend 0
   else
   else
-    einfo "ACPI Bios found, activating modules: "
+    einfo "ACPI Bios found, activating modules (disable via bootoption noacpi / nogrmlacpi): "
     eindent
     found=""
     for a in /lib/modules/$KERNEL/kernel/drivers/acpi/*; do
     eindent
     found=""
     for a in /lib/modules/$KERNEL/kernel/drivers/acpi/*; do
@@ -735,10 +746,10 @@ if [ -d /proc/acpi ]; then
     else
       ewarn "(none)" ; eend 1
     fi
     else
       ewarn "(none)" ; eend 1
     fi
-    if ! [ -S /var/run/acpid.socket ] ; then
+    if ! ps x | grep -q /usr/sbin/acpid ; then
       if ! [ -r /var/run/dbus/pid ] ; then
         einfo "Starting acpi daemon."
       if ! [ -r /var/run/dbus/pid ] ; then
         einfo "Starting acpi daemon."
-        /etc/init.d/acpid start >>$DEBUG ; eend $?
+        /etc/init.d/acpid start 1>>$DEBUG 2>&1 ; eend $?
       else
         eerror "acpid error: it seems you are running d-bus/hal, but acpid needs to be started before d-bus."
         eerror "Solution: please activate acpid via /etc/runlevel.conf"
       else
         eerror "acpid error: it seems you are running d-bus/hal, but acpid needs to be started before d-bus."
         eerror "Solution: please activate acpid via /etc/runlevel.conf"
@@ -866,24 +877,8 @@ fi
 
 # {{{ Interactive configuration
 config_interactive(){
 
 # {{{ Interactive configuration
 config_interactive(){
-if [ -n "$INTERACTIVE" ] ; then
-einfo "Entering interactive configuration second stage."
-
-  echo " ${GREEN}Your console keyboard defaults to: ${MAGENTA}${KEYTABLE}"
-  echo -n "${CYAN}Do you want to (re)configure your console keyboard?${NORMAL} [Y/n] "
-  read a
-  [ "$a" != "n" ] && /usr/sbin/dpkg-reconfigure console-data ; eend $?
-
-  echo -n "${CYAN}Do you want to (re)configure your soundcard?${NORMAL} [Y/n] "
-  read a
-  [ "$a" != "n" ] && alsaconf && ( exec aumix -m 0 >>$DEBUG 2>&1 & ) ; eend $?
-
-  echo -n "${CYAN}Do you want to (re)configure your graphics (X11) subsystem?${NORMAL} [Y/n] "
-  read a
-  [ "$a" != "n" ] && xorgcfg -textmode ; eend $?
-  echo " ${GREEN}Interactive configuration finished. Everything else should be fine for now.${NORMAL}"
-fi
-eend 0
+  ewarn "config_interactive is deprecated nowadays."
+  ewarn "Please set CONFIG_INTERACTIVE='no' in /etc/grml/autoconfig" ; eend 0
 }
 # }}}
 
 }
 # }}}
 
@@ -994,12 +989,12 @@ fi
 config_fstab(){
 
 NOSWAP="yes" # we do not use swap by default!
 config_fstab(){
 
 NOSWAP="yes" # we do not use swap by default!
-if checkbootparam "swap" -o checkbootparam "anyswap" ; then
+if checkbootparam "swap" || checkbootparam "anyswap" ; then
    NOSWAP=''
    checkbootparam "anyswap" && export ANYSWAP='yes' || export ANYSWAP=""
 fi
 
    NOSWAP=''
    checkbootparam "anyswap" && export ANYSWAP='yes' || export ANYSWAP=""
 fi
 
-if checkbootparam "nofstab" -o 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)"
   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)"
@@ -1169,6 +1164,10 @@ else
     sleep 1
     eend 0
   done
     sleep 1
     eend 0
   done
+  if [ -n "$INSTALLED" ] ; then
+     ewarn 'If you want to disable automatic DHCP requests set CONFIG_DHCP=no in /etc/grml/autoconfig.'
+     eend 0
+  fi
 fi
 }
 # }}}
 fi
 }
 # }}}
@@ -1251,7 +1250,7 @@ else
 
   # Disclaimer: sorry for the tons of if/then/else... but this makes sure we use:
   # * it only if we have the according kernel modules available
 
   # Disclaimer: sorry for the tons of if/then/else... but this makes sure we use:
   # * it only if we have the according kernel modules available
-  # * cpufreq only on laptops (check via /usr/sbin/laptop-detect)
+  # * cpufreq only on laptops (check via /usr/sbin/laptop-detect) and not inside Virtual Box
   # * current version of /etc/init.d/loadcpufreq from Debian (to stay in sync)
   #   -> parse output of the initscript and output it according to our look'n'feel
   # * our own cpufreq-detect.sh if /etc/init.d/loadcpufreq isn't present
   # * current version of /etc/init.d/loadcpufreq from Debian (to stay in sync)
   #   -> parse output of the initscript and output it according to our look'n'feel
   # * our own cpufreq-detect.sh if /etc/init.d/loadcpufreq isn't present
@@ -1259,6 +1258,13 @@ else
     ewarn "Skipping cpufreq setup as module dependencies are not fulfilled." ; eend 1
   else
     if /usr/sbin/laptop-detect 1>/dev/null 2>&1 ; then
     ewarn "Skipping cpufreq setup as module dependencies are not fulfilled." ; eend 1
   else
     if /usr/sbin/laptop-detect 1>/dev/null 2>&1 ; then
+       # Virtual Box supports ACPI and laptop-detect returns with '0', so check for it:
+       if [ -r /proc/acpi/battery/BAT0/info ] ; then
+          if grep -q 'OEM info:                innotek' /proc/acpi/battery/BAT0/info ; then
+             einfo 'Virtual Box detected, skipping cpufreq setup.' ; eend 0
+             return 0
+          fi
+       fi
        einfo "Detected Laptop - trying to use cpu frequency scaling:"
        eindent
        if [ -x /etc/init.d/loadcpufreq ] ; then
        einfo "Detected Laptop - trying to use cpu frequency scaling:"
        eindent
        if [ -x /etc/init.d/loadcpufreq ] ; then
@@ -1459,6 +1465,11 @@ if ! [ -x /usr/bin/aumix ] ; then
   eerror "aumix binary not available. Can not set sound volumes therefore." ; eend 1
 else
 
   eerror "aumix binary not available. Can not set sound volumes therefore." ; eend 1
 else
 
+  if ! [ -r /proc/asound/cards ] ; then
+     ewarn "No soundcard present, skipping mixer settings therefore." ; eend 0
+     return
+  fi
+
   if checkbootparam vol ; then
     VOL="$(getbootparam 'vol' 2>>$DEBUG)"
     if [ -z "$VOL" ] ; then
   if checkbootparam vol ; then
     VOL="$(getbootparam 'vol' 2>>$DEBUG)"
     if [ -z "$VOL" ] ; then
@@ -1494,10 +1505,18 @@ else
             amixer set Front ${VOL}% 1>/dev/null
          fi
       fi
             amixer set Front ${VOL}% 1>/dev/null
          fi
       fi
-      ERROR=$(aumix -w $VOL -v $VOL -p $VOL -m $VOL 2>&1) ; RC=$?
+      # by default assume '0' as volume for microphone:
+      if checkbootparam micvol ; then
+         MICVOL="$(getbootparam 'micvol' 2>>$DEBUG)"
+      else
+         MICVOL=0
+      fi
+
+      # finally set the volumes:
+      ERROR=$(aumix -w $VOL -v $VOL -p $VOL -m $MICVOL 2>&1) ; RC=$?
       if [ -n "$ERROR" ] ; then
          eindent
       if [ -n "$ERROR" ] ; then
          eindent
-         eerror "Problem setting mixer volumes: $ERROR"
+         eerror "Problem setting mixer volumes: $ERROR (no soundcard?)"
          eoutdent
       fi
       eend $RC
          eoutdent
       fi
       eend $RC
@@ -1513,11 +1532,10 @@ 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
   ewarn "Skipping check for AC97 modem controller as requested on boot commandline." ; eend 0
 else
   if [ -x /etc/init.d/sl-modem-daemon ] ; then
-   if lspci | grep Intel | grep -q "AC'97 Modem Controller" ; then
-     einfo "AC97 modem controller detected. Starting sl-modem-daemon in background."
-     /etc/init.d/sl-modem-daemon start >>$DEBUG &
-     eend 0
-   fi
+     if lspci | grep Intel | grep -q "AC'97 Modem Controller" ; then
+        einfo "AC97 modem controller detected. Start it running 'Start sl-modem-daemon'."
+        eend 0
+     fi
   fi
 fi
 }
   fi
 fi
 }
@@ -1741,7 +1759,7 @@ fi
 }
 
 config_automount(){
 }
 
 config_automount(){
-if checkbootparam noautoconfig -o checkbootparam forensic ; then
+if checkbootparam noautoconfig || checkbootparam forensic ; then
   ewarn "Skipping running automount of device(s) labeled GRMLCFG as requested." ; eend 0
 else
  if [ -z "$INSTALLED" ] ; then
   ewarn "Skipping running automount of device(s) labeled GRMLCFG as requested." ; eend 0
 else
  if [ -z "$INSTALLED" ] ; then
@@ -2022,8 +2040,8 @@ fi
 config_swraid(){
   if [ -z "$INSTALLED" ] ; then
   # notice: checkbootparam "forensic" is just for users who don't know how to really use the bootoption
 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 'noswraid' -o \
-     checkbootparam 'forensic' -o checkbootparam 'raid=noautodetect' ; then
+  if checkbootparam 'noraid'   || checkbootparam 'noswraid' -o \
+     checkbootparam 'forensic' || checkbootparam 'raid=noautodetect' ; then
      ewarn "Skipping SW-RAID code as requested on boot commandline." ; eend 0
   else
     if ! [ -x /sbin/mdadm ] ; then
      ewarn "Skipping SW-RAID code as requested on boot commandline." ; eend 0
   else
     if ! [ -x /sbin/mdadm ] ; then
@@ -2094,10 +2112,11 @@ config_lvm(){
   if checkbootparam 'nolvm' ; then
      ewarn "Skipping LVM code as requested on boot commandline." ; eend 0
   else
   if checkbootparam 'nolvm' ; then
      ewarn "Skipping LVM code as requested on boot commandline." ; eend 0
   else
-    if ! [ -x /sbin/lvm -a -x /etc/init.d/lvm2 -a -x /sbin/lvdisplay ] ; then
+    # Debian etch provides /etc/init.d/lvm only, newer suites provide /etc/init.d/lvm2
+    if ! [ -x /sbin/lvm -a -x /sbin/lvdisplay ] || ! [ -x /etc/init.d/lvm2 -o -x /etc/init.d/lvm ] ; then
        eerror "LVM not available, can not execute it." ; eend 1
     else
        eerror "LVM not available, can not execute it." ; eend 1
     else
-       if lvdisplay 1>/dev/null 2>&1 ; then
+       if lvdisplay 2>&1 | grep -v 'No volume groups found' 1>/dev/null 2>&1 ; then
           einfo "You seem to have logical volumes (LVM) on your system."
           eindent
           einfo "Just run 'Start lvm2' to activate them or boot using 'lvm' as bootoption for autostart."
           einfo "You seem to have logical volumes (LVM) on your system."
           eindent
           einfo "Just run 'Start lvm2' to activate them or boot using 'lvm' as bootoption for autostart."
@@ -2160,6 +2179,19 @@ fi
 }
 # }}}
 
 }
 # }}}
 
+# {{{ check for broken ipw3945 driver which causes problems (especially on hd install)
+config_ipw3945() {
+  if grep -q ipw3945 /proc/modules ; then
+     if ! iwconfig 2>/dev/null| grep -qe 'IEEE 802' -qe 'unassociated' ; then
+        ewarn "Broken ipw3945 network interface found, reloading module."
+        rmmod ipw3945
+        modprobe ipw3945
+        eend $?
+     fi
+  fi
+}
+# }}}
+
 # {{{ disable console blanking
 config_blanking(){
 if checkbootparam "noblank" ; then
 # {{{ disable console blanking
 config_blanking(){
 if checkbootparam "noblank" ; then
@@ -2337,4 +2369,4 @@ config_keyboard(){
 # }}}
 
 ## END OF FILE #################################################################
 # }}}
 
 ## END OF FILE #################################################################
-# vim:foldmethod=marker expandtab ai ft=zsh
+# vim:foldmethod=marker expandtab ai ft=zsh shiftwidth=3