ubuntu搭建fabric1.0環境

本文轉載至博客園深藍居,原文見:http://www.cnblogs.com/studyzy/p/7437157.html

本人在Ubuntu 14.04.5 測試也能正確搭建fabric1.0 環境。

1. 使用VirtualBox並在其中安裝好Ubuntu

這一步其實沒啥好說的,下載好最新版的VirtualBox,下載Ubuntu Server,我用的是Ubuntu16.04.2 X64 Server。在安裝完Ubuntu後,需要保證apt source是國內的,不然如果是國外的話會很慢很慢的。具體做法是

sudo vi /etc/apt/sources.list

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

:%s/us./cn./g

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

sudo apt-get update

更新一下源。

然後安裝ssh,這樣接下來就可以用putty或者SecureCRT之類的客戶端遠程連接Ubuntu了。

sudo apt-get install ssh

2. Go的安裝

Ubuntu的apt-get雖然提供了Go的安裝,但是版本比較舊,最好的方法還是參考官方網站 https://golang.org/dl/ ,下載最新版的Go。具體涉及到的命令包括:


 
  1. wget https://storage.googleapis.com/golang/go1.9.linux-amd64.tar.gz

  2. sudo tar -C /usr/local -xzf go1.9.linux-amd64.tar.gz

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

接下來編輯當前用戶的環境變量:

vi ~/.profile

添加以下內容:


 
  1. export PATH=$PATH:/usr/local/go/bin

  2. export GOROOT=/usr/local/go

  3. export GOPATH=$HOME/go

  4. export PATH=$PATH:$HOME/go/bin

編輯保存並退出vi後,記得把這些環境載入:

source ~/.profile

我們把go的目錄GOPATH設置爲當前用戶的文件夾下,所以記得創建go文件夾


 
  1. cd ~

  2. mkdir go

3. Docker安裝

我們可以使用阿里提供的鏡像,安裝也非常方便。通過以下命令來安裝Docker

curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -

安裝完成後需要修改當前用戶(我使用的用戶叫fabric)權限:

sudo usermod -aG docker fabric

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

複製代碼

複製代碼


 
  1. sudo mkdir -p /etc/docker

  2. sudo tee /etc/docker/daemon.json <<-'EOF'

  3. {

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

  5. }

  6. EOF

  7. sudo systemctl daemon-reload

  8. sudo systemctl restart docker

複製代碼

複製代碼

不同的版本添加方法是不一樣的,官方的文檔如下:

https://cr.console.aliyun.com/#/accelerator

當然覺得阿里雲鏡像不好用,喜歡用DaoClound的也可以用DaoClound的鏡像。DaoCloud的鏡像設置文檔爲:https://www.daocloud.io/mirror#accelerator-doc

4. Docker-Compose的安裝

Docker-compose是支持通過模板腳本批量創建Docker容器的一個組件。在安裝Docker-Compose之前,需要安裝Python-pip,運行腳本:

sudo apt-get install python-pip

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


 
  1. curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > ~/docker-compose

  2. sudo mv ~/docker-compose /usr/local/bin/docker-compose

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

5. Fabric源碼下載

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

 
  1. mkdir -p ~/go/src/github.com/hyperledger

  2. cd ~/go/src/github.com/hyperledger

  3. git clone https://github.com/hyperledger/fabric.git

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


 
  1. cd ~/go/src/github.com/hyperledger/fabric

  2. git checkout v1.0.0

6. Fabric Docker鏡像的下載

這個其實很簡單,因爲我們已經設置了Docker Hub鏡像地址,所以下載也會很快。官方文件也提供了批量下載的腳本。我們直接運行:


 
  1. cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli/

  2. source download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0

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

下載完畢後,我們運行以下命令檢查下載的鏡像列表:

docker images

得到的結果如下:

image

7.啓動Fabric網絡並完成ChainCode的測試

我們仍然停留在e2e_cli文件夾,這裏提供了啓動、關閉Fabric網絡的自動化腳本。我們要啓動Fabric網絡,並自動運行Example02 ChainCode的測試,執行一個命令:

./network_setup.sh up

這個做了以下操作:

7.1編譯生成Fabric公私鑰、證書的程序,程序在目錄:fabric/release/linux-amd64/bin

7.2基於configtx.yaml生成創世區塊和通道相關信息,並保存在channel-artifacts文件夾。

7.3基於crypto-config.yaml生成公私鑰和證書信息,並保存在crypto-config文件夾中。

7.4基於docker-compose-cli.yaml啓動1Orderer+4Peer+1CLI的Fabric容器。

7.5在CLI啓動的時候,會運行scripts/script.sh文件,這個腳本文件包含了創建Channel,加入Channel,安裝Example02,運行Example02等功能。

最後運行完畢,我們可以看到這樣的界面:

image

如果您看到這個界面,這說明我們整個Fabric網絡已經通了。

E2E這個實例中,fabric做了如下操作,可通過查看啓動時打印的日誌對應每一步操作:

  • 在CLI容器中執行了腳本script.sh。該腳本用默認的mychannel執行createChannel命令,這個命令用到了之前configtxgen工具生成的channel.tx
  • createChannel執行後會生成一個創世區塊mychannel.block並保存到當前目錄。
  • 對4個peer分別執行joinChannel命令,通過初始區塊mychannel.block加入channel。至此,有一個channel包含4個peer和2個organization。
  • PEER0PEER1屬於Org0,PEER2PEER3屬於Org1。這些關係的定義都在configtx.yaml
  • Chaincode chaincode_example02被install到PEER0PEER2
  • 然後Chaincode在PEER2上instantiate。實例化是指啓動容器和初始化與Chaincode相關的鍵值對,本例中的初始值是[“a”,”100” “b”,”200”]。實例化的結果是一個名爲dev-peer2-mycc-1.0的容器啓動,注意,這個容器僅是針對PEER2(譯註:尤其注意這裏僅僅是啓動了一個container)
  • 實例化時還會帶有背書策略參數,本例中背書策略爲`-P “OR (‘Org0MSP.member’,’Org1MSP.member’)”,意思是任何交易必須由綁定到Org0或者Org1的peer背書。
  • 對於“a”的query請求發送到PEER0。在之前Chaincode被install到PEER0了,所以就可以啓動一個名爲dev-peer0-mycc-1.0的新容器,然後返回查詢結果。由於沒有write操作發生,所以“a”的值依然是“100”。
  • 從“a“轉移”10“給”b”的invoke請求發送到PEER0
  • Chaincode install到PEER3
  • 對“a”的query請求發送到PEER3。這啓動了第三個名爲dev-peer3-mycc-1.0的容器,並返回查詢結果90,正確的反映了之前的交易。

 

8.手動測試一下Fabric網絡

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

docker exec -it cli bash

運行以下命令可以查詢a賬戶的餘額:

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

可以看到餘額是90:

image

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

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"]}'

運行結果爲:

image

現在轉賬完畢, 我們試一試再查詢一下a賬戶的餘額,沒問題的話,應該是只剩下70了。我們看看實際情況:

image

果然,一切正常。最後我們要關閉Fabric網絡,首先需要運行exit命令退出cli容器。關閉Fabric的命令與啓動類似,命令爲:


 
  1. cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli

  2.  
  3. ./network_setup.sh down

現在我們整個Fabric的環境已經測試完畢,恭喜,一切正常,接下來我們就是去做自己的區塊鏈的開發。

 

 

 

發佈了109 篇原創文章 · 獲贊 289 · 訪問量 75萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章