From: Heiko Z. <smi...@us...> - 2004-05-04 01:05:38
|
Update of /cvsroot/devil-linux/build/config/etc/initrd In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16332/config/etc/initrd Modified Files: linuxrc Log Message: - enhanced DL_config parsing in linuxrc (Heiko / Roland Pabel) - fixed apcupsd compilation (Heiko / Roland Pabel) - updated pax to v20040501 - updated kernel to v2.6.5 for development version (Heiko + Oliver Jehle) - updated ipsec-tools to v0.3.1 Index: linuxrc =================================================================== RCS file: /cvsroot/devil-linux/build/config/etc/initrd/linuxrc,v retrieving revision 1.68 retrieving revision 1.69 diff -u -d -r1.68 -r1.69 --- linuxrc 9 Apr 2004 22:21:29 -0000 1.68 +++ linuxrc 4 May 2004 01:04:52 -0000 1.69 @@ -35,31 +35,108 @@ export PATH=$PATH:/sbin:/usr/sbin -scan_device_for_config() { - # $1 = device - # $2 = filename - SRC=$1 - FILE=$2 - echo -n "Checking for \"$FILE\" on \"$SRC\" ... " - if mount -n -t auto $SRC /floppy >/dev/null 2>&1 ; then - if [ -e /floppy/$FILE ] ; then - $GREEN - echo "success!" - $NORMAL - DL_CONFIG_SOURCE=$SRC - DL_CONFIG_FILE=$FILE - return 0 +scan_devices_for_config() { + # $1 = filename + # $... = list of devices + FILE=$1 + shift + for SRC in "$@" + do + echo -n "Checking for \"$FILE\" on \"$SRC\" ... " + if mount -n -t auto $SRC /floppy >/dev/null 2>&1 ; then + if [ -e /floppy/$FILE ] ; then + $GREEN + echo "success!" + $NORMAL + DL_CONFIG_SOURCE=$SRC + DL_CONFIG_FILE=$FILE + return 0 + else + $YELLOW + echo "file not found." + $NORMAL + umount /floppy # in case user swaps floppy when we are accepting input + fi else - $YELLOW - echo "file not found." + $RED + echo "mount failed." $NORMAL - umount /floppy # in case user swaps floppy when we are accepting input fi - else - $RED - echo "mount failed." - $NORMAL - fi + done + return 1 +} + +parse_config_cmdline() { + # $1 = cmdline + CMD="$1" + # split at ',' + OIFS=$IFS + IFS=, + for CONFIG_USER in $CMD + do + IFS=$OIFS + CONFIG_USER_ERROR=0 + CONFIG_USER_SRC="" + CONFIG_USER_FILE="" + if [ "$CONFIG_USER" != "" ]; then + case `echo $CONFIG_USER | awk -v FS=: '{ print NF-1 }'` in + 0 ) + CONFIG_USER_SRC=`echo $CONFIG_USER | grep "/dev/"` + CONFIG_USER_FILE=`echo $CONFIG_USER | grep -v "/dev/"` + ;; + 1 ) + CONFIG_USER_SRC=`echo ${CONFIG_USER%:*}` + CONFIG_USER_FILE=`echo ${CONFIG_USER#*:}` + ;; + * ) + CONFIG_USER_ERROR=1 + ;; + esac + # sanity checks + [ "$CONFIG_USER_SRC" != "" ] && CONFIG_USER_ERROR=`echo $CONFIG_USER_SRC | grep -c -v "^/dev/"` + [ "$CONFIG_USER_FILE" != "" ] && CONFIG_USER_ERROR=`echo $CONFIG_USER_FILE | grep -c "/dev/"` + [ "$CONFIG_USER" = ":" ] && CONFIG_USER_ERROR=1 # just in case... + else + CONFIG_USER_ERROR=1 + fi + case $CONFIG_USER_ERROR in + 0 ) + $BLUE + echo -n "Trying to load configuration " + $GREEN + if [ "$CONFIG_USER_FILE" = "" ]; then + CONFIG_USER_FILE=$CONFIG_FILE + fi + echo -n "\"$CONFIG_USER_FILE\" " + $BLUE + if [ "$CONFIG_USER_SRC" != "" ]; then + echo -n "from device " + $GREEN + echo -n "\"$CONFIG_USER_SRC\"" + $BLUE + else + CONFIG_USER_SRC=$CONFIG_SRC_LIST + echo -n "from any device" + fi + echo "." + $NORMAL + scan_devices_for_config $CONFIG_USER_FILE $CONFIG_USER_SRC + if [ $? = 0 ]; then + return 0 + else + $YELLOW + echo "Sorry, could not load your configuration. Continuing searching..." + $NORMAL + fi + ;; + * ) + $RED + echo -n "Improper config parameter : \"$CONFIG_USER\". Ignored." + beep; sleep 1; echo -n "."; sleep 1; beep; echo "." + $NORMAL + ;; + esac + done return 1 } @@ -71,7 +148,7 @@ rm -f /etc/sysconfig/config.tmp } -ask_yes_no () +ask_yes_no() { ANS="" read -p " (y/n) " -r ANS @@ -113,57 +190,13 @@ $NORMAL # parse user config -CONFIG_USER=`awk -v RS=' ' -v FS='=' '/^config=/ { print $2 }' /proc/cmdline` -CONFIG_USER_SRC="" -CONFIG_USER_FILE="" -if [ "$CONFIG_USER" != "" ]; then - CONFIG_USER_ERROR=0 - case `echo $CONFIG_USER | awk -v FS=: '{ print NF-1 }'` in - 0 ) - CONFIG_USER_SRC=`echo $CONFIG_USER | grep "/dev/"` - CONFIG_USER_FILE=`echo $CONFIG_USER | grep -v "/dev/"` - ;; - 1 ) - CONFIG_USER_SRC=`echo ${CONFIG_USER%:*}"` - CONFIG_USER_FILE=`echo ${CONFIG_USER#*:}"` - ;; - * ) - CONFIG_USER_ERROR=1 - ;; - esac - # sanity checks - [ "$CONFIG_USER_SRC" != "" ] && CONFIG_USER_ERROR=`echo $CONFIG_USER_SRC | grep -c -v "^/dev/"` - [ "$CONFIG_USER_FILE" != "" ] && CONFIG_USER_ERROR=`echo $CONFIG_USER_FILE | grep -c "/dev/"` - [ "$CONFIG_USER" = ":" ] && CONFIG_USER_ERROR=1 # just in case... - case $CONFIG_USER_ERROR in - 0 ) - $BLUE - echo -n "Trying to load configuration " - if [ "$CONFIG_USER_FILE" != "" ]; then - $GREEN - echo -n "\"$CONFIG_USER_FILE\" " - $NORMAL - fi - if [ "$CONFIG_USER_SRC" != "" ]; then - $BLUE - echo -n "from device " - $GREEN - echo -n "\"$CONFIG_USER_SRC\" " - $NORMAL - fi - $BLUE - echo "first." - $NORMAL - ;; - * ) - $RED - echo -n "Improper config parameter : \"$CONFIG_USER\". Ignored." - beep; sleep 1; echo -n "."; sleep 1; beep; echo "." - $NORMAL - CONFIG_USER_SRC="" - CONFIG_USER_FILE="" - ;; - esac +CONFIG_USER=`awk -v RS=' ' -v FS='=' '/^DL_config=/ { print $2 }' /proc/cmdline` +CONFIG_USER_ONLY=`grep -c DL_config_no_scan /proc/cmdline` + +if [ "$CONFIG_USER_ONLY" != "0" ]; then + $RED + echo "Disabling automatic scanning for Devil-Linux configuration archive! Good Luck." + $NORMAL fi # generate the device list we need to search for the configuration information @@ -174,32 +207,18 @@ DISCS_SCSI=`find /dev/scsi/ -name "disc" 2> /dev/null` FLOPPIES=`find /dev/floppy/ -name "?" 2> /dev/null` CONFIG_SRC_LIST="$PARTITIONS_SCSI $PARTITIONS_IDE $DISCS_SCSI $CDROM_IDE $CDROM_SCSI $FLOPPIES" -CONFIG_FILE_LIST="etc.tar.bz2" - -if [ "$CONFIG_USER_SRC" != "" ] && [ "$CONFIG_USER_FILE" != "" ]; then - # search for most specific config first - scan_device_for_config $CONFIG_USER_SRC $CONFIG_USER_FILE - if [ $? = 1 ]; then - $YELLOW - echo "Sorry, could not load your configuration. Continuing searching..." - $NORMAL - fi -else - # if no specific config is given, prepend to lists - CONFIG_SRC_LIST="$CONFIG_USER_SRC $CONFIG_SRC_LIST" - CONFIG_FILE_LIST="$CONFIG_USER_FILE $CONFIG_FILE_LIST" -fi +CONFIG_FILE="etc.tar.bz2" -# if no configuration has been found yet, create one until [ "$DL_CONFIG_SOURCE" != "" ] ; do - for CFG_FILE in $CONFIG_FILE_LIST - do - for CFG_SRC in $CONFIG_SRC_LIST - do - scan_device_for_config $CFG_SRC $CFG_FILE && continue 3 - done - done + if [ "$CONFIG_USER" != "" ]; then + parse_config_cmdline $CONFIG_USER && continue + fi + if [ "$CONFIG_USER_ONLY" = "0" ]; then + # scan for etc.tar.bz2 on all devices + scan_devices_for_config $CONFIG_FILE $CONFIG_SRC_LIST && continue + fi + # no configuration has been found yet for CFG_SRC in $CONFIG_SRC_LIST do echo -e "Looking for empty configuation media on $CFG_SRC" @@ -244,6 +263,8 @@ done unset ANS RET +echo $DL_CONFIG_SOURCE > /shm/DL_CONFIG_SOURCE +echo $DL_CONFIG_FILE > /shm/DL_CONFIG_FILE export DL_CONFIG_SOURCE export DL_CONFIG_FILE |