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 [ -n "$CHARMAP" ] ; then
einfo "Running consolechars for ${CHARMAP}"
- for vc in `seq 0 ${NUM_CONSOLES}` ; do
+ RC=0
+ for vc in $(seq 0 ${NUM_CONSOLES}) ; do
consolechars --tty=/dev/tty${vc} -m ${CHARMAP} ; RC=$?
done
- [ -n "$CUR_CONSOLE" ] && chvt $CUR_CONSOLE
+ if [ -n "$CUR_CONSOLE" ] ; then
+ [ "$CUR_CONSOLE" != "serial" ] && chvt $CUR_CONSOLE
+ fi
eend $RC
fi
else
if [ -n "$CONSOLEFONT" ] ; then
einfo "Running consolechars using ${CONSOLEFONT}"
- for vc in `seq 0 ${NUM_CONSOLES}` ; do
+ RC=0
+ for vc in $(seq 0 ${NUM_CONSOLES}) ; do
consolechars --tty=/dev/tty${vc} -f $CONSOLEFONT ; RC=$?
done
- [ -n "$CUR_CONSOLE" ] && chvt $CUR_CONSOLE
- eend $?
+ if [ -n "$CUR_CONSOLE" ] ; then
+ [ "$CUR_CONSOLE" != "serial" ] && chvt $CUR_CONSOLE
+ fi
+ eend $RC
fi
fi
# 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
-
- 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, activating console login."
+ sed -i 's/^#grmlserial#//' /etc/inittab
+ /sbin/telinit q
+ 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
. /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
+ modprobe "$MODULE" >>$DEBUG || modprobe "$MODULE_FALLBACK" >>$DEBUG
RC=$?
- if [[ $RC == 0 ]]; then
+ if [[ "$RC" == 0 ]]; then
eend 0
else
SKIP_CPU_GOVERNOR=1
- eend $1
+ eend $RC
fi
else
- ewarn "Could not detect an appropriate CPU for use with cpu frequency scaling - skipping." && eend 1
+ 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"
+ 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
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
# {{{ 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
}
# }}}
VOL=${1}
if [ -x /usr/bin/amixer ] ; then
- if amixer -q get Front 1>/dev/null 2>>$DEBUG ; then
+ if amixer -q get Front >/dev/null 2>>$DEBUG ; then
amixer -q set Front unmute &>/dev/null
amixer -q set Front ${VOL}% &>/dev/null
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
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
)
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."
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