手把手教你編譯Fabric源代碼


前言

之前一直在使用fabric編譯好的鏡像,這次想自己去手動編譯下fabric的源碼,去生成peer,orderer這些二進制文件以及cryptogen這些工具和docker鏡像。

如果網絡沒有問題的話,在fabric目錄下,使用makefile,直接make all即可。

但是做的時候,才知道由於國內網絡的原因,很多庫都不能使用,造成編譯失敗。在網絡上也沒找到很好的貼子,官方的文檔,也沒有詳細的描述,可能是因為簡單吧,網絡好的時候,直接就可以成功的。

現把我踩坑的記錄整理如下:

1. 環境變量

本文是基於ubutu 18.04,Fabric v1.3.0。

環境變量的設置,不用詳細的描述,需要下載curl,git,node.js,docker,docker-compose等工具,不會的童鞋可以自己百度。

我想說下go環境的變量的配置,其實百度上的教程挺多的,但是都是抄來抄去的,按照這樣做並不好,我先來貼出來我的,再來進行詳細的解釋(來源於官網)。

export GOPATH=/opt/gopath
export PATH=$PATH:/opt/go/bin

第二行設置的是go的安裝目錄,我的目錄是/opt/go,我們需要把go的bin目錄設置倒環境變量PATH中。在第一行我設置的是GOPATH,GOPATH是go的工作目錄。在go1.8之后,如果不設置這個值的話,默認目錄是~/go。還需要注意的一點是go的工作目錄不能和安裝目錄不能一樣。(插一句題外話,工作目錄用來存放Go的源碼,Go的可運行文件以及相應的編譯之后的包文件,即src,bin,pkg。)

注意:GOPATH不需要設置到PATH中,設置好GO的安裝目錄后,會自動尋找GOPATH。

GOPATH官方

2 第三方包的下載

此外,Fabric使用Go開發,使用到了一些第三方工具,我們需要提前下載好。

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

即使下載好上面的tools工具,還是不夠,我們還是需要下載第三方的go管理工具,gopm

go get -u github.com/gpmgo/gopm

接下來,我們就可以使用gopm工具安裝需要使用到的go包。

建議:在下載下面這些包的時候,我們首先可以使用go get來下載安裝,這樣是比較方便的。gopm則需要兩步,首先是gopm get ...,然后是go install...。

是這樣的,舉個例子:

gopm get -g -d golang.org/x/tools/cmd/goimports

go install golang.org/x/tools/cmd/goimports

接下來,我們需要安裝所需要的工具,注意,如果某個包下載失敗,可以使用gopm的方法。

go get github.com/kardianos/govendor
go get github.com/golang/lint/golint
go get golang.org/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-xml
go get github.com/golang/protobuf/protoc-gen-go

讓人十分惡心的是github.com/golang/lint/golint這個包,使用go get和gopm get都無法下載。

我們可以先在GitHub上下載源代碼,然后在執行go install進行安裝。

此外,我們還需要下載libltdl-dev這個庫:

sudo apt-get install libltdl-dev 

3. Fabric的編譯

3.1 Fabric代碼的下載:

mkdir -p ~/gopath/src/github.com/hyperledger 
cd ~/gopath/src/github.com/hyperledger 
git clone https://github.com/hyperledger/fabric.git
cd fabric
git checkout v1.3.0

這些做完之后,我們需要把上面生成的二進制文件,拷貝到 /opt/gopath/src/github.com/hyperledger/fabric/.build/bin

/opt/gopath/src/github.com/hyperledger/fabric/build/docker/gotools/bin目錄下。

3.2 編譯二進制文件

3.2.1 編譯相關包

我們使用下面的命令,make release來生成相關的包。

我們生成了cryptogen,configtxlator,cryptogen,orderer和peer等相關二進制文件。可以把他們拷貝倒build/docker/gotools/bin目錄下,用於后面的使用。

3.2.2 編譯基礎鏡像

接下來我們需要構建fabric-ccenv和fabric-javaenv鏡像,這兩個鏡像的構建也是十分惡心的。

需要首先下載fabric-baseimage鏡像,一般這個鏡像是沒任何問題的,問題的關鍵在於chaintool,這個很容易就掛掉了。掛掉的時候,我們可以手動去下載。

不過,這個地方給了我們網址,我們可以手動去下載。

https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/chaintool-1.0.1/hyperledger-fabric-chaintool-1.0.1.jar

下載后放到.build/bin下即可。注意選擇適合自己的版本。

接着我們使用make peer命令即可下載進行構建,會先自動下載fabric-ccenv和fabric-javaenv。

3.2.3 docker鏡像的生成

如果前面沒有失敗的話,會生成各種二進制文件,我們需要把這些二進制文件打包到docker鏡像中。

為了方便,我們可以直接使用命令make docker即可構建所需的docker鏡像,我們也可以使用

make orderer-docker,make peer-docker,make tools-docker來分別進行構建。

我們來看下,最后成功構建的鏡像:

最后我們來看下docker鏡像之間的各種以來關系:

4. 總結

經過上面的實操,發現真的去構建還是比較麻煩的,官方沒有詳細的文檔也描述,網上的博客大都零零星星。需要自己不斷的踩坑。

另外,當需要安裝軟件的時候,我們最好去官方的文檔,這樣不會出錯,因為網上的博客的問題在於其版本可能不對,存在某個依賴包版本錯誤的問題,為以后的開發埋下隱患。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM