最近在參加一個比賽,使用到了區塊鏈的開源軟件hyperledger
,因爲以前從未接觸過區塊鏈,以及和區塊鏈開發相關的內容,全部在網上查閱了大量的資料,而且經過學習yeasy(楊寶華)開源的入門書籍區塊鏈技術指南以及進階學習的《區塊鏈原理、設計與應用》,對區塊鏈的一些相關概念有了必定認識。這裏記錄的是我安裝hyperledger fabric
的全部步驟,同時也是一個快速搭建單機環境的參考教程。html
本人的區塊鏈網絡部署在VMware
搭建的ubuntu16.04的環境下(推薦使用該版本的系統),詳細的系統版本爲ubuntu-16.04.4-desktop-amd64.iso
,是從網易開源鏡像站下載的。對於如何使用VMware
安裝虛擬機以及讓虛擬機訪問網絡,網上有許多教程,這裏就不重複講了。
當將系統安裝完成後,須要更換源,使用desktop
版的能夠直接在設置裏面選擇最佳服務器,以下圖所示
若使用的是服務器版本,則可使用以下命令換成高速的源java
$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
$ sudo vim /etc/apt/sources.list
任選下面一組源文件複製到source.list中python
網易源linux
deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
阿里源git
# deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties deb http://mirrors.aliyun.com/ubuntu/ xenial universe deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties deb http://archive.canonical.com/ubuntu xenial partner deb-src http://archive.canonical.com/ubuntu xenial partner deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse
搜狐源github
deb http://mirrors.sohu.com/ubuntu/ trusty main restricted universe multiverse deb http://mirrors.sohu.com/ubuntu/ trusty-security main restricted universe multiverse deb http://mirrors.sohu.com/ubuntu/ trusty-updates main restricted universe multiverse deb http://mirrors.sohu.com/ubuntu/ trusty-proposed main restricted universe multiverse deb http://mirrors.sohu.com/ubuntu/ trusty-backports main restricted universe multiverse deb-src http://mirrors.sohu.com/ubuntu/ trusty main restricted universe multiverse deb-src http://mirrors.sohu.com/ubuntu/ trusty-security main restricted universe multiverse deb-src http://mirrors.sohu.com/ubuntu/ trusty-updates main restricted universe multiverse deb-src http://mirrors.sohu.com/ubuntu/ trusty-proposed main restricted universe multiverse deb-src http://mirrors.sohu.com/ubuntu/ trusty-backports main restricted universe multiverse
複製進去後,使用:wq
保存,而後使用以下命令更新一下golang
$ sudo apt-get update
執行完成後環境就基本上準備好了,若是使用的是服務器版本,以爲使用不方便的話,可使用xshell
之類的遠程鏈接工具鏈接你的虛擬機。若是你的環境搭建再雲服務器上,例如阿里雲或者騰訊雲,能夠不用更新源,直接在本身的主機上使用遠程鏈接工具鏈接上雲主機,環境就算完成了(若在本地不能鏈接上雲主機,或者虛擬機,檢查一下ssh
是否已經安裝並啓動,若沒有,能夠參加網上的教程,配置遠程鏈接)。docker
不推薦使用apt
的方式安裝GO,緣由是這樣安裝的版本比較老,推薦安裝最新版的GO,具體安裝命令以下shell
$ wegt https://dl.google.com/go/go1.10.2.linux-amd64.tar.gz
/usr/local
目錄下$ sudo tar -C usr/local -xzf go1.10.2.linux-amd64.tar.gz
$ vim ~/.profile
添加以下內容json
export PATH=$PATH:/usr/local/go/bin export GOROOT=/usr/local/go #這裏配置的GOPATH目錄爲家目錄的的go文件夾 export GOPATH=$HOME/go export PATH=$PATH:$HOME/go/bin
使用:wq
保存後使用以下命令將保存當即刷新
$ source ~/.profile
GOPATH
目錄GOPATH
目錄的位置,因此咱們須要在家目錄下建立該文件夾$ cd ~ $ mkdir go
$ go version go version go1.10 linux/amd64
這裏使用的Docker
的官方文檔來安裝docker
Docker
,須要先使用以下命令卸載$ sudo apt-get remove docker docker-engine docker.io
apt
包索引$ sudo apt-get update
apt
經過HTTPS使用遠程庫$ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common
若出現沒法識別命令,能夠先將該命令複製到一個文本文件中,將\
去掉,將全部語句放在同一行下,而後複製執行。
Docker
的官方GPG
密鑰$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
$ sudo apt-key fingerprint 0EBFCD88 pub 4096R/0EBFCD88 2017-02-22 Key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid Docker Release (CE deb) <docker@docker.com> sub 4096R/F273FCD8 2017-02-22
$ sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
apt
包索引$ sudo apt-get update
apt
安裝docker-ce
$ sudo apt-get install docker-ce
$ docker version Client: Version: 18.03.1-ce API version: 1.37 Go version: go1.9.5 Git commit: 9ee9f40 Built: Thu Apr 26 07:17:20 2018 OS/Arch: linux/amd64 Experimental: false Orchestrator: swarm Server: Engine: Version: 18.03.1-ce API version: 1.37 (minimum version 1.12) Go version: go1.9.5 Git commit: 9ee9f40 Built: Thu Apr 26 07:15:30 2018 OS/Arch: linux/amd64 Experimental: false
安裝完成以後,須要將當前用戶添加到docker
用戶組,而後爲該用戶添加sudo
權限
docker
用戶組,可使用以下命令建立一個GID
爲999
,組名爲docker
的用戶組$ sudo groupadd –g 999 docker
docker
用戶組並分配sudo
權限$ sudo usermod -aG docker ubuntu
註銷後從新登陸,而後添加阿里雲的Docker Hub鏡像(注意,不一樣版本的添加方法不一樣,見阿里雲容器 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
若是以爲阿里雲鏡像很差用,能夠選擇DaoClound的鏡像,配置方式見DaoCloud官方文檔
Docker-Compose
是支持經過模板腳本批量建立的一個組件。在安裝 Docker-Compose
以前,須要安裝python-pip
python-pip
$ sudo apt-get python-pip
Docker-Compose
,這裏使用的是國內的DaoClound加速器進行下載$ curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > ~/docker-compose
Docker-Compose
文件夾移動到/usr/local/bin
目錄下$ sudo mv ~/docker-compose /usr/local/bin/docker-compose
Docker-Compose
附上可執行權限$ chmod +x /usr/local/bin/docker-compose
GOPATH
下建立對應的目錄$ mkdir -p ~/go/src/github.com/hyperledger
Git
命令將fabric
的源碼從github上克隆下來$ cd ~/go/src/github.com/hyperledger $ git clone https://github.com/hyperledger/fabric.git
v1.0.0
$ cd ~/go/src/github.com/hyperledger/fabric $ git checkout v1.0.0
因爲剛纔設置了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
因爲剛纔設置的是國內的鏡像站,在本地網速還不錯的狀況下下載數度仍是很快的。當下載完成後,使用以下命令檢查鏡像列表
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE dev-peer0.org1.example.com-marbles-v4 latest 089d43e100c9 5 hours ago 173MB dev-peer0.org1.example.com-fabcar-1.0 latest 6047921ee993 7 hours ago 173MB hyperledger/fabric-tools latest 0403fd1c72c7 10 months ago 1.32GB hyperledger/fabric-tools x86_64-1.0.0 0403fd1c72c7 10 months ago 1.32GB hyperledger/fabric-couchdb latest 2fbdbf3ab945 10 months ago 1.48GB hyperledger/fabric-couchdb x86_64-1.0.0 2fbdbf3ab945 10 months ago 1.48GB hyperledger/fabric-kafka latest dbd3f94de4b5 10 months ago 1.3GB hyperledger/fabric-kafka x86_64-1.0.0 dbd3f94de4b5 10 months ago 1.3GB hyperledger/fabric-zookeeper latest e545dbf1c6af 10 months ago 1.31GB hyperledger/fabric-zookeeper x86_64-1.0.0 e545dbf1c6af 10 months ago 1.31GB hyperledger/fabric-orderer latest e317ca5638ba 10 months ago 179MB hyperledger/fabric-orderer x86_64-1.0.0 e317ca5638ba 10 months ago 179MB hyperledger/fabric-peer latest 6830dcd7b9b5 10 months ago 182MB hyperledger/fabric-peer x86_64-1.0.0 6830dcd7b9b5 10 months ago 182MB hyperledger/fabric-javaenv latest 8948126f0935 10 months ago 1.42GB hyperledger/fabric-javaenv x86_64-1.0.0 8948126f0935 10 months ago 1.42GB hyperledger/fabric-ccenv latest 7182c260a5ca 10 months ago 1.29GB hyperledger/fabric-ccenv x86_64-1.0.0 7182c260a5ca 10 months ago 1.29GB hyperledger/fabric-ca latest a15c59ecda5b 10 months ago 238MB hyperledger/fabric-ca x86_64-1.0.0 a15c59ecda5b 10 months ago 238MB hyperledger/fabric-baseos x86_64-0.3.1 4b0cab202084 12 months ago 157MB
出現以上結果說明鏡像已經下載成功
e2e_cli
目錄,並執行啓動命令$ cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli/ $ ./network_setup.sh up
這個過程作了以下操做
1.編譯生成
Fabric
公私鑰,證書的程序,程序在目錄:fabric/release/linux-amd64/bin
下
2.基於
configtx.yaml
生成創世區塊和通道相關信息,並保存到channel-artifacts
文件夾中
3.基於
crypto-config.yaml
生成公私鑰和證書信息,並保存在crypto-config
文件夾中
4.基於
docker-compose-cli.yaml
啓動1 Orderer + 4 Peer + 1 CLI
的Fabric
容器
5.在
CLI
啓動的時候,會運行srcipt/script.sh
文件,這個腳本文件包含了建立Channel
,加入Channel
,安裝Example02
,運行Example02
等功能
最後運行完成,咱們會看到以下截圖,說明網絡啓動成功了
咱們以安裝好的Example02
進行測試,在官方例子中,channel
的名字是mychannel
,鏈碼的名字是mycc
,咱們首先從新打開一個命令行,而後進入CLI
,
$ docker exec -it cli bash
a
帳戶的餘額$ peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
查詢結果以下圖所示
能夠看到a
帳戶的餘額如今是90
b
帳戶的餘額$ peer chaincode query -C mychannel -n mycc -c '{"Args":["query","b"]}'
查詢結果以下圖所示
能夠看到b
帳戶的餘額如今是210
b
帳戶的餘額轉100給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","b","a","100"]}'
執行結果以下圖所示
能夠看到執行成功了
a
帳戶的餘額$ peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
查詢結果以下圖所示
能夠看到a
帳戶的餘額如今是190,比以前多了100
b
帳戶的餘額$ peer chaincode query -C mychannel -n mycc -c '{"Args":["query","b"]}'
查詢結果以下圖所示
能夠看到b
帳戶的餘額如今是110,比以前少了100
調用鏈碼一切正常
CLI
容器root@4941e8bd4bd6:/opt/gopath/src/github.com/hyperledger/fabric/peer# exit
$ cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli $ ./network_setup.sh down
最後出現以下圖說明關閉區塊鏈網絡成功
至此,部署以及測試fabric
的環境已經所有完成,下一篇博客我將記錄如何在此基礎上部署及運行IBM官方區塊鏈例子marbles(彈珠資產)