#!/bin/bash # /KNOPPIX/etc/init.d/knoppix-autoconfig # Basic system configuration and hardware setup # (C) Klaus Knopper 2004 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 "$?" } # Reinit USB devices that could not be started from linuxrc # Adopted from /etc/hotplug/usb.rc with some changes. # Calling /etc/hotplug/usb.rc directly can result in crashes due # to quite cautiousless module probing there. -KK usbreinit(){ LISTER=/usr/sbin/usbmodules test -x $LISTER || LISTER="$(type -p usbmodules 2>/dev/null)" [ -z "$LISTER" -o ! -f /proc/bus/usb/devices ] && return 1 # make sure the usb agent will run ACTION="add" ; PRODUCT="0/0/0" ; DEVFS="/proc/bus/usb" ; DEVICE= ; DEVPATH= export ACTION PRODUCT DEVFS DEVICE DEVPATH echo -n "sync:[" if [ -d /sys/bus/usb/devices ]; then # Kernel 2.6 for device in /sys/bus/usb/devices/*; do DEVPATH="${device#/sys/}" echo -n "${DEVPATH##*/}" " "; /etc/hotplug/usb.agent >/dev/null 2>&1 done else # Kernel 2.4 for DEVICE in /proc/bus/usb/*/*; do echo -n ${DEVICE##*/} " "; /etc/hotplug/usb.agent >/dev/null 2>&1 done fi echo -n "] " return 0 } ### 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 stringinfile "/dev/pts" /proc/mounts || mount -t devpts /dev/pts /dev/pts 2>/dev/null # 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="$(/dev/null 2>&1; then #USE_ALSA="yes" #ALSA_CARD="$(getbootparam 'alsa' 2>/dev/null)" #[ -n "$ALSA_CARD" ] || ALSA_CARD="autodetect" #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="us" # 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" 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,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,fr" TZ="Europe/Sofia" ;; # 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" 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,fr" XMODIFIERS="@im=Chinput" TZ="Asia/Shanghai" ;; # 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" TZ="Europe/Prague" ;; 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,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,us,fr" TZ="Europe/Madrid" ;; fi) # Finnish version, though we may not have the kde-i18n files COUNTRY="fi" LANG="fi_FI@euro" KEYTABLE="fi" XKEYBOARD="fi" KDEKEYBOARD="fi" CHARSET="iso8859-15" # Additional KDE Keyboards KDEKEYBOARDS="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,us" TZ="Europe/Paris" ;; 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" 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,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" 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" 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,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,us,fr" TZ="Europe/Warsaw" ;; 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" 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,fr" ;; # 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,fr" TZ="Europe/Bratislava" ;; 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" 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,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 #case "$DESKTOP" in gnome|enlightenment|kde|larswm|xfce|xfce4|windowmaker|wmaker|icewm|fluxbox|twm) ;; *) DESKTOP="kde"; ;; esac DESKTOP="gnome" # Check if we are running from the Knoppix-CD or HD #INSTALLED="" #[ -e /KNOPPIX/bin/ash ] || INSTALLED="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" # hwclock uses the TZ variable #export TZ #hwclock $UTC -s #KERNEL="$(uname -r)" #echo " ${GREEN}Running Linux Kernel ${YELLOW}$KERNEL${GREEN}.${NORMAL}" #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 #if checkbootparam "splash"; then # RES=$(fbresolution 2>/dev/null) # [ "$RES" = "1024x768" ] && /etc/init.d/splash.sh start #fi update_progress() { # be sure we are non-blocking (echo "$1" > /etc/sysconfig/progress) & } #KTZ="$(getbootparam tz 2>/dev/null)" #[ -f "/usr/share/zoneinfo/$KTZ" ] && TZ="$KTZ" #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 \ 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 # No kernel messages while probing modules echo "0" > /proc/sys/kernel/printk # Check for IDE-SCSI capable CD-Rom(s) first checkbootparam "idecd" || checkbootparam "atapicd" || modprobe ide-scsi >/dev/null 2>&1 modprobe ide-cd >/dev/null 2>&1 # Bring up loopback interface now #ifconfig lo 127.0.0.1 up # CD Checker #if checkbootparam "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 "${RED}" #( cd /cdrom/ ; rm -f /tmp/md5sum.log ; LANG="$LANG" md5sum -v -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 #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 # We should always set this, anyways #echo "/sbin/hotplug-knoppix" > /proc/sys/kernel/hotplug #if [ -d /proc/acpi ]; then # ACPI #if checkbootparam "noacpi"; 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 >/dev/null 2>&1 && test -x /etc/init.d/apmd && /etc/init.d/apmd start && echo " ${GREEN}APM Bios found, power management functions enabled.${NORMAL}" #fi #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 tcic >/dev/null 2>&1 if [ "$?" = "0" ]; then echo " ${GREEN}PCMCIA found, starting cardmgr.${NORMAL}" modprobe ds >/dev/null 2>&1 cardmgr >/dev/null 2>&1 && sleep 4 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="" USBREINIT="yes" USBMODULES="usb-uhci usb-ohci" case "$KERNEL" in 2.6.*) USBMODULES="uhci_hcd ohci_hcd";; esac for u in $USBMODULES; do if stringinfile "$u" /proc/modules; then FOUNDUSB="yes" elif modprobe "$u" >/dev/null 2>&1; then FOUNDUSB="yes" USBREINIT="" fi done if [ -n "$FOUNDUSB" ]; then echo -n " ${GREEN}USB found, managed by ${MAGENTA}hotplug${GREEN}" # We have to do this here, because /proc/bus/usb does not seem to exist before # the lowlevel controller module(s) are loaded. mount -o devmode=0666 -t usbdevfs /proc/bus/usb /proc/bus/usb >/dev/null 2>&1 if [ -n "$USBREINIT" ]; then echo -n ": ${YELLOW}(Re-)scanning USB devices... "; usbreinit echo -n "Done." else echo -n "." fi 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 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="" FIREWIREREINIT="yes" if stringinfile ohci1394 /proc/modules; then FOUNDFIREWIRE="yes" FIREWIREREINIT="yes" elif modprobe ohci1394 >/dev/null 2>&1; then FOUNDFIREWIRE="yes" FIREWIREREINIT="" fi if [ -n "$FOUNDFIREWIRE" ]; then HOTPLUG="yes" echo -n " ${GREEN}Firewire found, managed by ${MAGENTA}hotplug${GREEN}" if [ -n "$FIREWIREREINIT" -a -x /etc/hotplug.d/ieee1394/rescan-scsi-bus.sh ]; then echo -n ": ${YELLOW}(Re-)scanning firewire devices... " /etc/hotplug.d/ieee1394/rescan-scsi-bus.sh >/dev/null 2>&1 echo -n "Done." else echo -n "." fi echo "${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 # Second: Search & configure supported hardware # 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" NOAUDIO="yes" [ -n "$NOAUDIO" -o -n "$USE_ALSA" ] && 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 /opt/knoppix/sbin/hwsetup -p $HWSETUP_NOAUDIO $HWSETUP_NOSCSI >/dev/null then echo -n "${NORMAL}" else echo " ${RED}Please check.${NORMAL}" fi #fi 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" -o -n "$USE_ALSA" ] then # Setting micro input to zero to avoid subsonic disaster # if using alsa, this leads to error-messages [ -z "$USE_ALSA" ] && ( exec aumix -m 0 >/dev/null 2>&1 & ) SOUNDCARD="$SOUND_DRIVER" [ -n "$USE_ALSA" ] && SOUNDCARD="ALSA(${ALSA_CARD})" 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 # 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" ] && /opt/knoppix/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" ] && /opt/knoppix/sbin/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 && { modprobe agpgart || modprobe agpgart agp_try_unsupported=1; } >/dev/null 2>&1 && echo " ${YELLOW}AGP bridge${GREEN} detected." fi update_progress 80 # KNOPPIX automatic XFree86 Setup if ! checkbootparam "nomkxf86config"; then [ -x /opt/knoppix/sbin/mkxf86config ] && /opt/knoppix/sbin/mkxf86config 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 [ "$a" != "n" ] && system-config-display echo " ${GREEN}Interactive configuration finished. Everything else should be fine for now.${NORMAL}" fi #if [ -n "$USE_ALSA" -a -x /etc/init.d/alsa-autoconfig ] #then # [ -n "$SOUND_DRIVER" ] && rmmod -r "$SOUND_DRIVER" >/dev/null 2>&1 # # Export ALSA_CARD cariable to init script # case "$ALSA_CARD" in auto*) ALSA_CARD="";; esac # ALSA_CARD="$ALSA_CARD" /etc/init.d/alsa-autoconfig # # Something went wrong ? # [ ! -r /etc/modules.conf ] && ln -sf /KNOPPIX/etc/modules.conf /etc/modules.conf #fi #RUNLEVEL="$(runlevel)" #AUTOMOUNTER="" #[ -x /etc/init.d/autofs ] && [ "$RUNLEVEL" != "N 1" ] && [ "$RUNLEVEL" != "N S" ] && AUTOMOUNTER="yes" #addautomount(){ # /dev/device options #d="${1##*/}" #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,$2 :$i" #stringinfile "$anew" "/etc/auto.mnt" || echo "$anew" >> /etc/auto.mnt #AUTOMOUNTS="$AUTOMOUNTS $d" #new="$1 /mnt/auto/$d auto users,noauto,exec,$2 0 0" #else #[ -d /mnt/$d ] && mkdir -p /mnt/$d #new="$1 /mnt/$d auto users,noauto,exec,$2 0 0" #fi #stringinfile "$new" "/etc/fstab" || echo "$new" >> /etc/fstab #} # #AUTOMOUNTS="floppy cdrom" # Add new devices to /etc/fstab and /etc/auto.mnt #for i in /dev/cdrom?*; do #if [ -L $i ]; then #addautomount "$i" "ro" #fi #done NOSWAP="" checkbootparam "noswap" && NOSWAP="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 #[hs]d*) partitions="$partitions /dev/$partition";; # IDE or SCSI disk partition #esac #done </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 # 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 hotplug, is still running, so just wait. #sleep 8 #fi #echo "${GREEN}Done.${NORMAL}" #fi #if [ -n "$partitions" ]; then # while read p m f relax; do # case "$p" in *fd0*|*proc*|*\#*) continue;; esac # options="users,exec" # fnew="" # case "$f" in swap) # 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}" # swapon $p 2>/dev/null # fi # continue # ;; # esac ## Create mountdir if not already present # d="/mnt/${p##*/}" ; [ -d "$d" ] || mkdir -p "$d" # case "$f" in vfat|msdos) # if [ -z "$NOSWAP" ] && mount -o uid=knoppix,gid=knoppix,ro -t $f $p $d 2>/dev/null; then # if [ -f $d/knoppix.swp ]; then # mount -o remount,rw $d # if swapon $d/knoppix.swp 2>/dev/null; then # echo "${BLUE}Using KNOPPIX swapfile ${MAGENTA}$d/knoppix.swp${BLUE}.${NORMAL}" # mount -o remount,ro $d 2>/dev/null # fnew="$d/knoppix.swp swap swap defaults 0 0" # stringinfile "$fnew" "/etc/fstab" || echo "$fnew" >> /etc/fstab # else # umount $d # fi # else # umount $d # fi # fi # ;; # esac # done </dev/console 2>&1 #/usr/sbin/mkdosswapfile /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 #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 /mnt/[sh]d[a-z] /mnt/[sh]d[a-z][1-9] /mnt/[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 } fstype(){ case "$(file -s $1)" in *[Ff][Aa][Tt]*|*[Xx]86*) echo "vfat"; return 0;; *[Rr][Ee][Ii][Ss][Ee][Rr]*) echo "reiserfs"; return 0;; *[Xx][Ff][Ss]*) echo "xfs"; return 0;; *[Ee][Xx][Tt]3*) echo "ext3"; return 0;; *[Ee][Xx][Tt]2*) echo "ext2"; return 0;; *data*) echo "invalid"; return 0;; *) echo "auto"; return 0;; esac } # Try to mount this filesystem read-only, without or with encryption trymount(){ # Check if already mounted case "$(cat /proc/mounts)" in *\ $2\ *) return 0;; esac # 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}" a="y" while [ "$a" != "n" -a "$a" != "N" ]; do # We need to mount crypto-loop files with initial rw support mount -t auto -o loop,rw,encryption=AES256 "$1" "$2" && return 0 echo -n "${RED}Mount failed, retry? [Y/n] ${NORMAL}" read a done return 1 } ## Check for persistent homedir option and eventually mount /home from there, ## or use a loopback file. #HOMEDIR="$(getbootparam home)" #MYHOMEDEVICE="" #MYHOMEMOUNTPOINT="" #MYHOMEDIR="" #if [ -n "$HOMEDIR" ]; then #case "$HOMEDIR" in #/dev/*) #MYHOMEDEVICE="${HOMEDIR##/dev/}" #MYHOMEDEVICE="/dev/${MYHOMEDEVICE%%/*}" #MYHOMEMOUNTPOINT="/mnt/${MYHOMEDEVICE##/dev/}" #MYHOMEDIR="/mnt/${HOMEDIR##/dev/}" #;; #/mnt/*) #MYHOMEDEVICE="${HOMEDIR##/mnt/}" #MYHOMEDEVICE="/dev/${MYHOMEDEVICE%%/*}" #MYHOMEMOUNTPOINT="/mnt/${MYHOMEDEVICE##/dev/}" #MYHOMEDIR="$HOMEDIR" #;; #[Aa][Uu][Tt][Oo]|[Ss][Cc][Aa][Nn]|[Ff][Ii][Nn][Dd]) #MYHOMEDIR="$(findfile knoppix.img)" #MYHOMEDEVICE="${MYHOMEDIR##/mnt/}" #MYHOMEDEVICE="/dev/${MYHOMEDEVICE%%/*}" #MYHOMEMOUNTPOINT="/mnt/${MYHOMEDEVICE##/dev/}" #;; #*) #echo "${CRE}${RED}Invalid ${CYAN}home=${RED} option '$HOMEDIR' specified (must start with /dev/ or /mnt/ or 'scan').${NORMAL}" #echo "${CRE}${RED}Option ignored.${NORMAL}" #;; #esac #fi #if [ -n "$MYHOMEDIR" ]; then #if trymount "$MYHOMEDEVICE" "$MYHOMEMOUNTPOINT"; then #[ -f "$MYHOMEMOUNTPOINT/knoppix.img" ] && MYHOMEDIR="$MYHOMEMOUNTPOINT/knoppix.img" #while read device mountpoint fs relax; do #case "$mountpoint" in *$MYHOMEMOUNTPOINT*) #case "$fs" in *[Nn][Tt][Ff][Ss]*) #umount "$MYHOMEMOUNTPOINT"; echo " ${RED}ERROR: WON'T MOUNT NTFS FILESYSTEM ON $MYHOMEDEVICE READ/WRITE!" #break #;; #*[Ff][Aa][Tt]*) ## Note: This currently won't work with encrypted partitions #umount "$MYHOMEMOUNTPOINT"; mount -t vfat -o rw,uid=knoppix,gid=knoppix,umask=002 "$MYHOMEDEVICE" "$MYHOMEMOUNTPOINT" #if [ ! -f "$MYHOMEDIR" ]; then #echo " ${RED}WARNING: FAT32 is not a good filesystem option for /home/knoppix (missing socket/symlink support).${NORMAL}" #echo " ${RED}WARNING: Better use an ext2 loopback file on this device, and boot with home=$MYHOMEDEVICE/knoppix.img.${NORMAL}" #fi #;; #esac #if mount -o remount,rw "$MYHOMEMOUNTPOINT"; then #echo -n " ${GREEN}Mounting ${YELLOW}$MYHOMEDIR${GREEN} as ${YELLOW}/home/knoppix${GREEN}... " #if [ -f "$MYHOMEDIR" ]; then ## It's a loopback file, mount it over the /home/knoppix directory #trymount "$MYHOMEDIR" /home/knoppix #RC="$?" #[ "$RC" = "0" ] && ERROR="$(mount -o remount,rw /home/knoppix 2>&1)" #RC="$?" #else ## Do a --bind mount #ERROR="$(mount --bind "$MYHOMEDIR" /home/knoppix 2>&1)" #RC="$?" #fi #[ "$RC" = "0" ] && echo "${GREEN}/home/knoppix mounted OK.${NORMAL}" || { echo "${RED}FAILED."; echo "$ERROR${NORMAL}"; } #fi #break #;; #esac #done < /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 #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 update_progress 100 #if checkbootparam "splash"; then # sleep 1 # /etc/init.d/splash.sh stop # sleep 1 #fi echo "6" > /proc/sys/kernel/printk # Re-enable signals trap 2 3 11 exit 0