# Authors: grml-team (grml.org), (c) Klaus Knopper <knopper@knopper.net>, (c) Michael Prokop <mika@grml.org>
# Bug-Reports: see http://grml.org/bugs/
# License: This file is licensed under the GPL v2.
-# Latest change: Sam Mai 17 22:04:08 CEST 2008 [mika]
################################################################################
# {{{ path, variables, signals, umask, zsh
# Reread boot command line; echo last parameter's argument or return false.
getbootparam(){
stringinstring " $1=" "$CMDLINE" || return 1
- result="${CMDLINE##*$1=}"
+ result="${CMDLINE##* $1=}"
result="${result%%[ ]*}"
echo "$result"
return 0
checkgrmlusb(){
grep -q usb /etc/grml_version 2>>$DEBUG && return 0 || return 1
}
+
+# execute flite only if it's present
+flitewrapper() {
+ [ -x /usr/bin/flite ] && flite -o play -t "$*"
+}
### }}}
# {{{ filesystems (proc, pts, sys) and fixes
if [ -n "$BOOTDEBUG" ]; then
einfo "Starting intermediate shell stage $stage as requested by \"debug\" option."
if [ grep -q "debug=noscreen" "$CMDLINE" ] ; then
+ einfo "Notice that the shell does not provide job handling: ctrl-z, bg and fg won't work!"
+ einfo "Just exit the shell to continue boot process..."
/bin/zsh
else
eindent
# set default to 'en' in live-cd mode if $LANGUAGE is not yet set:
if [ -z "$INSTALLED" ] ; then
- [ -n "$LANGUAGE" ] || LANGUAGE='en-utf8'
+ [ -n "$LANGUAGE" ] || LANGUAGE='us'
fi
# if bootoption lang is used update /etc/default/locale, otherwise *not*!
- if [ -n "$BOOT_LANGUAGE" ] ; then
- [ -x /usr/sbin/grml-setlang ] && /usr/sbin/grml-setlang "$LANGUAGE"
+ if [ -n "$BOOT_LANGUAGE" -a -x /usr/sbin/grml-setlang ] ; then
+ if checkgrmlsmall ; then
+ /usr/sbin/grml-setlang "POSIX"
+ else
+ /usr/sbin/grml-setlang "$LANGUAGE"
+ fi
fi
# set console font
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"
+ # The default hardware clock timezone is stated as representing local time.
+ UTC="--localtime"
+ grep -q "^UTC=" /etc/default/rcS || echo "UTC=no" >> /etc/default/rcS
+ checkbootparam utc >>$DEBUG 2>&1 && sed -i "s|^UTC=.*$|UTC=yes|" /etc/default/rcS
+ checkbootparam gmt >>$DEBUG 2>&1 && sed -i "s|^UTC=.*$|UTC=yes|" /etc/default/rcS
+ checkbootparam localtime >>$DEBUG 2>&1 && sed -i "s|^UTC=.*$|UTC=no|" /etc/default/rcS
+ grep -q -i "^UTC=yes" /etc/default/rcS && UTC="-u"
# hwclock uses the TZ variable
- [ -r /etc/timezone ] && TZ=$(cat /etc/timezone)
- [ -n "$TZ" ] || TZ=Europe/Vienna
+ KTZ="$(getbootparam tz 2>>$DEBUG)"
+ [ -z "$KTZ" ] && [ -r /etc/timezone ] && KTZ=$(cat /etc/timezone)
+ if [ ! -f "/usr/share/zoneinfo/$KTZ" ] ; then
+ ewarn "Warning: unknown timezone $KTZ" ; eend 1
+ KTZ="Europe/Vienna"
+ ewarn "Falling back to timezone $KTZ" ; eend 0
+ fi
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
+ ewarn "Warning: realtime clock not available, trying to execute hwclock anyway." ; eend 0
+ fi
+
+ ERROR=$(TZ="$KTZ" hwclock $UTC -s 2>&1 | head -1) ; RC=$?
+ if [ -n "$ERROR" ] ; then
+ eindent
+ ERROR=$(TZ="$KTZ" hwclock $UTC -s --directisa 2>&1 | head -1)
+ if [ -n "$ERROR" ] ; then
+ eerror "Problem running hwclock: $ERROR" ; eend 1
+ fi
+ eoutdent
fi
+
fi
}
# }}}
if [ -z "$INSTALLED" ]; then
KTZ="$(getbootparam tz 2>>$DEBUG)"
if [ -n "$KTZ" ] ; then
- einfo "Setting timezone."
- [ -f "/usr/share/zoneinfo/$KTZ" ] && TZ="$KTZ"
- rm -f /etc/localtime
- cp "/usr/share/zoneinfo/$TZ" /etc/localtime ; eend $?
+ if [ ! -f "/usr/share/zoneinfo/$KTZ" ]
+ then
+ ewarn "Warning: unknown timezone $KTZ"; eend 0
+ else
+ einfo "Setting timezone."
+ # update debconf
+ area=$(echo $KTZ | cut -d '/' -f1)
+ zone=$(echo $KTZ | cut -d '/' -f2)
+ echo "tzdata tzdata/Areas select $area" | debconf-set-selections
+ echo "tzdata tzdata/Zones/$area select $zone" | debconf-set-selections
+ # update files
+ echo $KTZ > /etc/timezone
+ rm -f /etc/localtime
+ cp "/usr/share/zoneinfo/$KTZ" /etc/localtime ; eend $?
+ fi
fi
fi
}
# skip startup of w3m {{{
config_fast(){
-if checkbootparam "fast"; then
- ewarn "Bootoption fast detected. Skipping startup of w3m."
+if checkbootparam "fast "; then
+ ewarn "Bootoption fast detected. Skipping startup of grml-quickconfig."
sed -i 's#^1:.*#1:12345:respawn:/usr/bin/openvt -f -c 1 -w -- /bin/zsh#' /etc/inittab
/sbin/telinit q ; eend $?
fi
if [ -z "$INSTALLED" ]; then
einfo "Bootoption blacklist found."
BLACK="$(getbootparam 'blacklist' 2>>$DEBUG)"
+ BLACKLIST_FILE='/etc/modprobe.d/grml.conf'
if [ -n "$BLACK" ] ; then
for module in $(echo ${BLACK//,/ }) ; do
- einfo "Blacklisting module ${module} via /etc/modprobe.d/grml."
- echo "# begin entry generated by config_blacklist of grml-autoconfig" >> /etc/modprobe.d/grml
- echo "blacklist $module" >> /etc/modprobe.d/grml
- echo "alias $module off" >> /etc/modprobe.d/grml
- echo "# end entry generated by config_blacklist of grml-autoconfig" >> /etc/modprobe.d/grml ; eend $?
+ einfo "Blacklisting module ${module} via ${BLACKLIST_FILE}."
+ echo "# begin entry generated by config_blacklist of grml-autoconfig" >> "$BLACKLIST_FILE"
+ echo "blacklist $module" >> "$BLACKLIST_FILE"
+ echo "alias $module off" >> "$BLACKLIST_FILE"
+ echo "# end entry generated by config_blacklist of grml-autoconfig" >> "$BLACKLIST_FILE" ; eend $?
done
else
eerror "No given module for blacklist found. Blacklisting will not work therefore."
# {{{ run software synthesizer via speakup
config_swspeak(){
-if checkbootparam swspeak ; then
- if [ -d /proc/speakup/ ] ; then
- einfo "Bootoption swspeak found. Kernel supports speakup." ; eend 0
- eindent
- if [ -x /etc/init.d/speech-dispatcher ] ; then
- einfo "Starting speech-dispatcher."
- /etc/init.d/speech-dispatcher start 1>>DEBUG ; eend $?
- einfo "Activating sftsyn in Kernel."
- echo sftsyn >/proc/speakup/synth_name ; eend $?
- einfo "Just run swspeak if you want to use software synthesizer via speakup."
- flite -o play -t "Finished activating software speakup. Just run swspeak when booting finished."
- else
- eerror "speech-dispatcher not available. swspeak will not work without it." ; eend 1
- flite -o play -t "speech-dispatcher not available. speakup will not work without it."
+ if checkbootparam swspeak ; then
+ einfo "Bootoption swspeak found."
+
+ if [ ! -d /proc/speakup/ ] && ! grep -q speakup_soft /proc/modules ; then
+ ewarn "Kernel does not support software speakup - trying to load kernel module:" ; eend 0
+ eindent
+ einfo "Loading speakup_soft"
+ if modprobe speakup_soft ; then
+ eend 0
+ else
+ flitewrapper "Fatal error setting up software speakup"
+ eend 1
+ return 1
+ fi
+ eoutdent
+ fi
+
+ if [ -d /proc/speakup/ ] || grep -q speakup_soft /proc/modules ; then
+ einfo "Kernel supports speakup." ; eend 0
+ eindent
+ einfo "Just run swspeak if you want to use software synthesizer via speakup."
+ flitewrapper "Finished activating software speakup. Just run swspeak when booting finished."
+ eoutdent
+ else
+ eerror "Kernel does not seem to support speakup. Skipping swspeak." ; eend 1
+ flitewrapper "Kernel does not seem to support speakup. Sorry."
+ fi
+ fi
+}
+# }}}
+
+# {{{ support hardware synthesizer via speakup
+config_hwspeak(){
+ if checkbootparam speakup.synth ; then
+ einfo "Bootoption speakup.synth found."
+ eindent
+
+ module="$(getbootparam speakup.synth 2>>$DEBUG)"
+ if [ -z "$module" ] ; then
+ eerror "Sorry, no speakup module specified for bootoption speakup.synth."
+ flitewrapper "Sorry, no speakup module specified for bootoption speakup.synth."
+ else
+ einfo "Trying to load $module"
+ modprobe "speakup_${module}"
+ eend $?
+ fi
+
+ if [ -d /proc/speakup/ ] || grep -q speakup /proc/modules ; then
+ einfo "Kernel should support speakup now." ; eend 0
+ flitewrapper "Kernel should support speakup now."
+ else
+ eerror "Kernel or hardware do not seem to support speakup. Skipping hwspeak." ; eend 1
+ flitewrapper "Kernel or hardware do not seem to support speakup. Sorry."
+ fi
+
+ eoutdent
+
+ # hwspeak:
+ elif checkbootparam hwspeak ; then
+ einfo "Bootoption hwspeak found."
+
+ if [ ! -d /proc/speakup/ ] && ! grep -q speakup /proc/modules ; then
+ ewarn "Kernel does not support hardware speakup - trying to load kernel modules:" ; eend 0
+ eindent
+ if ! [ -d "/lib/modules/${KERNEL}/extra/speakup/" ] ; then
+ eerror "Kernel does not provide speakup modules, sorry." ; eend 1
+ else
+ for module in $(find "/lib/modules/${KERNEL}/extra/speakup/" -name \*.ko | \
+ sed 's#.*speakup/##g ; s#.ko$##g' | \
+ grep -ve speakup_soft -ve speakup_dummy | sort -u) ; do
+ einfo "Trying to load $module"
+ modprobe $module
+ eend $?
+ done
+ fi
+ eoutdent
+ fi
+
+ if [ -d /proc/speakup/ ] || grep -q speakup /proc/modules ; then
+ einfo "Kernel should support speakup now." ; eend 0
+ flitewrapper "Kernel should support speakup now."
+ else
+ eerror "Kernel or hardware do not seem to support speakup. Skipping hwspeak." ; eend 1
+ flitewrapper "Kernel or hardware do not seem to support speakup. Sorry."
+ fi
fi
- eoutdent
- else
- eerror "Kernel does not seem to support speakup. Skipping swspeak." ; eend 1
- flite -o play -t "Kernel does not seem to support speakup. Sorry."
- fi
-fi
}
# }}}
else
# 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
+ 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
+ else
+ [ -e /lib/modules/${KERNEL}/kernel/arch/i386/kernel/cpu/cpufreq -o ! -e /lib/modules/${KERNEL}/kernel/drivers/cpufreq ] || return 1
+ fi
fi
}
# {{{ autostart of ssh
config_ssh(){
if checkbootparam ssh ; then
- SSH_PASSWD="$(getbootparam 'ssh' 2>>$DEBUG)"
- einfo "Bootoption passwd found."
- if [ -n "$SSH_PASSWD" ] ; then
- echo "grml:$SSH_PASSWD" | chpasswd -m
- 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 &
- eend 0
- else
- eerror "No given password for ssh found. Autostart of SSH will not work." ; eend 1
- fi
- eindent
- ewarn "Warning: please change the password for user grml set via bootparameter as soon as possible!"
- eoutdent
+ SSH_PASSWD=''
+ SSH_PASSWD="$(getbootparam 'ssh' 2>>$DEBUG)"
+ einfo "Bootoption ssh found, trying to set password for user grml."
+ eindent
+ if [ -z "$SSH_PASSWD" ] ; then
+ if [ -x /usr/bin/apg ] ; then
+ SSH_PASSWD="$(apg -M NL -a 0 -m 8 -x 12 -n 1)"
+ elif [ -x /usr/bin/gpw ] ; then
+ SSH_PASSWD="$(gpw 1)"
+ elif [ -x /usr/bin/pwgen ] ; then
+ SSH_PASSWD="$(pwgen -1 8)"
+ elif [ -x /usr/bin/hexdump ] ; then
+ SSH_PASSWD="$(dd if=/dev/urandom bs=14 count=1 2>/dev/null | hexdump | awk '{print $3 $4}')"
+ elif [ -n "$RANDOM" ] ; then
+ SSH_PASSWD="grml${RANDOM}"
+ else
+ SSH_PASSWD=''
+ eerror "Empty passphrase and neither pwgen nor hexdump nor \$RANDOM found. Skipping."
+ eend 1
+ fi
+
+ if [ -n "$SSH_PASSWD" ] ; then
+ ewarn "No given password for ssh found. Using random password: $SSH_PASSWD" ; eend 0
+ fi
+ fi
+ eoutdent
+
+ # finally check if we have a password we can use:
+ if [ -n "$SSH_PASSWD" ] ; then
+ # chpasswd sucks, seriously.
+ if chpasswd --help 2>&1 | grep -q -- '-m,' ; then
+ echo "grml:$SSH_PASSWD" | chpasswd -m
+ else
+ echo "grml:$SSH_PASSWD" | chpasswd
+ 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 &
+ eend $?
+
+ eindent
+ ewarn 'Warning: please change the password for user grml as soon as possible!'
+ eoutdent
fi
}
# }}}
if checkbootparam "nogpm"; then
ewarn "Not starting GPM as requested on boot commandline." ; eend 0
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 ) &
- eend 0
+ if ! [ -r /dev/input/mice ] ; then
+ 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 ) &
+ eend 0
+ fi
fi
}
# }}}
config_blindsound(){
if checkbootparam "blind" ; then
beep
- flite -o play -t "welcome to the gremel system"
+ flitewrapper "welcome to the gremel system"
fi
}
# }}}
# {{{ welcome sound
config_welcome(){
if checkbootparam welcome ; then
- flite -o play -t "welcome to the gremel system"
+ flitewrapper "welcome to the gremel system"
fi
}
# }}}
# {{{ start X window system via grml-x
config_x_startup(){
-if checkbootparam startx ; then
+# 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 && ! grep -q 'startx.*nostartx' "$CMDLINE" ; then
if [ -x /usr/X11R6/bin/X ] ; then
if [ -z "$INSTALLED" ] ; then
WINDOWMANAGER="$(getbootparam 'startx' 2>>$DEBUG)"
fi
else
- eerror "We are not running from CD - startx will not work, skipping it.
- Please use something like xdm, gdm or kdm for starting X on a harddisk system!" ; eend 1
+ eerror "We are not running from CD - startx will not work, skipping it."
+ eerror " -> Please use something like xdm, gdm or kdm for starting X on a harddisk system!" ; eend 1
fi
else
- eerror "/usr/X11R6/bin/X is not present on this grml flavour.
- Boot parameter startx does not work therefore." ; eend 1
+ eerror "/usr/X11R6/bin/X is not present on this grml flavour."
+ eerror " -> Boot parameter startx does not work therefore." ; eend 1
fi
fi
}
fi
}
+config_unpack(){
+MOUNTDEVICE="$1"
+MESSAGE="$2"
+
+if [ ! -b "$MOUNTDEVICE" ] ; then
+ return;
+fi
+
+
+[ -d /mnt/grml ] || mkdir /mnt/grml
+umount /mnt/grml 1>>$DEBUG 2>&1 # make sure it is not mounted
+mount -o ro -t auto $MOUNTDEVICE /mnt/grml ; RC="$?"
+if [[ $RC == 0 ]]; then
+ einfo "Successfully mounted $MOUNTDEVICE $MESSAGE to /mnt/grml (readonly)." ; eend 0
+ eindent
+ CONFIG=''
+ CONFIG="$(/bin/ls -1d /mnt/grml/[Cc][Oo][Nn][Ff][Ii][Gg].[Tt][Bb][Zz] 2>>$DEBUG)"
+ if checkbootparam config ; then
+ FILENAME="$(getbootparam 'config' 2>>$DEBUG)"
+ if [ -e /mnt/grml/"${FILENAME}" ] ; then
+ einfo "Using /mnt/grml/$FILENAME instead of config.tbz"
+ CONFIG="/mnt/grml/${FILENAME}"
+ fi
+ else
+ [ -n "$CONFIG" ] && FILENAME="$(basename $CONFIG)" || FILENAME="config.tbz"
+ fi
+
+ if [ -n "$CONFIG" ]; then
+ einfo "Found file ${WHITE}${CONFIG}${NORMAL} - trying to extract it."
+ cd /
+ unp $CONFIG $EXTRACTOPTIONS ; eend $?
+ else
+ ewarn "Sorry, could not find file ${FILENAME} on device ${MOUNTDEVICE} ${MESSAGE}." ; eend 1
+ fi
+
+ SCRIPT=''
+ SCRIPT="$(/bin/ls -1d /mnt/grml/[Gg][Rr][Mm][Ll].[Ss][Hh] 2>>$DEBUG)"
+ if [ -n "$SCRIPT" ]; then
+ einfo "Found script ${WHITE}${SCRIPT}${NORMAL} - trying to execute it."
+ $SCRIPT ; eend $?
+ fi
+ eoutdent
+ else
+ einfo "Could not mount $MOUNTDEVICE to /mnt/grml - sorry." ; eend 1
+fi # mount $MOUNTDEVICE
+
+grep -q '/mnt/grml' /proc/mounts && umount /mnt/grml
+
+}
+
config_automount(){
if checkbootparam noautoconfig || checkbootparam forensic ; then
ewarn "Skipping running automount of device(s) labeled GRMLCFG as requested." ; eend 0
else
if [ -z "$INSTALLED" ] ; then
- einfo "Searching for device(s) labeled with GRMLCFG." ; eend 0
- eindent
- [ -d /mnt/grml ] || mkdir /mnt/grml
- umount /mnt/grml 1>>$DEBUG 2>&1 # make sure it is not mounted
-# 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. (Disable this via boot option: noautoconfig)"
-# dd if=/dev/fd0 of=/dev/null bs=512 count=1 1>>$DEBUG 2>&1
- 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
+ einfo "Searching for device(s) labeled with GRMLCFG. (Disable this via boot option: noautoconfig)" ; eend 0
+ eindent
+ # 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
+ fi
fi
+ DEVICE=$(blkid -t LABEL=GRMLCFG | head -1 | awk -F: '{print $1}')
+ config_unpack "$DEVICE" "labeled GRMCFG"
fi
- DEVICE=$(blkid -t LABEL=GRMLCFG | head -1 | awk -F: '{print $1}')
- [ -n "$DEVICE" ] && mount -t auto -o ro $DEVICE /mnt/grml ; RC="$?"
- if [[ $RC == 0 ]]; then
- einfo "Mounting device $DEVICE labeled GRMLCFG succeeded." ; eend 0
-
- CONFIG=''
- CONFIG="$(/bin/ls -1d /mnt/grml/[Cc][Oo][Nn][Ff][Ii][Gg].[Tt][Bb][Zz] 2>>$DEBUG)"
- if [ -n "$CONFIG" ]; then
- einfo "Found file ${WHITE}${CONFIG}${NORMAL} - trying to extract it."
- cd /
- unp $CONFIG $EXTRACTOPTIONS ; eend $?
- else
- ewarn "Sorry, could not find file config.tbz on device with label GRMLCFG." ; eend 1
- fi
-
- SCRIPT=''
- SCRIPT="$(/bin/ls -1d /mnt/grml/[Gg][Rr][Mm][Ll].[Ss][Hh] 2>>$DEBUG)"
- if [ -n "$SCRIPT" ]; then
- einfo "Found script ${WHITE}${SCRIPT}${NORMAL} - trying to execute it."
- $SCRIPT ; eend $?
- fi
- grep -q '/mnt/grml' /proc/mounts && umount /mnt/grml
- else
- ewarn "No devices with label GRMLCFG found." ; eend 0
- fi
- eoutdent
- fi
fi
}
if checkbootparam myconfig ; then
MOUNTDEVICE="$(getbootparam 'myconfig' 2>>$DEBUG)"
if [ -n "$MOUNTDEVICE" ]; then
- if checkbootparam file ; then
- FILENAME="$(getbootparam 'file' 2>>$DEBUG)"
- [ -n "$FILENAME" ] || FILENAME='config.tbz'
- fi
- [ -d /mnt/grml ] || mkdir /mnt/grml
- umount /mnt/grml 1>>$DEBUG 2>&1 # make sure it is not mounted
- mount -o ro -t auto $MOUNTDEVICE /mnt/grml ; RC="$?"
- if [[ $RC == 0 ]]; then
- einfo "Successfully mounted $MOUNTDEVICE to /mnt/grml (readonly)." ; eend 0
- eindent
- CONFIG=''
- CONFIG="$(/bin/ls -1d /mnt/grml/[Cc][Oo][Nn][Ff][Ii][Gg].[Tt][Bb][Zz] 2>>$DEBUG)"
- if [ -n "$CONFIG" ]; then
- einfo "Found file ${WHITE}${CONFIG}${NORMAL} - trying to extract it."
- cd /
- unp $CONFIG $EXTRACTOPTIONS ; eend $?
- else
- ewarn "Sorry, could not find file config.tbz on device with label GRMLCFG." ; eend 1
- fi
-
- SCRIPT=''
- SCRIPT="$(/bin/ls -1d /mnt/grml/[Gg][Rr][Mm][Ll].[Ss][Hh] 2>>$DEBUG)"
- if [ -n "$SCRIPT" ]; then
- einfo "Found script ${WHITE}${SCRIPT}${NORMAL} - trying to execute it."
- $SCRIPT ; eend $?
- fi
- eoutdent
- else
- einfo "Could not mount $MOUNTDEVICE to /mnt/grml - sorry." ; eend 1
- fi # mount $MOUNTDEVICE
- grep -q '/mnt/grml' /proc/mounts && umount /mnt/grml
+ config_unpack "$MOUNTDEVICE"
else
einfo "Sorry, no device for bootoption myconfig provided. Skipping." ; eend 1
fi # [ -n "$MOUNTDEVICE" ]
einfo "Bootparameter mypath found, adding ${MY_PATH} to /etc/grml/my_path"
touch /etc/grml/my_path
chmod 644 /etc/grml/my_path
- echo "$MY_PATH" >> /etc/grml/my_path ; eend $?
+ # make sure the directories exist:
+ eindent
+ for i in $(echo $MY_PATH | sed 's/:/\n/g') ; do
+ if ! [ -d "$i" ] ; then
+ einfo "Creating directory $i"
+ mkdir -p "$i" ; eend $?
+ fi
+ done
+ grep -q "${MY_PATH}" /etc/grml/my_path || echo "${MY_PATH}" >> /etc/grml/my_path ; eend $?
+ eoutdent
fi
}
# }}}
}
# }}}
+# {{{ tohd= bootoption
+config_tohd()
+{
+ if checkbootparam "tohd" ; then
+ local TARGET="$(getbootparam 'tohd' 2>>$DEBUG)"
+ if [ -z "$TARGET" ] ; then
+ eerror "Error: tohd specified without any partition, can not continue." ; eend 1
+ eerror "Please use something like tohd=/dev/sda9." ; eend 1
+ return 1
+ fi
+
+ if ! [ -b "$TARGET" ] ; then
+ eerror "Error: $TARGET is not a valid block device, sorry." ; eend 1
+ return 1
+ fi
+
+ if grep -q $TARGET /proc/mounts ; then
+ eerror "$TARGET already mounted, skipping execution of tohd therefore."
+ eend 1
+ return 1
+ fi
+
+ local MOUNTDIR=$(mktemp -d)
+
+ if mount -o rw "$TARGET" "$MOUNTDIR" ; then
+ einfo "Copyring live system to $TARGET - this might take a while"
+ rsync -a --progress /live/image/live $MOUNTDIR
+ sync
+ umount "$MOUNTDIR"
+ eend $?
+ einfo "Booting with \"grml bootfrom=$TARGET\" should work now." ; eend 0
+ else
+ eerror "Error when trying to mount $TARGET, sorry."; eend 1
+ return 1
+ fi
+
+ rmdir "$MOUNTDIR"
+ fi
+}
+# }}}
+
# {{{ grml2hd: automatic installation
config_grml2hd(){