[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Boot from USB



Hi Everybody,
            I quite new at this and wanted to make a USB bootable
distro using knoppix's excellent hardware detection features and
scripts .

I have hardcoded the USB drive which i'll be using in the USB
pendrives MBR in this attached script S00knoppix-autoconfig in which i
have added a mount command in line 1104 ...

Is this the proper way to go about making a USB bootable knoppix or is
there a better way ..?

I want to make it userfriendly so that one i build the initial system
it should not as me questions about where the config file or swap file
is it should just boot up.... thats my aim ...

Regards
Deepak

Hack Hack Hack
#!/bin/bash
# /KNOPPIX/etc/init.d/knoppix-autoconfig
# Basic system configuration and hardware setup
# (C) Klaus Knopper <knopper@knopper.net> 2005

PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin"
export PATH

umask 022

# Ignore these signals: INT, TERM, SEGV
trap "" 2 3 11

# ANSI COLORS
CRE="
"
NORMAL=""
# RED: Failure or error message
RED=""
# GREEN: Success message
GREEN=""
# YELLOW: Descriptions
YELLOW=""
# BLUE: System messages
BLUE=""
# MAGENTA: Found devices or drivers
MAGENTA=""
# CYAN: Questions
CYAN=""
# BOLD WHITE: Hint
WHITE=""

### Utility Function(s)

# Simple shell grep
stringinfile(){
case "$(cat $2)" in *$1*) return 0;; esac
return 1
}

# same for strings
stringinstring(){
case "$2" in *$1*) return 0;; esac
return 1
}

# Reread boot command line; echo last parameter's argument or return false.
getbootparam(){
stringinstring " $1=" "$CMDLINE" || return 1
result="${CMDLINE##*$1=}"
result="${result%%[ 	]*}"
echo "$result"
return 0
}

# Check boot commandline for specified option
checkbootparam(){
stringinstring " $1" "$CMDLINE"
return "$?"
}

# Try to mount this filesystem read-only, without or with encryption
# trymount device|file mountpoint
trymount(){
# Check if already mounted
case "$(cat /proc/mounts)" in *\ $2\ *) return 0;; esac
# Create target directory if it doesn't exist yet
[ -d "$2" ] || mkdir -p "$2"
RC=""
# Apparently, mount-aes DOES autodetect AES loopback files.
[ -b "$1" ] && { mount -t auto -o ro "$1" "$2" 2>/dev/null; RC="$?"; }
# We need to mount crypto-loop files with initial rw support
[ -f "$1" ] && { mount -t auto -o loop,rw "$1" "$2" 2>/dev/null; RC="$?"; }
# Mount succeeded?
[ "$RC" = "0" ] && return 0
echo ""
echo "${CYAN}Filesystem not autodetected, trying to mount $1 with AES256 encryption${NORMAL}"
sleep 2
a="y"
while [ "$a" != "n" -a "$a" != "N" ]; do
# We need to mount crypto-loop files with initial rw support
 PW="$(dialog --title "Encrypted Partition?" --stdout --insecure --passwordbox "Please enter decryption password:" 8 40)"
 [ "$?" != "0" ] && break
 mount -p0 -t auto -o loop,rw,encryption=AES256 "$1" "$2" <<EOT
$PW
EOT
 [ "$?" = "0" ] && { unset PW; return 0; }
 unset PW
 echo -n "${RED}Mount failed, retry? [Y/n] ${NORMAL}"
 read a
done
return 1
}

### EOF utility functions

# We need /proc here, so mount it in case we skipped the bootfloppy
[ -f /proc/version ] || mount -t proc /proc /proc 2>/dev/null

# No kernel messages while probing modules
echo "0" > /proc/sys/kernel/printk

# Kernel 2.6
[ -d /sys/devices ] || mount -t sysfs /sys /sys 2>/dev/null

# Read in boot parameters
# This should work, but doesn't with Kernel 2.4.19-rc1
# CMDLINE="$(</proc/cmdline)" This should work, but doesn't with Kernel 2.4.19-rc1
# This works.
CMDLINE="$(cat /proc/cmdline)"


# Check if we are in interactive startup mode
INTERACTIVE=""
stringinstring "BOOT_IMAGE=expert " "$CMDLINE" && INTERACTIVE="yes"

# Check if we want the config floppy
MYCONF=""
MYCONFDIR=""
case "$CMDLINE" in *\ myconf*|*\ custom*|*\ config*) MYCONF="yes"; ;; esac
# Compatibility
case "$CMDLINE" in *\ floppyconf*) MYCONF="yes"; MYCONFDIR="/media/fd0" ;; esac
if [ -n "$MYCONF" ]; then
# Check for given config directory
[ -n "$MYCONFDIR" ] || MYCONFDIR="$(getbootparam 'myconfig')"
[ -n "$MYCONFDIR" ] || MYCONFDIR="$(getbootparam 'myconf')"
[ -n "$MYCONFDIR" ] || MYCONFDIR="$(getbootparam 'custom')"
[ -n "$MYCONFDIR" ] || MYCONFDIR="$(getbootparam 'config')"
# Bugfix for myconfig=/media/fd0
case "$MYCONFDIR" in *floppy*|*fd0*) MYCONFDIR="/media/fd0" ;; esac
fi

### localization
# Allow language specification via commandline. The default language
# will be overridden via "lang=de" boot commandline
LANGUAGE="$(getbootparam lang 2>/dev/null)"
[ -n "$LANGUAGE" ] || LANGUAGE="de"

