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

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

umask 022

# Ignore interrupt signals
trap "" 1 2 3 11 15

# ANSI COLORS
CRE="
[K"
NORMAL="[0;39m"
# RED: Failure or error message
RED="[1;31m"
# GREEN: Success message
GREEN="[1;32m"
# YELLOW: Descriptions
YELLOW="[1;33m"
# BLUE: System messages
BLUE="[1;34m"
# MAGENTA: Found devices or drivers
MAGENTA="[1;35m"
# CYAN: Questions
CYAN="[1;36m"
# BOLD WHITE: Hint
WHITE="[1;37m"

# We need /proc here, so mount it in case we skipped the bootfloppy
mount /proc 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)"

### 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 "$?"
}

### EOF utility functions

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

# Check if we want the config floppy
MYCONF=""
case "$CMDLINE" in *myconf*|*floppyconf*|*custom*) MYCONF="yes"; ;; esac

### 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"
[ -n "$LANGUAGE" ] || LANGUAGE="ja"

# 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"
CHARSET="iso8859-15"
# Additional KDE Keyboards
KDEKEYBOARDS="us,fr"
;;
# BG version
bg)
LANGUAGE="bg"
COUNTRY="bg"
LANG="bg_BG"
KEYTABLE="bg"
XKEYBOARD="bg"
KDEKEYBOARD="bg"
CHARSET="microsoft-cp1251"
# Additional KDE Keyboards
KDEKEYBOARDS="us,de,fr"
;;
# Swiss version (basically de with some modifications)
ch)
LANGUAGE="de"
COUNTRY="ch"
LANG="de_CH"
KEYTABLE="sg-latin1"
XKEYBOARD="de_CH"
KDEKEYBOARD="de_CH"
CHARSET="iso8859-15"
# Additional KDE Keyboards
KDEKEYBOARDS="de,us,fr"
;;
# Czech version
cs|cz)
LANGUAGE="cs"
COUNTRY="cs"
LANG="cs_CZ"
KEYTABLE="cz-lat2"
XKEYBOARD="cs"
KDEKEYBOARD="cs"
CHARSET="iso8859-2"
# Additional KDE Keyboards
KDEKEYBOARDS="us,de,fr"
;;
es)
# Spanish version
COUNTRY="es"
LANG="es_ES@euro"
KEYTABLE="es"
XKEYBOARD="es"
KDEKEYBOARD="es"
CHARSET="iso8859-15"
# Additional KDE Keyboards
KDEKEYBOARDS="de,us,fr"
;;
fr)
# french version
COUNTRY="fr"
LANG="fr_FR@euro"
KEYTABLE="fr"
XKEYBOARD="fr"
KDEKEYBOARD="fr"
CHARSET="iso8859-15"
# Additional KDE Keyboards
KDEKEYBOARDS="de,us"
;;
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"
;;
nl)
# netherland version
COUNTRY="nl"
LANG="nl_NL@euro"
KEYTABLE="nl"
XKEYBOARD="nl"
KDEKEYBOARD="nl"
CHARSET="iso8859-15"
# Additional KDE Keyboards
KDEKEYBOARDS="us,de,fr"
;;
pl)
# Polish version
COUNTRY="pl"
LANG="pl_PL"
KEYTABLE="pl"
XKEYBOARD="pl"
KDEKEYBOARD="pl"
CHARSET="iso8859-2"
# Additional KDE Keyboards
KDEKEYBOARDS="de,us,fr"
;;
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,us,fr"
;;
sk)
# Slovak version (guessed)
COUNTRY="sk"
LANG="sk"
KEYTABLE="sk-qwerty"
XKEYBOARD="sk"
KDEKEYBOARD="sk"
CHARSET="iso8859-2"
# Additional KDE Keyboards
KDEKEYBOARDS="us,de,fr"
;;
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,fr"
;;
ja)
# US version
LANGUAGE="ja"
COUNTRY="jp"
LANG="ja_JP.eucJP"
KEYTABLE="jp106"
XKEYBOARD="jp"
KDEKEYBOARD="jp"
CHARSET="EUC-JP"
# Additional KDE Keyboards
KDEKEYBOARDS="us,de,fr"
# Input method server
INPUTMETHODSERVER="freewnn-jserver"
;;
*)
# US version
LANGUAGE="us"
COUNTRY="us"
LANG="C"
KEYTABLE="us"
XKEYBOARD="us"
KDEKEYBOARD="us"
CHARSET="iso8859-1"
# Additional KDE Keyboards
KDEKEYBOARDS="de,fr"
;;
esac

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


