Commit yaboot 1.3.6
[yaboot.git] / ybin / ybin
index a7e790d3dc346f6c494a667558b4d28712b85454..b333e9186920c912187b9a1fc0567c0eddd04f0e 100755 (executable)
--- a/ybin/ybin
+++ b/ybin/ybin
@@ -28,7 +28,7 @@ if [ -n "$PATH_PREFIX" ] ; then
 fi
 PRG="${0##*/}"
 SIGINT="$PRG: Interrupt caught ... exiting"
-VERSION=1.3.2
+VERSION=1.3.6
 DEBUG=0
 VERBOSE=0
 TMP="${TMPDIR:-/tmp}"
@@ -65,7 +65,11 @@ fi
 
 ## defaults
 usemount=no
-fstype=hfs
+if (cat /proc/cpuinfo 2> /dev/null | grep ^machine | grep -q 'CHRP IBM') ; then
+    fstype=raw
+else
+    fstype=hfs
+fi
 hfstype=tbxi
 hfscreator=UNIX
 bless=yes
@@ -166,19 +170,6 @@ Update/install bootloader onto a bootstrap partition.
                                this is useful of you don't want them to be
                                visible from MacOS.
       --nonvram              do not update the boot-device variable in nvram.
-      --device               yaboot auto configuration: sets the OF boot device
-                              default: hd:
-      --partition            yaboot auto configuration: sets the partition
-                              number of the root partition. default: 3
-      --timeout              yaboot auto configuration: sets the time yaboot
-                              will wait for user input before booting default
-                               image default: 40 (4 seconds)
-      --image                yaboot auto configuration: sets the path to the
-                              kernel image. default: /vmlinux
-      --label                yaboot auto configuration: sets the image label
-                               default: Linux
-      --root                 yaboot auto configuration: sets the root device
-                               default: /dev/hda3
       --force                don't ever ask for confirmation
   -v, --verbose              make $PRG more verbose
       --debug                print boring junk only useful for debugging
@@ -373,6 +364,20 @@ checkconf()
     fi
 
     if [ -n "$magicboot" ] ; then
+       ## check for bsd loader
+       if [ -n "$bsd" ] ; then
+           if [ -f /usr/lib/yaboot/ofwboot -a -r /usr/lib/yaboot/ofwboot ] ; then
+               BSDLOADER="/usr/lib/yaboot/ofwboot"
+           elif [ -f /usr/local/lib/yaboot/ofwboot -a -r /usr/local/lib/yaboot/ofwboot ] ; then
+               BSDLOADER="/usr/local/lib/yaboot/ofwboot"
+           else
+               echo 1>&2 "$PRG: /usr/local/lib/yaboot/ofwboot: No such file or directory"
+               echo 1>&2 "$PRG: With the bsd= option set you must have the bsd boot loader ofwboot"
+               CONFERR=1
+           fi
+       fi
+
+       ## convert defaultos variable
        case "$defaultos" in 
            linux|Linux|GNU|Gnu|gnu)
                defaultos=bootyaboot
@@ -757,7 +762,7 @@ util_install()
 
     ## if there is a magicboot script to install we will give it the
     ## hfstype (should be "tbxi") and give yaboot type "boot".
-    if [ "$magicboot" ] ; then
+    if [ -n "$magicboot" ] ; then
        local BTTYPE=boot
     else
        local BTTYPE="$hfstype"
@@ -827,17 +832,26 @@ util_install()
            return 1
        fi
 
-       [ "$VERBOSE" = 1 ] && echo "$PRG: Installing $bootconf to $boot..."
+       [ "$VERBOSE" = 1 ] && echo "$PRG: Installing $bootconf onto $boot..."
        hcopy -r "$bootconf" :"$CFFILE"
        if [ $? != 0 ] ; then
            echo 1>&2 "$PRG: An error occured while writing to $boot"
            return 1
        fi
 
+       if [ -n "$BSDLOADER" ] ; then
+           [ "$VERBOSE" = 1 ] && echo "$PRG: Installing $BSDLOADER onto $boot..."
+           hcopy -r "$BSDLOADER" :ofwboot
+           if [ $? != 0 ] ; then
+               echo 1>&2 "$PRG: An error occured while writing to $boot"
+               return 1
+           fi
+       fi
+
        ## set all file's attributes, if a magicboot script exists it
        ## gets the configured hfstype instead of yaboot (should be
        ## "tbxi") so it gets booted by OF.
-       if [ "$magicboot" ] ; then
+       if [ -n "$magicboot" ] ; then
            [ "$VERBOSE" = 1 ] && echo "$PRG: Setting attributes on $WRAP..."
            hattrib -t "$hfstype" -c "$hfscreator" $INVISIBLE $LOCK :ofboot.b
            if [ $? != 0 ] ; then
@@ -860,6 +874,15 @@ util_install()
            echo 1>&2 "$PRG: This is probably unimportant so we'll ignore it"
        fi
 
+       if [ -n "$BSDLOADER" ] ; then
+           [ "$VERBOSE" = 1 ] && echo "$PRG: Setting attributes on ofwboot..."
+           hattrib -t "bsdb" -c "$hfscreator" $INVISIBLE $LOCK :ofwboot
+           if [ $? != 0 ] ; then
+               echo 1>&2 "$PRG: Warning: error setting attributes on ofwboot"
+               echo 1>&2 "$PRG: This is probably unimportant so we'll ignore it"
+           fi
+       fi
+
        ## bless the root directory so OF will find the boot file
        if [ "$bless" = yes ] ; then
            [ "$VERBOSE" = 1 ] && echo "$PRG: Blessing $boot with Holy Penguin Pee..."
