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