天天看點

超級賬本Hyperledger-Fabric的環境配置 -- 參考《區塊鍊-原理、設計與應用》

       參考了楊保華和陳昌的《區塊鍊-原理、設計與應用》(後文不做特别說明的話, 所說的書均指該書)的第九章"超級賬本Fabric部署和使用". 在部署過程中, 按照書中步驟一步步來遇到了一些問題, 下面是我親測的一個比較實用的步驟. 主要調節了一下書中各元件工具的安裝順序, 并對部分指令進行了一些調整和說明. 其中直接引用書中原文的部分都用顔色标記了出來.

0. 環境介紹

虛拟機使用VMVARE, 作業系統是Ubuntu 16.04. 

1.  安裝go和docker及docker-compose

我在這一步驟參考的是深藍居的部落格 http://www.cnblogs.com/studyzy/p/7437157.html.  這裡再附錄上書中的介紹.

(1)安裝Go語言環境 

Go語言環境可以自行通路 golang.org網站下載下傳二進制壓縮包安裝。注意不推薦通過包管理器安裝,版本往往比較舊。 

如下載下傳Go1.8.5版本: 

https://golang.org/doc/install?download=go1.8.5.linux-amd64.tar.gz

下載下傳完成後,解壓目錄,并移動到GO_ROOT為/ usr / local/: 

$ tar-xvf go1.8.linux-amd64.tar.gz
$ sudomv go /usr/local
           

安裝完成後記得配置 GOPATH環境變量: 

$ export GOPATH=/home/BlockChain/Go 
$ export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
           

此時,可以通過 go version指令驗證安裝是否成功: 

$ go version 
go version go1.8 linux/amd64
           

(2)安裝Docker 

Fabric網絡目前依賴 Docker服務作為鍊碼容器的支援,是以即使是本地環境運作Fabric網絡,也需要在Peer節點上安裝 Docker環境。推薦使用1.12或者更新的版本。 

Linux作業系統下可以通過如下指令來快速安裝 Docker最新版: 

(3) 安裝docker-compose

docker-compose是一個Python程式, 可以友善的管理由多個docker執行個體組成的分布式服務.

首先, 安裝python-pip軟體包.

安裝docker-compose(推薦為1.8.0及以上版本)

2. 安裝Linux環境下相關依賴包

這裡書中介紹需要安裝如下依賴包(印象中在安裝fabric-peer的時候會用到其中某些包):

$ sudo apt-get update&& apt-getinstall -y libsnappy-dev zlib1g-dev libbz2-dev libltdl-dev libtool
           

我實際安裝的時候總是會報如下錯誤:

超級賬本Hyperledger-Fabric的環境配置 -- 參考《區塊鍊-原理、設計與應用》

網上找了不少解決方案都不能解決, 後來實際安裝的是下面這個:

sudo apt intall libltdl3-dev
           

3.  擷取fabric和fabric-ca代碼

首先,建立目錄.

$ mkdir -p $GOPATH/src/github.com/hyperledger
$ cd $GOPATH/src/github.com/hyperledger
           

然後從github或gerrit拉取代碼.

$ git clone http://gerrit.hyperledger.org/r/fabric
$ git clone http://gerrit.hyperledger.org/r/fabric-ca
           

然後切換到1.0.0版本:

git checkout v1.0.0
           

4. 擷取chaintool

chaintool可以協助使用者對鍊碼進行打包和部署,友善鍊碼的開發測試. 書中介紹的安裝chaintool方法是:

curl -L https://github.com/hyperledger/fabric-chaintool/releases/download/v0.10.3/chaintool >/usr/local/bin/chaintool
           

實際安裝時會發現由于國内網絡原因, 該指令并不能成功運作. 

最後我直接在https://github.com/hyperledger/fabric-chaintool/releases中找到了該檔案. 下載下傳速度也很慢, 不過好歹還是下下來了.

超級賬本Hyperledger-Fabric的環境配置 -- 參考《區塊鍊-原理、設計與應用》

将下載下傳好的chaintool檔案直接放到/usr/local/bin檔案夾下. 然後修改執行權限.

chmod a+x /usr/local/bin/chaintool
           

5. 安裝go語言相關工具

書中推薦安裝以下插件.

$ go getgithub.com/golang/protobuf/protoc-gen-go \
  && go get github.com/kardianos/govendor \
  && go get github.com/golang/lint/golint \
  && go get github.com/x/tools/cmd/goimports \
  && go get github.com/onsi/ginkgo/ginkgo \
  && go get github.com/axw/gocov/... \
  && go get github.com/client9/misspell/cmd/misspell \
  && go get github.com/Aleksi/gocov-xm
           

我在實際安裝時, 同樣由于國内網絡原因,隻能成功安裝前兩個插件. 安裝後可以在$GOPATH/bin下找到對應插件.

備注: 如果想安裝全部插件, 可以參考http://www.cnblogs.com/studyzy/p/8030613.html裡提供的方法.

6. 編譯安裝fabric-peer插件

書中介紹方法如下:

通過如下指令手動編譯并安裝 fabric-peer到$GOPATH/bin下。日前 fabric處于1.0.0大版本階段,是以指定相關版本号為1.0.0:

