X-Git-Url: http://git.grml.org/?p=grml-autoconfig.git;a=blobdiff_plain;f=autoconfig.functions;h=07c33444152b8016d92fdafe151e6c52c807d8a1;hp=ae4edd76336ad3dbd380fa21454a9f24cdca24a6;hb=b5997c2a11f6dbf369e0e538862202992ebe88a2;hpb=180b35a6adcd6c76bce96d6eb1b0935c43106c13 diff --git a/autoconfig.functions b/autoconfig.functions index ae4edd7..07c3344 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: Fre Apr 13 12:49:52 CEST 2007 [mika] +# Latest change: Mit Jul 04 12:02:35 CEST 2007 [mika] ################################################################################ # {{{ path, variables, signals, umask, zsh @@ -277,7 +277,7 @@ config_language(){ ewarn "Not runnning unicode_start: grml-small with reduced language support detected." ; eend 0 else einfo "Setting up unicode environment." - unicode_start ; eend $? + unicode_start 2>>$DEBUG ; eend $? fi fi fi @@ -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) + # * 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 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 @@ -1656,7 +1705,12 @@ sudo -u $fstabuser -i /usr/bin/grml-x $WINDOWMANAGER 1>>$DEBUG EOF chmod 755 /etc/init.d/xstartup - sed -i 's#^6:.*#6:2345:respawn:/bin/zsh --login -c "/etc/init.d/xstartup ; /bin/zsh"#' /etc/inittab + # adjust inittab for xstartup + if grep -q '^6:' /etc/inittab ; then + sed -i 's|^6:.*|6:2345:respawn:/bin/zsh --login -c "/etc/init.d/xstartup ; /bin/zsh"|' /etc/inittab + else # just append tty6 to inittab if no definition is present: + echo '6:2345:respawn:/bin/zsh --login -c "/etc/init.d/xstartup ; /bin/zsh"' >> /etc/inittab + fi /sbin/telinit q ; eend $? @@ -2033,6 +2087,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 @@ -2091,49 +2172,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<