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