X-Git-Url: https://git.grml.org/?p=grml-autoconfig.git;a=blobdiff_plain;f=autoconfig.functions;h=9218b7b0f63e136ab99ac541ac714ee450f1e644;hp=cf78d9dcda184c0143814f8b575f902b89374e84;hb=8f1a96e977ce1ea9bf38523717a2331ad0e027a9;hpb=826d06efd0e5eb03da7d5d321e995aa54dffd6e2 diff --git a/autoconfig.functions b/autoconfig.functions index cf78d9d..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 Apr 15 12:20:14 CEST 2007 [mika] +# Latest change: Mit Jul 11 19:34:06 CEST 2007 [mika] ################################################################################ # {{{ path, variables, signals, umask, zsh @@ -1046,8 +1046,12 @@ if [ -z "$INSTALLED" ] ; then if grep -q $p /proc/swaps ; then ewarn "Not using swap partition ${WHITE}${p}${NORMAL} as it is already in use." ; eend 0 else + if [ -b "$p" ] ; then einfo "Using swap partition ${WHITE}${p}${NORMAL}." swapon $p 2>>$DEBUG ; eend $? + else + ewarn "$p is not a valid block device - not using it therefore." ; eend 0 + fi fi ;; esac # dd-check @@ -1065,17 +1069,19 @@ if [ -z "$INSTALLED" ] ; then *) continue ;; # *) NONEFOUND='1'; continue ;; esac - + # use a swapfile if [ -z "$NOSWAP" ] ; then - mount -o "$MOUNTOPTS" -t $f $p $m 2>>$DEBUG || continue + mount -o "$MOUNTOPTS" -t $f $p $m 2>>$DEBUG && MOUNTED=1 || continue # Activate swapfile, if exists SWAPFILE="$(/bin/ls -1d $m/[Gg][Rr][Mm][Ll].[Ss][Ww][Pp] 2>/dev/null)" fi if [ -z "$NOSWAP" -a -n "$SWAPFILE" -a -f "$SWAPFILE" ]; then mount -o remount,rw $m && MOUNTED=1 if swapon "$SWAPFILE" 2>>$DEBUG ; then - einfo "Using GRML swapfile ${SWAPFILE}." + eindent + einfo "Using GRML swapfile ${WHITE}${SWAPFILE}${NORMAL}." + eoutdent fnew="$SWAPFILE swap swap defaults 0 0" stringinfile "$fnew" "/etc/fstab" || echo "$fnew" >> /etc/fstab GRML_SWP="$GRML_SWP $SWAPFILE" @@ -1083,7 +1089,7 @@ if [ -z "$INSTALLED" ] ; then fi mount -o remount,ro $m 2>>$DEBUG && MOUNTED=1 fi - + # use a image as home IMAGE="$(/bin/ls -1d $m/[Gg][Rr][Mm][Ll].[Ii][Mm][Gg] 2>/dev/null)" if [ -z "$GRML_IMG" -a -n "$IMAGE" -a -f "$IMAGE" ]; then @@ -1098,10 +1104,10 @@ if [ -z "$INSTALLED" ] ; then fi fi eend 0 - + # Umount, if not in use [ -n "$MOUNTED" ] && umount -r $m 2>/dev/null - + done <>$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 @@ -1448,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 @@ -2038,6 +2094,33 @@ config_swraid(){ } # }}} +# {{{ 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 + if checkbootparam 'nolvm' ; then + ewarn "Skipping LVM code as requested on boot commandline." ; eend 0 + else + 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 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 + if checkbootparam 'lvm' ; then + einfo "Bootoption LVM found. Searching for logical volumes:" + /etc/init.d/lvm2 start ; eend $? + fi + eoutdent + fi + fi # check for lvm binary + fi # check for bootoption nolvm + fi # run only in live-cd mode +} +# }}} + # {{{ debnet: setup network based on an existing one found on a partition config_debnet(){ if checkbootparam "debnet" ; then @@ -2096,49 +2179,144 @@ fi # {{{ grml2hd: automatic installation config_grml2hd(){ +if stringinstring "BOOT_IMAGE=grml2hd " "$CMDLINE" ; then + if checkbootparam "user" ; then - NEWUSER='' - NEWUSER="$(getbootparam 'user' 2>>$DEBUG)" - sed -i "s/^NEWUSER=.*/NEWUSER=$NEWUSER/" /etc/grml2hd/config || export GRML2HD_FAIL=1 + 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 + 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 + 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 + 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 -if stringinstring "BOOT_IMAGE=grml2hd " "$CMDLINE" ; then - cat>|/usr/bin/grml2hd_noninteractive<|/usr/bin/grml2hd_noninteractive<|/usr/bin/grml-debootstrap_noninteractive<