X-Git-Url: https://git.grml.org/?p=grml-autoconfig.git;a=blobdiff_plain;f=autoconfig.functions;h=e1330040b7a3629b93343918be2c1a260c16034e;hp=5e7c807a1a9caf9eaaefb3c5e30a48121724b970;hb=97400bdad03aed28ce75f670ed7e145fadd336db;hpb=a4ecc329533467739c63ede3348cbb25b3d6f94d diff --git a/autoconfig.functions b/autoconfig.functions index 5e7c807..e133004 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)" @@ -98,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 @@ -197,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 } # }}} @@ -555,7 +551,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 } @@ -598,7 +594,7 @@ if checkbootparam 'console'; then 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/bin/zsh-login $speed vt100 || sleep 30\"" /etc/inittab + 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 @@ -617,18 +613,6 @@ fi } # }}} -# {{{ 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 -} -# }}} - # {{{ copy passwd-lockfile to ramdisk (fix unionfs-behaviour) # otherwise we will get: passwd: Authentication token lock busy config_fix_passwd(){ @@ -696,202 +680,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 >>$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 + ewarn "(none)" ; eend 1 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" + if ! pgrep acpid >/dev/null ; then + einfo "Starting acpi daemon." + /etc/init.d/acpid start >>$DEBUG 2>&1 ; eend $? + else + ewarn "acpi daemon already running." eend 0 fi -fi -} -# }}} - -# {{{ 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 + eoutdent fi } # }}} @@ -1095,15 +916,15 @@ if checkbootparam 'nocpu'; then fi if [[ $(grep -c processor /proc/cpuinfo) -gt 1 ]] ; then - einfo "Detecting CPU:" + 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 - 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 + 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 -# Virtual Box supports ACPI and laptop-detect would return with '0', so check for it: +# 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 @@ -1131,6 +952,7 @@ if [ -x /etc/init.d/loadcpufreq ] ; then if [ -n "$MODULE" -a "$MODULE" != none ]; then einfo "Loading cpufreq kernel module $MODULE" ; eend 0 else + SKIP_CPU_GOVERNOR=1 ewarn "Could not find an appropriate kernel module for cpu frequency scaling." ; eend 1 fi fi @@ -1138,14 +960,18 @@ if [ -x /etc/init.d/loadcpufreq ] ; then rm -f $LOADCPUFREQ if [ -z "$SKIP_CPU_GOVERNOR" ] ; then - einfo "Loading cpufreq_ondemand, setting ondemand governor" - RC=0 - 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 + if grep -vq ondemand /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors; then + einfo "Loading cpufreq_ondemand" + modprobe cpufreq_ondemand + eend $? + fi + + 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 eoutdent @@ -1327,8 +1153,9 @@ config_mixer () { MICVOL=0 fi - for CONTROL in Master PCM ; do + for CONTROL in Master PCM Front ; do if amixer -q | grep -q "Simple mixer control '$CONTROL'" ; then + amixer -q set "${CONTROL}" unmute 1>/dev/null 2>&1 amixer -q set "${CONTROL}" "${VOL}"% eend $? fi @@ -1512,23 +1339,34 @@ config_netscript() { } # }}} -# {{{ 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 + + 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" " " )" -# {{{ welcome sound -config_welcome(){ - if checkbootparam 'welcome' ; then - flitewrapper "welcome to the gremel system" + 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 @@ -1546,8 +1384,7 @@ if checkbootparam 'startx' && ! echo "$CMDLINE" | grep -q 'startx.*nostartx' ; t 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 @@ -1555,15 +1392,15 @@ if checkbootparam 'startx' && ! echo "$CMDLINE" | grep -q 'startx.*nostartx' ; t config_userfstab || fstabuser='grml' cat>|/etc/init.d/xstartup</dev/tty6 2>\&1 /dev/tty6 2>\&1 /dev/tty6 2>&1 < /dev/tty6' >> /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 $? @@ -1579,7 +1416,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 @@ -1899,38 +1736,6 @@ 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(){ [ -n "$INSTALLED" ] && return 0 @@ -1940,6 +1745,7 @@ config_swraid(){ 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 @@ -2156,58 +1962,6 @@ config_tohd() } # }}} -# {{{ grml2hd: automatic installation -config_grml2hd(){ - -if checkbootparam "grml2hd" || 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<