X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=ybin%2Fybin;h=6feef555b25e71484242f73c3dfc51bcf6986c02;hb=24679e706305e0910f181a9640b8b88a30662d03;hp=210711fbc5954c277854e45156cb5b57c2671772;hpb=a2b7bb030d78c61ef150f8c9f6926c9558a6f1b5;p=tonyb-yaboot.git diff --git a/ybin/ybin b/ybin/ybin index 210711f..6feef55 100755 --- a/ybin/ybin +++ b/ybin/ybin @@ -29,7 +29,7 @@ fi PRG="${0##*/}" ABSPRG="$0" SIGINT="$PRG: Interrupt caught ... exiting" -VERSION=1.3.13 +VERSION=1.3.14 DEBUG=0 VERBOSE=0 TMP="${TMPDIR:-/tmp}" @@ -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 ] @@ -434,21 +436,22 @@ checkconf() fi if [ "$nonvram" = 0 ] ; then - ## see if nvsetenv exists and is executable - if (command -v nvsetenv > /dev/null 2>&1) ; then - [ -x `command -v nvsetenv` ] || MISSING=1 ; else MISSING=1 + ## see if nvsetenv or nvram exists and is executable + for program in nvsetenv nvram ; do + if (command -v $program > /dev/null 2>&1) && [ -x `command -v $program` ] ; then + NVRAM_PROG=$program + break + fi + done + if [ -z "$NVRAM_PROG" ] ; then + nonvram=1 + echo 1>&2 "$PRG: Warning: \`nvsetenv' and \`nvram' could not be found, nvram will not be updated" + fi fi if [ "$nonvram" = 0 ] ; then ## if nvsetenv exists see if its the old broken version - if [ "$MISSING" != 1 ] ; then - nvsetenv --version > /dev/null 2>&1 || OLD=1 - else - nonvram=1 - echo 1>&2 "$PRG: Warning: \`nvsetenv' could not be found, nvram will not be updated" - fi - - if [ "$OLD" = 1 ] ; then + if [ "$NVRAM_PROG" = "nvsetenv" ] && ! nvsetenv --version > /dev/null 2>&1 ; then ## i check this myself to avoid misleading error ## messages. nvsetenv should REALLY support --version. if [ ! -e /dev/nvram ] ; then @@ -469,7 +472,7 @@ checkconf() nonvram=1 else nonvram=1 - echo 1>&2 "$PRG: Warning: Incompatible version of \`nvsetenv', nvram will not be updated" + echo 1>&2 "$PRG: Warning: Incompatible version of nvsetenv, nvram will not be updated" fi fi fi @@ -924,7 +927,11 @@ util_install() if [ "$nonvram" = 0 ] ; then [ "$VERBOSE" = 1 ] && echo "$PRG: Updating OpenFirmware boot-device variable in nvram..." [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: boot-device=${ofboot},${OFFILE}" - nvsetenv boot-device "${ofboot},${OFFILE}" + if [ "$NVRAM_PROG" = "nvsetenv" ] ; then + nvsetenv boot-device "${ofboot},${OFFILE}" + else + nvram -p common --update-config boot-device="${ofboot},${OFFILE}" + fi if [ $? != 0 ] ; then echo 1>&2 "$PRG: An error occured while updating nvram, we'll ignore it" fi @@ -1110,7 +1117,11 @@ mnt_install() if [ "$nonvram" = 0 ] ; then [ "$VERBOSE" = 1 ] && echo "$PRG: Updating OpenFirmware boot-device variable in nvram..." [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: boot-device=${ofboot},${OFFILE}" - nvsetenv boot-device "${ofboot},${OFFILE}" + if [ "$NVRAM_PROG" = "nvsetenv" ] ; then + nvsetenv boot-device "${ofboot},${OFFILE}" + else + nvram -p common --update-config boot-device="${ofboot},${OFFILE}" + fi if [ $? != 0 ] ; then echo 1>&2 "$PRG: An error occured while updating nvram, we'll ignore it" fi @@ -1377,6 +1388,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 +1665,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