謹以此篇紀錄部署Fabric2.2.0網路環境走的彎路

雅各布yy發表於2020-11-19

一.環境準備

系統:Ubuntu18.04.1

1.git,curl,docker,docker-compose


 - 設定軟體更新源為阿里雲(軟體和更新)
 - sudo apt-get  update
 - sudo apt-git install git
 - sudo apt-git install vim
 - sudo apt-get install curl
 - 安裝docker
   curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
 - 設定映象加速器
   以阿里云為例,找到容器映象服務->映象加速器,選擇系統貼上程式碼即可
   cat  /etc/docker/daemon.json    #檢視加速器
 - 安裝docker-compose
   sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
   sudo chmod +x /usr/local/bin/docker-compose         #新增執行許可權
   

相關操作

#檢視版本資訊,檢查是否安裝成功
docker version
#把當前使用者新增到docker使用者組
sudo groupadd docker
sudo usermod -aG docker ${USER}
sudo systemctl restart docker
su root 切換root
su ${USER} 再切換回來生效

2.安裝go

下載網址:https://studygolang.com/dl
下載最新linux版本的go安裝包到本地
解壓到/usr/local資料夾下

tar -zxvf go1.15.linux-amd64.tar.gz /usr/local

設定環境變數(系統變數: /etc/profile ;使用者變數: ~/.bashrc)

vi /etc/profile

新增

export GOPATH=$HOME/go
export GOROOT=/usr/local/go
export PATH=$GOROOT/bin:$PATH

使配置生效

source /etc/profile

檢視go資訊

go version
go env

到此基礎環境已經搭建好了,接下來就是正式Fabric安裝了

二.Fabric相關下載安裝

建立目錄並進入

make -p $GOPATH/src/github.com/hyperledger/
cp $GOPATH/src/github.com/hyperledger

拉取fabric,fabric-ca,fabric-samples映象

git clone https://github.com/hyperledger/fabric.git
git clone https://github.com/hyperledger/fabric-ca.git

#進入到fabric檔案下,下載fabric-samples映象
cd fabric
git checkout -b v2.2.0   #切換到2.2.0,,預設為master分支
git branch			#檢視當前分支
git clone https://github.com/hyperledger/fabric-samples.git
cd fabric-samples
git checkout -b v2.2.0
git branch

到此映象檔案準備完成,接下來就是要編譯生成二進位制檔案
分析:進入到fabric/script資料夾下,修改bootstrap.sh檔案,注:直接編譯執行太慢了,還極其容易出錯,這步耗費了我大量的時間,關鍵還沒搭成功,o(╥﹏╥)o,所以不建議使用官網推薦的方法
檢視bootstrap.sh檔案發現該檔案主要完成三件事:

if [ "$SAMPLES" == "true" ]; then
    echo
    echo "Clone hyperledger/fabric-samples repo"
    echo
    cloneSamplesRepo
fi
if [ "$BINARIES" == "true" ]; then
    echo
    echo "Pull Hyperledger Fabric binaries"
    echo
#    pullBinaries//註釋掉
fi
if [ "$DOCKER" == "true" ]; then
    echo
    echo "Pull Hyperledger Fabric docker images"
    echo
    pullDockerImages
fi

具體操作
採用把拉取二進位制的程式碼註釋掉,從官網下載到本地:下載地址

vi bootstrap.sh
#註釋掉下載二進位制的程式碼
#儲存退出
./bootstrap.sh   #主要下載docker映象

在這裡插入圖片描述

然後哦把下載好的檔案(hyperledger-fabric-linux-amd64-2.2.0.tar.gz和hyperledger-fabric-ca-linux-amd64-1.4.7.tar.gz)解壓,得到bin和config.

tar -zxvf hyperledger-fabric-linux-amd64-2.2.0.tar.gz
tar -zxvf hyperledger-fabric-ca-linux-amd64-1.4.7.tar.gz
ls

bin目錄裡,包含
在這裡插入圖片描述

config目錄包含
在這裡插入圖片描述
把bin和config目錄複製到fabric/fabric-samples/目錄下

cp -r bin $GOPATH/src/github.com/hyperledger/fabric/fabric-samples/
cp -r config $GOPATH/src/github.com/hyperledger/fabric/fabric-samples/

把bin和config加入到環境變數中,以便我們可以全域性訪問

vim /etc/profile
#新增
export PATH=$PATH:$GOPATH/src/github.com/hyperledger/fabric/fabric-samples/bin
export PATH=$PATH:$GOPATH/src/github.com/hyperledger/fabric/fabric-samples/config

