搭建Fabric 1.0开发环境和Fabric-sample e2e_cli(一)后附常见问题

参考了官方文档和深蓝居的博客园

官方文档:https://hyperledger-fabric.readthedocs.io/en/release-1.1/

深蓝居博客:https://www.cnblogs.com/studyzy/p/7437157.html

作者:ethanlu(ethanlu@mail.ustc.edu.cn)

创建于:2018年7月17日

最后修改:2019年7月9日(2019.7.9按照本文档再次搭建成功)

一,安装的Linux的的的的环境

1、安装虚拟机没什么好说的,工作站,虚拟盒,VMware Fusion都可以,下载最新版本ubuntu16.04,个人使用的科大镜像,稳,阿里云的也可以。

镜像地址:https://mirrors.ustc.edu.cn/,安装过程中不要插手机线以及其他外设,否则会安装失败。

在安装完Ubuntu的系统后,需要保证源是国内的,如果是国外的话很慢,具体做法是:

打开的ubuntu的系统设置

2、源更新为科大​​的

安装一些辅助工具:vim,和粘贴工具

vim:https://jingyan.baidu.com/article/046a7b3efd165bf9c27fa915.html

粘贴工具:

sudo apt-get install open-vm-tools-desktop 

   然后重启电脑就可以了。

 

2.Go的安装

1、go官网提供了的安装,但是版本较旧会报错,最好的办法如下:

wget https://storage.googleapis.com/golang/go1.10.3.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.10.3.linux-amd64.tar.gz

2、解压到/ usr / local文件夹下,设置GO环境变量。

vi ~/.profile

