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