X-Git-Url: http://git.grml.org/?p=grml-autoconfig.git;a=blobdiff_plain;f=autoconfig.functions;h=a5a550797de75243d280bc2984a6096bf70c909b;hp=7ebeb1a0e0d18ebc99cc8dcc422fef1b19953e41;hb=85222473ccf5fe78cbacdda208c48a07ec735e98;hpb=8b6487f2fb87c63c618737f2522b4534658ffefe diff --git a/autoconfig.functions b/autoconfig.functions index 7ebeb1a..a5a5507 100755 --- a/autoconfig.functions +++ b/autoconfig.functions @@ -7,7 +7,7 @@ ################################################################################ # {{{ path, variables, signals, umask, zsh -export PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin" +export PATH="/bin:/sbin:/usr/bin:/usr/sbin" DEBUG="/dev/null" KERNEL="$(uname -r)" ARCH="$(uname -m)" @@ -78,6 +78,11 @@ checkbootparam(){ esac } +# Check if currently using a framebuffer +hasfb() { + [ -e /dev/fb0 ] && return 0 || return 1 +} + # Check wheter a configuration variable (like $CONFIG_TOHD) is # enabled or not checkvalue(){ @@ -93,10 +98,6 @@ checkgrmlsmall(){ grep -q small /etc/grml_version 2>>$DEBUG && return 0 || return 1 } -# execute flite only if it's present -flitewrapper() { - [ -x /usr/bin/flite ] && flite -o play -t "$*" -} ### }}} # {{{ filesystems (proc, pts, sys) and fixes @@ -171,7 +172,7 @@ if checkbootparam 'log' || checkbootparam 'debug' ; then einfo "Bootparameter log found. Log files: ${DEBUG} and /var/log/boot" eindent einfo "Starting bootlogd." # known to be *very* unreliable :( - bootlogd -r -c 1>>$DEBUG 2>&1 ; eend $? + bootlogd -r -c >>$DEBUG 2>&1 ; eend $? eoutdent else DEBUG="/dev/null" @@ -184,7 +185,7 @@ config_fwtimeout(){ if checkbootparam 'fwtimeout' ; then TIMEOUT="$(getbootparam 'fwtimeout' 2>>$DEBUG)" einfo "Bootoption fwtimeout found. (Re)Loading firmware_class module." - rmmod firmware_class 1>>$DEBUG 2>&1 + rmmod firmware_class >>$DEBUG 2>&1 modprobe firmware_class ; eend $? fi if [ -z "$TIMEOUT" ] ; then @@ -192,7 +193,7 @@ config_fwtimeout(){ fi if [ -f /sys/class/firmware/timeout ] ; then einfo "Setting timeout for firmware loading to ${TIMEOUT}." - echo 100 > /sys/class/firmware/timeout ; eend $? + echo $TIMEOUT > /sys/class/firmware/timeout ; eend $? fi } # }}} @@ -203,39 +204,39 @@ config_language(){ einfo "Activating language settings:" eindent - # people can specify $LANGUAGE and $CONSOLEFONT in a config file: + # people can specify $LANGUAGE and $CONSOLEFONT in a config file [ -r /etc/grml/autoconfig ] && . /etc/grml/autoconfig - grep -q ' lang=.*-utf8' /proc/cmdline && UTF8='yes' || UTF8='' - - # check for bootoption which overrides config from /etc/grml/autoconfig: + # check for bootoption which overrides config from /etc/grml/autoconfig BOOT_LANGUAGE="$(getbootparam 'lang' 2>>$DEBUG)" [ -n "$BOOT_LANGUAGE" ] && LANGUAGE="$BOOT_LANGUAGE" - # set default to 'en' in live-cd mode if $LANGUAGE is not yet set: + # set default to 'en' in live-cd mode iff $LANGUAGE is not set yet if [ -z "$INSTALLED" ] ; then - [ -n "$LANGUAGE" ] || LANGUAGE='us' + [ -n "$LANGUAGE" ] || LANGUAGE='en' fi - # if bootoption lang is used update /etc/default/locale, otherwise *not*! - if [ -n "$BOOT_LANGUAGE" -a -x /usr/sbin/grml-setlang ] ; then - if checkgrmlsmall ; then - /usr/sbin/grml-setlang "POSIX" - else - /usr/sbin/grml-setlang "$LANGUAGE" - fi + if [ -x /usr/sbin/grml-setlang ] ; then + # if bootoption lang is used update /etc/default/locale accordingly + if [ -n "$BOOT_LANGUAGE" ] ; then + checkgrmlsmall && /usr/sbin/grml-setlang "POSIX" || /usr/sbin/grml-setlang "$LANGUAGE" + # otherwise default to lang=en + else + checkgrmlsmall && /usr/sbin/grml-setlang "POSIX" || /usr/sbin/grml-setlang "en" + fi fi # set console font if [ -z "$CONSOLEFONT" ] ; then if ! checkbootparam 'nodefaultfont' >>$DEBUG 2>&1 ; then - # [ -n "$UTF8" ] && CONSOLEFONT='LatArCyrHeb-16' || CONSOLEFONT='Lat15-Terminus16' - # if [ -r /usr/share/consolefonts/Lat15-Terminus16.psf.gz ] ; then if [ -r /usr/share/consolefonts/Uni3-Terminus16.psf.gz ] ; then CONSOLEFONT='Uni3-Terminus16' else ewarn "/usr/share/consolefonts/Uni3-Terminus16.psf.gz not available. Please upgrade package console-terminus." ; eend 1 fi + if ! hasfb ; then + CONSOLEFONT='Lat15-Terminus16' + fi fi fi @@ -297,7 +298,7 @@ config_language(){ if [ -r /etc/default/locale ] ; then if grep -q "LANG=.*UTF" /etc/default/locale ; then einfo "Setting up unicode environment." - unicode_start ; eend $? + unicode_start >>$DEBUG 2>&1 ; eend $? fi fi @@ -309,17 +310,36 @@ config_language(){ fi # we have to set up all consoles, therefore loop it over all ttys: - NUM_CONSOLES=$(fgconsole --next-available) - NUM_CONSOLES=$(expr ${NUM_CONSOLES} - 1) - [ ${NUM_CONSOLES} -eq 1 ] && NUM_CONSOLES=6 - CUR_CONSOLE=$(fgconsole) + NUM_CONSOLES=$(fgconsole --next-available 2>/dev/null) + if [ -n "$NUM_CONSOLES" ] ; then + NUM_CONSOLES=$(expr ${NUM_CONSOLES} - 1) + [ ${NUM_CONSOLES} -eq 1 ] && NUM_CONSOLES=6 + fi + CUR_CONSOLE=$(fgconsole 2>/dev/null) + + if [ -x "$(which setfont)" ] ; then + use_setfont=true + elif [ -x "$(which consolechars)" ] ; then + use_consolechars=true + else + eerror "Neither setfont nor consolechars tool present, can not set font." + eend 1 + return 1 + fi if [ -n "$CHARMAP" ] ; then - einfo "Running consolechars for ${CHARMAP}" - for vc in `seq 0 ${NUM_CONSOLES}` ; do - consolechars --tty=/dev/tty${vc} -m ${CHARMAP} ; RC=$? + einfo "Setting font to ${CHARMAP}" + RC=0 + for vc in $(seq 0 ${NUM_CONSOLES}) ; do + if $use_setfont ; then + setfont -C /dev/tty${vc} $CHARMAP ; RC=$? + elif $use_consolechars ; then + consolechars --tty=/dev/tty${vc} -m ${CHARMAP} ; RC=$? + fi done - [ -n "$CUR_CONSOLE" ] && chvt $CUR_CONSOLE + if [ -n "$CUR_CONSOLE" ] ; then + [ "$CUR_CONSOLE" != "serial" ] && chvt $CUR_CONSOLE + fi eend $RC fi @@ -327,12 +347,19 @@ config_language(){ ewarn "Skipping setting console font as requested on boot commandline." ; eend 0 else if [ -n "$CONSOLEFONT" ] ; then - einfo "Running consolechars using ${CONSOLEFONT}" - for vc in `seq 0 ${NUM_CONSOLES}` ; do - consolechars --tty=/dev/tty${vc} -f $CONSOLEFONT ; RC=$? + einfo "Setting font to ${CONSOLEFONT}" + RC=0 + for vc in $(seq 0 ${NUM_CONSOLES}) ; do + if $use_setfont ; then + setfont -C /dev/tty${vc} ${CONSOLEFONT} ; RC=$? + elif $use_consolechars ; then + consolechars --tty=/dev/tty${vc} -f ${CONSOLEFONT} ; RC=$? + fi done - [ -n "$CUR_CONSOLE" ] && chvt $CUR_CONSOLE - eend $? + if [ -n "$CUR_CONSOLE" ] ; then + [ "$CUR_CONSOLE" != "serial" ] && chvt $CUR_CONSOLE + fi + eend $RC fi fi @@ -344,9 +371,15 @@ config_language(){ config_hostname(){ if checkbootparam 'hostname' ; then HOSTNAME="$(getbootparam 'hostname' 2>>$DEBUG)" + if [ -z "$HOSTNAME" ] && [ -x /usr/bin/random-hostname ] ; then + einfo "Generating random hostname as no hostname was specified." + HOSTNAME="$(/usr/bin/random-hostname)" + eend $? + fi einfo "Setting hostname to $HOSTNAME as requested." - sed -i "s/^127.0.0.1.*localhost/127.0.0.1 $HOSTNAME localhost/" /etc/hosts - hostname $HOSTNAME ; eend $? + grml-hostname $HOSTNAME >>$DEBUG ; RC=$? + [ "$RC" = "0" ] && hostname $HOSTNAME + eend $RC else hostname --file /etc/hostname fi @@ -366,6 +399,23 @@ config_userfstab(){ } # }}} +# {{{ mount configfs +config_configfs() { + einfo "Mounting configfs" + CONFIGFS_DIR=/sys/kernel/config/ + modprobe configfs 2>/dev/null 1>&2 + if ! [ -d "$CONFIGFS_DIR" ] ; then + eindent + einfo "$CONFIGFS_DIR does not exist, can't mount directory" + eend 1 + eoutdent + else + mount -t configfs configfs "$CONFIGFS_DIR" 2>/dev/null 1>&2 + eend $? + fi +} +# }}} + # {{{ Set clock (Local time is more often used than GMT, so it is default) config_time(){ # don't touch the files if running from harddisk: @@ -424,41 +474,6 @@ config_kernel(){ } # }}} -# {{{ vmware specific stuff -config_vmware(){ -if checkbootparam 'novmware' ; then - ewarn "Skipping running vmware specific stuff as requested on boot commandline." ; eend 0 -else - if [ -z "$INSTALLED" ] ; then - if vmware-detect || checkbootparam "BOOT_IMAGE=vmware" ; then - if ! checkbootparam 'qemu' ; then - if [ -r /etc/X11/xorg.conf.vmware ] ; then - einfo "VMware: Copying /etc/X11/xorg.conf.vmware to /etc/X11/xorg.conf" - cp /etc/X11/xorg.conf.vmware /etc/X11/xorg.conf ; eend $? - fi - fi - elif [ -r /proc/acpi/battery/BAT0/info -a -r /etc/X11/xorg.conf.virtualbox ] ; then - if grep -q 'OEM info: innotek' /proc/acpi/battery/BAT0/info ; then - einfo 'Virtual Box: Copying /etc/X11/xorg.conf.virtualbox to /etc/X11/xorg.conf' - cp /etc/X11/xorg.conf.virtualbox /etc/X11/xorg.conf ; eend $? - fi - fi - fi -fi -} -# }}} - -# {{{ qemu specific stuff -config_qemu(){ -if checkbootparam 'qemu' ; then - if [ -r /etc/X11/xorg.conf.example ] ; then - einfo "Qemu: Copying /etc/X11/xorg.conf.example to /etc/X11/xorg.conf" - cp /etc/X11/xorg.conf.example /etc/X11/xorg.conf ; eend $? - fi -fi -} -# }}} - # {{{ ld.so.cache + depmod config_ld_mod(){ if [ -n "$INSTALLED" ]; then @@ -553,7 +568,7 @@ eoutdent config_fast(){ if checkbootparam 'fast'; then ewarn "Bootoption fast detected. Skipping startup of grml-quickconfig." - sed -i 's#^1:.*#1:12345:respawn:/usr/bin/openvt -f -c 1 -w -- /bin/zsh#' /etc/inittab + sed -i '/1:/s#/usr/share/grml-scripts/run-welcome#/bin/zsh#' /etc/inittab /sbin/telinit q ; eend $? fi } @@ -562,66 +577,56 @@ fi # activate serial console {{{ config_console(){ if checkbootparam 'console'; then - einfo "Bootoption (for serial) console detected." - eindent - if [ -r /etc/mgetty/mgetty.config ] ; then - MODE=$(getbootparam 'console' | awk -F, '{print $2}') - MODE=${MODE%%n*} - [ -n "$MODE" ] || MODE=9600 # default mode - einfo "Setting speed in /etc/mgetty/mgetty.config to $MODE bps" - sed -i "s/speed [0-9]*/speed $MODE/" /etc/mgetty/mgetty.config ; eend $? - fi - - einfo "Activating mgetty." - sed -i 's/^#T0/T0/' /etc/inittab - sed -i 's/^#T1/T1/' /etc/inittab - /sbin/telinit q ; eend $? - eoutdent -fi -} -# }}} - -# For burning on IDE-CD-Roms, k3b (and others) check for special permissions {{{ -config_cdrom_perm(){ -CDROMS="" -for DEVICE in /proc/ide/hd?; do - [ "$(cat $DEVICE/media 2>/dev/null)" = "cdrom" ] && CDROMS="$CDROMS /dev/${DEVICE##*/}" -done -[ -n "$CDROMS" ] && { chown root.cdrom $CDROMS; chmod 666 $CDROMS; } 2>/dev/null -} -# }}} + local line + local ws + ws=' ' -# {{{ Bring up loopback interface now -config_local_net(){ - if [ -z "$INSTALLED" ] ; then - if grep -q 'iface lo inet loopback' /etc/network/interfaces 2>/dev/null ; then - grep -q lo=lo /etc/network/run/ifstate 2>/dev/null || ifup lo - else - ifconfig lo up - fi - fi -} -# }}} + einfo "Bootoption for serial console detected:" + + line="$CMDLINE x " + this="" + line="${line#*[$ws]}" + local telinitq="" + while [ -n "$line" ]; do + case "$this" in + console=*) + local serial="$this" + local device="${this%%,*}" + local device="${device##*=}" + if echo $serial | grep -q ttyS ; then + local option="${serial##*,}" + # default (works for kvm & CO): + local speed="115200,57600,38400,19200,9600,4800,2400,1200"; + # ... unless overriden by command line: + case "$option" in + 115200*) speed=115200 ;; + 57600*) speed=57600 ;; + 38400*) speed=38400 ;; + 19200*) speed=19200 ;; + 9600*) speed=9600 ;; + 4800*) speed=4800 ;; + 2400*) speed=2400 ;; + 1200*) speed=1200 ;; + esac + eindent + einfo "Activating console login on device ${device} with speed ${speed}." + local number="${device#ttyS}" + sed -i "/^T$number:/d;/^#grmlserial#/iT$number:23:respawn:/bin/bash -c \"/sbin/getty -L $device -l /usr/share/grml-scripts/run-welcome $speed vt100 || sleep 30\"" /etc/inittab + eend $? + telinitq="1" + eoutdent + fi + ;; + esac + this="${line%%[$ws]*}" + line="${line#*[$ws]}" + done -# firewire devices {{{ -# the raw1394 driver does not yet export info into SYSFS, -# so let's create raw1394 device manually -# http://www.michael-prokop.at/blog/index.php?p=352 -config_firewire_dev(){ -if checkbootparam 'nofirewiredev' ; then - ewarn "Skipping creating some firewire devices as requested on boot commandline." ; eend 0 -else -#if [ "${KERNEL%-*}" == "2.6.11" ] ; then - einfo "Creating some firewire devices (fix kernel 2.6-bug)." -# cd /dev && MAKEDEV video1394 raw1394 - [ -r /dev/raw1394 ] || mknod /dev/raw1394 c 171 0 - [ -r /dev/video1394 ] || mknod -m 666 /dev/video1394 c 171 16 -# mknod -m 666 /dev/dv1394 c 171 32 # for NTSC - [ -r /dev/dv1394 ] || mknod -m 666 /dev/dv1394 c 171 34 # for PAL - chown -R root:video /dev/raw1394 /dev/video1394 /dev/dv1394 - chmod -R 664 /dev/raw1394 /dev/video1394 /dev/dv1394 ; eend $? + if [ -n "$telinitq" ]; then + /sbin/telinit q + fi + eend $? fi -#fi } # }}} @@ -663,86 +668,6 @@ fi } # }}} -# {{{ hardware detection via discover -config_discover(){ -if checkbootparam 'nodisc' ; then - ewarn "Skipping hardware detection via discover as requested on boot commandline." ; eend 0 -else - if [ -x /sbin/discover ] ; then - einfo "Discovering hardware. Trying to load the following modules in background:" - eindent - 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)" - eoutdent - /sbin/discover-modprobe -v 1>>$DEBUG 2>&1 & - eend 0 - else - eerror "Application discover not available. Information: udev should handle hardware recognition." ; eend 0 - fi -fi -} -# }}} - -# {{{ hardware detection via hwinfo -config_hwinfo(){ -if checkbootparam 'hwinfo' >>$DEBUG 2>&1; then - einfo "Discovering hardware via hwinfo:" - MODULES=$(su grml hwinfo | grep "Cmd: \"modprobe" | awk '{print $5}' | sed 's/"//') - echo -n " Loading modules: " - for i in `echo $MODULES` ; do echo -n $i && modprobe $i ; done - eend 0 -fi -} -# }}} - -# {{{ disable hotplug agents on request -config_hotplug_agent(){ -if checkbootparam 'noagent' ; then - AGENT="$(getbootparam 'noagent' 2>>$DEBUG)" - AGENTLIST=$(echo "$AGENT" | sed 's/,/\\n/g') - AGENTNL=$(echo "$AGENT" | sed 's/,/ /g') - einfo "Disabling hotplug-agent(s) $AGENTNL" - for agent in $(echo -e $AGENTLIST) ; do - mv /etc/hotplug/${agent}.rc /etc/hotplug/${agent}.norc - done - [ "$?" == "0" ] ; eend $? -fi -} -# }}} - -# {{{ blacklist of hotplug-modules -config_hotplug_blacklist(){ -if checkbootparam 'black' ; then - BLACK="$(getbootparam 'black' 2>>$DEBUG)" - BLACKLIST=$(echo "$BLACK" | sed 's/,/\\n/g') - BLACKNL=$(echo "$BLACK" | sed 's/,/ /g') - einfo "Blacklisting $BLACKNL via /etc/hotplug/blacklist.d/hotplug-light" - echo -e "$BLACKLIST" >> /etc/hotplug/blacklist.d/hotplug-light - echo -e "$BLACKLIST" >> /etc/hotplug/blacklist - eend 0 -fi -} -# }}} - -# {{{ run hotplug -config_hotplug(){ -if checkbootparam 'nohotplug' ; then - ewarn "Skipping running hotplug as requested on boot commandline." ; eend 0 -else - if [ -r /etc/init.d/hotplug ] ; then - einfo "Starting hotplug system in background." - /etc/init.d/hotplug start 1>>$DEBUG 2>>$DEBUG & - eend 0 - elif [ -r /etc/init.d/hotplug-light ] ; then - einfo "Starting hotplug-light system in background." - /etc/init.d/hotplug-light start 1>>$DEBUG 2>>$DEBUG & - eend 0 - else - ewarn "No hotplug system found. Should be handled by udev. Skipping execution." ; eend 0 - fi -fi -} -# }}} - # {{{ blacklist specific module [ used in /etc/init.d/udev ] config_blacklist(){ if checkbootparam 'blacklist' ; then @@ -772,289 +697,39 @@ fi # }}} # {{{ ACPI -config_acpi_apm(){ -if [ -d /proc/acpi ]; then - if checkbootparam 'noacpi'; then - ewarn "Skipping ACPI Bios detection as requested via noacpi on boot commandline." ; eend 0 - elif checkbootparam 'nogrmlacpi' ; then - ewarn "Skipping ACPI Bios detection as requested via nogrmlacpi on boot commandline." ; eend 0 - else - einfo "ACPI Bios found, activating modules (disable via bootoption noacpi / nogrmlacpi): " - eindent - 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>>$DEBUG || continue ;; - esac - modprobe $basename >>$DEBUG 2>&1 && found="yes" - local BASE="$BASE $basename" - done - if [ -n "$found" ] ; then - einfo "$BASE" ; eend 0 - else - ewarn "(none)" ; eend 1 - fi - if ! ps x | grep -q /usr/sbin/acpid ; then - if ! [ -r /var/run/dbus/pid ] ; then - einfo "Starting acpi daemon." - /etc/init.d/acpid start 1>>$DEBUG 2>&1 ; eend $? - else - eerror "acpid error: it seems you are running d-bus/hal, but acpid needs to be started before d-bus." - eerror "Solution: please activate acpid via /etc/runlevel.conf" - eend 1 - fi - else - ewarn "acpi daemon already running." - eend 0 - fi - eoutdent - fi +config_acpi(){ +if checkbootparam 'noacpi'; then + ewarn "ACPI: Not loading modules as requested by boot option \"noacpi\"." ; eend 0 +elif checkbootparam 'nogrmlacpi' ; then + ewarn "ACPI: Not loading modules as requested by boot option \"nogrmlacpi\"." ; eend 0 +elif [ ! -d /proc/acpi ] ; then + ewarn "ACPI: Kernel support not present." ; eend 0 else -# APM - if checkbootparam 'noapm'; then - ewarn "Skipping APM Bios detection as requested on boot commandline." ; eend 0 + einfo "ACPI: Loading modules (disable with boot option noacpi / nogrmlacpi): " + eindent + 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>>$DEBUG || continue ;; + esac + modprobe $basename >>$DEBUG 2>&1 && found="yes" + local BASE="$BASE $basename" + done + if [ -n "$found" ] ; then + einfo "$BASE" ; eend 0 else - modprobe apm power_off=1 >>$DEBUG 2>&1 - if [ "$?" = "0" ] ; then - if [ -x /etc/init.d/apmd ] ;then - einfo "APM Bios found, enabling power management functions." - /etc/init.d/apmd start ; eend $? - fi - else - eerror "Loading apm module failed." ; eend 1 - fi - fi -fi -} -# }}} - -# {{{ PCMCIA Check/Setup -# This needs to be done before other modules are being loaded (by hwsetup) -config_pcmcia(){ -if checkbootparam 'nopcmcia'; then - ewarn "Skipping PCMCIA detection as requested on boot commandline." ; eend 0 -else - if /usr/sbin/laptop-detect ; then - einfo "Detected Laptop - checking for PCMCIA." && eend 0 - modprobe pcmcia_core >>$DEBUG 2>&1 - # Try Cardbus or normal PCMCIA socket drivers - modprobe yenta_socket >>$DEBUG 2>&1 || modprobe i82365 >>$DEBUG 2>&1 || modprobe pd6729 >>$DEBUG 2>&1 || modprobe tcic >>$DEBUG 2>&1 - if [ "$?" = "0" ]; then - modprobe ds >>$DEBUG 2>&1 - if [ -d /proc/bus/pccard ] ; then - if [ -x /sbin/cardmgr ] ; then - einfo "PCMCIA found, starting cardmgr." - cardmgr >>$DEBUG 2>&1 && sleep 6 && eend 0 - else - eerror "No cardmgr found. Make sure package pcmciautils is installed, it should handle it instead." ; eend 1 - fi - fi - fi - fi -fi -} -# }}} - -# {{{ run software synthesizer via speakup -config_swspeak(){ - if checkbootparam 'swspeak' ; then - einfo "Bootoption swspeak found." - - if [ ! -d /proc/speakup/ ] && ! grep -q speakup_soft /proc/modules ; then - ewarn "Kernel does not support software speakup - trying to load kernel module:" ; eend 0 - eindent - einfo "Loading speakup_soft" - if modprobe speakup_soft ; then - eend 0 - else - flitewrapper "Fatal error setting up software speakup" - eend 1 - return 1 - fi - eoutdent - fi - - if [ -d /proc/speakup/ ] || grep -q speakup_soft /proc/modules ; then - einfo "Kernel supports speakup." ; eend 0 - eindent - einfo "Just run swspeak if you want to use software synthesizer via speakup." - flitewrapper "Finished activating software speakup. Just run swspeak when booting finished." - eoutdent - else - eerror "Kernel does not seem to support speakup. Skipping swspeak." ; eend 1 - flitewrapper "Kernel does not seem to support speakup. Sorry." - fi - fi -} -# }}} - -# {{{ support hardware synthesizer via speakup -config_hwspeak(){ - if checkbootparam 'speakup.synth' ; then - einfo "Bootoption speakup.synth found." - eindent - - module="$(getbootparam 'speakup.synth' 2>>$DEBUG)" - if [ -z "$module" ] ; then - eerror "Sorry, no speakup module specified for bootoption speakup.synth." - flitewrapper "Sorry, no speakup module specified for bootoption speakup.synth." - else - einfo "Trying to load $module" - modprobe "speakup_${module}" - eend $? - fi - - if [ -d /proc/speakup/ ] || grep -q speakup /proc/modules ; then - einfo "Kernel should support speakup now." ; eend 0 - flitewrapper "Kernel should support speakup now." - else - eerror "Kernel or hardware do not seem to support speakup. Skipping hwspeak." ; eend 1 - flitewrapper "Kernel or hardware do not seem to support speakup. Sorry." - fi - - eoutdent - - # hwspeak: - elif checkbootparam 'hwspeak' ; then - einfo "Bootoption hwspeak found." - - if [ ! -d /proc/speakup/ ] && ! grep -q speakup /proc/modules ; then - ewarn "Kernel does not support hardware speakup - trying to load kernel modules:" ; eend 0 - eindent - if ! [ -d "/lib/modules/${KERNEL}/extra/speakup/" ] ; then - eerror "Kernel does not provide speakup modules, sorry." ; eend 1 - else - for module in $(find "/lib/modules/${KERNEL}/extra/speakup/" -name \*.ko | \ - sed 's#.*speakup/##g ; s#.ko$##g' | \ - grep -ve speakup_soft -ve speakup_dummy | sort -u) ; do - einfo "Trying to load $module" - modprobe $module - eend $? - done - fi - eoutdent - fi - - if [ -d /proc/speakup/ ] || grep -q speakup /proc/modules ; then - einfo "Kernel should support speakup now." ; eend 0 - flitewrapper "Kernel should support speakup now." - else - eerror "Kernel or hardware do not seem to support speakup. Skipping hwspeak." ; eend 1 - flitewrapper "Kernel or hardware do not seem to support speakup. Sorry." - fi - fi -} -# }}} - -# {{{ Check for blind option or brltty -config_blind(){ -BLIND="" -checkbootparam 'blind' && BLIND="yes" -BRLTTY="$(getbootparam 'brltty' 2>>$DEBUG)" - -if [ -n "$BLIND" -o -n "$BRLTTY" ]; then - if [ -x /sbin/brltty ]; then - # Blind option detected, start brltty now. - # modprobe serial_core parport_serial generic_serial && echo "done" - 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" - einfo "Starting braille-display manager." -# ( exec $CMD & ) - ( sh -c "$CMD" & ) - sleep 2 && BLINDSOUND="yes" - eend 0 + ewarn "(none)" ; eend 1 fi -fi -} -# }}} - -# {{{ Interactive configuration -config_interactive(){ - ewarn "config_interactive is deprecated nowadays." - ewarn "Please set CONFIG_INTERACTIVE='no' in /etc/grml/autoconfig" ; eend 0 -} -# }}} - -# {{{ AGP -config_agp(){ -if checkbootparam 'forceagp' ; then -# Probe for AGP. Hope this can fail safely - grep -q "AGP" "/proc/pci" 2>>$DEBUG && { modprobe agpgart || modprobe agpgart agp_try_unsupported=1; } >>$DEBUG 2>&1 && einfo "AGP bridge detected." ; eend 0 -fi -} -# }}} - -# {{{ automount(er) -config_automounter(){ -if checkbootparam 'automounter' ; then - RUNLEVEL="$(runlevel)" - AUTOMOUNTER="" - [ -x /etc/init.d/autofs ] && [ "$RUNLEVEL" != "N 1" ] && [ "$RUNLEVEL" != "N S" ] && AUTOMOUNTER="yes" - -addautomount(){ -# /dev/ice 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" - grep -q "$anew" "/etc/auto.mnt" || echo "$anew" >> /etc/auto.mnt - AUTOMOUNTS="$AUTOMOUNTS $d" - new="$1 /mnt/auto/$d auto users,noauto,exec,$2 0 0" + if ! pgrep acpid >/dev/null ; then + einfo "Starting acpi daemon." + /etc/init.d/acpid start >>$DEBUG 2>&1 ; eend $? else - [ -d /mnt/$d ] && mkdir -p /mnt/$d - new="$1 /mnt/$d auto users,noauto,exec,$2 0 0" + ewarn "acpi daemon already running." + eend 0 fi - grep -q "$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 -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 - einfo "Starting automounter for ${AUTOMOUNTS}." - /etc/init.d/autofs start >>$DEBUG ; eend $? + eoutdent fi } # }}} @@ -1076,7 +751,7 @@ done </dev/null 2>&1 # avoid output "check_partitions:3: read-only file system" +check_partitions >/dev/null 2>&1 # avoid output "check_partitions:3: read-only file system" # }}} # {{{ Enable DMA for all IDE drives now if not disabled @@ -1109,19 +784,6 @@ if checkbootparam 'swap' || checkbootparam 'anyswap' ; then checkbootparam 'anyswap' && export ANYSWAP='yes' || export ANYSWAP="" fi -if checkbootparam 'nofstab' || checkbootparam 'forensic' ; then - ewarn "Skipping /etc/fstab creation as requested on boot commandline." ; eend 0 -else - einfo "Scanning for harddisk partitions and creating /etc/fstab. (Disable this via boot option: nofstab)" - iszsh && setopt nonomatch - if [ -x /usr/sbin/rebuildfstab ] ; then - config_userfstab || fstabuser=grml - /usr/sbin/rebuildfstab -r -u $fstabuser -g $fstabuser ; eend $? - else - ewarn "Command rebuildfstab not found. Install package grml-rebuildfstab." ; eend 1 - fi -fi # checkbootparam nofstab/forensic - # Scan for swap, config, homedir - but only in live-mode if [ -z "$INSTALLED" ] ; then [ -z "$NOSWAP" ] && einfo "Searching for swap partition(s) as requested." @@ -1263,183 +925,74 @@ fi } # }}} -# {{{ Fat-Client-Version: DHCP Broadcast for IP address -config_dhcp(){ -if checkbootparam 'nodhcp'; then - ewarn "Skipping DHCP broadcast/network detection as requested on boot commandline." ; eend 0 -else - NETDEVICES="$(awk -F: '/eth.:|tr.:|wlan.:/{print $1}' /proc/net/dev 2>>$DEBUG)" - rm -rf /etc/network/status ; mkdir -p /etc/network/status - for DEVICE in `echo "$NETDEVICES"` ; do - einfo "Network device ${WHITE}${DEVICE}${NORMAL} detected, DHCP broadcasting for IP. (Backgrounding)" - trap 2 3 11 - ifconfig $DEVICE up >>$DEBUG 2>&1 - ( pump -i $DEVICE >>$DEBUG 2>&1 && echo finished_running_pump > /etc/network/status/$DEVICE ) & - trap "" 2 3 11 - sleep 1 - eend 0 - done - if [ -n "$INSTALLED" ] ; then - ewarn 'If you want to disable automatic DHCP requests set CONFIG_DHCP=no in /etc/grml/autoconfig.' - eend 0 - fi -fi -} -# }}} - -# {{{ helper functions -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>>$DEBUG; then - [ -f "$i/$1" ] && FOUND="$i/$1" - umount -l "$i" 2>>$DEBUG - [ -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>>$DEBUG; RC="$?"; } -# We need to mount crypto-loop files with initial rw support -[ -f "$1" ] && { mount -t auto -o loop,rw "$1" "$2" 2>>$DEBUG; RC="$?"; } -# Mount succeeded? -[ "$RC" = "0" ] && return 0 -echo "" -einfo "Filesystem not autodetected, trying to mount $1 with AES256 encryption." -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}" - # Problem with ioctl() from getpasswd()? - # read a - read a -done -return 1 -} -# }}} - # {{{ CPU-detection config_cpu(){ if checkbootparam 'nocpu'; then ewarn "Skipping CPU detection as requested on boot commandline." ; eend 0 + return 0 +fi + +if [[ $(grep -c processor /proc/cpuinfo) -gt 1 ]] ; then + einfo "Found CPU:" + 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) + echo $CPU | sed 's/ \{1,\}/ /g' + eend 0 else - # check module dependencies - cpufreq_check() { - if ! [ -e /lib/modules/${KERNEL}/kernel/arch/x86/kernel/cpu/cpufreq ] ; then - if [ -e /lib64 ] ; then - [ -e /lib/modules/${KERNEL}/kernel/arch/x86_64/kernel/cpufreq ] || return 1 + einfo "Found 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 +fi + +# no cpufreq setup inside VirtualBox +if [ -r /proc/acpi/battery/BAT0/info ] && grep -q 'OEM info:.*innotek' /proc/acpi/battery/BAT0/info ; then + einfo 'Virtual Box detected, skipping cpufreq setup.' ; eend 0 + return 0 +fi + +if [ -x /etc/init.d/loadcpufreq ] ; then + einfo "Trying to set up cpu frequency scaling:" + eindent + SKIP_CPU_GOVERNOR='' + LOADCPUFREQ=$(mktemp) + /etc/init.d/loadcpufreq start >"$LOADCPUFREQ" 2>&1 ; RC=$? + if grep -q FATAL "$LOADCPUFREQ" ; then + eindent + SKIP_CPU_GOVERNOR=1 + oldIFS="$IFS" + IFS=" +" + for line in $(grep FATAL "$LOADCPUFREQ" | sed 's/.*FATAL: //; s/ (.*)//') ; do + eerror "$line" ; eend $RC + done + IFS="$oldIFS" + eoutdent + elif grep -q done "$LOADCPUFREQ" ; then + MODULE=$(grep done "$LOADCPUFREQ" | sed 's/.*done (\(.*\))./\1/') + if [ -n "$MODULE" -a "$MODULE" != none ]; then + einfo "Loading cpufreq kernel module $MODULE" ; eend 0 else - [ -e /lib/modules/${KERNEL}/kernel/arch/i386/kernel/cpu/cpufreq -o ! -e /lib/modules/${KERNEL}/kernel/drivers/cpufreq ] || return 1 + SKIP_CPU_GOVERNOR=1 + ewarn "Could not find an appropriate kernel module for cpu frequency scaling." ; eend 1 fi fi - } - if [[ `grep -c processor /proc/cpuinfo` -gt 1 ]] ; then - einfo "Detecting CPU:" - 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) - echo $CPU | sed 's/ \{1,\}/ /g' - eend 0 - else - 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 - fi + rm -f $LOADCPUFREQ - # Disclaimer: sorry for the tons of if/then/else... but this makes sure we use: - # * it only if we have the according kernel modules available - # * cpufreq only on laptops (check via /usr/sbin/laptop-detect) and not inside Virtual Box - # * current version of /etc/init.d/loadcpufreq from Debian (to stay in sync) - # -> parse output of the initscript and output it according to our look'n'feel - # * our own cpufreq-detect.sh if /etc/init.d/loadcpufreq isn't present - if ! cpufreq_check ; then - ewarn "Skipping cpufreq setup as module dependencies are not fulfilled." ; eend 1 - else - if /usr/sbin/laptop-detect 1>/dev/null 2>&1 ; then - # Virtual Box supports ACPI and laptop-detect returns with '0', so check for it: - if [ -r /proc/acpi/battery/BAT0/info ] ; then - if grep -q 'OEM info: innotek' /proc/acpi/battery/BAT0/info ; then - einfo 'Virtual Box detected, skipping cpufreq setup.' ; eend 0 - return 0 - fi - fi - einfo "Detected Laptop - trying to use cpu frequency scaling:" - eindent - if [ -x /etc/init.d/loadcpufreq ] ; then - SKIP_CPU_GOVERNOR='' - LOADCPUFREQ=$(mktemp) - /etc/init.d/loadcpufreq start >"$LOADCPUFREQ" 2>&1 ; RC=$? - if grep -q FATAL "$LOADCPUFREQ" ; then - eindent - SKIP_CPU_GOVERNOR=1 - oldIFS="$IFS" - IFS=" -" - for line in $(grep FATAL "$LOADCPUFREQ" | sed 's/.*FATAL: //; s/ (.*)//') ; do - eerror "$line" ; eend $RC - done - IFS="$oldIFS" - eoutdent - elif grep -q done "$LOADCPUFREQ" ; then - MODULE=$(grep done "$LOADCPUFREQ" | sed 's/.*done (\(.*\))./\1/') - if [ -n "$MODULE" -a "$MODULE" != none ]; then - einfo "Loading cpufreq kernel module $MODULE" ; eend 0 - else - ewarn "Could not find an appropriate kernel module for cpu frequency scaling." ; eend 1 - fi - fi - rm -f $LOADCPUFREQ - elif [ -r /usr/bin/cpufreq-detect.sh ] ; then - . /usr/bin/cpufreq-detect.sh - if [ -n "$MODULE" -a "$MODULE" != none ]; then - einfo "Loading modules ${MODULE}" - modprobe "$MODULE" 1>>$DEBUG || modprobe "$MODULE_FALLBACK" 1>>$DEBUG - RC=$? - if [[ $RC == 0 ]]; then - eend 0 - else - SKIP_CPU_GOVERNOR=1 - eend $1 - fi - else - ewarn "Could not detect an appropriate CPU for use with cpu frequency scaling - skipping." && eend 1 - fi # $MODULE - fi # loadcpufreq - - if [ -z "$SKIP_CPU_GOVERNOR" ] ; then - einfo "Loading cpufreq_ondemand, setting ondemand governor" - if modprobe cpufreq_ondemand ; RC=$? ; then - for file in $(find /sys/devices/system/cpu/ -name scaling_governor 2>/dev/null) ; do - echo ondemand > $file - done - fi - eend $RC - fi # cpu-governor + if [ -z "$SKIP_CPU_GOVERNOR" ] ; then + if grep -vq ondemand /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors; then + einfo "Loading cpufreq_ondemand" + modprobe cpufreq_ondemand + eend $? + fi - eoutdent + einfo "Setting ondemand governor" + RC=0 + for file in $(find /sys/devices/system/cpu/ -name scaling_governor 2>/dev/null) ; do + echo ondemand > $file || RC=1 + done + eend $RC + fi # cpu-governor - fi # laptop-detect - fi # cpufreq_check -fi # checkbootparam nocpu + eoutdent +fi } # }}} @@ -1484,8 +1037,8 @@ if checkbootparam 'ssh' ; then fi einfo 'Starting secure shell server in background.' - /etc/init.d/rmnologin start 1>>$DEBUG 2>>$DEBUG - /etc/init.d/ssh start 1>>$DEBUG 2>>$DEBUG & + /etc/init.d/rmnologin start >>$DEBUG 2>>$DEBUG + /etc/init.d/ssh start >>$DEBUG 2>>$DEBUG & eend $? eindent @@ -1495,6 +1048,65 @@ fi } # }}} +# {{{ autostart of x11vnc +config_vnc(){ + +USER=grml # TODO: make it dynamically configurable +if checkbootparam 'vnc' ; then + VNC_PASSWD='' + VNC_PASSWD="$(getbootparam 'vnc' 2>>$DEBUG)" + einfo "Bootoption vnc found, trying to set password for user $USER." + eindent + if [ -z "$VNC_PASSWD" ] ; then + if [ -x /usr/bin/apg ] ; then + VNC_PASSWD="$(apg -M NL -a 0 -m 8 -x 12 -n 1)" + elif [ -x /usr/bin/gpw ] ; then + VNC_PASSWD="$(gpw 1)" + elif [ -x /usr/bin/pwgen ] ; then + VNC_PASSWD="$(pwgen -1 8)" + elif [ -x /usr/bin/hexdump ] ; then + VNC_PASSWD="$(dd if=/dev/urandom bs=14 count=1 2>/dev/null | hexdump | awk '{print $3 $4}')" + elif [ -n "$RANDOM" ] ; then + VNC_PASSWD="${USER}${RANDOM}" + else + VNC_PASSWD='' + eerror "Empty passphrase and neither pwgen nor hexdump nor \$RANDOM found. Skipping." + eend 1 + fi + + if [ -n "$VNC_PASSWD" ] ; then + ewarn "No given password for vnc found. Using random password: $VNC_PASSWD" ; eend 0 + fi + fi + eoutdent + + # finally check if we have a password we can use: + if [ -n "$VNC_PASSWD" ] ; then + + VNCDIR="/home/${USER}/.vnc" + [ -d "$VNCDIR" ] || mkdir "$VNCDIR" + + if [ ! -x /usr/bin/x11vnc ] ; then + eerror "Error: x11vnc not found - can not set up vnc. Please make sure to install the x11vnc package." + eend 1 + else + /usr/bin/x11vnc -storepasswd "$VNC_PASSWD" "$VNCDIR"/passwd ; eend $? + /bin/chown -R "$USER": "$VNCDIR" + fi + fi + if checkbootparam 'vnc_connect' ; then + VNC_CONNECT='' + VNC_CONNECT="$(getbootparam 'vnc_connect' 2>>$DEBUG)" + einfo "Bootoption vnc_connect found, will start vnc with connect to $VNC_CONNECT." + #store the options in a file + VNCDIR="/home/${USER}/.vnc" + [ -d "$VNCDIR" ] || mkdir "$VNCDIR" + echo " --connect $VNC_CONNECT " >> $VNCDIR/options + fi +fi +} +# }}} + # {{{ set password for user grml config_passwd(){ if checkbootparam 'passwd' >>$DEBUG 2>&1; then @@ -1512,171 +1124,82 @@ fi } # }}} -# {{{ Check for persistent homedir option and eventually mount /home from there, or use a loopback file. -config_homedir(){ -if checkbootparam 'home' ; then - HOMEDIR="$(getbootparam 'home')" - MYHOMEDEVICE="" - MYHOMEMOUNTPOINT="" - MYHOMEDIR="" - if [ -n "$HOMEDIR" ]; then - einfo "Bootoption home detected." && eend 0 - 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 grml.img)" - MYHOMEDEVICE="${MYHOMEDIR##/mnt/}" - MYHOMEDEVICE="/dev/${MYHOMEDEVICE%%/*}" - MYHOMEMOUNTPOINT="/mnt/${MYHOMEDEVICE##/dev/}" - ;; - *) - eerror "Invalid home= option '$HOMEDIR' specified (must start with /dev/ or /mnt/ or 'scan')." ; eend 1 - eerror "Option ignored." ; eend 1 - ;; - esac - fi # -n $HOMEDIR - - if [ -n "$MYHOMEDIR" ]; then - if trymount "$MYHOMEDEVICE" "$MYHOMEMOUNTPOINT"; then - [ -f "$MYHOMEMOUNTPOINT/grml.img" ] && MYHOMEDIR="$MYHOMEMOUNTPOINT/grml.img" - while read device mountpoint fs relax; do - case "$mountpoint" in *$MYHOMEMOUNTPOINT*) - case "$fs" in - *[Nn][Tt][Ff][Ss]*) - umount "$MYHOMEMOUNTPOINT"; eerror "Error: will not mount NTFS filesystem on $MYHOMEDEVICE read/write!" ; eend 1 - break - ;; - *[Ff][Aa][Tt]*) - # Note: This currently won't work with encrypted partitions - umount "$MYHOMEMOUNTPOINT"; mount -t vfat -o rw,uid=grml,gid=grml,umask=002 "$MYHOMEDEVICE" "$MYHOMEMOUNTPOINT" - if [ ! -f "$MYHOMEDIR" ]; then - ewarn "WARNING: FAT32 is not a good filesystem option for /home/grml (missing socket/symlink support)." - ewarn "WARNING: Better use an ext2 loopback file on this device, and boot with home=$MYHOMEDEVICE/grml.img." - fi - ;; - esac - - if mount -o remount,rw "$MYHOMEMOUNTPOINT"; then - einfo "Mounting ${WHITE}$MYHOMEDIR${NORMAL} as ${WHITE}/home/grml${NORMAL}." - if [ -f "$MYHOMEDIR" ]; then - # It's a loopback file, mount it over the /home/grml directory - trymount "$MYHOMEDIR" /home/grml - RC="$?" - [ "$RC" = "0" ] && ERROR="$(mount -o remount,rw /home/grml 2>&1)" - RC="$?" - else - # Do a --bind mount - ERROR="$(mount --bind "$MYHOMEDIR" /home/grml 2>&1)" - RC="$?" - fi # -f $MYHOMEDIR - - [ "$RC" = "0" ] && eend 0 || ( eerror "${ERROR}" ; eend 1 ) - - fi # mount -o remount,rw,... - break - ;; - esac # case "$mountpoint" in *$MYHOMEMOUNTPOINT*) - done </dev/null - if [ $? -ne 0 ] ; then RC=$? ; fi +config_mixer () { + if ! [ -x /usr/bin/amixer ] ; then + eerror "amixer binary not available. Can not set sound volumes therefore." + eend 1 + else + if ! [ -r /proc/asound/cards ] ; then + ewarn "No soundcard present, skipping mixer settings therefore." + eend 0 + return fi - eend $RC - fi + for card in $(cat /proc/asound/cards| grep -e '^\s*[0-9]' | awk '{print $1}') ; do + einfo "Configuring soundcard \"$(awk -F\[ '/^ *'$card' \[/{ FS=" "; $0=$2; print $1}' < /proc/asound/cards)\"" + eindent -fi -} + if checkbootparam 'vol' ; then + VOL="$(getbootparam 'vol' 2>>$DEBUG)" + if [ -z "$VOL" ] ; then + eerror "Bootoption vol found but no volume level/parameter given. Using defaults (75%)." + VOL='75' + eend 1 + fi + else + VOL='75' + fi -# on some IBM notebooks the front control has to be toggled -fix_ibm_sound() { - if [ -z $1 ] ; then - return - fi + if checkbootparam 'nosound' ; then + einfo "Muting sound devices on request." + ERROR=$(amixer -q set Master mute) + RC=$? + if [ -n "$ERROR" ] ; then + eindent + eerror "Problem muting sound devices: $ERROR" + eoutdent + fi + eend $RC + elif [ -z "$INSTALLED" ] ; then + einfo "Setting mixer volumes to level ${WHITE}${VOL}${NORMAL}." - VOL=${1} + if checkbootparam 'micvol' ; then + MICVOL="$(getbootparam 'micvol' 2>>$DEBUG)" + einfo "Setting microphone to ${WHITE}${MICVOL}${NORMAL}." + else + MICVOL=0 + fi - if [ -x /usr/bin/amixer ] ; then - if amixer -q get Front 1>/dev/null 2>>$DEBUG ; then - amixer -q set Front unmute &>/dev/null - amixer -q set Front ${VOL}% &>/dev/null - fi - fi + CONTROLS=$(amixer -c $card scontrols | awk -F"Simple mixer control " '{print $2}') + IFSOLD=${IFS:-} + IFS=' +' + for CONTROL in ${=CONTROLS} ; do + if ! echo "${CONTROL}" | grep -q -i "mic" ; then + if $(amixer -c $card sget "${CONTROL}" | grep -q 'Capabilities:.*pswitch') ; then + amixer -c $card -q set "${CONTROL}" unmute + fi + if $(amixer -c $card sget "${CONTROL}" | grep -q -P 'Capabilities:.*(pvolume| volume)') ; then + amixer -c $card -q set "${CONTROL}" "${VOL}"% + fi + fi + + if [ ${MICVOL} -ne 0 ] ; then + if $(amixer -c $card sget "${CONTROL}" | grep -q 'Capabilities:.*cswitch') ; then + amixer -c $card -q set "${CONTROL}" unmute + fi + if $(amixer -c $card sget "${CONTROL}" | grep -q 'Capabilities:.*cvolume') ; then + amixer -c $card -q set "${CONTROL}" $MICVOL% + fi + eend $? + fi + done + IFS=$IFSOLD + fi # checkbootparam 'nosound' + eoutdent + done + fi } # }}} @@ -1695,34 +1218,6 @@ fi } # }}} -# {{{ keyboard add-ons -config_setkeycodes(){ -if checkbootparam 'setkeycodes' ; then - einfo "Setting keycodes as requested via bootparameter 'setkeycodes'." - # MS MM keyboard add-on - # fix - setkeycodes e001 126 &>/dev/null - setkeycodes e059 127 &>/dev/null - # fn keys - setkeycodes e03b 59 &>/dev/null - setkeycodes e008 60 &>/dev/null - setkeycodes e007 61 &>/dev/null - setkeycodes e03e 62 &>/dev/null - setkeycodes e03f 63 &>/dev/null - setkeycodes e040 64 &>/dev/null - setkeycodes e041 65 &>/dev/null - setkeycodes e042 66 &>/dev/null - setkeycodes e043 67 &>/dev/null - setkeycodes e023 68 &>/dev/null - setkeycodes e057 87 &>/dev/null - setkeycodes e058 88 &>/dev/null - # hp keycodes - setkeycodes e00a 89 e008 90 &>/dev/null - eend 0 -fi -} -# }}} - # {{{ wondershaper config_wondershaper(){ if checkbootparam 'wondershaper' ; then @@ -1771,7 +1266,7 @@ config_syslog(){ eerror "No syslog daemon found." ; eend 1 else einfo "Starting $SYSLOGD in background." - /etc/init.d/$SYSLOGD start 1>>$DEBUG & + /etc/init.d/$SYSLOGD start >>$DEBUG & eend 0 fi fi @@ -1787,8 +1282,8 @@ config_gpm(){ eerror "No mouse found - not starting GPM." ; eend 1 else einfo "Starting gpm in background." - /etc/init.d/gpm start 1>>$DEBUG & - # ( while [ ! -e /dev/psaux ]; do sleep 5; done; /etc/init.d/gpm start 1>>$DEBUG ) & + /etc/init.d/gpm start >>$DEBUG & + # ( while [ ! -e /dev/psaux ]; do sleep 5; done; /etc/init.d/gpm start >>$DEBUG ) & eend 0 fi fi @@ -1801,11 +1296,18 @@ config_services(){ SERVICE="$(getbootparam 'services' 2>>$DEBUG)" SERVICELIST=$(echo "$SERVICE" | sed 's/,/\\n/g') SERVICENL=$(echo "$SERVICE" | sed 's/,/ /g') - einfo "Starting service(s) ${SERVICENL} in background." for service in $(echo -e $SERVICELIST) ; do - /etc/init.d/${service} start 1>>$DEBUG & + # support running (custom) init scripts in non-blocking mode + # if they contain the keyword "DO_NO_RUN_IN_BACKGROUND". + if grep -q 'DO_NO_RUN_IN_BACKGROUND' "/etc/init.d/${service}" 2>>$DEBUG ; then + einfo "Starting service ${service}." + /etc/init.d/${service} start >>$DEBUG + else + einfo "Starting service ${service} in background." + /etc/init.d/${service} start >>$DEBUG & + fi done - [ "$?" == "0" ] ; eend $? + eend $? fi } # }}} @@ -1860,30 +1362,41 @@ config_netscript() { if get_remote_file ${CONFIG} ${SCRIPTFILE} ; then chmod +x ${SCRIPTFILE} - einfo "Running ${WHITE}${SCRIPTFILE}${NORMAL}:" && ${SCRIPTFILE} ; eend $? + einfo "Running ${WHITE}${SCRIPTFILE}${NORMAL}:" && NETSCRIPT=${CONFIG} ${SCRIPTFILE} ; eend $? fi fi } # }}} -# {{{ blindsound -config_blindsound(){ - if checkbootparam 'blind' ; then - beep - flitewrapper "welcome to the gremel system" - fi -} -# }}} +# {{{ stats +config_stats() { + if ! checkbootparam 'nostats' ; then + BASE_URL="http://stats.grml.org/report/" + ACTION_NAME=Boot -# {{{ welcome sound -config_welcome(){ - if checkbootparam 'welcome' ; then - flitewrapper "welcome to the gremel system" + HOST_ID=$(cat /proc/sys/kernel/random/boot_id) + + grep -q " lm " /proc/cpuinfo && HAS_64BIT="1" || HAS_64BIT="0" + DATE_STRING=$(date +'h=%H&m=%M&s=%S') + [ -e /etc/grml_version ] && VERSION=$(cat /etc/grml_version) || \ + VERSION=$(lsb_release -d | awk -F: '{gsub(/^[ \t]+/, "", $2); print $2}') + + PARAMS="$( echo "$CMDLINE" | sed -e 's/=[^ ]*/=x/g' | tr " " "\n"|sort|tr "\n" " " )" + + echo "$CMDLINE" | grep -q -e "fetch" -e "nfsroot" && BOOT="remote" + [ -z "$BOOT" ] && BOOT="local" + + ADDITIONAL_PARAMS="" + ( [ -n "$COLUMNS" ] && [ -n "$LINES" ] ) && \ + ADDITIONAL_PARAMS="$ADDITIONAL_PARAMS&res=$((COLUMNS * 8))x$((LINES * 16))" + + URI='$BASE_URL?action=${ACTION_NAME}\&$DATE_STRING\&unique_id=${HOST_ID}\&support_64bit=$HAS_64BIT\&version=$VERSION\&bootup=$BOOT\¶ms=$PARAMS$ADDITIONAL_PARAMS' + + get_remote_file "$URI" "/dev/null" >/dev/null 2>&1 &! fi } # }}} - # {{{ fix/workaround for unionfs fix_unionfs(){ if [ -z "$INSTALLED" ]; then @@ -1892,41 +1405,32 @@ fix_unionfs(){ } # }}} -# {{{ create all /mnt-directories -create_mnt_dirs(){ - ewarn "create_mnt_dirs is deprecated as grml-rebuildfstab does all we need." - ewarn "Please set CONFIG_CREATE_MNT_DIRS='no' in /etc/grml/autoconfig" ; eend 0 -} -# }}} - # {{{ start X window system via grml-x config_x_startup(){ # make sure we start X only if startx is used *before* a nostartx option # so it's possible to disable automatic X startup using nostart if checkbootparam 'startx' && ! echo "$CMDLINE" | grep -q 'startx.*nostartx' ; then - if [ -x $(which X) ] ; then + if [ -x "$(which X)" ] ; then if [ -z "$INSTALLED" ] ; then WINDOWMANAGER="$(getbootparam 'startx' 2>>$DEBUG)" if [ -z "$WINDOWMANAGER" ] ; then - einfo "No window manager specified. Taking ${WHITE}wm-ng${NORMAL} as default." && eend 0 - WINDOWMANAGER="wm-ng" + einfo "No window manager specified. Using default one." && eend 0 else einfo "Window manager ${WHITE}${WINDOWMANAGER}${NORMAL} found as bootoption." && eend 0 fi - einfo "Changing to runlevel 5 for starting grml-x ${WINDOWMANAGER}. Just exit X windows system to get full featured consoles." + einfo "Setting up and invoking grml-x ${WINDOWMANAGER}. Just exit X windows system to get full featured consoles." config_userfstab || fstabuser='grml' cat>|/etc/init.d/xstartup<>$DEBUG +su $fstabuser -c "/usr/bin/grml-x" EOF chmod 755 /etc/init.d/xstartup # adjust inittab for xstartup if grep -q '^6:' /etc/inittab ; then - sed -i 's|^6:.*|6:2345:respawn:/bin/zsh --login -c "/etc/init.d/xstartup ; /bin/zsh"|' /etc/inittab + sed -i 's|^6:.*|6:2345:respawn:/bin/zsh --login -c "/etc/init.d/xstartup ; /usr/share/grml-scripts/run-welcome" >/dev/tty6 2>\&1 > /etc/inittab + echo '6:2345:respawn:/bin/zsh --login -c "/etc/init.d/xstartup ; /usr/share/grml-scripts/run-welcome" >/dev/tty6 2>&1 < /dev/tty6' >> /etc/inittab fi /sbin/telinit q ; eend $? @@ -1942,7 +1446,7 @@ EOF eerror " -> Please use something like xdm, gdm or kdm for starting X on a harddisk system!" ; eend 1 fi else - eerror "/usr/X11R6/bin/X is not present on this grml flavour." + eerror "/usr/bin/X is not present on this grml flavour." eerror " -> Boot parameter startx does not work therefore." ; eend 1 fi fi @@ -1968,8 +1472,12 @@ config_finddcsdir() { # - If myconfig=foo is set on the command line, $dcs-dir is set to # foo, even if a GRMLCFG partition is present. DCSDIR="" +DCSMP="/mnt/grml" +# autoconfig, see issue673 +GRMLCFG="$(getbootparam 'autoconfig' 2>>$DEBUG)" +[ -n "$GRMLCFG" ] || GRMLCFG="GRMLCFG" if checkbootparam 'noautoconfig' || checkbootparam 'forensic' ; then - ewarn "Skipping running automount of device(s) labeled GRMLCFG as requested." ; eend 0 + ewarn "Skipping running automount of device(s) labeled $GRMLCFG as requested." ; eend 0 else if [ -z "$INSTALLED" ] ; then if checkbootparam 'myconfig' ; then @@ -1978,16 +1486,19 @@ else eerror "Error: No device for bootoption myconfig provided." ; eend 1 fi # [ -z "$DCSDEVICE" ] elif checkvalue $CONFIG_MYCONFIG; then # checkbootparam myconfig - einfo "Searching for device(s) labeled with GRMLCFG. (Disable this via boot option: noautoconfig)" ; eend 0 + einfo "Searching for device(s) labeled with $GRMLCFG. (Disable this via boot option: noautoconfig)" ; eend 0 eindent # We do need the following fix so floppy disk is available to blkid in any case :-/ if [ -r /dev/fd0 ] ; then einfo "Floppy device detected. Trying to access floppy disk." - if timeout 4 dd if=/dev/fd0 of=/dev/null bs=512 count=1 1>>$DEBUG 2>&1 ; then - blkid /dev/fd0 1>>$DEBUG 2>&1 + if timeout 4 dd if=/dev/fd0 of=/dev/null bs=512 count=1 >>$DEBUG 2>&1 ; then + blkid /dev/fd0 >>$DEBUG 2>&1 fi fi - DCSDEVICE=$(blkid -t LABEL=GRMLCFG | head -1 | awk -F: '{print $1}') + DCSDEVICE=$(blkid -t LABEL=$GRMLCFG | head -1 | awk -F: '{print $1}') + if [ -n "$DCSDEVICE" ]; then + DCSMP="/mnt/grmlcfg" + fi eoutdent fi @@ -2001,15 +1512,15 @@ else if [ -n "$DCSDIR" ]; then ewarn "$DCSDEVICE already mounted on $DCSDIR"; eend 0 else - [ -d /mnt/grml ] || mkdir /mnt/grml - umount /mnt/grml 1>>$DEBUG 2>&1 # make sure it is not mounted - mount -o ro -t auto $DCSDEVICE /mnt/grml ; RC="$?" + [ -d $DCSMP ] || mkdir $DCSMP + umount $DCSMP >>$DEBUG 2>&1 # make sure it is not mounted + mount -o ro -t auto $DCSDEVICE $DCSMP ; RC="$?" if [[ $RC == 0 ]]; then - einfo "Successfully mounted $DCSDEVICE to /mnt/grml (readonly)." ; eend 0 + einfo "Successfully mounted $DCSDEVICE to $DCSMP (readonly)." ; eend 0 else - eerror "Error: mounting $DCSDEVICE to /mnt/grml (readonly) failed." ; eend 1 + eerror "Error: mounting $DCSDEVICE to $DCSMP (readonly) failed." ; eend 1 fi - DCSDIR="/mnt/grml" + DCSDIR="$DCSMP" fi eoutdent fi @@ -2051,7 +1562,11 @@ fi # {{{ /cdrom/.*-options config_debs(){ if checkbootparam 'debs' ; then + iszsh && setopt localoptions shwordsplit DEBS="$(getbootparam 'debs' 2>>$DEBUG)" + if [ -z "$DEBS" ] ; then + DEBS="*.deb" + fi if ! echo $DEBS | grep -q '/'; then # backwards compatibility: if no path is given get debs from debs/ DEBS="debs/$DEBS" @@ -2063,28 +1578,38 @@ fi } config_scripts(){ -if checkbootparam 'scripts' ; then +if checkbootparam 'scripts' || [ "$DCSMP" = "/mnt/grmlcfg" ]; then SCRIPTS="$(getbootparam 'scripts' 2>>$DEBUG)" - if [ -z "$SCRIPTS" ]; then + if [ -d ${DCSDIR}/scripts ] && [ -z "$SCRIPTS" ]; then SCRIPTS="$(cd ${DCSDIR}/scripts; /bin/ls -1d [Gg][Rr][Mm][Ll].[Ss][Hh] 2>>$DEBUG)" fi if ! echo $SCRIPTS | grep -q '/'; then # backwards compatibility: if no path is given get scripts from scripts/ SCRIPTS="scripts/$SCRIPTS" fi - SCRIPTS="${DCSDIR}/$SCRIPTS" - if [ -d "$SCRIPTS" ]; then - einfo "Bootparameter scripts found. Trying to execute from directory ${SCRIPTS}:" - run-parts $SCRIPTS - else - einfo "Bootparameter scripts found. Trying to execute ${SCRIPTS}:" - sh -c $SCRIPTS + if [ "$DCSMP" = "/mnt/grmlcfg" ]; then + # we are executing from a GRMLCFG labeled fs + # kick everything we have done before and start over + SCRIPTS="$(cd ${DCSDIR}; /bin/ls -1d [Gg][Rr][Mm][Ll].[Ss][Hh] 2>>$DEBUG)" + fi + if [ -n "$SCRIPTS" ]; then + SCRIPTS="${DCSDIR}/$SCRIPTS" + if [ "$DCSMP" = "/mnt/grmlcfg" ]; then + einfo "Trying to execute ${SCRIPTS}" + sh -c $SCRIPTS + elif [ -d "$SCRIPTS" ]; then + einfo "Bootparameter scripts found. Trying to execute from directory ${SCRIPTS}:" + run-parts $SCRIPTS + else + einfo "Bootparameter scripts found. Trying to execute ${SCRIPTS}:" + sh -c $SCRIPTS + fi fi fi } config_config(){ -if checkbootparam 'config' ; then +if checkbootparam 'config' || [ "$DCSMP" = "/mnt/grmlcfg" ]; then CONFIG="$(getbootparam 'config' 2>>$DEBUG)" if [ -z "$CONFIG" ]; then CONFIG="$(cd ${DCSDIR}; ls -1d [Cc][Oo][Nn][Ff][Ii][Gg].[Tt][Bb][Zz] 2>>$DEBUG)" @@ -2104,9 +1629,13 @@ if checkbootparam 'config' ; then fi fi fi -# umount /mnt/grml if it was mounted by finddcsdir -# this doesn't really belong here -grep -q '/mnt/grml' /proc/mounts && umount /mnt/grml +} +# }}} + +# {{{ confing_umount_dcsdir +config_umount_dcsdir(){ + # umount $DCSMP if it was mounted by finddcsdir + grep -q "$DCSMP" /proc/mounts && umount "$DCSMP" } # }}} @@ -2176,7 +1705,7 @@ if checkbootparam 'distcc' ; then ) einfo "Starting distcc for network ${NET}, listening on ${IP}." - /etc/init.d/distcc start 1>/dev/null ; eend $? + /etc/init.d/distcc start >/dev/null ; eend $? eoutdent else eerror "No ip address for $INTERFACE found. distcc can not be used without it." ; eend 1 @@ -2237,46 +1766,16 @@ fi } # }}} -# {{{ 915resolution -config_915resolution(){ -if checkbootparam '915resolution' ; then - OPTIONS="$(getbootparam '915resolution' 2>>$DEBUG)" - if [ -x /usr/sbin/915resolution ]; then - CMD=915resolution - MODE="" - XRESO="" - YRESO="" - if [ -n "$OPTIONS" ]; then - # Extra options - MODE="${OPTIONS%%,*}" - R="${OPTIONS#*,}" - if [ -n "$R" -a "$R" != "$OPTIONS" ]; then - OPTIONS="$R" - XRESO="${OPTIONS%%,*}" - R="${OPTIONS#*,}" - if [ -n "$R" -a "$R" != "$OPTIONS" ]; then - OPTIONS="$R" - YRESO="${OPTIONS%%,*}" - R="${OPTIONS#*,}" - fi - fi - fi - einfo "Running 915resolution with options ${MODE} ${XRESO} ${YRESO}." - [ -n "$MODE" ] && [ -n "$XRESO" ] && [ -n "$YRESO" ] && ( sh -c "$CMD $MODE $XRESO $YRESO" & ) - eend 0 - fi -fi -} -# }}} - # {{{ SW-RAID config_swraid(){ - if [ -z "$INSTALLED" ] ; then + [ -n "$INSTALLED" ] && return 0 + # notice: checkbootparam "forensic" is just for users who don't know how to really use the bootoption - if checkbootparam 'noraid' || checkbootparam 'noswraid' -o \ + if checkbootparam 'noraid' || checkbootparam 'noswraid' || \ checkbootparam 'forensic' || checkbootparam 'raid=noautodetect' ; then ewarn "Skipping SW-RAID code as requested on boot commandline." ; eend 0 else + [ -e /proc/mdstat ] || modprobe md_mod if ! [ -x /sbin/mdadm ] ; then eerror "mdadm not available, can not execute it." ; eend 1 else @@ -2334,14 +1833,83 @@ config_swraid(){ fi # is /sbin/mdadm executable? fi # check for bootoptions - fi # run only in live-cd mode +} +# }}} + +# {{{ dmraid +config_dmraid(){ + [ -n "$INSTALLED" ] && return 0 + + if checkbootparam 'nodmraid' ; then + ewarn "Skipping dmraid code as requested on boot commandline." ; eend 0 + return 0 + fi + + if ! [ -x /sbin/dmraid ] ; then + eerror "dmraid not available, can not execute it." ; eend 1 + return + fi + + dmraid_wrapper() { + # usage: dmraid_wrapper + [ -n "$1" ] || return 1 + + IFSOLD=${IFS:-} + IFS=' +' + eindent + + for line in $(dmraid $1 ; echo errcode:$?); do + case $line in + *'no block devices found'*) + einfo "No block devices found" ; eend 0 + break + ;; + *'no raid disks'*) + einfo "No active dmraid devices found" ; eend 0 + break + ;; + errcode:0) + eend 0; + ;; + errcode:1) + eend 1 + ;; + *) + einfo "$line" + ;; + esac + done + + eoutdent + IFS=$IFSOLD + } + + if checkbootparam 'dmraid' ; then + local ACTION="$(getbootparam 'dmraid' 2>>$DEBUG)" + if [ "$ACTION" = "off" ] ; then + # Deactivates all active software RAID sets: + einfo "Deactivating present dmraid sets (as requested via dmraid=off):" + dmraid_wrapper -an + else + # Activate all software RAID sets discovered: + einfo "Activating present dmraid sets (as requested via dmraid):" + dmraid_wrapper -ay + fi + + return + fi + + # by default (no special bootoptions) discover all software RAID devices: + einfo "Searching for any present dmraid sets:" + dmraid_wrapper -r } # }}} # {{{ LVM (Logical Volumes) config_lvm(){ - if [ -z "$INSTALLED" ] ; then - # notice: checkbootparam "forensic" is just for users who don't know how to really use the bootoption + [ -n "$INSTALLED" ] && return 0 + if checkbootparam 'nolvm' ; then ewarn "Skipping LVM code as requested on boot commandline." ; eend 0 else @@ -2349,7 +1917,7 @@ config_lvm(){ if ! [ -x /sbin/lvm -a -x /sbin/lvdisplay ] || ! [ -x /etc/init.d/lvm2 -o -x /etc/init.d/lvm ] ; then eerror "LVM not available, can not execute it." ; eend 1 else - if lvdisplay 2>&1 | grep -v 'No volume groups found' 1>/dev/null 2>&1 ; then + if lvdisplay 2>&1 | grep -v 'No volume groups found' >/dev/null 2>&1 ; then einfo "You seem to have logical volumes (LVM) on your system." eindent einfo "Just run 'Start lvm2' to activate them or boot using 'lvm' as bootoption for autostart." @@ -2362,69 +1930,18 @@ config_lvm(){ fi fi # check for lvm binary fi # check for bootoption nolvm - fi # run only in live-cd mode } # }}} # {{{ debnet: setup network based on an existing one found on a partition config_debnet(){ if checkbootparam 'debnet' ; then - iszsh && setopt shwordsplit - DEVICES="$(< /proc/partitions tail -n +3 | awk '{print "/dev/"$4}' | tr "\n" " ")" - DEVICES="$DEVICES $(ls /dev/mapper/*)" - FOUND_DEBNET="" - einfo "Bootoption 'debnet' found. Searching for Debian network configuration: " - eindent - if ! mount | grep '/mnt ' 1>/dev/null 2>&1 ; then - for i in $DEVICES; do - if mount -o ro -t auto "$i" /mnt >/dev/null 2>&1; then - einfo "Scanning on $i" - if [ -f /mnt/etc/network/interfaces ]; then - einfo "/etc/network/interfaces found on ${i}" ; eend 0 - FOUND_DEBNET="$i" - break - fi - umount /mnt - fi - done - - if [ -n "$FOUND_DEBNET" ]; then - einfo "Stopping network." - pump -k 1>/dev/null 2>&1 - /etc/init.d/networking stop 1>/dev/null 2>&1 ; eend $? - einfo "Copying Debian network configuration from $FOUND_DEBNET to running system." - rm -rf /etc/network/run - cp -a /mnt/etc/network /etc - rm -rf /etc/network/run - mkdir /etc/network/run - umount /mnt ; eend $? - einfo "Starting network." - invoke-rc.d networking start ; eend $? - else - eerror "/etc/network/interfaces not found." ; eend 1 - fi - eoutdent - else - eerror "Error: /mnt already mounted." ; eend 1 - fi + /usr/sbin/debnet fi } # }}} -# {{{ check for broken ipw3945 driver which causes problems (especially on hd install) -config_ipw3945() { - if grep -q ipw3945 /proc/modules ; then - if ! iwconfig 2>/dev/null| grep -qe 'IEEE 802' -qe 'unassociated' ; then - ewarn "Broken ipw3945 network interface found, reloading module." - rmmod ipw3945 - modprobe ipw3945 - eend $? - fi - fi -} -# }}} - # {{{ disable console blanking config_blanking(){ if checkbootparam 'noblank' ; then @@ -2475,62 +1992,10 @@ config_tohd() } # }}} -# {{{ grml2hd: automatic installation -config_grml2hd(){ - -if checkbootparam "BOOT_IMAGE=grml2hd" ; then - -if checkbootparam 'user' ; then - NEWUSER='' - NEWUSER="$(getbootparam 'user' 2>>$DEBUG)" - sed -i "s/^NEWUSER=.*/NEWUSER=$NEWUSER/" /etc/grml2hd/config || export GRML2HD_FAIL=1 -fi - -if checkbootparam 'filesystem' ; then - FILESYSTEM='' - FILESYSTEM="$(getbootparam 'filesystem' 2>>$DEBUG)" - sed -i "s/^FILESYSTEM=.*/FILESYSTEM=$FILESYSTEM/" /etc/grml2hd/config || export GRML2HD_FAIL=1 -fi - -if checkbootparam 'partition' ; then - PARTITION='' - PARTITION="$(getbootparam 'partition' 2>>$DEBUG)" - # notice: the following checks whether the given partition is available, if not the skip - # execution of grml2hd as it might result in data loss... - if [ -r $PARTITION ] ; then - sed -i "s#^PARTITION=.*#PARTITION=$PARTITION#" /etc/grml2hd/config || export GRML2HD_FAIL=1 - else - ewarn "Partition $PARTITION does not exist. Skipping execution of grml2hd therefore." ; eend 1 - fi -fi - -if checkbootparam 'mbr' ; then - BOOT_PARTITION='' - BOOT_PARTITION="$(getbootparam 'mbr' 2>>$DEBUG)" - sed -i "s#^BOOT_PARTITION=.*#BOOT_PARTITION=$BOOT_PARTITION#" /etc/grml2hd/config || export GRML2HD_FAIL=1 -fi - -cat>|/usr/bin/grml2hd_noninteractive</dev/null + eend $? + + einfo "Starting VBoxService." + VBoxService >/dev/null & + eend $? + + eoutdent + fi +fi +} + # {{{ Support customization config_distri(){ if checkbootparam 'distri'; then @@ -2633,14 +2137,5 @@ fi } # }}} -### {{{ backwards compatible stuff -config_environment(){ - ewarn "config_environment is deprecated. Please set CONFIG_ENVIRONMENT in /etc/grml/autoconfig to 'no'." ; eend 0 -} -config_keyboard(){ - ewarn "config_keyboard is deprecated. Please set CONFIG_KEYBOARD in /etc/grml/autoconfig to 'no'." ; eend 0 -} -# }}} - ## END OF FILE ################################################################# # vim:foldmethod=marker expandtab ai ft=zsh shiftwidth=3