Hyperledger Fabric 環境搭建(1)

1,Fabric的程序模塊組成

Fabric不是一個單獨的程序而是由一組模塊組成,這些模塊中的每個都是一個可獨立運行的可執行文件。html

(1)peer  主節點模塊,負責存儲區塊鏈數據,運行維護鏈碼;java

(2)orderer  負責對交易進行排序,並將排好序的交易打包成區塊;python

(3)cryptogen  組織和證書生成模塊;linux

(4)configtxgen  區塊和交易生成模塊;git

(5)configtxlator  區塊和交易解析模塊。github

開發一個Fabric應用都須要這些模塊的參與。golang

2,安裝Golang運行環境

安裝Fabric以前要先安裝Golang的運行環境和相關軟件docker

使用wget命令行下載安裝包到linux
wget https://studygolang.com/dl/golang/go1.12.linux-amd64.tar.gz

解壓到/usr/local
tar -C /usr/local -xzf go1.12.linux-amd64.tar.gz
vi /etc/profile   編輯環境變量文件
export GOROOT=/usr/local/go    go的安裝目錄
export PATH=$PATH:$GOROOT/bin    添加到環境比變量
export GOPATH=/root/go      設置go的工做目錄
export PATH=$PATH:$GOPATH/BIN
刷新環境變量
source /etc/profile
查看go是否安裝成功
go --version

3,安裝Docker

https://docs.docker.com/install/linux/docker-ce/centos/數據庫

安裝dockerubuntu

curl -sSL https://get.daocloud.io/docker | sh
查看是否下載成功,下載的版本是什麼:docker version
開啓docker服務:service docker start
查看docker運行狀態:sudo service docker status
安裝完成後要修改當前用戶的權限:
sudo usermod -aG docker 用戶名
註銷並從新登錄,隨後添加DaoCloud鏡像(加速器):
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://36051225.m.daocloud.io
從新啓動docker:
service docker start
sudo service docker status
把docker設置成開機自啓動:
systemctl enable docker

安裝docker-compose

ubuntu: sudo apt-get install python-pip
curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > ~/docker-compose
sudo mv ~/docker-compose /usr/local/bin/docker-compose 
chmod +x /usr/local/bin/docker-compose

centos: yum -y install epel-release
sudo yum install python-pip
curl -L  https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > ~/docker-compose
sudo mv ~/docker-compose /usr/local/bin/docker-compose 
chmod +x /usr/local/bin/docker-compose 

4,Fabric的兩種安裝方式

4.1利用源碼直接編譯

利用已有Makefile文件進行make編譯,編譯完成後,這些模塊就能夠直接運行了。

第一步:建立目錄並下載代碼

mkdir -p $GOPATH/src/github.com/hyperledger
cd $GOPATH/src/github.com/hyperledger 
git clone https://github.com/hyperledger/fabric.git  (或者 git clone https://gerrit.hyperledger.org/r/fabric

其中$GOPATH爲Golang的工做目錄

第二步:安裝相關依賴軟件

go get github.com/golang/protobuf/protoc-gen-go
mkdir -p $GOPATH/src/github.com/hyperledger/fabric/.build/docker/gotools/bin
cp $GOPATH/bin/protoc-gen-go $GOPATH/src/github.com/hyperledger/fabric/.build/docker/gotools/bin

注意:

(1)若是用go get 命令沒有反應,多是網址被屏蔽,參考https://blog.csdn.net/qq_22211217/article/details/101854419解決

我用的是 設置代理 以下命令

go env -w GOPROXY=https://github.com/goproxy

(2)go get下載的文件會自動存放到$GOBIN對應的目錄中,若是沒有設置GOBIN,則會存放到$GOPATH/bin下面

第三步:編譯Fabric模塊

進入Fabric源碼所在文件夾,執行下面命令能夠一次編譯完成fabric的5個主要模塊。

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

編譯結果

