X-Git-Url: http://git.grml.org/?p=grml-autoconfig.git;a=blobdiff_plain;f=autoconfig.functions;h=e129caea21bae19821d8c58758d83d221509c55c;hp=f6d99b3aeef504202802dc2b9644bfaf9688946c;hb=4a4e155db0e3c21790c6c5073f076a5e9ceaf33b;hpb=cb028f47064411d908666b4211559febfeda1caa diff --git a/autoconfig.functions b/autoconfig.functions index f6d99b3..e129cae 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: Mon Feb 19 18:59:09 CET 2007 [mika] +# Latest change: Son Mär 25 12:32:37 CEST 2007 [mika] ################################################################################ # {{{ path, variables, signals, umask, zsh @@ -261,6 +261,7 @@ config_language(){ [[ "$KKEYBOARD" == 'at' ]] && KEYTABLE=de-latin1-nodeadkeys # write keyboard related variables to file for later use + [ -d /etc/sysconfig ] || mkdir /etc/sysconfig echo "KEYTABLE=\"$KEYTABLE\"" > /etc/sysconfig/keyboard echo "XKEYBOARD=\"$XKEYBOARD\"" >> /etc/sysconfig/keyboard echo "KDEKEYBOARD=\"$KDEKEYBOARD\"" >> /etc/sysconfig/keyboard @@ -337,31 +338,33 @@ config_userfstab(){ config_time(){ # don't touch the files if running from harddisk: if [ -z "$INSTALLED" ]; then - UTC="" - checkbootparam utc >>$DEBUG 2>&1 && UTC="-u" - checkbootparam gmt >>$DEBUG 2>&1 && UTC="-u" - # hwclock uses the TZ variable - if [ -r /etc/default/locale ] ; then - . /etc/default/locale - else - TZ=Europe/Vienna - fi - ERROR=$(TZ="$TZ" hwclock $UTC -s 2>&1) ; RC=$? - if [ -n "$ERROR" ] ; then - eindent - ERROR=$(TZ="$TZ" hwclock $UTC -s --directisa 2>&1) - if [ -n "$ERROR" ] ; then - eerror "Problem running hwclock: $ERROR" ; eend 1 - fi - eoutdent - fi + UTC="" + checkbootparam utc >>$DEBUG 2>&1 && UTC="-u" + checkbootparam gmt >>$DEBUG 2>&1 && UTC="-u" + # hwclock uses the TZ variable + [ -r /etc/timezone ] && TZ=$(cat /etc/timezone) + [ -n "$TZ" ] || TZ=Europe/Vienna + + if ! [ -r /dev/rtc ] ; then + ewarn "Realtime clock not available, skipping execution of hwclock therefore." ; eend 0 + else + ERROR=$(TZ="$TZ" hwclock $UTC -s 2>&1 | head -1) ; RC=$? + if [ -n "$ERROR" ] ; then + eindent + ERROR=$(TZ="$TZ" hwclock $UTC -s --directisa 2>&1 | head -1) + if [ -n "$ERROR" ] ; then + eerror "Problem running hwclock: $ERROR" ; eend 1 + fi + eoutdent + fi + fi fi } # }}} # {{{ print kernel info config_kernel(){ - vmware-detect &>/dev/null && VMWARE="inside ${WHITE}VMWare${NORMAL}" + vmware-detect &>/dev/null && VMWARE="inside ${WHITE}VMware/Qemu${NORMAL}" [ -d /proc/xen ] && VMWARE='' # vmware-detect returns '0' when running with a Xen-enabled kernel einfo "Running Linux Kernel $KERNEL $VMWARE" ; eend 0 if [ -r /proc/cpuinfo ] ; then @@ -382,16 +385,29 @@ config_kernel(){ # {{{ vmware specific stuff config_vmware(){ if checkbootparam novmware ; then - ewarn "Skipping running vmware specific stuff as requested on boot commandline." ; eend 0 + ewarn "Skipping running vmware specific stuff as requested on boot commandline." ; eend 0 else - if [ -z "$INSTALLED" ]; then - if vmware-detect ; then - if [ -r /etc/X11/xorg.conf.vmware ] ; then - einfo "Copying /etc/X11/xorg.conf.vmware to /etc/X11/xorg.conf" - cp /etc/X11/xorg.conf.vmware /etc/X11/xorg.conf ; eend $? - fi - fi - fi + if [ -z "$INSTALLED" ] ; then + if ! checkbootparam qemu ; then + if vmware-detect ; then + if [ -r /etc/X11/xorg.conf.vmware ] ; then + einfo "VMware: Copying /etc/X11/xorg.conf.vmware to /etc/X11/xorg.conf" + cp /etc/X11/xorg.conf.vmware /etc/X11/xorg.conf ; eend $? + fi + fi + fi + fi +fi +} +# }}} + +# {{{ qemu specific stuff +config_qemu(){ +if checkbootparam qemu ; then + if [ -r /etc/X11/xorg.conf.example ] ; then + einfo "Qemu: Copying /etc/X11/xorg.conf.example to /etc/X11/xorg.conf" + cp /etc/X11/xorg.conf.example /etc/X11/xorg.conf ; eend $? + fi fi } # }}} @@ -514,7 +530,11 @@ done # {{{ Bring up loopback interface now config_local_net(){ if [ -z "$INSTALLED" ] ; then - grep -q lo=lo /etc/network/run/ifstate 2>/dev/null || ifup lo + if grep -q 'iface lo inet loopback' /etc/network/interfaces 2>/dev/null ; then + grep -q lo=lo /etc/network/run/ifstate 2>/dev/null || ifup lo + else + ifconfig lo up + fi fi } # }}} @@ -1038,9 +1058,11 @@ if [ -n "$partitions" ]; then *) continue ;; # *) NONEFOUND='1'; continue ;; esac - mount -o "$MOUNTOPTS" -t $f $p $m 2>>$DEBUG || continue - # Activate swapfile, if exists - SWAPFILE="$(/bin/ls -1d $m/[Gg][Rr][Mm][Ll].[Ss][Ww][Pp] 2>/dev/null)" + if [ -z "$NOSWAP" ] ; then + mount -o "$MOUNTOPTS" -t $f $p $m 2>>$DEBUG || 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 if swapon "$SWAPFILE" 2>>$DEBUG ; then @@ -1091,22 +1113,19 @@ if checkbootparam "ipv6"; then # we probably need some time until stateless autoconfiguration has happened sleep 2 NETDEVICES="$(awk -F: '/eth.:|tr.:|wlan.:/{print $1}' /proc/net/dev 2>>$DEBUG)" - for DEVICE in `echo "$NETDEVICES"` - do + for DEVICE in `echo "$NETDEVICES"`; do eindent - einfo "$DEVICE:" - ADDRESSES="$(ifconfig $DEVICE | awk '/.*inet6 addr:.*/{print $3}')" - COUNT="$(ifconfig $DEVICE | awk '/.*inet6 addr:.*/{ sum += 1};END {print sum }')" - eindent - for ADDR in `echo "$ADDRESSES"` - do - einfo "$ADDR" - done - if [ "$COUNT" -eq "0" ] - then - einfo "(none)" ; eend 1 - fi - eoutdent + einfo "$DEVICE:" + ADDRESSES="$(ifconfig $DEVICE | awk '/.*inet6 addr:.*/{print $3}')" + COUNT="$(ifconfig $DEVICE | awk '/.*inet6 addr:.*/{ sum += 1};END {print sum }')" + eindent + for ADDR in `echo "$ADDRESSES"` ; do + einfo "$ADDR" + done + if [ "$COUNT" -eq "0" ] ; then + einfo "(none)" ; eend 1 + fi + eoutdent eoutdent done eend 0 @@ -1192,58 +1211,49 @@ config_cpu(){ if checkbootparam "nocpu"; then ewarn "Skipping CPU detection as requested on boot commandline." ; eend 0 else - if ! [ -x /etc/init.d/powernowd ] ; then - ewarn "Skipping CPU detection as powernowd dependencies are not fulfilled." ; eend 1 - elif [ ! -e /lib/modules/${KERNEL}/kernel/arch/i386/kernel/cpu/cpufreq -o ! -e /lib/modules/${KERNEL}/kernel/drivers/cpufreq ] ; then - ewarn "Skipping CPU detection as module dependencies are not fulfilled." ; eend 1 - else - if [[ `grep -c processor /proc/cpuinfo` -gt 1 ]] ; then - einfo "Detecting CPU:" - 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) - echo $CPU | sed 's/ \{1,\}/ /g' - eend 0 - 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 - if /usr/sbin/laptop-detect ; then - einfo "Detected Laptop - trying to use cpu frequency scaling:" -# loadcpumod() { -# for module in /lib/modules/${KERNEL}/kernel/arch/i386/kernel/cpu/cpufreq/*.ko /lib/modules/${KERNEL}/kernel/drivers/cpufreq/*.ko ; do -# # modprobe ${${${${(f)"$(_call_program modules ${(M)words[1]##*/}modprobe -l | grep cpufreq 2>>$DEBUG)"}:#}##*/}%.*} -# modprobe `basename ${module%%\.ko}` 1>>$DEBUG 2>&1 -# done -# } -# CPU=$(grep 'model name' /proc/cpuinfo | cut -b14- | head -1) -# eindent -# if [[ $CPU = *Intel* ]] ; then -# einfo "Detected CPU is of type Intel - loading modules and starting cpudyn." -# local DETECTED=1 -# loadcpumod -# /etc/init.d/cpudyn start 1>>$DEBUG ; eend $? -# fi -# if [[ $CPU = *AMD* ]] ; then -# einfo "Detected CPU is of type AMD - loading modules and starting powernowd." -# local DETECTED=1 -# loadcpumod -# /etc/init.d/powernowd start 1>>$DEBUG ; eend $? -# fi - - eindent - if [ -r /usr/bin/cpufreq-detect.sh ] ; then - . /usr/bin/cpufreq-detect.sh - if [ -n "$MODULE" -a "$MODULE" != none ]; then - einfo "Loading module ${MODULE} and starting powernowd." - modprobe cpufreq_userspace 1>>$DEBUG - modprobe "$MODULE" 1>>$DEBUG || modprobe "$MODULE_FALLBACK" 1>>$DEBUG - /etc/init.d/powernowd start 1>>$DEBUG ; eend $? - else - ewarn "Could not detect an appropriate CPU for use with powernowd - skipping." && eend 1 - fi - fi - eoutdent + # check module dependencies + cpufreq_check() { + if [ -e /lib64 ] ; then + [ -e /lib/modules/${KERNEL}/kernel/arch/x86_64/kernel/cpufreq ] || return 1 + else + [ -e /lib/modules/${KERNEL}/kernel/arch/i386/kernel/cpu/cpufreq -o ! -e /lib/modules/${KERNEL}/kernel/drivers/cpufreq ] || return 1 fi + } + + if [[ `grep -c processor /proc/cpuinfo` -gt 1 ]] ; then + einfo "Detecting CPU:" + 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) + echo $CPU | sed 's/ \{1,\}/ /g' + eend 0 + 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 -fi + + if ! cpufreq_check ; then + ewarn "Skipping cpufreq setup as module dependencies are not fulfilled." ; eend 1 + else + if /usr/sbin/laptop-detect ; then + einfo "Detected Laptop - trying to use cpu frequency scaling:" + if [ -r /usr/bin/cpufreq-detect.sh ] ; then + eindent + . /usr/bin/cpufreq-detect.sh + if [ -n "$MODULE" -a "$MODULE" != none ]; then + einfo "Loading modules ${MODULE} and cpufreq_ondemand, setting ondemand governor" + 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 + fi + eend $RC + else + ewarn "Could not detect an appropriate CPU for use with cpu frequency scaling - skipping." && eend 1 + fi + eoutdent + fi # cpufreq-detect + fi # laptop-detect + fi # cpufreq_check +fi # checkbootparam nocpu } # }}} @@ -1287,6 +1297,7 @@ fi # {{{ Check for persistent homedir option and eventually mount /home from there, or use a loopback file. config_homedir(){ +if checkbootparam home ; then HOMEDIR="$(getbootparam home)" MYHOMEDEVICE="" MYHOMEMOUNTPOINT="" @@ -1360,6 +1371,7 @@ $(cat /proc/mounts) EOT fi fi +fi # checkbootparam home } # }}} @@ -1627,7 +1639,7 @@ 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 - + /sbin/telinit q ; eend $? if grep -q '^allowed_users=' /etc/X11/Xwrapper.config ; then