Home | History | Annotate | Line # | Download | only in binstall
binstall.sh revision 1.16
      1   1.1    mrg #!/bin/sh
      2  1.16    kre #	$NetBSD: binstall.sh,v 1.16 2018/09/16 14:23:04 kre 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.11     pk 	echo "			  (default: /usr/sbin/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.11     pk 	echo "commonly used places."
     36   1.1    mrg 	echo "When installing an \"ffs\" boot program, this script also runs"
     37   1.1    mrg 	echo "installboot(8) which installs the default proto bootblocks into"
     38  1.11     pk 	echo "the appropriate filesystem partition or filesystem image."
     39  1.10    mrg 	Options
     40   1.1    mrg 	exit 0
     41   1.1    mrg }
     42   1.1    mrg 
     43   1.3    kim Secure () {
     44   1.8    jmc 	echo "This script has to be run when the kernel is in 'insecure' mode,"
     45   1.8    jmc 	echo "or when applying bootblocks to a file image (ala vnd)."
     46   1.3    kim 	echo "The best way is to run this script in single-user mode."
     47   1.3    kim 	exit 1
     48   1.3    kim }
     49   1.1    mrg 
     50   1.1    mrg PATH=/bin:/usr/bin:/sbin:/usr/sbin
     51  1.12  lukem : ${MDEC:=/usr/mdec}
     52  1.12  lukem : ${INSTALLBOOT:=/usr/sbin/installboot}
     53  1.12  lukem : ${BOOTPROG:=boot}
     54  1.12  lukem : ${OFWBOOTBLK:=ofwboot}
     55  1.15     he if [ "`sysctl -n machdep.cpu_arch`" = 9 ]; then
     56   1.5    mrg 	ULTRASPARC=1
     57   1.5    mrg else
     58   1.5    mrg 	ULTRASPARC=0
     59   1.5    mrg fi
     60   1.3    kim 
     61  1.10    mrg set -- `getopt "b:hf:i:m:tUuv" "$@"`
     62   1.1    mrg if [ $? -gt 0 ]; then
     63   1.1    mrg 	Usage
     64   1.1    mrg fi
     65   1.1    mrg 
     66   1.1    mrg for a in $*
     67   1.1    mrg do
     68   1.1    mrg 	case $1 in
     69   1.1    mrg 	-h) Help; shift ;;
     70   1.5    mrg 	-u) ULTRASPARC=1; shift ;;
     71   1.7    mrg 	-U) ULTRASPARC=0; shift ;;
     72  1.12  lukem 	-b) BOOTPROG=$2; OFWBOOTBLK=$2; shift 2 ;;
     73  1.11     pk 	-f) DEV=$2; shift 2 ;;
     74   1.1    mrg 	-m) MDEC=$2; shift 2 ;;
     75  1.10    mrg 	-i) INSTALLBOOT=$2; shift 2 ;;
     76   1.1    mrg 	-t) TEST=1; VERBOSE=1; shift ;;
     77   1.1    mrg 	-v) VERBOSE=1; shift ;;
     78   1.1    mrg 	--) shift; break ;;
     79   1.1    mrg 	esac
     80   1.1    mrg done
     81   1.1    mrg 
     82  1.11     pk if [ "`sysctl -n kern.securelevel`" -gt 0 ] && [ ! -f "$DEV" ]; then
     83   1.8    jmc 	Secure
     84   1.8    jmc fi
     85   1.8    jmc 
     86   1.1    mrg DOIT=${TEST:+echo "=>"}
     87   1.1    mrg 
     88   1.1    mrg if [ $# != 2 ]; then
     89   1.1    mrg 	Usage
     90   1.1    mrg fi
     91   1.1    mrg 
     92   1.1    mrg WHAT=$1
     93   1.1    mrg DEST=$2
     94   1.1    mrg 
     95   1.1    mrg if [ ! -d $DEST ]; then
     96   1.1    mrg 	echo "$DEST: not a directory"
     97   1.1    mrg 	Usage
     98   1.1    mrg fi
     99   1.1    mrg 
    100   1.5    mrg if [ "$ULTRASPARC" = "1" ]; then
    101  1.11     pk 	machine=sparc64
    102   1.5    mrg 	targ=ofwboot
    103  1.15     he 	stage2=""
    104  1.13    mrg 	netboot=ofwboot
    105  1.12  lukem 	BOOTPROG=$OFWBOOTBLK
    106  1.11     pk 	BOOTXX=${MDEC}/bootblk
    107   1.5    mrg else
    108  1.11     pk 	machine=sparc
    109   1.5    mrg 	targ=boot
    110  1.15     he 	stage2=${targ}
    111   1.5    mrg 	netboot=boot.net
    112  1.11     pk 	BOOTXX=${MDEC}/bootxx
    113   1.5    mrg fi
    114   1.1    mrg 
    115   1.1    mrg case $WHAT in
    116   1.1    mrg "ffs")
    117  1.11     pk 	if [ "$DEV" = "" ]; then
    118  1.11     pk 		# Lookup device mounted on DEST
    119  1.11     pk 		DEV=`mount | while read line; do
    120  1.11     pk 			set -- $line
    121  1.11     pk 			vecho "Inspecting \"$line\""
    122  1.16    kre 			if [ "$2" = "on" ] && [ "$3" = "$DEST" ]; then
    123  1.11     pk 				if [ ! -b $1 ]; then
    124  1.11     pk 					continue
    125  1.11     pk 				fi
    126  1.11     pk 				RAW=\`echo -n "$1" | sed -e 's;/dev/;/dev/r;'\`
    127  1.11     pk 				if [ ! -c \$RAW ]; then
    128  1.11     pk 					continue
    129  1.11     pk 				fi
    130  1.11     pk 				echo -n $RAW
    131  1.11     pk 				break;
    132   1.1    mrg 			fi
    133  1.11     pk 		done`
    134  1.11     pk 		if [ "$DEV" = "" ]; then
    135  1.11     pk 			echo "Cannot find \"$DEST\" in mount table"
    136  1.11     pk 			exit 1
    137   1.1    mrg 		fi
    138   1.8    jmc 	fi
    139  1.11     pk 
    140   1.1    mrg 	vecho Boot device: $DEV
    141  1.11     pk 	vecho Primary boot program: $BOOTXX
    142  1.11     pk 	vecho Secondary boot program: $DEST/$targ
    143  1.11     pk 
    144  1.11     pk 	$DOIT cp -p -f ${MDEC}/${BOOTPROG} $DEST/$targ
    145   1.1    mrg 	sync; sync; sync
    146  1.15     he 	vecho ${INSTALLBOOT} ${VERBOSE:+-v} -m $machine $DEV ${BOOTXX} $stage2
    147  1.15     he 	$DOIT ${INSTALLBOOT} ${VERBOSE:+-v} -m $machine $DEV ${BOOTXX} $stage2
    148   1.1    mrg 	;;
    149   1.1    mrg 
    150   1.1    mrg "net")
    151  1.11     pk 	vecho Network boot program: $DEST/$boot.${machine}.netbsd
    152  1.11     pk 	$DOIT cp -p -f ${MDEC}/$netboot $DEST/$boot.${machine}.netbsd
    153   1.1    mrg 	;;
    154   1.1    mrg 
    155   1.1    mrg *)
    156   1.1    mrg 	echo "$WHAT: not recognised"
    157   1.1    mrg 	exit 1
    158   1.1    mrg 	;;
    159   1.1    mrg esac
    160   1.1    mrg 
    161   1.1    mrg exit $?
    162