# The default language/keyboard to use. This CANNOT be autoprobed.
# Most of these variables will be used to generate the KDE defaults
# and will be inserted into /etc/sysconfig/* below.
case "$LANGUAGE" in
de)
# German version
COUNTRY="de"
LANG="de_DE@euro"
KEYTABLE="de-latin1-nodeadkeys"
XKEYBOARD="de"
KDEKEYBOARD="de(nodeadkeys)"
CHARSET="iso8859-15"
# Additional KDE Keyboards
KDEKEYBOARDS="us,fr"
TZ="Europe/Berlin"
;;
# Belgian version
be)
LANGUAGE="be"
COUNTRY="be"
LANG="C"
KEYTABLE="be2-latin1"
XKEYBOARD="be"
KDEKEYBOARD="be"
CHARSET="iso8859-15"
# Additional KDE Keyboards
KDEKEYBOARDS="us,de(nodeadkeys),fr"
TZ="Europe/Brussels"
;;
# Bulgarian version
bg)
LANGUAGE="bg"
COUNTRY="bg"
LANG="bg_BG"
KEYTABLE="bg"
XKEYBOARD="bg"
KDEKEYBOARD="bg"
CHARSET="microsoft-cp1251"
# Additional KDE Keyboards
KDEKEYBOARDS="us,de(nodeadkeys),fr"
TZ="Europe/Sofia"
;;
# Swiss version (basically de with some modifications)
ch)
LANGUAGE="de"
COUNTRY="ch"
LANG="de_CH"
KEYTABLE="sg-latin1"
XKEYBOARD="ch"
KDEKEYBOARD="ch"
CHARSET="iso8859-15"
# Additional KDE Keyboards
KDEKEYBOARDS="de(nodeadkeys),us,fr"
TZ="Europe/Zurich"
;;
cn)
# Simplified Chinese version
COUNTRY="cn"
LANG="zh_CN.GB2312"
KEYTABLE="us"
XKEYBOARD="us"
KDEKEYBOARD="us"
CHARSET="gb2312.1980-0"
# Additional KDE Keyboards
KDEKEYBOARDS="us,de(nodeadkeys),fr"
XMODIFIERS="@im=Chinput"
TZ="Asia/Shanghai"
;;
# Czech version
cs|cz)
LANGUAGE="cs"
COUNTRY="cs"
LANG="cs_CZ"
KEYTABLE="cz-lat2"
XKEYBOARD="cs"
KDEKEYBOARD="cz"
CHARSET="iso8859-2"
# Additional KDE Keyboards
KDEKEYBOARDS="us,de(nodeadkeys),fr"
TZ="Europe/Prague"
CONSOLEFONT="iso02g"
;;
dk|da)
# Dansk version
COUNTRY="dk"
LANG="da_DK"
# Workaround: "dk" broken in gettext, use da:da_DK
LANGUAGE="da:da_DK"
# Keytable "dk" is correct.
KEYTABLE="dk"
XKEYBOARD="dk"
KDEKEYBOARD="dk"
CHARSET="iso8859-15"
# Additional KDE Keyboards
KDEKEYBOARDS="dk,de(nodeadkeys),us,fr"
TZ="Europe/Copenhagen"
;;
es)
# Spanish version
COUNTRY="es"
LANG="es_ES@euro"
KEYTABLE="es"
XKEYBOARD="es"
KDEKEYBOARD="es"
CHARSET="iso8859-15"
# Additional KDE Keyboards
KDEKEYBOARDS="de(nodeadkeys),us,fr"
TZ="Europe/Madrid"
;;
fi|fi-utf8|fi-utf-8|utf8|utf-8)
# Finnish UTF-8 version
# courtesy of Tapani Räikkönen
LANGUAGE="fi_FI:en"
COUNTRY="FI"
LANG="fi_FI.UTF-8"
KEYTABLE="fi-latin1"
XKEYBOARD="fi"
KDEKEYBOARD="fi"
CHARSET="utf8"
# Additional KDE Keyboards
KDEKEYBOARDS="se,us"
TZ="Europe/Helsinki"
;;
fr)
# French version
COUNTRY="fr"
LANG="fr_FR@euro"
KEYTABLE="fr"
XKEYBOARD="fr"
KDEKEYBOARD="fr"
CHARSET="iso8859-15"
# Additional KDE Keyboards
KDEKEYBOARDS="de(nodeadkeys),us"
TZ="Europe/Paris"
;;
hu)
# Hungarian version
COUNTRY="hu"
LANG="hu_HU"
LANGUAGE="hu_HU"
KEYTABLE="hu"
XKEYBOARD="hu"
KDEKEYBOARD="hu"
CHARSET="iso-8859-2"
# Additional KDE Keyboards
KDEKEYBOARDS="us,de(nodeadkeys)"
TZ="Europe/Budapest"
CONSOLEFONT="iso02g"
;;
he|il)
# Hebrew version
LANGUAGE="he"
COUNTRY="il"
LANG="he_IL"
KEYTABLE="us"
XKEYBOARD="us"
KDEKEYBOARD="il"
CHARSET="iso8859-8"
# Additional KDE Keyboards
KDEKEYBOARDS="us,fr,de(nodeadkeys)"
TZ="Asia/Jerusalem"
;;
ie)
# Irish (English) version
COUNTRY="ie"
LANG="en_IE@euro"
KEYTABLE="uk"
XKEYBOARD="uk"
KDEKEYBOARD="gb"
CHARSET="iso8859-15"
#Additional KDE Keyboards
KDEKEYBOARDS="us,de(nodeadkeys),es,fr,it"
TZ="Europe/Dublin"
;;
it)
# Italian version
COUNTRY="it"
LANG="it_IT@euro"
KEYTABLE="it"
XKEYBOARD="it"
KDEKEYBOARD="it"
CHARSET="iso8859-15"
# Additional KDE Keyboards
KDEKEYBOARDS="fr,us,de(nodeadkeys)"
TZ="Europe/Rome"
;;
ja)
# (limited) Japanese version
COUNTRY="jp"
LANG="ja_JP"
LANGUAGE="ja"
KEYTABLE="us"
XKEYBOARD="us"
KDEKEYBOARD="us"
CHARSET="iso8859-15"
# Additional KDE Keyboards
KDEKEYBOARDS="fr,us,de(nodeadkeys)"
TZ="Asia/Tokyo"
;;
nl)
# Dutch version
COUNTRY="nl"
LANG="nl_NL@euro"
KEYTABLE="us"
XKEYBOARD="us"
KDEKEYBOARD="en_US"
CHARSET="iso8859-15"
# Additional KDE Keyboards
KDEKEYBOARDS="nl,de(nodeadkeys),fr"
TZ="Europe/Amsterdam"
;;
pl)
# Polish version
COUNTRY="pl"
LANG="pl_PL"
KEYTABLE="pl"
XKEYBOARD="pl"
KDEKEYBOARD="pl"
CHARSET="iso8859-2"
# Additional KDE Keyboards
KDEKEYBOARDS="de(nodeadkeys),us,fr"
TZ="Europe/Warsaw"
CONSOLEFONT="iso02g"
;;
ru)
# Russian version
COUNTRY="ru"
LANG="ru_RU.KOI8-R"
KEYTABLE="ru"
XKEYBOARD="ru"
KDEKEYBOARD="ru"
CHARSET="koi8-r"
CONSOLEFONT="Cyr_a8x16"
# Additional KDE Keyboards
KDEKEYBOARDS="de(nodeadkeys),us,fr"
TZ="Europe/Moscow"
;;
sk)
# Slovak version (guessed)
COUNTRY="sk"
LANG="sk"
KEYTABLE="sk-qwerty"
XKEYBOARD="sk"
KDEKEYBOARD="sk"
CHARSET="iso8859-2"
# Additional KDE Keyboards
KDEKEYBOARDS="us,de(nodeadkeys)"
TZ="Europe/Bratislava"
CONSOLEFONT="iso02g"
;;
# Slovenian keyboard
sl)
LANGUAGE="sl"
COUNTRY="si"
LANG="sl_SI"
KEYTABLE="slovene"
XKEYBOARD="sl"
KDEKEYBOARD="si"
CHARSET="iso8859-2"
# Additional KDE Keyboards
KDEKEYBOARDS="us,de(nodeadkeys)"
TZ="Europe/Ljubljana"
CONSOLEFONT="iso02g"
;;
tr)
# Turkish version (guessed)
COUNTRY="tr"
LANG="tr_TR"
KEYTABLE="tr_q-latin5"
XKEYBOARD="tr"
KDEKEYBOARD="tr"
CHARSET="iso8859-9"
# Additional KDE Keyboards
KDEKEYBOARDS="us,de(nodeadkeys),fr"
TZ="Europe/Istanbul"
;;
tw)
# Traditional Chinese version (thanks to Chung-Yen Chang)
COUNTRY="tw"
LANG="zh_TW.Big5"
LANGUAGE="zh_TW.Big5"
KEYTABLE="us"
XKEYBOARD="us"
KDEKEYBOARD="us"
# CHARSET="big5-0"
CHARSET="iso8859-1"
# Additional KDE Keyboards
KDEKEYBOARDS="us"
XMODIFIERS="@im=xcin"
TZ="Asia/Taipei"
;;
uk)
# British version
COUNTRY="uk"
LANG="en_GB"
LANGUAGE="en"
KEYTABLE="uk"
XKEYBOARD="uk"
KDEKEYBOARD="gb"
CHARSET="iso8859-1"
# Additional KDE Keyboards
KDEKEYBOARDS="us"
TZ="Europe/London"
;;
*)
# American version
LANGUAGE="us"
COUNTRY="us"
LANG="C"
KEYTABLE="us"
XKEYBOARD="us"
KDEKEYBOARD="us"
CHARSET="iso8859-1"
# Additional KDE Keyboards
KDEKEYBOARDS="de(nodeadkeys),fr"
TZ="America/New_York"
;;
esac

