[PATCH 4/4] ybin userland interface for specifying bootonce
Dustin Kirkland
dustin.kirkland at us.ibm.com
Fri Mar 2 01:38:36 EST 2007
ybin userland interface for specifying bootonce
Add an option to ybin called "--bootonce" that takes exactly one
argument, the label of the kernel to boot exactly once, on next reboot.
Do some sanity checking. Grep through the yaboot config file to make
sure that label=WHATEVER exists somewhere, bail if not. Try to prune
out comment lines. Perhaps this might be implemented better. It worked
will in my testing, though.
Set the boot-once OF environment variable to the --bootonce value. Due
to the previously mentioned nvsetenv bug, this will fail silently if
you're trying to set boot-once on a system where boot-once doesn't
already exist in nvram. Thus, immediately after doing the set, try and
read it back out of nvsetenv and make sure it landed there. Bail if
not.
Testing:
[root at gekko-lp3 ybin]# nvsetenv | grep boot-once
boot-once=
[root at gekko-lp3 ybin]# ybin -v --bootonce
ybin: option requires an argument --bootonce
Try `ybin --help' for more information.
[root at gekko-lp3 ybin]# ybin -v --bootonce foo
ybin: Could not find bootonce label [foo] in /etc/yaboot.conf
[root at gekko-lp3 ybin]# ybin -v --bootonce linux
ybin: nvsetenv boot-once linux
ybin: Installing primary bootstrap /usr/lib/yaboot/yaboot
onto /dev/sda1...
ybin: Installation successful
[root at gekko-lp3 ybin]# nvsetenv | grep boot-once
boot-once=linux
--
Signed-off-by: Dustin Kirkland <dustin.kirkland at us.ibm.com>
diff --git a/ybin/mkofboot b/ybin/mkofboot
diff --git a/ybin/ybin b/ybin/ybin
index 210711f..046b6bd 100755
--- a/ybin/ybin
+++ b/ybin/ybin
@@ -155,6 +155,8 @@ Update/install bootloader onto a bootstrap partition.
-b, --boot set bootstrap partition device [ -b /dev/hda2 ]
-o, --ofboot set bootstrap partition OpenFirmware device
default: automatically determined [ -o hd:2 ]
+ --bootonce override default boot label for ONLY next boot
+ eg: --bootonce linux-2.6.20-testing
-i, --install pathname to the actual bootloader binary
default: /usr/{local/}lib/yaboot/yaboot same as
install= in config file [ -i bootloader_file ]
@@ -1377,6 +1379,17 @@ if [ $# != 0 ] ; then
exit 1
fi
;;
+ --bootonce)
+ if [ -n "$2" ] ; then
+ bootonce="$2"
+ ARGS="$ARGS $1 $2"
+ shift 2
+ else
+ echo 1>&2 "$PRG: option requires an argument $1"
+ echo 1>&2 "Try \`$PRG --help' for more information."
+ exit 1
+ fi
+ ;;
-i|--install)
if [ -n "$2" ] ; then
install="$2"
@@ -1643,6 +1656,28 @@ fi
## validate configuration for sanity.
checkconf || exit 1
+if [ "x$bootonce" != "x" ]; then
+ foundlabel=`sed s/\#.*// $bootconf | grep "label=$bootonce$" | wc -l`
+ if [ "$nonvram" = 0 ]; then
+ echo 1>&2 "$PRG: --bootonce specified, but nvsetenv not available."
+ exit 1
+ fi
+ if [ "$foundlabel" = 1 ]; then
+ nvsetenv boot-once "$bootonce"
+ foundlabel=`nvsetenv boot-once`
+ if [ "$foundlabel" != "boot-once=$bootonce" ]; then
+ echo 1>&2 "$PRG: Could not nvsetenv boot-once $bootonce"
+ exit 1
+ fi
+ [ "$VERBOSE" = 1 ] && echo "$PRG: nvsetenv boot-once $bootonce"
+ else
+ echo 1>&2 "$PRG: Could not find bootonce label [$bootonce] in $bootconf"
+ exit 1
+ fi
+fi
+
+bootparts=0
+
## check that we can use ofpath, its only needed for magicboot script
## building and nvram updates.
if [ -n "$magicboot" -o "$nonvram" = 0 ] ; then
More information about the Yaboot-devel
mailing list