1. 程式人生 > >Hyperledger fabric 1.3安裝記錄

Hyperledger fabric 1.3安裝記錄

一、環境

主機:阿里雲輕量應用伺服器

系統: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