einfo "Bootparameter log found. Log files: ${DEBUG} and /var/log/boot"
eindent
einfo "Starting bootlogd." # known to be *very* unreliable :(
- bootlogd -r -c 1>>$DEBUG 2>&1 ; eend $?
+ bootlogd -r -c >>$DEBUG 2>&1 ; eend $?
eoutdent
else
DEBUG="/dev/null"
if checkbootparam 'fwtimeout' ; then
TIMEOUT="$(getbootparam 'fwtimeout' 2>>$DEBUG)"
einfo "Bootoption fwtimeout found. (Re)Loading firmware_class module."
- rmmod firmware_class 1>>$DEBUG 2>&1
+ rmmod firmware_class >>$DEBUG 2>&1
modprobe firmware_class ; eend $?
fi
if [ -z "$TIMEOUT" ] ; then
einfo "Activating language settings:"
eindent
- # people can specify $LANGUAGE and $CONSOLEFONT in a config file:
+ # people can specify $LANGUAGE and $CONSOLEFONT in a config file
[ -r /etc/grml/autoconfig ] && . /etc/grml/autoconfig
- grep -q ' lang=.*-utf8' /proc/cmdline && UTF8='yes' || UTF8=''
-
- # check for bootoption which overrides config from /etc/grml/autoconfig:
+ # check for bootoption which overrides config from /etc/grml/autoconfig
BOOT_LANGUAGE="$(getbootparam 'lang' 2>>$DEBUG)"
[ -n "$BOOT_LANGUAGE" ] && LANGUAGE="$BOOT_LANGUAGE"
- # set default to 'en' in live-cd mode if $LANGUAGE is not yet set:
+ # set default to 'en' in live-cd mode iff $LANGUAGE is not set yet
if [ -z "$INSTALLED" ] ; then
[ -n "$LANGUAGE" ] || LANGUAGE='en'
fi
# set console font
if [ -z "$CONSOLEFONT" ] ; then
if ! checkbootparam 'nodefaultfont' >>$DEBUG 2>&1 ; then
- # [ -n "$UTF8" ] && CONSOLEFONT='LatArCyrHeb-16' || CONSOLEFONT='Lat15-Terminus16'
- # if [ -r /usr/share/consolefonts/Lat15-Terminus16.psf.gz ] ; then
if [ -r /usr/share/consolefonts/Uni3-Terminus16.psf.gz ] ; then
CONSOLEFONT='Uni3-Terminus16'
else
if [ -r /etc/default/locale ] ; then
if grep -q "LANG=.*UTF" /etc/default/locale ; then
einfo "Setting up unicode environment."
- unicode_start 2>>$DEBUG ; eend $?
+ unicode_start >>$DEBUG 2>&1 ; eend $?
fi
fi
fi
# we have to set up all consoles, therefore loop it over all ttys:
- NUM_CONSOLES=$(fgconsole --next-available)
- NUM_CONSOLES=$(expr ${NUM_CONSOLES} - 1)
- [ ${NUM_CONSOLES} -eq 1 ] && NUM_CONSOLES=6
- CUR_CONSOLE=$(fgconsole)
+ NUM_CONSOLES=$(fgconsole --next-available 2>/dev/null)
+ if [ -n "$NUM_CONSOLES" ] ; then
+ NUM_CONSOLES=$(expr ${NUM_CONSOLES} - 1)
+ [ ${NUM_CONSOLES} -eq 1 ] && NUM_CONSOLES=6
+ fi
+ CUR_CONSOLE=$(fgconsole 2>/dev/null)
+
+ if [ -x "$(which setfont)" ] ; then
+ use_setfont=true
+ elif [ -x "$(which consolechars)" ] ; then
+ use_consolechars=true
+ else
+ eerror "Neither setfont nor consolechars tool present, can not set font."
+ eend 1
+ return 1
+ fi
if [ -n "$CHARMAP" ] ; then
- einfo "Running consolechars for ${CHARMAP}"
- for vc in `seq 0 ${NUM_CONSOLES}` ; do
- consolechars --tty=/dev/tty${vc} -m ${CHARMAP} ; RC=$?
+ einfo "Setting font to ${CHARMAP}"
+ RC=0
+ for vc in $(seq 0 ${NUM_CONSOLES}) ; do
+ if $use_setfont ; then
+ setfont -C /dev/tty${vc} $CHARMAP ; RC=$?
+ elif $use_consolechars ; then
+ consolechars --tty=/dev/tty${vc} -m ${CHARMAP} ; RC=$?
+ fi
done
- [ -n "$CUR_CONSOLE" ] && chvt $CUR_CONSOLE
+ if [ -n "$CUR_CONSOLE" ] ; then
+ [ "$CUR_CONSOLE" != "serial" ] && chvt $CUR_CONSOLE
+ fi
eend $RC
fi
ewarn "Skipping setting console font as requested on boot commandline." ; eend 0
else
if [ -n "$CONSOLEFONT" ] ; then
- einfo "Running consolechars using ${CONSOLEFONT}"
- for vc in `seq 0 ${NUM_CONSOLES}` ; do
- consolechars --tty=/dev/tty${vc} -f $CONSOLEFONT ; RC=$?
+ einfo "Setting font to ${CONSOLEFONT}"
+ RC=0
+ for vc in $(seq 0 ${NUM_CONSOLES}) ; do
+ if $use_setfont ; then
+ setfont -C /dev/tty${vc} ${CONSOLEFONT} ; RC=$?
+ elif $use_consolechars ; then
+ consolechars --tty=/dev/tty${vc} -f ${CONSOLEFONT} ; RC=$?
+ fi
done
- [ -n "$CUR_CONSOLE" ] && chvt $CUR_CONSOLE
- eend $?
+ if [ -n "$CUR_CONSOLE" ] ; then
+ [ "$CUR_CONSOLE" != "serial" ] && chvt $CUR_CONSOLE
+ fi
+ eend $RC
fi
fi
config_hostname(){
if checkbootparam 'hostname' ; then
HOSTNAME="$(getbootparam 'hostname' 2>>$DEBUG)"
+ if [ -z "$HOSTNAME" ] && [ -x /usr/bin/random-hostname ] ; then
+ einfo "Generating random hostname as no hostname was specified."
+ HOSTNAME="$(/usr/bin/random-hostname)"
+ eend $?
+ fi
einfo "Setting hostname to $HOSTNAME as requested."
grml-hostname $HOSTNAME >>$DEBUG ; RC=$?
[ "$RC" = "0" ] && hostname $HOSTNAME
# activate serial console {{{
config_console(){
if checkbootparam 'console'; then
- einfo "Bootoption (for serial) console detected."
- eindent
- if [ -r /etc/mgetty/mgetty.config ] ; then
- MODE=$(getbootparam 'console' | awk -F, '{print $2}')
- MODE=${MODE%%n*}
- [ -n "$MODE" ] || MODE=9600 # default mode
- einfo "Setting speed in /etc/mgetty/mgetty.config to $MODE bps"
- sed -i "s/speed [0-9]*/speed $MODE/" /etc/mgetty/mgetty.config ; eend $?
- fi
+ local line
+ local ws
+ ws=' '
- einfo "Activating mgetty."
- sed -i 's/^#T0/T0/' /etc/inittab
- sed -i 's/^#T1/T1/' /etc/inittab
- /sbin/telinit q ; eend $?
- eoutdent
+ einfo "Bootoption for serial console detected:"
+
+ line="$CMDLINE x "
+ this=""
+ line="${line#*[$ws]}"
+ local telinitq=""
+ while [ -n "$line" ]; do
+ case "$this" in
+ console=*)
+ local serial="$this"
+ local device="${this%%,*}"
+ local device="${device##*=}"
+ if echo $serial | grep -q ttyS ; then
+ local option="${serial##*,}"
+ # default (works for kvm & CO):
+ local speed="115200,57600,38400,19200,9600,4800,2400,1200";
+ # ... unless overriden by command line:
+ case "$option" in
+ 115200*) speed=115200 ;;
+ 57600*) speed=57600 ;;
+ 38400*) speed=38400 ;;
+ 19200*) speed=19200 ;;
+ 9600*) speed=9600 ;;
+ 4800*) speed=4800 ;;
+ 2400*) speed=2400 ;;
+ 1200*) speed=1200 ;;
+ esac
+ eindent
+ einfo "Activating console login on device ${device} with speed ${speed}."
+ local number="${device#ttyS}"
+ sed -i "/^T$number:/d;/^#grmlserial#/iT$number:23:respawn:/bin/bash -c \"/sbin/getty -L $device -l /usr/bin/zsh-login $speed vt100 || sleep 30\"" /etc/inittab
+ eend $?
+ telinitq="1"
+ eoutdent
+ fi
+ ;;
+ esac
+ this="${line%%[$ws]*}"
+ line="${line#*[$ws]}"
+ done
+
+ if [ -n "$telinitq" ]; then
+ /sbin/telinit q
+ fi
+ eend $?
fi
}
# }}}
eindent
einfo "$(discover --data-path=linux/module/name --data-path=linux/modules/options --format="%s %s" --data-version=`uname -r` --enable-bus all | sort -u | xargs echo)"
eoutdent
- /sbin/discover-modprobe -v 1>>$DEBUG 2>&1 &
+ /sbin/discover-modprobe -v >>$DEBUG 2>&1 &
eend 0
else
eerror "Application discover not available. Information: udev should handle hardware recognition." ; eend 0
else
if [ -r /etc/init.d/hotplug ] ; then
einfo "Starting hotplug system in background."
- /etc/init.d/hotplug start 1>>$DEBUG 2>>$DEBUG &
+ /etc/init.d/hotplug start >>$DEBUG 2>>$DEBUG &
eend 0
elif [ -r /etc/init.d/hotplug-light ] ; then
einfo "Starting hotplug-light system in background."
- /etc/init.d/hotplug-light start 1>>$DEBUG 2>>$DEBUG &
+ /etc/init.d/hotplug-light start >>$DEBUG 2>>$DEBUG &
eend 0
else
ewarn "No hotplug system found. Should be handled by udev. Skipping execution." ; eend 0
if ! ps x | grep -q /usr/sbin/acpid ; then
if ! [ -r /var/run/dbus/pid ] ; then
einfo "Starting acpi daemon."
- /etc/init.d/acpid start 1>>$DEBUG 2>&1 ; eend $?
+ /etc/init.d/acpid start >>$DEBUG 2>&1 ; eend $?
else
eerror "acpid error: it seems you are running d-bus/hal, but acpid needs to be started before d-bus."
eerror "Solution: please activate acpid via /etc/runlevel.conf"
$(awk 'BEGIN{old="__start"}{if($0==old){exit}else{old=$0;if($4&&$4!="name"){print $0}}}' /proc/partitions)
EOT
}
-check_partitions 1>/dev/null 2>&1 # avoid output "check_partitions:3: read-only file system"
+check_partitions >/dev/null 2>&1 # avoid output "check_partitions:3: read-only file system"
# }}}
# {{{ Enable DMA for all IDE drives now if not disabled
}
# }}}
-# {{{ helper functions
-findfile(){
-FOUND=""
-# search all partitions for a file in the root directory
-for i in /mnt/[sh]d[a-z] /mnt/[sh]d[a-z][1-9] /mnt/[sh]d[a-z][1-9]?*; do
-# See if it's already mounted
- [ -f "$i/$1" ] && { echo "$i/$1"; return 0; }
- if [ -d "$i" ] && mount -r "$i" 2>>$DEBUG; then
- [ -f "$i/$1" ] && FOUND="$i/$1"
- umount -l "$i" 2>>$DEBUG
- [ -n "$FOUND" ] && { echo "$FOUND"; return 0; }
- fi
-done
-return 2
-}
-
-fstype(){
-case "$(file -s $1)" in
- *[Ff][Aa][Tt]*|*[Xx]86*) echo "vfat"; return 0;;
- *[Rr][Ee][Ii][Ss][Ee][Rr]*) echo "reiserfs"; return 0;;
- *[Xx][Ff][Ss]*) echo "xfs"; return 0;;
- *[Ee][Xx][Tt]3*) echo "ext3"; return 0;;
- *[Ee][Xx][Tt]2*) echo "ext2"; return 0;;
- *data*) echo "invalid"; return 0;;
- *) echo "auto"; return 0;;
-esac
-}
-
-# Try to mount this filesystem read-only, without or with encryption
-trymount(){
-# Check if already mounted
-case "$(cat /proc/mounts)" in *\ $2\ *) return 0;; esac
-# Apparently, mount-aes DOES autodetect AES loopback files.
-[ -b "$1" ] && { mount -t auto -o ro "$1" "$2" 2>>$DEBUG; RC="$?"; }
-# We need to mount crypto-loop files with initial rw support
-[ -f "$1" ] && { mount -t auto -o loop,rw "$1" "$2" 2>>$DEBUG; RC="$?"; }
-# Mount succeeded?
-[ "$RC" = "0" ] && return 0
-echo ""
-einfo "Filesystem not autodetected, trying to mount $1 with AES256 encryption."
-a="y"
-while [ "$a" != "n" -a "$a" != "N" ]; do
-# We need to mount crypto-loop files with initial rw support
- mount -t auto -o loop,rw,encryption=AES256 "$1" "$2" && return 0
- echo -n "${RED}Mount failed, retry? [Y/n] ${NORMAL}"
- # Problem with ioctl() from getpasswd()?
- # read a
- read a
-done
-return 1
-}
-# }}}
-
# {{{ CPU-detection
config_cpu(){
if checkbootparam 'nocpu'; then
ewarn "Skipping CPU detection as requested on boot commandline." ; eend 0
+ return 0
+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
- # check module dependencies
- cpufreq_check() {
- if ! [ -e /lib/modules/${KERNEL}/kernel/arch/x86/kernel/cpu/cpufreq ] ; then
- if [ -e /lib64 ] ; then
- [ -e /lib/modules/${KERNEL}/kernel/arch/x86_64/kernel/cpufreq ] || return 1
+ 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
+
+# Virtual Box supports ACPI and laptop-detect would return with '0', so check for it:
+if [ -r /proc/acpi/battery/BAT0/info ] && grep -q 'OEM info:.*innotek' /proc/acpi/battery/BAT0/info ; then
+ einfo 'Virtual Box detected, skipping cpufreq setup.' ; eend 0
+ return 0
+fi
+
+if [ -x /etc/init.d/loadcpufreq ] ; then
+ einfo "Trying to set up cpu frequency scaling:"
+ eindent
+ 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
- [ -e /lib/modules/${KERNEL}/kernel/arch/i386/kernel/cpu/cpufreq -o ! -e /lib/modules/${KERNEL}/kernel/drivers/cpufreq ] || return 1
+ ewarn "Could not find an appropriate kernel module for cpu frequency scaling." ; eend 1
fi
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
-
- # 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 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
- # 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 $RC
- 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
+ rm -f $LOADCPUFREQ
- eoutdent
+ if [ -z "$SKIP_CPU_GOVERNOR" ] ; then
+ einfo "Loading cpufreq_ondemand, setting ondemand governor"
+ RC=0
+ 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
- fi # cpufreq_check
-fi # checkbootparam nocpu
+ eoutdent
+fi
}
# }}}
fi
einfo 'Starting secure shell server in background.'
- /etc/init.d/rmnologin start 1>>$DEBUG 2>>$DEBUG
- /etc/init.d/ssh start 1>>$DEBUG 2>>$DEBUG &
+ /etc/init.d/rmnologin start >>$DEBUG 2>>$DEBUG
+ /etc/init.d/ssh start >>$DEBUG 2>>$DEBUG &
eend $?
eindent
/bin/chown -R "$USER": "$VNCDIR"
fi
fi
+ if checkbootparam 'vnc_connect' ; then
+ VNC_CONNECT=''
+ VNC_CONNECT="$(getbootparam 'vnc_connect' 2>>$DEBUG)"
+ einfo "Bootoption vnc_connect found, will start vnc with connect to $VNC_CONNECT."
+ #store the options in a file
+ VNCDIR="/home/${USER}/.vnc"
+ [ -d "$VNCDIR" ] || mkdir "$VNCDIR"
+ echo " --connect $VNC_CONNECT " >> $VNCDIR/options
+ fi
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=""
- MYHOMEDIR=""
- if [ -n "$HOMEDIR" ]; then
- einfo "Bootoption home detected." && eend 0
- case "$HOMEDIR" in
- /dev/*)
- MYHOMEDEVICE="${HOMEDIR##/dev/}"
- MYHOMEDEVICE="/dev/${MYHOMEDEVICE%%/*}"
- MYHOMEMOUNTPOINT="/mnt/${MYHOMEDEVICE##/dev/}"
- MYHOMEDIR="/mnt/${HOMEDIR##/dev/}"
- ;;
- /mnt/*)
- MYHOMEDEVICE="${HOMEDIR##/mnt/}"
- MYHOMEDEVICE="/dev/${MYHOMEDEVICE%%/*}"
- MYHOMEMOUNTPOINT="/mnt/${MYHOMEDEVICE##/dev/}"
- MYHOMEDIR="$HOMEDIR"
- ;;
- [Aa][Uu][Tt][Oo]|[Ss][Cc][Aa][Nn]|[Ff][Ii][Nn][Dd])
- MYHOMEDIR="$(findfile grml.img)"
- MYHOMEDEVICE="${MYHOMEDIR##/mnt/}"
- MYHOMEDEVICE="/dev/${MYHOMEDEVICE%%/*}"
- MYHOMEMOUNTPOINT="/mnt/${MYHOMEDEVICE##/dev/}"
- ;;
- *)
- eerror "Invalid home= option '$HOMEDIR' specified (must start with /dev/ or /mnt/ or 'scan')." ; eend 1
- eerror "Option ignored." ; eend 1
- ;;
- esac
- fi # -n $HOMEDIR
-
- if [ -n "$MYHOMEDIR" ]; then
- if trymount "$MYHOMEDEVICE" "$MYHOMEMOUNTPOINT"; then
- [ -f "$MYHOMEMOUNTPOINT/grml.img" ] && MYHOMEDIR="$MYHOMEMOUNTPOINT/grml.img"
- while read device mountpoint fs relax; do
- case "$mountpoint" in *$MYHOMEMOUNTPOINT*)
- case "$fs" in
- *[Nn][Tt][Ff][Ss]*)
- umount "$MYHOMEMOUNTPOINT"; eerror "Error: will not mount NTFS filesystem on $MYHOMEDEVICE read/write!" ; eend 1
- break
- ;;
- *[Ff][Aa][Tt]*)
- # Note: This currently won't work with encrypted partitions
- umount "$MYHOMEMOUNTPOINT"; mount -t vfat -o rw,uid=grml,gid=grml,umask=002 "$MYHOMEDEVICE" "$MYHOMEMOUNTPOINT"
- if [ ! -f "$MYHOMEDIR" ]; then
- ewarn "WARNING: FAT32 is not a good filesystem option for /home/grml (missing socket/symlink support)."
- ewarn "WARNING: Better use an ext2 loopback file on this device, and boot with home=$MYHOMEDEVICE/grml.img."
- fi
- ;;
- esac
-
- if mount -o remount,rw "$MYHOMEMOUNTPOINT"; then
- einfo "Mounting ${WHITE}$MYHOMEDIR${NORMAL} as ${WHITE}/home/grml${NORMAL}."
- if [ -f "$MYHOMEDIR" ]; then
- # It's a loopback file, mount it over the /home/grml directory
- trymount "$MYHOMEDIR" /home/grml
- RC="$?"
- [ "$RC" = "0" ] && ERROR="$(mount -o remount,rw /home/grml 2>&1)"
- RC="$?"
- else
- # Do a --bind mount
- ERROR="$(mount --bind "$MYHOMEDIR" /home/grml 2>&1)"
- RC="$?"
- fi # -f $MYHOMEDIR
-
- [ "$RC" = "0" ] && eend 0 || ( eerror "${ERROR}" ; eend 1 )
-
- fi # mount -o remount,rw,...
- break
- ;;
- esac # case "$mountpoint" in *$MYHOMEMOUNTPOINT*)
- done <<EOT
- $(cat /proc/mounts)
-EOT
- fi # if trymount ...
- fi # -n $MYHOMEDIR
-fi # checkbootparam home
+ ewarn "The \"home\" bootoption is deprecated, please use the persistency feature instead."; eend 1
+fi
}
# }}}
# {{{ Sound
-
-config_mixer(){
-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
- ewarn "No soundcard present, skipping mixer settings therefore." ; eend 0
- return
- fi
-
- if checkbootparam 'vol' ; then
- VOL="$(getbootparam 'vol' 2>>$DEBUG)"
- if [ -z "$VOL" ] ; then
- eerror "Bootoption vol found but no volume level/parameter given. Using defaults." ; eend 1
- VOL='75' # default
- fi
- else
- VOL='75' # default
- fi
-
- if checkbootparam 'nosound' ; then
- einfo "Muting sound devices on request."
-
- 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"
- eoutdent
- fi
- eend $RC
- elif [ -z "$INSTALLED" ]; then
- einfo "Setting mixer volumes to level ${WHITE}${VOL}${NORMAL}."
-
- fix_ibm_sound ${VOL}
-
- # by default assume '0' as volume for microphone:
- if checkbootparam 'micvol' ; then
- MICVOL="$(getbootparam 'micvol' 2>>$DEBUG)"
- else
- MICVOL=0
- fi
-
- # finally set the volumes:
- 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
+config_mixer () {
+ 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
+ ewarn "No soundcard present, skipping mixer settings therefore."
+ eend 0
+ return
fi
- eend $RC
- fi
+ for card in $(cat /proc/asound/cards| grep -e '^\s*[0-9]' | awk '{print $1}') ; do
+ einfo "Configuring soundcard $(cat /proc/asound/cards| grep -e "$card" | awk -F\[ '{print $2}' | awk '{print $1}')"
+ eindent
-fi
-}
+ if checkbootparam 'vol' ; then
+ VOL="$(getbootparam 'vol' 2>>$DEBUG)"
+ if [ -z "$VOL" ] ; then
+ eerror "Bootoption vol found but no volume level/parameter given. Using defaults (75%)."
+ VOL='75'
+ eend 1
+ fi
+ else
+ VOL='75'
+ fi
-# on some IBM notebooks the front control has to be toggled
-fix_ibm_sound() {
- if [ -z $1 ] ; then
- return
- fi
+ if checkbootparam 'nosound' ; then
+ einfo "Muting sound devices on request."
+ ERROR=$(amixer -q set Master mute)
+ RC=$?
+ if [ -n "$ERROR" ] ; then
+ eindent
+ eerror "Problem muting sound devices: $ERROR"
+ eoutdent
+ fi
+ eend $RC
+ elif [ -z "$INSTALLED" ] ; then
+ einfo "Setting mixer volumes to level ${WHITE}${VOL}${NORMAL}."
- VOL=${1}
+ if checkbootparam 'micvol' ; then
+ MICVOL="$(getbootparam 'micvol' 2>>$DEBUG)"
+ else
+ MICVOL=0
+ fi
- 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
+ for CONTROL in Master PCM ; do
+ if amixer -q | grep -q "Simple mixer control.*$CONTROL" ; then
+ amixer -q set "${CONTROL}" "${VOL}"%
+ eend $?
+ fi
+ done
+
+ if [ ${MICVOL} -ne 0 ] ; then
+ einfo "Setting microphone to ${WHITE}${MICVOL}${NORMAL}."
+ amixer -q set "Mic" $MICVOL &> /dev/null
+ eend $?
+ fi
+ fi # checkbootparam 'nosound'
+ eoutdent
+ done
+ fi
}
# }}}
eerror "No syslog daemon found." ; eend 1
else
einfo "Starting $SYSLOGD in background."
- /etc/init.d/$SYSLOGD start 1>>$DEBUG &
+ /etc/init.d/$SYSLOGD start >>$DEBUG &
eend 0
fi
fi
eerror "No mouse found - not starting GPM." ; eend 1
else
einfo "Starting gpm in background."
- /etc/init.d/gpm start 1>>$DEBUG &
- # ( while [ ! -e /dev/psaux ]; do sleep 5; done; /etc/init.d/gpm start 1>>$DEBUG ) &
+ /etc/init.d/gpm start >>$DEBUG &
+ # ( while [ ! -e /dev/psaux ]; do sleep 5; done; /etc/init.d/gpm start >>$DEBUG ) &
eend 0
fi
fi
SERVICENL=$(echo "$SERVICE" | sed 's/,/ /g')
einfo "Starting service(s) ${SERVICENL} in background."
for service in $(echo -e $SERVICELIST) ; do
- /etc/init.d/${service} start 1>>$DEBUG &
+ /etc/init.d/${service} start >>$DEBUG &
done
[ "$?" == "0" ] ; eend $?
fi
if get_remote_file ${CONFIG} ${SCRIPTFILE} ; then
chmod +x ${SCRIPTFILE}
- einfo "Running ${WHITE}${SCRIPTFILE}${NORMAL}:" && ${SCRIPTFILE} ; eend $?
+ einfo "Running ${WHITE}${SCRIPTFILE}${NORMAL}:" && NETSCRIPT=${CONFIG} ${SCRIPTFILE} ; eend $?
fi
fi
# make sure we start X only if startx is used *before* a nostartx option
# so it's possible to disable automatic X startup using nostart
if checkbootparam 'startx' && ! echo "$CMDLINE" | grep -q 'startx.*nostartx' ; then
- if [ -x $(which X) ] ; then
+ if [ -x "$(which X)" ] ; then
if [ -z "$INSTALLED" ] ; then
WINDOWMANAGER="$(getbootparam 'startx' 2>>$DEBUG)"
if [ -z "$WINDOWMANAGER" ] ; then
else
einfo "Window manager ${WHITE}${WINDOWMANAGER}${NORMAL} found as bootoption." && eend 0
fi
- einfo "Changing to runlevel 5 for starting grml-x ${WINDOWMANAGER}. Just exit X windows system to get full featured consoles."
+ einfo "Setting up and invoking grml-x ${WINDOWMANAGER}. Just exit X windows system to get full featured consoles."
config_userfstab || fstabuser='grml'
cat>|/etc/init.d/xstartup<<EOF
#!/bin/sh
-# su - $fstabuser -c 'grml-x "$WINDOWMANAGER"'
-sudo -u $fstabuser -i /usr/bin/grml-x $WINDOWMANAGER 1>>$DEBUG
+su $fstabuser -c "/usr/bin/grml-x $WINDOWMANAGER"
EOF
chmod 755 /etc/init.d/xstartup
# 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
+ sed -i 's|^6:.*|6:2345:respawn:/bin/zsh --login -c "/etc/init.d/xstartup ; /usr/bin/zsh-login" >/dev/tty6 2>\&1 </dev/tty6|' /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
+ echo '6:2345:respawn:/bin/zsh --login -c "/etc/init.d/xstartup ; /usr/bin/zsh-login" >/dev/tty6 2>&1 < /dev/tty6' >> /etc/inittab
fi
/sbin/telinit q ; eend $?
# We do need the following fix so floppy disk is available to blkid in any case :-/
if [ -r /dev/fd0 ] ; then
einfo "Floppy device detected. Trying to access floppy disk."
- if timeout 4 dd if=/dev/fd0 of=/dev/null bs=512 count=1 1>>$DEBUG 2>&1 ; then
- blkid /dev/fd0 1>>$DEBUG 2>&1
+ if timeout 4 dd if=/dev/fd0 of=/dev/null bs=512 count=1 >>$DEBUG 2>&1 ; then
+ blkid /dev/fd0 >>$DEBUG 2>&1
fi
fi
DCSDEVICE=$(blkid -t LABEL=GRMLCFG | head -1 | awk -F: '{print $1}')
ewarn "$DCSDEVICE already mounted on $DCSDIR"; eend 0
else
[ -d $DCSMP ] || mkdir $DCSMP
- umount $DCSMP 1>>$DEBUG 2>&1 # make sure it is not mounted
+ umount $DCSMP >>$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 $DCSMP (readonly)." ; eend 0
# {{{ /cdrom/.*-options
config_debs(){
if checkbootparam 'debs' ; then
+ iszsh && setopt localoptions shwordsplit
DEBS="$(getbootparam 'debs' 2>>$DEBUG)"
if ! echo $DEBS | grep -q '/'; then
# backwards compatibility: if no path is given get debs from debs/
)
einfo "Starting distcc for network ${NET}, listening on ${IP}."
- /etc/init.d/distcc start 1>/dev/null ; eend $?
+ /etc/init.d/distcc start >/dev/null ; eend $?
eoutdent
else
eerror "No ip address for $INTERFACE found. distcc can not be used without it." ; eend 1
for line in $(dmraid $1 ; echo errcode:$?); do
case $line in
+ *'no block devices found'*)
+ einfo "No block devices found" ; eend 0
+ break
+ ;;
*'no raid disks'*)
einfo "No active dmraid devices found" ; eend 0
break
if ! [ -x /sbin/lvm -a -x /sbin/lvdisplay ] || ! [ -x /etc/init.d/lvm2 -o -x /etc/init.d/lvm ] ; 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
+ if lvdisplay 2>&1 | grep -v 'No volume groups found' >/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."
# {{{ debnet: setup network based on an existing one found on a partition
config_debnet(){
if checkbootparam 'debnet' ; then
- iszsh && setopt shwordsplit
+ iszsh && setopt localoptions shwordsplit
DEVICES="$(< /proc/partitions tail -n +3 | awk '{print "/dev/"$4}' | tr "\n" " ")"
DEVICES="$DEVICES $(ls /dev/mapper/*)"
FOUND_DEBNET=""
einfo "Bootoption 'debnet' found. Searching for Debian network configuration: "
eindent
- if ! mount | grep '/mnt ' 1>/dev/null 2>&1 ; then
+ if ! mount | grep '/mnt ' >/dev/null 2>&1 ; then
for i in $DEVICES; do
if mount -o ro -t auto "$i" /mnt >/dev/null 2>&1; then
einfo "Scanning on $i"
if [ -n "$FOUND_DEBNET" ]; then
einfo "Stopping network."
- pump -k 1>/dev/null 2>&1
- /etc/init.d/networking stop 1>/dev/null 2>&1 ; eend $?
+ pump -k >/dev/null 2>&1
+ /etc/init.d/networking stop >/dev/null 2>&1 ; eend $?
einfo "Copying Debian network configuration from $FOUND_DEBNET to running system."
rm -rf /etc/network/run
cp -a /mnt/etc/network /etc
}
# }}}
-# {{{ check for broken ipw3945 driver which causes problems (especially on hd install)
-config_ipw3945() {
- if grep -q ipw3945 /proc/modules ; then
- if ! iwconfig 2>/dev/null| grep -qe 'IEEE 802' -qe 'unassociated' ; then
- ewarn "Broken ipw3945 network interface found, reloading module."
- rmmod ipw3945
- modprobe ipw3945
- eend $?
- fi
- fi
-}
-# }}}
-
# {{{ disable console blanking
config_blanking(){
if checkbootparam 'noblank' ; then