1.go环境安装。
下载地址:Downloads - The Go Programming Language
环境配置:
vim /etc/profile(添加环境变量)
export GOROOT=/allSys/go(go安装根目录)
export GOPATH=/allSys/goProject(go工作目录)
export PATH=$PATH:$GOROOT/bin
source /etc/profile(更新配置)
终端输入go version能打印版本信息说明安装成功。
2.docker安装。
安装一些必要工具:
yum install -y yum-utils device-mapper-persistent-data lvm2
yum -y install yum-utils
添加源信息:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里源)
安装docker-ce:
yum install docker-ce docker-ce-cli containerd.io
启动docker:
systemctl start docker
测试:
docker run hello-word
3.curl下载(依赖gcc,若没有先安装gcc)
yum install -y openssl-devel
wget https://curl.haxx.se/download/curl-7.66.0.tar.gz
解压后运行: ./configure-->make-->make install-->curl --version(查看是否成功)
4.安装docker-compose
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose(国外慢)
curl -L "https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose(国内相对较快)
授权:chmod +x /usr/local/bin/docker-compose
查看是否成功:docker-compose version
5.下载fabric-samples,解压。
clone https://github.com/hyperledger/fabric-samples.git
6.下载及构建,在fabric-samples根目录新建init.sh编辑添加如下,授权:chmod 777 init.sh,构建:./init.sh。(下载可能很慢)
#!/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=1.4.3
# if ca version not passed in, default to latest released version
CA_VERSION=1.4.3
# current version of thirdparty images (couchdb, kafka and zookeeper) released
THIRDPARTY_IMAGE_VERSION=0.4.15
ARCH=$(echo "$(uname -s|tr '[:upper:]' '[:lower:]'|sed 's/mingw64_nt.*/windows/')-$(uname -m | sed 's/x86_64/amd64/g')")
MARCH=$(uname -m)
printHelp() {
echo "Usage: bootstrap.sh [version [ca_version [thirdparty_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 1.4.3 -s"
echo "would download docker images and binaries for version 1.4.3"
}
# dockerFabricPull() 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.
dockerFabricPull() {
local FABRIC_TAG=$1
for IMAGES in peer orderer ccenv tools baseos nodeenv javaenv; do
echo "==> FABRIC IMAGE: $IMAGES"
echo
docker pull "hyperledger/fabric-$IMAGES:$FABRIC_TAG"
docker tag "hyperledger/fabric-$IMAGES:$FABRIC_TAG" "hyperledger/fabric-$IMAGES"
done
}
dockerThirdPartyImagesPull() {
local THIRDPARTY_TAG=$1
for IMAGES in couchdb kafka zookeeper; do
echo "==> THIRDPARTY DOCKER IMAGE: $IMAGES"
echo
docker pull "hyperledger/fabric-$IMAGES:$THIRDPARTY_TAG"
docker tag "hyperledger/fabric-$IMAGES:$THIRDPARTY_TAG" "hyperledger/fabric-$IMAGES"
done
}
dockerCaPull() {
local CA_TAG=$1
echo "==> FABRIC CA IMAGE"
echo
docker pull "hyperledger/fabric-ca:$CA_TAG"
docker tag "hyperledger/fabric-ca:$CA_TAG" "hyperledger/fabric-ca"
}
samplesInstall() {
# clone (if needed) hyperledger/fabric-samples and checkout corresponding
# version to the binaries and docker images to be downloaded
if [ -d first-network ]; then
# if we are in the fabric-samples repo, checkout corresponding version
echo "===> Checking out v${VERSION} of hyperledger/fabric-samples"
git checkout v${VERSION}
elif [ -d fabric-samples ]; then
# if fabric-samples repo already cloned and in current directory,
# cd fabric-samples and checkout corresponding version
echo "===> Checking out v${VERSION} of hyperledger/fabric-samples"
cd fabric-samples && git checkout v${VERSION}
else
echo "===> Cloning hyperledger/fabric-samples repo and checkout v${VERSION}"
git clone -b master https://github.com/hyperledger/fabric-samples.git && cd fabric-samples && git checkout v${VERSION}
fi
}
# Incrementally downloads the .tar.gz file locally first, only decompressing it
# after the download is complete. This is slower than binaryDownload() but
# allows the download to be resumed.
binaryIncrementalDownload() {
local BINARY_FILE=$1
local URL=$2
curl -f -s -C - "${URL}" -o "${BINARY_FILE}" || rc=$?
# Due to limitations in the current Nexus repo:
# curl returns 33 when there's a resume attempt with no more bytes to download
# curl returns 2 after finishing a resumed download
# with -f curl returns 22 on a 404
if [ "$rc" = 22 ]; then
# looks like the requested file doesn't actually exist so stop here
return 22
fi
if [ -z "$rc" ] || [ $rc -eq 33 ] || [ $rc -eq 2 ]; then
# The checksum validates that RC 33 or 2 are not real failures
echo "==> File downloaded. Verifying the md5sum..."
localMd5sum=$(md5sum "${BINARY_FILE}" | awk '{print $1}')
remoteMd5sum=$(curl -s "${URL}".md5)
if [ "$localMd5sum" == "$remoteMd5sum" ]; then
echo "==> Extracting ${BINARY_FILE}..."
tar xzf ./"${BINARY_FILE}" --overwrite
echo "==> Done."
rm -f "${BINARY_FILE}" "${BINARY_FILE}".md5
else
echo "Download failed: the local md5sum is different from the remote md5sum. Please try again."
rm -f "${BINARY_FILE}" "${BINARY_FILE}".md5
exit 1
fi
else
echo "Failure downloading binaries (curl RC=$rc). Please try again and the download will resume from where it stopped."
exit 1
fi
}
# This will attempt to download the .tar.gz all at once, but will trigger the
# binaryIncrementalDownload() function upon a failure, allowing for resume
# if there are network failures.
binaryDownload() {
local BINARY_FILE=$1
local URL=$2
echo "===> Downloading: " "${URL}"
# Check if a previous failure occurred and the file was partially downloaded
if [ -e "${BINARY_FILE}" ]; then
echo "==> Partial binary file found. Resuming download..."
binaryIncrementalDownload "${BINARY_FILE}" "${URL}"
else
curl "${URL}" | tar xz || rc=$?
if [ -n "$rc" ]; then
echo "==> There was an error downloading the binary file. Switching to incremental download."
echo "==> Downloading file..."
binaryIncrementalDownload "${BINARY_FILE}" "${URL}"
else
echo "==> Done."
fi
fi
}
binariesInstall() {
echo "===> Downloading version ${FABRIC_TAG} platform specific fabric binaries"
binaryDownload "${BINARY_FILE}" "https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/${ARCH}-${VERSION}/${BINARY_FILE}"
if [ $? -eq 22 ]; then
echo
echo "------> ${FABRIC_TAG} platform specific fabric binary is not available to download <----"
echo
fi
echo "===> Downloading version ${CA_TAG} platform specific fabric-ca-client binary"
binaryDownload "${CA_BINARY_FILE}" "https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric-ca/hyperledger-fabric-ca/${ARCH}-${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
fi
}
dockerInstall() {
command -v docker >& /dev/null
NODOCKER=$?
if [ "${NODOCKER}" == 0 ]; then
echo "===> Pulling fabric Images"
dockerFabricPull "${FABRIC_TAG}"
echo "===> Pulling fabric ca Image"
dockerCaPull "${CA_TAG}"
echo "===> Pulling thirdparty docker images"
dockerThirdPartyImagesPull "${THIRDPARTY_TAG}"
echo
echo "===> List out hyperledger docker images"
docker images | grep hyperledger
else
echo "========================================================="
echo "Docker 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
BINARY_FILE=hyperledger-fabric-${ARCH}-${VERSION}.tar.gz
CA_BINARY_FILE=hyperledger-fabric-ca-${ARCH}-${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 "Installing hyperledger/fabric-samples repo"
echo
samplesInstall
fi
if [ "$BINARIES" == "true" ]; then
echo
echo "Installing Hyperledger Fabric binaries"
echo
binariesInstall
fi
if [ "$DOCKER" == "true" ]; then
echo
echo "Installing Hyperledger Fabric docker images"
echo
dockerInstall
fi
7.启动fabric-sample
cd /fabric-sample/first-network
(1)、首先生成证书: ./byfn.sh generate
(2)、启动网络:./byfn.sh up
出现如下界面启动成功:
(3)、关闭网络:./byfn.sh down(关闭网络一定要使用down,如果非正常关闭下次启动网络可能会报错)
安装过程出现的问题:
1.安装docker-ce报错:
error
problem :package docker-ce-3:19 requires containerd.io>=1 but none of the providers can be installed
docker-ce版本过高导致,安装低版本docker-ce
安装方法:yum install docker-ce-3:18.09.1
2.启动fabric网络时:/bin/bash: scripts/script.sh: Permission denied显示权限不足,但授权后无效。
解决方式执行以下命令:
$ setenforce 0
$ docker exec -it cli bash