# Also read desired desktop, if any
DESKTOP="$(getbootparam desktop 2>/dev/null)"
# Allow only supported windowmanagers
case "$DESKTOP" in gnome|kde|larswm|xfce|windowmaker|wmaker|icewm|twm) ;; *) DESKTOP="kde"; ;; esac

# Check if we are running from Ramdisk or HD
INSTALLED=""
if [ -e /proc/sys/kernel/real-root-dev ]; then
read ROOTDEV </proc/sys/kernel/real-root-dev 2>/dev/null
case "$ROOTDEV" in 256|0x100) ;; *) INSTALLED="$ROOTDEV"; ;; esac
else
INSTALLED="yes"
fi

# Set hostname
hostname Knoppix

# Set clock (Local time is more often used than GMT)
hwclock -s

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
echo ""
fi

# Delete obsolete links and files before starting autoconfig
rm -f /dev/cdrom* /dev/cdwriter* /dev/mouse* /dev/modem* /dev/scanner* \
      /etc/sysconfig/i18n /etc/sysconfig/keyboard /etc/sysconfig/knoppix \
      2>/dev/null

# [jp] kwb;0.95      K.Wonderboy
rmdir /mnt/hd* >/dev/null 2>&1
rmdir /mnt/sd* >/dev/null 2>&1
cp -af /etc/fstab.kwb  /etc/fstab
cp -af /etc/auto.mnt.kwb /etc/auto.mnt
# [jp] kwb;0.95      K.Wonderboy

# 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 "LANG=\"$LANG\""                 >> /etc/sysconfig/i18n
echo "LANGUAGE=\"$LANGUAGE\""         >> /etc/sysconfig/i18n
echo "CHARSET=\"$CHARSET\""           >> /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

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

# Bring up loopback interface now
ifconfig lo 127.0.0.1 up

# CD Checker
if checkbootparam "testcd"; then
echo -n " ${BLUE}Checking CD data integrity as requested by '${CYAN}testcd${BLUE}' boot option... ${NORMAL}"
( tar cpPlf - /cdrom/ | dd of=/dev/null bs=64k ) >/dev/null 2>&1
if [ "$?" = "0" ]; then
echo "${GREEN}OK${NORMAL}"
else
echo "${RED}FAILED${NORMAL}"
echo "${RED} *** DATA ON YOUR CD MEDIUM IS POSSIBLY INCOMPLETE OR DAMAGED. ***${NORMAL}"
echo -n "${CYAN}Hit return to contine. ${NORMAL}"
read a
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}"

if checkbootparam "noapm"; then
echo " ${BLUE}Skipping APM Bios detection as requested on boot commandline.${NORMAL}"
else
insmod apm power_off=1 >/dev/null 2>&1 && echo " ${GREEN}APM Bios found, power management functions enabled.${NORMAL}"
fi

# Support for hotpluggable devices?
HOTPLUG=""

# KNOPPIX autoconfig
# 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
insmod pcmcia_core >/dev/null 2>&1
# Try Cardbus or normal PCMCIA socket drivers
insmod yenta_socket >/dev/null 2>&1 && HOTPLUG="yes" || insmod i82365 >/dev/null 2>&1 || insmod tcic >/dev/null 2>&1
if [ "$?" != "0" ]
then
# No PCMCIA Bus present.
[ -n "$HOTPLUG" ] || rmmod pcmcia_core 2>/dev/null
else
echo " ${GREEN}PCMCIA found, starting cardmgr.${NORMAL}"
insmod ds >/dev/null 2>&1
cardmgr >/dev/null 2>&1 && sleep 4
fi
fi

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
insmod usbcore  >/dev/null 2>&1
insmod usb-uhci >/dev/null 2>&1 || insmod usb-ohci >/dev/null 2>&1
if [ "$?" = "0" ]; then
HOTPLUG="yes"
echo " ${GREEN}USB found, managed by ${MAGENTA}hotplug${GREEN}.${NORMAL}"
# [jp] K.Wonderboy :0.98 ,usb2.0 enable
/etc/init.d/hotplug start
# [jp] K.Wonderboy :0.98
mount -o devmode=0666 -t usbdevfs none /proc/bus/usb >/dev/null 2>&1
# rmmod usbcore hangs in Kernel 2.4.19-rc1 :-(
# else
# rmmod usbcore 2>/dev/null
fi
fi

