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:
parent
24f1e18846
commit
72eca0eb1e
|
@ -33,7 +33,7 @@ SUBDIR= add_route arp ash at awk \
|
||||||
unstack update uud uue version vol wc \
|
unstack update uud uue version vol wc \
|
||||||
whereis which who write writeisofs fetch \
|
whereis which who write writeisofs fetch \
|
||||||
xargs yacc yes zdump zmodem pkgin_cd \
|
xargs yacc yes zdump zmodem pkgin_cd \
|
||||||
mktemp worldstone updateboot
|
mktemp worldstone updateboot update_bootcfg
|
||||||
|
|
||||||
.if ${ARCH} == "i386"
|
.if ${ARCH} == "i386"
|
||||||
SUBDIR+= atnormalize dosread fdisk loadfont \
|
SUBDIR+= atnormalize dosread fdisk loadfont \
|
||||||
|
|
5
commands/update_bootcfg/Makefile
Normal file
5
commands/update_bootcfg/Makefile
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
SCRIPTS= update_bootcfg.sh
|
||||||
|
BINDIR= /bin
|
||||||
|
MAN=
|
||||||
|
|
||||||
|
.include <bsd.prog.mk>
|
63
commands/update_bootcfg/update_bootcfg.sh
Executable file
63
commands/update_bootcfg/update_bootcfg.sh
Executable 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
|
|
@ -98,7 +98,7 @@ hdboot: image
|
||||||
strip -s /boot/minix/.temp/kernel
|
strip -s /boot/minix/.temp/kernel
|
||||||
[ -d /boot/image ] && ln -f /boot/minix/.temp/kernel /boot/kernel || true
|
[ -d /boot/image ] && ln -f /boot/minix/.temp/kernel /boot/kernel || true
|
||||||
sh mkboot $@ minix
|
sh mkboot $@ minix
|
||||||
exec sh update_bootcfg.sh
|
sh ../commands/update_bootcfg/update_bootcfg.sh
|
||||||
|
|
||||||
fdboot: image
|
fdboot: image
|
||||||
exec su root mkboot $@
|
exec su root mkboot $@
|
||||||
|
|
|
@ -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
|
|
Loading…
Reference in a new issue