區塊鏈 Hyperledger Fabric v1.0.0 環境搭建
前言:最近專案涉及到超級賬本,在有些理論知識的基礎上,需要整一套環境來。
這是一個特別要注意的事情,筆者之前按照網路上推薦,大部分都是推薦ubuntu系統的,於是下載Ubuntu系統(16.04.5和18.04都試試),遇到各種問題,一直不能成功,大概花了好多天,一直不成功,後來都要放棄了,但是心有不甘,又下載centos7,只花了一天,就成功了,所以在這裡使用centos7系統。在這個還是要感謝各位大神的部落格,感激之情溢於言表。
上個截圖來表達喜悅的心情
這是一張成功的截圖。
套話不多說,直接操作步驟。
1.下載VirtualBox
版本:5.2.20-125813(下載時最高版本)。
下載地址:https://www.virtualbox.org/
(這麼快就更新了一版本嘛,無比尷尬)
具體安裝步驟,百度一下。
2.下載映象檔案 centos.iso
版本號:CentOS-7-x86_64-DVD-1804.iso 和 CentOS-7-x86_64-Everything-1804.iso(筆者都有下載,使用的是CentOS-7-x86_64-Everything-1804)
下載地址:http://isoredirect.centos.org/centos/7/isos/x86_64/(當前連線顯示所有版本及各種映象連線)。
http://mirrors.aliyun.com/centos/7.5.1804/isos/x86_64/(筆者選擇的是阿里的映象,如果還有迅雷的話,下載十分迅速)。
安裝:https://www.cnblogs.com/hihtml5/p/8217062.html(筆者根據大神提供的經驗,尤其後面網路設定的,幫了大忙)。
網路:筆者使用的是有限網路。
要保證主機可以ping通虛擬機器,同時虛擬機器可以ping通‘www.baidu.com’(筆者一直實現不了虛擬機器平通主機,但是不影響後續步驟)。
3.使用secureCRT連線虛擬機器。
說明:筆者不太喜歡'右ctrl'鍵來切換滑鼠在虛擬機器和主機的位置,就用secureCRT連線虛擬機器。其他人可以根據自己的喜歡,自行選擇及忽略,是不是很人性化。
根據第二步驟的操作,主機可以ping通虛擬機器,即可連線成功,如果還不行,可修改/etc/sysconfig/network-scripts/ifcfg-enp0s3。
登入虛擬機器,筆者所有需要操作都在root使用者,/root/目錄下。之前使用Ubuntu時,就遇到這種情況,也是差些就成功了(惋惜萬分)。
4.安裝GO
4.1 下載go
下載指令:
[[email protected] ~] # wget https://storage.googleapis.com/golang/go1.9.linux-amd64.tar.gz
如果沒有安裝wget,需要先安裝wget。命令:
[[email protected] ~] # yum install wget
等待下載完成..
4.2 解壓
[[email protected] ~] # sudo tar -C /usr/local -xzf go1.9.linux-amd64.tar.gz
4.3配置環境變數
[[email protected] ~] # vi /etc/profile
在檔案最底部,新增如下內容:
export PATH=$PATH:/usr/local/go/bin export GOROOT=/usr/local/go export GOPATH=$HOME/go export PATH=$PATH:$HOME/go/bin
退出檔案,儲存生效。
[[email protected] ~] # source /etc/profile
4.4驗證
筆者建議使用如下指令,更詳細。
[[email protected] ~] # go env
效果如下圖,則安裝成功。
5.安裝docker
寫在操作之前的建議:請先不要新增阿里映象。筆者在用ubuntu時,遇到docker安裝不成功,因為docker-engine沒有釋出版本,一直安裝不成功。
由於操作過多,請按照步驟來。
5.1檢視內河版本,要高於3.10。筆者下載的系統,剛好滿足。檢視指令如下:
[[email protected] ~] # uname -r
5.2 更新yum包,保證最新的。指令如下:
[[email protected] ~] # sudo yum update
5.3移除docker舊版本。(如果是新系統,可以忽略此步驟)。指令如下:
[[email protected] ~] # sudo yum remove docker docker-common docker-selinux docker-engine
5.4 安裝需要的軟體包。操作指令如下:
[[email protected] ~] # sudo yum install -y yum-utils device-mapper-persistent-data lvm2
5.5 設定映象資源。指令如下:
[[email protected] ~] # sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
5.6 檢視倉庫所有docker版本,並選擇特定版本安裝。指令如下(如果沒查詢到可用版本,多試試5.6步驟):
[[email protected] ~] # yum list docker-ce --showduplicates | sort -r
輸出如下圖:
筆者在執行fabric網路時,就遇到一個問題(具體問題,忘記記錄),百度了一下說是docker和docker-compose版本問題,所以筆者在這裡推薦docker版本是:17.12.0-ce。
5.7 安裝docker。指令如下:
[[email protected] ~] # sudo yum install 版本號 ## sudo yum install docker-ce-17.12.0.ce
5.8 驗證是否安裝成功(client和service都有顯示)。指令如下:
[[email protected] ~] # docker version
如下顯示:
5.9 啟動 並且 加入開機啟動。指令如下:
[[email protected] ~] # sudo systemctl start docker [[email protected] ~] # sudo systemctl enable docker
5.10 新增阿里的映象。指令如下:
[[email protected] ~] # yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
6.安裝docker-compose
6.1安裝元件python-pip。指令如下:
[[email protected] ~] # sudo yum install python-pip
6.2 筆者使用pip安裝。指令如下:
[[email protected] ~] # yum -y install epel-release
這個版本應該是8.*的,安裝docker-compose需要升級到18.*
6.3 升級pip版本
[[email protected] ~] # pip install --upgrade pip
如下圖顯示:
6.4 安裝docker-compose。筆者安裝的是1.12.0版本。指令如下:
[[email protected] ~] # sudo pip install docker-compose==版本號 ##sudo pip install docker-compose==1.12.0
6.5驗證。指令如下:
[[email protected] ~] # docker-compose verion
7.docker run hello-world
到此docker和docker-compose已經安裝完成,那麼來試試一個hello-world吧。指令如下:
[[email protected] ~] # docker run hello-world
截圖如下:
如果是第一次執行,會有下載hello-world 的過程,請耐心等待。(筆者已經執行過好多次,截圖如上)。
docker 常用指令:
docker stats # 容器,狀態 docker rm -f $(docker ps -aq) #清除容器內所有示例 ... 等等(到目前就用到這兩個指令,捂臉..)
8. Fabric資源及映象下載
8.1 建立檔案。如下圖
8.2 git 下載Fabric。指令如下:
[[email protected] hyperledger] # git clone https://github.com/hyperledger/fabric.git
如果git不可用,下載git。指令如下:
[[email protected] hyperledger] # sudo yum install git
8.3設定資源版本號:v1.0.0
[[email protected] ~] # cd ~/go/src/github.com/hyperledger/fabric
[[email protected] fabric] # git checkout v1.0.0
8.4 Fabric Docker 映象下載
[[email protected] ~] # cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli/
[[email protected] e2e_cli] # source download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0
8.5下載完成,檢視映象檔案列表。指令如下:
[[email protected] e2e_cli] # docker images
如下圖顯示:
8.6 啟動 Fabric 網路環境。指令如下:
[[email protected] e2e_cli] # ./network_setup.sh up
該指令碼啟動的服務解釋如下(摘自網路):
編譯生成Fabric公私鑰、證書的程式,程式在目錄:fabric/release/linux-amd64/bin
基於configtx.yaml生成創世區塊和通道相關資訊,並儲存在channel-artifacts資料夾。
基於crypto-config.yaml生成公私鑰和證書資訊,並儲存在crypto-config資料夾中。
基於docker-compose-cli.yaml啟動1Orderer+4Peer+1CLI的Fabric容器。
稍等一會,出現文章開頭的截圖。再次擷取,如果如下圖顯示,那就恭喜,你的網路也通了。
8.7另開session視窗。指令如下:
[[email protected] ~] # docker stats
容器顯示截圖如下:
8.8 網路關閉
新開session視窗。指令如下(如下指令可以先不執行,後續步驟會用到):
[[email protected] ~] # cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli/
[[email protected] e2e_cli] # ./network_setup.sh down
9.測試Fabric網路
9.1 新起session視窗,開啟客戶端。指令如下:
[[email protected] ~] # docker exec -it cli bash
進入目錄下,如下圖所示:
9.2查詢a賬戶餘額.。指令如下:
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
截圖如下顯示:
9.3轉賬。a 賬戶給 b 轉 50:
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","50"]}'
查詢餘額,截圖如下:
a賬號餘額:
到此,所有的步驟都結束了,可以執行 “8.7關閉網路”。