# 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: Mon Jun 09 17:05:42 CEST 2008 [mika]
################################################################################
# {{{ path, variables, signals, umask, zsh
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
# {{{ 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 /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 /proc/modules ; then
+ einfo "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 $?
+ if [ -r /proc/speakup/synth_name ] ; then
+ einfo "Activating sftsyn via /proc in Kernel."
+ echo sftsyn > /proc/speakup/synth_name ; eend $?
+ elif [ -r /sys/modules/speakup/parameters/synth ] ; then
+ einfo "Activating sftsyn via /sys in Kernel."
+ echo sftsyn > /sys/modules/speakup/parameters/synth ; eend $?
+ else
+ eerror "Error when configuring sftsyn via /proc or /sys." ; eend 1
+ fi
+ einfo "Just run swspeak if you want to use software synthesizer via speakup."
+ flitewrapper "Finished activating software speakup. Just run swspeak when booting finished."
+ else
+ eerror "speech-dispatcher not available. swspeak will not work without it." ; eend 1
+ flitewrapper "speech-dispatcher not available. speakup will not work without it."
+ fi
+ 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 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
+ 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
+ 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
+ echo "grml:$SSH_PASSWD" | chpasswd -m
+ 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
}
# }}}
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
}
# }}}
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
+ einfo "Searching for device(s) labeled with GRMLCFG. (Disable this via boot option: noautoconfig)" ; 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)"
+ einfo "Floppy device detected. Trying to access floppy disk."
# 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