Home | History | Annotate | Line # | Download | only in binstall
binstall.sh revision 1.1
      1  1.1  mrg #!/bin/sh
      2  1.1  mrg #	$NetBSD: binstall.sh,v 1.1 1997/06/01 03:39:24 mrg Exp $
      3  1.1  mrg #
      4  1.1  mrg 
      5  1.1  mrg vecho () {
      6  1.1  mrg # echo if VERBOSE on
      7  1.1  mrg 	if [ "$VERBOSE" = "1" ]; then
      8  1.1  mrg 		echo "$@" 1>&2
      9  1.1  mrg 	fi
     10  1.1  mrg 	return 0
     11  1.1  mrg }
     12  1.1  mrg 
     13  1.1  mrg Usage () {
     14  1.1  mrg 	echo "Usage: $0 [-hvt] [-m<path>] net|ffs directory"
     15  1.1  mrg 	exit 1
     16  1.1  mrg }
     17  1.1  mrg 
     18  1.1  mrg Help () {
     19  1.1  mrg 	echo "This script copies the boot programs to one of several"
     20  1.1  mrg 	echo "commonly used places. It takes care of stripping the"
     21  1.1  mrg 	echo "a.out(5) header off the installed boot program on sun4 machines."
     22  1.1  mrg 	echo "When installing an \"ffs\" boot program, this script also runs"
     23  1.1  mrg 	echo "installboot(8) which installs the default proto bootblocks into"
     24  1.1  mrg 	echo "the appropriate filesystem partition."
     25  1.1  mrg 	echo "Options:"
     26  1.1  mrg 	echo "	-h		- display this message"
     27  1.1  mrg 	echo "	-m<path>	- Look for boot programs in <path> (default: /usr/mdec)"
     28  1.1  mrg 	echo "	-v		- verbose mode"
     29  1.1  mrg 	echo "	-t		- test mode (implies -v)"
     30  1.1  mrg 	exit 0
     31  1.1  mrg }
     32  1.1  mrg 
     33  1.1  mrg 
     34  1.1  mrg PATH=/bin:/usr/bin:/sbin:/usr/sbin
     35  1.1  mrg MDEC=${MDEC:-/usr/mdec}
     36  1.1  mrg 
     37  1.1  mrg set -- `getopt "hm:tv" "$@"`
     38  1.1  mrg if [ $? -gt 0 ]; then
     39  1.1  mrg 	Usage
     40  1.1  mrg fi
     41  1.1  mrg 
     42  1.1  mrg for a in $*
     43  1.1  mrg do
     44  1.1  mrg 	case $1 in
     45  1.1  mrg 	-h) Help; shift ;;
     46  1.1  mrg 	-m) MDEC=$2; shift 2 ;;
     47  1.1  mrg 	-t) TEST=1; VERBOSE=1; shift ;;
     48  1.1  mrg 	-v) VERBOSE=1; shift ;;
     49  1.1  mrg 	--) shift; break ;;
     50  1.1  mrg 	esac
     51  1.1  mrg done
     52  1.1  mrg 
     53  1.1  mrg DOIT=${TEST:+echo "=>"}
     54  1.1  mrg 
     55  1.1  mrg if [ $# != 2 ]; then
     56  1.1  mrg 	Usage
     57  1.1  mrg fi
     58  1.1  mrg 
     59  1.1  mrg WHAT=$1
     60  1.1  mrg DEST=$2
     61  1.1  mrg 
     62  1.1  mrg if [ ! -d $DEST ]; then
     63  1.1  mrg 	echo "$DEST: not a directory"
     64  1.1  mrg 	Usage
     65  1.1  mrg fi
     66  1.1  mrg 
     67  1.1  mrg 
     68  1.1  mrg SKIP=0
     69  1.1  mrg 
     70  1.1  mrg case $WHAT in
     71  1.1  mrg "ffs")
     72  1.1  mrg 	DEV=`mount | while read line; do
     73  1.1  mrg 		set -- $line
     74  1.1  mrg 		vecho "Inspecting \"$line\""
     75  1.1  mrg 		if [ "$2" = "on" -a "$3" = "$DEST" ]; then
     76  1.1  mrg 			if [ ! -b $1 ]; then
     77  1.1  mrg 				continue
     78  1.1  mrg 			fi
     79  1.1  mrg 			RAW=\`echo -n "$1" | sed -e 's;/dev/;/dev/r;'\`
     80  1.1  mrg 			if [ ! -c \$RAW ]; then
     81  1.1  mrg 				continue
     82  1.1  mrg 			fi
     83  1.1  mrg 			echo -n $RAW
     84  1.1  mrg 			break;
     85  1.1  mrg 		fi
     86  1.1  mrg 	done`
     87  1.1  mrg 	if [ "$DEV" = "" ]; then
     88  1.1  mrg 		echo "Cannot find \"$DEST\" in mount table"
     89  1.1  mrg 		exit 1
     90  1.1  mrg 	fi
     91  1.1  mrg 	TARGET=$DEST/boot
     92  1.1  mrg 	vecho Boot device: $DEV
     93  1.1  mrg 	vecho Target: $TARGET
     94  1.1  mrg 	$DOIT dd if=${MDEC}/boot of=$TARGET bs=32 skip=$SKIP
     95  1.1  mrg 	sync; sync; sync
     96  1.1  mrg 	vecho ${MDEC}/installboot ${VERBOSE:+-v} $TARGET ${MDEC}/bootxx $DEV
     97  1.1  mrg 	$DOIT ${MDEC}/installboot ${VERBOSE:+-v} $TARGET ${MDEC}/bootxx $DEV
     98  1.1  mrg 	;;
     99  1.1  mrg 
    100  1.1  mrg "net")
    101  1.1  mrg 	TARGET=$DEST/boot.sparc.netbsd
    102  1.1  mrg 	TMP=/tmp/boot.$$
    103  1.1  mrg 	vecho Target: $TARGET
    104  1.1  mrg 	vecho Copying to temporary file.
    105  1.1  mrg 	cp ${MDEC}/boot $TMP; chmod +w $TMP
    106  1.1  mrg 	vecho Stripping $TMP
    107  1.1  mrg 	strip $TMP
    108  1.1  mrg 	vecho Creating header magic.
    109  1.1  mrg 	printf '\01\03\01\07\060\200\0\07' | dd of=$TARGET bs=32 conv=sync
    110  1.1  mrg 	vecho Concatenating boot code.
    111  1.1  mrg 	dd if=$TMP of=$TARGET bs=32 skip=1 seek=1
    112  1.1  mrg 	rm $TMP
    113  1.1  mrg 	;;
    114  1.1  mrg 
    115  1.1  mrg *)
    116  1.1  mrg 	echo "$WHAT: not recognised"
    117  1.1  mrg 	exit 1
    118  1.1  mrg 	;;
    119  1.1  mrg esac
    120  1.1  mrg 
    121  1.1  mrg exit $?
    122