[root@localhost fabric]# make release
Building release/linux-amd64/bin/configtxgen for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /root/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/configtxgen -tags "" -ldflags "-X github.com/hyperledger/fabric/common/tools/configtxgen/metadata.CommitSHA=8196d66" github.com/hyperledger/fabric/common/tools/configtxgen
Building release/linux-amd64/bin/cryptogen for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /root/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/cryptogen -tags "" -ldflags "-X github.com/hyperledger/fabric/common/tools/cryptogen/metadata.CommitSHA=8196d66" github.com/hyperledger/fabric/common/tools/cryptogen
Building release/linux-amd64/bin/idemixgen for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /root/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/idemixgen -tags "" -ldflags "-X github.com/hyperledger/fabric/common/tools/idemixgen/metadata.CommitSHA=8196d66" github.com/hyperledger/fabric/common/tools/idemixgen
Building release/linux-amd64/bin/discover for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /root/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/discover -tags "" -ldflags "-X github.com/hyperledger/fabric/cmd/discover/metadata.CommitSHA=8196d66" github.com/hyperledger/fabric/cmd/discover
Building release/linux-amd64/bin/configtxlator for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /root/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/configtxlator -tags "" -ldflags "-X github.com/hyperledger/fabric/common/tools/configtxlator/metadata.CommitSHA=8196d66" github.com/hyperledger/fabric/common/tools/configtxlator
Building release/linux-amd64/bin/peer for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /root/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/peer -tags "" -ldflags "-X github.com/hyperledger/fabric/common/metadata.Version=1.4.4 -X github.com/hyperledger/fabric/common/metadata.CommitSHA=8196d66 -X github.com/hyperledger/fabric/common/metadata.BaseVersion=0.4.16 -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" github.com/hyperledger/fabric/peer
Building release/linux-amd64/bin/orderer for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /root/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/orderer -tags "" -ldflags "-X github.com/hyperledger/fabric/common/metadata.Version=1.4.4 -X github.com/hyperledger/fabric/common/metadata.CommitSHA=8196d66 -X github.com/hyperledger/fabric/common/metadata.BaseVersion=0.4.16 -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" github.com/hyperledger/fabric/orderer
[root@localhost fabric]# 
View Code

 再執行 make docker

上述make release和make docker操做完成後,會自動將編譯好的二進制文件存放在如下路徑中:

$GOPATH/src/github.com/hyperledger/fabric/release/linux-amd64/bin

利用docker images 命令查看生成的docker鏡像

第四步:安裝Fabric模塊

編譯完以後,這些模塊就能夠被運行了,但目前只能在編譯文件所在的文件夾中運行這些模塊。爲了方便使用模塊,經過下面命令將這些模塊的可執行文件複製到系統目錄中,這樣就能夠再系統的任何路徑下運行了。

cp $GOPATH/src/github.com/hyperledger/fabric/release/linux-amd64/bin/* /usr/local/bin/

第五步:安裝結果測試

 正確顯示各個模塊的版本信息,而且沒有拋出異常,代表Fabric的模塊編譯和安裝正確。

4.2利用docker運行Fabric相關模塊

其中docker鏡像既能夠利用源碼本身生成,也能夠直接從Docker倉庫中下載

4.2.1利用源碼生成docker鏡像

cd /home/jp/goworkspace/src/github.com/hyperledger/fabric
make docker

 結果截圖如  第三步:編譯Fabric模塊  中的截圖,即爲生成的docker鏡像。

4.2.2 從docker倉庫中下載Fabric模塊的Docker鏡像文件

官方文件也提供了批量下載docker鏡像的腳本。咱們直接運行:(先把前面生成的鏡像刪掉)

cd $GOPATH/src/github.com/hyperledger/fabric/examples/e2e_cli/
source download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0

可是發現我用的fabric1.4居然沒有e2e_cli文件夾

又去github確認了一下

因此仍是先切換到1.0完成這個實驗,後續再看看新版的用法

git checkout v1.0.0

這樣在運行上述腳本,就下載了所需的Fabric 的Docker鏡像了。

docker.io/hyperledger/fabric-peer  peer節點鏡像,安裝了peer相關文件

docker.io/hyperledger/fabric-orderer  orderer節點鏡像,安裝了orderer相關文件

docker.io/hyperledger/fabric-couchdb  couchdb數據庫鏡像,能夠啓動couchdb服務,供peer使用

docker.io/hyperledger/fabric-ccenv  支持GO語言的鏈碼基礎鏡像,其中安裝了chaintool、Go語言的鏈碼shim層。在鏈碼容器生成過程當中做爲編譯環境將鏈碼編譯爲二進制文件,供鏈碼容器使用,方便保持鏈碼容器自身的輕量化。

docker.io/hyperledger/fabric-javaenv  支持Java語言的鏈碼基礎鏡像,其中安裝了Gradle、maven、java鏈碼的shim層等,能夠用來生成java鏈碼鏡像。
docker.io/hyperledger/fabric-kafka  能夠啓動kafka服務,供orderer使用。 docker.io/hyperledger/fabric-tools  安裝了相關工具鏡像文件,包括cryptogen、configtxgen、configtxlator等,能夠做爲測試客戶端使用。 docker.io/hyperledger/fabric-zookeeper  能夠啓動zooleeper服務,供orderer的kafka使用 docker.io/hyperledger/fabric-ca  安裝了fabric-ca相關文件

 

接下來就能夠搭建運行Fabric網絡了 

 

 參考:

《區塊鏈開發實戰 Hyperledger Fabric關鍵技術與案例分析》

《區塊鏈原理、設計與應用》

https://docs.docker.com/install/linux/docker-ce/centos/

http://www.javashuo.com/article/p-ybcrruqh-ey.html

相關文章
相關標籤/搜索