首頁 > 軟體

基於Ubuntu 16.04快速構建Hyperledger Fabric網路

2020-06-16 16:51:55

前言

最近在參加一個比賽,使用到了區塊鏈的開源軟體hyperledger,由於之前從未接觸過區塊鏈,以及和區塊鏈開發相關的內容,所有在網上查閱了大量的資料,並且通過學習開源的入門書籍區塊鏈技術以及進階學習的區塊鏈原理、設計與應用,對區塊鏈的一些相關概念有了一定認識。這裡記錄的是我安裝hyperledger fabric的所有步驟,同時也是一個快速搭建單機環境的參考教學。

準備好機器環境

本人的區塊鏈網路部署在VMware搭建的Ubuntu 16.04的環境下(推薦使用該版本的系統),詳細的系統版本為ubuntu-16.04.4-desktop-amd64.iso,是從網易開源映象站下載的。對於如何使用VMware安裝虛擬機器以及讓虛擬機器存取網路,網上有許多教學,這裡就不重複講了。 當將系統安裝完成後,需要更換源,使用desktop版的可以直接在設定裡面選擇最佳伺服器,如下圖所示 若使用的是伺服器版本,則可以使用如下命令換成高速的源

  • 先備份原來的原始檔

$ sudo cp /etc/apt/source.list /etc/apt/source.list.bak 

  • 開啟source.list檔案,刪除原來的內容

$ sudo vim /etc/apt/source.list

  • 任選下面一組原始檔複製到source.list中

易源

deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse 
deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse 
deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse 
deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse 
deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse 
deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse 
deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse 
deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse 
deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse 
deb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse 

阿里源

# deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted 
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties 
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted 
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties 
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted 
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties 
deb http://mirrors.aliyun.com/ubuntu/ xenial universe 
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe 
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse 
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse 
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse 
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties 
deb http://archive.canonical.com/ubuntu xenial partner 
deb-src http://archive.canonical.com/ubuntu xenial partner 
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted 
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties 
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe 
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse 

搜狐源

deb http://mirrors.sohu.com/ubuntu/ trusty main restricted universe multiverse 
deb http://mirrors.sohu.com/ubuntu/ trusty-security main restricted universe multiverse 
deb http://mirrors.sohu.com/ubuntu/ trusty-updates main restricted universe multiverse 
deb http://mirrors.sohu.com/ubuntu/ trusty-proposed main restricted universe multiverse 
deb http://mirrors.sohu.com/ubuntu/ trusty-backports main restricted universe multiverse 
deb-src http://mirrors.sohu.com/ubuntu/ trusty main restricted universe multiverse 
deb-src http://mirrors.sohu.com/ubuntu/ trusty-security main restricted universe multiverse 
deb-src http://mirrors.sohu.com/ubuntu/ trusty-updates main restricted universe multiverse 
deb-src http://mirrors.sohu.com/ubuntu/ trusty-proposed main restricted universe multiverse 
deb-src http://mirrors.sohu.com/ubuntu/ trusty-backports main restricted universe multiverse

複製進去後,使用:wq儲存,然後使用如下命令更新一下

$ sudo apt-get install update

執行完成後環境就基本上準備好了,如果使用的是伺服器版本,覺得使用不方便的話,可以使用xshell之類的遠端連線工具連線你的虛擬機器。如果你的環境搭建再雲伺服器上,例如阿里雲或者騰訊雲,可以不用更新源,直接在自己的主機上使用遠端連線工具連線上雲主機,環境就算完成了(若在本地不能連線上雲主機,或者虛擬機器,檢查一下ssh是否已經安裝並啟動,若沒有,可以參加網上的教學,設定遠端連線)。

安裝GO語言環境

不推薦使用apt的方式安裝GO,原因是這樣安裝的版本比較老,推薦安裝最新版的GO,具體安裝命令如下

  • 下載最新的GO安裝包,具體的最新版本號可以從Golang官網上檢視

$ wegt https://dl.google.com/go/go1.10.2.linux-amd64.tar.gz

  • 解壓安裝包到/usr/local目錄下

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

  • 編輯當前使用者的環境變數

$ vim ~/.profile

新增如下內容

export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
#這裡設定的GOPATH目錄為家目錄的的go資料夾
export GOPATH=$HOME/go
export PATH=$PATH:$HOME/go/bin

使用:wq儲存後使用如下命令將儲存立即重新整理

$ source ~/.profile

  • 建立GOPATH目錄 由於在環境變數中設定了GOPATH目錄的位置,所以我們需要在家目錄下建立該資料夾

$ cd ~
$ mkdir go

  • 檢視go版本,測試環境設定是否成功

$ go version
go version go1.10 linux/amd64

安裝Docker

