xref: /onnv-gate/usr/src/tools/scripts/bindrop.sh (revision 12210:436b06ce515d)
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
32usage="bindrop [-n] basename"
33
34isa=`uname -p`
35
36PATH="$PATH:/usr/bin:/usr/sfw/bin"
37
38function fail {
39	print -u2 "bindrop: $@"
40	exit 1
41}
42
43function 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#
56function 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
66nondebug=n
67while 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
77done
78shift $(($OPTIND - 1))
79
80if [[ $# -ne 1 ]]; then
81	print -u2 "usage: $usage"
82	exit 1
83fi
84
85tarfile="$CODEMGR_WS/$1.$isa.tar"
86
87rootdir="root_$isa"
88suffix=""
89if [[ "$nondebug" = y ]]; then
90	rootdir="root_$isa-nd"
91	suffix="-nd"
92fi
93
94[[ -d "${ROOT}${suffix}-closed" ]] || fail "can't find closed root proto area."
95
96tmpdir=$(mktemp -dt bindropXXXXX)
97[[ -n "$tmpdir" ]] || fail "can't create temporary directory."
98mkdir -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#
104needdirs=$(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#
115delete="
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).
129delete="$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
164delete="$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
201delete="$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"
215for f in $delete; do
216	rm -rf "$tmpdir/closed/$rootdir/$f"
217done
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#
235MACH=$(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
253rm "$needdirs"
254
255#
256# Exclude signed crypto binaries; they are delivered in their
257# own tarball.
258#
259ROOT="$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
266cp -p "$SRC/tools/opensolaris/BINARYLICENSE.txt" "$tmpdir/closed" || \
267    fail "can't add BINARYLICENSE.txt"
268mkreadme "$tmpdir/closed"
269if [ -f "$CODEMGR_WS/THIRDPARTYLICENSE.ON-BINARIES" ]; then
270    cp -p "$CODEMGR_WS/THIRDPARTYLICENSE.ON-BINARIES" "$tmpdir/closed"
271fi
272
273(cd "$tmpdir"; tar cf "$tarfile" closed) || fail "can't create $tarfile."
274bzip2 -f "$tarfile" || fail "can't compress $tarfile".
275
276rm -rf "$tmpdir"
277
278exit 0
279