From a5b19d45fb5569f68e56445536296188b2ec0809 Mon Sep 17 00:00:00 2001 From: Paul Nasrat Date: Thu, 19 Apr 2007 10:14:24 +0100 Subject: [PATCH] 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. Signed-off-by: Dustin Kirkland --- ybin/ybin | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) 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 -- 2.39.2