超級賬本Hyperledger-Fabric本地編譯與安裝
來源於楊保華等《區塊鏈-原理、設計與應用》 本地編譯安裝部署超級賬本Fabric網路。
超級賬本Fabric基於Go語言實現,本地編譯推薦配置Golang1.7或更高版本的環境。下面將講解如何編譯產生fabric-peer、fabric-orderer和fabric-ca等組件的二進位檔案,以及如何安裝一些配置和開發相關的工具。
1 作業系統
常見的 Linux發行版(包括Ubuntu、Redhat、CentOS等)和 MacOS等都可以原生支援Fabric偏譯和運行。
Linux核心3.10+版本,支援64位環境。
作為 Fabric節點 ,實體記憶體建議至少為2GB。
如果有較多的鏈碼則需要更多容器,預留足夠的硬碟空間(一般建議20GB或更多)以儲存區塊檔案。
在生產環境中對效能和穩定性要求高的情境下,甚至預留更多的實體資源。
下面將預設以 Ubuntu16.04作業系統為例進行操作。
2 環境配置
(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
$ sudo mv 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)安裝依賴包
編譯 Fabric相關代碼,需要一些依賴包,可以通過如下命令安裝:
$ sudo apt-get update&& apt-get install -y libsnappy-dev zlib1g-dev libbz2-dev libltdl-dev libtool
(3)安裝Docker
Fabric網路目前依賴 Docker服務作為鏈碼容器的支援,因此即使是本地環境運行Fabric網路,也需要在Peer節點上安裝 Docker環境。推薦使用1.12或者更新的版本。
Linux作業系統下可以通過如下命令來快速安裝 Docker最新版:
$ curl -fsSL https://get.docker.com/ | sh
3 擷取代碼
目前, Fabric代碼的官方倉庫在社區的 Gerrit上,並即時同步到 Github倉庫中,讀者可以從任一倉庫中擷取代碼。
首先,將 Fabric代碼按照Go語言推薦方式進行存放,建立目錄結構並切換到該目錄,如下命令所示:
$ mkdir -p $GOPATH/src/github.com/hyperledger
$ cd $GOPATH/src/github.com/hyperledger
通過如下命令可以擷取 fabric-peer和fabric-orderer組件編譯所需要的代碼,兩者目前在同一倉庫中:
$ git clone http://gerrit.hyperledger.org/r/fabric
預設情況下,會下拉擷取帶有完整曆史的倉庫,這個過程取決於網路速度,可能需要較長時間。讀者也可以通過 --single-branch -b master --depth1命令選項來指定只擷取master分支最新的提交代碼,如下命令所示:
$ git clone --single-branch -b master --depth 1 http://gerrit.hyperledger.org/r/fabric
fabric-ca組件則在另外一個倉庫中,同樣,可以通過如下命令擷取:
$ sit clone http://gerrit.hyperledger.org/r/fabric-ca
4 編譯安裝 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="-X github.com/hyperledger/fabric/common/metadata.Version=${PROJECT_VERSION}\
-X github.com/hyperledger/fabric/common/metadata.BaseVersion=${BASEIMAGE_RELEASE}\
-X github.com/hyperledger/fabric/common/metadata.BaseDockerLabel=org.hyperledger.fabric \
-X github.com/hyperledger/fabric/common/metadata.DockerNamespace=hyperledger \
-X github.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
5 編譯安裝 fabric-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="-X github.com/hyperledger/fabric/common/metadata.Version=${PROJECT_VERSION} \
-X github.com/hyperledger/fabric/common/metadata.BaseVersion=${BASEIMAGE_RELEASE} \
-X github.com/hyperledger/fabric/common/metadata.BaseDockerLabel=org.hyperledger.fabric \
-X github.com/hyperledger/fabric/common/metadata.DockerNamespace=hyperledger \
-X github.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
6 編譯安裝fabric-ca組件
可以通過如下命令編譯並安裝fabric-ca 相關組件到$GOPATH/bin下:
$ go install -ldflags " -linkmode external -extldflags '-static -lpthread'" github.com/hyperledger/fabric-ca/cmd/..
7 編譯安裝協助工具輔助
Fabric中提供了一系列協助工具輔助,包括cryptogen(產生組織圖和身份檔案)、configtxgen(組建組態區塊和配置交易)、configtxlator(解讀配置資訊)等,可以通過如下命令快速編譯和安裝:
# 編譯安裝 cryptogen
$ PROJECT_VERSION=1.0.0
$ CGO_CFLAGS=" " \
go install -tags "" \
-1dflags "-X github.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=" " \
go install -tags "" \
-1dflags "-X github.com/hyperledger/fabric/common/tools/configtxlator/metadata.Version=
${PROJECT_VERSION}" \
github.com/hyperledger/fabric/common/tools/configtxlato
8 擷取chaintool