# Start hotplug manager for PCI/USB/Cardbus
if [ -n "$HOTPLUG" -a -x /sbin/hotplug ]; then
echo " ${GREEN}Enabling ${MAGENTA}hotplug${GREEN} manager.${NORMAL}"
echo "/sbin/hotplug" > /proc/sys/kernel/hotplug ; sleep 3
fi

# Second: Search & configure supported hardware
# echo -n "${BLUE}Autoconfiguring devices...${NORMAL} " ; printstars hwsetup &
echo -n "${WHITE}"
if hwsetup -p >/dev/null
then
echo -n "${NORMAL}"
else
echo " ${RED}Please check.${NORMAL}"
fi

# 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
# Setting micro input to zero to avoid subsonic disaster
aumix -m 0 >/dev/null 2>&1
echo -n " ${GREEN}Soundcard:"
[ -n "$SOUND_FULLNAME" ] && echo -n " ${YELLOW}$SOUND_FULLNAME${GREEN}"
[ -n "$SOUND_DRIVER" ] && echo -n ", driver=${MAGENTA}$SOUND_DRIVER"
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

# 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" ] && 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 && 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
stringinfile "AGP" "/proc/pci" 2>/dev/null && insmod agpgart agp_try_unsupported=1 >/dev/null 2>&1 && echo " ${YELLOW}AGP bridge${GREEN} detected."
fi

# KNOPPIX automatic XFree86 Setup
[ -x /usr/sbin/mkxf86config ] && /usr/sbin/mkxf86config

# 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
[ "$a" != "n" ] && xf86cfg -textmode -xf86config /etc/X11/XF86Config-4 >/dev/console 2>&1 </dev/console
echo " ${GREEN}Interactive configuration finished. Everything else should be fine for now.${NORMAL}"
fi

RUNLEVEL="$(runlevel)"
AUTOMOUNTER=""
[ -x /etc/init.d/autofs ] && [ "$RUNLEVEL" != "N 1" ] && [ "$RUNLEVEL" != "N S" ] && AUTOMOUNTER="yes"

# for nfs automount
#for f in tmp pub
#do
#  [ -d /mnt/$f -a ! -L /mnt/$f ] && rmdir /mnt/$d
#  [ -L /mnt/$f ] || ln -s /mnt/auto/$f /mnt/$f
#done
AUTOMOUNTS="floppy cdrom"
# Add new devices to /etc/fstab and /etc/auto.mnt
for i in /dev/cdrom?*; do
if [ -L $i ]; then
d=${i##*/}
if [ -n "$AUTOMOUNTER" ]; then
[ -d /mnt/$d -a ! -L /mnt/$d ] && rmdir /mnt/$d
[ -d /mnt/auto/$d ] || mkdir -p /mnt/auto/$d
[ -L /mnt/$d ] || ln -s /mnt/auto/$d /mnt/$d
anew="$d	-fstype=auto,ro	:$i"
stringinfile "$anew" "/etc/auto.mnt" || echo "$anew" >> /etc/auto.mnt
AUTOMOUNTS="$AUTOMOUNTS $d"
new="$i /mnt/auto/$d  auto   user,noauto,exec,ro 0 0"
else
[ -d /mnt/$d ] && mkdir -p /mnt/$d
new="$i /mnt/$d  auto   user,noauto,exec,ro 0 0"
fi
stringinfile "$new" "/etc/fstab" || echo "$new" >> /etc/fstab
fi
done

# Enable eject-on-umount feature of ALL cdroms
# Unfortunately, this opens all devices that are nor currently mounted.
# Skipped until there is a better solution.
#for i in /dev/cdrom*; do
#eject -a on $i 2>/dev/null
#done

NOSWAP=""
checkbootparam "noswap" && NOSWAP="yes"

# Scan partitions
if [ -f /proc/partitions ]; then
partitions=""
dma=""
pold="no_partition"
while read a b c p unused; do
# Workaround for a /proc/partitions bug
[ "$p" = "$pold" ] && break
pold="$p"
case $p in
 hd?|sd?)
          # Add entry to /etc/fstab
          partitions="$partitions /dev/$p"
          # Enable DMA for IDE harddisks only (Caution: IDE cdroms may cause trouble)
          case $p in hd?) /sbin/hdparm -qd1 /dev/$p 2>/dev/null; dma="$dma /dev/$p"; ;; esac
	  ;;
 *) ;;
