天天看點

在ubuntu下 搭建區塊鍊 (Hyperledger Fabric) 可在騰訊雲實驗室測試1、 環境準備2、配置GO環境3、遇到鎖的問題4、安裝docker5、 Docker-Compose的安裝6、Fabric源碼下載下傳7 、編譯cryptogen8 、啟動Fabric網絡并完成ChainCode的測試後續總結 第一步 開啟網絡(前提是環境已經部署完成,網絡狀态是關閉的) 第二步 進行業務操作 第三步退出

作為目前Hash chain 的CTO,接到很多開源社群的朋友請教,大家對于區塊鍊抱有很大程度上的熱誠。但是由于區塊鍊開發技術門檻較高,廣譜技術開發普及度不高。是以準備出個教程,本來昨天已經在騰訊雲實驗室測試部署完成,但是由于沒被稽核通過,稽核同學可能規矩比較嚴吧,再加上平時工作太忙了,沒辦法細緻整合,我就把在實驗室的原内容照搬在底下,隻能讓大家跟着文章,看一看,一起了解。

有不懂的地方可以加群問答:qq:538327407

同時也感謝:Hashchain 研發中騰訊區塊鍊團隊的童鞋們鼎力幫助和支援!

點我檢視HashChain

1、 環境準備

### 如果在 騰訊雲實驗室環境,不需要執行這一步

在安裝完Ubuntu後,需要保證apt source是國内的,不然如果是國外的話會很慢很慢的。具體做法是

1.1 請編輯原清單

執行指令:sudo vi /etc/apt/sources.list           

複制

打開這個apt源清單,如果其中看到是http://us.xxxxxx之類的,那麼就是外國的,如果看到是http://cn.xxxxx之類的,那麼就不用換的。我的是美國的源,是以需要做一下批量的替換。在指令模式下,輸入:

執行指令:   :%s/us./cn./g           

複制

就可以把所有的us.改為cn.了。然後輸入:wq即可儲存退出。

1.2 權限問題

如果後面遇到權限問題,切換到root 賬戶

執行指令:sudo passwd           

複制

修改設定自己的密碼,兩次,建議選擇123456

切換到root賬号

執行指令:su root           

複制

更新源

執行指令:sudo apt-get update           

複制

2、配置GO環境

2.1 下載下傳GO 并安裝

執行指令(下載下傳):wget https://studygolang.com/dl/golang/go1.9.linux-amd64.tar.gz
執行指令(解壓):sudo tar -C /usr/local -xzf go1.9.linux-amd64.tar.gz           

複制

【注意:不要使用apt方式安裝go,apt的go版本太低了!】

2.2 配置go

  • 2.1.1 編輯配置
執行指令: vim ~/.profile           

複制

添加以下内容:

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

複制

編輯儲存并退出vi後(esc 鍵退出指令模式, wq即可儲存退出。記得把這些環境載入:
執行指令:source ~/.profile           

複制

2.3 在根目錄下建立 go檔案夾

我們把go的目錄GOPATH設定為目前使用者的檔案夾下,是以記得建立go檔案夾

執行指令(跳轉到根目錄):cd ~           

複制

執行指令(建立名稱為go的檔案夾):mkdir go           

複制

3、遇到鎖的問題

3.1 遇到鎖問題這樣解決

指令模式出現如下提示:

Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable) E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?           

複制

解決方法:删除鎖定的檔案

執行指令:sudo rm  /var/lib/dpkg/lock           

複制

4、安裝docker

#### step 1: 安裝必要的一些系統工具

執行指令: sudo apt-get update           

複制

#### step 2: 安裝GPG證書

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

複制

#### Step 3: 寫入軟體源資訊

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

複制

#### Step 4: 更新并安裝 Docker-CE

執行指令:sudo apt-get -y update           

複制

執行指令:sudo apt-get -y install docker-ce           

複制

#### step 5:檢視是否安裝完成,顯示目前的docker版本

執行指令:sudo docker version           

複制

### 安裝完成後需要修改目前使用者(我使用的使用者叫ubuntu)權限:

執行指令:sudo usermod -aG docker ubuntu           

複制

### 登出并重新登入,然後添加阿裡雲的Docker Hub鏡像

執行指令:sudo mkdir -p /etc/docker           

複制

執行指令:sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://obou6wyb.mirror.aliyuncs.com"]
}
EOF
執行指令:sudo systemctl daemon-reload
執行指令:sudo systemctl restart docker           

複制

5、 Docker-Compose的安裝

5.1 Docker-compose是支援通過模闆腳本批量建立Docker容器的一個元件。在安裝Docker-Compose之前,需要安裝Python-pip,運作腳本:

