Fabric-samples v1.4 搭建及构建第一个实例

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值