這裡使用的Docker官方文件來安裝docker

  • 如果系統中有舊版本的Docker,需要先使用如下命令解除安裝

$ sudo apt-get remove docker docker-engine docker.io

  • 更新apt包索引

$ sudo apt-get update

  • 安裝軟體包以允許apt通過HTTPS使用遠端庫

$ sudo apt-get install
    apt-transport-https
    ca-certificates
    curl
    software-properties-common

若出現無法識別命令,可以先將該命令複製到一個文字檔案中,將去掉,將所有語句放在同一行下,然後復制執行。

  • 新增Docker的官方GPG金鑰

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

  • 通過搜尋指紋的最後8個字元,確認您現在擁有指紋識別碼9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88

$ sudo apt-key fingerprint 0EBFCD88

pub  4096R/0EBFCD88 2017-02-22
      Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid                  Docker Release (CE deb) <docker@docker.com>
sub  4096R/F273FCD8 2017-02-22

  • 使用以下命令設定穩定版本的遠端庫

$ sudo add-apt-repository
  "deb [arch=amd64] https://download.docker.com/linux/ubuntu
  $(lsb_release -cs)
  stable"

  • 再次更新apt包索引

$ sudo apt-get update

  • 使用apt安裝docker-ce

$ sudo apt-get install docker-ce

  • 檢視docker版本,測試環境設定是否成功

$ docker version
Client:
 Version:      18.03.1-ce
 API version:  1.37
 Go version:  go1.9.5
 Git commit:  9ee9f40
 Built:        Thu Apr 26 07:17:20 2018
 OS/Arch:      linux/amd64
 Experimental: false
 Orchestrator: swarm

Server:
 Engine:
  Version:      18.03.1-ce
  API version:  1.37 (minimum version 1.12)
  Go version:  go1.9.5
  Git commit:  9ee9f40
  Built:        Thu Apr 26 07:15:30 2018
  OS/Arch:      linux/amd64
  Experimental: false

安裝完成之後,需要將當前使用者新增到docker使用者組,然後為該使用者新增sudo許可權

  • 若沒有建立docker使用者組,可以使用如下命令建立一個GID999,組名為docker的使用者組

$ sudo groupadd –g 999 docker

  • 將當前使用者(ubuntu)新增到docker使用者組並分配sudo許可權

$ sudo usermod -aG docker ubuntu

登出後重新登入,然後新增阿里雲的Docker Hub映象(注意,不同版本的新增方法不同,見阿里雲容器 Hub

$ sudo mkdir -p /etc/docker
$ sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": ["https://obou6wyb.mirror.aliyuncs.com"]
}
EOF
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

如果覺得阿里雲映象不好用,可以選擇DaoClound的映象,設定方式見DaoCloud官方文件

安裝Docker-Compose

Docker-Compose是支援通過模板指令碼批次建立的一個元件。在安裝 Docker-Compose之前,需要安裝Python-pip

  • 安裝python-pip

$ sudo apt-get python-pip

  • 下載 Docker-Compose,這裡使用的是國內的DaoClound加速器進行下載

$ curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > ~/docker-compose

  • Docker-Compose資料夾移動到/usr/local/bin目錄下

$ sudo mv ~/docker-compose /usr/local/bin/docker-compose

  • Docker-Compose附上可執行許可權

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

下載Fabric原始碼

  • 先在GOPATH下建立對應的目錄

$ mkdir -p ~/go/src/github.com/hyperledger

  • 切換到對應目錄,使用Git命令將fabric的原始碼從github上克隆下來

$ cd ~/go/src/github.com/hyperledger
$ git clone https://github.com/hyperledger/fabric.git

  • 由於Fabric一直在更新,而我們並不需要使用最新的原始碼,所有將版本切換到v1.0.0

$ cd ~/go/src/github.com/hyperledger/fabric
$ git checkout v1.0.0

下載Fabric Docker映象

由於剛才設定了Docker Hub映象的地址,並且官方檔案中也提供了批次下載的指令碼,所有我們只需執行下面命令即可

$ cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli/
$ source download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0

由於剛才設定的是國內的映象站,在本地網速還不錯的情況下下載數度還是很快的。當下載完成後,使用如下命令檢查映象列表