# Export it now, so error messages get translated, too
export LANG COUNTRY CHARSET

# Allow keyboard override by boot commandline
KKEYBOARD="$(getbootparam keyboard 2>/dev/null)"
[ -n "$KKEYBOARD" ] && KEYTABLE="$KKEYBOARD"
KXKEYBOARD="$(getbootparam xkeyboard 2>/dev/null)"
if [ -n "$KXKEYBOARD" ]; then
XKEYBOARD="$KXKEYBOARD"
KDEKEYBOARD="$KXKEYBOARD"
elif [ -n "$KKEYBOARD" ]; then
XKEYBOARD="$KKEYBOARD"
KDEKEYBOARD="$KKEYBOARD"
fi

# Also read desired desktop, if any
DESKTOP="$(getbootparam desktop 2>/dev/null)"

# Allow only supported windowmanagers
# Actually, this check is useless because it's done again in 45xsession. -KK
# case "$DESKTOP" in gnome|enlightenment|kde|larswm|xfce|xfce4|lg3d|ratpoison|blackbox|openbox|windowmaker|wmaker|icewm|fluxbox|twm|nx|rdp|kiosk) ;; *) DESKTOP="kde"; ;; esac
[ -n "$DESKTOP" ] || DESKTOP="kde" 

# Check if we are running from the Knoppix-CD or HD
INSTALLED=""
[ -e /KNOPPIX/bin/ash ] || INSTALLED="yes"

TESTCD=""
checkbootparam "testcd" >/dev/null 2>&1 && TESTCD="yes"
checkbootparam "testdvd" >/dev/null 2>&1 && TESTCD="yes"

# Set hostname
hostname Knoppix

# Set clock (Local time is more often used than GMT, so it is default)
UTC=""
checkbootparam utc >/dev/null 2>&1 && UTC="-u"
checkbootparam gmt >/dev/null 2>&1 && UTC="-u"

KTZ="$(getbootparam tz 2>/dev/null)"
[ -f "/usr/share/zoneinfo/$KTZ" ] && TZ="$KTZ"
# hwclock uses the TZ variable
export TZ
hwclock $UTC -s

[ -n "$KERNEL" ] || read a b KERNEL relax >/dev/null 2>&1 </proc/version
echo "${GREEN}Configuring for Linux Kernel ${YELLOW}$KERNEL${GREEN}.${NORMAL}"

# Enable DMA for all IDE drives if requested only
# This is also done by linuxrc now.
# However, for a harddisk-installed version, we are doing it again here.
DMA=""
checkbootparam "dma" && DMA="yes"
checkbootparam "nodma" && DMA=""
if [ -n "$DMA" ]; then
 for d in $(cd /proc/ide 2>/dev/null && echo hd[a-z]); do
  if test -d /proc/ide/$d; then
   if egrep -q 'using_dma[ \t]+0' /proc/ide/$d/settings 2>/dev/null; then
    MODEL="$(cat /proc/ide/$d/model 2>/dev/null)"
    test -z "$MODEL" && MODEL="[GENERIC IDE DEVICE]"
    echo "${BLUE}Enabling DMA acceleration for: ${MAGENTA}$d 	${YELLOW}[${MODEL}]${NORMAL}"
    echo "using_dma:1" >/proc/ide/$d/settings
   fi
  fi
 done
fi


if [ -n "$INSTALLED" ]; then
echo "${BLUE}Running from HD, checking filesystems...${NORMAL}"
# We are running from HD, so a file system check is recommended
[ -f /etc/init.d/checkroot.sh ] && /etc/init.d/checkroot.sh
[ -f /etc/init.d/checkfs.sh ]   && /etc/init.d/checkfs.sh
fi

# / must be read-write in any case, starting from here
mount -o remount,rw / 2>/dev/null

if [ -n "$INSTALLED" ]; then
echo -n "${BLUE}Running from HD, regenerate ld.so.cache and modules.dep...${NORMAL}"
# Regenerate ld.so.cache and module dependencies on HD
ldconfig ; depmod -a 2>/dev/null
# knoppix-installer bug workaround
chmod 1777 /tmp 2>/dev/null
echo ""
fi

if checkbootparam "splash" >/dev/null 2>&1 && [ -z "$TESTCD" ]; then
    RES=$(fbresolution 2>/dev/null)
    [ "$RES" = "1024x768" ] && [ -x /etc/init.d/splash.sh ] && /etc/init.d/splash.sh start
fi

update_progress()
{
	# be sure we are non-blocking
	(echo "$1" > /etc/sysconfig/progress) &
}

rm -f /etc/localtime
cp "/usr/share/zoneinfo/$TZ" /etc/localtime

# Delete obsolete links and files before starting autoconfig
if ! checkbootparam "nohwsetup"; then
rm -f /dev/cdrom* /dev/cdwriter* /dev/mouse* /dev/modem* /dev/scanner* \
      /etc/sysconfig/i18n /etc/sysconfig/keyboard /etc/sysconfig/knoppix \
      /etc/environment \
      2>/dev/null
fi

