搭建第一个网络(一)
接上周工作,在已经建好的fabric环境中搭建第一个网络。
一、首先从GitHub克隆fabric-samples
$ git clone https://github.com/hyperledger/fabric-samples.git
然后关闭网络,这是防止有开启的网络,影响本次测试的结果。
关闭服务:
$ ./byfn.sh -m down
此时还没有产生创世区块,执行以下命令,产生创世区块:
$ ./byfn.sh -m generate
出现错误:cryptogen tool not found. exiting
这是由于上周在搭建环境的时候没有下载一个二进制文件,也就是在fabric-samples文件夹下需要有一个bin文件夹。查了一下解决方案:
① 第一种解决办法,在fabric-samples目录下面执行以下命令,下载所需要的二进制文件:
curl -sSL http://bit.ly/2ysbOFE | bash -s -- 1.4.0
注意:要与自己镜像的版本相同,这里我用的是1.0.0版本,直接更改版本就可以。
② 按照第一种方法,执行命令时,可能会出现ubuntu访问不到该网站的情况,这时候可以尝试第二种方法下载bin文件。
在真机中打开https://goo.gl/eYdRbX网站,其实他是一个.sh文件。
把这个内容全部拷贝下来,在fabric-sampls目录下面新建一个文件,把拷贝的内容全部放进去,文件名:bootstrap-1.0.1.sh
然后执行:
$ chmod +x bootstrap-1.0.1.sh
这样该文件具有可执行能力了,然后执行:
$ ./bootstrap-1.0.1.sh
出现下载页面,等待它完成,会发现该目录下面有一个bin目录,里面有需要的二进制文件。
用上述两种方法都没有成功,第一种方法显示连接超时,第二种方法失败,开始自动下载镜像文件(就是这个自动下载镜像为后来的有又一个错误埋下了雷。。。。)
③ 前面两种方法我用都出现了错误,最后决定用官网直接手动下载,(就是非常非常慢)
版本要选择和自己相同的版本,比如我的是linux-amd64-1.0.0
下载好之后直接将压缩包拖到虚拟机,在虚拟机中双击打开,将其中的bin文件拖进fabric-samples文件夹下。
二、安装完二进制文件之后,重新尝试
关闭服务:
$ ./byfn.sh -m down
生产创世区块
$ ./byfn.sh -m generate
出现新的错误:
* '' 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...
这是因为我们当时下载的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 设置为跟踪来自 origin 的远程分支 release-1.0。
切换到一个新分支'release-1.0'
lqr@lqr-VirtualBox:~/fabric-samples$ cd first-network
lqr@lqr-VirtualBox:~/fabric-samples/first-network$ ./byfn.sh -m generate
三、启动整个网络:
$ ./byfn.sh -m up
出现错误:
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 ===========
查了网上的方法的解决办法:
输入指令: ./byfn.sh -m restart -c mychannel
这种方法可以解决存在mychannel情况下导致的错误。但是我的产生这个错误原因不同,所以错误仍然存在。
最后发现是因为镜像版本不统一,前面提到的最开始下载二进制文件的时候,自动下载了镜像引起的!Orderer、peer是1.0.6的,而二进制文件及例子都是1.0.0的,所以通道建立不起来!
解决办法:要删除1.0.6版本的orderer和peer镜像。
查看要删除镜像的image ID
执行命令:
$ 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进first-network文件夹
$ ./byfn.sh -m down #关闭网络
$ ./byfn.sh -m generate #生成创世区块
$ ./byfn.sh -m up #启动整个网络
成功!
五、问题补充:磁盘空间不足问题解决办法(参考https://blog.csdn.net/sinat_33201781/article/details/81316773)
1. 进入vbox的安装目录,输入命令VBoxManage modifyhd "vdi路径" --resize 40960。其中引号里的路径就是虚拟机vdi的路径,40960就是扩容的40G。
虚拟机vdi的路径查看方法:进入虚拟机安装目录下,执行指令 VBoxManage list hdds,如下图:location后的地址就是你的vdi地址,直接替换引号中路径即可。此过程还能看到此时磁盘内存为10240M,也就是10G。
2. 执行完之后,按以下步骤扩大虚拟区的分区。
启动虚拟机通过如下命令安装Gparted,并启动。:
$ apt-get install gparted
$ gparted #启动
注意:直接输入命令显示权限不够,需要进入root权限下再执行该命令。
先右击“sda5”禁用交换空间,然后删除linux-swap,删除extended,然后选择需要调整的盘执行”更改大小/移动”命令,调整到需要的大小,同样留下1GB的空间再新建回extended与linux-swap,完成后点对勾应用更改,Partition节下会恢复原来的分区标识。
3. 执行指令VBoxManage list hdds,可以看到此时磁盘空间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虚拟系统扩充硬盘容量
网友评论