1 #! /usr/bin/ksh -p
2 #
3 # CDDL HEADER START
4 #
5 # The contents of this file are subject to the terms of the
6 # Common Development and Distribution License (the "License").
7 # You may not use this file except in compliance with the License.
8 #
9 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 # or http://www.opensolaris.org/os/licensing.
11 # See the License for the specific language governing permissions
12 # and limitations under the License.
13 #
14 # When distributing Covered Code, include this CDDL HEADER in each
15 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 # If applicable, add the following below this CDDL HEADER, with the
17 # fields enclosed by brackets "[]" replaced with your own identifying
18 # information: Portions Copyright [yyyy] [name of copyright owner]
19 #
20 # CDDL HEADER END
21 #
22
23 #
24 # Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
25 #
26 # Create an encumbered binaries tarball from a full build proto area,
27 # less the contents of an OpenSolaris proto area. Special handling
28 # for crypto binaries that need to be signed by Sun Release
29 # Engineering.
30 #
31
32 usage="bindrop [-n] basename"
33
34 isa=`uname -p`
35
36 PATH="$PATH:/usr/bin:/usr/sfw/bin"
37
38 function fail {
39 print -u2 "bindrop: $@"
40 exit 1
41 }
42
43 function warn {
44 print -u2 "bindrop: warning: $@"
45 }
46
47 [[ -n "$SRC" ]] || fail "SRC must be set."
48 [[ -n "$CODEMGR_WS" ]] || fail "CODEMGR_WS must be set."
49
50 #
51 # Create the README from boilerplate and the contents of the closed
52 # binary tree.
53 #
54 # usage: mkreadme targetdir
55 #
56 function mkreadme {
57 typeset targetdir="$1"
58 typeset readme="README.ON-BINARIES.$isa"
59
60 sed -e s/@ISA@/$isa/ -e s/@DELIVERY@/ON-BINARIES/ \
61 "$SRC/tools/opensolaris/README.binaries.tmpl" > "$targetdir/$readme"
62 (cd "$targetdir"; find "$rootdir" -type f -print | \
63 sort >> "$targetdir/$readme")
64 }
65
66 nondebug=n
67 while getopts n flag; do
68 case $flag in
69 n)
70 nondebug=y
71 ;;
72 ?)
73 print -u2 "usage: $usage"
74 exit 1
75 ;;
76 esac
77 done
78 shift $(($OPTIND - 1))
79
80 if [[ $# -ne 1 ]]; then
81 print -u2 "usage: $usage"
82 exit 1
83 fi
84
85 tarfile="$CODEMGR_WS/$1.$isa.tar"
86
87 rootdir="root_$isa"
88 suffix=""
89 if [[ "$nondebug" = y ]]; then
90 rootdir="root_$isa-nd"
91 suffix="-nd"
92 fi
93
94 [[ -d "${ROOT}${suffix}-closed" ]] || fail "can't find closed root proto area."
95
96 tmpdir=$(mktemp -dt bindropXXXXX)
97 [[ -n "$tmpdir" ]] || fail "can't create temporary directory."
98 mkdir -p "$tmpdir/closed/$rootdir" || exit 1
99
100 #
101 # This will hold a temp list of directories that must be kept, even if
102 # empty.
103 #
104 needdirs=$(mktemp -t needdirsXXXXX)
105 [[ -n "$needdirs" ]] || fail "can't create temporary directory list file."
106
107 #
108 # Copy the closed root parallel tree into a temp directory.
109 #
110 (cd "${ROOT}${suffix}-closed"; tar cf - .) | (cd "$tmpdir/closed/$rootdir"; tar xpf -)
111
112 #
113 # Remove internal ON crypto signing certs
114 #
115 delete="
116 etc/certs/SUNWosnetSE
117 etc/certs/SUNWosnetSolaris
118 etc/crypto/certs/SUNWosnet
119 etc/crypto/certs/SUNWosnetLimited
120 etc/crypto/certs/SUNWosnetCF
121 etc/crypto/certs/SUNWosnetCFLimited
122 "
123
124 #
125 # Remove miscellaneous files that we don't want to ship.
126 #
127
128 # SUNWsvvs (SVVS test drivers).
129 delete="$delete
130 usr/include/sys/svvslo.h
131 usr/include/sys/tidg.h
132 usr/include/sys/tivc.h
133 usr/include/sys/tmux.h
134 usr/kernel/drv/amd64/svvslo
135 usr/kernel/drv/amd64/tidg
136 usr/kernel/drv/amd64/tivc
137 usr/kernel/drv/amd64/tmux
138 usr/kernel/drv/sparcv9/svvslo
139 usr/kernel/drv/sparcv9/tidg
140 usr/kernel/drv/sparcv9/tivc
141 usr/kernel/drv/sparcv9/tmux
142 usr/kernel/drv/svvslo
143 usr/kernel/drv/svvslo.conf
144 usr/kernel/drv/tidg
145 usr/kernel/drv/tidg.conf
146 usr/kernel/drv/tivc
147 usr/kernel/drv/tivc.conf
148 usr/kernel/drv/tmux
149 usr/kernel/drv/tmux.conf
150 usr/kernel/strmod/amd64/lmodb
151 usr/kernel/strmod/amd64/lmode
152 usr/kernel/strmod/amd64/lmodr
153 usr/kernel/strmod/amd64/lmodt
154 usr/kernel/strmod/lmodb
155 usr/kernel/strmod/lmode
156 usr/kernel/strmod/lmodr
157 usr/kernel/strmod/lmodt
158 usr/kernel/strmod/sparcv9/lmodb
159 usr/kernel/strmod/sparcv9/lmode
160 usr/kernel/strmod/sparcv9/lmodr
161 usr/kernel/strmod/sparcv9/lmodt
162 "
163 # encumbered binaries and associated files
164 delete="$delete
165 kernel/drv/amd64/bmc
166 kernel/drv/bmc
167 kernel/drv/bmc.conf
168 kernel/drv/ifp.conf
169 kernel/drv/sparcv9/ifp
170 kernel/drv/sparcv9/isp
171 kernel/drv/sparcv9/qus
172 kernel/drv/spwr
173 kernel/kmdb/sparcv9/isp
174 usr/has/bin/ksh
175 usr/has/bin/pfksh
176 usr/has/bin/rksh
177 usr/include/sys/scsi/adapters/ifpcmd.h
178 usr/include/sys/scsi/adapters/ifpio.h
179 usr/include/sys/scsi/adapters/ifpmail.h
180 usr/include/sys/scsi/adapters/ifpreg.h
181 usr/include/sys/scsi/adapters/ifpvar.h
182 usr/include/sys/scsi/adapters/ispcmd.h
183 usr/include/sys/scsi/adapters/ispmail.h
184 usr/include/sys/scsi/adapters/ispreg.h
185 usr/include/sys/scsi/adapters/ispvar.h
186 usr/lib/mdb/kvm/sparcv9/isp.so
187 usr/platform/sun4u/include/sys/memtestio.h
188 usr/platform/sun4u/include/sys/memtestio_ch.h
189 usr/platform/sun4u/include/sys/memtestio_chp.h
190 usr/platform/sun4u/include/sys/memtestio_ja.h
191 usr/platform/sun4u/include/sys/memtestio_jg.h
192 usr/platform/sun4u/include/sys/memtestio_sf.h
193 usr/platform/sun4u/include/sys/memtestio_sr.h
194 usr/platform/sun4u/include/sys/memtestio_u.h
195 usr/platform/sun4u/include/sys/memtestio_pn.h
196 usr/platform/sun4v/include/sys/memtestio.h
197 usr/platform/sun4v/include/sys/memtestio_ni.h
198 usr/platform/sun4v/include/sys/memtestio_v.h
199 "
200 # memory fault injector test framework
201 delete="$delete
202 usr/bin/mtst
203 platform/sun4u/kernel/drv/sparcv9/memtest
204 platform/sun4u/kernel/drv/memtest.conf
205 platform/sun4v/kernel/drv/sparcv9/memtest
206 platform/sun4v/kernel/drv/memtest.conf
207 kernel/drv/memtest.conf
208 kernel/drv/memtest
209 kernel/drv/amd64/memtest
210 usr/platform/i86pc/lib/mtst/mtst_AuthenticAMD_15.so
211 usr/platform/i86pc/lib/mtst/mtst_AuthenticAMD.so
212 usr/platform/i86pc/lib/mtst/mtst_generic.so
213 usr/platform/i86pc/lib/mtst/mtst_GenuineIntel.so
214 "
215 for f in $delete; do
216 rm -rf "$tmpdir/closed/$rootdir/$f"
217 done
218
219 #
220 # Remove any header files. If they're in the closed tree, they're
221 # probably not freely redistributable.
222 #
223 (cd "$tmpdir/closed/$rootdir"; find . -name \*.h \
224 -a \! -name lc_core.h \
225 -a \! -name localedef.h \
226 -exec rm -f {} \;)
227
228 #
229 # Remove empty directories that the open tree doesn't need.
230 #
231 # Step 1: walk the redistributable manifests to find out which directories
232 # are specified in the open packages; save that list to a temporary
233 # file $needdirs.
234 #
235 MACH=$(uname -p)
236 (cd "$SRC/pkg/packages.$MACH"; \
237 nawk '/^dir/ {sub(/.+ path=/, ""); print $1;}' *.metadata.*.redist | \
238 sort -u > "$needdirs")
239
240 #
241 # Step 2: go to our closed directory, and find all the subdirectories,
242 # filtering out the ones needed by the open packages (saved in that
243 # temporary file). Sort in reverse order, so that parent directories
244 # come after any subdirectories, and pipe that to rmdir. If there are
245 # still any lingering files, rmdir will complain. That's fine--we
246 # only want to delete empty directories--so redirect the complaints to
247 # /dev/null.
248 #
249 (cd "$tmpdir/closed/$rootdir"; \
250 find * -type d -print | /usr/xpg4/bin/grep -xv -f $needdirs | \
251 sort -r | xargs -l rmdir 2>/dev/null )
252
253 rm "$needdirs"
254
255 #
256 # Exclude signed crypto binaries; they are delivered in their
257 # own tarball.
258 #
259 ROOT="$tmpdir/closed/$rootdir" findcrypto "$SRC/tools/codesign/creds" |
260 awk '{ print $2 }' | (cd "$tmpdir/closed/$rootdir"; xargs rm -f)
261
262 #
263 # Add binary license files.
264 #
265
266 cp -p "$SRC/tools/opensolaris/BINARYLICENSE.txt" "$tmpdir/closed" || \
267 fail "can't add BINARYLICENSE.txt"
268 mkreadme "$tmpdir/closed"
269 if [ -f "$CODEMGR_WS/THIRDPARTYLICENSE.ON-BINARIES" ]; then
270 cp -p "$CODEMGR_WS/THIRDPARTYLICENSE.ON-BINARIES" "$tmpdir/closed"
271 fi
272
273 (cd "$tmpdir"; tar cf "$tarfile" closed) || fail "can't create $tarfile."
274 bzip2 -f "$tarfile" || fail "can't compress $tarfile".
275
276 rm -rf "$tmpdir"
277
278 exit 0