# Write KNOPPIX config files for other scripts to parse
# Standard variables/files
echo "LANG=\"$LANG\""                  > /etc/sysconfig/i18n
echo "COUNTRY=\"$COUNTRY\""           >> /etc/sysconfig/i18n
echo "LANGUAGE=\"$LANGUAGE\""         >> /etc/sysconfig/i18n
echo "CHARSET=\"$CHARSET\""           >> /etc/sysconfig/i18n
echo "XMODIFIERS=\"$XMODIFIERS\""     >> /etc/sysconfig/i18n
#echo "TZ=\"$TZ\""                     >> /etc/sysconfig/i18n

# Default Keyboard layout for console and X
echo "KEYTABLE=\"$KEYTABLE\""          > /etc/sysconfig/keyboard
echo "XKEYBOARD=\"$XKEYBOARD\""       >> /etc/sysconfig/keyboard
echo "KDEKEYBOARD=\"$KDEKEYBOARD\""   >> /etc/sysconfig/keyboard
echo "KDEKEYBOARDS=\"$KDEKEYBOARDS\"" >> /etc/sysconfig/keyboard

# Desired desktop
echo "DESKTOP=\"$DESKTOP\""            > /etc/sysconfig/desktop

# Write all, including non-standard variables, to /etc/sysconfig/knoppix
echo "LANG=\"$LANG\""                  > /etc/sysconfig/knoppix
echo "COUNTRY=\"$COUNTRY\""           >> /etc/sysconfig/knoppix
echo "LANGUAGE=\"$LANGUAGE\""         >> /etc/sysconfig/knoppix
echo "CHARSET=\"$CHARSET\""           >> /etc/sysconfig/knoppix
echo "KEYTABLE=\"$KEYTABLE\""         >> /etc/sysconfig/knoppix
echo "XKEYBOARD=\"$XKEYBOARD\""       >> /etc/sysconfig/knoppix
echo "KDEKEYBOARD=\"$KDEKEYBOARD\""   >> /etc/sysconfig/knoppix
echo "KDEKEYBOARDS=\"$KDEKEYBOARDS\"" >> /etc/sysconfig/knoppix
echo "DESKTOP=\"$DESKTOP\""           >> /etc/sysconfig/knoppix
echo "TZ=\"$TZ\""                     >> /etc/sysconfig/knoppix

# OpenOffice & others
echo "LANG=\"$LANG\""                  > /etc/environment
echo "LANGUAGE=\"$LANGUAGE\""         >> /etc/environment
echo "LC_MESSAGES=\"$LC_MESSAGES\""   >> /etc/environment

# ide-scsi is no longer needed for any CD-Writer / reader utilities
# Check for IDE-SCSI capable CD-Rom(s) first
# WARNING: In Kernel 2.4.27, CD-Roms cease to work if both, ide-scsi and ide-cd, are loaded. :-(
#if checkbootparam "idecd" || checkbootparam "atapicd"; then
#modprobe ide-cd >/dev/null 2>&1
#else
#modprobe ide-scsi >/dev/null 2>&1
#fi

# For burning on IDE-CD-Roms, k3b (and others) check for special permissions
CDROMS=""
for DEVICE in /proc/ide/hd?; do
 [ "$(cat $DEVICE/media 2>/dev/null)" = "cdrom" ] && CDROMS="$CDROMS /dev/${DEVICE##*/}"
done
[ -n "$CDROMS" ] && { chown root.cdrom $CDROMS; chmod 666 $CDROMS; } 2>/dev/null


# Bring up loopback interface now
ifconfig lo 127.0.0.1 up

# CD Checker
if [ -n "$TESTCD" ]; then
echo " ${BLUE}Checking CD data integrity as requested by '${CYAN}testcd${BLUE}' boot option.${NORMAL}"
echo " ${BLUE}Reading files and checking against KNOPPIX/md5sums, this may take a while...${NORMAL}"
echo -n "${YELLOW}"
( cd /cdrom/ ; rm -f /tmp/md5sum.log ; LANG="$LANG" md5sum -c KNOPPIX/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} "
read a </dev/console
fi
fi

# Print CPU info
echo -n "${GREEN}"
awk -F: '/^processor/{printf "Processor"$2" is "};/^model name/{printf $2};/^vendor_id/{printf vendor};/^cpu MHz/{printf " %dMHz",int($2)};/^cache size/{printf ","$2" Cache"};/^$/{print ""}' /proc/cpuinfo 2>/dev/null
echo -n "${NORMAL}"

# KNOPPIX autoconfig

update_progress 20

# HOTPLUG stuff (obsoleted by udev)
# echo "/sbin/hotplug-knoppix" > /proc/sys/kernel/hotplug

# ACPI-Option, defaults to yes
ACPI="yes"
# Check LAST boot parameter
case "$(getbootparam acpi 2>/dev/null)" in
 off) ACPI="" ;;
esac
checkbootparam "noacpi" && ACPI=""

if [ -d /proc/acpi ]; then
 # ACPI
 if [ -z "$ACPI" ]; then
  echo " ${BLUE}Skipping ACPI Bios detection as requested on boot commandline.${NORMAL}"
 else
  echo -n "${GREEN}ACPI Bios found, activating modules:"
  found=""
  for a in /lib/modules/$KERNEL/kernel/drivers/acpi/*; do
   basename="${a##*/}"
   basename="${basename%%.*}"
   case "$basename" in *_acpi)
    egrep -qi "${basename%%_acpi}" /proc/acpi/dsdt 2>/dev/null || continue ;;
   esac
   modprobe $basename >/dev/null 2>&1 && echo -n " ${YELLOW}$basename${GREEN}" && found="yes"
  done
  test -z "$found" && echo -n "${BLUE}(none)"
  echo "${NORMAL}"
 fi
else
 # APM
 if checkbootparam "noapm"; then
  echo " ${BLUE}Skipping APM Bios detection as requested on boot commandline.${NORMAL}"
 else
  modprobe apm power_off=1 smp=1 >/dev/null 2>&1
  if stringinfile "apm " /proc/modules && test -x /etc/init.d/apmd; then
   [ -c /dev/apm_bios ] || mknod -m 660 /dev/apm_bios c 10 134
   /etc/init.d/apmd start >/dev/null 2>&1 && echo "${GREEN}APM Bios found, power management functions enabled.${NORMAL}"
  fi
 fi
fi

# Enable CPU frequency scaling for both performance and battery life
if checkbootparam "nocpufreq"; then
 echo " ${BLUE}Skipping CPU frequency scaling as requested on boot commandline.${NORMAL}"
