X-Git-Url: https://git.grml.org/?p=grml-autoconfig.git;a=blobdiff_plain;f=autoconfig.functions;h=9218b7b0f63e136ab99ac541ac714ee450f1e644;hp=1707c5f049bd8dcb71c3831986ad4b27439b8715;hb=8f1a96e977ce1ea9bf38523717a2331ad0e027a9;hpb=c9673f53bab9118d1a6eaae9fa2ce803c590bea0 diff --git a/autoconfig.functions b/autoconfig.functions index 1707c5f..9218b7b 100755 --- a/autoconfig.functions +++ b/autoconfig.functions @@ -4,7 +4,7 @@ # Authors: grml-team (grml.org), (c) Klaus Knopper , (c) Michael Prokop # Bug-Reports: see http://grml.org/bugs/ # License: This file is licensed under the GPL v2. -# Latest change: Son Jul 01 20:34:14 CEST 2007 [mika] +# Latest change: Mit Jul 11 19:34:06 CEST 2007 [mika] ################################################################################ # {{{ path, variables, signals, umask, zsh @@ -1249,28 +1249,78 @@ 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 + # 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 ; then + 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:" - if [ -r /usr/bin/cpufreq-detect.sh ] ; then - eindent + 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} and cpufreq_ondemand, setting ondemand governor" + einfo "Loading modules ${MODULE}" modprobe "$MODULE" 1>>$DEBUG || modprobe "$MODULE_FALLBACK" 1>>$DEBUG - if modprobe cpufreq_ondemand && RC=0 || RC=1 ; then - for file in $(find /sys/devices/system/cpu/ -name scaling_governor 2>/dev/null) ; do - echo ondemand > $file - done + RC=$? + if [[ $RC == 0 ]]; then + eend 0 + else + SKIP_CPU_GOVERNOR=1 + eend $1 fi - eend $RC 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 - eoutdent - fi # cpufreq-detect + eend $RC + fi # cpu-governor + + eoutdent + fi # laptop-detect fi # cpufreq_check fi # checkbootparam nocpu @@ -1454,7 +1504,7 @@ else ERROR=$(aumix -w $VOL -v $VOL -p $VOL -m $VOL 2>&1) ; RC=$? if [ -n "$ERROR" ] ; then eindent - eerror "Problem setting mixer volumes: $ERROR" + eerror "Problem setting mixer volumes: $ERROR (no soundcard?)" eoutdent fi eend $RC @@ -2054,15 +2104,15 @@ config_lvm(){ if ! [ -x /sbin/lvm -a -x /etc/init.d/lvm2 -a -x /sbin/lvdisplay ] ; then eerror "LVM not available, can not execute it." ; eend 1 else - if lvdisplay 1>/dev/null 2>&1 ; then - einfo "You seem to have logical volumes (LVM) on your system." + if lvdisplay 2>&1 | grep -v 'No volume groups found' 1>/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." - eend 0 + eend 0 if checkbootparam 'lvm' ; then einfo "Bootoption LVM found. Searching for logical volumes:" - /etc/init.d/lvm2 start ; eend $? - fi + /etc/init.d/lvm2 start ; eend $? + fi eoutdent fi fi # check for lvm binary @@ -2294,4 +2344,4 @@ config_keyboard(){ # }}} ## END OF FILE ################################################################# -# vim:foldmethod=marker +# vim:foldmethod=marker expandtab ai ft=zsh