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 /usr/xpg4/bin/awk '/^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