Home | History | Annotate | Line # | Download | only in binstall
binstall.sh revision 1.4
      1  1.1  mrg #!/bin/sh
      2  1.4   pk #	$NetBSD: binstall.sh,v 1.4 2000/02/15 16:15:07 pk 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.4   pk 	echo "	-b<bootprog>	- second-stage boot program to install"
     28  1.1  mrg 	echo "	-m<path>	- Look for boot programs in <path> (default: /usr/mdec)"
     29  1.1  mrg 	echo "	-v		- verbose mode"
     30  1.1  mrg 	echo "	-t		- test mode (implies -v)"
     31  1.1  mrg 	exit 0
     32  1.1  mrg }
     33  1.1  mrg 
     34  1.3  kim Secure () {
     35  1.3  kim 	echo "This script has to be run when the kernel is in 'insecure' mode."
     36  1.3  kim 	echo "The best way is to run this script in single-user mode."
     37  1.3  kim 	exit 1
     38  1.3  kim }
     39  1.1  mrg 
     40  1.1  mrg PATH=/bin:/usr/bin:/sbin:/usr/sbin
     41  1.1  mrg MDEC=${MDEC:-/usr/mdec}
     42  1.4   pk BOOTPROG=${BOOTPROG:-boot}
     43  1.3  kim 
     44  1.3  kim if [ "`sysctl -n kern.securelevel`" -gt 0 ]; then
     45  1.3  kim 	Secure
     46  1.3  kim fi
     47  1.1  mrg 
     48  1.4   pk set -- `getopt "b:hm:tv" "$@"`
     49  1.1  mrg if [ $? -gt 0 ]; then
     50  1.1  mrg 	Usage
     51  1.1  mrg fi
     52  1.1  mrg 
     53  1.1  mrg for a in $*
     54  1.1  mrg do
     55  1.1  mrg 	case $1 in
     56  1.1  mrg 	-h) Help; shift ;;
     57  1.4   pk 	-b) BOOTPROG=$2; shift 2 ;;
     58  1.1  mrg 	-m) MDEC=$2; shift 2 ;;
     59  1.1  mrg 	-t) TEST=1; VERBOSE=1; shift ;;
     60  1.1  mrg 	-v) VERBOSE=1; shift ;;
     61  1.1  mrg 	--) shift; break ;;
     62  1.1  mrg 	esac
     63  1.1  mrg done
     64  1.1  mrg 
     65  1.1  mrg DOIT=${TEST:+echo "=>"}
     66  1.1  mrg 
     67  1.1  mrg if [ $# != 2 ]; then
     68  1.1  mrg 	Usage
     69  1.1  mrg fi
     70  1.1  mrg 
     71  1.1  mrg WHAT=$1
     72  1.1  mrg DEST=$2
     73  1.1  mrg 
     74  1.1  mrg if [ ! -d $DEST ]; then
     75  1.1  mrg 	echo "$DEST: not a directory"
     76  1.1  mrg 	Usage
     77  1.1  mrg fi
     78  1.1  mrg 
     79  1.1  mrg 
     80  1.1  mrg SKIP=0
     81  1.1  mrg 
     82  1.1  mrg case $WHAT in
     83  1.1  mrg "ffs")
     84  1.1  mrg 	DEV=`mount | while read line; do
     85  1.1  mrg 		set -- $line
     86  1.1  mrg 		vecho "Inspecting \"$line\""
     87  1.1  mrg 		if [ "$2" = "on" -a "$3" = "$DEST" ]; then
     88  1.1  mrg 			if [ ! -b $1 ]; then
     89  1.1  mrg 				continue
     90  1.1  mrg 			fi
     91  1.1  mrg 			RAW=\`echo -n "$1" | sed -e 's;/dev/;/dev/r;'\`
     92  1.1  mrg 			if [ ! -c \$RAW ]; then
     93  1.1  mrg 				continue
     94  1.1  mrg 			fi
     95  1.1  mrg 			echo -n $RAW
     96  1.1  mrg 			break;
     97  1.1  mrg 		fi
     98  1.1  mrg 	done`
     99  1.1  mrg 	if [ "$DEV" = "" ]; then
    100  1.1  mrg 		echo "Cannot find \"$DEST\" in mount table"
    101  1.1  mrg 		exit 1
    102  1.1  mrg 	fi
    103  1.1  mrg 	TARGET=$DEST/boot
    104  1.1  mrg 	vecho Boot device: $DEV
    105  1.1  mrg 	vecho Target: $TARGET
    106  1.4   pk 	$DOIT dd if=${MDEC}/${BOOTPROG} of=$TARGET bs=32 skip=$SKIP
    107  1.1  mrg 	sync; sync; sync
    108  1.1  mrg 	vecho ${MDEC}/installboot ${VERBOSE:+-v} $TARGET ${MDEC}/bootxx $DEV
    109  1.1  mrg 	$DOIT ${MDEC}/installboot ${VERBOSE:+-v} $TARGET ${MDEC}/bootxx $DEV
    110  1.1  mrg 	;;
    111  1.1  mrg 
    112  1.1  mrg "net")
    113  1.1  mrg 	TARGET=$DEST/boot.sparc.netbsd
    114  1.1  mrg 	vecho Target: $TARGET
    115  1.2   pk 	cp -f ${MDEC}/boot.net $TARGET
    116  1.1  mrg 	;;
    117  1.1  mrg 
    118  1.1  mrg *)
    119  1.1  mrg 	echo "$WHAT: not recognised"
    120  1.1  mrg 	exit 1
    121  1.1  mrg 	;;
    122  1.1  mrg esac
    123  1.1  mrg 
    124  1.1  mrg exit $?
    125