]> git.ozlabs.org Git - yaboot.git/blobdiff - ybin/ybin
Remove devel debugging code
[yaboot.git] / ybin / ybin
index 82ddda56c071ef21eaba1b4da8cfb0e3d21d4cc0..210711fbc5954c277854e45156cb5b57c2671772 100755 (executable)
--- a/ybin/ybin
+++ b/ybin/ybin
@@ -3,7 +3,7 @@
 ###############################################################################
 ##
 ## ybin (YaBoot INstaller) installs/updates the yaboot bootloader.
 ###############################################################################
 ##
 ## ybin (YaBoot INstaller) installs/updates the yaboot bootloader.
-## Copyright (C) 2000, 2001, 2002 Ethan Benson
+## Copyright (C) 2000, 2001, 2002, 2003 Ethan Benson
 ##
 ## This program is free software; you can redistribute it and/or
 ## modify it under the terms of the GNU General Public License
 ##
 ## This program is free software; you can redistribute it and/or
 ## modify it under the terms of the GNU General Public License
@@ -27,13 +27,21 @@ if [ -n "$PATH_PREFIX" ] ; then
     PATH="${PATH}:${PATH_PREFIX}/sbin:${PATH_PREFIX}/bin:${PATH_PREFIX}/usr/sbin:${PATH_PREFIX}/usr/bin:${PATH_PREFIX}/usr/local/sbin:${PATH_PREFIX}/usr/local/bin"
 fi
 PRG="${0##*/}"
     PATH="${PATH}:${PATH_PREFIX}/sbin:${PATH_PREFIX}/bin:${PATH_PREFIX}/usr/sbin:${PATH_PREFIX}/usr/bin:${PATH_PREFIX}/usr/local/sbin:${PATH_PREFIX}/usr/local/bin"
 fi
 PRG="${0##*/}"
+ABSPRG="$0"
 SIGINT="$PRG: Interrupt caught ... exiting"
 SIGINT="$PRG: Interrupt caught ... exiting"
-VERSION=1.3.8-UNSUPPORTED_DEVEL_DO_NOT_DISTRIBUTE
+VERSION=1.3.13
 DEBUG=0
 VERBOSE=0
 TMP="${TMPDIR:-/tmp}"
 export LC_COLLATE=C
 
 DEBUG=0
 VERBOSE=0
 TMP="${TMPDIR:-/tmp}"
 export LC_COLLATE=C
 
+## avoid older versions of ofpath shipped in debian boot-floppies etc.
+if [ -x "${PATH_PREFIX}/usr/sbin/ofpath" ] ; then
+    OFPATH="${PATH_PREFIX}/usr/sbin/ofpath"
+else
+    OFPATH=ofpath
+fi
+
 ## catch signals, clean up junk in /tmp.
 trap "cleanup" 0
 trap "exit 129" 1
 ## catch signals, clean up junk in /tmp.
 trap "cleanup" 0
 trap "exit 129" 1
@@ -55,7 +63,7 @@ fi
 ## define default configuration
 boot=unconfigured
 
 ## define default configuration
 boot=unconfigured
 
-## allow default to work on packaged and non-packaged yaboot. 
+## allow default to work on packaged and non-packaged yaboot.
 ## no default for magicboot since it is not required everywhere.
 if [ -f /usr/local/lib/yaboot/yaboot ] ; then
     install=/usr/local/lib/yaboot/yaboot
 ## no default for magicboot since it is not required everywhere.
 if [ -f /usr/local/lib/yaboot/yaboot ] ; then
     install=/usr/local/lib/yaboot/yaboot
@@ -116,7 +124,7 @@ fi
 
 ## make fake `id' if its missing, outputs 0 since if its missing we
 ## are probably running on boot floppies and thus are root.
 
 ## make fake `id' if its missing, outputs 0 since if its missing we
 ## are probably running on boot floppies and thus are root.
-if (command -v id > /dev/null 2>&1) ; then 
+if (command -v id > /dev/null 2>&1) ; then
     true
 else
     id()
     true
 else
     id()
@@ -132,7 +140,7 @@ echo \
 "$PRG $VERSION
 Written by Ethan Benson
 
 "$PRG $VERSION
 Written by Ethan Benson
 
-Copyright (C) 2000, 2001, 2002 Ethan Benson
+Copyright (C) 2000, 2001, 2002, 2003 Ethan Benson
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
 }
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
 }
@@ -292,7 +300,7 @@ checkconf()
            fi
            local CONFERR=1
        fi
            fi
            local CONFERR=1
        fi
