官术网_书友最值得收藏!

第1章 Hyperledger Fabric認知與環(huán)境搭建

1.1 全面認識超級賬本

目標(biāo)

1.了解超級賬本的由來及特點。

2.清楚超級賬本的分類。

3.了解Hyperledger Fabric的特點。

1.1.1 超級賬本由來

當(dāng)你拿起這本書開始閱讀時,說明你對區(qū)塊鏈技術(shù)已經(jīng)有了相關(guān)的了解,而且想通過自己的努力或團隊合作的方式開發(fā)出一款真正基于區(qū)塊鏈技術(shù)的落地應(yīng)用。那么恭喜你,你的選擇是正確且明智的。

超級賬本,即Hyperledger項目是區(qū)塊鏈技術(shù)中第一個面向企業(yè)應(yīng)用場景的開源分布式賬本平臺。

2015年12月由Linux基金會主導(dǎo)并牽頭,IBM、Intel、Cisco等制造和科技行業(yè)的巨頭共同宣布了Hyperledger聯(lián)合項目成立。

Hyperledger將區(qū)塊鏈技術(shù)引入聯(lián)盟鏈的應(yīng)用場景中,為未來基于區(qū)塊鏈技術(shù)打造高效率的商業(yè)網(wǎng)絡(luò)打下基礎(chǔ),為透明、公開、去中心化的企業(yè)級分布式賬本技術(shù)提供開源參考實現(xiàn),目前已加入的成員超過260家,國外的如IBM、Intel、Cisco、Oracle、RedHat、Samsung、Fujitsu、Airbus等;國內(nèi)的如百度、小米、騰訊、聯(lián)想、華為、浪潮、京東、迅雷、房掌柜、中國民生銀行、招商銀行、保全網(wǎng)等。

Hyperledger官網(wǎng)地址:https://www.hyperledger.org

1.1.2 超級賬本分類

在Hyperledger這個大家庭中,項目可以分為兩大類別。

框架項目:區(qū)塊鏈應(yīng)用開發(fā)平臺,提供企業(yè)級應(yīng)用程序開發(fā)環(huán)境及相關(guān)的SDK。

實用工具:區(qū)塊鏈應(yīng)用測試、部署、管理等工作的相關(guān)工具。

1.框架項目

Fabric:用模塊化架構(gòu)作為開發(fā)區(qū)塊鏈程序或解決方案的基礎(chǔ),支持一些組件(如共識算法和成員服務(wù))的即插即用。

Iroha:由Soramitsu、Hitachi、NTT Data和Colu提供,使用C++編寫,采用拜占庭容錯一致性算法實現(xiàn)共識,是為了將分布式賬本技術(shù)更容易地與基礎(chǔ)架構(gòu)型項目集成而設(shè)計的一個區(qū)塊鏈框架項目。應(yīng)用程序可以使用Python、Java、JavaScript、C++在Android和iOS移動平臺編寫。

Sawtooth:一個創(chuàng)建、部署和運行分布式賬本的模塊化平臺。它包含一個新奇的共識算法——PoET(Proof of Elapsed Time,經(jīng)歷時間證明),面向大型分布式驗證器群,消耗最少的資源。

Burrow:由Monax提供,由Intel公司共同贊助,是一個支持許可的智能合約機,該系列的第一個版本發(fā)表于2014年12月。Burrow提供了一個模塊化的區(qū)塊鏈客戶端,內(nèi)置一個經(jīng)許可的智能合約解釋器,它部分是按照以太坊虛擬機(Ethereum Virtual Machine,EVM)規(guī)范而開發(fā)的。

Indy:一種特別為去中心化的身份而建立的分布式賬本。它提供了基于區(qū)塊鏈或者其他分布式賬本互操作以創(chuàng)建與使用獨立數(shù)字身份的工具、代碼庫和可重用組件。

2.實用工具

Explorer:由IBM、Intel及DTCC提供;可以查看、調(diào)用、部署或查詢區(qū)塊、交易、網(wǎng)絡(luò)信息、鏈碼和交易序列,以及賬本中的其他相關(guān)信息。

Composer:一個構(gòu)建區(qū)塊鏈商業(yè)網(wǎng)絡(luò)的協(xié)作工具,用來加速智能合約的開發(fā)及分布式賬本的部署;使用JavaScript構(gòu)建。

Cello:由IBM提供,贊助商來自Soramitsu、華為和Intel,旨在為區(qū)塊鏈生態(tài)系統(tǒng)帶來按需部署服務(wù)的模式,減少創(chuàng)建、管理、終止區(qū)塊鏈的難度。

Caliper:由華為、Hyperchain、Oracle、Bitwise、Soramitsu、IBM和布達佩斯技術(shù)與經(jīng)濟大學(xué)的開發(fā)人員提供,是一個區(qū)塊鏈基準(zhǔn)工具,內(nèi)置一套預(yù)定義的測試用例,讓使用者可以測試特定區(qū)塊鏈執(zhí)行的性能。

