sunbootcd.sh revision 1.7 1 1.1 lukem #! /bin/sh
2 1.1 lukem #
3 1.7 kre # $NetBSD: sunbootcd.sh,v 1.7 2018/09/16 21:41:34 kre Exp $
4 1.1 lukem #
5 1.1 lukem # Copyright (c) 2003 The NetBSD Foundation, Inc.
6 1.1 lukem # All rights reserved.
7 1.1 lukem #
8 1.1 lukem # This code is derived from software contributed to The NetBSD Foundation
9 1.1 lukem # by Luke Mewburn.
10 1.1 lukem #
11 1.1 lukem # Redistribution and use in source and binary forms, with or without
12 1.1 lukem # modification, are permitted provided that the following conditions
13 1.1 lukem # are met:
14 1.1 lukem # 1. Redistributions of source code must retain the above copyright
15 1.1 lukem # notice, this list of conditions and the following disclaimer.
16 1.1 lukem # 2. Redistributions in binary form must reproduce the above copyright
17 1.1 lukem # notice, this list of conditions and the following disclaimer in the
18 1.1 lukem # documentation and/or other materials provided with the distribution.
19 1.1 lukem #
20 1.1 lukem # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
21 1.1 lukem # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22 1.1 lukem # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 1.1 lukem # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
24 1.1 lukem # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 1.1 lukem # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 1.1 lukem # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 1.1 lukem # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 1.1 lukem # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 1.1 lukem # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 1.1 lukem # POSSIBILITY OF SUCH DAMAGE.
31 1.1 lukem #
32 1.1 lukem
33 1.3 lukem : ${SUNLABEL:=sunlabel} # sunlabel(8)
34 1.1 lukem : ${CYLSIZE:=640} # Cylinder size, in 512byte blocks
35 1.1 lukem
36 1.1 lukem PROGNAME=${0##*/}
37 1.1 lukem FORMAT="%-8s offset %4d, size %4d, file %s\n"
38 1.1 lukem
39 1.1 lukem
40 1.1 lukem usage()
41 1.1 lukem {
42 1.1 lukem cat 1>&2 << _USAGE_
43 1.1 lukem Usage: ${PROGNAME} fsimage sun4 [sun4c [sun4m [sun3|sun4d [sun3x|sun4u]]]]
44 1.1 lukem Combine file system partitions for Sun Microsystems, Inc. computers
45 1.4 snj into a CD-ROM file system image suitable for booting on the
46 1.1 lukem following platforms:
47 1.1 lukem NetBSD/sun3: sun3, sun3x
48 1.1 lukem NetBSD/sparc: sun4, sun4c, sun4d, sun4m
49 1.1 lukem NetBSD/sparc64: sun4u
50 1.1 lukem The architecture arguments must be bootable file system image
51 1.1 lukem for that architecture, or \`-' if no entry is desired.
52 1.1 lukem \`fsimage' is typically an iso9660 file system image, although
53 1.6 martin any type of file system can be used as long as the first 512
54 1.1 lukem bytes of the image are not used. \`fsimage' is modified, and
55 1.1 lukem the additional partitions are added in order. If the same
56 1.1 lukem filename is used more than once for different architectures,
57 1.1 lukem it will only be copied once.
58 1.1 lukem _USAGE_
59 1.1 lukem exit 1
60 1.1 lukem }
61 1.1 lukem
62 1.7 kre case "$#" in
63 1.7 kre ([23456]) ;;
64 1.7 kre (*) usage;;
65 1.7 kre esac
66 1.1 lukem
67 1.7 kre for curfile
68 1.7 kre do
69 1.1 lukem [ "$curfile" = "-" ] && continue
70 1.1 lukem if [ ! -f "$curfile" ]; then
71 1.1 lukem echo 1>&2 "${PROGNAME}: ${curfile}: No such file."
72 1.1 lukem exit 1
73 1.1 lukem fi
74 1.1 lukem done
75 1.1 lukem
76 1.1 lukem ISOIMAGE="$1"; shift
77 1.1 lukem
78 1.1 lukem ISOSIZE=$( ls -l "${ISOIMAGE}" | awk '{print $5}' )
79 1.1 lukem ISOBLKS=$(( (${ISOSIZE} + 511) / 512 ))
80 1.1 lukem ISOCYLS=$(( (${ISOBLKS} + (${CYLSIZE} - 1)) / ${CYLSIZE} ))
81 1.1 lukem
82 1.1 lukem printf "${FORMAT}" "fsimage:" 0 ${ISOCYLS} "${ISOIMAGE}"
83 1.1 lukem
84 1.1 lukem ENDCYL=${ISOCYLS}
85 1.1 lukem curpart=0
86 1.7 kre for curfile
87 1.7 kre do
88 1.1 lukem curpart=$(( ${curpart} + 1 ))
89 1.1 lukem [ "$curfile" = "-" ] && continue
90 1.1 lukem
91 1.1 lukem tpart=1
92 1.1 lukem curoff=${ENDCYL}
93 1.1 lukem while [ ${tpart} -lt ${curpart} ]; do
94 1.1 lukem tfile=$(eval echo \$PART${tpart}FILE)
95 1.1 lukem if [ "${curfile}" = "${tfile}" ]; then
96 1.1 lukem curoff=$(eval echo \$PART${tpart}OFF)
97 1.1 lukem break
98 1.1 lukem fi
99 1.1 lukem tpart=$(( ${tpart} + 1 ))
100 1.1 lukem done
101 1.1 lukem
102 1.1 lukem cursize=$( ls -l "${curfile}" | awk '{print $5}' )
103 1.1 lukem curblks=$(( (${cursize} + 511) / 512 ))
104 1.1 lukem curcyls=$(( (${curblks} + (${CYLSIZE} - 1)) / ${CYLSIZE} ))
105 1.1 lukem printf "${FORMAT}" "Image ${curpart}:" ${curoff} ${curcyls} "${curfile}"
106 1.1 lukem
107 1.1 lukem eval PART${curpart}SIZE=${cursize} \
108 1.1 lukem PART${curpart}BLKS=${curblks} \
109 1.1 lukem PART${curpart}CYLS=${curcyls} \
110 1.1 lukem PART${curpart}OFF=${curoff} \
111 1.1 lukem PART${curpart}FILE="${curfile}"
112 1.1 lukem
113 1.1 lukem if [ $curoff -eq $ENDCYL ]; then # append ${curfile}
114 1.1 lukem echo " (appending ${curfile} to ${ISOIMAGE})"
115 1.1 lukem dd if="${curfile}" of="${ISOIMAGE}" bs=${CYLSIZE}b \
116 1.1 lukem seek=${ENDCYL} conv=notrunc,sync 2>/dev/null
117 1.1 lukem ENDCYL=$(( $ENDCYL + $curcyls ))
118 1.1 lukem fi
119 1.1 lukem
120 1.1 lukem done
121 1.1 lukem
122 1.1 lukem printf "${FORMAT}" "Final:" 0 ${ENDCYL} "${ISOIMAGE}"
123 1.1 lukem
124 1.1 lukem ${SUNLABEL} -nq "${ISOIMAGE}" << _partinfo_
125 1.1 lukem V nsect ${CYLSIZE}
126 1.1 lukem V nhead 1
127 1.1 lukem V rpm 300
128 1.1 lukem V pcyl ${ENDCYL}
129 1.1 lukem V ncyl ${ENDCYL}
130 1.1 lukem a 0 $(( ${ISOCYLS} * ${CYLSIZE} ))
131 1.1 lukem b ${PART1OFF:-0} $(( ${PART1CYLS:-0} * ${CYLSIZE} ))
132 1.1 lukem c ${PART2OFF:-0} $(( ${PART2CYLS:-0} * ${CYLSIZE} ))
133 1.1 lukem d ${PART3OFF:-0} $(( ${PART3CYLS:-0} * ${CYLSIZE} ))
134 1.1 lukem e ${PART4OFF:-0} $(( ${PART4CYLS:-0} * ${CYLSIZE} ))
135 1.1 lukem f ${PART5OFF:-0} $(( ${PART5CYLS:-0} * ${CYLSIZE} ))
136 1.1 lukem W
137 1.1 lukem _partinfo_
138