$ docker images
REPOSITORY                              TAG                IMAGE ID            CREATED            SIZE
dev-peer0.org1.example.com-marbles-v4  latest              089d43e100c9        5 hours ago        173MB
dev-peer0.org1.example.com-fabcar-1.0  latest              6047921ee993        7 hours ago        173MB
hyperledger/fabric-tools                latest              0403fd1c72c7        10 months ago      1.32GB
hyperledger/fabric-tools                x86_64-1.0.0        0403fd1c72c7        10 months ago      1.32GB
hyperledger/fabric-couchdb              latest              2fbdbf3ab945        10 months ago      1.48GB
hyperledger/fabric-couchdb              x86_64-1.0.0        2fbdbf3ab945        10 months ago      1.48GB
hyperledger/fabric-kafka                latest              dbd3f94de4b5        10 months ago      1.3GB
hyperledger/fabric-kafka                x86_64-1.0.0        dbd3f94de4b5        10 months ago      1.3GB
hyperledger/fabric-zookeeper            latest              e545dbf1c6af        10 months ago      1.31GB
hyperledger/fabric-zookeeper            x86_64-1.0.0        e545dbf1c6af        10 months ago      1.31GB
hyperledger/fabric-orderer              latest              e317ca5638ba        10 months ago      179MB
hyperledger/fabric-orderer              x86_64-1.0.0        e317ca5638ba        10 months ago      179MB
hyperledger/fabric-peer                latest              6830dcd7b9b5        10 months ago      182MB
hyperledger/fabric-peer                x86_64-1.0.0        6830dcd7b9b5        10 months ago      182MB
hyperledger/fabric-Javaenv              latest              8948126f0935        10 months ago      1.42GB
hyperledger/fabric-javaenv              x86_64-1.0.0        8948126f0935        10 months ago      1.42GB
hyperledger/fabric-ccenv                latest              7182c260a5ca        10 months ago      1.29GB
hyperledger/fabric-ccenv                x86_64-1.0.0        7182c260a5ca        10 months ago      1.29GB
hyperledger/fabric-ca                  latest              a15c59ecda5b        10 months ago      238MB
hyperledger/fabric-ca                  x86_64-1.0.0        a15c59ecda5b        10 months ago      238MB
hyperledger/fabric-baseos              x86_64-0.3.1        4b0cab202084        12 months ago      157MB

出現以上結果說明映象已經下載成功

啟動Fabric網路並執行e2e_cli專案

  • 進入e2e_cli目錄,並執行啟動命令

$ cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli/
$ ./network_setup.sh up

這個過程做了如下操作

1.編譯生成Fabric公私鑰,證書的程式,程式在目錄:fabric/release/linux-amd64/bin下

2.基於configtx.yaml生成創世區塊和通道相關資訊,並儲存到channel-artifacts資料夾中

3.基於crypto-config.yaml生成公私鑰和證書資訊,並儲存在crypto-config資料夾中

4.基於docker-compose-cli.yaml啟動1 Orderer + 4 Peer + 1 CLI的Fabric容器

5.在CLI啟動的時候,會執行srcipt/script.sh檔案,這個指令碼檔案包含了建立Channel,加入Channel,安裝Example02,執行Example02等功能

最後執行完成,我們會看到如下截圖,說明網路啟動成功了

手動測試一下Fabric網路

我們以安裝好的Example02進行測試,在官方例子中,channel的名字是mychannel,鏈碼的名字是mycc,我們首先重新開啟一個命令列,然後進入CLI

  • 輸入以下命令即可

$ docker exec -it cli bash

  • 執行以下命令可以查詢a賬戶的餘額

$ peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

查詢結果如下圖所示 可以看到a賬戶的餘額現在是90

  • 執行以下命令可以查詢b賬戶的餘額

$ peer chaincode query -C mychannel -n mycc -c '{"Args":["query","b"]}'

查詢結果如下圖所示 可以看到b賬戶的餘額現在是210

  • 現在將b賬戶的餘額轉100給a賬戶,執行如下命令

peer chaincode invoke -o orderer.example.com:7050  --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem  -C mychannel -n mycc -c '{"Args":["invoke","b","a","100"]}'

執行結果如下圖所示 可以看到執行成功了

  • 再次查詢a賬戶的餘額

$ peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

查詢結果如下圖所示 可以看到a賬戶的餘額現在是190,比之前多了100

  • 再次查詢b賬戶的餘額

$ peer chaincode query -C mychannel -n mycc -c '{"Args":["query","b"]}'

查詢結果如下圖所示 可以看到b賬戶的餘額現在是110,比之前少了100

呼叫鏈碼一切正常

關閉區塊鏈網路

  • 退出CLI容器

root@4941e8bd4bd6:/opt/gopath/src/github.com/hyperledger/fabric/peer# exit

  • 關閉Fabric網路

$ cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli
$ ./network_setup.sh down

最後出現如下圖說明關閉區塊鏈網路成功

總結

至此,部署以及測試fabric的環境已經全部完成,下一篇部落格我將記錄如何在此基礎上部署及執行IBM官方區塊鏈例子marbles(彈珠資產)

本文永久更新連結地址https://www.linuxidc.com/Linux/2018-05/152393.htm


IT145.com E-mail:sddin#qq.com