X-Git-Url: http://git.grml.org/?p=grml-autoconfig.git;a=blobdiff_plain;f=autoconfig.functions;h=637f2381fa78d2de8dc66aee6b0d4e15930e71a6;hp=21b7bee64fd83549c4c7e43c283f40bb6d31ee66;hb=2e0338e5b686bfaaecd58d257f590042fdb09b21;hpb=f02d319421ed7e8513fc361ed9ed27a9a22be05f diff --git a/autoconfig.functions b/autoconfig.functions index 21b7bee..637f238 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 >>$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 @@ -1597,9 +1605,10 @@ fi # checkbootparam home # }}} # {{{ Sound + config_mixer(){ -if ! [ -x /usr/bin/aumix ] ; then - eerror "aumix binary not available. Can not set sound volumes therefore." ; eend 1 +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 @@ -1619,14 +1628,12 @@ else if checkbootparam 'nosound' ; then einfo "Muting sound devices on request." - # some IBM notebooks require the following stuff: - if [ -x /usr/bin/amixer ] ; then - if amixer get Front 1>/dev/null 2>>$DEBUG ; then - amixer set Front unmute 1>/dev/null - amixer set Front 0% 1>/dev/null - fi - fi - ERROR=$(aumix -w 0 -v 0 -p 0 -m 0 2>&1) ; RC=$? + + fix_ibm_sound 0 + # mute the master, this should be sufficient + ERROR=$(amixer -q set Master mute) + RC=$? + if [ -n "$ERROR" ] ; then eindent eerror "Problem muting sound devices: $ERROR" @@ -1635,13 +1642,9 @@ else eend $RC elif [ -z "$INSTALLED" ]; then einfo "Setting mixer volumes to level ${WHITE}${VOL}${NORMAL}." - # some IBM notebooks require the following stuff: - if [ -x /usr/bin/amixer ] ; then - if amixer get Front 1>/dev/null 2>>$DEBUG ; then - amixer set Front unmute 1>/dev/null - amixer set Front ${VOL}% 1>/dev/null - fi - fi + + fix_ibm_sound ${VOL} + # by default assume '0' as volume for microphone: if checkbootparam 'micvol' ; then MICVOL="$(getbootparam 'micvol' 2>>$DEBUG)" @@ -1650,17 +1653,39 @@ else fi # finally set the volumes: - ERROR=$(aumix -w $VOL -v $VOL -p $VOL -m $MICVOL 2>&1) ; RC=$? - if [ -n "$ERROR" ] ; then - eindent - eerror "Problem setting mixer volumes: $ERROR (no soundcard?)" - eoutdent + RC=0 + for CONTROL in Master PCM ; do + amixer -q set ${CONTROL} ${VOL}% + if [ $? -ne 0 ] ; then RC=$? ; fi + done + # dont know how to set microphone volume for all soundcards with amixer, + # so use aumix instead :/ + if [ ${MICVOL} -ne 0 -a -x /usr/bin/aumix ] ; then + aumix -m $MICVOL &>/dev/null + if [ $? -ne 0 ] ; then RC=$? ; fi fi + eend $RC fi fi } + +# on some IBM notebooks the front control has to be toggled +fix_ibm_sound() { + if [ -z $1 ] ; then + return + fi + + VOL=${1} + + 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 +} # }}} # {{{ modem detection @@ -1951,6 +1976,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 @@ -1971,6 +1997,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 @@ -1984,15 +2013,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 @@ -2046,28 +2075,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)" @@ -2087,9 +2126,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 } # }}}