Home | History | Annotate | Line # | Download | only in binstall
binstall.sh revision 1.10
      1   1.1  mrg #!/bin/sh
      2  1.10  mrg #	$NetBSD: binstall.sh,v 1.10 2002/01/02 04:13:42 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.10  mrg Options () {
     14  1.10  mrg 	echo "Options:"
     15  1.10  mrg 	echo "	-h		- display this message"
     16  1.10  mrg 	echo "	-u		- install sparc64 (UltraSPARC) boot block"
     17  1.10  mrg 	echo "	-U		- install sparc boot block"
     18  1.10  mrg 	echo "	-b<bootprog>	- second-stage boot program to install"
     19  1.10  mrg 	echo "	-f<pathname>	- path to device/file image for filesystem"
     20  1.10  mrg 	echo "	-m<path>	- Look for boot programs in <path> (default: /usr/mdec)"
     21  1.10  mrg 	echo "	-i<progname>	- Use the installboot program at <progname>"
     22  1.10  mrg 	echo "			  (default: /usr/mdec/installboot)"
     23  1.10  mrg 	echo "	-v		- verbose mode"
     24  1.10  mrg 	echo "	-t		- test mode (implies -v)"
     25  1.10  mrg }
     26  1.10  mrg 
     27   1.1  mrg Usage () {
     28  1.10  mrg 	echo "Usage: $0 [options] <"'"net"|"ffs"'"> <directory>"
     29  1.10  mrg 	Options
     30   1.1  mrg 	exit 1
     31   1.1  mrg }
     32   1.1  mrg 
     33   1.1  mrg Help () {
     34   1.1  mrg 	echo "This script copies the boot programs to one of several"
     35   1.1  mrg 	echo "commonly used places. It takes care of stripping the"
     36   1.1  mrg 	echo "a.out(5) header off the installed boot program on sun4 machines."
     37   1.1  mrg 	echo "When installing an \"ffs\" boot program, this script also runs"
     38   1.1  mrg 	echo "installboot(8) which installs the default proto bootblocks into"
     39   1.1  mrg 	echo "the appropriate filesystem partition."
     40  1.10  mrg 	Options
     41   1.1  mrg 	exit 0
     42   1.1  mrg }
     43   1.1  mrg 
     44   1.3  kim Secure () {
     45   1.8  jmc 	echo "This script has to be run when the kernel is in 'insecure' mode,"
     46   1.8  jmc 	echo "or when applying bootblocks to a file image (ala vnd)."
     47   1.3  kim 	echo "The best way is to run this script in single-user mode."
     48   1.3  kim 	exit 1
     49   1.3  kim }
     50   1.1  mrg 
     51   1.1  mrg PATH=/bin:/usr/bin:/sbin:/usr/sbin
     52   1.1  mrg MDEC=${MDEC:-/usr/mdec}
     53  1.10  mrg INSTALLBOOT=${INSTALLBOOT:=${MDEC}/installboot}
     54   1.4   pk BOOTPROG=${BOOTPROG:-boot}
     55   1.6  mrg OFWBOOT=${OFWBOOTBLK:-ofwboot}
     56   1.7  mrg if [ "`sysctl -n hw.machine`" = sparc64 ]; then
     57   1.5  mrg 	ULTRASPARC=1
     58   1.5  mrg else
     59   1.5  mrg 	ULTRASPARC=0
     60   1.5  mrg fi
     61   1.3  kim 
     62  1.10  mrg set -- `getopt "b:hf:i:m:tUuv" "$@"`
     63   1.1  mrg if [ $? -gt 0 ]; then
     64   1.1  mrg 	Usage
     65   1.1  mrg fi
     66   1.1  mrg 
     67   1.1  mrg for a in $*
     68   1.1  mrg do
     69   1.1  mrg 	case $1 in
     70   1.1  mrg 	-h) Help; shift ;;
     71   1.5  mrg 	-u) ULTRASPARC=1; shift ;;
     72   1.7  mrg 	-U) ULTRASPARC=0; shift ;;
     73   1.5  mrg 	-b) BOOTPROG=$2; OFWBOOT=$2; shift 2 ;;
     74   1.8  jmc 	-f) FILENAME=$2; shift 2 ;;
     75   1.1  mrg 	-m) MDEC=$2; shift 2 ;;
     76  1.10  mrg 	-i) INSTALLBOOT=$2; shift 2 ;;
     77   1.1  mrg 	-t) TEST=1; VERBOSE=1; shift ;;
     78   1.1  mrg 	-v) VERBOSE=1; shift ;;
     79   1.1  mrg 	--) shift; break ;;
     80   1.1  mrg 	esac
     81   1.1  mrg done
     82   1.1  mrg 
     83   1.8  jmc if [ "`sysctl -n kern.securelevel`" -gt 0 ] && [ ! -f "$FILENAME" ]; then
     84   1.8  jmc 	Secure
     85   1.8  jmc fi
     86   1.8  jmc 
     87   1.1  mrg DOIT=${TEST:+echo "=>"}
     88   1.1  mrg 
     89   1.1  mrg if [ $# != 2 ]; then
     90   1.1  mrg 	Usage
     91   1.1  mrg fi
     92   1.1  mrg 
     93   1.1  mrg WHAT=$1
     94   1.1  mrg DEST=$2
     95   1.1  mrg 
     96   1.1  mrg if [ ! -d $DEST ]; then
     97   1.1  mrg 	echo "$DEST: not a directory"
     98   1.1  mrg 	Usage
     99   1.1  mrg fi
    100   1.1  mrg 
    101   1.5  mrg SKIP=0
    102   1.1  mrg 
    103   1.5  mrg if [ "$ULTRASPARC" = "1" ]; then
    104   1.5  mrg 	targ=ofwboot
    105   1.6  mrg 	netboot=ofwboot.net
    106   1.5  mrg 	nettarg=boot.sparc.netbsd
    107   1.5  mrg 	BOOTPROG=$OFWBOOT
    108   1.5  mrg else
    109   1.5  mrg 	targ=boot
    110   1.5  mrg 	netboot=boot.net
    111   1.5  mrg 	nettarg=boot.sparc64.netbsd
    112   1.5  mrg fi
    113   1.1  mrg 
    114   1.1  mrg case $WHAT in
    115   1.1  mrg "ffs")
    116   1.1  mrg 	DEV=`mount | while read line; do
    117   1.1  mrg 		set -- $line
    118   1.1  mrg 		vecho "Inspecting \"$line\""
    119   1.1  mrg 		if [ "$2" = "on" -a "$3" = "$DEST" ]; then
    120   1.1  mrg 			if [ ! -b $1 ]; then
    121   1.1  mrg 				continue
    122   1.1  mrg 			fi
    123   1.1  mrg 			RAW=\`echo -n "$1" | sed -e 's;/dev/;/dev/r;'\`
    124   1.1  mrg 			if [ ! -c \$RAW ]; then
    125   1.1  mrg 				continue
    126   1.1  mrg 			fi
    127   1.1  mrg 			echo -n $RAW
    128   1.1  mrg 			break;
    129   1.1  mrg 		fi
    130   1.1  mrg 	done`
    131   1.8  jmc 	if [ "$FILENAME" != "" ]; then
    132   1.8  jmc 		DEV=$FILENAME
    133   1.8  jmc 	fi
    134   1.1  mrg 	if [ "$DEV" = "" ]; then
    135   1.1  mrg 		echo "Cannot find \"$DEST\" in mount table"
    136   1.1  mrg 		exit 1
    137   1.1  mrg 	fi
    138   1.5  mrg 	TARGET=$DEST/$targ
    139   1.1  mrg 	vecho Boot device: $DEV
    140   1.1  mrg 	vecho Target: $TARGET
    141   1.4   pk 	$DOIT dd if=${MDEC}/${BOOTPROG} of=$TARGET bs=32 skip=$SKIP
    142   1.1  mrg 	sync; sync; sync
    143   1.5  mrg 	if [ "$ULTRASPARC" = "1" ]; then
    144  1.10  mrg 		vecho ${INSTALLBOOT} -u ${VERBOSE:+-v} ${MDEC}/bootblk $DEV
    145  1.10  mrg 		$DOIT ${INSTALLBOOT} -u ${VERBOSE:+-v} ${MDEC}/bootblk $DEV
    146   1.5  mrg 	else
    147  1.10  mrg 		vecho ${INSTALLBOOT} ${VERBOSE:+-v} $TARGET ${MDEC}/bootxx $DEV
    148  1.10  mrg 		$DOIT ${INSTALLBOOT} ${VERBOSE:+-v} $TARGET ${MDEC}/bootxx $DEV
    149   1.5  mrg 	fi
    150   1.1  mrg 	;;
    151   1.1  mrg 
    152   1.1  mrg "net")
    153   1.5  mrg 	TARGET=$DEST/$nettarg
    154   1.1  mrg 	vecho Target: $TARGET
    155   1.5  mrg 	$DOIT cp -f ${MDEC}/$netboot $TARGET
    156   1.1  mrg 	;;
    157   1.1  mrg 
    158   1.1  mrg *)
    159   1.1  mrg 	echo "$WHAT: not recognised"
    160   1.1  mrg 	exit 1
    161   1.1  mrg 	;;
    162   1.1  mrg esac
    163   1.1  mrg 
    164   1.1  mrg exit $?
    165