3、在文档最后添加以下内容:(GOPATH为go的工作文档,GOROOT为go的安装目录,这个地方设置错了后面跑e2e会报错

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

4、编辑保存并退出VI后,记得把这些环境载入:

source ~/.profile

5、我们把go的目录GOPATH设置为当前用户的文件夹下,所以记得创建去文件夹:

cd ~
mkdir go

 7、检查路径是否正确:

如图所示,这个时候看下去的环境变量设置是否正确,环境变量的设置会影响到e2e跑通:

go env

 

3. Docker安装

建议安装Docker CE,CE是社区免费版,推荐按照官方文档安装,之前试过阿里云,大刀云都会报错无法解决。推荐根据官方安装靠谱。官网链接:https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-using-the-repository

1、更新apt

sudo apt-get update

2、安装包apt通过HTTPS使用存储库:

    sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

3、添加ubuntu的官方GPG密钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88通过搜索最后8个字符,验证密钥:

    sudo apt-key fingerprint 0EBFCD88

pub   4096R/0EBFCD88 2017-02-22
      Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid                  Docker Release (CE deb) <docker@docker.com>
sub   4096R/F273FCD8 2017-02-22

5.1、安装最新版本的Docker CE(若使用最新则会报错,建议直接下一步用5:18.09.1~3-0~ubuntu-xenial.版本),

sudo apt-get install docker-ce
apt-cache madison docker-ce

5.2、安装特定版本的Docker CE,列出可用版本,然后选择(<VERSION_STRING>=5:18.09.1~3-0~ubuntu-xenial)并安装一个:

sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io

7,通过运行hello-world 映像验证是否正确安装了Docker CE:

 sudo docker run hello-world

如图所示,此命令下载测试映像并在容器中运行它当容器运行时,它会打印一条如下信息性消息并退出。:

 

4. Docker-compose安装

docker-compose推荐根据官方文档安装,不会出错

官网链接:https//docs.docker.com/compose/install/

1,下载最新版本的docker-compose:

sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

2,对二进制文件应用可执行权限:

sudo chmod +x /usr/local/bin/docker-compose

3,若安装成功,则显示下方信息:

docker-compose --version

 

5. Fabric源码下载

1,我们可以使用GIT中命令下载源码,首先需要建立对应的目录,然后进入该目录,GIT中源码下来:

mkdir -p ~/go/src/github.com/hyperledger 
cd ~/go/src/github.com/hyperledger 
git clone https://github.com/hyperledger/fabric.git

2,由于fabric一直在更新,所有我们并不需要最新最新的源码,需要切换到V1.0.0版本的源码即可,一定要都是1.0否则后期会报错: 

cd ~/go/src/github.com/hyperledger/fabric
git checkout release-1.0

3,如果没有1.0.0就git branch根据提示git checkout -a按住TAB出新的分支版本。

6. Fabric Docker镜像的下载

1,这个其实很简单,因为我们已经设置了Docker Hub镜像地址,所以下载也会很快。官方文件也提供了批量下载的脚本。我们直接运行:

cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli/
source download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0

这样就可以下载所有需要的Fabric Docker镜像了。由于我们设置了国内的镜像,所以下载应该是比较快的。

2,下载完毕后,我们运行以下命令检查下载的镜像列表:

docker images

3,会出现如下信息 

7.启动e2e网络并完成ChainCode的测试

我们仍然停留在e2e_cli文件夹,这里提供了启动,关闭Fabric网络的自动化脚本。我们要启动Fabric网络,并自动运行Example02 ChainCode的测试,执行一个命令:( 不提sudo权限会报错

sudo ./network_setup.sh up

这个做了以下操作:

7.1编译生成织物公私,证书的程序,程序在目录:fabric/release/ Linux的AMD64 / bin中

7.2基于configtx.yaml生成创世区块和通道相关信息,并保存在信道的工件文件夹。

7.3基于加密config.yaml生成公私钥和证书信息,并保存在加密的配置文件夹中。

7.4基于搬运工 - 构成-cli.yaml启动1Orderer + 4Peer + 1CLI的织物容器。

7.5在CLI启动的时候,会运行脚本/ script.sh文件,这个脚本文件包含了创建通道,加入通道,安装Example02,运行Example02等功能。

运行成功,我们可以看到这样的界面(这一步会遇到很多问题报错):

 如果看到这个界面,这说明我们整个单机部署光纤网络已经搭建成功了。

8.手动测试一下布网络

1,我们仍然是以现在安装好的e2e_cli为例,在官方例子中,信道名字默认是mychannel,链码的名字是mycc我们首先进入CLI,我们重新打开一个命令行窗口,输入:

docker exec -it cli bash

2,运行以下命令可以查询一个a账户的余额:

peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

3,然后,我们试一试把a账户的余额再转20元给b账户,运行命令:

peer chaincode invoke -o orderer.example.com:7050  --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem  -C mychannel -n mycc -c '{"Args":["invoke","a","b","20"]}'

结果为:

 

转账完毕,我们试一试再查询一下a账户的余额,没问题的话,应该是只剩下70了我们看看实际情况:

peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

5,果然,一切正常最后我们要关闭布网络,首先需要运行退出命令退出CLI容器关闭fabric的命令与启动类似,命令为。:

cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli

./network_setup.sh down

测试用例分析

1,network_setup.sh分析:

network_setup.sh其中包括两个部分,一个是利用generateArtifacts.sh脚本文件配置组织关系和颁发证书,另一个是搬运工-构成-cli.yaml用于根据配置启动集群并测试chaincode的示例代码。 
具体流程如下:

2,generateArtifacts.sh脚本文件

generateArtifacts.sh包含三个函数:

3,搬运工-撰写-cli.yaml文件

  • generateCerts:使用cryptogen工具根据加密config.yaml来生成证书。 
  • replacePrivateKey: 。将搬运工-撰写-E2E-template.yaml文档中的CA私钥替换成具体的私钥(本例中未使用) 
  • generateChannelArtifacts:使用configtxgen工具根据configtx.yaml文件来生成orderer,genesis块,通道配置事务,锚点对等更新。

docker-compose-cli.yaml文件根据组织关系启动docker集群,并在cli容器中执行命令命令运行./scripts/script.sh脚本文件 
./scripts/script.sh脚本包含以下函数:

  • createChannel:创建频道.joinChannel:将每个节点加入频道。 
  • updateAnchorPeers installChaincode:部署链码。 
  • nstantiateChaincode:初始化chaincode,并设置背书策略chaincodeQuery chaincodeInvoke。

 4,configtxgen文件

configtxgen工具生成两个内容:Orderer的bootstrap block和Fabric的通道配置事务

orderer block是订购服务的创世区块;渠道交易文件在创建渠道时会被广播给orderer。

configtx.yaml包含网络的定义,并给出了网络组件的拓扑结构-2个成员(Org0和ORG1)分别管理维护2个对等体。还指出每个网络实体的加密材料的存储位置。crypto目录包含每个实体的管理员证书,CA证书,签名证书和私钥。

为了方便使用,我们提供了一个脚本generateCfgTrx.sh,脚本该整合性了configtxgen的执行过程,执行后会生成两个配置结果:orderer.blockchannel.tx。如果运行你过上边的network_setup.sh则这两个配置查询查询结果已生成,到要先crypto/orderer目录将之删除。

5,在启动的过程中,是先启动configtxgen的二进制文件,包含密钥,启动顺序是

mychannel;

ORG1,peer0; 

ORG1,方1;

ORG2,peer0;

ORG2,方1;

遇到的问题

1,出现这种

或者这种

或者

原因是git分支版本,镜像版本,configtxgen版本都应是1.0.0。没有安装mycc合约。报错的内容:多个文件都不存在。之前的环节出了问题

方法:三者版本保持一致

git branch v1.0.0

 

2,安装去环境变量遇到报错,在最前面加上须藤以根用户的身份运行。运行后,在在/ usr /本地/下就可以看到进入目录了。如果是自己用软件解压的,可以拷贝到在/ usr /本地/去下,但是要保证你的去文件夹下是垃圾桶,SRC,DOC等目录,不要去文件夹下又是一个去文件夹,这样就双重嵌套了。

然后就要配置环境变量了,LINUX下又两个文件可以配置,其中的/ etc / profile文件是针对所有用户都有效的; $ HOME / .profile文件是针对当前用户有效的,可以根据自己的情况选择。

针对所有用户的需要重启电脑才可以生效;针对当前用户的,在终端里使用源命令加载这个$ HOME / .profile中即可生效。

3,最常见也是最容易忽视的问题,每次当解决完一个问题,其实已经设置好了,但是还是和之前一样报错,这个时候是权限问题,只要加一个须藤,或者苏进入根模式即可,这个能让很多人困惑,明明我已经解决了问题,为什么还是报同样的错?

 

4、
 

原因是:

e2e_cli目录是固定的,启动后会创建一个docker network以此为名字,这里是e2e_cli。如果修改该目录,要修改:~/go/src/github.com/hyperledger/fabric/examples/e2e_cli/base目录下的peer-base.yaml

将网络名改成如下名称即可

- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=e2e_cli_default



 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值