else
 for i in /lib/modules/"$KERNEL"/kernel/arch/i386/kernel/cpu/cpufreq/*.ko; do 
  if [ -r "$i" ]; then
   case "$i" in *-lib.*) continue ;; esac
   m="${i##*/}" ; m="${m%%.*}"
   modprobe "${m}" >/dev/null 2>&1
  fi
 done
 modprobe cpufreq-ondemand >/dev/null 2>&1
 for i in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
  if [ -w "$i" ]; then
   n="${i#/sys/devices/system/cpu/cpu}" ; n="${n%/cpufreq/scaling_governor}"
   echo "ondemand" > "${i}"
   echo "${GREEN}CPU frequency scaling enabled for CPU#${n}, using \"ondemand\" strategy.${NORMAL}"
  fi
 done
fi

# First: PCMCIA Check/Setup
# This needs to be done before other modules are being loaded by hwsetup
if checkbootparam "nopcmcia"; then
 echo " ${BLUE}Skipping PCMCIA detection as requested on boot commandline.${NORMAL}"
else
 modprobe pcmcia_core >/dev/null 2>&1
# Try Cardbus or normal PCMCIA socket drivers
 modprobe yenta_socket >/dev/null 2>&1 || modprobe i82365 >/dev/null 2>&1 || modprobe pd6729 >/dev/null 2>&1 || modprobe tcic >/dev/null 2>&1
 if [ "$?" = "0" ]; then
  modprobe ds >/dev/null 2>&1
  if [ -d /sys/class/pcmcia_socket/pcmcia_socket0 ]; then
   echo "${GREEN}PCMCIA found, starting cardmgr.${NORMAL}"
   cardmgr >/dev/null 2>&1 && sleep 4
  fi
 fi
fi

# USB enable
if checkbootparam "nousb"; then
 echo " ${BLUE}Skipping USB detection as requested on boot commandline.${NORMAL}"
else
 # USB/Mouse Check/Setup
 # This needs to be done before other modules are being loaded by hwsetup
 modprobe usbcore >/dev/null 2>&1
 # We now try to load both USB modules, in case someone has 2 different
 # controllers
 FOUNDUSB=""
 USB2="usb-ehci"
 checkbootparam "nousb2" && USB2=""
 USBMODULES="usb-uhci usb-ohci"
 case "$KERNEL" in 2.6.*) USBMODULES="uhci-hcd ohci-hcd";; esac
 for u in $USB2 $USBMODULES; do 
  if stringinfile "$u" /proc/modules; then
   FOUNDUSB="yes"
  elif modprobe "$u" >/dev/null 2>&1; then
   FOUNDUSB="yes"
  fi
 done
 if [ -n "$FOUNDUSB" ]; then
  echo -n "${GREEN}USB found, managed by ${MAGENTA}udev${GREEN}"
  # We have to do this here, because /proc/bus/usb does not seem to exist before
  # the lowlevel controller module(s) are loaded.
  case "$KERNEL" in 2.6.*) USBFS="usbfs";; *) USBFS="usbdevfs";; esac
  mount -o devmode=0666 -t $USBFS /proc/bus/usb /proc/bus/usb >/dev/null 2>&1
  echo "${NORMAL}"
 else
  # For an unknown reason, unloading the usbcore module seems to hang sometimes.
  # umount /proc/bus/usb >/dev/null 2>&1
  # rmmod usbcore 2>/dev/null
  true
 fi
 # Load USB mouse module, if not already present. This seems to be done automatically SOMETIMES,
 # but for some boards, it just never happens and the mouse goes undetected.
 stringinfile "usbhid" /proc/modules || modprobe usbhid >/dev/null 2>&1
fi

# Firewire enable
if checkbootparam "nofirewire"; then
 echo " ${BLUE}Skipping Firewire detection as requested on boot commandline.${NORMAL}"
else
 # We now try to load the firewire module
 modprobe ieee1394 >/dev/null 2>&1
 FOUNDFIREWIRE=""
 if stringinfile ohci1394 /proc/modules; then
  FOUNDFIREWIRE="yes"
 else
  modprobe ohci1394 >/dev/null 2>&1
  stringinfile "ohci1394" /proc/modules && FOUNDFIREWIRE="yes"
 fi
 if [ -n "$FOUNDFIREWIRE" ]; then
  echo "${GREEN}Firewire found, managed by ${MAGENTA}udev${GREEN}${NORMAL}"
 else
  # For an unknown reason, unloading the ieee1394 module seems to hang sometimes.
  # rmmod ieee1394 2>/dev/null
  true
 fi
fi

update_progress 40

# Activate input driver for char event devices (mice)
stringinfile "evdev" /proc/modules || modprobe evdev >/dev/null 2>&1

# Use udev for SOME of the "hotpluggable" stuff.
if checkbootparam "noudev"; then
 echo "${BLUE}Skipping udev as requested on boot commandline.${NORMAL}"
else
 echo -n "${BLUE}Starting ${MAGENTA}udev${GREEN} hot-plug hardware detection... ${NORMAL}"
 mkdir -p /media
 RUNLEVEL=S /etc/init.d/udev start >/dev/null 2>&1
 RC="$?"
 # udev postconfig
 # /etc/init.d/udev uses /etc/udev/links.conf to create persistent links,
 # but I just don't trust a config file with an inline comment that says
 # "this file doesn't exist"... -KK
 [ -c /dev/null ] || mknod -m 666 /dev/null c 1 3
 [ -c /dev/zero ] || mknod -m 666 /dev/zero c 1 5  >/dev/null 2>&1
 [ -c /dev/console ] || mknod -m 660 /dev/console c 5 1 >/dev/null 2>&1
 [ -d /dev/input ] || mkdir -p /dev/input >/dev/null 2>&1
 [ -d /dev/pts ] || mkdir -p /dev/pts >/dev/null 2>&1
 [ -d /dev/shm ] || mkdir -p /dev/shm >/dev/null 2>&1
 [ -c /dev/input/mice ] || mknod -m 660 /dev/input/mice c 13 63 >/dev/null 2>&1
 [ -L /dev/fd ] || ln -sf /proc/self/fd /dev/fd >/dev/null 2>&1
 [ -L /dev/stdin ] || ln -sf /proc/self/fd/0 /dev/stdin >/dev/null 2>&1
 [ -L /dev/stdout ] || ln -sf /proc/self/fd/1 /dev/stdout >/dev/null 2>&1
 [ -L /dev/stderr ] || ln -sf /proc/self/fd/2 /dev/stderr >/dev/null 2>&1
 [ -c /dev/ppp ] || mknod -m 660 /dev/ppp c 108 0 >/dev/null 2>&1
 for i in 0 1 2 3 4 5 6 7; do
  [ -b /dev/loop$i ] || mknod -m 660 /dev/loop$i b 7 $i >/dev/null 2>&1
 done
 modprobe capability >/dev/null 2>&1
 if [ -x /etc/init.d/dbus-1 ]; then
  /etc/init.d/dbus-1 start >/dev/null 2>&1
 elif [ -x /etc/init.d/dbus ]; then
  /etc/init.d/dbus start >/dev/null 2>&1
 fi
 [ "$?" = "0" -a "$RC" = "0" ] && echo "${BLUE}Started.${NORMAL}" || echo "${RED}Failed.${NORMAL}"
