1. 程式人生 > >Hyperledger Fabric 環境部署及e2e_cli執行測試

Hyperledger Fabric 環境部署及e2e_cli執行測試

一、軟體下載與安裝

       1、Oracle VM VirtualBox 是一款虛擬機器軟體。(官網下載地址https://www.virtualbox.org/wiki/Downloads

       2、Vagrant 是一個可建立輕量級、高複用性和便於移植的開發環境的工具,用於建立和部署虛擬化開發環境。(官網下載地址https://www.vagrantup.com/downloads.html

       3、Git 一個開源的分散式版本控制系統。(官網下載地址

https://git-scm.com/downloads

 

二、開發環境搭建

       上述軟體安裝完成後,開始使用Vagrant建立開發環境的虛擬機器。首先選擇一個資料夾,使用如下命令將Hyperledger Fabric專案克隆到本地並啟動Vagrant。

#克隆專案
git clone https://github.com/hyperledger/fabric.git

#進入vagrant虛擬機器目錄
cd fabric/devenv

#啟動vagrant
vagrant up

#連線virtualbox虛擬機器
vagrant ssh

第一次執行vagrant up命令時,系統會先尋找是否存在所需的box映象檔案,如果沒有找到,則會自動進行下載,建立VirtualBox虛擬機器,之後會採用ssh協議連線虛擬機器,執行已經寫好的shell指令碼進行開發環境的配置。環境配置如下:

(1)更新系統

sudo apt-get update

(2)安裝一些基礎的工具軟體

sudo apt-get install -y build-essential git make curl unzip g++ libtool

(3)安裝Docker和docker-compose

#1、新增遠端倉庫地址

#安裝以下包以使apt可以通過HTTPS使用儲存庫(repository) 
sudo apt-get -y install apt-transport-https ca-certificates curl

#新增Docker官方的GPG金鑰
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

#使用下面的命令來設定stable儲存庫
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

#更新一下apt包索引
sudo apt-get update

#2、安裝Docker
sudo apt-get -y install docker-ce

#3、測試Docker
sudo docker run hello-world

如果顯示一下結果,則表示Docker安裝成功

[email protected]:~$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9db2ca6ccae0: Pull complete 
Digest: sha256:4b8ff392a12ed9ea17784bd3c9a8b1fa3299cac44aca35a85c90c5e3c7afacdc
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

        在Docker安裝完成之後,還需額外安裝docker-compose工具,從而可以通過配置檔案來部署與啟動容器,docker-compose安裝使用如下命令

sudo curl -L "http://github.com/docker/compose/releases/download/1.11.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose 

        檢視Docker和docker-compose的版本,如顯示一下結果,則Docker環境安裝完成。

[email protected]:~$ docker -v
Docker version 18.06.0-ce, build 0ffa825

[email protected]:~$ docker-compose -v
docker-compose version 1.11.2, build dfed245

       由於國內無法訪問Docker官方站點,可以訪問一些映象站,比如阿里雲、CloudDao等,通過下面命令設定CloudDao配置Docker加速器,快速下載Docker映象。

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://176a5be3.m.daocloud.io

#重啟服務
sudo systemctl restart docker.service

 

(4)安裝Go語言環境

         1、首先訪問官網https://golang.org/dl/,如下圖

        2、選擇Linux版本,複製下載連結,使用如下命令下載。

#建立一個資料夾
mkdir Download

#進去該資料夾
cd Download

#下載
wget https://storage.googleapis.com/golang/go1.10.3.linux-amd64.tar.gz

       3、解壓壓縮檔案go1.10.3.linux-amd64.tar.gz到/usr/local/目錄下,安裝Go

sudo tar -C /usr/local -xzf go1.10.3.linux-amd64.tar.gz 

      4、配置Go環境變數

mkdir $HOME/go
sudo vim /etc/profile

#在/etc/profile檔案中的判斷語句下方新增下面的Go環境變數
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go


#修改後的profile檔案如下所示:
if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done                                                        
  unset i                                                     
fi                                                            

export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go

#執行source命令使其生效,然後使用go env命令輸出Go環境配置資訊。
source /etc/profile
go env

       5、測試Go語言

       輸入以下命令:

cd $GOPATH
mkdir -p src/hello
cd src/hello/
vim hello.go

       輸入測試程式碼:

package main
import "fmt"
func main(){
        fmt.Printf("hello, world\n")
}

       儲存退出,使用go build命令編譯後執行,顯示如下結果則代表Go環境配置成功。

[email protected]:~/go/src/hello$ go build
[email protected]:~/go/src/hello$ ls
hello  hello.go
[email protected]:~/go/src/hello$ ./hello
hello, world
[email protected]:~/go/src/hello$ 

 

(5)安裝Node.js, Node.js是一個JavaScript的執行環境,可以方便地搭建響應速度快、易於擴充套件的網路應用

sudo apt-get install nodejs
sudo apt install nodejs-legacy
sudo apt install npm

     如要安裝最新的可參看該部落格https://blog.csdn.net/u014361775/article/details/78865582

(6)安裝Java環境,因為Fabric支援Java鏈碼的編寫。

sudo apt-get install -y openjdk-8-jdk maven

           如下顯示則安裝成功

[email protected]:~$ java -version
openjdk version "1.8.0_171"
OpenJDK Runtime Environment (build 1.8.0_171-8u171-b11-0ubuntu0.16.04.1-b11)
OpenJDK 64-Bit Server VM (build 25.171-b11, mixed mode)
[email protected]:~$ javac -version
javac 1.8.0_171

   

到此配置基本完成,Vagrant提供了一種便捷且全面的開發環境搭建方式,它需要基於VirtualBox虛擬機器,然而最終應用往往是執行在物理伺服器上的。而針對物理機上Fabric開發環境的構建,Fabric最核心的兩項是Go語言環境和Docker環境的構建。Fabric原始碼採用Go語言進行編寫,而Fabric應用則均以Docker容器的方式執行。至於其他的工具與軟體,可以根據開發是的需求自行選擇。

 

三、e2e_cli測試執行

 因為前面的配置都是在VM上的,所以測試就在VM上了。 

(1)拉取原始碼

#新建目錄,因為fabric裡面的包引用都是有特別的路徑的
cd $GOPATH/src
mkdir -p github.com/hyperledger
cd github.com/hyperledger

#下載原始碼
git clone https://github.com/hyperledger/fabric.git

#如果怕下載慢,可以直接把主機中的fabric拷貝過來,共享資料夾在VM的 /hyperledger
cp -rf /hyperledger/fabric/ fabric

(2)編譯configtxgen工具

             在fabric目錄下執行已選命令:

cd $GOPATH/src/github.com/hyperledger/fabric
make configtxgen
# 如果出錯:'ltdl.h' file not found
sudo apt install libtool libltdl-dev
# 然後再執行make
make configtxgen

           編譯成功後輸出:

.build/bin/configtxgen
CGO_CFLAGS=" " GOBIN=/root/go/src/github.com/hyperledger/fabric/.build/bin go install -tags "" -ldflags "-X github.com/hyperledger/fabric/common/tools/configtxgen/metadata.CommitSHA=" github.com/hyperledger/fabric/common/tools/configtxgen
Binary available as .build/bin/configtxgen

        編譯後執行檔案放在Fabric目錄下的的build/bin/configtxgen

(3)執行完整指令碼

        進入examples/e2e_cli目錄,首先從Docker Hub拉取映象:

# 使指令碼可執行
chmod +x download-dockerimages.sh
# 執行指令碼
./download-dockerimages.sh

       然後就會開始給你下載映象, 完成後輸入一下命令檢視:

docker images

    如果有些沒成功,可輸入以下命令手動下載:

docker pull hyperledger/fabric-orderer:latest
docker pull hyperledger/fabric-peer:latest
docker pull hyperledger/fabric-zookeeper:latest
docker pull hyperledger/fabric-couchdb:latest
docker pull hyperledger/fabric-kafka:latest
docker pull hyperledger/fabric-ca:latest
docker pull hyperledger/fabric-ccenv:latest
docker pull hyperledger/fabric-javaenv:latest

   完成後執行指令碼

#如果沒有設定channel-ID引數,channel名預設是mychannel。  
./network_setup.sh up <channel-ID>

 

    開始執行

 ____    _____      _      ____    _____           _____   ____    _____ 
/ ___|  |_   _|    / \    |  _ \  |_   _|         | ____| |___ \  | ____|
\___ \    | |     / _ \   | |_) |   | |    _____  |  _|     __) | |  _|  
 ___) |   | |    / ___ \  |  _ <    | |   |_____| | |___   / __/  | |___ 
|____/    |_|   /_/   \_\ |_| \_\   |_|           |_____| |_____| |_____|

Channel name : mychannel
Check orderering service availability...

   執行成功後輸出:

===================== Query successful on peer1.org3 on channel 'mychannel' ===================== 

===================== All GOOD, End-2-End execution completed ===================== 


 _____   _   _   ____            _____   ____    _____ 
| ____| | \ | | |  _ \          | ____| |___ \  | ____|
|  _|   |  \| | | | | |  _____  |  _|     __) | |  _|  
| |___  | |\  | | |_| | |_____| | |___   / __/  | |___ 
|_____| |_| \_| |____/          |_____| |_____| |_____|

    此時,網路啟動執行並測試成功。