1.1.3 認識Hyperledger Fabric

Hyperledger Fabric是一個區(qū)塊鏈的實現(xiàn),由Digital Asset和IBM提供,是Linux基金會托管的Hyperledger項目之一。Hyperledger Fabric從誕生之初就立志要成為超級賬本中最優(yōu)秀的項目(現(xiàn)實也確實如此)。

作為開發(fā)具有模塊化架構(gòu)的應(yīng)用程序或解決方案的基礎(chǔ),Hyperledger Fabric實現(xiàn)了組件(如共識、成員服務(wù))的即插即用。Hyperledger Fabric利用容器技術(shù)來托管稱為“鏈碼”的智能合約,其中包含系統(tǒng)的應(yīng)用程序邏輯。

與其他區(qū)塊鏈技術(shù)類似,Hyperledger Fabric使用智能合約操作賬本,并且是一個通過所有參與者管理交易的系統(tǒng)。Hyperledger Fabric與其他公有區(qū)塊鏈系統(tǒng)最大的不同主要體現(xiàn)在以下兩個方面。

1)私有:Hyperledger Fabric提供了建立通道(Channel)的功能,允許參與者為交易新建一個單獨的賬本。參與者并不希望所有的交易信息(如提供給部分客戶的特定價格信息)都對網(wǎng)絡(luò)中所有參與者公開。只有在同一個通道中的參與者,才會擁有該通道中的賬本,而其他不在此通道中的參與者則無權(quán)查看這個賬本的相關(guān)信息。

2)許可:與開放無須許可的網(wǎng)絡(luò)系統(tǒng)允許未知身份的參與者加入網(wǎng)絡(luò)不同(需要通過工作量證明協(xié)議來保證交易有效并維護網(wǎng)絡(luò)的安全),Hyperledger Fabric通過MSP(Membership Service Provider)來登記所有的成員。

Hyperledger Fabric項目GitHub網(wǎng)址:https://github.com/hyperledger/fabric

1.2 邁出第一步:搭建環(huán)境

目標(biāo)

1.檢查操作系統(tǒng)。

2.檢查并安裝所需工具。

3.可選安裝Node及NPM。

1.2.1 操作系統(tǒng)

推薦使用的操作系統(tǒng)為64位的Ubuntu 16.04 LTS,系統(tǒng)內(nèi)核為GNU/Linux 4.13.0-36-generic x86_64。

硬件資源要求:內(nèi)存最低為2GB,最好在3GB以上;磁盤空間為30GB或更高。

如果計算機默認為Windows操作系統(tǒng),可以在Windows系統(tǒng)中安裝一個VMware虛擬機應(yīng)用程序,然后在VMWare虛擬機中安裝Ubuntu 16.04系統(tǒng),最后在Windows操作系統(tǒng)中安裝一個遠程連接工具(如XShell或SecureCRT),以便連接并操作Ubuntu系統(tǒng)。

如果使用的是Mac電腦,同樣建議以安裝、使用虛擬機的方式來學(xué)習(xí)。

1.2.2 安裝所需工具

1.安裝git

git是一個非常優(yōu)秀的開源版本管理控制工具,使用git工具可以方便地下載官方(Golang、Hyperledger Fabric等)在GitHub網(wǎng)站上發(fā)布的相關(guān)源代碼或其他內(nèi)容。

安裝git工具使用如下命令:


$ sudo apt update
$ sudo apt install git

