PRG="${0##*/}"
ABSPRG="$0"
SIGINT="$PRG: Interrupt caught ... exiting"
-VERSION=1.3.14
+VERSION=1.3.17
DEBUG=0
VERBOSE=0
TMP="${TMPDIR:-/tmp}"
## 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
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
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
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
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
fi
sync ; sync
[ "$VERBOSE" = 1 ] && echo "$PRG: Installation successful"
+ return 0
}
## make sure the first stage ofboot generator is compatible.
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