X-Git-Url: http://git.ozlabs.org/?p=yaboot.git;a=blobdiff_plain;f=ybin%2Fybin;h=44e63f4468090698d9b62b22f9c76f00561e7850;hp=a3d94d1a83434cbb6808a3cbe8865e77fffddfc7;hb=e7532e2d520fc84bf9c68fd6b94cf0d3b20cf2b1;hpb=ad8f878934b10bf3baba4eb82073244932c2c4a2 diff --git a/ybin/ybin b/ybin/ybin index a3d94d1..44e63f4 100755 --- 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.16 DEBUG=0 VERBOSE=0 TMP="${TMPDIR:-/tmp}" @@ -63,7 +63,7 @@ fi ## 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 @@ -124,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. -if (command -v id > /dev/null 2>&1) ; then +if (command -v id > /dev/null 2>&1) ; then true else id() @@ -155,6 +155,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 ] @@ -300,7 +302,7 @@ checkconf() fi local CONFERR=1 fi - + if [ `echo ${#hfscreator}` != 4 ] ; then if [ "$ARGCT" = 1 ] ; then echo 1>&2 "$PRG: --creator must be 4 characters" @@ -386,7 +388,7 @@ checkconf() fi ## convert defaultos variable - case "$defaultos" in + case "$defaultos" in linux|Linux|GNU|Gnu|gnu) defaultos=bootyaboot ;; @@ -728,7 +730,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 -## not (or could in the future). +## not (or could in the future). hack_yaboot() { local YBDIR="${install%/*}" @@ -790,7 +792,7 @@ util_install() ## 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 @@ -804,7 +806,7 @@ util_install() if [ "$protect" = yes ] ; then local LOCK="+l" fi - + if [ "$hide" = yes ] ; then local INVISIBLE="+i" fi @@ -1008,7 +1010,7 @@ umnt() mnt_install() { local BTFILE=yaboot - + ## msdosfs is broken, yaboot may not support this filename. if [ "$fstype" = msdos ] ; then local CFFILE=yaboot.cnf @@ -1122,7 +1124,7 @@ mnt_install() } ## 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 @@ -1150,6 +1152,7 @@ raw_install() fi sync ; sync [ "$VERBOSE" = 1 ] && echo "$PRG: Installation successful" + return 0 } ## make sure the first stage ofboot generator is compatible. @@ -1244,7 +1247,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 - fi + fi mkdosfs -n bootstrap "$boot" > /dev/null if [ $? != 0 ] ; then echo 1>&2 "$PRG: DOS filesystem creation failed!" @@ -1326,7 +1329,7 @@ cleanup() ## 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 @@ -1377,6 +1380,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 +1657,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