Drop .hgtags
[grml-autoconfig.git] / autoconfig.functions
index d375308..af4ce8a 100755 (executable)
@@ -362,21 +362,28 @@ config_time(){
  if [ -z "$INSTALLED" ]; then
     # The default hardware clock timezone is stated as representing local time.
     UTC="--localtime"
-    checkbootparam utc >>$DEBUG 2>&1 && UTC="-u"
-    checkbootparam gmt >>$DEBUG 2>&1 && UTC="-u"
+    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
+    grep -q -i "^UTC=yes" /etc/default/rcS && UTC="-u"
     # hwclock uses the TZ variable
     KTZ="$(getbootparam tz 2>>$DEBUG)"
     [ -z "$KTZ" ] && [ -r /etc/timezone ] && KTZ=$(cat /etc/timezone)
-    [ -z "$KTZ" ] && KTZ=Europe/Vienna
+    if [ ! -f "/usr/share/zoneinfo/$KTZ" ] ; then
+       ewarn "Warning: unknown timezone $KTZ" ; eend 1
+       KTZ="Europe/Vienna"
+       ewarn "Falling back to timezone $KTZ" ; eend 0
+    fi
 
     if ! [ -r /dev/rtc ] ; then
       ewarn "Warning: realtime clock not available, trying to execute hwclock anyway." ; eend 0
     fi
 
-    ERROR=$(TZ="$TZ" hwclock $UTC -s 2>&1 | head -1) ; RC=$?
+    ERROR=$(TZ="$KTZ" hwclock $UTC -s 2>&1 | head -1) ; RC=$?
     if [ -n "$ERROR" ] ; then
        eindent
-       ERROR=$(TZ="$TZ" hwclock $UTC -s --directisa 2>&1 | head -1)
+       ERROR=$(TZ="$KTZ" hwclock $UTC -s --directisa 2>&1 | head -1)
        if [ -n "$ERROR" ] ; then
           eerror "Problem running hwclock: $ERROR" ; eend 1
        fi
@@ -465,10 +472,21 @@ config_timezone(){
  if [ -z "$INSTALLED" ]; then
     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 $?
+       if [ ! -f "/usr/share/zoneinfo/$KTZ" ]
+       then
+          ewarn "Warning: unknown timezone $KTZ"; eend 0
+       else
+          einfo "Setting timezone."
+          # update debconf
+          area=$(echo $KTZ | cut -d '/' -f1)
+          zone=$(echo $KTZ | cut -d '/' -f2)
+          echo "tzdata tzdata/Areas       select $area" | debconf-set-selections
+          echo "tzdata tzdata/Zones/$area select $zone" | debconf-set-selections
+          # update files
+          echo $KTZ > /etc/timezone
+          rm -f /etc/localtime
+          cp "/usr/share/zoneinfo/$KTZ" /etc/localtime ; eend $?
+       fi
     fi
  fi
 }
@@ -863,19 +881,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