Fabric 安裝與初步測試

Fabric 安裝與初步測試

一、環境安裝

最終結果
1.1

1、前期準備

實驗環境,ubuntu18.04

由於各種原因,網絡環境在安裝好虛擬機的那一刻開始就必須解決好。 我的解決方案:物理機開放代理端口,讓虛擬機可以正確上網,用到的軟件是clash 和 proxychains4(用來代理命令行)。具體省略

安裝軟件都儘量安裝最新的,意思是都儘量手動安裝,儘量別從命令行裏直接apt install

2、docker-ce 安裝

選擇阿里雲的源安裝

sudo apt update

sudo apt install apt-transport-https ca-certificates curl software-properties-common

curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

sudo apt install docker-ce 
sudo usermod -aG docker wang

註銷重新登錄後,添加阿里雲的Docker Hub鏡像

sudo mkdir -p /etc/docker

在daemon.json中添加下面文件。

{
  "registry-mirrors": ["https://obou6wyb.mirror.aliyuncs.com"]
}

3、docker-compose安裝

從github中的release中直接下載安裝

proxychains4 curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

4、go安裝

下載安裝包,並解壓到相關文件夾去。

proxychains4 wget https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz
sudo tar -C /usr/local -zxvf go1.13.5.linux-amd64.tar.gz

如果不能使用wget下載下了,可以先將包通過瀏覽器下載下來,然後再將其解壓到相關文件夾中。

在用戶目錄中添加環境變量,並在用戶目錄下創建go文件夾

cd ~
sudo vim .profile

添加如下內容:

export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$HOME/go/bin

載入環境並創建文件夾。

source .profile
mkdir go

5、pip安裝

ubuntu18.04自帶python2 我們只需要按照pip並進行升級就可以了,命令行如下。

sudo apt-get install python-pip
pip install --upgrade pip
pip -V

6、go相關Tools下載

Fabric是使用go開發的,我們需要下載一些相關的工具和庫,方便後期使用。

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

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

最終這些都會被放在~/go/bin$
在這裏插入圖片描述

7、其他第三方庫下載

這些庫是在編譯過程中發現需要的,舉例說明一些,總之就是缺撒安裝撒。

sudo apt-get install libltdl-dev 

到這裏,所有環境安裝基本安裝完畢了。

二、安裝Fabric

Fabric 的安裝有兩種方式,第一種方式使用官方給定的bootstrap.sh腳本進行安裝,適合新手。但不適合瞭解Fabric的工作流程。我們主要使用第二種,手動編譯的方式。

1、拉取代碼

mkdir -p ~/go/src/github.com/hyperledger
cd ~/go/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric.git

正常情況下,這個是沒有問題的,但是由於我前期設置代理的時候沒注意git的代理知識。所有就出現了下面的錯誤。

fatal: unable to access 'https://github.com/golang/tools.git/': Failed to receive SOCKS4 connect request ack.

讀取錯誤提示,應該是代理問題,網上搜索一下,果然,git的默認代理是socks4,這個不太常用,所以我沒設置。解決方法自然有兩種,1、在系統中添加可用的socks4代理;2、將git的默認代理設置爲socks5。我選擇了第二種,在終端中輸入如下命令:

git config --global http.proxy 'socks5://192.168.179.1:7891'

2019.12.28最新分支爲1.4.4,由於畢設的性質,需要一個成熟和穩定的平臺,我們進行分支切換,切換到1.1.0即可。使用git checkout -b <tag>
在這裏插入圖片描述
由於項目的Makefile文件已經寫好我們只需要在fabric目錄下進行make編譯即可。

2、order節點編譯

wang@wang:~/go/src/github.com/hyperledger/fabric$ make orderer
Building build/bin/orderer
GOBIN=/home/wang/go/src/github.com/hyperledger/fabric/build/bin go install -tags "" -ldflags "-X github.com/hyperledger/fabric/common/metadata.Version=2.0.0 -X github.com/hyperledger/fabric/common/metadata.CommitSHA=74345bee6 -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/cmd/orderer

3、peer節點編譯

wang@wang:~/go/src/github.com/hyperledger/fabric$ make peer
Building build/bin/peer
GOBIN=/home/wang/go/src/github.com/hyperledger/fabric/build/bin go install -tags "" -ldflags "-X github.com/hyperledger/fabric/common/metadata.Version=2.0.0 -X github.com/hyperledger/fabric/common/metadata.CommitSHA=74345bee6 -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/cmd/peer

可能會出現的錯誤:

  • 錯誤1
recipe for target '/opt/gotools/obj/gopath/bin/golint' failed

正確上網後,再執行make peer命令!

  • 錯誤2
