參考了楊保華和陳昌的《區塊鍊-原理、設計與應用》(後文不做特别說明的話, 所說的書均指該書)的第九章"超級賬本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
我實際安裝的時候總是會報如下錯誤:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiM4YTMxQTN3EjMwQDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
網上找了不少解決方案都不能解決, 後來實際安裝的是下面這個:
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中找到了該檔案. 下載下傳速度也很慢, 不過好歹還是下下來了.
将下載下傳好的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步中的方法安裝相關插件後, 還是會報下面錯誤.
這時應該把$GOPATH/bin下的protoc-gen-go檔案拷貝到$GOPATH/src/github.com/hyperledger/fabric/build/docker/gotools/bin/目錄下.
(3) 需要安裝chaintool, 否則報如下錯誤.
按照第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檔案夾, 可看到編譯安裝好的各元件和工具.
另外,fabric-ca元件被安裝在$GOPATH/bin目錄下:
至此結束配置過程.