X-Git-Url: https://git.grml.org/?p=grml-autoconfig.git;a=blobdiff_plain;f=autoconfig.functions;h=7af72a231900ecd392b440cc8ff682b3a8fb2b70;hp=c75b2747184080b6109595c3de075c9614d9d9f2;hb=b934d28953c11d52b45a6d4165dd9dfa565920af;hpb=547a62897d1f9e93ea1a344708f6f4c6e6f2f4c0 diff --git a/autoconfig.functions b/autoconfig.functions index c75b274..7af72a2 100755 --- a/autoconfig.functions +++ b/autoconfig.functions @@ -4,7 +4,6 @@ # 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: Sat Mar 22 00:41:14 CET 2008 [mika] ################################################################################ # {{{ path, variables, signals, umask, zsh @@ -77,6 +76,11 @@ checkgrmlsmall(){ 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 @@ -128,6 +132,8 @@ config_debug(){ 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 @@ -817,27 +823,79 @@ fi # {{{ 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 } # }}} @@ -1240,10 +1298,12 @@ if checkbootparam "nocpu"; then 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 } @@ -1337,20 +1397,46 @@ fi # checkbootparam nocpu # {{{ 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 } # }}} @@ -1612,11 +1698,22 @@ config_wondershaper(){ # {{{ syslog-ng config_syslog(){ if checkbootparam "nosyslog"; then - ewarn "Not starting syslog-ng as requested on boot commandline." ; eend 0 + ewarn "Not starting syslog daemon as requested on boot commandline." ; eend 0 else - einfo "Starting syslog-ng in background." - /etc/init.d/syslog-ng start 1>>$DEBUG & - eend 0 + SYSLOGD='' + [ -x /etc/init.d/syslog-ng ] && SYSLOGD='syslog-ng' + [ -x /etc/init.d/rsyslog ] && SYSLOGD='rsyslog' + [ -x /etc/init.d/dsyslog ] && SYSLOGD='dsyslog' + [ -x /etc/init.d/sysklogd ] && SYSLOGD='sysklogd' + [ -x /etc/init.d/inetutils-syslogd ] && SYSLOGD='inetutils-syslogd' + + if [ -z "$SYSLOGD" ] ; then + eerror "No syslog daemon found." ; eend 1 + else + einfo "Starting $SYSLOGD in background." + /etc/init.d/$SYSLOGD start 1>>$DEBUG & + eend 0 + fi fi } # }}} @@ -1626,10 +1723,14 @@ config_gpm(){ 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 } # }}} @@ -1682,7 +1783,7 @@ config_netconfig(){ config_blindsound(){ if checkbootparam "blind" ; then beep - flite -o play -t "welcome to the gremel system" + flitewrapper "welcome to the gremel system" fi } # }}} @@ -1690,7 +1791,7 @@ config_blindsound(){ # {{{ welcome sound config_welcome(){ if checkbootparam welcome ; then - flite -o play -t "welcome to the gremel system" + flitewrapper "welcome to the gremel system" fi } # }}} @@ -1771,13 +1872,13 @@ 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 + 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 @@ -1913,7 +2014,16 @@ if checkbootparam "mypath" ; then 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 } # }}}