Mac OS系統(tǒng)中默認已安裝該工具。如果未安裝該工具,則可以在git-scm官方網(wǎng)站(https://git-scm.com/downloads)下載相應(yīng)系統(tǒng)的安裝包并安裝。

2.安裝cURL

使用如下命令安裝cURL:


$ sudo apt install curl

其他系統(tǒng)的cURL安裝包可以在https://curl.haxx.se/download.html頁面中下載并安裝。

3.安裝Docker

查看系統(tǒng)中是否已經(jīng)安裝Docker:


$ docker --version

使用如下命令安裝Docker的最新版本:


$ sudo apt update
$ sudo apt install docker.io

查看Docker版本信息:


$ docker --version

輸出類似如下的Docker版本信息:


Docker version 17.03.2-ce, build f5ec1e2

4.安裝docker-compose

確定系統(tǒng)中是否已安裝docker-compose工具:


$ docker-compose --version

如果系統(tǒng)提示未安裝,則使用如下命令安裝docker-compose工具:


$ sudo apt install docker-compose

安裝成功后,查看docker-compose版本信息:


$ docker-compose --version

輸出類似如下的docker-compose版本信息:


docker-compose version 1.8.0, build unknown

5.安裝Golang

Fabric 1.0.0版本要求Golang 1.7以上版本,F(xiàn)abric 1.1.0版本要求Golang 1.9以上版本,F(xiàn)abric 1.2.0版本要求Golang 1.10以上版本,我們使用Fabric 1.2.0版本,所以從官方下載最新版本的Golang。

(1)下載Golang

使用wget工具下載Golang的最新版本壓縮包文件go1.10.3.linux-amd64.tar.gz:


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

下載Golang壓縮包文件,需要操作系統(tǒng)能夠保證正常訪問Golang官方網(wǎng)站。下載過程可能耗時較長(取決于具體網(wǎng)絡(luò)情況),請耐心等待。

其他系統(tǒng)可以在Golang官方網(wǎng)站https://golang.org/dl/下載頁面中下載相應(yīng)的安裝包并安裝。

下載完成后,文件會保存在當(dāng)前目錄下。可以使用ll命令查看:

7.tif

(2)解壓文件

使用tar命令將下載后的壓縮包文件解壓到指定的/usr/local/路徑下:


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

注意,在解壓過程中可能出現(xiàn)如下錯誤:


gzip: stdin: unexpected end of f ile
tar: Unexpected EOF in archive
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now

或如下錯誤信息:


gzip: stdin: unexpected end of f ile
tar: 歸檔文件中異常的 EOF
tar: 歸檔文件中異常的 EOF
tar: Error is not recoverable: exiting now

如果出現(xiàn)上述錯誤提示信息,則說明下載的壓縮包文件有問題,如果沒有下載完整或壓縮包數(shù)據(jù)損壞,可將其刪除后重新下載并解壓至指定的目錄中。

(3)配置環(huán)境變量

將壓縮包文件解壓至指定目錄后,Golang可以讓系統(tǒng)的所有用戶正常使用,這里使用vim文件編輯工具打開系統(tǒng)的profile文件進行編輯:


$ sudo vim /etc/prof ile

如果只想讓當(dāng)前登錄用戶使用Golang,而其他用戶不能使用Golang,則編輯當(dāng)前用戶$HOME目錄下的.bashrc或.profile文件,在該文件中添加相應(yīng)的環(huán)境變量即可。

在profile文件最后添加如下內(nèi)容:


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

使用source命令,使剛剛添加的配置信息生效:


$ source /etc/prof ile

通過go version命令驗證是否成功:


$ go version

輸出如下的Golang版本信息:


go version go1.10.3 linux/amd64

如果系統(tǒng)中有舊版本的Golang,則使用如下命令卸載舊版本的Golang,然后重新安裝并配置:


$ su -
# apt-get remove golang-go --purge && apt-get autoremove --purge && apt-get clean

6.安裝NVM與npm

(1)安裝NVM

NVM(Node Version Manager)是Node.js的版本管理軟件,可以根據(jù)不同的需求場景隨時在Node.js的各個版本之間進行切換。

由于Node.js版本更新較快,且各版本之間差異較大,直接從Node官網(wǎng)安裝可能需要很長時間,而且中間可能會因為網(wǎng)絡(luò)訪問及數(shù)據(jù)傳輸原因造成下載中斷或失敗等問題。為了方便安裝及后期管理Node.js的版本,需要先在系統(tǒng)中安裝NVM管理工具。使用如下命令安裝NVM:


$ sudo apt update
$ curl -o- https:// raw.githubusercontent.com/creationix/nvm/v0.33.10/install.sh | bash
$ export NVM_DIR="$HOME/.nvm"
$ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

(2)安裝Node

NVM工具安裝并配置成功后,可以直接使用nvm命令安裝Node,且Node安裝成功后,NVM會自動對npm工具進行安裝。使用如下命令安裝Node:


$ nvm install v8.11.1

安裝Node時需要注意,安裝版本為8.9.x或以上的Node.js,F(xiàn)abric目前不支持9.x系列的Node.js版本。安裝成功輸出如下內(nèi)容:

9.tif

(3)檢查Node及npm版本


$ node -v && npm -v

輸出內(nèi)容如下:


v8.11.1
5.6.0

FAQ

1.Hyperledger Fabric只支持Ubuntu系統(tǒng)嗎?

Hyperledger Fabric支持常見的Linux相關(guān)系統(tǒng)(如Debian、Cent OS等)和Mac OS。

由于不同操作系統(tǒng)或各系統(tǒng)的不同版本可能會造成一些問題,所以在此推薦使用的操作系統(tǒng)為64位的Ubuntu 16.04 LTS。

2.cURL是什么?有什么作用?

cURL是一個可以在終端命令行下使用URL語法執(zhí)行的開源文件傳輸工具。它可以支持基于HTTP/Socket的代理;cURL還支持使用SSL證書,支持HTTP POST、HTTP PUT,支持FTP上傳,以及基于HTTP表單的上傳;支持Cookie,可以使用用戶名+密碼的方式實現(xiàn)認證(Basic、Plain、Digest、CRAM-MD5、NTLM、Negotiate和Kerberos)等。

3.為什么要安裝Docker及docker-compose?

Docker是一個開源的應(yīng)用容器引擎,可以為應(yīng)用創(chuàng)建一個輕量級的、可移植的容器。Hyperledger Fabric環(huán)境依賴于Docker提供的容器服務(wù),所以必須安裝Docker環(huán)境;推薦使用1.13或更高版本。

Compose是一個用于定義和運行多個容器的Docker應(yīng)用程序的工具,可以使用YAML文件配置相關(guān)的指定服務(wù),運行該服務(wù)時只需要一個簡單的命令即可。

4.能否不使用Golang而換作其他語言環(huán)境?

Hyperledger Fabric的很多組件使用Golang實現(xiàn),并且我們會使用Golang來編寫鏈?zhǔn)酱a的應(yīng)用程序,所以需要在系統(tǒng)中安裝并設(shè)置Golang環(huán)境。