執行指令:sudo apt-get install python-pip           

複制

5.2 然後是安裝docker-compose

我們從官方網站(https://github.com/docker/compose/releases)下載下傳也可以從國内的進行DaoClound下載下傳,為了速度快接下來從DaoClound安裝Docker-compose,運作腳本:

執行指令: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           

複制

6、Fabric源碼下載下傳

6.1 github上clone 下載下傳源代碼

我們可以使用Git指令下載下傳源碼,首先需要建立對應的目錄,然後進入該目錄,Git下載下傳源碼:

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

複制

6.2 Fabric 切換到指定版本v1.0.0

由于Fabric一直在更新,所有我們并不需要最新最新的源碼,需要切換到v1.0.0版本的源碼即可:

執行指令:cd ~/go/src/github.com/hyperledger/fabric
執行指令:git checkout v1.0.0           

複制

6.3 Fabric Docker鏡像的下載下傳

這個其實很簡單,因為我們已經設定了Docker Hub鏡像位址,是以下載下傳也會很快。官方檔案也提供了批量下載下傳的腳本。我們直接運作:

執行指令:cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli/
執行指令:source download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0           

複制

這樣就可以下載下傳所有需要的Fabric Docker鏡像了。由于我們設定了國内的鏡像,是以下載下傳應該是比較快的。

### 下載下傳完畢後,我們運作以下指令檢查下載下傳的鏡像清單:

執行指令:docker images           

複制

7 、編譯cryptogen

7.1 證書工具的使用

編譯生成 cryptogen之前我們需要安裝一個軟體包,否則編譯時會報錯

執行指令:sudo apt install libtool libltdl3-dev           

複制

Fabric提供了專門編譯cryptogen的入口,我們隻需要運作以下指令即可:

執行指令:cd ~/go/src/github.com/hyperledger/fabric           

複制

執行指令:make cryptogen

運作後系統傳回如下結果即代表編譯成功了

build/bin/cryptogen 
CGO_CFLAGS=" " GOBIN=/home/studyzy/go/src/github.com/hyperledger/fabric/build/bin go install -tags "" -ldflags "-X github.com/hyperledger/fabric/common/tools/cryptogen/metadata.Version=1.0.0" github.com/hyperledger/fabric/common/tools/cryptogen 
Binary available as build/bin/cryptogen           

複制

ps:我們在build/bin檔案夾下就可以看到編譯出來的cryptogen程式。

8 、啟動Fabric網絡并完成ChainCode的測試

我們仍然停留在e2e_cli檔案夾,這裡提供了啟動、關閉Fabric網絡的自動化腳本。我們要啟動Fabric網絡,并自動運作Example02 ChainCode的測試,執行一個指令:

8.1 切換到root 使用者

執行指令: ./network_setup.sh up           

複制

8.2 運作fabric 的example

我們仍然是以現在安裝好的Example02為例,在官方例子中,channel名字是mychannel,鍊碼的名字是mycc。我們首先進入CLI,我們重新打開一個指令行視窗,輸入:

執行指令:docker exec -it cli bash           

複制

8.2.1 運作以下指令可以查詢a賬戶的餘額:

執行指令(docker環境):peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'           

複制

可以看到餘額是90:

8.2.2 然後,我們試一試把a賬戶的餘額再轉20元給b賬戶,運作指令:

執行指令(docker環境):peer chaincode invoke -o orderer.example.com:7050  --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem  -C mychannel -n mycc -c '{"Args":["invoke","a","b","20"]}'           

複制

8.2.3 再次檢視賬戶

執行指令:peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'           

複制

可以看到餘額是:70

ps:如果要退出 docker 請使用指令:exit           

複制

後續總結

第一步 開啟網絡(前提是環境已經部署完成,網絡狀态是關閉的)

跳轉指定檔案夾,執行指令:cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli
啟動網絡,執行指令:./network_setup.sh up           

複制

這個時候,關掉終端,重新開一個終端,網絡是存在的,正常的

第二步 進行業務操作

開啟docker網絡,執行指令:docker exec -it cli bash           

複制

運作以下指令可以查詢a賬戶的餘額:

查詢賬戶餘額,執行指令:peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'           

複制

轉賬,執行指令:

peer chaincode invoke -o orderer.example.com:7050  --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem  -C mychannel -n mycc -c '{"Args":["invoke","a","b","20"]}'           

複制

第三步退出

在docker中,可以退出,執行指令:exit           

複制

關閉區塊鍊網絡,執行指令:./network_setup.sh down           

複制

注意:網絡關閉,後面重新開啟,資料恢複初始