【更新:1.0Beta已經是過去式了,現在出了1.0.0的正式版,請大家參照 http://www.cnblogs.com/studyzy/p/7437157.html 安裝Fabric 1.0.0】
今天HyperLedger Fabric放出了1.0 Beta版的映象,按照命名上來說,這應該是一個基本可用的版本了,所以我趕緊第一時間下載下來,把玩把玩。以下是在Ubuntu中安裝並測試Fabric 1.0 Beta的步驟:
一、環境準備
1.1 安裝VirtualBox並在其中安裝好Ubuntu
這一步其實沒啥好說的,下載好最新版的VirtualBox,下載Ubuntu Server,我用的是16.10 X64。在安裝完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
1.2 安裝Docker
安裝Docker也會遇到外國網路慢的問題,幸好國內有很好的映象,推薦DaoClound,安裝Docker的命令是:
curl -sSL https://get.daocloud.io/docker | sh
安裝完成後,執行以下指令碼將當前使用者新增到Docker的組中
sudo usermod -aG docker studyzy
重新登入當前使用者,接下來修改 Docker 服務配置(/etc/default/docker
檔案)。
sudo vi /etc/default/docker
新增以下內容:
DOCKER_OPTS="$DOCKER_OPTS -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --api-cors-header='*'"
接下來就需要設定國內的Docker映象地址,需要註冊一個賬號,然後在加速器頁面提供了設定Docker映象的指令碼,加速器頁面是:
https://www.daocloud.io/mirror 我提供的指令碼是:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://d4cc5789.m.daocloud.io
執行完指令碼後,重啟Docker服務
sudo service docker restart
1.3 安裝docker-compose
Docker-compose是支援通過模板指令碼批量建立Docker容器的一個元件。在安裝Docker-Compose之前,需要安裝Python-pip,執行指令碼:
sudo apt-get install python-pip
安裝完成後,接下來從DaoClound安裝Docker-compose,執行指令碼:
curl -L https://get.daocloud.io/docker/compose/releases/download/1.10.1/docker-compose-`uname -s`-`uname -m` > ~/docker-compose sudo mv ~/docker-compose /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
二、部署Fabric 1.0 Beta
2.1下載官方自動化部署指令碼
我們首先建立一個資料夾,用於存放自動化部署的指令碼。
mkdir fabric-sample cd fabric-sample
然後就可以使用curl命令下載並執行自動化部署指令碼了:
1.0 beta的命令是:
curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap-1.0.0-beta.sh | bash
【2017/6/24更新: 1.0 rc1 那麼獲取的命令是:】
curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap-1.0.0-rc1.sh | bash
這個過程會比較漫長,會下載大量的x86_64-1.0.0-beta或者x86_64-1.0.0-rc1的docker image。下載完所有映象後會再做一次rename,把x86_64-1.0.0-beta改為latest,這樣才方便使用。
當所有下載完畢後,我們執行
docker images
可以看到有如下的映象:
REPOSITORY TAG IMAGE ID CREATED SIZE
hyperledger/fabric-tools latest ae6b0f53cb70 14 hours ago 1.32 GB
hyperledger/fabric-tools x86_64-1.0.0-beta ae6b0f53cb70 14 hours ago 1.32 GB
hyperledger/fabric-couchdb latest 31bbbec3d853 14 hours ago 1.48 GB
hyperledger/fabric-couchdb x86_64-1.0.0-beta 31bbbec3d853 14 hours ago 1.48 GB
hyperledger/fabric-kafka latest c4ac1c9a4797 14 hours ago 1.3 GB
hyperledger/fabric-kafka x86_64-1.0.0-beta c4ac1c9a4797 14 hours ago 1.3 GB
hyperledger/fabric-zookeeper latest 2c4ebacb6f00 14 hours ago 1.31 GB
hyperledger/fabric-zookeeper x86_64-1.0.0-beta 2c4ebacb6f00 14 hours ago 1.31 GB
hyperledger/fabric-orderer latest 11ff350dd297 14 hours ago 179 MB
hyperledger/fabric-orderer x86_64-1.0.0-beta 11ff350dd297 14 hours ago 179 MB
hyperledger/fabric-peer latest e01c2b645f11 14 hours ago 182 MB
hyperledger/fabric-peer x86_64-1.0.0-beta e01c2b645f11 14 hours ago 182 MB
hyperledger/fabric-javaenv latest 61c188dca542 14 hours ago 1.42 GB
hyperledger/fabric-javaenv x86_64-1.0.0-beta 61c188dca542 14 hours ago 1.42 GB
hyperledger/fabric-ccenv latest 7034cca1918d 14 hours ago 1.29 GB
hyperledger/fabric-ccenv x86_64-1.0.0-beta 7034cca1918d 14 hours ago 1.29 GB
hyperledger/fabric-ca latest e549e8c53c2e 15 hours ago 238 MB
hyperledger/fabric-ca x86_64-1.0.0-beta e549e8c53c2e 15 hours ago 238 MB
2.2啟動Fabric例項
在前面下載的官方提供的自動化部署指令碼中,已經包含了啟動Fabric例項的指令碼。直接執行:
cd ~/fabric-sample/release/linux-amd64 ./network_setup.sh up
系統執行完畢後會看到這樣的介面:
系統就會建立1個客戶端例項cli,1個orderer節點,還有4個peer節點。另外,當前的指令碼包含了我們接下來要測試的mycc的例項,所以可能還會看到3個鏈上程式碼的例項在執行。
這是命令執行完畢後,使用docker ps命令看到的例項:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0bfa0ff5e77c dev-peer1.org2.example.com-mycc-1.0 "chaincode -peer.a..." 3 minutes ago Up 3 minutes dev-peer1.org2.example.com-mycc-1.0
05751dedc36a dev-peer0.org1.example.com-mycc-1.0 "chaincode -peer.a..." 4 minutes ago Up 4 minutes dev-peer0.org1.example.com-mycc-1.0
7006bcd8e671 dev-peer0.org2.example.com-mycc-1.0 "chaincode -peer.a..." 4 minutes ago Up 4 minutes dev-peer0.org2.example.com-mycc-1.0
fd52ef8e4be8 hyperledger/fabric-tools "/bin/bash -c './s..." 5 minutes ago Up 5 minutes cli
11e34078645f hyperledger/fabric-peer "peer node start" 5 minutes ago Up 5 minutes 0.0.0.0:10051->7051/tcp, 0.0.0.0:10053->7053/tcp peer1.org2.example.com
af042ab813ed hyperledger/fabric-peer "peer node start" 5 minutes ago Up 5 minutes 0.0.0.0:8051->7051/tcp, 0.0.0.0:8053->7053/tcp peer1.org1.example.com
08723b2ec1ec hyperledger/fabric-peer "peer node start" 5 minutes ago Up 5 minutes 0.0.0.0:7051->7051/tcp, 0.0.0.0:7053->7053/tcp peer0.org1.example.com
e84bc309e09e hyperledger/fabric-orderer "orderer" 5 minutes ago Up 5 minutes 0.0.0.0:7050->7050/tcp orderer.example.com
3ec6e7cf006b hyperledger/fabric-peer "peer node start" 5 minutes ago Up 5 minutes 0.0.0.0:9051->7051/tcp, 0.0.0.0:9053->7053/tcp peer0.org2.example.com
三、測試Fabric
其實我們在前面執行./network_setup.sh up的時候系統已經執行了一個Example02的ChainCode測試,部署上去的ChainCodeName是mycc,所以接下來我們要測試的話不能再初始化並部署同樣名字的ChainCode了,我們可以使用自己另外命名的名字,比如devincc。
3.1在CLI中測試Example02
首先我們需要登入到CLI這個容器中,才能執行Fabric的CLI命令。
docker exec -it cli bash
如果成功進入,我們會切換到該容器的root使用者下,得到如下的命令列目錄:
root@12f2eb6d9fa6:/opt/gopath/src/github.com/hyperledger/fabric/peer#
與0.6Fabric不同的是,在1.0中,鏈上程式碼是需要經過Install和Instantiate兩步的。下面我們首先安裝Example02,並指定一個名字,比如我們這裡就用devincc:
peer chaincode install -n devincc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
執行後可以看到提示執行成功,返回200狀態:
接下來是Instantiate,也就是初始化例項,設定a賬戶有100元,b賬戶有200元。
peer chaincode instantiate -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem -C mychannel -n devincc -v 1.0 -c '{"Args":["init","a", "100", "b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"
執行成功後可以看到如下的結果:
接下來我們用Query命令來看一看a賬戶的餘額:
peer chaincode query -C mychannel -n devincc -c '{"Args":["query","a"]}'
返回的結果是:
好接下來我們需要把a賬戶的10元轉給b賬戶,需要呼叫invoke命令:
peer chaincode invoke -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem -C mychannel -n devincc -c '{"Args":["invoke","a","b","10"]}'
執行返回的結果為:
最後我們再呼叫query命令來查一下b賬戶的餘額,如果沒有計算錯,應該是210元。
peer chaincode query -C mychannel -n devincc -c '{"Args":["query","b"]}'
看來我們的Fabric 1.0 Beta已經部署成功並測試通過了。