Hyperledger fabric 1.3安装记录

版权声明:转载请注明出处 https://blog.csdn.net/Zach_z/article/details/84930236

一、环境

主机:阿里云轻量应用服务器

系统:Ubuntu 16.04(基于4.4内核)

二、先决条件

2.1 go

用此时最新的1.11.2版本

下载:

wget https://dl.google.com/go/go1.11.2.linux-amd64.tar.gz

安装:

tar -zxvf go1.11.2.linux-amd64.tar.gz

加入到环境变量:

export PATH=$PATH:/home/admin/go/bin
export GOROOT=/home/admin/go
export GOPATH=/home/admin
export GOBIN=$GOROOT/bin

2.2 docker

不用apt去下载安装,直接安装比较新的
下载:

wget https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/docker-ce_17.12.1~ce-0~ubuntu_amd64.deb

安装:

dpkg -i docker-ce_17.12.1~ce-0~ubuntu_amd64.deb

看看安装好没:

docker version

2.3 docker-compose

这个直接apt install就行

apt install docker-compose

安装完好像会把docker版本降低,重新走安一遍docker

2.4 总结

总之 搞定go、docker、docker-compose、git、这四个,版本最好不要太旧不然会有大大小小的问题

三、fabric安装

3.1 官方安装指令分析

官网上给出一条直接安装的指令:

curl -sSL http://bit.ly/2ysbOFE | bash -s 1.3.0

运气不好,被墙,路径等等原因安装不上,索性分析一下

这条语句是从那个压缩后的网址找到安装脚本,再传1.3.0这个参数进行下载安装

实际访问的地址是:

https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh

直接先把bootstrap.sh下载下来:

curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh -o bootstrap.sh

接下来分析一下看bootstrap.sh具体做什么工作

3.2 bootstrap.sh

打开这个脚本文件可以看到:

# if version not passed in, default to latest released version
export VERSION=1.3.0
# if ca version not passed in, default to latest released version
export CA_VERSION=$VERSION
# current version of thirdparty images (couchdb, kafka and zookeeper) released
export THIRDPARTY_IMAGE_VERSION=0.4.13
export ARCH=$(echo "$(uname -s|tr '[:upper:]' '[:lower:]'|sed 's/mingw64_nt.*/windows/')-$(uname -m | sed 's/x86_64/amd64/g')")
export 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.3.0 -s"
  echo "would download docker images and binaries for version 1.3.0"
}
  • 所以那个1.3.0就是传入的fabric版本
  • 默认fabric参数是1.3.0,ca版本跟fabric版本一样也是1.3.0,docker镜像版本是0.4.13
  • 根据打印帮助函数,可以看到如何操作这个脚本

主要的部分是:

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
  • 可以看到有三个部分,分别对应着
  1. samplesInstall:从github上clone项目fabric-samples
  2. binariesInstall:从下载地址下载需要的二进制文件和配置文件
  3. dockerInstall:下载需要的docker镜像

3.3 根据bootstrap.sh自己个安装

3.3.1 克隆fabric-samples

git clone https://github.com/hyperledger/fabric-samples.git

看看版本情况:

git branch -a

现在就是最新版的1.3,不需要改,如果要改成1.1版本:

git checkout release-1.1

3.3.2 下载二进制文件和配置文件

源代码为:

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
}
  • 可以看到一共从两个地址中下载了两个压缩包文件
  • 之前就老是在这里失败,可能是网不好吧
  • 直接自己下载
wget https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/linux-amd64-1.3.0/hyperledger-fabric-linux-amd64-1.3.0.tar.gz 

wget https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric-ca/hyperledger-fabric-ca/linux-amd64-1.3.0/hyperledger-fabric-ca-linux-amd64-1.3.0.tar.gz
  • 这两个压缩包一个放着二进制文件,这些文件可以通过编译源码得到;另一个放着配置文件
  • 全部放到fabeic-samples里解压可以得到bin和config两个文件夹
  • 把bin文件夹加到环境变量里去
export bin文件目录
  • 运行一下看看操作正确没:
peer version

顺便一提,那些二进制文件可以通过编译hyperledger fabeic源码得到

git clone https://github.com/hyperledger/fabric.git
make release

3.3.3 下载docker镜像文件

dockerInstall:

dockerInstall() {
  which 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
}

  • 可以看到分别执行了三个函数dockerFabricPull(fabric的镜像)、dockerCaPull(fabric ca的镜像)、dockerThirdPartyImagesPull(couchdb、kafka、zookeeper三个镜像)
  • dockerFabricPull:
dockerFabricPull() {
  local FABRIC_TAG=$1
  for IMAGES in peer orderer ccenv javaenv tools; do
      echo "==> FABRIC IMAGE: $IMAGES"
      echo
      docker pull hyperledger/fabric-$IMAGES:$FABRIC_TAG
      docker tag hyperledger/fabric-$IMAGES:$FABRIC_TAG hyperledger/fabric-$IMAGES
  done
}
  • dockerCaPull:
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
}
  • dockerThirdPartyImagesPull:
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
}

命令一条一条pull&tag

直接命令行执行这三个函数中执行的命令

docker pull hyperledger/fabric-peer:1.3.0
docker tag hyperledger/fabric-peer:1.3.0 hyperledger/fabric-peer

docker pull hyperledger/fabric-orderer:1.3.0
docker tag hyperledger/fabric-orderer:1.3.0 hyperledger/fabric-orderer

docker pull hyperledger/fabric-ccenv:1.3.0
docker tag hyperledger/fabric-ccenv:1.3.0 hyperledger/fabric-ccenv

docker pull hyperledger/fabric-javaenv:1.3.0
docker tag hyperledger/fabric-javaenv:1.3.0 hyperledger/fabric-javaenv

docker pull hyperledger/fabric-tools:1.3.0
docker tag hyperledger/fabric-tools:1.3.0 hyperledger/fabric-tools

docker pull hyperledger/fabric-ca:1.3.0
docker tag hyperledger/fabric-ca:1.3.0 hyperledger/fabric-ca

docker pull hyperledger/fabric-couchdb:1.3.0
docker tag hyperledger/fabric-couchdb:1.3.0 hyperledger/fabric-couchdb

docker pull hyperledger/fabric-kafka:1.3.0
docker tag hyperledger/fabric-kafka:1.3.0 hyperledger/fabric-kafka

docker pull hyperledger/fabric-zookeeper:1.3.0
docker tag hyperledger/fabric-zookeeper:1.3.0 hyperledger/fabric-zookeeper

看一下是否都下载好了:

docker images | grep hyperledger*

或者直接执行bootstrap.sh,跳过前两步直接只下载镜像:

./bootstrap.sh 1.3.0 -s -b

四、跑一下demo
进入到fabric-samples目录下的first-network
执行:

./byfn.sh generate
./byfn.sh up

打印一堆东西后能看到下图就对了即(一个大大的字符END)
在这里插入图片描述

阿里云会报错:After 10 attempts,peer0.org1 has failed to join channel ‘mychannel’

这时修改/etc/resolv.conf文件,将里面options timeout:2 attempts:3 rotate single-request-reopen注释掉

更改前:

nameserver 100.100.2.136
nameserver 100.100.2.138
options timeout:2 attempts:3 rotate single-request-reopen

更改后

nameserver 100.100.2.136
nameserver 100.100.2.138
#options timeout:2 attempts:3 rotate single-request-reopen

猜你喜欢

转载自blog.csdn.net/Zach_z/article/details/84930236