summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'livecd-functions.sh')
-rwxr-xr-xlivecd-functions.sh206
1 files changed, 206 insertions, 0 deletions
diff --git a/livecd-functions.sh b/livecd-functions.sh
new file mode 100755
index 0000000..d35721c
--- /dev/null
+++ b/livecd-functions.sh
@@ -0,0 +1,206 @@
+#!/bin/bash
+# Copyright 1999-2004 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo/src/livecd-tools/livecd-functions.sh,v 1.1 2005/04/12 21:25:21 wolf31o2 Exp $
+
+# Global Variables:
+# CDBOOT -- is booting off CD
+# LIVECD_CONSOLE -- console that is specified to kernel commandline
+# -- (ttyS0, tty1, etc). Only defined if passed to kernel
+# LIVECD_CONSOLE_BAUD -- console baudrate specified
+# LIVECD_CONSOLE_PARITY -- console parity specified
+# LIVECD_CONSOLE_DATABITS -- console databits specified
+
+livecd_parse_opt() {
+ case "$1" in
+ *\=*)
+ echo "$1" | cut -f2 -d=;;
+ esac
+}
+
+livecd_console_settings() {
+ # scan for a valid baud rate
+ case "$1" in
+ 300*)
+ LIVECD_CONSOLE_BAUD=300
+ ;;
+ 600*)
+ LIVECD_CONSOLE_BAUD=600
+ ;;
+ 1200*)
+ LIVECD_CONSOLE_BAUD=1200
+ ;;
+ 2400*)
+ LIVECD_CONSOLE_BAUD=2400
+ ;;
+ 4800*)
+ LIVECD_CONSOLE_BAUD=4800
+ ;;
+ 9600*)
+ LIVECD_CONSOLE_BAUD=9600
+ ;;
+ 14400*)
+ LIVECD_CONSOLE_BAUD=14400
+ ;;
+ 19200*)
+ LIVECD_CONSOLE_BAUD=19200
+ ;;
+ 28800*)
+ LIVECD_CONSOLE_BAUD=28800
+ ;;
+ 38400*)
+ LIVECD_CONSOLE_BAUD=38400
+ ;;
+ 57600*)
+ LIVECD_CONSOLE_BAUD=57600
+ ;;
+ 115200*)
+ LIVECD_CONSOLE_BAUD=115200
+ ;;
+ esac
+ if [ "${LIVECD_CONSOLE_BAUD}" = "" ]
+ then
+ # If it's a virtual console, set baud to 38400, if it's a serial
+ # console, set it to 9600 (by default anyhow)
+ case ${LIVECD_CONSOLE} in
+ tty[0-9])
+ LIVECD_CONSOLE_BAUD=38400
+ ;;
+ *)
+ LIVECD_CONSOLE_BAUD=9600
+ ;;
+ esac
+ fi
+ export LIVECD_CONSOLE_BAUD
+
+ # scan for a valid parity
+ # If the second to last byte is a [n,e,o] set parity
+ local parity
+ parity=`echo $1 | rev | cut -b 2-2`
+ case "$parity" in
+ [neo])
+ LIVECD_CONSOLE_PARITY=$parity
+ ;;
+ esac
+ export LIVECD_CONSOLE_PARITY
+
+ # scan for databits
+ # Only set databits if second to last character is parity
+ if [ "${LIVECD_CONSOLE_PARITY}" != "" ]
+ then
+ LIVECD_CONSOLE_DATABITS=`echo $1 | rev | cut -b 1`
+ fi
+ export LIVECD_CONSOLE_DATABITS
+ return 0
+}
+
+
+livecd_read_commandline() {
+ local CMDLINE
+
+# Line to be used for testing only. The formatting of the console=
+# prompt can be found in /usr/src/linux/Documentation/serial-console.txt
+# possible cmdline could look like this: CMDLINE="cdroot console=ttyS0,9600n8"
+
+ CMDLINE=`cat /proc/cmdline`
+
+ for x in ${CMDLINE}
+ do
+ case "${x}" in
+ cdroot)
+ CDBOOT="yes"
+ export CDBOOT
+ ;;
+ cdroot\=*)
+ CDBOOT="yes"
+ export CDBOOT
+ ;;
+ console\=*)
+ local live_console
+ live_console=`livecd_parse_opt "${x}"`
+
+ # Parse the console line. No options specified if
+ # no comma
+ LIVECD_CONSOLE=`echo ${live_console} | cut -f1 -d,`
+ if [ "${LIVECD_CONSOLE}" = "" ]
+ then
+ # no options specified
+ LIVECD_CONSOLE=${live_console}
+ else
+ # there are options, we need to parse them
+ local livecd_console_opts
+ livecd_console_opts=`echo ${live_console} | cut -f2 -d,`
+ livecd_console_settings ${livecd_console_opts}
+ fi
+ export LIVECD_CONSOLE
+ ;;
+ esac
+ done
+ return 0
+}
+
+
+livecd_fix_inittab() {
+ if [ "${CDBOOT}" = "" ]
+ then
+ return 1
+ fi
+
+ # Comment out current getty settings
+ sed -i -e '/^c[0-9]/ s/^/#/' /etc/inittab
+
+ # SPARC & HPPA console magic
+ if [ "${HOSTTYPE}" = "sparc" -o "${HOSTTYPE}" = "hppa" -o "${HOSTTYPE}" = "ppc64" ]
+ then
+ # Mount openprom tree for user debugging purposes
+ if [ "${HOSTTYPE}" = "sparc" ]
+ then
+ mount -t openpromfs none /proc/openprom
+ fi
+
+ # SPARC serial port A, HPPA mux / serial
+ if [ -c "/dev/tts/0" ]
+ then
+ LIVECD_CONSOLE_BAUD=`stty -F /dev/tts/0 speed`
+ echo "s0:12345:respawn:/sbin/agetty -nl /bin/bashlogin ${LIVECD_CONSOLE_BAUD} tts/0 vt100" >> /etc/inittab
+ fi
+ # HPPA software PDC console (K-models)
+ if [ "${LIVECD_CONSOLE}" = "ttyB0" ]
+ then
+ mknod /dev/ttyB0 c 11 0
+ LIVECD_CONSOLE_BAUD=`stty -F /dev/ttyB0 speed`
+ echo "b0:12345:respawn:/sbin/agetty -nl /bin/bashlogin ${LIVECD_CONSOLE_BAUD} ttyB0 vt100" >> /etc/inittab
+ fi
+ # FB / STI console
+ if [ -c "/dev/vc/1" ]
+ then
+ for x in 1 2 3 4 5 6
+ do
+ echo "c${x}:12345:respawn:/sbin/mingetty --noclear --autologin root tty${x}" >> /etc/inittab
+ done
+ fi
+ if [ -c "/dev/hvc/0" ]
+ then
+ ln -s /dev/hvc/0 /dev/hvc0
+ echo "c0:12345:respawn:/sbin/agetty -nl /bin/bashlogin 9600 hvc0 vt320" >> /etc/inittab
+ fi
+ # The rest...
+ else
+ if [ "${LIVECD_CONSOLE}" = "tty0" -o "${LIVECD_CONSOLE}" = "" ]
+ then
+ for x in 1 2 3 4 5 6
+ do
+ echo "c${x}:12345:respawn:/sbin/agetty -nl /bin/bashlogin 38400 tty${x} linux" >> /etc/inittab
+ done
+ else
+ if [ -c "/dev/hvc/0" ]
+ then
+ ln -s /dev/hvc/0 /dev/hvc0
+ echo "c0:12345:respawn:/sbin/agetty -nl /bin/bashlogin 9600 hvc0 vt320" >> /etc/inittab
+ else
+ echo "c0:12345:respawn:/sbin/agetty -nl /bin/bashlogin ${LIVECD_CONSOLE_BAUD} ${LIVECD_CONSOLE} vt100" >> /etc/inittab
+ fi
+ fi
+ fi
+ return 0
+}