Do not check for bootoption console=ttyS as this might fail, instead assume safe...
[grml-autoconfig.git] / autoconfig.functions
index 76581c9..0b9d51d 100755 (executable)
@@ -302,7 +302,7 @@ config_language(){
  if [ -r /etc/default/locale ] ; then
     if grep -q "LANG=.*UTF" /etc/default/locale ; then
        einfo "Setting up unicode environment."
-       unicode_start 2>>$DEBUG ; eend $?
+       unicode_start >>$DEBUG 2>&1 ; eend $?
     fi
  fi
 
@@ -314,13 +314,15 @@ config_language(){
  fi
 
  # we have to set up all consoles, therefore loop it over all ttys:
- NUM_CONSOLES=$(fgconsole --next-available)
- [ -n "$NUM_CONSOLES" ] && NUM_CONSOLES=$(expr ${NUM_CONSOLES} - 1)
- [ ${NUM_CONSOLES} -eq 1 ] && NUM_CONSOLES=6
- CUR_CONSOLE=$(fgconsole)
-
+ NUM_CONSOLES=$(fgconsole --next-available 2>/dev/null)
+ if [ -n "$NUM_CONSOLES" ] ; then
+    NUM_CONSOLES=$(expr ${NUM_CONSOLES} - 1)
+    [ ${NUM_CONSOLES} -eq 1 ] && NUM_CONSOLES=6
+ fi
+ CUR_CONSOLE=$(fgconsole 2>/dev/null)
  if [ -n "$CHARMAP" ] ; then
     einfo "Running consolechars for ${CHARMAP}"
+    RC=0
     for vc in $(seq 0 ${NUM_CONSOLES}) ; do
         consolechars --tty=/dev/tty${vc} -m ${CHARMAP} ; RC=$?
     done
@@ -335,6 +337,7 @@ config_language(){
  else
     if [ -n "$CONSOLEFONT" ] ; then
        einfo "Running consolechars using ${CONSOLEFONT}"
+       RC=0
        for vc in $(seq 0 ${NUM_CONSOLES}) ; do
            consolechars --tty=/dev/tty${vc} -f $CONSOLEFONT ; RC=$?
        done
@@ -572,8 +575,38 @@ fi
 # activate serial console {{{
 config_console(){
 if checkbootparam 'console'; then
-  einfo "Bootoption for serial console detected, activating console login."
-  sed -i 's/^#grmlserial#//' /etc/inittab
+  einfo "Bootoption for serial console detected:"
+
+  local serial="$(getbootparam console)"
+  if ! echo $serial | grep -q ttyS ; then
+    ewarn "Warning: console=ttyS... not specified as last console= option. Falling back to defaults."
+    eend 0
+    local speed="9600"
+  else
+    local option="${serial##*,}"
+    # default (works for kvm & CO):
+    local speed="115200,57600,38400,19200,9600,4800,2400,1200";
+    # ... unless overriden by command line:
+    case "$option" in
+      115200*) speed=115200 ;;
+       57600*) speed=57600 ;;
+       38400*) speed=38400 ;;
+       19200*) speed=19200 ;;
+        9600*) speed=9600 ;;
+        4800*) speed=4800 ;;
+        2400*) speed=2400 ;;
+        1200*) speed=1200 ;;
+    esac
+  fi
+
+  eindent
+    einfo "Setting baud rate to ${speed}."
+    sed -i "s/%serialspeed%/$speed/" /etc/inittab ;  eend $?
+
+    einfo "Activating console login."
+    sed -i 's/^#grmlserial#//' /etc/inittab ; eend $?
+  eoutdent
+
   /sbin/telinit q
   eend $?
 fi
@@ -1359,7 +1392,7 @@ else
            einfo "Loading modules ${MODULE}"
            modprobe "$MODULE" >>$DEBUG || modprobe "$MODULE_FALLBACK" >>$DEBUG
            RC=$?
-           if [[ $RC == 0 ]]; then
+           if [[ "$RC" == 0 ]]; then
               eend 0
            else
               SKIP_CPU_GOVERNOR=1
@@ -1373,6 +1406,7 @@ else
 
      if [ -z "$SKIP_CPU_GOVERNOR" ] ; then
         einfo "Loading cpufreq_ondemand, setting ondemand governor"
+        RC=0
         if modprobe cpufreq_ondemand ; RC=$? ; then
            for file in $(find /sys/devices/system/cpu/ -name scaling_governor 2>/dev/null) ; do
                echo ondemand > $file
@@ -1832,20 +1866,19 @@ if checkbootparam 'startx' && ! echo "$CMDLINE" | grep -q 'startx.*nostartx' ; t
    else
      einfo "Window manager ${WHITE}${WINDOWMANAGER}${NORMAL} found as bootoption." && eend 0
    fi
-   einfo "Changing to runlevel 5 for starting grml-x ${WINDOWMANAGER}. Just exit X windows system to get full featured consoles."
+   einfo "Setting up and invoking grml-x ${WINDOWMANAGER}. Just exit X windows system to get full featured consoles."
    config_userfstab || fstabuser='grml'
  cat>|/etc/init.d/xstartup<<EOF
 #!/bin/sh
-# su - $fstabuser -c 'grml-x "$WINDOWMANAGER"'
-sudo -u $fstabuser -i /usr/bin/grml-x $WINDOWMANAGER >>$DEBUG
+su $fstabuser -c "/usr/bin/grml-x $WINDOWMANAGER"
 EOF
    chmod 755 /etc/init.d/xstartup
 
    # adjust inittab for xstartup
    if grep -q '^6:' /etc/inittab ; then
-      sed -i 's|^6:.*|6:2345:respawn:/bin/zsh --login -c "/etc/init.d/xstartup ; /bin/zsh"|' /etc/inittab
+      sed -i 's|^6:.*|6:2345:respawn:/bin/zsh --login -c "/etc/init.d/xstartup ; /usr/bin/zsh-login" >/dev/tty6 2>\&1 </dev/tty6|' /etc/inittab
    else # just append tty6 to inittab if no definition is present:
-      echo '6:2345:respawn:/bin/zsh --login -c "/etc/init.d/xstartup ; /bin/zsh"' >> /etc/inittab
+      echo '6:2345:respawn:/bin/zsh --login -c "/etc/init.d/xstartup ; /usr/bin/zsh-login" >/dev/tty6 2>&1 < /dev/tty6' >> /etc/inittab
    fi
 
    /sbin/telinit q ; eend $?