$ cd$GOPATH/src/github.com/hyperledger/fabric
$ ARCH=x86_64
$ BASEIMAGE_RELEASE=0.3.1
$ PROJECT_VERSION=1.0.0
$ LD_FLAGS="-Xgithub.com/hyperledger/fabric/common/metadata.Version=${PROJECT_VERSION}\
  -Xgithub.com/hyperledger/fabric/common/metadata.BaseVersion=${BASEIMAGE_RELEASE}\
  -Xgithub.com/hyperledger/fabric/common/metadata.BaseDockerLabel=org.hyperledger.fabric\
  -Xgithub.com/hyperledger/fabric/common/metadata.DockerNamespace=hyperledger \
  -Xgithub.com/hyperledger/fabric/common/metadata.BaseDockerNamespace=hyperledger"
$ CGO_CFLAGS=" " go install-1dflags "$LD_FLAGS -linkmode external -extldflags '-static -1pthread'" \
 github.com/hyperledger/fabric/peer
           

當然,使用者也可以使用源碼中的 Makefile來進行編譯。這種方式下,需要自動從Dockerhub上擷取包括基礎鏡像在内的依賴檔案,花費時間可能稍長。相關指令如下所示:

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

備注: 我使用的是make peer指令, 期間陸續遇到以下錯誤. (直接使用指令行安裝更快些, 至于是否需要相關go插件記不太清了.).

(1) 需要安裝第5步中的某些go插件, 否則報錯.

(2) 按第5步中的方法安裝相關插件後, 還是會報下面錯誤.

超級賬本Hyperledger-Fabric的環境配置 -- 參考《區塊鍊-原理、設計與應用》

這時應該把$GOPATH/bin下的protoc-gen-go檔案拷貝到$GOPATH/src/github.com/hyperledger/fabric/build/docker/gotools/bin/目錄下.

(3) 需要安裝chaintool, 否則報如下錯誤.

超級賬本Hyperledger-Fabric的環境配置 -- 參考《區塊鍊-原理、設計與應用》

按照第4步中的方法下載下傳好chaintool即可.

7. 安裝fabric-order

安裝好fabric-peer之後, fabric-order的安裝就順利了很多(我使用的make orderer). 書中介紹如下:

通過如下指令手動編譯并安裝 fabric-orderer到$GOPATH/bin下:

$ cd$GOPATH/src/github.com/hyperledger/fabric
$ ARCH=X86_64
$ BASEIMAGE_RELEASE=0.3.1
$ PROJECT_VERSION=1.0.0
$ LD_FLAGS="-Xgithub.com/hyperledger/fabric/common/metadata.Version=${PROJECT_VERSION} \
  -Xgithub.com/hyperledger/fabric/common/metadata.BaseVersion=${BASEIMAGE_RELEASE}\
  -Xgithub.com/hyperledger/fabric/common/metadata.BaseDockerLabel=org.hyperledger.fabric\
  -Xgithub.com/hyperledger/fabric/common/metadata.DockerNamespace=hyperledger \
  -Xgithub.com/hyperledger/fabric/common/metadata.BaseDockerNamespace=hyperledger"
$ CGO_CFLAGS=" " go install-1dflags "$LD_FLAGS -linkmode external -extldflags '-static-1pthread'" \
 github.com/hyperledger/fabric/orderer
           

同樣,使用源碼中的 Makefile來進行編譯的指令如下:

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

8. 安裝fabric-ca元件

這裡書中給出的安裝指令有誤, 最後缺少了一個句點. 正确的安裝指令如下:

$ go install -ldflags " -linkmode external-extldflags '-static -lpthread'" github.com/hyperledger/fabric-ca/cmd/…
           

指令執行時會報一大堆的warning, 不必理會.

9. 編譯安裝輔助工具

書中介紹如下:

Fabric中提供了一系列輔助工具,包括cryptogen(生成組織結構和身份檔案)、configtxgen(生成配置區塊和配置交易)、configtxlator(解讀配置資訊)等,可以通過如下指令快速編譯和安裝:

#編譯安裝 cryptogen
$ PROJECT_VERSION=1.0.0
$ CGO_CFLAGS=" " \
    goinstall -tags "" \
   -1dflags "-Xgithub.com/hyperledger/fabric/common/tools/cryptogen/metadata.Version=${PROJECT_VERSION}"\
   github.com/hyperledger/fabric/common/tools/cryptoge

# 編譯安裝 configtxgen
$ PROJECT_VERSION=1.0.0
$ CGO_CFLAGS=" " \
   go install -tags "nopkcs11" \
  -1dflags "-X        
  github.com/hyperledger/fabric/common/configtx/tool/configtxgen/metadata.Version=
        ${PROJECT_VERSION}"  \
  github.com/hyperledger/fabric/common/configtx/tool/configtxge

# 編譯安裝 configtxlator
$ PROJECT_VERSION=1.0.0
$ CGO_CFLAGS=" " \
   goinstall -tags "" \
  -1dflags "-Xgithub.com/hyperledger/fabric/common/tools/configtxlator/metadata.Version=
        ${PROJECT_VERSION}" \
github.com/hyperledger/fabric/common/tools/configtxlato
           

我直接使用的Makefile方式來進行編譯, 速度也很快.

10. 結束配置

全部安裝完畢後, 檢視fabric源碼目錄下的build/bin檔案夾, 可看到編譯安裝好的各元件和工具.

超級賬本Hyperledger-Fabric的環境配置 -- 參考《區塊鍊-原理、設計與應用》

另外,fabric-ca元件被安裝在$GOPATH/bin目錄下:

超級賬本Hyperledger-Fabric的環境配置 -- 參考《區塊鍊-原理、設計與應用》

至此結束配置過程.

繼續閱讀