Release new version 0.9.14.
[grml-autoconfig.git] / autoconfig.functions
index 0b9d51d..7f8bc9d 100755 (executable)
@@ -356,6 +356,11 @@ config_language(){
 config_hostname(){
  if checkbootparam 'hostname' ; then
   HOSTNAME="$(getbootparam 'hostname' 2>>$DEBUG)"
+  if [ -z "$HOSTNAME" ] && [ -x /usr/bin/random-hostname ] ; then
+     einfo "Generating random hostname as no hostname was specified."
+     HOSTNAME="$(/usr/bin/random-hostname)"
+     eend $?
+  fi
   einfo "Setting hostname to $HOSTNAME as requested."
   grml-hostname $HOSTNAME >>$DEBUG ; RC=$?
   [ "$RC" = "0" ] && hostname $HOSTNAME
@@ -575,39 +580,58 @@ fi
 # activate serial console {{{
 config_console(){
 if checkbootparam 'console'; then
+  local line
+  local ws
+  ws='  '
+
   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 ;;
+  line="$CMDLINE x "
+  this=""
+  line="${line#*[$ws]}"
+  local telinitq=""
+  while [ -n "$line" ]; do
+    case "$this" in
+      console=*)
+        local serial="$this"
+        local device="${this%%,*}"
+        local device="${device##*=}"
+        if ! echo $serial | grep -q ttyS ; then
+          ewarn "Warning: console=ttyS... not specified as last console= option. Falling back to set up ttyS0/9600."
+          sed -i "/^#grmlserial#/iT0:23:respawn:/bin/bash -c \"/sbin/getty -L /dev/ttyS0 -l /usr/bin/zsh-login 9600 vt100 || sleep 30\"" /etc/inittab
+          eend 0
+        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 "Activating console login on device ${device} with speed ${speed}."
+          local number="${device#ttyS}"
+          sed -i "/^#grmlserial#/iT$number:23:respawn:/bin/bash -c \"/sbin/getty -L $device -l /usr/bin/zsh-login $speed vt100 || sleep 30\"" /etc/inittab
+          eend $?
+          telinitq="1"
+        eoutdent
+        ;;
     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
+    this="${line%%[$ws]*}"
+    line="${line#*[$ws]}"
+  done
 
-  /sbin/telinit q
+  if [ -n "$telinitq" ]; then
+    /sbin/telinit q
+  fi
   eend $?
 fi
 }
@@ -1813,7 +1837,7 @@ config_netscript() {
 
   if get_remote_file ${CONFIG} ${SCRIPTFILE} ; then
     chmod +x ${SCRIPTFILE}
-    einfo "Running ${WHITE}${SCRIPTFILE}${NORMAL}:" && ${SCRIPTFILE} ; eend $?
+    einfo "Running ${WHITE}${SCRIPTFILE}${NORMAL}:" && NETSCRIPT=${CONFIG} ${SCRIPTFILE} ; eend $?
   fi
 
  fi
@@ -2007,6 +2031,7 @@ fi
 # {{{ /cdrom/.*-options
 config_debs(){
 if checkbootparam 'debs' ; then
+   iszsh && setopt localoptions shwordsplit
    DEBS="$(getbootparam 'debs' 2>>$DEBUG)"
    if ! echo $DEBS | grep -q '/'; then
      # backwards compatibility: if no path is given get debs from debs/
@@ -2404,7 +2429,7 @@ config_lvm(){
 # {{{ debnet: setup network based on an existing one found on a partition
 config_debnet(){
 if checkbootparam 'debnet' ; then
- iszsh && setopt shwordsplit
+ iszsh && setopt localoptions shwordsplit
  DEVICES="$(< /proc/partitions tail -n +3 | awk '{print "/dev/"$4}' | tr "\n" " ")"
  DEVICES="$DEVICES $(ls /dev/mapper/*)"
  FOUND_DEBNET=""