Hyperledger Fabric 環境部署及e2e_cli執行測試
一、軟體下載與安裝
1、Oracle VM VirtualBox 是一款虛擬機器軟體。(官網下載地址https://www.virtualbox.org/wiki/Downloads)
2、Vagrant 是一個可建立輕量級、高複用性和便於移植的開發環境的工具,用於建立和部署虛擬化開發環境。(官網下載地址https://www.vagrantup.com/downloads.html)
3、Git 一個開源的分散式版本控制系統。(官網下載地址
二、開發環境搭建
上述軟體安裝完成後,開始使用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 =====================
_____ _ _ ____ _____ ____ _____
| ____| | \ | | | _ \ | ____| |___ \ | ____|
| _| | \| | | | | | _____ | _| __) | | _|
| |___ | |\ | | |_| | |_____| | |___ / __/ | |___
|_____| |_| \_| |____/ |_____| |_____| |_____|
此時,網路啟動執行並測試成功。