-       
+
        if [ `echo ${#hfscreator}` != 4 ] ; then
            if [ "$ARGCT" = 1 ] ; then
                echo 1>&2 "$PRG: --creator must be 4 characters"
        if [ `echo ${#hfscreator}` != 4 ] ; then
            if [ "$ARGCT" = 1 ] ; then
                echo 1>&2 "$PRG: --creator must be 4 characters"
@@ -378,7 +386,7 @@ checkconf()
        fi
 
        ## convert defaultos variable
        fi
 
        ## convert defaultos variable
-       case "$defaultos" in 
+       case "$defaultos" in
            linux|Linux|GNU|Gnu|gnu)
                defaultos=bootyaboot
                ;;
            linux|Linux|GNU|Gnu|gnu)
                defaultos=bootyaboot
                ;;
@@ -455,6 +463,10 @@ checkconf()
                    echo 1>&2 "$PRG: /dev/nvram: Permission denied"
                    echo 1>&2 "$PRG: Warning: nvram will not be updated"
                    nonvram=1
                    echo 1>&2 "$PRG: /dev/nvram: Permission denied"
                    echo 1>&2 "$PRG: Warning: nvram will not be updated"
                    nonvram=1
+               elif ! (dd if=/dev/nvram of=/dev/null bs=1 count=10 > /dev/null 2>&1) ; then
+                   echo 1>&2 "$PRG: /dev/nvram: No such device"
+                   echo 1>&2 "$PRG: Warning: nvram will not be updated"
+                   nonvram=1
                else
                    nonvram=1
                    echo 1>&2 "$PRG: Warning: Incompatible version of \`nvsetenv', nvram will not be updated"
                else
                    nonvram=1
                    echo 1>&2 "$PRG: Warning: Incompatible version of \`nvsetenv', nvram will not be updated"
@@ -600,7 +612,7 @@ convertpath()
     ## figure out bootstrap device OF pathname if user did not supply it.
     if [ -z "$ofboot" ] ; then
        [ "$VERBOSE" = 1 ] && echo "$PRG: Finding OpenFirmware device path to \`$boot'..."
     ## figure out bootstrap device OF pathname if user did not supply it.
     if [ -z "$ofboot" ] ; then
        [ "$VERBOSE" = 1 ] && echo "$PRG: Finding OpenFirmware device path to \`$boot'..."
-       ofboot="$(ofpath $boot)"
+       ofboot="$($OFPATH $boot)"
        if [ $? != 0 ] ; then
            echo 1>&2 "$PRG: Unable to find OpenFirmware path for boot=$boot"
            echo 1>&2 "$PRG: Please add ofboot=<path> where <path> is the OpenFirmware path to $boot to $CONF"
        if [ $? != 0 ] ; then
            echo 1>&2 "$PRG: Unable to find OpenFirmware path for boot=$boot"
            echo 1>&2 "$PRG: Please add ofboot=<path> where <path> is the OpenFirmware path to $boot to $CONF"
