搭建第一個(gè)網(wǎng)絡(luò)(一)
接上周工作,在已經(jīng)建好的fabric環(huán)境中搭建第一個(gè)網(wǎng)絡(luò)。
一、首先從GitHub克隆fabric-samples
$ git?clone?https://github.com/hyperledger/fabric-samples.git

然后關(guān)閉網(wǎng)絡(luò),這是防止有開啟的網(wǎng)絡(luò),影響本次測(cè)試的結(jié)果。
關(guān)閉服務(wù):
$ ./byfn.sh -m down
此時(shí)還沒有產(chǎn)生創(chuàng)世區(qū)塊,執(zhí)行以下命令,產(chǎn)生創(chuàng)世區(qū)塊:
$ ./byfn.sh -m generate
出現(xiàn)錯(cuò)誤:cryptogen tool not found. exiting

這是由于上周在搭建環(huán)境的時(shí)候沒有下載一個(gè)二進(jìn)制文件,也就是在fabric-samples文件夾下需要有一個(gè)bin文件夾。查了一下解決方案:
????① 第一種解決辦法,在fabric-samples目錄下面執(zhí)行以下命令,下載所需要的二進(jìn)制文件:
curl -sSL http://bit.ly/2ysbOFE | bash -s -- 1.4.0
注意:要與自己鏡像的版本相同,這里我用的是1.0.0版本,直接更改版本就可以。
????② 按照第一種方法,執(zhí)行命令時(shí),可能會(huì)出現(xiàn)ubuntu訪問不到該網(wǎng)站的情況,這時(shí)候可以嘗試第二種方法下載bin文件。
在真機(jī)中打開https://goo.gl/eYdRbX網(wǎng)站,其實(shí)他是一個(gè).sh文件。

把這個(gè)內(nèi)容全部拷貝下來,在fabric-sampls目錄下面新建一個(gè)文件,把拷貝的內(nèi)容全部放進(jìn)去,文件名:bootstrap-1.0.1.sh
然后執(zhí)行:
$ chmod +x bootstrap-1.0.1.sh
這樣該文件具有可執(zhí)行能力了,然后執(zhí)行:
$ ./bootstrap-1.0.1.sh
出現(xiàn)下載頁面,等待它完成,會(huì)發(fā)現(xiàn)該目錄下面有一個(gè)bin目錄,里面有需要的二進(jìn)制文件。
用上述兩種方法都沒有成功,第一種方法顯示連接超時(shí),第二種方法失敗,開始自動(dòng)下載鏡像文件(就是這個(gè)自動(dòng)下載鏡像為后來的有又一個(gè)錯(cuò)誤埋下了雷。。。。)

????③ 前面兩種方法我用都出現(xiàn)了錯(cuò)誤,最后決定用官網(wǎng)直接手動(dòng)下載,(就是非常非常慢)
版本要選擇和自己相同的版本,比如我的是linux-amd64-1.0.0
下載好之后直接將壓縮包拖到虛擬機(jī),在虛擬機(jī)中雙擊打開,將其中的bin文件拖進(jìn)fabric-samples文件夾下。

二、安裝完二進(jìn)制文件之后,重新嘗試
關(guān)閉服務(wù):
$ ./byfn.sh -m down
生產(chǎn)創(chuàng)世區(qū)塊
$ ./byfn.sh -m generate
出現(xiàn)新的錯(cuò)誤:
* '' has invalid keys: capabilities, channel
* 'Application' has invalid keys: Capabilities, Policies
* 'Orderer' has invalid keys: Policies
* 'Organizations[0]' has invalid keys: Policies
* 'Organizations[1]' has invalid keys: Policies
* 'Organizations[2]' has invalid keys: Policies
* 'Profiles[SampleDevModeKafka]' has invalid keys: Capabilities, Policies
* 'Profiles[SampleDevModeKafka].Application' has invalid keys: Capabilities, Policies
* 'Profiles[SampleDevModeKafka].Application.Organizations[0]' has invalid keys: Policies
* 'Profiles[SampleDevModeKafka].Consortiums[SampleConsortium].Organizations[0]' has invalid keys: Policies
* 'Profiles[SampleDevModeKafka].Consortiums[SampleConsortium].Organizations[1]' has invalid keys: Policies
* 'Profiles[SampleDevModeKafka].Orderer' has invalid keys: Capabilities, Policies
* 'Profiles[SampleDevModeKafka].Orderer.Organizations[0]' has invalid keys: Policies
* 'Profiles[TwoOrgsChannel].Application' has invalid keys: Capabilities, Policies
* 'Profiles[TwoOrgsChannel].Application.Organizations[0]' has invalid keys: Policies
* 'Profiles[TwoOrgsChannel].Application.Organizations[1]' has invalid keys: Policies
* 'Profiles[TwoOrgsOrdererGenesis]' has invalid keys: Capabilities, Policies
* 'Profiles[TwoOrgsOrdererGenesis].Consortiums[SampleConsortium].Organizations[0]' has invalid keys: Policies
* 'Profiles[TwoOrgsOrdererGenesis].Consortiums[SampleConsortium].Organizations[1]' has invalid keys: Policies
* 'Profiles[TwoOrgsOrdererGenesis].Orderer' has invalid keys: Capabilities, Policies
* 'Profiles[TwoOrgsOrdererGenesis].Orderer.Organizations[0]' has invalid keys: Policies
+ res=1
+ set +x
Failed to generate orderer genesis block...
這是因?yàn)槲覀儺?dāng)時(shí)下載的fabric-samples 是1.4版本的,但是bin用的是1.0的,所以切換fabric-samples為1.0的即可。
lqr@lqr-VirtualBox:~$ cd fabric-samples
lqr@lqr-VirtualBox:~/fabric-samples$ git checkout release-1.0
分支release-1.0 設(shè)置為跟蹤來自 origin 的遠(yuǎn)程分支 release-1.0。
切換到一個(gè)新分支'release-1.0'
lqr@lqr-VirtualBox:~/fabric-samples$ cd first-network
lqr@lqr-VirtualBox:~/fabric-samples/first-network$ ./byfn.sh -m generate

