(三) Hyperledger Fabric 在 Ubuntu16.04 64位環境下手動啟動Fabric網路
一、 前期準備
項 | 版本 | 更新或下載URL |
Ubuntu | 16.04 64位 | 略 |
依賴項(不分先後順序) | ||
docker | 17.05.0-ce | yes|cp -f ./docker.repo /etc/yum.repos.d/docker.repo sudo apt-get install –y docker-engine systemctl start docker.service docker.repo內容見下教程 |
docker-compose | 1.9.0 build 2585387 | pip install docker-compose |
go | 1.7.5 | sudo apt-get install –y golang |
python | 2.7.5 | sudo apt-get install –y python |
python-pip | 9.0.1 | sudo apt-get install -y python-pip pip install --upgrade pip backports.ssl_match_hostname |
git | 1.8.3.1 | sudo apt-get install –y git |
nodejs | 6.11.3 | sudo apt-get install –y nodejs |
npm | 3.10.10 | nodejs已整合 |
說明:
1. 相關工具的安裝均為64位,版本不同可能將導致無法正常啟動IDE或無法完成某些配置,請務必注意版本資訊。
2. 後續安裝過程中有部分工具,僅僅需要解壓即可完成安裝,建議將解壓出的問題統一安裝至相同目錄便於管理。
二、 配置步驟
1. 網路拓撲
略
2. 準備自己手動生成相關配置檔案
新增bootstrap-*.sh下載的簽名、生成證書等工具——configtxgen、configtxlator、cryptogen、orderer、peer
方法一:新增路徑至環境變數,永久生效。環境變數路徑:
vim/etc/environment
方法二:直接拷貝工具至/usr/bin,類似方法一,需要root許可權(使用切換至root)。命令:
sudo yes|cp –f [你的fabric例子程式碼存放路徑]/fabric-samples/script/bin/configtxlator /usr/bin/
sudo yes|cp –f [你的fabric例子程式碼存放路徑]/fabric-samples/script/bin/configtxgen /usr/bin/
sudo yes|cp –f [你的fabric例子程式碼存放路徑]/fabric-samples/script/bin/cryptogen /usr/bin/
sudo yes|cp –f [你的fabric例子程式碼存放路徑]/fabric-samples/script/bin/orderer /usr/bin/
sudo yes|cp –f [你的fabric例子程式碼存放路徑]/fabric-samples/script/bin/peer /usr/bin/
新增檔案的可執行許可權
chmod –R a+x configtxlator configtxgen cryptogen orderer peer
方法三:使用官方提供的原始碼重新編譯生成工具,命令:
檔案所在:~/go/src/github.com/hyperledger/fabric
執行命令:
make cryptogen
make configtxgen
make configtxlator
2.1. 生成組織關係和身份證書
通過以下命令可以為Fabric網路生成指定拓撲結構的組織和身份檔案,並存放到crypto-config目錄
命令:
cryptogen generate --config=./crypto-config.yaml --output ./crypto-config
通過crypto-config.yaml配置檔案生成組織關係和身份證書,執行成功結果如下:
通過以下命令可檢視crypto-config目錄結構,命令:
tree –L 4 crypto-config
2.2. 生成Ordering服務啟動初始區塊
本地使用簡單solo模式,生產環境請使用kafka叢集服務。
1) 生成Ordering服務系統通道的初始區塊檔案
FABRIC_CFG_PATH=. configtxgen -profile TwoOrgsOrdererGenesis –outputBlock ./orderer.genesis.block
成功生成Ordering服務初始區塊,如下所示:
說明:
非solo模式下,所生成的orderer.genesis.block需要複製到Orderer節點上(與Orderer配置中ORDERER_GENERAL_GENESISFILE指定的檔案路徑一致,預設路徑為:/etc/hyperledger/fabric路徑下),在啟動Ordering服務時進行使用。
2.3. 生成新建應用通道的配置交易檔案
新建應用通道是,需要事先準備好配置交易檔案,包括屬於該通道的組織結構資訊。這些資訊會寫入該應用通道的初始區塊中。而且生成的配置交易資訊檔案會在後續步驟被客戶端使用,因此可以放在客戶端節點上。
1) 使用configtx.yaml配置檔案中的TwoOrgsChannel模板指定Org1和Org2都屬於隨後新建的應用通道。
執行命令:
CHANNEL_NAME=businesschannel
FABRIC_CFG_PATH=. configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./businesschannel.tx -channelID ${CHANNEL_NAME}
成功新建應用通道的配置交易檔案,如下所示:
2.4. 生成錨節點配置更新檔案
錨節點配置更新檔案可以用來對組織的錨節點進行配置,但需要分別指定對應的組織名稱。
具體生成步驟:
1) 生成組織1:Org1MSP
FABRIC_CFG_PATH=. configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./Org1MSPanchors.tx -channelID ${CHANNEL_NAME} -asOrg Org1MSP
2) 生成組織2:Org2MSP
FABRIC_CFG_PATH=. configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./Org2MSPanchors.tx -channelID ${CHANNEL_NAME} -asOrg Org2MSP
成功生成錨節點配置更新檔案,如下所示:
說明:
1) 所生成的錨節點配置更新檔案仍會在後續步驟被客戶端使用,因此也可以放在客戶端節點上。
2) 所有用於啟動的配置檔案生成並部署到對應節點後,可以進行服務的啟動操作。
a) 啟動Order節點
b) 啟動Peer節點
3. 啟動Orderer節點
檢查啟動節點的所有配置是否就緒:
1) 在/etc/hyperledger/fabric下放置有編寫好的orderer.yaml。
該檔案可參考官方sampleconfig/orderer.yaml檔案編寫。(具體yaml檔案語法請自行搜尋瞭解)
2) 在/etc/hyperledger/fabric下放置生成的msp、tls檔案目錄。
3) 在/etc/hyperledger/fabric下放置初始區塊檔案orderer.genesis.block。
注:請自行拷貝相關檔案至:/etc/hyperledger/fabric下,以便啟動orderer節點。
Orderer節點的預設配置檔案中指定簡單Orderer節點功能。通常來說,在使用時需依據需求對一些關鍵配置進行指定。
環境變數配置入口:to be add
啟動本地Orderer節點:
orderer start
4. 啟動Peer節點
5. 操作網路
6. 基於容器方式
三、 FAQ
1. 使用cryptogen無法生成檔案
症狀:
可能原因:
1) 與操作版本不對應
2) 檔案損壞
3) 無可執行許可權
解決方法:
1) 重新下載對應版本
2) 賦予可執行許可權
重新下載工具(configtxgen、configtxlator、cryptogen):
2. 生成Ordering服務系統通道的初始檔案失敗
症狀:
原因:
未確認FABRIC_CFG_PATH該變數路徑,可預先設定該路徑為當前路徑。
解決方法:
在控制檯執行以下命令:
FABRIC_CFG_PATH=.
解決後:
額外說明:無
3. orderer start啟動失敗
症狀:
原因:
解決方法:
相關命令:
解決後:
額外說明:
4. 註釋compose-compose-cli.yaml的script.sh後通過命令列方式手動啟動fabric網路失敗
啟動命令:
CHANNEL_NAME=businesschannel TIMEOUT=300 docker-compose –f docker-compose-cli.yaml up -d
原因:
docker守護程序啟動時無法正確選擇sock檔案的URL位置。
解決方法:
將docker服務新增自系統自啟動,重啟Ubuntu即可。
相關命令:
1. 切換至root使用者:su
2. 設定docker為開機自啟動:systemctl enable docker
3. 未馬上手動重啟伺服器的情況下,手動啟動docker服務:
systemctl start docker
systemctl restart docker
4. 退出root後,檢視docker容器啟動情況:sudo docker ps
解決後:
額外說明:
5. 連線peer節點
原因:
依據上圖提示得知連線orderer.example.com:7050錯誤,具體的錯誤描述為:認證握手失敗,x509證書籤名未被授權。
解決方法:
給證書籤名
相關命令:
解決後:
額外說明:
6. 進入docker-compose-cli.yaml配置檔案指定的cli容器無法生成通道的創世區塊
原因:
存在同名的channel,因為同樣的channel已經在之前被建立,命名衝突。
解決方法:
移除docker,重新啟動。
相關命令:
1) 刪除一個指定容器:sudo docker rm [container id]
2) 強制刪除一個指定容器:sudo docker rm –f [container id]
3) 強制刪除全部容器:sudo docker rm –f $(sudo docker ps -aq)
解決後:
生成通道的創世區塊:mychannel.block
額外說明:
1) 檢查是否已經建立同名channel;
2) 清理之前的搭建環境,如果是在虛擬機器中搭建或建立快照,建議重新恢復至快照狀態再重新下載容器,按步驟逐一測試。