esac
done < /proc/partitions
[ -n "$dma" ] && echo "${BLUE}DMA acceleration started for${MAGENTA}$dma${BLUE}.${NORMAL}"
if [ -n "$partitions" ]
then
LANG=C LC_ALL=C fdisk -l $partitions 2>/dev/null | \
awk '/^\/dev\//{print $1" "$NF}' | \
while read p t; do
options="user,exec"
fnew=""
case "$t" in *[Ee]xtended*|*[Hh]ibernation*) continue; ;; esac
case "$t" in *[Ss]wap*)
 if [ -n "$NOSWAP" ]; then
 echo "${BLUE}Ignoring swap partition ${MAGENTA}$p${BLUE} as requested.${NORMAL}"
 else
 echo "${BLUE}Using swap partition ${MAGENTA}$p${BLUE}.${NORMAL}"
 # We need the entry in /etc/fstab to do a clean "swapon/swapoff -a" later
 fnew="$p swap swap defaults 0 0"
 swapon $p 2>/dev/null && { stringinfile "$fnew" "/etc/fstab" || echo "$fnew" >> /etc/fstab; }
 fi
 continue
 ;;
esac
case "$t" in *[Nn][Tt][Ff][Ss]*)
 options="${options},uid=knoppix,gid=knoppix";
 [ "$LANGUAGE" = "ja" ] && options="${options},iocharset=euc-jp";
;;
esac
# Create mountdir
d="/mnt/${p##*/}" ; [ -d "$d" ] || mkdir -p $d
case "$t" in *FAT*)
 [ "$LANGUAGE" = "ja" ] && options="${options},iocharset=euc-jp,codepage=932";
 if [ -z "$NOSWAP" ] && mount -t vfat $p $d 2>/dev/null; then
 if [ -f $d/knoppix.swp ]; then
 echo "${BLUE}Using KNOPPIX swapfile ${MAGENTA}$d/knoppix.swp${BLUE}.${NORMAL}"
 if swapon $d/knoppix.swp 2>/dev/null; then
 fnew="$p $d  auto   $options 0 0
$d/knoppix.swp swap swap defaults 0 0"
 stringinfile "$fnew" "/etc/fstab" || echo "$fnew" >> /etc/fstab
 fi
 else
 umount $d
 fi
 fi
;;
esac
# Normal partition
if [ -z "$fnew" ]; then
fnew="$p $d  auto   $options,noauto 0 0"
anew="$d	-fstype=auto,$options	:$p"
stringinfile "$fnew" "/etc/fstab" || echo "$fnew" >> /etc/fstab
# Only changeable media use automounter
stringinfile "$anew" "/etc/auto.mnt" || echo "# $anew" >> /etc/auto.mnt
fi
done

fi
fi

# 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 ]; then
if [ -x /usr/sbin/mkdosswapfile ]; then
case "$LANGUAGE" in
de)
LOWMEM="Ihr Rechner verf?t nur ?er ${FREEMEM}kB freien RAM-Speicher. Dies ist f? das Arbeiten mit Linux zwar generell ausreichend, aber leider nicht genug, um gr?ere Anwendungen wie KDE oder Office-Pakete zu starten. Sie k?nen im n?hsten 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" 10 65 </dev/console >/dev/console 2>&1 
/usr/sbin/mkdosswapfile </dev/console >/dev/console 2>&1 
fi
fi

# Fat-Client-Version: DHCP Broadcast for IP address
NETDEVICES="$(cat /proc/net/dev 2>/dev/null | awk -F: '/eth.:|tr.:/{print $1}')"
for DEVICE in $NETDEVICES
do
echo -n " ${GREEN}Network device ${MAGENTA}$DEVICE${GREEN} detected, DHCP broadcastig for IP.${NORMAL}"
trap 1 2 3 15
pump -i $DEVICE >/dev/null 2>&1 &
trap "" 1 2 3 11 15
sleep 1
echo " ${BLUE}(Backgrounding)${NORMAL}"
done