fi

# devpts
stringinfile "/dev/pts" /proc/mounts || mount -t devpts /dev/pts /dev/pts 2>/dev/null

# Second: Search & configure supported hardware

# Load fuse module, we may need it for libntfs-mounts later
modprobe fuse >/dev/null 2>&1

# Check for options relevant to hwsetup
NOAUDIO=""; HWSETUP_NOAUDIO=""
checkbootparam noaudio >/dev/null 2>&1 && NOAUDIO="yes"
checkbootparam nosound >/dev/null 2>&1 && NOAUDIO="yes"
[ -n "$NOAUDIO" ] && HWSETUP_NOAUDIO="-a"
NOSCSI=""; HWSETUP_NOSCSI=""
checkbootparam noscsi  >/dev/null 2>&1 && NOSCSI="yes"
[ -n "$NOSCSI" ] && HWSETUP_NOSCSI="-s"
if checkbootparam "nohwsetup"; then
 echo "${BLUE}Loading hardware profile from ${MAGENTA}/etc/modules${BLUE}.${NORMAL}"
 /etc/init.d/modutils start >/dev/null 2>/dev/null
else
 echo -n "${WHITE}"
 if hwsetup -p $HWSETUP_NOAUDIO $HWSETUP_NOSCSI >/dev/null
 then
  echo -n "${NORMAL}"
 else
  echo " ${RED}Please check.${NORMAL}"
 fi
fi

# Add cdrom drives that have NOT been found by hwsetup (Kernel 2.6 bug?)
while read drive name cdroms; do
 case "$drive$name" in drivename:) 
  count=0
  for cd in $cdroms; do
   cdnum="$((count++))"
   cddev="$cd"
   [ "$cdnum" = "0" ] && cdnum=""
   cdlink="/dev/cdrom$cdnum"
   [ -e "$cdlink" ] && continue
   ln -sf "$cddev" "$cdlink"
  done
  break
 ;;
 esac
done <<EOT
$(cat /proc/sys/dev/cdrom/info 2>/dev/null)
EOT

update_progress 60

# Read in what hwsetup has found
[ -f /etc/sysconfig/knoppix ] && . /etc/sysconfig/knoppix

# Mouse
if [ -n "$MOUSE_DEVICE" ]
then
echo "${GREEN}Mouse is ${YELLOW}${MOUSE_FULLNAME}${GREEN} at ${MAGENTA}${MOUSE_DEVICE}${NORMAL}"
fi

# Soundcard
if [ -n "$SOUND_FULLNAME" -o -n "$SOUND_DRIVER" ]; then
 if stringinfile snd_ /proc/modules 2>/dev/null; then
  # ALSA detected, load the OSS adapters
  for i in pcm mixer; do
   stringinfile "snd_${i}_oss" /proc/modules 2>/dev/null || modprobe snd-"$i"-oss >/dev/null 2>&1
  done
 fi
 # Setting micro input to zero to avoid subsonic disaster
 # PCM and Volume set to 67 are default in most OSS drivers.
 ( exec aumix -m 0 -w 67 -v 67 >/dev/null 2>&1 & )
 SOUNDCARD="$SOUND_DRIVER"
 echo -n "${GREEN}Soundcard:"
 [ -n "$SOUND_FULLNAME" ] && echo -n " ${YELLOW}$SOUND_FULLNAME${GREEN}"
 [ -n "$SOUNDCARD" ] && echo -n " driver=${MAGENTA}$SOUNDCARD"
 echo "${NORMAL}"
fi

# Read default keyboard from config file.
# There seems to be no reliable autoprobe possible.
[ -f /etc/sysconfig/keyboard ] && . /etc/sysconfig/keyboard
# Set default keyboard before interactive setup
[ -n "$KEYTABLE" ] && loadkeys -q $KEYTABLE
[ -n "$CONSOLEFONT" ] && consolechars -f $CONSOLEFONT || consolechars -d

# Unicode console fix
if [ "$(locale charmap)" = "UTF-8" ]; then
   unicode_start 2> /dev/null
fi

# Check for blind option or brltty
BLIND=""
checkbootparam "blind" && BLIND="yes"
BRLTTY="$(getbootparam brltty 2>/dev/null)"

if [ -n "$BLIND" -o -n "$BRLTTY" ]; then
 if [ -x /sbin/brltty ]; then
  # Blind option detected, start brltty now.
  CMD=brltty
  BRLTYPE=""
  BRLDEV=""
  BRLTEXT=""
  if [ -n "$BRLTTY" ]; then
   # Extra options
   BRLTYPE="${BRLTTY%%,*}"
   R="${BRLTTY#*,}"
   if [ -n "$R" -a "$R" != "$BRLTTY" ]; then
    BRLTTY="$R"
    BRLDEV="${BRLTTY%%,*}"
    R="${BRLTTY#*,}"
    if [ -n "$R" -a "$R" != "$BRLTTY" ]; then
     BRLTTY="$R"
     BRLTEXT="${BRLTTY%%,*}"
     R="${BRLTTY#*,}"
   fi
  fi
 fi
 [ -n "$BRLTYPE" ] && CMD="$CMD -b $BRLTYPE"
 [ -n "$BRLDEV" ] && CMD="$CMD -d $BRLDEV"
 [ -n "$BRLTEXT" ] && CMD="$CMD -t $BRLTEXT"
 echo "${BLUE}Starting braille-display manager: ${GREEN}${CMD}${BLUE}.${NORMAL}"
 ( exec $CMD & )
 sleep 2
fi
fi

if [ -n "$INTERACTIVE" ]; then
 # Interactive configuration
 echo "${BLUE}Entering interactive configuration second stage.${NORMAL}"

 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/kbdconfig
 # kbdconfig already loads the keyboard if modified.

 echo -n "${CYAN}Do you want to (re)configure your soundcard?${NORMAL} [Y/n] "
 read a
 [ "$a" != "n" ] && sndconfig && ( exec aumix -m 0 >/dev/null 2>&1 & )

 if [ -n "$MOUSE_FULLNAME" -o -n "$MOUSE_DEVICE" ]; then
  echo -n "${GREEN}Your mouse has been autodetected as: ${MAGENTA}"
  ls -l /dev/mouse | awk '{print $9 " " $10 " " $11}'
  echo -n "${NORMAL}"
 fi

 echo -n "${CYAN}Do you want to (re)configure your mouse?${NORMAL} [Y/n] "
 read a
 [ -f /etc/sysconfig/mouse ] && . /etc/sysconfig/mouse
 [ "$a" != "n" ] && mouseconfig
fi

