X-Git-Url: https://git.grml.org/?p=grml-autoconfig.git;a=blobdiff_plain;f=autoconfig.functions;h=f9a70ba364c0c3b323b5534290b565188146535e;hp=5417220a2011843e091196425f170719cb285838;hb=d01295a1300ebb4984adb78c0d27d028f891fe77;hpb=98b0e91f4ac3801dd6d084f39e7c112e211e0a40 diff --git a/autoconfig.functions b/autoconfig.functions index 5417220..f9a70ba 100755 --- a/autoconfig.functions +++ b/autoconfig.functions @@ -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(){ @@ -214,7 +219,7 @@ config_language(){ # set default to 'en' in live-cd mode if $LANGUAGE is not yet set: if [ -z "$INSTALLED" ] ; then - [ -n "$LANGUAGE" ] || LANGUAGE='us' + [ -n "$LANGUAGE" ] || LANGUAGE='en' fi # if bootoption lang is used update /etc/default/locale, otherwise *not*! @@ -236,6 +241,9 @@ config_language(){ 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 +305,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 2>>$DEBUG ; eend $? fi fi @@ -1274,7 +1282,7 @@ else 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 --script=/etc/grml/pump-script >>$DEBUG 2>&1 && echo finished_running_pump > /etc/network/status/$DEVICE ) & + ( pump -i $DEVICE --script=/usr/lib/grml-autoconfig/pump-runparts >>$DEBUG 2>&1 && echo finished_running_pump > /etc/network/status/$DEVICE ) & trap "" 2 3 11 sleep 1 eend 0 @@ -1367,77 +1375,75 @@ else # 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 + # * cpufreq 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=" + # Virtual Box supports ACPI and laptop-detect would return 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 "Trying to set up 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 + 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 - eoutdent + eoutdent - fi # laptop-detect fi # cpufreq_check fi # checkbootparam nocpu } @@ -1968,6 +1974,7 @@ 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" if checkbootparam 'noautoconfig' || checkbootparam 'forensic' ; then ewarn "Skipping running automount of device(s) labeled GRMLCFG as requested." ; eend 0 else @@ -1988,6 +1995,9 @@ else fi fi DCSDEVICE=$(blkid -t LABEL=GRMLCFG | head -1 | awk -F: '{print $1}') + if [ -n "$DCSDEVICE" ]; then + DCSMP="/mnt/grmlcfg" + fi eoutdent fi @@ -2001,15 +2011,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 1>>$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 @@ -2063,28 +2073,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 +2124,9 @@ if checkbootparam 'config' ; then fi fi fi -# umount /mnt/grml if it was mounted by finddcsdir +# umount $DCSMP if it was mounted by finddcsdir # this doesn't really belong here -grep -q '/mnt/grml' /proc/mounts && umount /mnt/grml +grep -q '$DCSMP' /proc/mounts && umount $DCSMP } # }}}