一、前言
之前在ubuntu18.04下安裝和運(yùn)行了fabric利诺,但是是在臺(tái)式機(jī)上,現(xiàn)在就想在自己的mac筆記本上安裝一個(gè)fabric環(huán)境剩燥。網(wǎng)上的參考慢逾,目前都是基于fabric1.0或1.1版本的,跟1.4版本的操作還是有些不同躏吊,現(xiàn)在記錄一下這中間的操作步驟氛改,和遇到的問(wèn)題帐萎。
參考文章:
1.Fabric篇——Mac下Hyperledger Fabric(超級(jí)賬本)環(huán)境搭建
2.Ubuntu 快速搭建HyperLedger Fabric 1.4.0
二比伏、前置環(huán)境安裝
go環(huán)境安裝和docker、docker-compose環(huán)境的安裝疆导,網(wǎng)上的教程挺多的赁项,下面簡(jiǎn)單描述這一部分,可以再單獨(dú)再網(wǎng)上搜索相關(guān)的安裝澈段。
1.安裝Go并配置環(huán)境變量
Mac可以直接通過(guò)Homebrew安裝go環(huán)境:
brew install go
或者前往官網(wǎng)下載安裝包
安裝完畢后在命令行輸入go version
檢查是否安裝成功:
? go version
go version go1.11.2 darwin/amd64
然后開(kāi)始配置環(huán)境變量:
1). 先新建一個(gè)Go的工作空間文件夾(路徑按照自己的目錄創(chuàng)建):
? cd /Users/wuqiqi/Documents/workspace
? mkdir Go
2). 進(jìn)入Go目錄悠菜,創(chuàng)建三個(gè)文件夾bin,src败富,pkg
? cd /Users/wuqiqi/Documents/workspace/Go
? mkdir bin src pkg
3). 修改環(huán)境變量
編輯.bash_profile
文件悔醋,如果沒(méi)有請(qǐng)新建。
? vi ~/.bash_profile
在文件末尾加上:
#GOPATH
export GOPATH=/Users/wuqiqi/Documents/workspace/Go
#GOBIN
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN
編輯之后保存兽叮,然后執(zhí)行source
命令芬骄,使之生效:
source ~/.bash_profile
4). 通過(guò)go env
檢查:
? go env
GOARCH="amd64"
GOBIN="/Users/wuqiqi/Documents/workspace/Go/bin"
GOCACHE="/Users/wuqiqi/Library/Caches/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/wuqiqi/Documents/workspace/Go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GCCGO="gccgo"
2. 安裝Docker
在官網(wǎng)下載Docker CE for Mac完成后安裝。
安裝后可以在命令行中檢查docker
和docker-compose
的版本:
? docker --version
Docker version 18.09.2, build 6247962
? docker-compose --version
docker-compose version 1.23.2, build 1110ad01
三鹦聪、下載Hyperledger Fabric項(xiàng)目源代碼
- 進(jìn)入Go的工作空間, 為fabric創(chuàng)建項(xiàng)目路徑:
? cd $GOPATH
? mkdir -p src/github.com/hyperledger
? cd src/github.com/hyperledger
? pwd
/Users/wuqiqi/Documents/workspace/Go/src/github.com/hyperledger
- 從git上拉取Hyperledger Fabric:
? git clone https://github.com/hyperledger/fabric.git
? ls
fabric
- 進(jìn)入項(xiàng)目文件夾账阻,查看tag:
? cd fabric
? git tag
...
v1.0.6
v1.1.0
v1.1.0-alpha
v1.1.0-preview
v1.1.0-rc1
v1.1.1
v1.2.0
v1.2.0-rc1
v1.2.1
v1.3.0
v1.3.0-rc1
v1.4.0
v1.4.0-rc1
v1.4.0-rc2
v1.4.1
v1.4.1-rc1
v2.0.0-alpha
fabric1.4版本的鏈碼chaincode是支持java語(yǔ)言去編寫(xiě)的,對(duì)于常用java的開(kāi)發(fā)者泽本,上手更快淘太。所以我們切換到1.4版本去部署啟動(dòng)。
? git checkout v1.4.0
? git branch
release-1.4
* (頭指針?lè)蛛x于 v1.4.0)
四、執(zhí)行腳本獲取fabric鏡像文件
- 進(jìn)入fabric目錄的scripts路徑蒲牧,執(zhí)行./bootstrap.sh撇贺,下載docker鏡像
? cd scripts/
? ./bootstrap.sh
鏡像拉取花費(fèi)的時(shí)間比較長(zhǎng),需要等一等造成。
這一步其實(shí)我執(zhí)行了很多遍才成功显熏,每次都是下載的時(shí)候出問(wèn)題。鏡像源換了也沒(méi)有效果晒屎。后來(lái)嘗試執(zhí)行了一次
docker run hello-world
喘蟆,然后docker ps -a
查詢了一下這個(gè)容器的CONTAINER ID
是722f9a1dc429
,再終止它docker stop 722f9a1dc429
鼓鲁。之后再執(zhí)行./bootstrap.sh
的時(shí)候就正常了蕴轨,不知道有沒(méi)有關(guān)系。
五骇吭、啟動(dòng)和測(cè)試fabric
- 啟動(dòng)fabric
鏡像下載完成之后橙弱,我們所在的scripts
目錄下,會(huì)多出一個(gè)fabric-samples
文件夾燥狰,進(jìn)入這個(gè)目錄下的first-network
棘脐,準(zhǔn)備啟動(dòng)fabric。
? cd fabric-samples/first-network/
? ./byfn.sh -m generate -c mychannel
? ./byfn.sh -m up -c mychannel
看到開(kāi)始的start和最后的end龙致,就是啟動(dòng)成功了蛀缝。
注意:如果執(zhí)行過(guò)了
./byfn.sh -m up
但是并沒(méi)有成功啟動(dòng),再次執(zhí)行./byfn.sh -m up
前目代,需要先執(zhí)行./byfn.sh -m down
屈梁,然后再執(zhí)行啟動(dòng),可以參考本文第六部分的內(nèi)容榛了。
- 通過(guò)cli命令窗口測(cè)試一下fabric
查詢a,b余額在讶,a往b轉(zhuǎn)100,再查詢a余額
1). 命令行中打開(kāi)cli
docker exec -it cli bash
2). 查詢a霜大,b的余額
? peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
90
? peer chaincode query -C mychannel -n mycc -c '{"Args":["query","b"]}'
210
查詢到a构哺,b的余額分別為90,210
3). a給b轉(zhuǎn)賬10
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 --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"Args":["invoke","a","b","10"]}'
4). 再查詢一次a战坤,b的余額
? peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
80
? peer chaincode query -C mychannel -n mycc -c '{"Args":["query","b"]}'
220
5). 退出cli命令臺(tái)
? exit
六曙强、關(guān)閉和重啟網(wǎng)絡(luò)
當(dāng)我們想要關(guān)閉網(wǎng)絡(luò)或者更新了chaincode之后,想要重啟網(wǎng)絡(luò)湖笨,都需要先把docker的容器服務(wù)先關(guān)閉旗扑,清理一下,然后再啟動(dòng)慈省。
# 清理.關(guān)閉網(wǎng)絡(luò)
? ./byfn.sh -m down
# 查看容器關(guān)閉或啟動(dòng)情況
? docker ps -a
# 生成相關(guān)文件
? ./byfn.sh -m generate
# 啟動(dòng)fabric網(wǎng)絡(luò)(mychannel是默認(rèn)的channel名字臀防,啟動(dòng)時(shí)可以不指定)
? ./byfn.sh -m up
七眠菇、結(jié)語(yǔ)
完成以上操作,就成功的將fabric鏡像中的first-network網(wǎng)絡(luò)中的整個(gè)節(jié)點(diǎn)組織啟動(dòng)起來(lái)了袱衷。后面會(huì)再寫(xiě)個(gè)文章捎废,記錄一下,通過(guò)IDEA創(chuàng)建的java項(xiàng)目致燥,跟fabric網(wǎng)絡(luò)交互起來(lái)登疗,能夠?qū)崿F(xiàn)基礎(chǔ)的鏈碼調(diào)用。