if checkbootparam noagp; then
 echo " ${BLUE}Skipping AGP detection as requested on boot commandline.${NORMAL}"
else
 # Probe for AGP. Hope this can fail safely
 modprobe agpgart >/dev/null 2>&1
 stringinfile "agpgart" /proc/modules || modprobe agpgart agp_try_unsupported=1 >/dev/null 2>&1
 stringinfile "agpgart" /proc/modules && echo "${YELLOW}AGP bridge${GREEN} detected."
fi

update_progress 80

# KNOPPIX automatic Xserver Setup
if ! checkbootparam "nomkxorgconfig"; then
 XORGOPTIONS="-nomodelines"
 checkbootparam "xmodelines" || XORGOPTIONS=""
 XSERVER="$(getbootparam xserver)" 
 [ -n "$XSERVER" ] && echo "XSERVER=\"$XSERVER\"" >>/etc/sysconfig/xserver
 XMODULE="$(getbootparam xmodule)" 
 [ -n "$XMODULE" ] && echo "XMODULE=\"$XMODULE\"" >>/etc/sysconfig/xserver
 # Enable Composite only if chosen desktop requires it.
 DESKTOP="$(getbootparam desktop)" 
 case "$DESKTOP" in compiz|beryl|3d|aiglx|glx) XORGOPTIONS="$XORGOPTIONS -composite" ;; esac
 [ -x /usr/sbin/mkxorgconfig ] && /usr/sbin/mkxorgconfig $XORGOPTIONS
fi

# Read in changes
[ -f /etc/sysconfig/knoppix ] && . /etc/sysconfig/knoppix

if [ -n "$INTERACTIVE" ]
then
 echo -n "${CYAN}Do you want to (re)configure your graphics (X11) subsystem?${NORMAL} [Y/n] "
 read a
 if [ "$a" != "n" ]; then
  if type -a xf86cfg >/dev/null 2>&1; then
   xf86cfg -textmode -xf86config /etc/X11/XF86Config-4 >/dev/console 2>&1 </dev/console
  elif type -a xorgcfg >/dev/null 2>&1; then
   xorgcfg -textmode -config /etc/X11/xorg.conf >/dev/console 2>&1 </dev/console
  else
   dpkg-reconfigure xserver-xorg
  fi
 fi
 echo "${GREEN}Interactive configuration finished. Everything else should be fine for now.${NORMAL}"
fi

RUNLEVEL="$(runlevel)"

addfstab(){
 # /dev/device  options
 d="${1##*/}"
 [ -d /media/$d ] && mkdir -p /media/$d
 # Compatibility with older versions of Knoppix
 ln -snf /media/$d /mnt/$d
 new="/dev/$d /media/$d  auto   users,noauto,exec,$2 0 0"
 stringinfile "$new" "/etc/fstab" || echo "$new" >> /etc/fstab
}

# Add new devices to /etc/fstab and /etc/auto.mnt
for i in /dev/cdrom?*; do
 if [ -L "$i" ]; then
  [ -x /bin/readlink ] && addfstab "$(readlink $i)" "ro" || addfstab "$i" "ro"
 fi
done

# IDE-Raid detection
NOIDERAID=""
checkbootparam "noideraid" && NOIDERAID="yes"
if [ -z "$NOIDERAID" ] && modprobe dm-mod >/dev/null 2>&1; then
 if type -p dmraid >/dev/null 2>&1; then
  dmraid -ay >/dev/null 2>&1
 fi
fi

NOSWAP=""
checkbootparam "noswap" && NOSWAP="yes"
NOMOUNT=""
checkbootparam "nomount" && NOMOUNT="yes"
checkbootparam "nomounts" && NOMOUNTS="yes"

# Collect partitions from /proc/partitions
partitions=""
while read major minor blocks partition relax; do
 partition="${partition##*/}"
 [ -z "$partition" -o ! -e "/dev/$partition" ] && continue
 case "$partition" in
  hd?) ;;                                               # IDE Harddisk, entire disk
  sd?) ;;                                               # SCSI Harddisk, entire disk
  ub?) ;;                                               # USB Harddisk, entire disk
  ub?) ;;                                               # USB Harddisk, entire disk
  [hs]d*|ub*) partitions="$partitions /dev/$partition";;    # IDE, USB or SCSI disk partition
 esac
done <<EOT
$(awk 'BEGIN{old="__start"}{if($0==old){exit}else{old=$0;if($4&&$4!="name"){print $0}}}' /proc/partitions)
EOT

# Start creating /etc/fstab with HD partitions and USB SCSI devices now
if checkbootparam "nofstab"; then
 echo " ${BLUE}Skipping /etc/fstab creation as requested on boot commandline.${NORMAL}"
else
 echo -n "${BLUE}Scanning for Harddisk partitions and creating ${YELLOW}/etc/fstab${BLUE}... "
 rebuildfstab -r -u knoppix -g knoppix >/dev/null 2>&1
 if [ -e /var/run/rebuildfstab.pid ]; then
  # Another instance of rebuildfstab, probably from udev, is still running, so just wait.
  sleep 8
 fi
 echo "${GREEN}Done.${NORMAL}"
fi

findfreeloop(){
 # udev again... We have to load loop to get the device nodes in /dev.
 modprobe loop >/dev/null 2>&1
 i=0
 for i in 0 1 2 3 4 5 6 7; do
  LOOP="/dev/loop$i"
  losetup "$LOOP" >/dev/null 2>&1 || { echo "$LOOP"; return 0; }
 done
 return 1
}

# Scan for swap, config, homedir
KNOPPIX_IMG=""
KNOPPIX_SWP=""
HOMEDIR="$(getbootparam home)"
mount -t ext3 /dev/sdb2 /ramdisk/home
update_progress 90

# New: Interactively create swapfiles on DOS partitions
# (if necessary and possible)
FREEMEM="$(awk 'BEGIN{m=0};/MemFree|Cached|SwapFree/{m+=$2};END{print m}' /proc/meminfo)"

if [ "$FREEMEM" -lt 80000 -a -x /usr/bin/kdeinit -a -x /usr/sbin/mkdosswapfile ]; then
case "$LANGUAGE" in
de)
LOWMEM="Ihr Rechner verfügt nur über ${FREEMEM}kB freien RAM-Speicher. Dies ist für das Arbeiten mit Linux zwar generell ausreichend, aber leider nicht genug, um größere Anwendungen wie KDE oder Office-Pakete zu starten. Sie können im nächsten Schritt versuchen, eine sog. Auslagerungsdatei auf einer DOS-Partition (sofern vorhanden) einzurichten."
;;
*)
LOWMEM="There are only ${FREEMEM}kB of RAM available in your computer. While this is usually sufficient for working under Linux, it is unfortunately not enough for starting bigger applications like KDE, or office suites. You can try to create a so-called swapfile on an existing DOS-Partition (if available) in the next step."
;;
esac
dialog --msgbox "$LOWMEM" 12 65 </dev/console >/dev/console 2>&1 
/usr/sbin/mkdosswapfile </dev/console >/dev/console 2>&1 
fi