三、啟動(dòng)整個(gè)網(wǎng)絡(luò):
$?./byfn.sh -m up
出現(xiàn)錯(cuò)誤:
Error: Got unexpected status: BAD_REQUEST
Usage:
??peer channel create [flags]
Flags:
??-c, --channelID string???In case of a newChain command, the channel ID to create.
??-f, --file string????????Configuration transaction file generated by a tool such as configtxgen for submitting to orderer
??-t, --timeout int????????Channel creation timeout (default 5)
Global Flags:
??????--cafile string??????????????Path to file containing PEM-encoded trusted certificate(s) for the ordering endpoint
??????--logging-level string???????Default logging level and overrides, see core.yaml for full syntax
??-o, --orderer string?????????????Ordering service endpoint
??????--test.coverprofile string???Done (default "coverage.cov")
??????--tls????????????????????????Use TLS when communicating with the orderer endpoint
??-v, --version????????????????????Display current version of fabric peer server
!!!!!!!!!!!!!!! Channel creation failed !!!!!!!!!!!!!!!!
========= ERROR !!! FAILED to execute End-2-End Scenario ===========
查了網(wǎng)上的方法的解決辦法:
輸入指令:?./byfn.sh -m restart -c mychannel
這種方法可以解決存在mychannel情況下導(dǎo)致的錯(cuò)誤。但是我的產(chǎn)生這個(gè)錯(cuò)誤原因不同,所以錯(cuò)誤仍然存在。
最后發(fā)現(xiàn)是因?yàn)殓R像版本不統(tǒng)一,前面提到的最開始下載二進(jìn)制文件的時(shí)候,自動(dòng)下載了鏡像引起的!Orderer、peer是1.0.6的,而二進(jìn)制文件及例子都是1.0.0的,所以通道建立不起來!
解決辦法:要?jiǎng)h除1.0.6版本的orderer和peer鏡像。
????查看要?jiǎng)h除鏡像的image ID

????執(zhí)行命令:
$ docker rmi 659d92c1be85 ????
$ docker rmi 28c7c07db54
????重新下載$ source download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0
四、解決完以上問題,重新操作:
$ ?cd fabric-samples/first-network?#cd進(jìn)first-network文件夾
$ ?./byfn.sh -m down ?????#關(guān)閉網(wǎng)絡(luò)
$ ?./byfn.sh -m generate ??#生成創(chuàng)世區(qū)塊
$ ?./byfn.sh -m up ?????#啟動(dòng)整個(gè)網(wǎng)絡(luò)

成功!
五、問題補(bǔ)充:磁盤空間不足問題解決辦法(參考https://blog.csdn.net/sinat_33201781/article/details/81316773)
1. 進(jìn)入vbox的安裝目錄,輸入命令VBoxManage modifyhd "vdi路徑" --resize 40960。其中引號(hào)里的路徑就是虛擬機(jī)vdi的路徑,40960就是擴(kuò)容的40G。
虛擬機(jī)vdi的路徑查看方法:進(jìn)入虛擬機(jī)安裝目錄下,執(zhí)行指令 VBoxManage list hdds,如下圖:location后的地址就是你的vdi地址,直接替換引號(hào)中路徑即可。此過程還能看到此時(shí)磁盤內(nèi)存為10240M,也就是10G。

2. 執(zhí)行完之后,按以下步驟擴(kuò)大虛擬區(qū)的分區(qū)。
啟動(dòng)虛擬機(jī)通過如下命令安裝Gparted,并啟動(dòng)。:
$ apt-get install gparted
$ gparted??#啟動(dòng)
注意:直接輸入命令顯示權(quán)限不夠,需要進(jìn)入root權(quán)限下再執(zhí)行該命令。

先右擊“sda5”禁用交換空間,然后刪除linux-swap,刪除extended,然后選擇需要調(diào)整的盤執(zhí)行”更改大小/移動(dòng)”命令,調(diào)整到需要的大小,同樣留下1GB的空間再新建回extended與linux-swap,完成后點(diǎn)對(duì)勾應(yīng)用更改,Partition節(jié)下會(huì)恢復(fù)原來的分區(qū)標(biāo)識(shí)。

3. 執(zhí)行指令VBoxManage list hdds,可以看到此時(shí)磁盤空間40960M

主要參考:
https://hyperledgercn.github.io/hyperledgerDocs/build_network_zh/
https://blog.csdn.net/zhj_fly/article/details/80700596
https://hyperledger-fabric.readthedocs.io/en/latest/install.html
https://blog.csdn.net/sinat_33201781/article/details/81316773VBox中給ubuntu虛擬系統(tǒng)擴(kuò)充硬盤容量