#!/bin/bash CROSS="$DEST/../cross" set -e arch=$(go env GOHOSTARCH) if [ ! -d "$CROSS/linux/${arch}" ]; then echo >&2 'error: binary and cross must be run before tgz' false fi ( for d in "$CROSS/"*/*; do export GOARCH="$(basename "$d")" export GOOS="$(basename "$(dirname "$d")")" source "${MAKEDIR}/.binary-setup" BINARY_NAME="${DOCKER_CLIENT_BINARY_NAME}-$VERSION" DAEMON_BINARY_NAME="${DOCKER_DAEMON_BINARY_NAME}-$VERSION" PROXY_BINARY_NAME="${DOCKER_PROXY_BINARY_NAME}-$VERSION" BINARY_EXTENSION="$(export GOOS && binary_extension)" if [ "$GOOS" = 'windows' ]; then # if windows use a zip, not tgz BUNDLE_EXTENSION=".zip" IS_TAR="false" elif [ "$GOOS" == "solaris" ]; then # Solaris bypasses cross due to CGO issues. continue else BUNDLE_EXTENSION=".tgz" IS_TAR="true" fi BINARY_FULLNAME="$BINARY_NAME$BINARY_EXTENSION" DAEMON_BINARY_FULLNAME="$DAEMON_BINARY_NAME$BINARY_EXTENSION" PROXY_BINARY_FULLNAME="$PROXY_BINARY_NAME$BINARY_EXTENSION" mkdir -p "$DEST/$GOOS/$GOARCH" TGZ="$DEST/$GOOS/$GOARCH/$BINARY_NAME$BUNDLE_EXTENSION" # The staging directory for the files in the tgz BUILD_PATH="$DEST/build" # The directory that is at the root of the tar file TAR_BASE_DIRECTORY="docker" # $DEST/build/docker TAR_PATH="$BUILD_PATH/$TAR_BASE_DIRECTORY" # Copy the correct docker binary mkdir -p $TAR_PATH cp -L "$d/$BINARY_FULLNAME" "$TAR_PATH/${DOCKER_CLIENT_BINARY_NAME}${BINARY_EXTENSION}" if [ -f "$d/$DAEMON_BINARY_FULLNAME" ]; then cp -L "$d/$DAEMON_BINARY_FULLNAME" "$TAR_PATH/${DOCKER_DAEMON_BINARY_NAME}${BINARY_EXTENSION}" fi if [ -f "$d/$PROXY_BINARY_FULLNAME" ]; then cp -L "$d/$PROXY_BINARY_FULLNAME" "$TAR_PATH/${DOCKER_PROXY_BINARY_NAME}${BINARY_EXTENSION}" fi # copy over all the extra binaries copy_binaries $TAR_PATH # add completions for s in bash fish zsh; do mkdir -p $TAR_PATH/completion/$s cp -L contrib/completion/$s/*docker* $TAR_PATH/completion/$s/ done if [ "$IS_TAR" == "true" ]; then echo "Creating tgz from $BUILD_PATH and naming it $TGZ" tar --numeric-owner --owner 0 -C "$BUILD_PATH" -czf "$TGZ" $TAR_BASE_DIRECTORY else # ZIP needs to full absolute dir path, not the absolute path ZIP=`pwd`"/$TGZ" # keep track of where we are, for later. pushd . # go into the BUILD_PATH since zip does not have a -C equivalent. cd $BUILD_PATH echo "Creating zip from $BUILD_PATH and naming it $ZIP" zip -q -r $ZIP $TAR_BASE_DIRECTORY # go back to where we started popd fi hash_files "$TGZ" # cleanup after ourselves rm -rf "$BUILD_PATH" echo "Created tgz: $TGZ" done )