diff --git a/commands/Makefile b/commands/Makefile index 91566c32b..c9863c6af 100644 --- a/commands/Makefile +++ b/commands/Makefile @@ -33,7 +33,7 @@ SUBDIR= add_route arp ash at awk \ unstack update uud uue version vol wc \ whereis which who write writeisofs fetch \ xargs yacc yes zdump zmodem pkgin_cd \ - mktemp worldstone updateboot + mktemp worldstone updateboot update_bootcfg .if ${ARCH} == "i386" SUBDIR+= atnormalize dosread fdisk loadfont \ diff --git a/commands/update_bootcfg/Makefile b/commands/update_bootcfg/Makefile new file mode 100644 index 000000000..1583e49ef --- /dev/null +++ b/commands/update_bootcfg/Makefile @@ -0,0 +1,5 @@ +SCRIPTS= update_bootcfg.sh +BINDIR= /bin +MAN= + +.include diff --git a/commands/update_bootcfg/update_bootcfg.sh b/commands/update_bootcfg/update_bootcfg.sh new file mode 100755 index 000000000..8c653b694 --- /dev/null +++ b/commands/update_bootcfg/update_bootcfg.sh @@ -0,0 +1,63 @@ +#!/bin/sh +set -e + +ROOT=`printroot -r` +DEFAULTCFG=/etc/boot.cfg.default +LOCALCFG=/etc/boot.cfg.local +TMP=/boot.cfg.temp + +filter_missing_entries() +{ + while read line + do + if ! echo "$line" | grep -s -q 'multiboot' + then + echo "$line" + continue + fi + + # Check if kernel presents + kernel=`echo "$line" | sed -n 's/.*multiboot[[:space:]]*\(\/[^[:space:]]*\).*/\1/p'` + if [ ! -r "$kernel" ] + then + echo "Warning: config contains entry for \"$kernel\" which is missing! Entry skipped." 1>&2 + else + echo "$line" + fi + done +} + +if [ ! -b "$ROOT" ] +then + echo root device $ROOT not found + exit 1 +fi + +rootdevname=`echo $ROOT | sed 's/\/dev\///'` + +if [ -r $DEFAULTCFG ] +then + default_cfg=`cat $DEFAULTCFG` + # Substitute variables like $rootdevname + echo "$default_cfg" | while read line; do eval echo \"$line\" | filter_missing_entries >> $TMP; done +fi + +if [ -e /boot/minix_latest -a -d /boot/minix_latest -o -h /boot/minix_latest ] +then + latest=`basename \`stat -f "%Y" /boot/minix_latest\`` +fi + +[ -d /boot/minix ] && for i in `ls /boot/minix/` +do + build_name="`basename $i`" + if [ "$build_name" != "$latest" ] + then + echo "menu=Start MINIX 3 ($build_name):load_mods $i/mod*;multiboot $i/kernel rootdevname=$rootdevname" >> /$TMP + fi +done + +[ -r $LOCALCFG ] && cat $LOCALCFG | filter_missing_entries >> $TMP + +mv $TMP /boot.cfg + +sync diff --git a/tools/Makefile b/tools/Makefile index 70f36e910..173097d03 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -98,7 +98,7 @@ hdboot: image strip -s /boot/minix/.temp/kernel [ -d /boot/image ] && ln -f /boot/minix/.temp/kernel /boot/kernel || true sh mkboot $@ minix - exec sh update_bootcfg.sh + sh ../commands/update_bootcfg/update_bootcfg.sh fdboot: image exec su root mkboot $@ diff --git a/tools/update_bootcfg.sh b/tools/update_bootcfg.sh deleted file mode 100755 index c73863cb1..000000000 --- a/tools/update_bootcfg.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/sh -set -e - -ROOT=`printroot -r` -DEFAULTCFG=/etc/boot.cfg.default -LOCALCFG=/etc/boot.cfg.local -TMP=/boot.cfg.temp - -if [ ! -b "$ROOT" ] -then - echo root device $ROOT not found - exit 1 -fi - -rootdevname=`echo $ROOT | sed 's/\/dev\///'` - -if [ -r $DEFAULTCFG ] -then - default_cfg=`cat $DEFAULTCFG` - # Substitute variables like $rootdevname - echo "$default_cfg" | while read line; do eval echo \"$line\" >> $TMP; done -fi - -latest=`basename \`stat -f "%Y" /boot/minix_latest\`` - -for i in /boot/minix/* -do - build_name="`basename $i`" - if [ "$build_name" != "$latest" ] - then - echo "menu=Start MINIX 3 ($build_name):load_mods $i/mod*;multiboot $i/kernel rootdevname=$rootdevname" >> /$TMP - fi -done - -[ -r $LOCALCFG ] && cat $LOCALCFG >> $TMP - -mv $TMP /boot.cfg - -sync