1 #!/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 2010 Sun Microsystems, Inc. All rights reserved. 25 # Use is subject to license terms. 26 # 27 28 # 29 # Create a tarball with crypto binaries. 30 # 31 32 usage="cryptodrop [-n] result-path" 33 34 isa=`uname -p` 35 36 function fail { 37 print -u2 "cryptodrop: $@" 38 exit 1 39 } 40 41 [[ -n "$ROOT" ]] || fail "ROOT must be set." 42 # Verify below (after adjusting for -n) that $ROOT exists, is a directory. 43 [[ -n "$SRC" ]] || fail "SRC must be set." 44 [[ -d "$SRC" ]] || fail "SRC ($SRC) is not a directory." 45 [[ -n "$CODEMGR_WS" ]] || fail "CODEMGR_WS must be set." 46 [[ -d "$CODEMGR_WS" ]] || fail "CODEMGR_WS ($CODEMGR_WS) is not a directory." 47 48 # 49 # Wrapper over cpio to filter out "NNN blocks" messages. 50 # 51 function cpio_filt { 52 integer cpio_stat 53 54 cpio "$@" > "$cpio_log" 2>&1 55 cpio_stat=$? 56 cat "$cpio_log" | awk '$0 !~ /[0-9]+ blocks/ { print }' 57 return $cpio_stat 58 } 59 60 # 61 # Create the README from boilerplate and the contents of the closed 62 # binary tree. 63 # 64 # usage: mkreadme targetdir 65 # 66 function mkreadme { 67 typeset targetdir="$1" 68 typeset readme="README.CRYPTO-BINARIES.$isa" 69 70 sed -e s/@ISA@/$isa/ -e s/@DELIVERY@/CRYPTO-BINARIES/ \ 71 "$SRC/tools/opensolaris/README.binaries.tmpl" > "$targetdir/$readme" 72 (cd "$targetdir"; find "$rootdir" -type f -print | \ 73 sort >> "$targetdir/$readme") 74 } 75 76 nondebug=n 77 while getopts n flag; do 78 case $flag in 79 n) 80 nondebug=y 81 if [ "$MULTI_PROTO" = yes ]; then 82 export ROOT="$ROOT-nd" 83 fi 84 ;; 85 ?) 86 print -u2 "usage: $usage" 87 exit 1 88 ;; 89 esac 90 done 91 shift $(($OPTIND - 1)) 92 93 if [[ $# -ne 1 ]]; then 94 print -u2 "usage: $usage" 95 exit 1 96 fi 97 [[ -d "$ROOT" ]] || fail "ROOT ($ROOT) is not a directory." 98 99 tarfile="$1" 100 101 if [[ "$nondebug" = n ]]; then 102 rootdir="root_$isa" 103 else 104 rootdir="root_$isa-nd" 105 fi 106 107 tmpdir=$(mktemp -dt cryptodropXXXXX) 108 [[ -n "$tmpdir" ]] || fail "could not create temporary directory." 109 tmproot="$tmpdir/proto/$rootdir" 110 mkdir -p "$tmproot" || exit 1 111 cpio_log="$tmpdir/cpio.log" 112 filelist="$tmpdir/files" 113 114 # 115 # Copy the crypto binaries into a temp directory. This is a bit messy 116 # because we want to preserve the permissions of intermediate 117 # directories without including all the contents of those 118 # directories. 119 # 120 121 # Echo all the parent directories of the given file. 122 function alldirs { 123 d=$(dirname "$1") 124 while [ "$d" != . ]; do 125 echo $d 126 d=$(dirname "$d") 127 done 128 } 129 130 findcrypto "$SRC/tools/codesign/creds" | awk '{ print $2 }' > "$filelist" 131 # 132 # Both alldirs and the cpio -p invocation assume that findcrypto only 133 # produces relative paths. 134 # 135 for f in $(cat "$filelist"); do 136 if [[ "$f" = /* ]]; then 137 fail "findcrypto produced absolute path ($f)" 138 fi 139 done 140 for f in $(cat "$filelist"); do 141 echo "$f" 142 alldirs "$f" 143 done | sort -u | (cd "$ROOT"; cpio_filt -pdm "$tmproot") 144 [[ $? -eq 0 ]] || fail "could not copy crypto files." 145 146 rm -f "$cpio_log" "$filelist" 147 148 # 149 # Insert binary license files. 150 # 151 cp -p "$SRC/tools/opensolaris/BINARYLICENSE.txt" "$tmpdir/proto" || \ 152 fail "could not add BINARYLICENSE.txt" 153 mkreadme "$tmpdir/proto" || exit 1 154 cp -p "$CODEMGR_WS/THIRDPARTYLICENSE.ON-CRYPTO" "$tmpdir/proto" || \ 155 fail "could not add THIRDPARTYLICENSE.ON-CRYPTO." 156 157 (cd "$tmpdir"; tar cf "$tarfile" proto) || fail "could not create $tarfile." 158 bzip2 -f "$tarfile" || fail "could not compress $tarfile". 159 160 rm -rf "$tmpdir" 161 162 exit 0