5.一定要安裝Node與npm嗎?

Node與npm工具為可選安裝工具。如果后期使用Node.js的Hyperledger Fabric SDK開發(fā)Hyperledger Fabric應(yīng)用程序,則需要安裝;否則無須安裝。

1.3 安裝Hyperledger Fabric

目標(biāo)

1.順利下載Hyperledger Fabric。

2.明確bootstrap.sh腳本做了哪些工作。

1.3.1 下載fabric-samples與二進制文件

為了方便后期管理,在當(dāng)前登錄用戶的HOME目錄下創(chuàng)建一個空目錄并進入該目錄:


$ mkdir hyfa && cd hyfa

新建文件bootstrap.sh并添加內(nèi)容:


$ vim bootstrap.sh

https://github.com/hyperledger/fabric/blob/master/scripts/bootstrap.sh中的內(nèi)容復(fù)制、保存后退出。

該bootstrap.sh可執(zhí)行腳本文件的作用如下。

1)如果當(dāng)前目錄中沒有hyperledger/fabric-samples,則從github.com克隆hyperledger/fabric-samples存儲庫。

2)使用checkout簽出對應(yīng)指定的版本標(biāo)簽。

3)將指定版本的Hyperledger Fabric平臺特定的二進制文件和配置文件安裝到fabric-samples存儲庫的根目錄中。

4)下載指定版本的Hyperledger Fabric Docker鏡像文件。

5)將下載的Docker鏡像文件標(biāo)記為“l(fā)atest”。

創(chuàng)建的bootstrap.sh腳本文件并不能立即執(zhí)行,必須對其賦予可執(zhí)行權(quán)限才能夠運行。執(zhí)行如下命令對bootstrap.sh腳本文件賦予可執(zhí)行權(quán)限:


$ chmod +x bootstrap.sh

執(zhí)行bootstrap.sh:


$ sudo ./bootstrap.sh 1.2.0

確定網(wǎng)絡(luò)穩(wěn)定,否則會導(dǎo)致各種問題,例如,下載到一半時網(wǎng)絡(luò)超時,下載失敗等;由于Docker的各種鏡像文件下載時間較長,所以請耐心等待。

下載完成后,查看相關(guān)輸出內(nèi)容。如果有下載失敗的鏡像,可再次執(zhí)行如下命令重新下載。


$ sudo ./bootstrap.sh 1.2.0

對于已下載的Docker鏡像文件,再次執(zhí)行腳本命令不會重新下載。

安裝完成后終端自動輸出:


===> List out hyperledger docker images
hyperledger/fabric-ca         1.2.0    66cc132bd09c   4 weeks ago     252 MB
hyperledger/fabric-ca         latest   66cc132bd09c   4 weeks ago     252 MB
hyperledger/fabric-tools      1.2.0    379602873003   4 weeks ago     1.51 GB
hyperledger/fabric-tools      latest   379602873003   4 weeks ago     1.51 GB
hyperledger/fabric-ccenv      1.2.0    6acf31e2d9a4   4 weeks ago     1.43 GB
hyperledger/fabric-ccenv      latest   6acf31e2d9a4   4 weeks ago     1.43 GB
hyperledger/fabric-orderer    1.2.0    4baf7789a8ec   4 weeks ago     152 MB
hyperledger/fabric-orderer    latest   4baf7789a8ec   4 weeks ago     152 MB
hyperledger/fabric-peer       1.2.0    82c262e65984   4 weeks ago     159 MB
hyperledger/fabric-peer       latest   82c262e65984   4 weeks ago     159 MB
hyperledger/fabric-zookeeper  0.4.10   2b51158f3898   5 weeks ago     1.44 GB
hyperledger/fabric-zookeeper  latest   2b51158f3898   5 weeks ago     1.44 GB
hyperledger/fabric-kafka      0.4.10   936aef6db0e6   5 weeks ago     1.45 GB
hyperledger/fabric-kafka      latest   936aef6db0e6   5 weeks ago     1.45 GB
hyperledger/fabric-couchdb    0.4.10   3092eca241fc   5 weeks ago     1.61 GB
hyperledger/fabric-couchdb    latest   3092eca241fc   5 weeks ago     1.61 GB

添加環(huán)境變量(可選執(zhí)行命令):


$ export PATH=<path to download location>/bin:$PATH

<path to download location>表示fabric-samples文件目錄所在路徑,例如:


$ export PATH=$HOME/hyfa/fabric-samples/bin:$PATH