cp: cannot stat 'build/docker/gotools/bin/protoc-gen-go': No such file or directory

對此,執行下面的命令,下載protoc-gen-go工具,然後將其拷貝到docker/gotools/bin目錄裏:

go get github.com/golang/protobuf/protoc-gen-go
mkdir -p build/docker/gotools/bin
cp ~/GOPATH/bin/* build/docker/gotools/bin
  • 錯誤3:

    在這一步很可能出現錯誤,這個最大的原因就是網絡原因,解決辦法,自己將版本號補齊下載,或者通過別的路徑下載然後將下載文件拷貝到指定文件。

RUN mkdir -p /usr/share/maven /usr/share/maven/ref   && curl -fsSL https://nexus.hyperledger.org/content/repositories/hosted_installers/apache-maven/apache-maven/$MAVEN_VERSION/apache-maven-$MAVEN_VERSION-bin.tar.gz     | tar -xzC /usr/share/maven --strip-components=1   && ln -s /usr/share/maven/bin/mvn /usr/bin/mvn

4、Fabric 工具編譯

主要有 configtxgen、ceyptogen、configtxlator

wang@wang:~/go/src/github.com/hyperledger/fabric$ make configtxgen 
Building build/bin/configtxgen
GOBIN=/home/wang/go/src/github.com/hyperledger/fabric/build/bin go install -tags "" -ldflags "-X github.com/hyperledger/fabric/common/metadata.Version=2.0.0 -X github.com/hyperledger/fabric/common/metadata.CommitSHA=74345bee6 -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/cmd/configtxgen
wang@wang:~/go/src/github.com/hyperledger/fabric$ make cryptogen 
Building build/bin/cryptogen
GOBIN=/home/wang/go/src/github.com/hyperledger/fabric/build/bin go install -tags "" -ldflags "-X github.com/hyperledger/fabric/common/metadata.Version=2.0.0 -X github.com/hyperledger/fabric/common/metadata.CommitSHA=74345bee6 -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/cmd/cryptogen
wang@wang:~/go/src/github.com/hyperledger/fabric$ make configtxlator 
Building build/bin/configtxlator
GOBIN=/home/wang/go/src/github.com/hyperledger/fabric/build/bin go install -tags "" -ldflags "-X github.com/hyperledger/fabric/common/metadata.Version=2.0.0 -X github.com/hyperledger/fabric/common/metadata.CommitSHA=74345bee6 -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/cmd/configtxlator

5、docker鏡像生成

由於有網絡文件依賴,所以有的比較慢,需耐心等待。

  • orderer鏡像生成
make orderer-docker
  • peer鏡像
make peer-docker
  • 客戶端
make tools-docker

除了上面我們看到的這些鏡像外,實際上我們可能還會用到CouchDB做狀態數據庫,用Kafka做共識,用Zookeeper做Kafka的高可用支持,這些工具都有對應的Docker鏡像,我們仍然可以使用make命令來生成他們。

運行以下命令,系統會給我們生成一整套的Fabric鏡像:

make docker

上述過程一般很複雜,成功率極低,但是成功了之後我們就能清楚知道到底整體的編譯過程是怎樣的了。我們也可我們可以查看生成的docker。
在這裏插入圖片描述

下一步 運行測試網絡。

三、測試網絡E2E_cli的啓動

切換到example/e2e_cli的文件夾下,輸入命令./network_setup.sh up ,這個時候前邊基本上沒問題,但是在加入網絡的時候找不到網絡的名稱,這時候我們需要研究fabric的簡單原理,是網絡不存在的錯誤。報錯內容如下:

Error: Error endorsing chaincode: rpc error: code = Unknown desc = error starting container: API error (404): {"message":"network e2ecli_default not found"}

原因:e2e_cli目錄是固定的,啓動後會創建一個docker network以此爲名字,這裏是e2e_cli

解決方法:退出,更改網絡名稱。

wang@wang:~/go/src/github.com/hyperledger/fabric/examples/e2e_cli$ ./network_setup.sh down
wang@wang:~/go/src/github.com/hyperledger/fabric/examples/e2e_cli$ vim ./base/peer-base.yaml 
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=e2ecli_default  #修改前的配置
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=e2e_cli_default  #修改後的配置

重新啓動網絡即可,成功截圖:
在這裏插入圖片描述

四、總結

  • 前期環境配置一定要弄好,不然後邊麻煩會很多,並且很多錯誤都是前期環境的原因導致的。
  • 網絡環境,代理一定要設置好,包括git、curl、proxychain,國內最大的困境就是網絡環境問題。
  • 錯誤前人都犯過,放心弄。大膽的網上搜。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章