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