yaboot-1.3.17
[yaboot.git] / ybin / ybin
index 210711fbc5954c277854e45156cb5b57c2671772..70c0bcbea48112aae077acb7eebc2385725af2a2 100755 (executable)
--- 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.17
 DEBUG=0
 VERBOSE=0
 TMP="${TMPDIR:-/tmp}"
@@ -73,7 +73,9 @@ fi
 
 ## defaults
 usemount=no
-if (cat /proc/cpuinfo 2> /dev/null | grep ^machine | grep -q 'CHRP IBM') ; then
+if (cat /proc/cpuinfo 2> /dev/null | grep ^platform | grep -q 'pSeries') ; then
+    fstype=raw
+elif (cat /proc/cpuinfo 2> /dev/null | grep ^platform | grep -q 'PowerNV') ; then
     fstype=raw
 else
     fstype=hfs
@@ -155,6 +157,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 ]
@@ -502,7 +506,11 @@ checkconf()
        echo 1>&2
        [ "$nonvram" = 0 ] && echo 1>&2 "$PRG: OldWorld PowerMac, nvram will not be updated"
        nonvram=1
-    elif (cat /proc/cpuinfo 2> /dev/null | grep ^machine | grep -q 'CHRP IBM') ; then
+    elif (cat /proc/cpuinfo 2> /dev/null | grep ^platform | grep -q 'pSeries') ; then
+       ## IBM hardware does not need nvram update AFAICT
+       nonvram=1
+       ADDNOTE=yes
+    elif (cat /proc/cpuinfo 2> /dev/null | grep ^platform | grep -q 'PowerNV') ; then
        ## IBM hardware does not need nvram update AFAICT
        nonvram=1
        ADDNOTE=yes
@@ -1150,6 +1158,7 @@ raw_install()
     fi
     sync ; sync
     [ "$VERBOSE" = 1 ] && echo "$PRG: Installation successful"
+    return 0
 }
 
 ## make sure the first stage ofboot generator is compatible.
@@ -1377,6 +1386,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 +1663,29 @@ fi
 ## validate configuration for sanity.
 checkconf || exit 1
 
+if [ "x$bootonce" != "x" ]; then
+    foundlabel=`sed s/\#.*// $bootconf | grep "label=$bootonce$" | wc -l`
+    if [ "$nonvram" = 1 ]; 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" -a \
+             "$foundlabel" != "$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