X-Git-Url: http://git.grml.org/?p=grml-autoconfig.git;a=blobdiff_plain;f=autoconfig.functions;h=b9ead8112d08cd94ebe78a12b471decfdf41940f;hp=6c729c6bf5fe9314737c684c5bd772f685b621cc;hb=9e56ade712d9e1f3ec1c1803f3db742f34451ebb;hpb=394341318bdafc64bc63ccdc2ed1be53af91c5b4 diff --git a/autoconfig.functions b/autoconfig.functions index 6c729c6..b9ead81 100755 --- a/autoconfig.functions +++ b/autoconfig.functions @@ -176,7 +176,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" @@ -189,7 +189,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 @@ -222,13 +222,14 @@ config_language(){ [ -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 @@ -353,8 +354,9 @@ config_hostname(){ if checkbootparam 'hostname' ; then HOSTNAME="$(getbootparam 'hostname' 2>>$DEBUG)" 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 @@ -681,7 +683,7 @@ else 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 & + /sbin/discover-modprobe -v >>$DEBUG 2>&1 & eend 0 else eerror "Application discover not available. Information: udev should handle hardware recognition." ; eend 0 @@ -738,11 +740,11 @@ if checkbootparam 'nohotplug' ; then else if [ -r /etc/init.d/hotplug ] ; then einfo "Starting hotplug system in background." - /etc/init.d/hotplug start 1>>$DEBUG 2>>$DEBUG & + /etc/init.d/hotplug start >>$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 & + /etc/init.d/hotplug-light start >>$DEBUG 2>>$DEBUG & eend 0 else ewarn "No hotplug system found. Should be handled by udev. Skipping execution." ; eend 0 @@ -807,7 +809,7 @@ if [ -d /proc/acpi ]; then 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 $? + /etc/init.d/acpid start >>$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" @@ -1084,7 +1086,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 @@ -1419,16 +1421,17 @@ else . /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 + modprobe "$MODULE" >>$DEBUG || modprobe "$MODULE_FALLBACK" >>$DEBUG RC=$? if [[ $RC == 0 ]]; then eend 0 else SKIP_CPU_GOVERNOR=1 - eend $1 + eend $RC fi else - ewarn "Could not detect an appropriate CPU for use with cpu frequency scaling - skipping." && eend 1 + ewarn "Could not detect an appropriate CPU for use with cpu frequency scaling - skipping." + eend 1 fi # $MODULE fi # loadcpufreq @@ -1490,8 +1493,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 @@ -1728,7 +1731,7 @@ fix_ibm_sound() { VOL=${1} if [ -x /usr/bin/amixer ] ; then - if amixer -q get Front 1>/dev/null 2>>$DEBUG ; then + if amixer -q get Front >/dev/null 2>>$DEBUG ; then amixer -q set Front unmute &>/dev/null amixer -q set Front ${VOL}% &>/dev/null fi @@ -1827,7 +1830,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 @@ -1843,8 +1846,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 @@ -1859,7 +1862,7 @@ config_services(){ 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 & + /etc/init.d/${service} start >>$DEBUG & done [ "$?" == "0" ] ; eend $? fi @@ -1974,7 +1977,7 @@ if checkbootparam 'startx' && ! echo "$CMDLINE" | grep -q 'startx.*nostartx' ; t cat>|/etc/init.d/xstartup<>$DEBUG +sudo -u $fstabuser -i /usr/bin/grml-x $WINDOWMANAGER >>$DEBUG EOF chmod 755 /etc/init.d/xstartup @@ -2040,8 +2043,8 @@ else # 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}') @@ -2062,7 +2065,7 @@ else ewarn "$DCSDEVICE already mounted on $DCSDIR"; eend 0 else [ -d $DCSMP ] || mkdir $DCSMP - umount $DCSMP 1>>$DEBUG 2>&1 # make sure it is not mounted + 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 $DCSMP (readonly)." ; eend 0 @@ -2246,7 +2249,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 @@ -2341,9 +2344,10 @@ 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 @@ -2404,14 +2408,79 @@ 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 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 @@ -2419,7 +2488,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." @@ -2432,7 +2501,6 @@ config_lvm(){ fi fi # check for lvm binary fi # check for bootoption nolvm - fi # run only in live-cd mode } # }}} @@ -2446,7 +2514,7 @@ if checkbootparam 'debnet' ; then einfo "Bootoption 'debnet' found. Searching for Debian network configuration: " eindent - if ! mount | grep '/mnt ' 1>/dev/null 2>&1 ; then + if ! mount | grep '/mnt ' >/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" @@ -2461,8 +2529,8 @@ if checkbootparam 'debnet' ; then 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 $? + pump -k >/dev/null 2>&1 + /etc/init.d/networking stop >/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