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