# Background image detection for KDE/GNOME/X
BACKGROUND=/cdrom/KNOPPIX/background.gif
[ -e "$BACKGROUND" ] || BACKGROUND=/usr/local/lib/knoppix.gif
echo 'BACKGROUND="'"$BACKGROUND"'"' >> /etc/sysconfig/knoppix
 
# Check for configuration floppy add-on if not running from HD
if [ -z "$INSTALLED" -a -n "$MYCONF" ]; then
FOUND_CONFIG=""
echo -n "${CRE}${BLUE}Checking ${MAGENTA}/dev/fd0${BLUE} for KNOPPIX configuration floppy...${NORMAL}"
if mount -t auto -o ro /dev/fd0 /mnt/floppy >/dev/null 2>&1; then
for i in knoppix.sh KNOPPIX.SH KNOPPIX.sh Knoppix.sh; do
if [ -f /mnt/floppy/$i ]; then
echo ""
FOUND_CONFIG="yes"
echo " ${GREEN}KNOPPIX Configuration floppy found, executing ${MAGENTA}$i${GREEN}.${NORMAL}"
echo "6" > /proc/sys/kernel/printk
. /mnt/floppy/$i /mnt/floppy || true
echo "0" > /proc/sys/kernel/printk
break
fi
done
umount /mnt/floppy 2>/dev/null
fi
[ -n "$FOUND_CONFIG" ] || echo " ${BLUE}Not present.${NORMAL}"
fi

# Check for extra shellscript on CD-Rom (/cdrom/KNOPPIX/knoppix.sh)
for i in knoppix.sh KNOPPIX.SH KNOPPIX.sh Knoppix.sh; do
if [ -f /cdrom/KNOPPIX/$i ]; then
echo ""
FOUND_CONFIG="yes"
echo " ${GREEN}KNOPPIX Configuration file found in /cdrom/KNOPPIX, executing ${MAGENTA}$i${GREEN}.${NORMAL}"
echo "6" > /proc/sys/kernel/printk
. /cdrom/KNOPPIX/$i /cdrom/KNOPPIX || true
echo "0" > /proc/sys/kernel/printk
break
fi
done

if [ -n "$AUTOMOUNTER" ]; then
# Check for floppy dir, reinstall with automounter
[ -d /mnt/floppy -a ! -L /mnt/floppy ] && rmdir /mnt/floppy
[ -d /mnt/auto/floppy ] || mkdir -p /mnt/auto/floppy
[ -L /mnt/floppy ] || ln -s /mnt/auto/floppy /mnt/floppy
[ -d /mnt/cdrom -a ! -L /mnt/cdrom ] && rmdir /mnt/cdrom
[ -d /mnt/auto/cdrom ] || mkdir -p /mnt/auto/cdrom
[ -L /mnt/cdrom ] || ln -s /mnt/auto/cdrom /mnt/cdrom
rm -f /etc/fstab.new
# Replace paths from bootfloppy
sed 's|/mnt/cdrom|/mnt/auto/cdrom|g;s|/mnt/floppy|/mnt/auto/floppy|g' /etc/fstab > /etc/fstab.new
mv -f /etc/fstab.new /etc/fstab
# Start automounter now
/etc/init.d/autofs start >/dev/null && echo " ${GREEN}Automounter started for: ${MAGENTA}${AUTOMOUNTS}${GREEN}.${NORMAL}"
fi

# Start input method server now
if [ -n "$INPUTMETHODSERVER" ];then
/etc/init.d/${INPUTMETHODSERVER} start >/dev/null && echo " ${GREEN}Input method started for: ${YELLOW}${INPUTMETHODSERVER}${MAGENTA}(${LANGUAGE})${GREEN}.${NORMAL}"
fi

# This has to be done as root
[ -e /opt/openoffice/program/resource-"$LANGUAGE" ] && { rm -f /etc/alternatives/soffice.resource ; ln -sf /opt/openoffice/program/resource-"$LANGUAGE" /etc/alternatives/soffice.resource 2>/dev/null; }
[ -e /opt/openoffice/help/help-"$LANGUAGE" ] && { rm -f /etc/alternatives/soffice.help ; ln -sf /opt/openoffice/help/help-"$LANGUAGE" /etc/alternatives/soffice.help 2>/dev/null; }

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

# Re-enable interrupt signals
trap 1 2 3 15

exit 0