好了,環境準備完畢,可以測試網路了

三.測試網路

進入到test-network 中,
啟動網路

cd test-network/
./network.sh up 

啟動成功後

  1. 測試網路有兩個組織成員,Org1和Org2, 還包括一個維護網路排序服務的排序組織。
  2. 每個組織各自運營一個對等節點, peer0.org1.example.com和peer0.org2.example.com.
  3. 每個Fabric網路還包括一個排序服務,該示例網路使用一個單節點Raft排序服務,該服務由排序組織執行。 可以看到在機器上正在執行的排序節點orderer.example.com。
  4. 雖然測試網路僅使用單節點排序服務,一個真實的網路將有多個排序節點,由一個或多個多個排序者組織操作。 不同的排序節點將使用Raft共識演算法達成跨交易順序的共識網路。

建立通道

./network.sh createChannel

通道加入成功後,出現
成功標誌

實際上,以上操作可以用一條命令實現

./network.sh up createChannel

在通道上部署鏈碼
使用network.sh建立通道後,可以使用以下命令在通道上啟動鏈碼:

./network.sh deployCC

該命令將在peer0.org1.example.com和peer0.org2.example.com上安裝fabcar鏈碼。預設情況下,指令碼安裝Go版本的fabcar鏈碼。
出現結果
在這裡插入圖片描述
與網路進行互動
啟用測試網路後,可以使用peer CLI與網路進行互動。
peer CLI允許呼叫已部署的智慧合約,更新通道,或安裝和部署新的智慧合約 (可以在fabric-samples程式碼庫的bin資料夾中找到peer二進位制檔案).

      **確保以下操作是在test-network目錄下**

使用以下命令將二進位制檔案新增到你的CLI路徑:

export PATH=${PWD}/../bin:$PATH

還需要將fabric-samples程式碼庫中的FABRIC_CFG_PATH設定為指向其中的core.yaml檔案:

export FABRIC_CFG_PATH=$PWD/../config/

現在,設定環境變數,以允許你作為Org1操作peer CLI:

# Environment variables for Org1

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=localhost:7051

其中,CORE_PEER_TLS_ROOTCERT_FILE和CORE_PEER_MSPCONFIGPATH環境變數指向Org1的organizations資料夾中的的加密材料。
好了,現在我們可以從CLI查詢賬本了。
在此之前,我們先需要確保啟動fabcar

cd ../fabcar/
ls
./startFabric.sh

啟動結果
在這裡插入圖片描述

再執行以下命令以獲取已新增到通道賬本中的汽車列表:

peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryAllCars"]}'

結果
在這裡插入圖片描述

當網路成員要轉移或更改帳上的資產時,將呼叫鏈碼。
使用以下命令呼叫fabcar鏈碼來更改賬本上汽車的所有者:

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n fabcar --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"changeCarOwner","Args":["CAR9","Dave"]}'

呼叫成功,看到如下結果
在這裡插入圖片描述
由於我們已經查詢過Org1peer節點,我們可以藉此機會查詢在Org2上執行鏈碼的peer節點
同理,設定以下環境變數以作為Org2進行操作:

# Environment variables for Org2

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=localhost:9051

查詢執行在peer0.org2.example.com的fabcar鏈碼:

peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryCar","CAR9"]}'

結果將顯示"CAR9"已轉移到Dave:
在這裡插入圖片描述

{"make":"Holden","model":"Barina","colour":"brown","owner":"Dave"}

關閉網路

./network.sh down

該命令將停止並刪除節點和鏈碼容器,刪除組織加密材料,並從Docker Registry移除鏈碼映象。還會刪除之前執行的通道專案和docker卷。

使用證照頒發機構啟動網路

./network.sh down
./network.sh up -ca
docker ps

在這裡插入圖片描述
看到指令碼啟動了三個CA,每個網路中的組織一個。

期間出現錯誤
在這裡插入圖片描述
說明fabcar沒有啟動,去啟動就好了!

指定用Java安裝部署fabcar出現錯誤
Error: error getting chaincode bytes: failed to create chaincode package: lstat …/asset-transfer-basic/chaincode-java/build/install/basic: no such file or directory
Chaincode packaging on peer0.org1 has failed
Deploying chaincode failed

在這裡插入圖片描述
參考博文:https://blog.csdn.net/i_want_study/article/details/105883966
說是沒有安裝java執行環境jdk,用他的方法安裝jdk沒有解決
自己安裝配置jdk也沒有解決

emm,暫時這樣吧

相關文章