@@ -981,7 +1004,7 @@ mnt_install()
        local CFFILE=yaboot.conf
     fi
 
-    if [ "$magicboot" ] ; then
+    if [ -n "$magicboot" ] ; then
        local WRAP="${magicboot##*/}"
     fi
 
@@ -991,7 +1014,7 @@ mnt_install()
 
     ## repoint magicboot as the real first stage loader if using the
     ## modern automatic generating ofboot.b.
-    if [ "$FIRST" ] ; then
+    if [ -n "$FIRST" ] ; then
        magicboot="$FIRST"
        [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: set magicboot to $FIRST"
     fi
@@ -1020,7 +1043,7 @@ mnt_install()
        fi
     fi
 
-    [ "$VERBOSE" = 1 ] && echo "$INSTALLFIRST"
+    [ "$VERBOSE" = 1 ] && echo "$INSTALLPRIMARY"
     cp -f "$install" "$TARGET/$BTFILE"
     if [ $? != 0 ] ; then
        echo 1>&2 "$PRG: An error occured while writing to $boot"
@@ -1028,7 +1051,7 @@ mnt_install()
        return 1
     fi
 
-    [ "$VERBOSE" = 1 ] && echo "$PRG: Installing $bootconf on $boot..."
+    [ "$VERBOSE" = 1 ] && echo "$PRG: Installing $bootconf onto $boot..."
     cp -f "$bootconf" "$TARGET/$CFFILE"
     if [ $? != 0 ] ; then
        echo 1>&2 "$PRG: An error occured while writing to $boot"
@@ -1036,13 +1059,26 @@ mnt_install()
        return 1
     fi
 
+    if [ -n "$BSDLOADER" ] ; then
+       [ "$VERBOSE" = 1 ] && echo "$PRG: Installing $BSDLOADER onto $boot..."
+       cp -f "$BSDLOADER" "$TARGET/ofwboot"
+       if [ $? != 0 ] ; then
+           echo 1>&2 "$PRG: An error occured while writing to $boot"
+           umnt failure "$TARGET"
+           return 1
+       fi
+    fi
+
     if [ "$protect" = yes ] ; then
         [ "$VERBOSE" = 1 ] && echo "$PRG: Setting read-only attributes..."
        chmod a-w "$TARGET/$BTFILE"
        chmod a-w "$TARGET/$CFFILE"
-       if [ "$magicboot" ] ; then
+       if [ -n "$magicboot" ] ; then
            chmod a-w "$TARGET/ofboot.b"
        fi
+       if [ -n "$BSDLOADER" ] ; then
+           chmod a-w "$TARGET/ofwboot"
+       fi
     fi
 
     sync ; sync
@@ -1145,7 +1181,7 @@ mkfirststage()
     ## assign variables for configured menu options.
     [ "$usemount" = no -a "$bless" = yes ] && local YB="yaboot GNU l $ofboot ,${BS}${BS}yaboot"
     [ "$usemount" = yes -o "$bless" = no ] && local YB="yaboot GNU l $ofboot ,${OFDIR}yaboot"
-    [ -n "$bsd" ] && OS="$(($OS + 1))" && local BSD="bsd BSD b $bsd ,${BS}ofwboot.elf"
+    [ -n "$bsd" ] && OS="$(($OS + 1))" && local BSD="ybsd BSD b $ofboot ,${BS}${BS}ofwboot/$bsd"
     [ -n "$macos" ] && OS="$(($OS + 1))" && local MAC="macos MacOS m $macos ,${BS}${BS}:tbxi"
     [ -n "$macosx" ] && OS="$(($OS + 1))" && local MX="macosx MacOSX x $macosx ,${OSXBOOT}"
     [ -n "$darwin" ] && OS="$(($OS + 1))" && local DW="darwin Darwin d $darwin ,${BS}${BS}:tbxi"
@@ -1395,6 +1431,7 @@ if [ $# != 0 ] ; then
                if [ -n "$2" ] ; then
                    device="$2"
                    bootconf=auto
+                   echo 1>&2 "$PRG: WARNING: Deprecated option --device"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"
@@ -1406,6 +1443,7 @@ if [ $# != 0 ] ; then
                if [ -n "$2" ] ; then
                    timeout="$2"
                    bootconf=auto
+                   echo 1>&2 "$PRG: WARNING: Deprecated option --device"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"
@@ -1417,6 +1455,7 @@ if [ $# != 0 ] ; then
                if [ -n "$2" ] ; then
                    image="$2"
                    bootconf=auto
+                   echo 1>&2 "$PRG: WARNING: Deprecated option --device"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"
@@ -1428,6 +1467,7 @@ if [ $# != 0 ] ; then
                if [ -n "$2" ] ; then
                    label="$2"
                    bootconf=auto
+                   echo 1>&2 "$PRG: WARNING: Deprecated option --device"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"
@@ -1439,6 +1479,7 @@ if [ $# != 0 ] ; then
                if [ -n "$2" ] ; then
                    partition="$2"
                    bootconf=auto
+                   echo 1>&2 "$PRG: WARNING: Deprecated option --device"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"
@@ -1450,6 +1491,7 @@ if [ $# != 0 ] ; then
                if [ -n "$2" ] ; then
                    root="$2"
                    bootconf=auto
+                   echo 1>&2 "$PRG: WARNING: Deprecated option --device"
                    shift 2
                else
                    echo 1>&2 "$PRG: option requires an argument $1"