mirror of
https://github.com/hyperledger/fabric-samples.git
synced 2026-06-18 07:55:10 +00:00
- adding bootstrap.sh to fabric-samples repo to fix docker image version for fabric to 2.5.4 and fabric-ca to 1.5.7
This commit is contained in:
parent
b77f983b8b
commit
18c815dae9
1 changed files with 212 additions and 0 deletions
212
bootstrap.sh
Executable file
212
bootstrap.sh
Executable file
|
|
@ -0,0 +1,212 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# Copyright IBM Corp. All Rights Reserved.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
# if version not passed in, default to latest released version
|
||||
VERSION=2.5.4
|
||||
# if ca version not passed in, default to latest released version
|
||||
CA_VERSION=1.5.7
|
||||
|
||||
REGISTRY=${FABRIC_DOCKER_REGISTRY:-docker.io/hyperledger}
|
||||
|
||||
OS=$(uname -s|tr '[:upper:]' '[:lower:]'|sed 's/mingw64_nt.*/windows/')
|
||||
ARCH=$(uname -m | sed 's/x86_64/amd64/g' | sed 's/aarch64/arm64/g')
|
||||
PLATFORM=${OS}-${ARCH}
|
||||
|
||||
# Fabric < 1.2 uses uname -m for architecture.
|
||||
MARCH=$(uname -m)
|
||||
|
||||
: ${CONTAINER_CLI:="docker"}
|
||||
|
||||
printHelp() {
|
||||
echo "Usage: bootstrap.sh [version [ca_version]] [options]"
|
||||
echo
|
||||
echo "options:"
|
||||
echo "-h : this help"
|
||||
echo "-d : bypass docker image download"
|
||||
echo "-s : bypass fabric-samples repo clone"
|
||||
echo "-b : bypass download of platform-specific binaries"
|
||||
echo
|
||||
echo "e.g. bootstrap.sh 2.5.6 1.5.9 -s"
|
||||
echo "will download docker images and binaries for Fabric v2.5.6 and Fabric CA v1.5.9"
|
||||
}
|
||||
|
||||
# dockerPull() pulls docker images from fabric and chaincode repositories
|
||||
# note, if a docker image doesn't exist for a requested release, it will simply
|
||||
# be skipped, since this script doesn't terminate upon errors.
|
||||
|
||||
dockerPull() {
|
||||
#three_digit_image_tag is passed in, e.g. "1.4.7"
|
||||
three_digit_image_tag=$1
|
||||
shift
|
||||
#two_digit_image_tag is derived, e.g. "1.4", especially useful as a local tag for two digit references to most recent baseos, ccenv, javaenv, nodeenv patch releases
|
||||
two_digit_image_tag=$(echo "$three_digit_image_tag" | cut -d'.' -f1,2)
|
||||
while [[ $# -gt 0 ]]
|
||||
do
|
||||
image_name="$1"
|
||||
echo "====> ${REGISTRY}/fabric-$image_name:$three_digit_image_tag"
|
||||
${CONTAINER_CLI} pull "${REGISTRY}/fabric-$image_name:$three_digit_image_tag"
|
||||
${CONTAINER_CLI} tag "${REGISTRY}/fabric-$image_name:$three_digit_image_tag" "${REGISTRY}/fabric-$image_name"
|
||||
${CONTAINER_CLI} tag "${REGISTRY}/fabric-$image_name:$three_digit_image_tag" "${REGISTRY}/fabric-$image_name:$two_digit_image_tag"
|
||||
shift
|
||||
done
|
||||
}
|
||||
|
||||
cloneSamplesRepo() {
|
||||
# clone (if needed) hyperledger/fabric-samples and checkout corresponding
|
||||
# version to the binaries and docker images to be downloaded
|
||||
if [ -d test-network ]; then
|
||||
# if we are in the fabric-samples repo, checkout corresponding version
|
||||
echo "==> Already in fabric-samples repo"
|
||||
elif [ -d fabric-samples ]; then
|
||||
# if fabric-samples repo already cloned and in current directory,
|
||||
# cd fabric-samples
|
||||
echo "===> Changing directory to fabric-samples"
|
||||
cd fabric-samples
|
||||
else
|
||||
echo "===> Cloning hyperledger/fabric-samples repo"
|
||||
git clone -b main https://github.com/hyperledger/fabric-samples.git && cd fabric-samples
|
||||
fi
|
||||
|
||||
if GIT_DIR=.git git rev-parse v${VERSION} >/dev/null 2>&1; then
|
||||
echo "===> Checking out v${VERSION} of hyperledger/fabric-samples"
|
||||
git checkout -q v${VERSION}
|
||||
else
|
||||
echo "fabric-samples v${VERSION} does not exist, defaulting to main. fabric-samples main branch is intended to work with recent versions of fabric."
|
||||
git checkout -q main
|
||||
fi
|
||||
}
|
||||
|
||||
# This will download the .tar.gz
|
||||
download() {
|
||||
local BINARY_FILE=$1
|
||||
local URL=$2
|
||||
echo "===> Downloading: " "${URL}"
|
||||
curl -L --retry 5 --retry-delay 3 "${URL}" | tar xz || rc=$?
|
||||
if [ -n "$rc" ]; then
|
||||
echo "==> There was an error downloading the binary file."
|
||||
return 22
|
||||
else
|
||||
echo "==> Done."
|
||||
fi
|
||||
}
|
||||
|
||||
pullBinaries() {
|
||||
echo "===> Downloading version ${FABRIC_TAG} platform specific fabric binaries"
|
||||
download "${BINARY_FILE}" "https://github.com/hyperledger/fabric/releases/download/v${VERSION}/${BINARY_FILE}"
|
||||
if [ $? -eq 22 ]; then
|
||||
echo
|
||||
echo "------> ${FABRIC_TAG} platform specific fabric binary is not available to download <----"
|
||||
echo
|
||||
exit
|
||||
fi
|
||||
|
||||
echo "===> Downloading version ${CA_TAG} platform specific fabric-ca-client binary"
|
||||
download "${CA_BINARY_FILE}" "https://github.com/hyperledger/fabric-ca/releases/download/v${CA_VERSION}/${CA_BINARY_FILE}"
|
||||
if [ $? -eq 22 ]; then
|
||||
echo
|
||||
echo "------> ${CA_TAG} fabric-ca-client binary is not available to download (Available from 1.1.0-rc1) <----"
|
||||
echo
|
||||
exit
|
||||
fi
|
||||
}
|
||||
|
||||
pullDockerImages() {
|
||||
command -v ${CONTAINER_CLI} >& /dev/null
|
||||
NODOCKER=$?
|
||||
if [ "${NODOCKER}" == 0 ]; then
|
||||
FABRIC_IMAGES=(peer orderer ccenv tools)
|
||||
case "$VERSION" in
|
||||
[2-3].*)
|
||||
FABRIC_IMAGES+=(baseos)
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
echo "FABRIC_IMAGES:" "${FABRIC_IMAGES[@]}"
|
||||
echo "===> Pulling fabric Images"
|
||||
dockerPull "${FABRIC_TAG}" "${FABRIC_IMAGES[@]}"
|
||||
echo "===> Pulling fabric ca Image"
|
||||
CA_IMAGE=(ca)
|
||||
dockerPull "${CA_TAG}" "${CA_IMAGE[@]}"
|
||||
echo "===> List out hyperledger docker images"
|
||||
${CONTAINER_CLI} images | grep hyperledger
|
||||
else
|
||||
echo "========================================================="
|
||||
echo "${CONTAINER_CLI} not installed, bypassing download of Fabric images"
|
||||
echo "========================================================="
|
||||
fi
|
||||
}
|
||||
|
||||
DOCKER=true
|
||||
SAMPLES=true
|
||||
BINARIES=true
|
||||
|
||||
# Parse commandline args pull out
|
||||
# version and/or ca-version strings first
|
||||
if [ -n "$1" ] && [ "${1:0:1}" != "-" ]; then
|
||||
VERSION=$1;shift
|
||||
if [ -n "$1" ] && [ "${1:0:1}" != "-" ]; then
|
||||
CA_VERSION=$1;shift
|
||||
if [ -n "$1" ] && [ "${1:0:1}" != "-" ]; then
|
||||
THIRDPARTY_IMAGE_VERSION=$1;shift
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# prior to 1.2.0 architecture was determined by uname -m
|
||||
if [[ $VERSION =~ ^1\.[0-1]\.* ]]; then
|
||||
export FABRIC_TAG=${MARCH}-${VERSION}
|
||||
export CA_TAG=${MARCH}-${CA_VERSION}
|
||||
export THIRDPARTY_TAG=${MARCH}-${THIRDPARTY_IMAGE_VERSION}
|
||||
else
|
||||
# starting with 1.2.0, multi-arch images will be default
|
||||
: "${CA_TAG:="$CA_VERSION"}"
|
||||
: "${FABRIC_TAG:="$VERSION"}"
|
||||
: "${THIRDPARTY_TAG:="$THIRDPARTY_IMAGE_VERSION"}"
|
||||
fi
|
||||
|
||||
# Prior to fabric 2.5, use amd64 binaries on darwin-arm64
|
||||
if [[ $VERSION =~ ^2\.[0-4]\.* ]]; then
|
||||
PLATFORM=$(echo $PLATFORM | sed 's/darwin-arm64/darwin-amd64/g')
|
||||
fi
|
||||
|
||||
BINARY_FILE=hyperledger-fabric-${PLATFORM}-${VERSION}.tar.gz
|
||||
CA_BINARY_FILE=hyperledger-fabric-ca-${PLATFORM}-${CA_VERSION}.tar.gz
|
||||
|
||||
# then parse opts
|
||||
while getopts "h?dsb" opt; do
|
||||
case "$opt" in
|
||||
h|\?)
|
||||
printHelp
|
||||
exit 0
|
||||
;;
|
||||
d) DOCKER=false
|
||||
;;
|
||||
s) SAMPLES=false
|
||||
;;
|
||||
b) BINARIES=false
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ "$SAMPLES" == "true" ]; then
|
||||
echo
|
||||
echo "Clone hyperledger/fabric-samples repo"
|
||||
echo
|
||||
cloneSamplesRepo
|
||||
fi
|
||||
if [ "$BINARIES" == "true" ]; then
|
||||
echo
|
||||
echo "Pull Hyperledger Fabric binaries"
|
||||
echo
|
||||
pullBinaries
|
||||
fi
|
||||
if [ "$DOCKER" == "true" ]; then
|
||||
echo
|
||||
echo "Pull Hyperledger Fabric docker images"
|
||||
echo
|
||||
pullDockerImages
|
||||
fi
|
||||
Loading…
Reference in a new issue