update_bootcfg improvements.

- Fix a glitch (don't glob '*' in for).
- update_bootcfg should be a /bin command.
- update_bootcfg should not add menu entries for missing kernels.
This commit is contained in:
Evgeniy Ivanov 2012-02-16 17:38:38 +04:00 committed by Ben Gras
parent 24f1e18846
commit 72eca0eb1e
5 changed files with 70 additions and 41 deletions

View file

@ -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 \

View file

@ -0,0 +1,5 @@
SCRIPTS= update_bootcfg.sh
BINDIR= /bin
MAN=
.include <bsd.prog.mk>

View file

@ -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

View file

@ -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 $@

View file

@ -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