2 # Filename: autoconfig.functions
3 # Purpose: basic system configuration and hardware setup for grml system
4 # Authors: grml-team (grml.org), (c) Klaus Knopper <knopper@knopper.net>, (c) Michael Prokop <mika@grml.org>
5 # Bug-Reports: see http://grml.org/bugs/
6 # License: This file is licensed under the GPL v2.
7 # Latest change: Mit Jul 25 18:59:49 CEST 2007 [mika]
8 ################################################################################
10 # {{{ path, variables, signals, umask, zsh
11 export PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin"
16 # Ignore these signals in non-interactive mode: INT, TERM, SEGV
17 [ -z "$PS1" ] && trap "" 2 3 11
21 if [ -n "$ZSH_VERSION" ] ; then
27 # avoid 'no matches found: ...'
28 iszsh && setopt no_nomatch # || echo "Warning: not running under zsh!"
31 ### {{{ Utility Functions
35 case "$(cat $2)" in *$1*) return 0;; esac
41 case "$2" in *$1*) return 0;; esac
45 # Reread boot command line; echo last parameter's argument or return false.
47 stringinstring " $1=" "$CMDLINE" || return 1
48 result="${CMDLINE##*$1=}"
49 result="${result%%[ ]*}"
54 # Check boot commandline for specified option
56 stringinstring " $1" "$CMDLINE"
61 if [ "$1" = "yes" ] ; then
69 grep -q small /etc/grml_version 2>>$DEBUG && return 0 || return 1
73 grep -q usb /etc/grml_version 2>>$DEBUG && return 0 || return 1
77 # {{{ filesystems (proc, pts, sys) and fixes
79 [ -f /proc/version ] || mount -t proc /proc /proc 2>/dev/null
83 stringinfile "/dev/pts" /proc/mounts || mount -t devpts /dev/pts /dev/pts 2>/dev/null
87 [ -d /sys/devices ] || mount -t sysfs /sys /sys 2>/dev/null
91 # {{{ Read in boot parameters
92 [ -f /proc/version ] || mount_proc # make sure we can access /proc/cmdline when sourcing this file too
93 CMDLINE="$(cat /proc/cmdline)"
94 [ -d /cdrom/bootparams/ ] && CMDLINE="$CMDLINE $(cat /cdrom/bootparams/* | tr '\n' ' ')"
97 # {{{ Check if we are running from the grml-CD or HD
99 [ -e /GRML/etc/grml_cd ] || INSTALLED="yes"
103 checkbootparam "testcd" >>$DEBUG 2>&1 && TESTCD="yes"
106 # {{{ source lsb-functions , color handling
107 if checkbootparam "nocolor"; then
109 . /etc/grml/lsb-functions
110 einfo "Disabling colors in bootsequence as requested on commandline." ; eend 0
112 . /etc/grml/lsb-functions
119 if checkbootparam "debug"; then
122 if stringinstring "BOOT_IMAGE=debug " "$CMDLINE" ; then
126 if [ -n "$BOOTDEBUG" ]; then
127 einfo "Starting intermediate shell stage $stage as requested by \"debug\" option."
129 if [ -r /etc/grml/screenrc ] ; then
130 einfo "Starting GNU screen to be able to use a full featured shell environment."
131 einfo "Just exit the shells (and therefore screen) to continue boot process..."
132 /bin/zsh -c "screen -c /etc/grml/screenrc"
134 einfo "Notice that the shell does not provide job handling: ctrl-z, bg and fg won't work!"
135 einfo "Just exit the shell to continue boot process..."
146 if checkbootparam "log"; then
147 export DEBUG="/tmp/grml.log.`date +%Y%m%d`"
149 einfo "Bootparameter log found. Log files: ${DEBUG} and /var/log/boot."
151 einfo "Starting bootlogd."
152 bootlogd -r -c 1>>$DEBUG 2>&1 ; eend $?
160 # {{{ Check if we are in interactive startup mode
162 stringinstring "BOOT_IMAGE=expert " "$CMDLINE" && INTERACTIVE="yes"
165 # {{{ set firmware timeout via bootparam
167 if checkbootparam fwtimeout ; then
168 TIMEOUT="$(getbootparam 'fwtimeout' 2>>$DEBUG)"
169 einfo "Bootoption fwtimeout found. (Re)Loading firmware_class module."
170 rmmod firmware_class 1>>$DEBUG 2>&1
171 modprobe firmware_class ; eend $?
173 if [ -z "$TIMEOUT" ] ; then
174 TIMEOUT="100" # linux kernel default: 10
176 if [ -f /sys/class/firmware/timeout ] ; then
177 einfo "Setting timeout for firmware loading to ${TIMEOUT}."
178 echo 100 > /sys/class/firmware/timeout ; eend $?
183 ### {{{ language configuration / localization
186 einfo "Activating language settings:"
189 # people can specify $LANGUAGE and $CONSOLEFONT in a config file:
190 [ -r /etc/grml/autoconfig ] && . /etc/grml/autoconfig
192 grep -q ' lang=.*-utf8' /proc/cmdline && UTF8='yes' || UTF8=''
194 # check for bootoption which overrides config from /etc/grml/autoconfig:
195 BOOT_LANGUAGE="$(getbootparam lang 2>>$DEBUG)"
196 [ -n "$BOOT_LANGUAGE" ] && LANGUAGE="$BOOT_LANGUAGE"
198 # set default to 'en' in live-cd mode if $LANGUAGE is not yet set:
199 if [ -z "$INSTALLED" ] ; then
200 [ -n "$LANGUAGE" ] || LANGUAGE='en-utf8'
203 # if bootoption lang is used update /etc/default/locale, otherwise *not*!
204 if [ -n "$BOOT_LANGUAGE" ] ; then
205 [ -x /usr/sbin/grml-setlang ] && /usr/sbin/grml-setlang "$LANGUAGE"
209 if [ -z "$CONSOLEFONT" ] ; then
210 if ! checkbootparam "nodefaultfont" >>$DEBUG 2>&1 ; then
211 # [ -n "$UTF8" ] && CONSOLEFONT='LatArCyrHeb-16' || CONSOLEFONT='Lat15-Terminus16'
212 # if [ -r /usr/share/consolefonts/Lat15-Terminus16.psf.gz ] ; then
213 if [ -r /usr/share/consolefonts/Uni3-Terminus16.psf.gz ] ; then
214 CONSOLEFONT='Uni3-Terminus16'
216 ewarn "/usr/share/consolefonts/Uni3-Terminus16.psf.gz not available. Please upgrade package console-terminus." ; eend 1
221 # export it now, so error messages get translated, too
222 if checkgrmlsmall ; then
223 export LANG='C' # grml-small does not provide any further locales
225 [ -r /etc/default/locale ] && . /etc/default/locale
229 # configure keyboard layout, read in already set values first:
230 [ -r /etc/sysconfig/keyboard ] && . /etc/sysconfig/keyboard
232 # now allow keyboard override by boot commandline for later use:
233 KKEYBOARD="$(getbootparam keyboard 2>>$DEBUG)"
234 [ -n "$KKEYBOARD" ] && KEYTABLE="$KKEYBOARD"
235 # notce: de/at is a bad choice, so take de-latin1-nodeadkeys instead:
236 [[ "$KKEYBOARD" == 'de' ]] && KEYTABLE=de-latin1-nodeadkeys
237 [[ "$KKEYBOARD" == 'at' ]] && KEYTABLE=de-latin1-nodeadkeys
239 # modify /etc/sysconfig/keyboard only in live-cd mode:
240 if [ -z "$INSTALLED" ] ; then
242 local LANGUAGE="$BOOT_LANGUAGE"
243 . /etc/grml/language-functions
244 # allow setting xkeyboard explicitly different than console keyboard
245 KXKEYBOARD="$(getbootparam xkeyboard 2>>$DEBUG)"
246 if [ -n "$KXKEYBOARD" ]; then
247 XKEYBOARD="$KXKEYBOARD"
248 KDEKEYBOARD="$KXKEYBOARD"
249 elif [ -n "$KKEYBOARD" ]; then
250 XKEYBOARD="$KKEYBOARD"
251 KDEKEYBOARD="$KKEYBOARD"
254 # duplicate of previous code to make sure /etc/grml/language-functions
255 # does not overwrite our values....
256 # now allow keyboard override by boot commandline for later use:
257 KKEYBOARD="$(getbootparam keyboard 2>>$DEBUG)"
258 [ -n "$KKEYBOARD" ] && KEYTABLE="$KKEYBOARD"
259 # notce: de/at is a bad choice, so take de-latin1-nodeadkeys instead:
260 [[ "$KKEYBOARD" == 'de' ]] && KEYTABLE=de-latin1-nodeadkeys
261 [[ "$KKEYBOARD" == 'at' ]] && KEYTABLE=de-latin1-nodeadkeys
263 # write keyboard related variables to file for later use
264 [ -d /etc/sysconfig ] || mkdir /etc/sysconfig
265 echo "KEYTABLE=\"$KEYTABLE\"" > /etc/sysconfig/keyboard
266 echo "XKEYBOARD=\"$XKEYBOARD\"" >> /etc/sysconfig/keyboard
267 echo "KDEKEYBOARD=\"$KDEKEYBOARD\"" >> /etc/sysconfig/keyboard
268 echo "KDEKEYBOARDS=\"$KDEKEYBOARDS\"" >> /etc/sysconfig/keyboard
271 [ -r /etc/sysconfig/keyboard ] && . /etc/sysconfig/keyboard
273 # activate unicode console if running within utf8 environment
274 if [ -r /etc/default/locale ] ; then
275 if grep -q "LANG=.*UTF" /etc/default/locale ; then
276 if checkgrmlsmall && [ -z "$INSTALLED" ] ; then
277 ewarn "Not runnning unicode_start: grml-small with reduced language support detected." ; eend 0
279 einfo "Setting up unicode environment."
280 unicode_start 2>>$DEBUG ; eend $?
285 # Set default keyboard before interactive setup
286 if [ -n "$KEYTABLE" ] ; then
287 einfo "Running loadkeys for ${WHITE}${KEYTABLE}${NORMAL} in background"
288 loadkeys -q $KEYTABLE &
292 # we have to set up all consoles, therefore loop it over all ttys:
293 NUM_CONSOLES=`fgconsole --next-available`
294 NUM_CONSOLES=`expr ${NUM_CONSOLES} - 1`
295 [ ${NUM_CONSOLES} -eq 1 ] && NUM_CONSOLES=6
296 if [ -n "$CHARMAP" ] ; then
297 einfo "Running consolechars for ${CHARMAP}"
298 for vc in `seq 0 ${NUM_CONSOLES}` ; do
299 consolechars --tty=/dev/tty${vc} -m ${CHARMAP} ; RC=$?
303 if [ -n "$CONSOLEFONT" ] ; then
304 einfo "Running consolechars using ${CONSOLEFONT}"
305 for vc in `seq 0 ${NUM_CONSOLES}` ; do
306 consolechars --tty=/dev/tty${vc} -f $CONSOLEFONT || consolechars --tty=/dev/tty${vc} -d
317 if checkbootparam hostname ; then
318 HOSTNAME="$(getbootparam 'hostname' 2>>$DEBUG)"
319 einfo "Setting hostname to $HOSTNAME as requested."
320 sed -i "s/^127.0.0.1.*localhost/127.0.0.1 $HOSTNAME localhost/" /etc/hosts
321 hostname $HOSTNAME ; eend $?
323 hostname --file /etc/hostname
328 # fstabuser (needed when running from harddisk with username != grml {{{
330 [ -r /etc/grml/autoconfig ] && . /etc/grml/autoconfig
331 if [ -n "$CONFIG_FSTAB_USER" ] ; then
332 fstabuser="$CONFIG_FSTAB_USER"
334 fstabuser=$(getent passwd 1000 | cut -d: -f1)
336 # if not yet set fall back to default 'grml' user
337 [ -n "$fstabuser" ] || fstabuser='grml'
341 # {{{ Set clock (Local time is more often used than GMT, so it is default)
343 # don't touch the files if running from harddisk:
344 if [ -z "$INSTALLED" ]; then
346 checkbootparam utc >>$DEBUG 2>&1 && UTC="-u"
347 checkbootparam gmt >>$DEBUG 2>&1 && UTC="-u"
348 # hwclock uses the TZ variable
349 [ -r /etc/timezone ] && TZ=$(cat /etc/timezone)
350 [ -n "$TZ" ] || TZ=Europe/Vienna
352 if ! [ -r /dev/rtc ] ; then
353 ewarn "Realtime clock not available, skipping execution of hwclock therefore." ; eend 0
355 ERROR=$(TZ="$TZ" hwclock $UTC -s 2>&1 | head -1) ; RC=$?
356 if [ -n "$ERROR" ] ; then
358 ERROR=$(TZ="$TZ" hwclock $UTC -s --directisa 2>&1 | head -1)
359 if [ -n "$ERROR" ] ; then
360 eerror "Problem running hwclock: $ERROR" ; eend 1
369 # {{{ print kernel info
371 vmware-detect &>/dev/null && VMWARE="inside ${WHITE}VMware/Qemu${NORMAL}"
372 [ -d /proc/xen ] && VMWARE='' # vmware-detect returns '0' when running with a Xen-enabled kernel
373 einfo "Running Linux Kernel $KERNEL $VMWARE" ; eend 0
374 if [ -r /proc/cpuinfo ] ; then
375 if egrep -q '^flags.*(vmx|svm)' /proc/cpuinfo ; then
377 einfo 'CPU(s) featuring virtualization technology detected' ; eend 0
381 if [ -d /proc/xen ] ; then
383 einfo 'Running kernel featuring support for Xen detected' ; eend 0
389 # {{{ vmware specific stuff
391 if checkbootparam novmware ; then
392 ewarn "Skipping running vmware specific stuff as requested on boot commandline." ; eend 0
394 if [ -z "$INSTALLED" ] ; then
395 if vmware-detect || stringinstring "BOOT_IMAGE=vmware " "$CMDLINE" ; then
396 if ! checkbootparam qemu ; then
397 if [ -r /etc/X11/xorg.conf.vmware ] ; then
398 einfo "VMware: Copying /etc/X11/xorg.conf.vmware to /etc/X11/xorg.conf"
399 cp /etc/X11/xorg.conf.vmware /etc/X11/xorg.conf ; eend $?
408 # {{{ qemu specific stuff
410 if checkbootparam qemu ; then
411 if [ -r /etc/X11/xorg.conf.example ] ; then
412 einfo "Qemu: Copying /etc/X11/xorg.conf.example to /etc/X11/xorg.conf"
413 cp /etc/X11/xorg.conf.example /etc/X11/xorg.conf ; eend $?
419 # {{{ ld.so.cache + depmod
421 if [ -n "$INSTALLED" ]; then
422 if ! [ -r /etc/grml.first.boot ] ; then
423 einfo "Running from HD for the first time, regenerate ld.so.cache and modules.dep:"
425 # Regenerate ld.so.cache and module dependencies on HD
426 einfo "Running ldconfig" ; ldconfig ; eend $?
427 einfo "Running depmod" ; depmod -a ; eend $?
428 touch /etc/grml.first.boot
436 # update_progress {{{
438 # be sure we are non-blocking
439 (echo "$1" > /etc/sysconfig/progress) &
445 # don't touch the files if running from harddisk:
446 if [ -z "$INSTALLED" ]; then
447 einfo "Setting timezone."
448 KTZ="$(getbootparam tz 2>>$DEBUG)"
449 [ -f "/usr/share/zoneinfo/$KTZ" ] && TZ="$KTZ"
451 cp "/usr/share/zoneinfo/$TZ" /etc/localtime && eend 0
456 # small computer / nearly no ram {{{
459 RAM=$(/usr/bin/gawk '/MemTotal/{print $2}' /proc/meminfo)
460 # MEM=$(/usr/bin/gawk 'BEGIN{m=0};/MemFree|Cached|SwapFree/{m+=$2};END{print m}' /proc/meminfo)
463 if checkbootparam "small"; then
464 einfo "Information: ${RAM} kB of RAM available." ; eend 0
465 einfo "Bootoption small detected. Activating small system."
466 if [ -r /etc/inittab.small ] ; then
467 mv /etc/inittab /etc/inittab.normal
468 mv /etc/inittab.small /etc/inittab
470 sed -i 's/^9/#&/' /etc/inittab
471 sed -i 's/^10/#&/' /etc/inittab
472 sed -i 's/^11/#&/' /etc/inittab
473 sed -i 's/^12/#&/' /etc/inittab
475 /sbin/telinit q ; eend $?
477 if checkgrmlsmall ; then
478 if [[ $RAM -lt 25000 ]] ; then
479 ewarn "Information: ${RAM} kB of RAM available." ; eend 1
480 ewarn "At least 32MB of RAM should be available for grml-small." ; eend 1
481 ewarn "Use the bootoption small to save some more MB of memory usage." ; eend 0
482 ewarn "Dropping you into a rescue shell. To continue booting exit the shell." ; eend 0
485 einfo "Information: ${RAM} kB of RAM available." ; eend 0
488 if [[ $RAM -lt 58000 ]] ; then
489 ewarn "Information: ${RAM} kB of RAM available." ; eend 1
490 ewarn "At least 64MB of RAM should be available for grml." ; eend 1
491 ewarn "Use the bootoption small to save some more MB of memory usage." ; eend 0
492 ewarn "Dropping you into a rescue shell. To continue booting exit the shell." ; eend 0
495 einfo "Information: ${RAM} kB of RAM available." ; eend 0
503 # skip startup of w3m {{{
505 if checkbootparam "fast"; then
506 ewarn "Bootoption fast detected. Skipping startup of w3m."
507 sed -i 's#^1:.*#1:12345:respawn:/usr/bin/openvt -f -c 1 -w -- /bin/zsh#' /etc/inittab
508 /sbin/telinit q ; eend $?
513 # activate serial console {{{
515 if checkbootparam "console"; then
516 einfo "Bootoption (for serial) console detected."
518 if [ -r /etc/mgetty/mgetty.config ] ; then
519 MODE=$(getbootparam console | awk -F, '{print $2}')
521 [ -n "$MODE" ] || MODE=9600 # default mode
522 einfo "Setting speed in /etc/mgetty/mgetty.config to $MODE bps"
523 sed -i "s/speed [0-9]*/speed $MODE/" /etc/mgetty/mgetty.config ; eend $?
526 einfo "Activating mgetty."
527 sed -i 's/^#T0/T0/' /etc/inittab
528 sed -i 's/^#T1/T1/' /etc/inittab
529 /sbin/telinit q ; eend $?
535 # For burning on IDE-CD-Roms, k3b (and others) check for special permissions {{{
538 for DEVICE in /proc/ide/hd?; do
539 [ "$(cat $DEVICE/media 2>/dev/null)" = "cdrom" ] && CDROMS="$CDROMS /dev/${DEVICE##*/}"
541 [ -n "$CDROMS" ] && { chown root.cdrom $CDROMS; chmod 666 $CDROMS; } 2>/dev/null
545 # {{{ Bring up loopback interface now
547 if [ -z "$INSTALLED" ] ; then
548 if grep -q 'iface lo inet loopback' /etc/network/interfaces 2>/dev/null ; then
549 grep -q lo=lo /etc/network/run/ifstate 2>/dev/null || ifup lo
557 # firewire devices {{{
558 # the raw1394 driver does not yet export info into SYSFS,
559 # so let's create raw1394 device manually
560 # http://www.michael-prokop.at/blog/index.php?p=352
561 config_firewire_dev(){
562 if checkbootparam "nofirewiredev" ; then
563 ewarn "Skipping creating some firewire devices as requested on boot commandline." ; eend 0
565 #if [ "${KERNEL%-*}" == "2.6.11" ] ; then
566 einfo "Creating some firewire devices (fix kernel 2.6-bug)."
567 # cd /dev && MAKEDEV video1394 raw1394
568 [ -r /dev/raw1394 ] || mknod /dev/raw1394 c 171 0
569 [ -r /dev/video1394 ] || mknod -m 666 /dev/video1394 c 171 16
570 # mknod -m 666 /dev/dv1394 c 171 32 # for NTSC
571 [ -r /dev/dv1394 ] || mknod -m 666 /dev/dv1394 c 171 34 # for PAL
572 chown -R root:video /dev/raw1394 /dev/video1394 /dev/dv1394
573 chmod -R 664 /dev/raw1394 /dev/video1394 /dev/dv1394 ; eend $?
579 # {{{ copy passwd-lockfile to ramdisk (fix unionfs-behaviour)
580 # otherwise we will get: passwd: Authentication token lock busy
582 if [ -z "$INSTALLED" ] ; then
590 if [ -n "$TESTCD" ]; then
591 einfo "Checking CD data integrity as requested by '${WHITE}testcd${NORMAL}' boot option."
592 einfo "Reading files and checking against GRML/md5sums, this may take a while..."
594 ( cd /cdrom/GRML/ ; rm -f /tmp/md5sum.log ; md5sum -c md5sums 2>&1 | tee /tmp/md5sum.log )
595 if [ "$?" = "0" ]; then
596 echo " ${GREEN}Everything looks OK${NORMAL}"
598 echo "${RED} *** CHECKSUM FAILED FOR THESE FILES: ***"
599 egrep -v '(^md5sum:|OK$)' /tmp/md5sum.log
600 echo "${RED} *** DATA ON YOUR CD MEDIUM IS POSSIBLY INCOMPLETE OR DAMAGED, ***${NORMAL}"
601 echo "${RED} *** OR YOUR COMPUTER HAS BAD RAM. ***${NORMAL}"
602 echo -n "${CYAN}Hit return to contine, or press the reset button to quit.${NORMAL}
\a\a\a "
610 # {{{ hardware detection via discover
612 if checkbootparam "nodisc" ; then
613 ewarn "Skipping hardware detection via discover as requested on boot commandline." ; eend 0
615 if [ -x /sbin/discover ] ; then
616 einfo "Discovering hardware. Trying to load the following modules in background:"
618 einfo "$(discover --data-path=linux/module/name --data-path=linux/modules/options --format="%s %s" --data-version=`uname -r` --enable-bus all | sort -u | xargs echo)"
620 /sbin/discover-modprobe -v 1>>$DEBUG 2>&1 &
623 eerror "Application discover not available. Information: udev should handle hardware recognition." ; eend 0
629 # {{{ hardware detection via hwinfo
631 if checkbootparam hwinfo >>$DEBUG 2>&1; then
632 einfo "Discovering hardware via hwinfo:"
633 MODULES=$(su grml hwinfo | grep "Cmd: \"modprobe" | awk '{print $5}' | sed 's/"//')
634 echo -n " Loading modules: "
635 for i in `echo $MODULES` ; do echo -n $i && modprobe $i ; done
641 # {{{ disable hotplug agents on request
642 config_hotplug_agent(){
643 if checkbootparam "noagent" ; then
644 AGENT="$(getbootparam 'noagent' 2>>$DEBUG)"
645 AGENTLIST=$(echo "$AGENT" | sed 's/,/\\n/g')
646 AGENTNL=$(echo "$AGENT" | sed 's/,/ /g')
647 einfo "Disabling hotplug-agent(s) $AGENTNL"
648 for agent in $(echo -e $AGENTLIST) ; do
649 mv /etc/hotplug/${agent}.rc /etc/hotplug/${agent}.norc
651 [ "$?" == "0" ] ; eend $?
656 # {{{ blacklist of hotplug-modules
657 config_hotplug_blacklist(){
658 if checkbootparam "black" ; then
659 BLACK="$(getbootparam 'black' 2>>$DEBUG)"
660 BLACKLIST=$(echo "$BLACK" | sed 's/,/\\n/g')
661 BLACKNL=$(echo "$BLACK" | sed 's/,/ /g')
662 einfo "Blacklisting $BLACKNL via /etc/hotplug/blacklist.d/hotplug-light"
663 echo -e "$BLACKLIST" >> /etc/hotplug/blacklist.d/hotplug-light
664 echo -e "$BLACKLIST" >> /etc/hotplug/blacklist
672 if checkbootparam "nohotplug" ; then
673 ewarn "Skipping running hotplug as requested on boot commandline." ; eend 0
675 if [ -r /etc/init.d/hotplug ] ; then
676 einfo "Starting hotplug system in background."
677 /etc/init.d/hotplug start 1>>$DEBUG 2>>$DEBUG &
679 elif [ -r /etc/init.d/hotplug-light ] ; then
680 einfo "Starting hotplug-light system in background."
681 /etc/init.d/hotplug-light start 1>>$DEBUG 2>>$DEBUG &
684 ewarn "No hotplug system found. Should be handled by udev. Skipping execution." ; eend 0
690 # {{{ blacklist specific module [ used in /etc/init.d/udev ]
692 if checkbootparam "blacklist" ; then
693 if [ -z "$INSTALLED" ]; then
694 einfo "Bootoption blacklist found."
695 BLACK="$(getbootparam 'blacklist' 2>>$DEBUG)"
696 if [ -n "$BLACK" ] ; then
697 einfo "Blacklisting module ${BLACK} via /etc/modprobe.d/grml."
698 echo "# begin entry generated by config_blacklist of grml-autoconfig" >> /etc/modprobe.d/grml
699 echo "blacklist $BLACK" >> /etc/modprobe.d/grml
700 echo "alias $BLACK off" >> /etc/modprobe.d/grml
701 echo "# end entry generated by config_blacklist of grml-autoconfig" >> /etc/modprobe.d/grml ; eend $?
703 eerror "No given module for blacklist found. Blacklisting will not work therefore."
706 ewarn "Backlisting via bootoption does not work on harddisk installations." ; eend 1
708 einfo "Please blacklist the module(s) via /etc/modprobe.d/blacklist."
717 if [ -d /proc/acpi ]; then
718 if checkbootparam "noacpi"; then
719 ewarn "Skipping ACPI Bios detection as requested via noacpi on boot commandline." ; eend 0
720 elif checkbootparam "nogrmlacpi" ; then
721 ewarn "Skipping ACPI Bios detection as requested via nogrmlacpi on boot commandline." ; eend 0
723 einfo "ACPI Bios found, activating modules (disable via bootoption noacpi / nogrmlacpi): "
726 for a in /lib/modules/$KERNEL/kernel/drivers/acpi/*; do
728 basename="${basename%%.*}"
729 case "$basename" in *_acpi)
730 egrep -qi "${basename%%_acpi}" /proc/acpi/dsdt 2>>$DEBUG || continue ;;
732 modprobe $basename >>$DEBUG 2>&1 && found="yes"
733 local BASE="$BASE $basename"
735 if [ -n "$found" ] ; then
736 einfo "$BASE" ; eend 0
738 ewarn "(none)" ; eend 1
740 if ! [ -S /var/run/acpid.socket ] ; then
741 if ! [ -r /var/run/dbus/pid ] ; then
742 einfo "Starting acpi daemon."
743 /etc/init.d/acpid start >>$DEBUG ; eend $?
745 eerror "acpid error: it seems you are running d-bus/hal, but acpid needs to be started before d-bus."
746 eerror "Solution: please activate acpid via /etc/runlevel.conf"
750 ewarn "acpi daemon already running."
757 if checkbootparam "noapm"; then
758 ewarn "Skipping APM Bios detection as requested on boot commandline." ; eend 0
760 modprobe apm power_off=1 >>$DEBUG 2>&1
761 if [ "$?" = "0" ] ; then
762 if [ -x /etc/init.d/apmd ] ;then
763 einfo "APM Bios found, enabling power management functions."
764 /etc/init.d/apmd start ; eend $?
767 eerror "Loading apm module failed." ; eend 1
774 # {{{ PCMCIA Check/Setup
775 # This needs to be done before other modules are being loaded (by hwsetup)
777 if checkbootparam "nopcmcia"; then
778 ewarn "Skipping PCMCIA detection as requested on boot commandline." ; eend 0
780 if /usr/sbin/laptop-detect ; then
781 einfo "Detected Laptop - checking for PCMCIA." && eend 0
782 modprobe pcmcia_core >>$DEBUG 2>&1
783 # Try Cardbus or normal PCMCIA socket drivers
784 modprobe yenta_socket >>$DEBUG 2>&1 || modprobe i82365 >>$DEBUG 2>&1 || modprobe pd6729 >>$DEBUG 2>&1 || modprobe tcic >>$DEBUG 2>&1
785 if [ "$?" = "0" ]; then
786 modprobe ds >>$DEBUG 2>&1
787 if [ -d /proc/bus/pccard ] ; then
788 if [ -x /sbin/cardmgr ] ; then
789 einfo "PCMCIA found, starting cardmgr."
790 cardmgr >>$DEBUG 2>&1 && sleep 6 && eend 0
792 eerror "No cardmgr found. Make sure package pcmciautils is installed, it should handle it instead." ; eend 1
801 # {{{ run software synthesizer via speakup
803 if checkbootparam swspeak ; then
804 if [ -d /proc/speakup/ ] ; then
805 einfo "Bootoption swspeak found. Kernel supports speakup." ; eend 0
807 if [ -x /etc/init.d/speech-dispatcher ] ; then
808 einfo "Starting speech-dispatcher."
809 /etc/init.d/speech-dispatcher start 1>>DEBUG ; eend $?
810 einfo "Activating sftsyn in Kernel."
811 echo sftsyn >/proc/speakup/synth_name ; eend $?
812 einfo "Just run swspeak if you want to use software synthesizer via speakup."
813 flite -o play -t "Finished activating software speakup. Just run swspeak when booting finished."
815 eerror "speech-dispatcher not available. swspeak will not work without it." ; eend 1
816 flite -o play -t "speech-dispatcher not available. speakup will not work without it."
820 eerror "Kernel does not seem to support speakup. Skipping swspeak." ; eend 1
821 flite -o play -t "Kernel does not seem to support speakup. Sorry."
827 # {{{ Check for blind option or brltty
830 checkbootparam "blind" && BLIND="yes"
831 BRLTTY="$(getbootparam brltty 2>>$DEBUG)"
833 if [ -n "$BLIND" -o -n "$BRLTTY" ]; then
834 if [ -x /sbin/brltty ]; then
835 # Blind option detected, start brltty now.
836 # modprobe serial_core parport_serial generic_serial && echo "done"
841 if [ -n "$BRLTTY" ]; then
843 BRLTYPE="${BRLTTY%%,*}"
845 if [ -n "$R" -a "$R" != "$BRLTTY" ]; then
847 BRLDEV="${BRLTTY%%,*}"
849 if [ -n "$R" -a "$R" != "$BRLTTY" ]; then
851 BRLTEXT="${BRLTTY%%,*}"
856 [ -n "$BRLTYPE" ] && CMD="$CMD -b $BRLTYPE"
857 [ -n "$BRLDEV" ] && CMD="$CMD -d $BRLDEV"
858 [ -n "$BRLTEXT" ] && CMD="$CMD -t $BRLTEXT"
859 einfo "Starting braille-display manager."
862 sleep 2 && BLINDSOUND="yes"
869 # {{{ Interactive configuration
870 config_interactive(){
871 if [ -n "$INTERACTIVE" ] ; then
872 einfo "Entering interactive configuration second stage."
874 echo " ${GREEN}Your console keyboard defaults to: ${MAGENTA}${KEYTABLE}"
875 echo -n "${CYAN}Do you want to (re)configure your console keyboard?${NORMAL} [Y/n] "
877 [ "$a" != "n" ] && /usr/sbin/dpkg-reconfigure console-data ; eend $?
879 echo -n "${CYAN}Do you want to (re)configure your soundcard?${NORMAL} [Y/n] "
881 [ "$a" != "n" ] && alsaconf && ( exec aumix -m 0 >>$DEBUG 2>&1 & ) ; eend $?
883 echo -n "${CYAN}Do you want to (re)configure your graphics (X11) subsystem?${NORMAL} [Y/n] "
885 [ "$a" != "n" ] && xorgcfg -textmode ; eend $?
886 echo " ${GREEN}Interactive configuration finished. Everything else should be fine for now.${NORMAL}"
894 if checkbootparam forceagp ; then
895 # Probe for AGP. Hope this can fail safely
896 stringinfile "AGP" "/proc/pci" 2>>$DEBUG && { modprobe agpgart || modprobe agpgart agp_try_unsupported=1; } >>$DEBUG 2>&1 && einfo "AGP bridge detected." ; eend 0
902 config_automounter(){
903 if checkbootparam automounter ; then
904 RUNLEVEL="$(runlevel)"
906 [ -x /etc/init.d/autofs ] && [ "$RUNLEVEL" != "N 1" ] && [ "$RUNLEVEL" != "N S" ] && AUTOMOUNTER="yes"
911 if [ -n "$AUTOMOUNTER" ]; then
912 [ -d "/mnt/$d" -a ! -L "/mnt/$d" ] && rmdir /mnt/$d
913 [ -d "/mnt/auto/$d" ] || mkdir -p "/mnt/auto/$d"
914 [ -L "/mnt/$d" ] || ln -s "/mnt/auto/$d" "/mnt/$d"
915 anew="$d -fstype=auto,$2 :$i"
916 stringinfile "$anew" "/etc/auto.mnt" || echo "$anew" >> /etc/auto.mnt
917 AUTOMOUNTS="$AUTOMOUNTS $d"
918 new="$1 /mnt/auto/$d auto users,noauto,exec,$2 0 0"
920 [ -d /mnt/$d ] && mkdir -p /mnt/$d
921 new="$1 /mnt/$d auto users,noauto,exec,$2 0 0"
923 stringinfile "$new" "/etc/fstab" || echo "$new" >> /etc/fstab
926 AUTOMOUNTS="floppy cdrom"
927 # Add new devices to /etc/fstab and /etc/auto.mnt
928 for i in /dev/cdrom?*; do
930 addautomount "$i" "ro"
935 if [ -n "$AUTOMOUNTER" ]; then
936 # Check for floppy dir, reinstall with automounter
937 [ -d /mnt/floppy -a ! -L /mnt/floppy ] && rmdir /mnt/floppy
938 [ -d /mnt/auto/floppy ] || mkdir -p /mnt/auto/floppy
939 [ -L /mnt/floppy ] || ln -s /mnt/auto/floppy /mnt/floppy
940 [ -d /mnt/cdrom -a ! -L /mnt/cdrom ] && rmdir /mnt/cdrom
941 [ -d /mnt/auto/cdrom ] || mkdir -p /mnt/auto/cdrom
942 [ -L /mnt/cdrom ] || ln -s /mnt/auto/cdrom /mnt/cdrom
944 # Replace paths from bootfloppy
945 sed 's|/mnt/cdrom|/mnt/auto/cdrom|g;s|/mnt/floppy|/mnt/auto/floppy|g' /etc/fstab > /etc/fstab.new
946 mv -f /etc/fstab.new /etc/fstab
947 # Start automounter now
948 einfo "Starting automounter for ${AUTOMOUNTS}."
949 /etc/init.d/autofs start >>$DEBUG ; eend $?
954 # {{{ Collect partitions from /proc/partitions first for enabling DMA
958 while read major minor blocks partition relax; do
959 partition="${partition##*/}"
960 [ -z "$partition" -o ! -e "/dev/$partition" ] && continue
962 hd?) IDEDISKS="$IDEDISKS $partition";; # IDE Harddisk, entire disk
963 sd?) ;; # SCSI Harddisk, entire disk
964 # [hs]d*) partitions="$partitions /dev/$partition";; # IDE or SCSI disk partition
965 [hs]d*|ub*) partitions="$partitions /dev/$partition";; # IDE, USB or SCSI disk partition
968 $(awk 'BEGIN{old="__start"}{if($0==old){exit}else{old=$0;if($4&&$4!="name"){print $0}}}' /proc/partitions)
971 check_partitions 1>/dev/null 2>&1 # avoid output "check_partitions:3: read-only file system"
974 # {{{ Enable DMA for all IDE drives now if not disabled
975 # Notice: Already done by linuxrc, but make sure it's done also on harddisk-installed systems
977 if checkbootparam "nodma"; then
978 ewarn "Skipping DMA accelleration as requested on boot commandline." ; eend 0
980 for d in $(cd /proc/ide 2>>$DEBUG && echo hd[a-z]); do
981 if test -d /proc/ide/$d; then
982 if egrep -q 'using_dma[ \t]+0' /proc/ide/$d/settings 2>>$DEBUG; then
983 MODEL="$(cat /proc/ide/$d/model 2>>$DEBUG)"
984 test -z "$MODEL" && MODEL="[GENERIC IDE DEVICE]"
985 einfo "Enabling DMA acceleration for: ${WHITE}$d ${YELLOW}[${MODEL}]${NORMAL}"
986 echo "using_dma:1" >/proc/ide/$d/settings
995 # {{{ Start creating /etc/fstab with HD partitions and USB SCSI devices now
998 NOSWAP="yes" # we do not use swap by default!
999 if checkbootparam "swap" || checkbootparam "anyswap" ; then
1001 checkbootparam "anyswap" && export ANYSWAP='yes' || export ANYSWAP=""
1004 if checkbootparam "nofstab" || checkbootparam "forensic" ; then
1005 ewarn "Skipping /etc/fstab creation as requested on boot commandline." ; eend 0
1007 einfo "Scanning for harddisk partitions and creating /etc/fstab. (Disable this via boot option: nofstab)"
1008 iszsh && setopt nonomatch
1009 if [ -x /usr/sbin/rebuildfstab ] ; then
1010 config_userfstab || fstabuser=grml
1011 /usr/sbin/rebuildfstab -r -u $fstabuser -g $fstabuser ; eend $?
1013 ewarn "Command rebuildfstab not found. Install package grml-rebuildfstab." ; eend 1
1015 fi # checkbootparam nofstab/forensic
1017 # Scan for swap, config, homedir - but only in live-mode
1018 if [ -z "$INSTALLED" ] ; then
1019 [ -z "$NOSWAP" ] && einfo "Searching for swap partition(s) as requested."
1022 HOMEDIR="$(getbootparam home)"
1023 if [ -n "$partitions" ]; then
1024 while read p m f relax; do
1025 case "$p" in *fd0*|*proc*|*sys*|*\#*) continue;; esac
1026 partoptions="users,exec"
1028 # it's a swap partition?
1031 if [ -n "$NOSWAP" ]; then
1032 ewarn "Ignoring swap partition ${WHITE}$p${NORMAL}. (Force usage via boot option 'swap', or execute grml-swapon)"
1035 case "$(dd if=$p bs=1 count=6 skip=4086 2>/dev/null)" in
1036 S1SUSP|S2SUSP|pmdisk|[zZ]*)
1037 if [ -n "$ANYSWAP" ] ; then
1038 einfo "Using swap partition ${WHITE}${p}${NORMAL} [bootoption anyswap found]."
1039 swapon $p 2>>$DEBUG ; eend $?
1041 ewarn "Suspend signature on ${WHITE}${p}${NORMAL} found, not using as swap. (Force usage via boot option: anyswap)"
1045 if [[ "$p" == LABEL* ]] ; then
1046 p=$(blkid -t $p | awk -F: '{print $1}')
1048 if grep -q $p /proc/swaps ; then
1049 ewarn "Not using swap partition ${WHITE}${p}${NORMAL} as it is already in use." ; eend 0
1051 if [ -b "$p" ] ; then
1052 einfo "Using swap partition ${WHITE}${p}${NORMAL}."
1053 swapon $p 2>>$DEBUG ; eend $?
1055 ewarn "$p is not a valid block device - not using it therefore." ; eend 0
1064 esac # it's a swap partition?
1069 vfat|msdos|ntfs) MOUNTOPTS="$MOUNTOPTS,uid=${fstabuser},gid=${fstabuser}" ;;
1070 ext2|ext3|reiserfs|jfs|reiser4|xfs) MOUNTOPTS="$MOUNTOPTS,noatime" ;;
1072 # *) NONEFOUND='1'; continue ;;
1076 if [ -z "$NOSWAP" ] ; then
1077 mount -o "$MOUNTOPTS" -t $f $p $m 2>>$DEBUG && MOUNTED=1 || continue
1078 # Activate swapfile, if exists
1079 SWAPFILE="$(/bin/ls -1d $m/[Gg][Rr][Mm][Ll].[Ss][Ww][Pp] 2>/dev/null)"
1081 if [ -z "$NOSWAP" -a -n "$SWAPFILE" -a -f "$SWAPFILE" ]; then
1082 mount -o remount,rw $m && MOUNTED=1
1083 if swapon "$SWAPFILE" 2>>$DEBUG ; then
1085 einfo "Using GRML swapfile ${WHITE}${SWAPFILE}${NORMAL}."
1087 fnew="$SWAPFILE swap swap defaults 0 0"
1088 stringinfile "$fnew" "/etc/fstab" || echo "$fnew" >> /etc/fstab
1089 GRML_SWP="$GRML_SWP $SWAPFILE"
1092 mount -o remount,ro $m 2>>$DEBUG && MOUNTED=1
1095 # use a image as home
1096 IMAGE="$(/bin/ls -1d $m/[Gg][Rr][Mm][Ll].[Ii][Mm][Gg] 2>/dev/null)"
1097 if [ -z "$GRML_IMG" -a -n "$IMAGE" -a -f "$IMAGE" ]; then
1098 if [ -n "$HOMEDIR" ]; then
1099 if [ "$HOMEDIR" != "scan" -a "$HOMEDIR" != "$IMAGE" -a "$HOMEDIR" != "${IMAGE%/*.*}" ]; then
1103 if type -a grml-image >/dev/null 2>&1 && grml-image "$IMAGE" </dev/console >/dev/console 2>&1; then
1105 mount -o remount,ro $m 2>>$DEBUG && MOUNTED=1
1110 # Umount, if not in use
1111 [ -n "$MOUNTED" ] && umount -r $m 2>/dev/null
1123 if [ -n "$MOUSE_DEVICE" ] ; then
1124 einfo "Detecting mouse: ${MOUSE_FULLNAME} at ${MOUSE_DEVICE}" ; eend $?
1129 # {{{ IPv6 configuration
1130 # Load IPv6 kernel module and print IP adresses
1132 if checkbootparam "ipv6"; then
1133 einfo "Enabling IPv6 as requested on boot commandline (sleeping for 2 seconds)"
1135 # we probably need some time until stateless autoconfiguration has happened
1137 NETDEVICES="$(awk -F: '/eth.:|tr.:|wlan.:/{print $1}' /proc/net/dev 2>>$DEBUG)"
1138 for DEVICE in `echo "$NETDEVICES"`; do
1141 ADDRESSES="$(ifconfig $DEVICE | awk '/.*inet6 addr:.*/{print $3}')"
1142 COUNT="$(ifconfig $DEVICE | awk '/.*inet6 addr:.*/{ sum += 1};END {print sum }')"
1144 for ADDR in `echo "$ADDRESSES"` ; do
1147 if [ "$COUNT" -eq "0" ] ; then
1148 einfo "(none)" ; eend 1
1158 # {{{ Fat-Client-Version: DHCP Broadcast for IP address
1160 if checkbootparam "nodhcp"; then
1161 ewarn "Skipping DHCP broadcast/network detection as requested on boot commandline." ; eend 0
1163 NETDEVICES="$(awk -F: '/eth.:|tr.:|wlan.:/{print $1}' /proc/net/dev 2>>$DEBUG)"
1164 rm -rf /etc/network/status ; mkdir -p /etc/network/status
1165 for DEVICE in `echo "$NETDEVICES"` ; do
1166 einfo "Network device ${WHITE}${DEVICE}${NORMAL} detected, DHCP broadcasting for IP. (Backgrounding)"
1168 ifconfig $DEVICE up >>$DEBUG 2>&1
1169 ( pump -i $DEVICE >>$DEBUG 2>&1 && echo finished_running_pump > /etc/network/status/$DEVICE ) &
1174 if [ -n "$INSTALLED" ] ; then
1175 ewarn 'If you want to disable automatic DHCP requests set CONFIG_DHCP=no in /etc/grml/autoconfig.'
1182 # {{{ helper functions
1185 # search all partitions for a file in the root directory
1186 for i in /mnt/[sh]d[a-z] /mnt/[sh]d[a-z][1-9] /mnt/[sh]d[a-z][1-9]?*; do
1187 # See if it's already mounted
1188 [ -f "$i/$1" ] && { echo "$i/$1"; return 0; }
1189 if [ -d "$i" ] && mount -r "$i" 2>>$DEBUG; then
1190 [ -f "$i/$1" ] && FOUND="$i/$1"
1191 umount -l "$i" 2>>$DEBUG
1192 [ -n "$FOUND" ] && { echo "$FOUND"; return 0; }
1199 case "$(file -s $1)" in
1200 *[Ff][Aa][Tt]*|*[Xx]86*) echo "vfat"; return 0;;
1201 *[Rr][Ee][Ii][Ss][Ee][Rr]*) echo "reiserfs"; return 0;;
1202 *[Xx][Ff][Ss]*) echo "xfs"; return 0;;
1203 *[Ee][Xx][Tt]3*) echo "ext3"; return 0;;
1204 *[Ee][Xx][Tt]2*) echo "ext2"; return 0;;
1205 *data*) echo "invalid"; return 0;;
1206 *) echo "auto"; return 0;;
1210 # Try to mount this filesystem read-only, without or with encryption
1212 # Check if already mounted
1213 case "$(cat /proc/mounts)" in *\ $2\ *) return 0;; esac
1214 # Apparently, mount-aes DOES autodetect AES loopback files.
1215 [ -b "$1" ] && { mount -t auto -o ro "$1" "$2" 2>>$DEBUG; RC="$?"; }
1216 # We need to mount crypto-loop files with initial rw support
1217 [ -f "$1" ] && { mount -t auto -o loop,rw "$1" "$2" 2>>$DEBUG; RC="$?"; }
1219 [ "$RC" = "0" ] && return 0
1221 einfo "Filesystem not autodetected, trying to mount $1 with AES256 encryption."
1223 while [ "$a" != "n" -a "$a" != "N" ]; do
1224 # We need to mount crypto-loop files with initial rw support
1225 mount -t auto -o loop,rw,encryption=AES256 "$1" "$2" && return 0
1226 echo -n "${RED}Mount failed, retry? [Y/n] ${NORMAL}"
1227 # Problem with ioctl() from getpasswd()?
1237 if checkbootparam "nocpu"; then
1238 ewarn "Skipping CPU detection as requested on boot commandline." ; eend 0
1240 # check module dependencies
1242 if [ -e /lib64 ] ; then
1243 [ -e /lib/modules/${KERNEL}/kernel/arch/x86_64/kernel/cpufreq ] || return 1
1245 [ -e /lib/modules/${KERNEL}/kernel/arch/i386/kernel/cpu/cpufreq -o ! -e /lib/modules/${KERNEL}/kernel/drivers/cpufreq ] || return 1
1249 if [[ `grep -c processor /proc/cpuinfo` -gt 1 ]] ; then
1250 einfo "Detecting CPU:"
1251 CPU=$(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>>$DEBUG)
1252 echo $CPU | sed 's/ \{1,\}/ /g'
1255 einfo "Detecting CPU: `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>>$DEBUG` " ; eend 0
1258 # Disclaimer: sorry for the tons of if/then/else... but this makes sure we use:
1259 # * it only if we have the according kernel modules available
1260 # * cpufreq only on laptops (check via /usr/sbin/laptop-detect) and not inside Virtual Box
1261 # * current version of /etc/init.d/loadcpufreq from Debian (to stay in sync)
1262 # -> parse output of the initscript and output it according to our look'n'feel
1263 # * our own cpufreq-detect.sh if /etc/init.d/loadcpufreq isn't present
1264 if ! cpufreq_check ; then
1265 ewarn "Skipping cpufreq setup as module dependencies are not fulfilled." ; eend 1
1267 if /usr/sbin/laptop-detect 1>/dev/null 2>&1 ; then
1268 # Virtual Box supports ACPI and laptop-detect returns with '0', so check for it:
1269 if [ -r /proc/acpi/battery/BAT0/info ] ; then
1270 if grep -q 'OEM info: innotek' /proc/acpi/battery/BAT0/info ; then
1271 einfo 'Virtual Box detected, skipping cpufreq setup.' ; eend 0
1275 einfo "Detected Laptop - trying to use cpu frequency scaling:"
1277 if [ -x /etc/init.d/loadcpufreq ] ; then
1278 SKIP_CPU_GOVERNOR=''
1279 LOADCPUFREQ=$(mktemp)
1280 /etc/init.d/loadcpufreq start >"$LOADCPUFREQ" 2>&1 ; RC=$?
1281 if grep -q FATAL "$LOADCPUFREQ" ; then
1287 for line in $(grep FATAL "$LOADCPUFREQ" | sed 's/.*FATAL: //; s/ (.*)//') ; do
1288 eerror "$line" ; eend $RC
1292 elif grep -q done "$LOADCPUFREQ" ; then
1293 MODULE=$(grep done "$LOADCPUFREQ" | sed 's/.*done (\(.*\))./\1/')
1294 if [ -n "$MODULE" -a "$MODULE" != none ]; then
1295 einfo "Loading cpufreq kernel module $MODULE" ; eend 0
1297 ewarn "Could not find an appropriate kernel module for cpu frequency scaling." ; eend 1
1301 elif [ -r /usr/bin/cpufreq-detect.sh ] ; then
1302 . /usr/bin/cpufreq-detect.sh
1303 if [ -n "$MODULE" -a "$MODULE" != none ]; then
1304 einfo "Loading modules ${MODULE}"
1305 modprobe "$MODULE" 1>>$DEBUG || modprobe "$MODULE_FALLBACK" 1>>$DEBUG
1307 if [[ $RC == 0 ]]; then
1314 ewarn "Could not detect an appropriate CPU for use with cpu frequency scaling - skipping." && eend 1
1318 if [ -z "$SKIP_CPU_GOVERNOR" ] ; then
1319 einfo "Loading cpufreq_ondemand, setting ondemand governor"
1320 if modprobe cpufreq_ondemand ; RC=$? ; then
1321 for file in $(find /sys/devices/system/cpu/ -name scaling_governor 2>/dev/null) ; do
1322 echo ondemand > $file
1332 fi # checkbootparam nocpu
1336 # {{{ autostart of ssh
1338 if checkbootparam ssh ; then
1339 SSH_PASSWD="$(getbootparam 'ssh' 2>>$DEBUG)"
1340 einfo "Bootoption passwd found."
1341 if [ -n "$SSH_PASSWD" ] ; then
1342 echo "grml:$SSH_PASSWD" | chpasswd -m
1343 einfo "Starting secure shell server in background."
1344 /etc/init.d/rmnologin start 1>>$DEBUG 2>>$DEBUG
1345 /etc/init.d/ssh start 1>>$DEBUG 2>>$DEBUG &
1348 eerror "No given password for ssh found. Autostart of SSH will not work." ; eend 1
1351 ewarn "Warning: please change the password for user grml set via bootparameter as soon as possible!"
1357 # {{{ set password for user grml
1359 if checkbootparam passwd >>$DEBUG 2>&1; then
1360 einfo "Bootoption passwd found."
1361 PASSWD="$(getbootparam 'passwd' 2>>$DEBUG)"
1362 if [ -n "$PASSWD" ] ; then
1363 echo "grml:$PASSWD" | chpasswd -m ; eend $?
1365 eerror "No given password for ssh found. Autostart of SSH will not work." ; eend 1
1368 ewarn "Warning: please change the password for user grml set via bootparameter as soon as possible!"
1374 # {{{ Check for persistent homedir option and eventually mount /home from there, or use a loopback file.
1376 if checkbootparam home ; then
1377 HOMEDIR="$(getbootparam home)"
1381 if [ -n "$HOMEDIR" ]; then
1382 einfo "Bootoption home detected." && eend 0
1385 MYHOMEDEVICE="${HOMEDIR##/dev/}"
1386 MYHOMEDEVICE="/dev/${MYHOMEDEVICE%%/*}"
1387 MYHOMEMOUNTPOINT="/mnt/${MYHOMEDEVICE##/dev/}"
1388 MYHOMEDIR="/mnt/${HOMEDIR##/dev/}"
1391 MYHOMEDEVICE="${HOMEDIR##/mnt/}"
1392 MYHOMEDEVICE="/dev/${MYHOMEDEVICE%%/*}"
1393 MYHOMEMOUNTPOINT="/mnt/${MYHOMEDEVICE##/dev/}"
1394 MYHOMEDIR="$HOMEDIR"
1396 [Aa][Uu][Tt][Oo]|[Ss][Cc][Aa][Nn]|[Ff][Ii][Nn][Dd])
1397 MYHOMEDIR="$(findfile grml.img)"
1398 MYHOMEDEVICE="${MYHOMEDIR##/mnt/}"
1399 MYHOMEDEVICE="/dev/${MYHOMEDEVICE%%/*}"
1400 MYHOMEMOUNTPOINT="/mnt/${MYHOMEDEVICE##/dev/}"
1403 eerror "Invalid home= option '$HOMEDIR' specified (must start with /dev/ or /mnt/ or 'scan')." ; eend 1
1404 eerror "Option ignored." ; eend 1
1409 if [ -n "$MYHOMEDIR" ]; then
1410 if trymount "$MYHOMEDEVICE" "$MYHOMEMOUNTPOINT"; then
1411 [ -f "$MYHOMEMOUNTPOINT/grml.img" ] && MYHOMEDIR="$MYHOMEMOUNTPOINT/grml.img"
1412 while read device mountpoint fs relax; do
1413 case "$mountpoint" in *$MYHOMEMOUNTPOINT*)
1416 umount "$MYHOMEMOUNTPOINT"; eerror "Error: will not mount NTFS filesystem on $MYHOMEDEVICE read/write!" ; eend 1
1420 # Note: This currently won't work with encrypted partitions
1421 umount "$MYHOMEMOUNTPOINT"; mount -t vfat -o rw,uid=grml,gid=grml,umask=002 "$MYHOMEDEVICE" "$MYHOMEMOUNTPOINT"
1422 if [ ! -f "$MYHOMEDIR" ]; then
1423 ewarn "WARNING: FAT32 is not a good filesystem option for /home/grml (missing socket/symlink support)."
1424 ewarn "WARNING: Better use an ext2 loopback file on this device, and boot with home=$MYHOMEDEVICE/grml.img."
1429 if mount -o remount,rw "$MYHOMEMOUNTPOINT"; then
1430 einfo "Mounting ${WHITE}$MYHOMEDIR${NORMAL} as ${WHITE}/home/grml${NORMAL}."
1431 if [ -f "$MYHOMEDIR" ]; then
1432 # It's a loopback file, mount it over the /home/grml directory
1433 trymount "$MYHOMEDIR" /home/grml
1435 [ "$RC" = "0" ] && ERROR="$(mount -o remount,rw /home/grml 2>&1)"
1439 ERROR="$(mount --bind "$MYHOMEDIR" /home/grml 2>&1)"
1443 [ "$RC" = "0" ] && eend 0 || ( eerror "${ERROR}" ; eend 1 )
1445 fi # mount -o remount,rw,...
1448 esac # case "$mountpoint" in *$MYHOMEMOUNTPOINT*)
1452 fi # if trymount ...
1454 fi # checkbootparam home
1458 # {{{ Check for scripts on CD-ROM
1459 config_cdrom_scripts(){
1460 if checkbootparam "script"; then
1461 for script in /cdrom/scripts/* ; do
1462 einfo " grml script found on CD, executing ${WHITE}${script}${NORMAL}."
1471 if ! [ -x /usr/bin/aumix ] ; then
1472 eerror "aumix binary not available. Can not set sound volumes therefore." ; eend 1
1475 if ! [ -r /proc/asound/cards ] ; then
1476 ewarn "No soundcard present, skipping mixer settings therefore." ; eend 0
1480 if checkbootparam vol ; then
1481 VOL="$(getbootparam 'vol' 2>>$DEBUG)"
1482 if [ -z "$VOL" ] ; then
1483 eerror "Bootoption vol found but no volume level/parameter given. Using defaults." ; eend 1
1490 if checkbootparam nosound ; then
1491 einfo "Muting sound devices on request."
1492 # some IBM notebooks require the following stuff:
1493 if [ -x /usr/bin/amixer ] ; then
1494 if amixer get Front 1>/dev/null 2>>$DEBUG ; then
1495 amixer set Front unmute 1>/dev/null
1496 amixer set Front 0% 1>/dev/null
1499 ERROR=$(aumix -w 0 -v 0 -p 0 -m 0 2>&1) ; RC=$?
1500 if [ -n "$ERROR" ] ; then
1502 eerror "Problem muting sound devices: $ERROR"
1506 elif [ -z "$INSTALLED" ]; then
1507 einfo "Setting mixer volumes to level ${WHITE}${VOL}${NORMAL}."
1508 # some IBM notebooks require the following stuff:
1509 if [ -x /usr/bin/amixer ] ; then
1510 if amixer get Front 1>/dev/null 2>>$DEBUG ; then
1511 amixer set Front unmute 1>/dev/null
1512 amixer set Front ${VOL}% 1>/dev/null
1515 ERROR=$(aumix -w $VOL -v $VOL -p $VOL -m $VOL 2>&1) ; RC=$?
1516 if [ -n "$ERROR" ] ; then
1518 eerror "Problem setting mixer volumes: $ERROR (no soundcard?)"
1528 # {{{ modem detection
1530 if checkbootparam "nomodem"; then
1531 ewarn "Skipping check for AC97 modem controller as requested on boot commandline." ; eend 0
1533 if [ -x /etc/init.d/sl-modem-daemon ] ; then
1534 if lspci | grep Intel | grep -q "AC'97 Modem Controller" ; then
1535 einfo "AC97 modem controller detected. Start it running 'Start sl-modem-daemon'."
1543 # {{{ keyboard add-ons
1544 config_setkeycodes(){
1545 if checkbootparam "setkeycodes" ; then
1546 einfo "Setting keycodes as requested via bootparameter 'setkeycodes'."
1547 # MS MM keyboard add-on
1549 setkeycodes e001 126 &>/dev/null
1550 setkeycodes e059 127 &>/dev/null
1552 setkeycodes e03b 59 &>/dev/null
1553 setkeycodes e008 60 &>/dev/null
1554 setkeycodes e007 61 &>/dev/null
1555 setkeycodes e03e 62 &>/dev/null
1556 setkeycodes e03f 63 &>/dev/null
1557 setkeycodes e040 64 &>/dev/null
1558 setkeycodes e041 65 &>/dev/null
1559 setkeycodes e042 66 &>/dev/null
1560 setkeycodes e043 67 &>/dev/null
1561 setkeycodes e023 68 &>/dev/null
1562 setkeycodes e057 87 &>/dev/null
1563 setkeycodes e058 88 &>/dev/null
1565 setkeycodes e00a 89 e008 90 &>/dev/null
1572 config_wondershaper(){
1573 if checkbootparam "wondershaper" ; then
1574 WONDER="$(getbootparam wondershaper 2>>$DEBUG)"
1579 if [ -n "$WONDER" ]; then
1581 DEVICE="${WONDER%%,*}"
1583 if [ -n "$R" -a "$R" != "$WONDER" ]; then
1585 DOWNSTREAM="${WONDER%%,*}"
1587 if [ -n "$R" -a "$R" != "$WONDER" ]; then
1589 UPSTREAM="${WONDER%%,*}"
1594 [ -n "$DEVICE" ] && CMD="$CMD $DEVICE"
1595 [ -n "$DOWNSTREAM" ] && CMD="$CMD $DOWNSTREAM"
1596 [ -n "$UPSTREAM" ] && CMD="$CMD $UPSTREAM"
1597 einfo "Starting wondershaper (${CMD}) in background."
1598 ( sh -c $CMD & ) && eend 0
1605 if checkbootparam "nosyslog"; then
1606 ewarn "Not starting syslog-ng as requested on boot commandline." ; eend 0
1608 einfo "Starting syslog-ng in background."
1609 /etc/init.d/syslog-ng start 1>>$DEBUG &
1617 if checkbootparam "nogpm"; then
1618 ewarn "Not starting GPM as requested on boot commandline." ; eend 0
1620 einfo "Starting gpm in background."
1621 # /etc/init.d/gpm start 1>>$DEBUG &
1622 ( while [ ! -e /dev/psaux ]; do sleep 5; done; /etc/init.d/gpm start 1>>$DEBUG ) &
1630 if checkbootparam "services" ; then
1631 SERVICE="$(getbootparam services 2>>$DEBUG)"
1632 SERVICELIST=$(echo "$SERVICE" | sed 's/,/\\n/g')
1633 SERVICENL=$(echo "$SERVICE" | sed 's/,/ /g')
1634 einfo "Starting service(s) ${SERVICENL} in background."
1635 for service in $(echo -e $SERVICELIST) ; do
1636 /etc/init.d/${service} start 1>>$DEBUG &
1638 [ "$?" == "0" ] ; eend $?
1645 if checkbootparam netconfig ; then
1646 CONFIG="$(getbootparam 'netconfig' 2>>$DEBUG)"
1647 CONFIGFILE='/tmp/netconfig.grml'
1650 wget --timeout=10 --dns-timeout=10 --connect-timeout=10 \
1651 --read-timeout=10 $CONFIG -O $CONFIGFILE && return 0 || return 1
1653 einfo "Trying to get ${WHITE}${CONFIG}${NORMAL}"
1655 while ! getconfig && [[ "$counter" != 0 ]] ; do
1656 echo -n "Sleeping for 5 seconds and trying to get config again... "
1657 counter=$(( counter-1 ))
1658 echo "$counter tries left" ; sleep 1
1660 if [ -r "$CONFIGFILE" ] ; then
1661 einfo "Downloading was successfull." ; eend 0
1662 einfo "md5sum of ${WHITE}${CONFIG}${NORMAL}: "
1663 md5sum $CONFIGFILE ; eend 0
1664 cd / && einfo "Unpacking ${WHITE}${CONFIGFILE}${NORMAL}:" && /usr/bin/unp $CONFIGFILE $EXTRACTOPTIONS ; eend $?
1666 einfo "Sorry, could not fetch $CONFIG" ; eend 1
1673 config_blindsound(){
1674 if checkbootparam "blind" ; then
1676 flite -o play -t "welcome to the gremel system"
1683 if checkbootparam welcome ; then
1684 flite -o play -t "welcome to the gremel system"
1689 # {{{ fix/workaround for unionfs
1691 if [ -z "$INSTALLED" ]; then
1692 touch /var/cache/apt/*cache.bin
1697 # {{{ create all /mnt-directories
1699 ewarn "create_mnt_dirs is deprecated as grml-rebuildfstab does all we need."
1700 ewarn "Please set CONFIG_CREATE_MNT_DIRS='no' in /etc/grml/autoconfig" ; eend 0
1704 # {{{ start X window system via grml-x
1706 if checkbootparam startx ; then
1707 if [ -x /usr/X11R6/bin/X ] ; then
1708 if [ -z "$INSTALLED" ] ; then
1709 WINDOWMANAGER="$(getbootparam 'startx' 2>>$DEBUG)"
1710 if [ -z "$WINDOWMANAGER" ] ; then
1711 einfo "No window manager specified. Taking ${WHITE}wm-ng${NORMAL} as default." && eend 0
1712 WINDOWMANAGER="wm-ng"
1714 einfo "Window manager ${WHITE}${WINDOWMANAGER}${NORMAL} found as bootoption." && eend 0
1716 einfo "Changing to runlevel 5 for starting grml-x ${WINDOWMANAGER}. Just exit X windows system to get full featured consoles."
1717 config_userfstab || fstabuser='grml'
1718 cat>|/etc/init.d/xstartup<<EOF
1720 # su - $fstabuser -c 'grml-x "$WINDOWMANAGER"'
1721 sudo -u $fstabuser -i /usr/bin/grml-x $WINDOWMANAGER 1>>$DEBUG
1723 chmod 755 /etc/init.d/xstartup
1725 # adjust inittab for xstartup
1726 if grep -q '^6:' /etc/inittab ; then
1727 sed -i 's|^6:.*|6:2345:respawn:/bin/zsh --login -c "/etc/init.d/xstartup ; /bin/zsh"|' /etc/inittab
1728 else # just append tty6 to inittab if no definition is present:
1729 echo '6:2345:respawn:/bin/zsh --login -c "/etc/init.d/xstartup ; /bin/zsh"' >> /etc/inittab
1732 /sbin/telinit q ; eend $?
1734 if grep -q '^allowed_users=' /etc/X11/Xwrapper.config ; then
1735 sed -i 's/^allowed_users=.*/allowed_users=anybody/' /etc/X11/Xwrapper.config
1737 echo 'allowed_users=anybody' >> /etc/X11/Xwrapper.config
1741 eerror "We are not running from CD - startx will not work, skipping it.
1742 Please use something like xdm, gdm or kdm for starting X on a harddisk system!" ; eend 1
1745 eerror "/usr/X11R6/bin/X is not present on this grml flavour.
1746 Boot parameter startx does not work therefore." ; eend 1
1752 # {{{ configuration framework
1754 if checkbootparam extract ; then
1755 EXTRACT="$(getbootparam 'extract' 2>>$DEBUG)"
1756 EXTRACTOPTIONS="-- -x $EXTRACT"
1761 if checkbootparam noautoconfig || checkbootparam forensic ; then
1762 ewarn "Skipping running automount of device(s) labeled GRMLCFG as requested." ; eend 0
1764 if [ -z "$INSTALLED" ] ; then
1765 einfo "Searching for device(s) labeled with GRMLCFG." ; eend 0
1767 [ -d /mnt/grml ] || mkdir /mnt/grml
1768 umount /mnt/grml 1>>$DEBUG 2>&1 # make sure it is not mounted
1769 # We do need the following fix so floppy disk is available to blkid in any case :-/
1770 if [ -r /dev/fd0 ] ; then
1771 einfo "Floppy device detected. Trying to access floppy disk. (Disable this via boot option: noautoconfig)"
1772 # dd if=/dev/fd0 of=/dev/null bs=512 count=1 1>>$DEBUG 2>&1
1773 if timeout 4 dd if=/dev/fd0 of=/dev/null bs=512 count=1 1>>$DEBUG 2>&1 ; then
1774 blkid /dev/fd0 1>>$DEBUG 2>&1
1777 DEVICE=$(blkid -t LABEL=GRMLCFG | head -1 | awk -F: '{print $1}')
1778 [ -n "$DEVICE" ] && mount -t auto -o ro $DEVICE /mnt/grml ; RC="$?"
1779 if [[ $RC == 0 ]]; then
1780 einfo "Mounting device $DEVICE labeled GRMLCFG succeeded." ; eend 0
1783 CONFIG="$(/bin/ls -1d /mnt/grml/[Cc][Oo][Nn][Ff][Ii][Gg].[Tt][Bb][Zz] 2>>$DEBUG)"
1784 if [ -n "$CONFIG" ]; then
1785 einfo "Found file ${WHITE}${CONFIG}${NORMAL} - trying to extract it."
1787 unp $CONFIG $EXTRACTOPTIONS ; eend $?
1789 ewarn "Sorry, could not find file config.tbz on device with label GRMLCFG." ; eend 1
1793 SCRIPT="$(/bin/ls -1d /mnt/grml/[Gg][Rr][Mm][Ll].[Ss][Hh] 2>>$DEBUG)"
1794 if [ -n "$SCRIPT" ]; then
1795 einfo "Found script ${WHITE}${SCRIPT}${NORMAL} - trying to execute it."
1798 grep -q '/mnt/grml' /proc/mounts && umount /mnt/grml
1800 ewarn "No devices with label GRMLCFG found." ; eend 0
1809 if checkbootparam "config" ; then
1810 CONFIG="$(getbootparam 'config' 2>>$DEBUG)"
1811 [ -z "$CONFIG" ] && CONFIG='config.tbz'
1812 einfo "Bootoption config found. config is set to: $CONFIG"
1814 einfo "Trying to extract configuration file ${CONFIG}:"
1815 cd / && unp /cdrom/config/$CONFIG $EXTRACTOPTIONS ; eend $?
1819 if checkbootparam myconfig ; then
1820 MOUNTDEVICE="$(getbootparam 'myconfig' 2>>$DEBUG)"
1821 if [ -n "$MOUNTDEVICE" ]; then
1822 if checkbootparam file ; then
1823 FILENAME="$(getbootparam 'file' 2>>$DEBUG)"
1824 [ -n "$FILENAME" ] || FILENAME='config.tbz'
1826 [ -d /mnt/grml ] || mkdir /mnt/grml
1827 umount /mnt/grml 1>>$DEBUG 2>&1 # make sure it is not mounted
1828 mount -o ro -t auto $MOUNTDEVICE /mnt/grml ; RC="$?"
1829 if [[ $RC == 0 ]]; then
1830 einfo "Successfully mounted $MOUNTDEVICE to /mnt/grml (readonly)." ; eend 0
1833 CONFIG="$(/bin/ls -1d /mnt/grml/[Cc][Oo][Nn][Ff][Ii][Gg].[Tt][Bb][Zz] 2>>$DEBUG)"
1834 if [ -n "$CONFIG" ]; then
1835 einfo "Found file ${WHITE}${CONFIG}${NORMAL} - trying to extract it."
1837 unp $CONFIG $EXTRACTOPTIONS ; eend $?
1839 ewarn "Sorry, could not find file config.tbz on device with label GRMLCFG." ; eend 1
1843 SCRIPT="$(/bin/ls -1d /mnt/grml/[Gg][Rr][Mm][Ll].[Ss][Hh] 2>>$DEBUG)"
1844 if [ -n "$SCRIPT" ]; then
1845 einfo "Found script ${WHITE}${SCRIPT}${NORMAL} - trying to execute it."
1850 einfo "Could not mount $MOUNTDEVICE to /mnt/grml - sorry." ; eend 1
1851 fi # mount $MOUNTDEVICE
1852 grep -q '/mnt/grml' /proc/mounts && umount /mnt/grml
1854 einfo "Sorry, no device for bootoption myconfig provided. Skipping." ; eend 1
1855 fi # [ -n "$MOUNTDEVICE" ]
1856 fi # checkbootparam myconfig
1858 if checkbootparam "partconf" ; then
1859 MOUNTDEVICE="$(getbootparam 'partconf' 2>>$DEBUG)"
1860 if [ -n "$MOUNTDEVICE" ]; then
1861 [ -d /mnt/grml ] || mkdir /mnt/grml
1862 mount -o ro -t auto $MOUNTDEVICE /mnt/grml ; RC="$?"
1863 if [[ $RC == 0 ]]; then
1864 einfo "Successfully mounted $MOUNTDEVICE to /mnt/grml (readonly)." ; eend 0
1865 einfo "Copying files from $MOUNTDEVICE over grml system."
1866 for file in `cat /etc/grml/partconf` ; do
1867 [ -d /mnt/grml/$file ] && cp -a /mnt/grml/${file}* ${file} && echo "copied: $file"
1868 [ -f /mnt/grml/$file ] && cp -a /mnt/grml/${file} ${file} && echo "copied: $file"
1871 einfo "Could not mount $MOUNTDEVICE to /mnt/grml - sorry." ; eend 1
1872 fi # mount $MOUNTDEVICE
1873 grep -q '/mnt/grml' /proc/mounts && umount /mnt/grml
1875 einfo "Sorry, no device for bootoption partconf provided. Skipping." ; eend 1
1876 fi # [ -n "$MOUNTDEVICE" ]
1881 # {{{ /cdrom/.*-options
1883 if checkbootparam "debs" ; then
1884 DEBS="$(getbootparam 'debs' 2>>$DEBUG)"
1885 einfo "Tring to install debian package(s) ${DEBS}"
1886 dpkg -i /cdrom/debs/$DEBS* ; eend $?
1891 if checkbootparam "scripts" ; then
1892 SCRIPTS="$(getbootparam 'scripts' 2>>$DEBUG)"
1893 [ -z "$SCRIPTS" ] && SCRIPTS='grml.sh'
1894 einfo "Bootparameter scripts found. Trying to execute ${SCRIPTS}:"
1895 sh -c /cdrom/scripts/$SCRIPTS ; eend $?
1902 if checkbootparam "distcc" ; then
1903 OPTIONS="$(getbootparam distcc 2>>$DEBUG)"
1904 if [ -n "$OPTIONS" ]; then
1907 if [ -n "$OPTIONS" ]; then
1908 NET="${OPTIONS%%,*}"
1910 if [ -n "$R" -a "$R" != "$OPTIONS" ]; then
1912 INTERFACE="${OPTIONS%%,*}"
1917 CONFIG=/etc/default/distcc
1918 sed -i "s#^STARTDISTCC=.*#STARTDISTCC=YES#" $CONFIG
1919 sed -i "s#^ALLOWEDNETS=.*#ALLOWEDNETS=$NET#" $CONFIG
1921 if [ -n "$INTERFACE" ] ; then
1922 IP=$(LANG=C ifconfig $INTERFACE | gawk -F: /"inet addr"/'{print $2}' | gawk '{print $1}')
1925 while [ -z "$IP" ] && [[ "$counter" != 0 ]] ; do
1926 counter=$(( counter-1 ))
1927 ewarn "No ip address for $INTERFACE found. Sleeping for 3 seconds. $counter tries left."
1929 IP=$(LANG=C ifconfig $INTERFACE | gawk -F: /"inet addr"/'{print $2}' | gawk '{print $1}')
1933 if [ -n "$IP" ] ; then
1934 sed -i "s#^LISTENER=.*#LISTENER=$IP#" $CONFIG
1936 einfo "Bootoption distcc found. Preparing setup for distcc daemon."
1938 id distccd >/dev/null 2>&1 || \
1940 einfo "Creating distcc user" ; \
1941 adduser --quiet --system --ingroup nogroup --home / --no-create-home distccd ; eend $?
1944 einfo "Starting distcc for network ${NET}, listening on ${IP}."
1945 /etc/init.d/distcc start 1>/dev/null ; eend $?
1948 eerror "No ip address for $INTERFACE found. distcc can not be used without it." ; eend 1
1952 if checkbootparam "gcc"; then
1953 GCC="$(getbootparam gcc 2>>$DEBUG)"
1955 einfo "Pointing /usr/bin/gcc to /usr/bin/gcc-${GCC}."
1958 ln -s /usr/bin/gcc-${GCC} /usr/bin/gcc ; eend $?
1961 if checkbootparam "gpp"; then
1962 GPP="$(getbootparam gpp 2>>$DEBUG)"
1964 einfo "Pointing /usr/bin/g++ to /usr/bin/g++-${GPP}."
1965 if [ -x /usr/bin/g++-${GPP} ] ; then
1967 ln -s /usr/bin/g++-${GPP} /usr/bin/g++ ; eend $?
1969 einfo "Pointing /usr/bin/cpp to /usr/bin/cpp-${GPP}."
1970 if [ -x /usr/bin/cpp-${GPP} ] ; then
1972 ln -s /usr/bin/cpp-${GPP} /usr/bin/cpp ; eend $?
1981 # Notice: use it only on live-cd system, if running from harddisk please
1982 # add modules to /etc/modules and activate /etc/init.d/module-init-tools
1983 # in /etc/runlevel.conf
1985 MODULES_FILE=/etc/grml/modules
1986 if checkbootparam nomodules ; then
1987 ewarn "Skipping loading of modules defined in ${MODULES_FILE} as requested." ; eend 0
1988 elif [ -z "$INSTALLED" ]; then
1989 if [ -r $MODULES_FILE ] ; then
1990 einfo "Loading modules specified in ${MODULES_FILE}:"
1992 grep '^[^#]' $MODULES_FILE | \
1993 while read module args; do
1994 [ "$module" ] || continue
1996 modprobe $module $args ; eend $?
2000 ewarn "File $MODULES_FILE does not exist. Skipping loading of specific modules." ; eend 1
2007 config_915resolution(){
2008 if checkbootparam "915resolution" ; then
2009 OPTIONS="$(getbootparam 915resolution 2>>$DEBUG)"
2010 if [ -x /usr/sbin/915resolution ]; then
2015 if [ -n "$OPTIONS" ]; then
2017 MODE="${OPTIONS%%,*}"
2019 if [ -n "$R" -a "$R" != "$OPTIONS" ]; then
2021 XRESO="${OPTIONS%%,*}"
2023 if [ -n "$R" -a "$R" != "$OPTIONS" ]; then
2025 YRESO="${OPTIONS%%,*}"
2030 einfo "Running 915resolution with options ${MODE} ${XRESO} ${YRESO}."
2031 [ -n "$MODE" ] && [ -n "$XRESO" ] && [ -n "$YRESO" ] && ( sh -c "$CMD $MODE $XRESO $YRESO" & )
2040 if [ -z "$INSTALLED" ] ; then
2041 # notice: checkbootparam "forensic" is just for users who don't know how to really use the bootoption
2042 if checkbootparam 'noraid' || checkbootparam 'noswraid' -o \
2043 checkbootparam 'forensic' || checkbootparam 'raid=noautodetect' ; then
2044 ewarn "Skipping SW-RAID code as requested on boot commandline." ; eend 0
2046 if ! [ -x /sbin/mdadm ] ; then
2047 eerror "mdadm not available, can not execute it." ; eend 1
2050 # if ! egrep -qv '^(MAILADDR.*|#.*|)$' /etc/mdadm/mdadm.conf 2>>$DEBUG ; then
2051 # find out whether we have a valid configuration file already
2052 if ! grep -q ARRAY /etc/mdadm/mdadm.conf 2>>$DEBUG ; then
2053 einfo "Creating /etc/mdadm/mdadm.conf for use with mdadm."
2054 [ -r /etc/mdadm/mdadm.conf ] && mv /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf.old
2055 MDADM_MAILADDR__='root' /usr/share/mdadm/mkconf > /etc/mdadm/mdadm.conf ; eend $?
2057 ewarn "/etc/mdadm/mdadm.conf looks like a configured mdadm setup, will not touch it." ; eend 0
2060 if ! checkbootparam 'swraid' ; then
2062 einfo "Just run 'Start mdadm-raid' to assemble md arrays or boot using 'swraid' as bootoption for autostart."
2065 einfo "Bootoption swraid found. Searching for software RAID arrays:"
2070 for line in $(mdadm --assemble --scan --auto=yes --symlink=no 2>&1) ; do
2072 *'No arrays found'*)
2073 ewarn "$line" ; eend 0
2076 einfo "$line" ; eend 0
2083 if [ -r /proc/mdstat ] ; then
2085 MDSTAT=$(grep '^md[0-9]' /proc/mdstat)
2086 if [ -z "$MDSTAT" ] ; then
2087 ewarn "No active arrays found" ; eend 0
2092 for line in $(grep '^md[0-9]' /proc/mdstat) ; do
2093 einfo "active arrays: $line" ; eend 0
2099 fi # bootoption swraid
2101 fi # is /sbin/mdadm executable?
2102 fi # check for bootoptions
2103 fi # run only in live-cd mode
2107 # {{{ LVM (Logical Volumes)
2109 if [ -z "$INSTALLED" ] ; then
2110 # notice: checkbootparam "forensic" is just for users who don't know how to really use the bootoption
2111 if checkbootparam 'nolvm' ; then
2112 ewarn "Skipping LVM code as requested on boot commandline." ; eend 0
2114 if ! [ -x /sbin/lvm -a -x /etc/init.d/lvm2 -a -x /sbin/lvdisplay ] ; then
2115 eerror "LVM not available, can not execute it." ; eend 1
2117 if lvdisplay 2>&1 | grep -v 'No volume groups found' 1>/dev/null 2>&1 ; then
2118 einfo "You seem to have logical volumes (LVM) on your system."
2120 einfo "Just run 'Start lvm2' to activate them or boot using 'lvm' as bootoption for autostart."
2122 if checkbootparam 'lvm' ; then
2123 einfo "Bootoption LVM found. Searching for logical volumes:"
2124 /etc/init.d/lvm2 start ; eend $?
2128 fi # check for lvm binary
2129 fi # check for bootoption nolvm
2130 fi # run only in live-cd mode
2134 # {{{ debnet: setup network based on an existing one found on a partition
2136 if checkbootparam "debnet" ; then
2137 iszsh && setopt shwordsplit
2138 DEVICES="$(< /proc/partitions tail -n +3 | awk '{print "/dev/"$4}' | tr "\n" " ")"
2139 DEVICES="$DEVICES $(ls /dev/mapper/*)"
2142 einfo "Bootoption 'debnet' found. Searching for Debian network configuration: "
2144 if ! mount | grep '/mnt ' 1>/dev/null 2>&1 ; then
2145 for i in $DEVICES; do
2146 if mount -o ro -t auto "$i" /mnt >/dev/null 2>&1; then
2147 einfo "Scanning on $i"
2148 if [ -f /mnt/etc/network/interfaces ]; then
2149 einfo "/etc/network/interfaces found on ${i}" ; eend 0
2157 if [ -n "$FOUND_DEBNET" ]; then
2158 einfo "Stopping network."
2159 pump -k 1>/dev/null 2>&1
2160 /etc/init.d/networking stop 1>/dev/null 2>&1 ; eend $?
2161 einfo "Copying Debian network configuration from $FOUND_DEBNET to running system."
2162 rm -rf /etc/network/run
2163 cp -a /mnt/etc/network /etc
2164 rm -rf /etc/network/run
2165 mkdir /etc/network/run
2166 umount /mnt ; eend $?
2167 einfo "Starting network."
2168 /etc/init.d/networking start ; eend $?
2170 eerror "/etc/network/interfaces not found." ; eend 1
2174 eerror "Error: /mnt already mounted." ; eend 1
2180 # {{{ check for broken ipw3945 driver which causes problems (especially on hd install)
2182 if grep -q ipw3945 /proc/modules ; then
2183 if ! iwconfig 2>/dev/null| grep -qe 'IEEE 802' -qe 'unassociated' ; then
2184 ewarn "Broken ipw3945 network interface found, reloading module."
2193 # {{{ disable console blanking
2195 if checkbootparam "noblank" ; then
2196 einfo "Bootoption noblank found. Disabling monitor blanking."
2197 setterm -blank 0 ; eend $?
2202 # {{{ grml2hd: automatic installation
2205 if stringinstring "BOOT_IMAGE=grml2hd " "$CMDLINE" ; then
2207 if checkbootparam "user" ; then
2209 NEWUSER="$(getbootparam 'user' 2>>$DEBUG)"
2210 sed -i "s/^NEWUSER=.*/NEWUSER=$NEWUSER/" /etc/grml2hd/config || export GRML2HD_FAIL=1
2213 if checkbootparam "filesystem" ; then
2215 FILESYSTEM="$(getbootparam 'filesystem' 2>>$DEBUG)"
2216 sed -i "s/^FILESYSTEM=.*/FILESYSTEM=$FILESYSTEM/" /etc/grml2hd/config || export GRML2HD_FAIL=1
2219 if checkbootparam "partition" ; then
2221 PARTITION="$(getbootparam 'partition' 2>>$DEBUG)"
2222 # notice: the following checks whether the given partition is available, if not the skip
2223 # execution of grml2hd as it might result in data loss...
2224 if [ -r $PARTITION ] ; then
2225 sed -i "s#^PARTITION=.*#PARTITION=$PARTITION#" /etc/grml2hd/config || export GRML2HD_FAIL=1
2227 ewarn "Partition $PARTITION does not exist. Skipping execution of grml2hd therefore." ; eend 1
2231 if checkbootparam "mbr" ; then
2233 BOOT_PARTITION="$(getbootparam 'mbr' 2>>$DEBUG)"
2234 sed -i "s#^BOOT_PARTITION=.*#BOOT_PARTITION=$BOOT_PARTITION#" /etc/grml2hd/config || export GRML2HD_FAIL=1
2237 cat>|/usr/bin/grml2hd_noninteractive<<EOF
2239 GRML2HD_NONINTERACTIVE='yes' grml2hd
2242 chmod 755 /usr/bin/grml2hd_noninteractive
2243 einfo "Bootoption grml2hd found. Running automatic installation via grml2hd using /etc/grml2hd/config." && eend 0
2244 if [ -z "$GRML2HD_FAIL" ] ; then
2245 screen /usr/bin/grml2hd_noninteractive ; einfo "Invoking a shell, just exit to continue booting..." ; /bin/zsh
2247 ewarn "There was an error adjusting /etc/grml2hd/config. Skipping execution of grml2hd for security reasons." ; eend 1
2250 fi # if stringinstring "BOOT_IMAGE=grml2hd ...
2254 # {{{ debootstrap: automatic installation
2255 config_debootstrap(){
2257 if stringinstring "BOOT_IMAGE=debian2hd " "$CMDLINE" ; then
2259 einfo "Bootoption debian2hd found. Setting up environment for automatic installation via grml-debootstrap." ; eend 0
2261 if ! [ -x /usr/sbin/grml-debootstrap ] ; then
2263 eerror "Bootoption debian2hd found, but grml-debootstrap is not available." ; eend 1
2268 if checkbootparam "target" ; then
2270 TARGET="$(getbootparam 'target' 2>>$DEBUG)"
2271 # notice: the following checks whether the given partition is available, if not the skip
2272 # execution of grml-debootstrap as it might result in data loss...
2273 if ! [ -r "$TARGET" ] ; then
2274 eerror "Target $TARGET does not exist. Skipping execution of grml-debootstrap therefore." ; eend 1
2278 eerror "No bootoption named target found, can not continue execution of grml-debootstrap." ; eend 1
2283 if checkbootparam "grub" ; then
2285 GRUB="$(getbootparam 'grub' 2>>$DEBUG)"
2288 if checkbootparam "groot" ; then
2290 GROOT="$(getbootparam 'groot' 2>>$DEBUG)"
2293 if checkbootparam "release" ; then
2295 RELEASE="$(getbootparam 'release' 2>>$DEBUG)"
2298 if checkbootparam "mirror" ; then
2300 MIRROR="$(getbootparam 'mirror' 2>>$DEBUG)"
2303 if checkbootparam "boot_append" ; then
2305 BOOT_APPEND="$(getbootparam 'boot_append' 2>>$DEBUG)"
2308 if checkbootparam "password" ; then
2310 PASSWORD="$(getbootparam 'password' 2>>$DEBUG)"
2313 # now check which options are available
2314 if [ -n "TARGET" ] ; then
2315 TARGETCMD="--target $TARGET"
2319 eerror "Target not set via bootoption. Skipping execution of grml-debootstrap therefore."; eend 1
2323 [ -n "$GRUB" ] && GRUBCMD="--grub $GRUB" || GRUBCMD=''
2324 [ -n "$GROOT" ] && GROOTCMD="--groot $GROOT" || GROOTCMD=''
2325 [ -n "$RELEASE" ] && RELEASECMD="--release $RELEASE" || RELEASECMD=''
2326 [ -n "$MIRROR" ] && MIRRORCMD="--mirror $MIRROR" || MIRRORCMD=''
2327 [ -n "$PASSWORD" ] && PASSWORDCMD="--password $PASSWORD" || PASSWORDCMD=''
2328 [ -n "$BOOT_APPEND" ] && BOOT_APPEND="--boot_append $BOOT_APPEND" || BOOT_APPEND=''
2330 # and finally write script and execute it
2331 cat>|/usr/bin/grml-debootstrap_noninteractive<<EOF
2333 AUTOINSTALL='yes' grml-debootstrap $TARGETCMD $GRUBCMD $GROOTCMD $RELEASECMD $MIRRORCMD $PASSWORDCMD $BOOT_APPEND
2336 chmod 750 /usr/bin/grml-debootstrap_noninteractive
2338 screen /usr/bin/grml-debootstrap_noninteractive
2339 einfo "Invoking a shell, just exit to continue booting..."
2342 fi # stringinstring "BOOT_IMAGE=debian2hd
2346 # {{{ Support customization
2348 if checkbootparam "distri"; then
2349 DISTRI="$(getbootparam 'distri' 2>>$DEBUG)"
2350 if [ -r /cdrom/desktop/"$DISTRI".jpg ] ; then
2351 [ -n "$BOOTDEBUG" ] && einfo "Debug: bootoption distri found and file /cdrom/desktop/$DISTRI present" && eend 0
2352 # make sure the desktop.jpg file is not a symlink, so copying does not file then
2353 [ -L /usr/share/grml/desktop.jpg ] && rm /usr/share/grml/desktop.jpg
2354 cp /cdrom/desktop/"$DISTRI".jpg /usr/share/grml/desktop.jpg
2360 ### {{{ backwards compatible stuff
2361 config_environment(){
2362 ewarn "config_environment is deprecated. Please set CONFIG_ENVIRONMENT in /etc/grml/autoconfig to 'no'." ; eend 0
2365 ewarn "config_keyboard is deprecated. Please set CONFIG_KEYBOARD in /etc/grml/autoconfig to 'no'." ; eend 0
2369 ## END OF FILE #################################################################
2370 # vim:foldmethod=marker expandtab ai ft=zsh