@@ -615,7 +627,7 @@ convertpath()
            /dev/*)
                [ "$VERBOSE" = 1 ] && echo "$PRG: Finding OpenFirmware device path to \`$bsd'..."
                local sbsd="$bsd"
            /dev/*)
                [ "$VERBOSE" = 1 ] && echo "$PRG: Finding OpenFirmware device path to \`$bsd'..."
                local sbsd="$bsd"
-               bsd="$(ofpath $bsd)"
+               bsd="$($OFPATH $bsd)"
                if [ $? != 0 ] ; then
                    echo 1>&2 "$PRG: Unable to determine OpenFirmware path for bsd=$sbsd"
                    echo 1>&2 "$PRG: Try specifying the real OpenFirmware path for bsd=$sbsd in $CONF"
                if [ $? != 0 ] ; then
                    echo 1>&2 "$PRG: Unable to determine OpenFirmware path for bsd=$sbsd"
                    echo 1>&2 "$PRG: Try specifying the real OpenFirmware path for bsd=$sbsd in $CONF"
@@ -634,7 +646,7 @@ convertpath()
            /dev/*)
                [ "$VERBOSE" = 1 ] && echo "$PRG: Finding OpenFirmware device path to \`$macos'..."
                local smacos="$macos"
            /dev/*)
                [ "$VERBOSE" = 1 ] && echo "$PRG: Finding OpenFirmware device path to \`$macos'..."
                local smacos="$macos"
-               macos="$(ofpath $macos)"
+               macos="$($OFPATH $macos)"
                if [ $? != 0 ] ; then
                    echo 1>&2 "$PRG: Unable to determine OpenFirmware path for macos=$smacos"
                    echo 1>&2 "$PRG: Try specifying the real OpenFirmware path for macos=$smacos in $CONF"
                if [ $? != 0 ] ; then
                    echo 1>&2 "$PRG: Unable to determine OpenFirmware path for macos=$smacos"
                    echo 1>&2 "$PRG: Try specifying the real OpenFirmware path for macos=$smacos in $CONF"
@@ -653,7 +665,7 @@ convertpath()
            /dev/*)
                [ "$VERBOSE" = 1 ] && echo "$PRG: Finding OpenFirmware device path to \`$macosx'..."
                local smacosx="$macosx"
            /dev/*)
                [ "$VERBOSE" = 1 ] && echo "$PRG: Finding OpenFirmware device path to \`$macosx'..."
                local smacosx="$macosx"
-               macosx="$(ofpath $macosx)"
+               macosx="$($OFPATH $macosx)"
                if [ $? != 0 ] ; then
                    echo 1>&2 "$PRG: Unable to determine OpenFirmware path for macosx=$smacosx"
                    echo 1>&2 "$PRG: Try specifying the real OpenFirmware path for macosx=$smacosx in $CONF"
                if [ $? != 0 ] ; then
                    echo 1>&2 "$PRG: Unable to determine OpenFirmware path for macosx=$smacosx"
                    echo 1>&2 "$PRG: Try specifying the real OpenFirmware path for macosx=$smacosx in $CONF"
@@ -672,7 +684,7 @@ convertpath()
            /dev/*)
                [ "$VERBOSE" = 1 ] && echo "$PRG: Finding OpenFirmware device path to \`$darwin'..."
                local sdarwin="$darwin"
            /dev/*)
                [ "$VERBOSE" = 1 ] && echo "$PRG: Finding OpenFirmware device path to \`$darwin'..."
                local sdarwin="$darwin"
-               darwin="$(ofpath $darwin)"
+               darwin="$($OFPATH $darwin)"
                if [ $? != 0 ] ; then
                    echo 1>&2 "$PRG: Unable to determine OpenFirmware path for darwin=$sdarwin"
                    echo 1>&2 "$PRG: Try specifying the real OpenFirmware path for darwin=$sdarwin in $CONF"
                if [ $? != 0 ] ; then
                    echo 1>&2 "$PRG: Unable to determine OpenFirmware path for darwin=$sdarwin"
                    echo 1>&2 "$PRG: Try specifying the real OpenFirmware path for darwin=$sdarwin in $CONF"
@@ -716,7 +728,7 @@ checkhfsutils()
 
 ## This is gross, IBM CHRP OF needs a .note added to the yaboot
 ## binary, nobody knows whether this note will affect PowerMac OF or
 
 ## This is gross, IBM CHRP OF needs a .note added to the yaboot
 ## binary, nobody knows whether this note will affect PowerMac OF or
-## not (or could in the future). 
+## not (or could in the future).
 hack_yaboot()
 {
     local YBDIR="${install%/*}"
 hack_yaboot()
 {
     local YBDIR="${install%/*}"
@@ -778,7 +790,7 @@ util_install()
 
     ## repoint magicboot as the real first stage loader if using the
     ## modern automatic generating ofboot.b.
 
     ## repoint magicboot as the real first stage loader if using the
     ## modern automatic generating ofboot.b.
-    if [ -n "$FIRST" ] ; then  
+    if [ -n "$FIRST" ] ; then
        magicboot="$FIRST"
        [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: set magicboot to $FIRST"
     fi
        magicboot="$FIRST"
        [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: set magicboot to $FIRST"
     fi
@@ -792,7 +804,7 @@ util_install()
        if [ "$protect" = yes ] ; then
            local LOCK="+l"
        fi
        if [ "$protect" = yes ] ; then
            local LOCK="+l"
        fi
-       
+
        if [ "$hide" = yes ] ; then
            local INVISIBLE="+i"
        fi
        if [ "$hide" = yes ] ; then
            local INVISIBLE="+i"
        fi
@@ -996,7 +1008,7 @@ umnt()
 mnt_install()
 {
     local BTFILE=yaboot
 mnt_install()
 {
     local BTFILE=yaboot
-  
+
     ## msdosfs is broken, yaboot may not support this filename.
     if [ "$fstype" = msdos ] ; then
        local CFFILE=yaboot.cnf
     ## msdosfs is broken, yaboot may not support this filename.
     if [ "$fstype" = msdos ] ; then
        local CFFILE=yaboot.cnf
@@ -1110,7 +1122,7 @@ mnt_install()
 }
 
 ## raw installation, for IBM RS/6000 hardware, yaboot is dded to the
 }
 
 ## raw installation, for IBM RS/6000 hardware, yaboot is dded to the
-## bootstrap partition. 
+## bootstrap partition.
 raw_install()
 {
     ## make sure the device is not mounted as a filesystem before
 raw_install()
 {
     ## make sure the device is not mounted as a filesystem before
@@ -1232,7 +1244,7 @@ mkoffs()
            [ "$VERBOSE" = 1 ] && echo "$PRG: Creating DOS filesystem on $boot..."
             if (command -v dd > /dev/null 2>&1) ; then
                 dd if=/dev/zero of="$boot" bs=512 count=1600 > /dev/null 2>&1
            [ "$VERBOSE" = 1 ] && echo "$PRG: Creating DOS filesystem on $boot..."
             if (command -v dd > /dev/null 2>&1) ; then
                 dd if=/dev/zero of="$boot" bs=512 count=1600 > /dev/null 2>&1
-            fi  
+            fi
            mkdosfs -n bootstrap "$boot" > /dev/null
             if [ $? != 0 ] ; then
                echo 1>&2 "$PRG: DOS filesystem creation failed!"
            mkdosfs -n bootstrap "$boot" > /dev/null
             if [ $? != 0 ] ; then
                echo 1>&2 "$PRG: DOS filesystem creation failed!"
@@ -1314,7 +1326,7 @@ cleanup()
 ## absurdly bloated case statement to parse command line options.
 if [ $# != 0 ] ; then
     while true ; do
 ## absurdly bloated case statement to parse command line options.
 if [ $# != 0 ] ; then
     while true ; do
-       case "$1" in 
+       case "$1" in
            -V|--version)
                version
                exit 0
            -V|--version)
                version
                exit 0
@@ -1325,19 +1337,26 @@ if [ $# != 0 ] ; then
                ;;
            --debug)
                DEBUG=1
                ;;
            --debug)
                DEBUG=1
+               ARGS="$ARGS $1"
                shift
                ;;
            -v|--verbose)
                VERBOSE=1
                shift
                ;;
            -v|--verbose)
                VERBOSE=1
+               ARGS="$ARGS $1"
                shift
                ;;
            -f|--force)
                FORCE=yes
                shift
                ;;
            -f|--force)
                FORCE=yes
+               ARGS="$ARGS $1"
                shift
                ;;
            -b|--boot)
                if [ -n "$2" ] ; then
                shift
                ;;
            -b|--boot)
                if [ -n "$2" ] ; then
-                   boot="$2"
+                   if [ "$boot" = "unconfigured" ]; then
+                       boot="$2"
+                   else
+                       boot="$boot $2"
+                   fi
                    ARGBT=1
                    shift 2
                else
                    ARGBT=1
                    shift 2
                else
@@ -1350,6 +1369,7 @@ if [ $# != 0 ] ; then
                if [ -n "$2" ] ; then
                    ofboot="$2"
                    ARGOB=1
                if [ -n "$2" ] ; then
                    ofboot="$2"
                    ARGOB=1
+                   ARGS="$ARGS $1 $2"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"
@@ -1361,6 +1381,7 @@ if [ $# != 0 ] ; then
                if [ -n "$2" ] ; then
                    install="$2"
                    ARGBF=1
                if [ -n "$2" ] ; then
                    install="$2"
                    ARGBF=1
+                   ARGS="$ARGS $1 $2"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"
@@ -1373,6 +1394,7 @@ if [ $# != 0 ] ; then
                    CONF="$2"
                    bootconf="$2"
                    ERR=" Error in $CONF:"
                    CONF="$2"
                    bootconf="$2"
                    ERR=" Error in $CONF:"
+                   ARGS="$ARGS $1 $2"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"
@@ -1384,6 +1406,7 @@ if [ $# != 0 ] ; then
                if [ -n "$2" ] ; then
                    magicboot="$2"
                    ARGWP=1
                if [ -n "$2" ] ; then
                    magicboot="$2"
                    ARGWP=1
+                   ARGS="$ARGS $1 $2"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"
@@ -1395,6 +1418,7 @@ if [ $# != 0 ] ; then
                if [ -n "$2" ] ; then
                    fstype="$2"
                    ARGFS=1
                if [ -n "$2" ] ; then
                    fstype="$2"
                    ARGFS=1
+                   ARGS="$ARGS $1 $2"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"
@@ -1405,26 +1429,31 @@ if [ $# != 0 ] ; then
            --nobless)
                bless=no
                ARGBS=1
            --nobless)
                bless=no
                ARGBS=1
+               ARGS="$ARGS $1"
                shift
                ;;
            -M|--mount)
                usemount=yes
                ARGMT=1
                shift
                ;;
            -M|--mount)
                usemount=yes
                ARGMT=1
+               ARGS="$ARGS $1"
                shift
                ;;
            --protect)
                protect=yes
                ARGPT=1
                shift
                ;;
            --protect)
                protect=yes
                ARGPT=1
+               ARGS="$ARGS $1"
                shift
                ;;
            --hide)
                hide=yes
                ARGHD=1
                shift
                ;;
            --hide)
                hide=yes
                ARGHD=1
+               ARGS="$ARGS $1"
                shift
                ;;
            --nonvram)
                nonvram=1
                ARGNV=1
                shift
                ;;
            --nonvram)
                nonvram=1
                ARGNV=1
+               ARGS="$ARGS $1"
                shift
                ;;
            --device)
                shift
                ;;
            --device)
@@ -1432,6 +1461,7 @@ if [ $# != 0 ] ; then
                    device="$2"
                    bootconf=auto
                    echo 1>&2 "$PRG: WARNING: Deprecated option --device"
                    device="$2"
                    bootconf=auto
                    echo 1>&2 "$PRG: WARNING: Deprecated option --device"
+                   ARGS="$ARGS $1 $2"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"
@@ -1444,6 +1474,7 @@ if [ $# != 0 ] ; then
                    timeout="$2"
                    bootconf=auto
                    echo 1>&2 "$PRG: WARNING: Deprecated option --device"
                    timeout="$2"
                    bootconf=auto
                    echo 1>&2 "$PRG: WARNING: Deprecated option --device"
+                   ARGS="$ARGS $1 $2"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"
@@ -1456,6 +1487,7 @@ if [ $# != 0 ] ; then
                    image="$2"
                    bootconf=auto
                    echo 1>&2 "$PRG: WARNING: Deprecated option --device"
                    image="$2"
                    bootconf=auto
                    echo 1>&2 "$PRG: WARNING: Deprecated option --device"
+                   ARGS="$ARGS $1 $2"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"
@@ -1468,6 +1500,7 @@ if [ $# != 0 ] ; then
                    label="$2"
                    bootconf=auto
                    echo 1>&2 "$PRG: WARNING: Deprecated option --device"
                    label="$2"
                    bootconf=auto
                    echo 1>&2 "$PRG: WARNING: Deprecated option --device"
+                   ARGS="$ARGS $1 $2"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"
@@ -1480,6 +1513,7 @@ if [ $# != 0 ] ; then
                    partition="$2"
                    bootconf=auto
                    echo 1>&2 "$PRG: WARNING: Deprecated option --device"
                    partition="$2"
                    bootconf=auto
                    echo 1>&2 "$PRG: WARNING: Deprecated option --device"
+                   ARGS="$ARGS $1 $2"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"
@@ -1492,6 +1526,7 @@ if [ $# != 0 ] ; then
                    root="$2"
                    bootconf=auto
                    echo 1>&2 "$PRG: WARNING: Deprecated option --device"
                    root="$2"
                    bootconf=auto
                    echo 1>&2 "$PRG: WARNING: Deprecated option --device"
+                   ARGS="$ARGS $1 $2"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"
@@ -1571,6 +1606,20 @@ fi
 [ $(parseconf flag enableofboot) = 0 ] && of=yes
 [ $(parseconf flag brokenosx) = 0 ] && brokenosx=yes
 
 [ $(parseconf flag enableofboot) = 0 ] && of=yes
 [ $(parseconf flag brokenosx) = 0 ] && brokenosx=yes
 
+bootparts=0
+for i in $boot; do
+    bootparts=$(($bootparts + 1))
+done
+if [ "$bootparts" -gt 1 ]; then
+    [ "$VERBOSE" = 1 ] && echo "$PRG: Iterating through list of boot partitions..."
+    rc=0
+    for i in $boot; do
+        [ "$VERBOSE" = 1 ] && echo "$ABSPRG $ARGS -b $i"
+        $ABSPRG $ARGS -b $i || rc=$?
+    done
+    exit $rc
+fi
+
 ## ffs!! rtfm! foad!
 if [ "$boot" = unconfigured ] ; then
     echo 1>&2 "$PRG: You must specify the device for the bootstrap partition. (ie: boot=/dev/hdaX)"
 ## ffs!! rtfm! foad!
 if [ "$boot" = unconfigured ] ; then
     echo 1>&2 "$PRG: You must specify the device for the bootstrap partition. (ie: boot=/dev/hdaX)"