X-Git-Url: https://git.grml.org/?p=grml-autoconfig.git;a=blobdiff_plain;f=autoconfig.functions;h=c9e4ff54bff7b685391e88ed1468141258ffc76f;hp=50fdf81b7418aeea9cd106ee7fd99696c3a98e1c;hb=f9f92864d1e46ceeb77297fe8f13405c1a6c8d2f;hpb=6fbe7e6ff8b7d01dc6aa0fe1df9addca2dfe1e40 diff --git a/autoconfig.functions b/autoconfig.functions index 50fdf81..c9e4ff5 100755 --- a/autoconfig.functions +++ b/autoconfig.functions @@ -10,6 +10,7 @@ export PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin" DEBUG="/dev/null" KERNEL="$(uname -r)" +ARCH="$(uname -m)" umask 022 # old linuxrc version: @@ -47,10 +48,14 @@ fi # Get a bootoption's parameter: read boot command line and either # echo last parameter's argument or return false. getbootparam(){ - case "$CMDLINE" in - *$1=*) - result="${CMDLINE##* $1=}" - result="${result%%[ ]*}" + local line + local ws + ws=' ' + line=" $CMDLINE " + case "$line" in + *[${ws}]"$1="*) + result="${line##*[$ws]$1=}" + result="${result%%[$ws]*}" echo "$result" return 0 ;; *) # no match? @@ -61,13 +66,16 @@ getbootparam(){ # Check boot commandline for specified option checkbootparam(){ [ -n "$1" ] || ( echo "Error: missing argument to checkbootparam()" ; return 1 ) - # make sure we match beginning and end of line as well - # but don't match 'vg' if we want to check for 'vga' - if echo "$CMDLINE" | grep -qw "$1" ; then - return 0 - else - return 1 - fi + local line + local ws + ws=' ' + line=" $CMDLINE " + case "$line" in + *[${ws}]"$1"=*|*[${ws}]"$1"[${ws}]*) + return 0 ;; + *) + return 1 ;; + esac } # Check wheter a configuration variable (like $CONFIG_TOHD) is @@ -1785,31 +1793,59 @@ config_services(){ } # }}} -# {{{ config files -config_netconfig(){ - if checkbootparam 'netconfig' ; then - CONFIG="$(getbootparam 'netconfig' 2>>$DEBUG)" - CONFIGFILE='/tmp/netconfig.grml' - +# {{{ remote files +get_remote_file() { + [ "$#" -eq 2 ] || ( echo "Error: wrong parameter for get_remote_file()" ; return 1 ) + SOURCE=$(eval echo "$1") + TARGET="$2" getconfig() { - wget --timeout=10 --dns-timeout=10 --connect-timeout=10 \ - --read-timeout=10 $CONFIG -O $CONFIGFILE && return 0 || return 1 + wget --timeout=10 --dns-timeout=10 --connect-timeout=10 --tries=1 \ + --read-timeout=10 ${SOURCE} -O ${TARGET} && return 0 || return 1 } - einfo "Trying to get ${WHITE}${CONFIG}${NORMAL}" + einfo "Trying to get ${WHITE}${TARGET}${NORMAL}" counter=10 while ! getconfig && [[ "$counter" != 0 ]] ; do - echo -n "Sleeping for 5 seconds and trying to get config again... " + echo -n "Sleeping for 1 second and trying to get config again... " counter=$(( counter-1 )) echo "$counter tries left" ; sleep 1 done - if [ -r "$CONFIGFILE" ] ; then + if [ -s "$TARGET" ] ; then einfo "Downloading was successfull." ; eend 0 - einfo "md5sum of ${WHITE}${CONFIG}${NORMAL}: " - md5sum $CONFIGFILE ; eend 0 - cd / && einfo "Unpacking ${WHITE}${CONFIGFILE}${NORMAL}:" && /usr/bin/unp $CONFIGFILE $EXTRACTOPTIONS ; eend $? + einfo "md5sum of ${WHITE}${TARGET}${NORMAL}: " + md5sum ${TARGET} ; eend 0 + return 0; else - einfo "Sorry, could not fetch $CONFIG" ; eend 1 + einfo "Sorry, could not fetch ${SOURCE}" ; eend 1 + return 1; + fi +} +# }}} + +# {{{ config files +config_netconfig(){ + if checkbootparam 'netconfig' ; then + CONFIG="$(getbootparam 'netconfig' 2>>$DEBUG)" + CONFIGFILE='/tmp/netconfig.grml' + + if get_remote_file ${CONFIG} ${CONFIGFILE} ; then + cd / && einfo "Unpacking ${WHITE}${CONFIGFILE}${NORMAL}:" && /usr/bin/unp $CONFIGFILE $EXTRACTOPTIONS ; eend $? + fi + + fi +} +# }}} + +# {{{ remote scripts +config_netscript() { + if checkbootparam 'netscript' ; then + CONFIG="$(getbootparam 'netscript' 2>>$DEBUG)" + SCRIPTFILE='/tmp/netscript.grml' + + if get_remote_file ${CONFIG} ${SCRIPTFILE} ; then + chmod +x ${SCRIPTFILE} + einfo "Running ${WHITE}${SCRIPTFILE}${NORMAL}:" && ${SCRIPTFILE} ; eend $? fi + fi } # }}} @@ -1951,6 +1987,8 @@ else fi DCSDIR="/mnt/grml" fi + else + DCSDIR="/live/image" fi fi fi