# Fat-Client-Version: DHCP Broadcast for IP address
if checkbootparam "nodhcp"; then
echo " ${BLUE}Skipping DHCP broadcast/network detection as requested on boot commandline.${NORMAL}"
else
NETDEVICES="$(awk -F: '/eth.:|tr.:/{print $1}' /proc/net/dev 2>/dev/null)"
for DEVICE in $NETDEVICES
do
echo -n "${GREEN}Network device ${MAGENTA}$DEVICE${GREEN} detected, DHCP broadcasting for IP.${NORMAL}"
trap 2 3 11
ifconfig $DEVICE up >/dev/null 2>&1 ; pump -i $DEVICE >/dev/null 2>&1 &
trap "" 2 3 11
sleep 1
echo " ${BLUE}(Backgrounding)${NORMAL}"
done
fi

# Search for custom background image for KDE/GNOME/X
for i in /cdrom/KNOPPIX/background /usr/local/lib/knoppix; do
 for j in jpg png gif; do
  BACKGROUND="$i.$j"
  [ -e "$BACKGROUND" ] && break 2
 done
done

echo 'BACKGROUND="'"$BACKGROUND"'"' >> /etc/sysconfig/knoppix

findfile(){
FOUND=""
# search all partitions for a file in the root directory
for i in /media/[sh]d[a-z] /media/[sh]d[a-z][1-9] /media/[sh]d[a-z][1-9]?*; do
# See if it's already mounted
[ -f "$i/$1" ] &&  { echo "$i/$1"; return 0; }
if [ -d "$i" ] && mount -r "$i" 2>/dev/null; then
[ -f "$i/$1" ] && FOUND="$i/$1"
umount -l "$i" 2>/dev/null
[ -n "$FOUND" ] && { echo "$FOUND"; return 0; }
fi
done
return 2
}

update_progress 100

if checkbootparam "splash"; then
  sleep 1
  /etc/init.d/splash.sh stop
  sleep 1
fi

# Check for configuration floppy add-on if not running from HD
if [ -z "$INSTALLED" -a -n "$MYCONF" ]; then
FOUND_CONFIG=""
if [ -n "$MYCONFDIR" ]; then
case "$MYCONFDIR" in
*floppy*|*fd0*)
MYCONFDEVICE="/dev/fd0"
MYCONFMOUNTPOINT="/media/fd0"
;;
/dev/*)
MYCONFDEVICE="${MYCONFDIR##/dev/}"
MYCONFDEVICE="/dev/${MYCONFDEVICE%%/*}"
MYCONFMOUNTPOINT="/media/${MYCONFDEVICE##/dev/}"
MYCONFDIR="/media/${MYCONFDIR##/dev/}"
;;
/media/*)
MYCONFDEVICE="${MYCONFDIR##/media/}"
MYCONFDEVICE="/dev/${MYCONFDEVICE%%/*}"
MYCONFMOUNTPOINT="/media/${MYCONFDEVICE##/dev/}"
;;
[Aa][Uu][Tt][Oo]|[Ss][Cc][Aa][Nn]|[Ff][Ii][Nn][Dd])
MYCONFDIR="$(findfile knoppix.sh)"
if [ -n "$MYCONFDIR" ]; then
MYCONFDEVICE="${MYCONFDIR##/media/}"
MYCONFDEVICE="/dev/${MYCONFDEVICE%%/*}"
MYCONFMOUNTPOINT="/media/${MYCONFDEVICE##/dev/}"
MYCONFDIR="${MYCONFMOUNTPOINT}"
else
FOUND_CONFIG="none"
fi
;;
*)
echo "${CRE}${RED}Invalid configdir '$MYCONFDIR' specified (must start with /dev/ or /media/ or 'scan').${NORMAL}"
echo "${CRE}${RED}Option ignored.${NORMAL}"
FOUND_CONFIG="invalid"
;;
esac
else
MYCONFDEVICE="/dev/fd0"
MYCONFMOUNTPOINT="/media/fd0"
MYCONFDIR="/media/fd0"
fi
if [ -z "$FOUND_CONFIG" ]; then
echo -n "${CRE}${BLUE}Checking ${MAGENTA}${MYCONFDIR}${BLUE} for KNOPPIX configuration files...${NORMAL}"
if trymount "$MYCONFDEVICE" "$MYCONFMOUNTPOINT"; then
MYCONFIG="$(ls -1d $MYCONFDIR/[Kk][Nn][Oo][Pp][Pp][Ii][Xx].[Ss][Hh] 2>/dev/null)"
if [ -n "$MYCONFIG" -a -f "$MYCONFIG" ]; then
echo ""
FOUND_CONFIG="yes"
echo "${GREEN}Found, now executing ${MAGENTA}$MYCONFIG${GREEN}.${NORMAL}"
echo "6" > /proc/sys/kernel/printk
. "$MYCONFIG" "$MYCONFDIR" || true
echo "0" > /proc/sys/kernel/printk
fi
umount "$MYCONFMOUNTPOINT" 2>/dev/null
fi
fi
[ -n "$FOUND_CONFIG" ] || echo " ${BLUE}Not present.${NORMAL}"
fi

# Check for extra shellscript on CD-Rom (/cdrom/KNOPPIX/knoppix.sh)
MYCONFIG="$(ls -1d /cdrom/KNOPPIX/[Kk][Nn][Oo][Pp][Pp][Ii][Xx].[Ss][Hh] 2>/dev/null)"
if [ -n "$MYCONFIG" -a -f "$MYCONFIG" ]; then
echo ""
FOUND_CONFIG="yes"
echo "${GREEN}KNOPPIX Configuration file found on CD, executing ${MAGENTA}$MYCONFIG${GREEN}.${NORMAL}"
echo "6" > /proc/sys/kernel/printk
. "$MYCONFIG" /cdrom/KNOPPIX || true
echo "0" > /proc/sys/kernel/printk
fi

# Build System: Mount /KNOPPIX.build and execute knoppix.sh from there.
if [ -d /KNOPPIX.build ]; then
 if mount -v /KNOPPIX.build 2>/dev/null; then
  if [ -e /KNOPPIX.build/knoppix.sh ]; then
   echo "6" > /proc/sys/kernel/printk
   . /KNOPPIX.build/knoppix.sh /KNOPPIX.build || true
   echo "0" > /proc/sys/kernel/printk
  fi
 fi
fi

checkbootparam "install" >/dev/null 2>&1 && knoppix-installer
checkbootparam "installer" >/dev/null 2>&1 && knoppix-installer

echo "6" > /proc/sys/kernel/printk

# Re-enable signals
trap 2 3 11

exit 0

Reply to: