3:運行測試e2e
3.1、運行fabric-samples的問題說明
該問題說明能夠解決6.1、平台特定使用的二進制文件配置第一步的問題。可以選擇繼續閱讀該說明,或者等參考到6.1小節時再反向閱讀本說明,具體在6.1中會重新指向本步驟。
一般情況下,我們會參照官網來完成第一個網絡測試,在該在線文檔中會讓我們去下載一個fabric-samples,下載地址在github上,我們需要將其下載至本地是一個fabric-samples-release文件夾,將其更名為fabric-samples隨后上傳至opt/gopath/src目錄下。
按照官網提示執行的命令是無法運行起first-network這個項目,該demo需要先下載 Platform-specific Binaries(特定的二進制文件),按照官方文檔中的描述,需要先執行如下命令:
curl -sSL https://goo.gl/iX9dek | bash
上述命令會下載自動化部署腳本,同時也會下載平台特定使用的二進制文件才cryptogen、configtxgen、configtxlator以及peer,把他們放到上述倉庫的bin目錄下。
通常執行上述命令並不能下載,即便是能下載,速度也奇慢無比,故此,我們離線下載相關二進制文件來執行上述操作。
可以在http://download.csdn.net/download/jiayiyangzhu/10245492執行下載1.0版本的,在https://download.csdn.net/download/jiayiyangzhu/10330267執行下載1.1版本的,積分默認最低2…
在官網給出的執行命令中並沒有給出離線下載地址,且官網也沒有離線部署說明,我們可以在1.4.2中下載的fabric源碼中找到下載地址,在/opt/gopath/src/github.com/hyperledger/fabric/scripts目錄下有一個bootstrap-1.0.0.sh腳本文件,事實上如果外網訪問條件優越的情況下,直接運行該腳本即可下載所有所需的fabric鏡像文件及官方指定所需的二進制文件。
打開bootstrap-1.0.0.sh(目前最新版為1.0.0,以實際為准),找到其中對“Downloading platform binaries”的輸出行,目前所見是“echo "===> Downloading platform binaries"”,查看其指向的下載地址,可以得到一個官網提供的離線下載網址,根據上下文意思及當前我們所使用的版本信息,可以得到最終的離線下載文件地址,下載該文件到本地。
根據官網的介紹,解壓后會得到一個bin文件夾,將其解壓至/opt/gopath/src/github.com/hyperledger/fabric-samples目錄下即可運行first-network等項目。
3.2、運行e2e_cli項目
進入到/opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli目錄下,文件結構如下圖所示:
network_setup.sh是一件測試腳本,該腳本啟動5個docker容器,其中4個容器運行peer節點和1個容器運行orderer節點,它組成一個Fabric集群。另外還有一個cli容器用於執行創建channel、加入channel、安裝和執行chaincode等操作。測試用的chaincode定義了兩個變量,在實例化的時候會給這兩個變量賦予了初始值,並通過invoke操作可以使兩個變量的值發生變化。
通過以下命令執行測試:
bash network_setup.sh up
接下來會有許多的調試信息,具體可參考e2e_cli目錄下的script/script.sh文件,當終端出現以下信息時,說明測試通過,所有部件正常工作:
這個命令可以在本機啟動4+1的Fabric網絡並且進行測試,跑Example02這個ChainCode。我們可以看到每一步的操作,最后確認單機沒有問題。確認我們的鏡像和腳本都是正常的,我們就可以關閉Fabric網絡,繼續我們的多機Fabric網絡設置工作。關閉Fabric命令:
bash network_setup.sh down
3.3、e2e_cli與Linux內核bug
該Fabric網絡集群測試環境在Linux內核低版本上可能會出現問題,這是舊版內核的bug,比如在執行bash network_setup.sh up的時候會出現如下錯誤:
即執行chaincode初始化的時候報錯,導致集群單機無法啟動。
解決方案,使用最新版穩定版的docker(筆者寫文檔時的最新穩定版為:17.06.0-ce),將Linux內核升級到最新版,筆者原先使用的Linux內核是3.10,出現了上述問題,目前筆者使用的內核版本是4.12.5-1.e17,能夠完美運行Fabric集群環境。
具體可以參考Can´t specify memory limit in docker run and docker compose