1.3.2 Hyperledger Fabric源碼方式編譯

在1.3.1節(jié)中,我們以提供腳本的方式,可以下載并安裝fabric-samples和二進制文件到操作系統(tǒng)中,大大簡化了安裝過程。

Hyperledger Fabric還有另外一種安裝方式,就是以源碼的方式進行本地編譯安裝,此方式相較1.3.1節(jié)的方式略微復(fù)雜,需要手動編譯生成相應(yīng)的工具,在此逐一介紹。

(1)下載源碼

先使用mkdir命令創(chuàng)建相應(yīng)的目錄,然后使用git clone命令將Hyperledger Fabric源碼克隆至該目錄中:


$ mkdir -p $GOPATH/src/github.com/hyperledger/
$ cd $GOPATH/src/github.com/hyperledger/
$ git clone https:// github.com/hyperledger/fabric.git

注意,也可以使用go get命令下載源碼,需要手動創(chuàng)建相應(yīng)的目錄:


$ go get github.com/hyperledger/fabric

下載可能需要幾分鐘,也可能需要十幾分鐘,取決于當(dāng)前的網(wǎng)絡(luò)環(huán)境,請耐心等待。源碼下載完成后使用git checkout命令切換至指定的分支:


$ cd $GOPATH/src/github.com/hyperledger/fabric/
$ git checkout -b v1.2.0

源碼下載完成之后,并不能直接使用,我們需要對其進行編譯,生成所需要的各種節(jié)點及相應(yīng)的工具。我們直接使用源碼提供的Makefile來進行編譯。首先對Makefile文件進行編輯,指定相應(yīng)的版本:


$ vim Makef ile

修改文件中BASE_VERSION、PREV_VERSION、CHAINTOOL_RELEASE、BASEIMAGE_RELEASE的值,修改之后的內(nèi)容如下:


BASE_VERSION = 1.2.1
PREV_VERSION = 1.2.0
CHAINTOOL_RELEASE=1.1.1
BASEIMAGE_RELEASE=0.4.10

(2)編譯Orderer

執(zhí)行以下命令編譯Orderer:


$ cd $GOPATH/src/github.com/hyperledger/fabric/
$ make orderer

命令執(zhí)行后,終端輸出如下信息:

(3)編譯Peer

編譯Peer的命令如下:


$ make peer

命令執(zhí)行成功后,終端輸出如下信息:

使用系統(tǒng)命令ll查看.build/bin目錄內(nèi)容:


$ ll .build/bin/

命令執(zhí)行后,可以看到.build/bin目錄中已生成了如下兩個工具:

(4)編譯生成相關(guān)工具

Hyperledger Fabric中除了Orderer和Peer之外,還提供了在搭建網(wǎng)絡(luò)環(huán)境時所需要的一系列輔助工具。

·configtxgen:生成初始區(qū)塊及通道交易配置文件的工具。

·cryptogen:生成組織結(jié)構(gòu)及相應(yīng)的身份文件的工具。

·configtxlator:將指定的文件在二進制格式與JSON格式之間進行轉(zhuǎn)換。

編譯生成這些工具同樣可以使用make命令:


$ make conf igtxgen
$ make cryptogen
$ make conf igtxlator

編譯之后同樣使用ll命令查看.build/bin目錄中的內(nèi)容:

(5)編譯生成Docker鏡像

將當(dāng)前用戶添加到Docker組:


$ sudo usermod -aG docker kevin

注意

添加成功后必須注銷或重啟系統(tǒng)。

安裝依賴的libltdl-dev庫:


$ sudo apt-get install libltdl-dev

(6)獲取鏡像

編譯生成Docker鏡像需要用到Golang工具,所以我們需要通過git clone命令從github.com克隆至當(dāng)前系統(tǒng)中:


$ mkdir -p $GOPATH/src/golang.org/x
$ cd $GOPATH/src/golang.org/x
$ git clone https:// github.com/golang/tools.git

執(zhí)行編輯命令后將指定的環(huán)境變量設(shè)置到用戶的環(huán)境文件(.bashrc)中:


$ vim ~/.bashrc
export PATH=$PATH:$GOPATH/bin

為了能夠使配置的環(huán)境生效,需要執(zhí)行source命令:


$ source ~/.bashrc

Hyperledger Fabric源碼由Golang構(gòu)建,所以需要安裝Golang相關(guān)的工具,以方便開發(fā)和調(diào)試:


$ mkdir -p $GOPATH/src/golang.org/x
$ cd $GOPATH/src/golang.org/x
$ git clone https:// github.com/golang/net.git
$ git clone https:// github.com/golang/tools.git
$ cd $GOPATH
$ go get github.com/kardianos/govendor
$ go get github.com/onsi/ginkgo/ginkgo
$ go get github.com/golang/protobuf/protoc-gen-go
$ go get -u github.com/axw/gocov/...
$ go get -u github.com/AlekSi/gocov-xml
$ go get -u github.com/client9/misspell/cmd/misspell
$ go get -u golang.org/x/tools/cmd/goimports
$ go get -u github.com/golang/lint/golint

