xref: /netbsd-src/sys/arch/sparc/stand/binstall/binstall.sh (revision fdecd6a253f999ae92b139670d9e15cc9df4497c)
1#!/bin/sh
2#	$NetBSD: binstall.sh,v 1.1 1997/06/01 03:39:24 mrg 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
13Usage () {
14	echo "Usage: $0 [-hvt] [-m<path>] net|ffs directory"
15	exit 1
16}
17
18Help () {
19	echo "This script copies the boot programs to one of several"
20	echo "commonly used places. It takes care of stripping the"
21	echo "a.out(5) header off the installed boot program on sun4 machines."
22	echo "When installing an \"ffs\" boot program, this script also runs"
23	echo "installboot(8) which installs the default proto bootblocks into"
24	echo "the appropriate filesystem partition."
25	echo "Options:"
26	echo "	-h		- display this message"
27	echo "	-m<path>	- Look for boot programs in <path> (default: /usr/mdec)"
28	echo "	-v		- verbose mode"
29	echo "	-t		- test mode (implies -v)"
30	exit 0
31}
32
33
34PATH=/bin:/usr/bin:/sbin:/usr/sbin
35MDEC=${MDEC:-/usr/mdec}
36
37set -- `getopt "hm:tv" "$@"`
38if [ $? -gt 0 ]; then
39	Usage
40fi
41
42for a in $*
43do
44	case $1 in
45	-h) Help; shift ;;
46	-m) MDEC=$2; shift 2 ;;
47	-t) TEST=1; VERBOSE=1; shift ;;
48	-v) VERBOSE=1; shift ;;
49	--) shift; break ;;
50	esac
51done
52
53DOIT=${TEST:+echo "=>"}
54
55if [ $# != 2 ]; then
56	Usage
57fi
58
59WHAT=$1
60DEST=$2
61
62if [ ! -d $DEST ]; then
63	echo "$DEST: not a directory"
64	Usage
65fi
66
67
68SKIP=0
69
70case $WHAT in
71"ffs")
72	DEV=`mount | while read line; do
73		set -- $line
74		vecho "Inspecting \"$line\""
75		if [ "$2" = "on" -a "$3" = "$DEST" ]; then
76			if [ ! -b $1 ]; then
77				continue
78			fi
79			RAW=\`echo -n "$1" | sed -e 's;/dev/;/dev/r;'\`
80			if [ ! -c \$RAW ]; then
81				continue
82			fi
83			echo -n $RAW
84			break;
85		fi
86	done`
87	if [ "$DEV" = "" ]; then
88		echo "Cannot find \"$DEST\" in mount table"
89		exit 1
90	fi
91	TARGET=$DEST/boot
92	vecho Boot device: $DEV
93	vecho Target: $TARGET
94	$DOIT dd if=${MDEC}/boot of=$TARGET bs=32 skip=$SKIP
95	sync; sync; sync
96	vecho ${MDEC}/installboot ${VERBOSE:+-v} $TARGET ${MDEC}/bootxx $DEV
97	$DOIT ${MDEC}/installboot ${VERBOSE:+-v} $TARGET ${MDEC}/bootxx $DEV
98	;;
99
100"net")
101	TARGET=$DEST/boot.sparc.netbsd
102	TMP=/tmp/boot.$$
103	vecho Target: $TARGET
104	vecho Copying to temporary file.
105	cp ${MDEC}/boot $TMP; chmod +w $TMP
106	vecho Stripping $TMP
107	strip $TMP
108	vecho Creating header magic.
109	printf '\01\03\01\07\060\200\0\07' | dd of=$TARGET bs=32 conv=sync
110	vecho Concatenating boot code.
111	dd if=$TMP of=$TARGET bs=32 skip=1 seek=1
112	rm $TMP
113	;;
114
115*)
116	echo "$WHAT: not recognised"
117	exit 1
118	;;
119esac
120
121exit $?
122