- 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.
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 \
--- /dev/null
+SCRIPTS= update_bootcfg.sh
+BINDIR= /bin
+MAN=
+
+.include <bsd.prog.mk>
--- /dev/null
+#!/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
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 $@
+++ /dev/null
-#!/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