將之前安裝的Golang工具復(fù)制到Fabric目錄:


$ cd $GOPATH/src/github.com/hyperledger/fabric/
$ mkdir -p .build/docker/gotools/bin
$ cp ~/go/bin/* .build/docker/gotools/bin

使用make docker命令編譯生成相關(guān)的Docker鏡像:


$ cd $GOPATH/src/github.com/hyperledger/fabric/
$ make docker

(7)獲取鏡像方式二

可以直接從Docker Hub拉取鏡像,使用docker pull命令拉取指定的Docker鏡像。


$ export FABRIC_TAG=1.2.0
$ export CA_TAG=1.2.0
$ export THIRDPARTY_IMAGE_VERSION=0.4.10
$ docker pull hyperledger/fabric-peer:$FABRIC_TAG \
&& docker pull hyperledger/fabric-orderer:$FABRIC_TAG \
&& docker pull hyperledger/fabric-ca:$CA_TAG \
&& docker pull hyperledger/fabric-tools:$FABRIC_TAG \
&& docker pull hyperledger/fabric-ccenv:$FABRIC_TAG \
&& docker pull hyperledger/fabric-baseimage:$THIRDPARTY_IMAGE_VERSION \
&& docker pull hyperledger/fabric-baseos:$THIRDPARTY_IMAGE_VERSION \
&& docker pull hyperledger/fabric-couchdb:$THIRDPARTY_IMAGE_VERSION \
&& docker pull hyperledger/fabric-kafka:$THIRDPARTY_IMAGE_VERSION \
&& docker pull hyperledger/fabric-zookeeper:$THIRDPARTY_IMAGE_VERSION

將已下載的鏡像標(biāo)記為最新:


$ docker tag hyperledger/fabric-peer:$FABRIC_TAG hyperledger/fabric-peer \
&& docker tag hyperledger/fabric-orderer:$FABRIC_TAG hyperledger/fabric-orderer \
&& docker tag hyperledger/fabric-ca:$CA_TAG hyperledger/fabric-ca \
&& docker tag hyperledger/fabric-tools:$FABRIC_TAG hyperledger/fabric-tools \
&& docker tag hyperledger/fabric-ccenv:$FABRIC_TAG hyperledger/fabric-ccenv \
&& docker tag hyperledger/fabric-baseimage:$THIRDPARTY_IMAGE_VERSION 
  hyperledger/fabric-baseimage \
&& docker tag hyperledger/fabric-baseos:$THIRDPARTY_IMAGE_VERSION hyperledger/
  fabric-baseos \
&& docker tag hyperledger/fabric-couchdb:$THIRDPARTY_IMAGE_VERSION hyperledger/
  fabric-couchdb \
&& docker tag hyperledger/fabric-kafka:$THIRDPARTY_IMAGE_VERSION hyperledger/
  fabric-kafka \
&& docker tag hyperledger/fabric-zookeeper:$THIRDPARTY_IMAGE_VERSION hyperledger/
  fabric-zookeeper

之后可以使用docker images命令查看相關(guān)的鏡像信息:


$ docker images

命令執(zhí)行后終端輸出如下信息:

Hyperledger Fabric中可以用兩種方式進行編譯安裝:第一種是以bootstrap.sh腳本方式進行環(huán)境的安裝,優(yōu)點是簡單、方便,能夠快速上手;第二種是以Fabric源碼方式進行編譯,適合動手能力較強的人員,優(yōu)點是可以對Hyperledger Fabric相關(guān)組件有深入的理解,但缺點是容易出現(xiàn)各種錯誤且修正比較麻煩。

注意

為方便起見,本書的Hyperledger Fabric環(huán)境采用第一種方式(bootstrap.sh腳本方式)安裝構(gòu)建。

FAQ

1.bootstrap.sh腳本中的內(nèi)容有什么作用?

腳本執(zhí)行后將下載并提取設(shè)置網(wǎng)絡(luò)所需的所有特定于平臺的二進制文件,并保存在本地倉庫中,然后將Docker Hub中的Hyperledger Fabric Docker鏡像下載到本地Docker注冊表中,并將其標(biāo)記為“最新”。

2.下載Docker鏡像文件速度特別慢,有什么好的解決方式?

可在https://www.daocloud.io/網(wǎng)站中注冊一個賬號,注冊成功后,可以單擊加速器圖標(biāo)(如下圖所示)以獲取Docker加速器。

1)配置Docker加速器。在命令提示符中輸入如下圖所示的daocloud.io分配的加速器腳本命令(將輸入框中的腳本命令復(fù)制到命令提示符窗口中執(zhí)行即可),執(zhí)行完腳本之后,需要重啟Docker服務(wù)。

2)重啟Docker服務(wù)。執(zhí)行完該命令后,必須重啟Docker服務(wù)以生效:


$ sudo systemctl restart docker.service

3.下載完成后,添加的環(huán)境變量有什么意義?

添加環(huán)境變量的意義為在系統(tǒng)中任何路徑下使用Fabric相關(guān)的命令都可以讓系統(tǒng)找到該命令并且順利執(zhí)行。后期我們會進入Fabric目錄中執(zhí)行相應(yīng)的命令,所以也可以不添加該環(huán)境變量。

1.4 測試Hyperledger Fabric網(wǎng)絡(luò)環(huán)境

目標(biāo)

1.熟悉byfn.sh腳本的相關(guān)命令。

2.能夠自動實現(xiàn)你的第一個Hyperledger Fabric網(wǎng)絡(luò)環(huán)境。

Hyperledger Fabric網(wǎng)絡(luò)環(huán)境的構(gòu)成較為復(fù)雜,由N個節(jié)點組成一個分布式網(wǎng)絡(luò),每個節(jié)點都有自己的實體身份標(biāo)識;而且Hyperledger Fabric可以通過通道將一個網(wǎng)絡(luò)分割成不同的私有子網(wǎng),從而實現(xiàn)不同賬本之間數(shù)據(jù)的隔離性。所以,我們在使用Hyperledger Fabric之前,必須先構(gòu)建所需的網(wǎng)絡(luò)環(huán)境。

構(gòu)建Hyperledger Fabric網(wǎng)絡(luò)環(huán)境可以通過兩種方式實現(xiàn)。

1.使用自動化腳本實現(xiàn)

使用一個名為byfn.sh的自動化腳本文件自動構(gòu)建一個簡易的Hyperledger Fabric網(wǎng)絡(luò)環(huán)境并引導(dǎo)啟動,且自動生成相應(yīng)的一些配置文件,一般用于測試環(huán)境,本節(jié)內(nèi)容主要講解這種方式。

2.手動實現(xiàn)

為了適應(yīng)不同的且較為復(fù)雜的場景,這時自動化腳本方式就有些力不從心,必須由開發(fā)、運維及相關(guān)管理人員根據(jù)不同的情況,手動輸入相關(guān)命令構(gòu)建一個相當(dāng)復(fù)雜的網(wǎng)絡(luò)環(huán)境。這種實現(xiàn)方式參見第3章相關(guān)內(nèi)容。

1.4.1 測試Hyperledger Fabric環(huán)境

之前我們介紹過,使用一個名為byfn.sh的腳本實現(xiàn)Hyperledger Fabric網(wǎng)絡(luò)的自動構(gòu)建并測試,那么我們來看一下byfn.sh腳本都有哪些命令可以使用。首先進入fabric-samples目錄中的first-networkd子目錄:


$ cd fabric-samples/f irst-network

在first-network目錄下有一個自動化腳本byfn.sh,可以使用--help參數(shù)查看相應(yīng)的可用命令,在命令提示符中輸入如下命令:


$ ./byfn.sh --help

命令執(zhí)行成功后,會在終端輸出如下類似內(nèi)容(為方便起見,筆者已將其說明翻譯成中文):


up:啟動;
down:清除網(wǎng)絡(luò);
restart:重新啟動;
generate:生成證書及創(chuàng)世區(qū)塊;
upgrade:將網(wǎng)絡(luò)從1.1.x升級到1.2.x;
-c:用于指定channelName,默認值"mychannel";
-t:CLI timeout時間,默認值10;
-d:延遲啟動,默認值3;
-f:使用指定的網(wǎng)絡(luò)拓撲結(jié)構(gòu)文件,默認使用docker-compose-cli.yaml;
-s:指定使用的數(shù)據(jù)庫,可選 goleveldb/couchdb;
-l:指定chaincode使用的語言,可選golang/node;
-i:指定鏡像tag,默認 "latest"。

1.4.2 構(gòu)建你的第一個Hyperledger Fabric網(wǎng)絡(luò)

1.生成證書和密鑰

byfn.sh自動化腳本文件為各種Hyperledger Fabric網(wǎng)絡(luò)實體生成所有證書和密鑰,并且可以實現(xiàn)引導(dǎo)服務(wù)啟動及配置通道所需的一系列配置文件:


$ sudo ./byfn.sh -m generate

命令成功執(zhí)行后會生成1個Orderer+4個Peer+1個CLI的網(wǎng)絡(luò)結(jié)構(gòu),4個Peer包含在2個Org中。

根據(jù)提示輸入y,之后終端輸出類似如下的日志內(nèi)容:


Generating certs and genesis block for channel 'mychannel' with CLI timeout of 
  '10' seconds and CLI delay of '3' seconds
Continue? [Y/n] y
proceeding ...
/home/kevin/hyfa/fabric-samples/f?irst-network/../bin/cryptogen

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
# # # # # Generate certif?icates using cryptogen tool # # # # # # # # # 
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
+ cryptogen generate --conf?ig=./crypto-conf?ig.yaml
org1.example.com
org2.example.com
+ res=0
+ set +x
/home/kevin/hyfa/fabric-samples/f?irst-network/../bin/conf?igtxgen
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
# # # # # # # # # Generating Orderer Genesis block # # # # # # # # # # # # # # 
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
+ conf?igtxgen -prof?ile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/
  genesis.block
……
doOutputAnchorPeersUpdate -> INFO 003 Writing anchor peer update
+ res=0
+ set +x

2.啟動網(wǎng)絡(luò)

生成所需要的證書及密鑰之后,需要啟動網(wǎng)絡(luò)來確認Hyperledger Fabric網(wǎng)絡(luò)環(huán)境是否能夠正常工作,使用byfn.sh腳本來實現(xiàn)網(wǎng)絡(luò)的啟動,命令如下:


$ sudo ./byfn.sh -m up

命令執(zhí)行后,終端會輸出一個提示信息,根據(jù)提示輸入y,如果輸出如下類似內(nèi)容,則代表網(wǎng)絡(luò)啟動且測試成功:


Starting for channel 'mychannel' with CLI timeout of '10' seconds and CLI 
  delay of '3' seconds
Continue? [Y/n] y
proceeding ...
LOCAL_VERSION=1.2.0
DOCKER_IMAGE_VERSION=1.2.0
Creating network "net_byfn" with the default driver
Creating volume "net_peer0.org2.example.com" with default driver
Creating volume "net_peer1.org2.example.com" with default driver
Creating volume "net_peer1.org1.example.com" with default driver
Creating volume "net_peer0.org1.example.com" with default driver
Creating volume "net_orderer.example.com" with default driver
Creating peer0.org2.example.com
Creating peer0.org1.example.com
Creating peer1.org2.example.com
Creating orderer.example.com
Creating peer1.org1.example.com
Creating cli
____   _____     _     ____   _____ 
/ ___| |_   _|   / \   | _ \ |_   _|
\___ \   | |     / _ \   | |_) |   | |  
___) |   | |   / ___ \ | _ <   | |  
|____/   |_|   /_/   \_\ |_| \_\   |_| 
Build your first network (BYFN) end-to-end test
……
========Query successful on peer1.org2 on channel 'mychannel'==========
========= All GOOD, BYFN execution completed =========== 
_____   _   _   ____  
| ____| | \ | | | _ \ 
| _|   | \| | | | | | 
| |___ | |\ | | |_| | 
|_____| |_| \_| |____/  

3.關(guān)閉網(wǎng)絡(luò)

網(wǎng)絡(luò)測試成功后,為了方便后期的操作,最好將其關(guān)閉,以防止后期啟動網(wǎng)絡(luò)時造成的沖突錯誤,關(guān)閉網(wǎng)絡(luò)可執(zhí)行如下命令:


$ sudo ./byfn.sh -m down

根據(jù)提示輸入y,命令執(zhí)行后終端輸出類似如下的日志內(nèi)容:


Stopping for channel 'mychannel' with CLI timeout of '10' seconds and CLI 
  delay of '3' seconds
Continue? [Y/n] y
proceeding ...
Stopping cli ... done
Stopping peer1.org1.example.com ... done
……
Removing cli ... done
Removing peer1.org1.example.com ... done
……
7fb4e7907b3c
708576aff44f
0a8805ff393d
Untagged: dev-peer1.org2.example.com-mycc-1.0-26c2ef32838554aac4f7ad6f100aca86
  5e87959c9a126e86d764c8d01f8346ab:latest
Deleted: sha256:687d517a67c1b236724deb84c50e310fb87f39341de5c66857e3049222a99504
Deleted: sha256:be2477e444d06842e81fb691e4e94f7ed4a547aeb8ba4a963660356a915b61c7
……

使用byfn.sh腳本關(guān)閉網(wǎng)絡(luò)之后,將關(guān)閉容器,且刪除加密文件,并從Docker Registry中刪除鏈碼圖像。

注意

在網(wǎng)絡(luò)不再使用時,請務(wù)必關(guān)閉網(wǎng)絡(luò),以防止后期啟動網(wǎng)絡(luò)時引起沖突的錯誤。

FAQ

如果啟動網(wǎng)絡(luò)失敗怎么辦?

如果啟動網(wǎng)絡(luò)時發(fā)生錯誤,則執(zhí)行關(guān)閉命令后重新生成組織結(jié)構(gòu)及證書,然后再次執(zhí)行啟動網(wǎng)絡(luò)的命令。

主站蜘蛛池模板: 渑池县| 诸城市| 原阳县| 都昌县| 资溪县| 德令哈市| 岚皋县| 波密县| 岳西县| 原平市| 米脂县| 丰镇市| 筠连县| 灵丘县| 福泉市| 济源市| 祥云县| 徐州市| 长子县| 中牟县| 新民市| 石屏县| 石狮市| 炉霍县| 崇文区| 密山市| 恩施市| 靖安县| 紫金县| 巴南区| 富平县| 陈巴尔虎旗| 吉安县| 辉南县| 海安县| 临西县| 河间市| 太谷县| 天津市| 永济市| 尼木县|