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