diff options
-rw-r--r-- | usr/src/cmd/boot/scripts/root_archive.ksh | 58 |
1 files changed, 29 insertions, 29 deletions
diff --git a/usr/src/cmd/boot/scripts/root_archive.ksh b/usr/src/cmd/boot/scripts/root_archive.ksh index f2ebf31982..bef06c8ff5 100644 --- a/usr/src/cmd/boot/scripts/root_archive.ksh +++ b/usr/src/cmd/boot/scripts/root_archive.ksh @@ -47,6 +47,7 @@ usage() printf " root_archive unpack <archive> <root>\n" printf " root_archive packmedia <solaris_image> <root>\n" printf " root_archive unpackmedia <solaris_image> <root>\n" + exit 1 } cleanup() @@ -506,8 +507,7 @@ packmedia() archive_JavaGUI "$MEDIA" "$MINIROOT" archive_Misc "$MEDIA" "$MINIROOT" archive_Perl "$MEDIA" "$MINIROOT" - MR="$MEDIA/boot/amd64/x86.miniroot" - pack + pack "$MEDIA/boot/amd64/x86.miniroot" # Now that the 64-bit archives & miniroot have been created, # restore the files from archives and save the 64-bit @@ -530,7 +530,6 @@ packmedia() archive_JavaGUI "$MEDIA" "$MINIROOT" archive_Perl "$MEDIA" "$MINIROOT" archive_Misc "$MEDIA" "$MINIROOT" - MR="$MEDIA/boot/x86.miniroot" fi # copy the install menu to menu.lst so we have a menu @@ -621,21 +620,20 @@ unpackmedia() do_unpack() { - rm -rf "$UNPACKED_ROOT" - mkdir -p "$UNPACKED_ROOT" ( cd $MNT find . -print | cpio -pdum "$UNPACKED_ROOT" 2> /dev/null ) - umount $MNT + # increase the chances the unmount will succeed + umount -f $MNT } unpack() { - + MR=$1 if [ ! -f "$MR" ] ; then + printf "$MR: not found\n" usage - exit 1 fi if [ `uname -i` = i86pc ] ; then @@ -755,10 +753,8 @@ root_is_ramdisk() pack() { - if [ ! -d "$UNPACKED_ROOT" -o -z "$MR" ] ; then - usage - exit 1 - fi + MR="$1" + [ -d "$UNPACKED_ROOT" ] || usage # always compress if fiocompress exists # @@ -862,16 +858,12 @@ while getopts s:6c opt ; do c) COMPRESS=true ;; *) usage - exit 1 ;; esac done shift `expr $OPTIND - 1` -if [ $# != 3 ] ; then - usage - exit 1 -fi +[ $# == 3 ] || usage UNPACKED_ROOT="$3" BASE="`pwd`" @@ -880,6 +872,9 @@ TMR=/tmp/mr$$ LOFIDEV= MR="$2" +# sanity check +[ "$UNPACKED_ROOT" != "/" ] || usage + if [ "`dirname $MR`" = . ] ; then MR="$BASE/$MR" fi @@ -892,32 +887,37 @@ MEDIA="$MR" trap cleanup EXIT +# always unpack into a fresh root +case $1 in + unpack|unpackmedia) + rm -rf "$UNPACKED_ROOT" + mkdir -p "$UNPACKED_ROOT" + ;; +esac +[ -d "$UNPACKED_ROOT" ] || usage + case $1 in packmedia) + packmedia "$MEDIA" "$UNPACKED_ROOT" if [ -d "$UNPACKED_ROOT/kernel/drv/sparcv9" ] ; then - ARCHIVE=sparc.miniroot + pack "$MEDIA/boot/sparc.miniroot" else - ARCHIVE=x86.miniroot + pack "$MEDIA/boot/x86.miniroot" fi - MR="$MEDIA/boot/$ARCHIVE" - - packmedia "$MEDIA" "$UNPACKED_ROOT" - pack ;; unpackmedia) if [ -f "$MEDIA/boot/sparc.miniroot" ] ; then - ARCHIVE=sparc.miniroot + unpack "$MEDIA/boot/sparc.miniroot" else - ARCHIVE=x86.miniroot + unpack "$MEDIA/boot/x86.miniroot" + unpack "$MEDIA/boot/amd64/x86.miniroot" fi - MR="$MEDIA/boot/$ARCHIVE" - unpack unpackmedia "$MEDIA" "$UNPACKED_ROOT" ;; - pack) pack + pack) pack "$MR" ;; - unpack) unpack + unpack) unpack "$MR" ;; *) usage ;; |