diff options
Diffstat (limited to 'usr/src/tools/scripts/cryptodrop.sh')
| -rw-r--r-- | usr/src/tools/scripts/cryptodrop.sh | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/usr/src/tools/scripts/cryptodrop.sh b/usr/src/tools/scripts/cryptodrop.sh new file mode 100644 index 0000000000..2987b485ca --- /dev/null +++ b/usr/src/tools/scripts/cryptodrop.sh @@ -0,0 +1,162 @@ +#!/bin/ksh -p +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# + +# +# Copyright 2010 Sun Microsystems, Inc. All rights reserved. +# Use is subject to license terms. +# + +# +# Create a tarball with crypto binaries. +# + +usage="cryptodrop [-n] result-path" + +isa=`uname -p` + +function fail { + print -u2 "cryptodrop: $@" + exit 1 +} + +[[ -n "$ROOT" ]] || fail "ROOT must be set." +# Verify below (after adjusting for -n) that $ROOT exists, is a directory. +[[ -n "$SRC" ]] || fail "SRC must be set." +[[ -d "$SRC" ]] || fail "SRC ($SRC) is not a directory." +[[ -n "$CODEMGR_WS" ]] || fail "CODEMGR_WS must be set." +[[ -d "$CODEMGR_WS" ]] || fail "CODEMGR_WS ($CODEMGR_WS) is not a directory." + +# +# Wrapper over cpio to filter out "NNN blocks" messages. +# +function cpio_filt { + integer cpio_stat + + cpio "$@" > "$cpio_log" 2>&1 + cpio_stat=$? + cat "$cpio_log" | awk '$0 !~ /[0-9]+ blocks/ { print }' + return $cpio_stat +} + +# +# Create the README from boilerplate and the contents of the closed +# binary tree. +# +# usage: mkreadme targetdir +# +function mkreadme { + typeset targetdir="$1" + typeset readme="README.CRYPTO-BINARIES.$isa" + + sed -e s/@ISA@/$isa/ -e s/@DELIVERY@/CRYPTO-BINARIES/ \ + "$SRC/tools/opensolaris/README.binaries.tmpl" > "$targetdir/$readme" + (cd "$targetdir"; find "$rootdir" -type f -print | \ + sort >> "$targetdir/$readme") +} + +nondebug=n +while getopts n flag; do + case $flag in + n) + nondebug=y + if [ "$MULTI_PROTO" = yes ]; then + export ROOT="$ROOT-nd" + fi + ;; + ?) + print -u2 "usage: $usage" + exit 1 + ;; + esac +done +shift $(($OPTIND - 1)) + +if [[ $# -ne 1 ]]; then + print -u2 "usage: $usage" + exit 1 +fi +[[ -d "$ROOT" ]] || fail "ROOT ($ROOT) is not a directory." + +tarfile="$1" + +if [[ "$nondebug" = n ]]; then + rootdir="root_$isa" +else + rootdir="root_$isa-nd" +fi + +tmpdir=$(mktemp -dt cryptodropXXXXX) +[[ -n "$tmpdir" ]] || fail "could not create temporary directory." +tmproot="$tmpdir/proto/$rootdir" +mkdir -p "$tmproot" || exit 1 +cpio_log="$tmpdir/cpio.log" +filelist="$tmpdir/files" + +# +# Copy the crypto binaries into a temp directory. This is a bit messy +# because we want to preserve the permissions of intermediate +# directories without including all the contents of those +# directories. +# + +# Echo all the parent directories of the given file. +function alldirs { + d=$(dirname "$1") + while [ "$d" != . ]; do + echo $d + d=$(dirname "$d") + done +} + +findcrypto "$SRC/tools/codesign/creds" | awk '{ print $2 }' > "$filelist" +# +# Both alldirs and the cpio -p invocation assume that findcrypto only +# produces relative paths. +# +for f in $(cat "$filelist"); do + if [[ "$f" = /* ]]; then + fail "findcrypto produced absolute path ($f)" + fi +done +for f in $(cat "$filelist"); do + echo "$f" + alldirs "$f" +done | sort -u | (cd "$ROOT"; cpio_filt -pdm "$tmproot") +[[ $? -eq 0 ]] || fail "could not copy crypto files." + +rm -f "$cpio_log" "$filelist" + +# +# Insert binary license files. +# +cp -p "$SRC/tools/opensolaris/BINARYLICENSE.txt" "$tmpdir/proto" || \ + fail "could not add BINARYLICENSE.txt" +mkreadme "$tmpdir/proto" || exit 1 +cp -p "$CODEMGR_WS/THIRDPARTYLICENSE.ON-CRYPTO" "$tmpdir/proto" || \ + fail "could not add THIRDPARTYLICENSE.ON-CRYPTO." + +(cd "$tmpdir"; tar cf "$tarfile" proto) || fail "could not create $tarfile." +bzip2 -f "$tarfile" || fail "could not compress $tarfile". + +rm -rf "$tmpdir" + +exit 0 |
