yaboot-1.3.17
[yaboot.git] / ybin / ybin
index 19ee2aab580188abb50821a02dccd06d84b9d83f..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.14
+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
@@ -436,22 +438,21 @@ checkconf()
     fi
 
     if [ "$nonvram" = 0 ] ; then
-               ## 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
+       ## 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
        fi
 
        if [ "$nonvram" = 0 ] ; then
            ## if nvsetenv exists see if its the old broken version
-               if [ "$NVRAM_PROG" = "nvsetenv" ] && ! nvsetenv --version > /dev/null 2>&1 ; then
+           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
                ## i check this myself to avoid misleading error
                ## messages. nvsetenv should REALLY support --version.
                if [ ! -e /dev/nvram ] ; then
@@ -505,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
@@ -927,11 +932,7 @@ 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}"
-               if [ "$NVRAM_PROG" = "nvsetenv" ] ; then
-                       nvsetenv boot-device "${ofboot},${OFFILE}"
-               else
-                       nvram -p common --update-config boot-device="${ofboot},${OFFILE}"
-               fi
+           nvsetenv boot-device "${ofboot},${OFFILE}"
            if [ $? != 0 ] ; then
                echo 1>&2 "$PRG: An error occured while updating nvram, we'll ignore it"
            fi
@@ -1117,11 +1118,7 @@ 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}"
-       if [ "$NVRAM_PROG" = "nvsetenv" ] ; then
-               nvsetenv boot-device "${ofboot},${OFFILE}"
-       else
-               nvram -p common --update-config boot-device="${ofboot},${OFFILE}"
-       fi
+       nvsetenv boot-device "${ofboot},${OFFILE}"
        if [ $? != 0 ] ; then
            echo 1>&2 "$PRG: An error occured while updating nvram, we'll ignore it"
        fi
@@ -1161,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.
@@ -1667,14 +1665,15 @@ checkconf || exit 1
 
 if [ "x$bootonce" != "x" ]; then
     foundlabel=`sed s/\#.*// $bootconf | grep "label=$bootonce$" | wc -l`
-    if [ "$nonvram" = 0 ]; then
+    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" ]; then
+       if [ "$foundlabel" != "boot-once=$bootonce" -a \
+             "$foundlabel" != "$bootonce" ]; then
            echo 1>&2 "$PRG: Could not nvsetenv boot-once $bootonce"
            exit 1
        fi