参考了面料,搬运工,去官方文档和深蓝居的博客园
作者:ethanlu([email protected])
创建于:2018年7月17日
最后修改:2018年7月18日
一,安装的Linux的环境
安装虚拟机没什么好说的,工作站,虚拟盒,VMware Fusion都可以,下载最新版本,ubuntu16.04镜像建议科大镜像,稳定且快。
镜像地址:https://mirrors.ustc.edu.cn/
在安装完的Ubuntu后,需要保证易源是国内的,不然如果是国外的话会很慢具体做法是:
如图1所示,打开的ubuntu的系统设置
2,源更新为科大的
2.去的安装
1,Ubuntu的的的易于得到的虽然提供了围棋的安装,但是版本比较旧会报错,最好的办法如下:
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为去的工作文档,GOROOT为走的安装目录,这个地方设置错了后面会报错)
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,我们把去的目录GOPATH设置为当前用户的文件夹下,所以记得创建去文件夹:
cd ~
mkdir go
如图6所示,这个时候看下去的环境变量设置是否正确,环境变量的设置会影响到后期织物是否能跑通:
go env
7,检查路径是否正确:
3. Docker安装
建议安装Docker CE,CE是社区免费版,推荐按照官方文档安装,之前试过阿里云,大刀云都会报错无法解决。推荐根据官方安装靠谱。官网链接:https://docs.docker.com/ 安装/ Linux的/泊坞窗-CE / Ubuntu的/#支持存储司机
1,更新apt
:
$ sudo apt-get update
2、安装包以允许apt
通过HTTPS使用存储库:
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
3、添加Docker的官方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) <[email protected]>
sub 4096R/F273FCD8 2017-02-22
5、安装最新版本的Docker CE,或转到下一步安装特定版本:
sudo apt-get install docker-ce
6、安装特定版本的Docker CE,请列出repo中的可用版本,然后选择并安装一个。列出仓库中可用的版本:
apt-cache madison docker-ce
docker-ce | 18.03.0~ce-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
按其完全限定的包名称安装特定版本,如,包名称(docker-ce
)“=”版本字符串(第2列)docker-ce=18.03.0~ce-0~ubuntu
:
sudo apt-get install docker-ce=<VERSION>
7、通过运行hello-world
映像验证是否正确安装了Docker CE :
sudo docker run hello-world
8、此命令下载测试映像并在容器中运行它。当容器运行时,它会打印一条如下信息性消息并退出:
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
docker-compose version 1.21.2, build 1719ceb
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 v1.0.0
3、如果没有1.0.0就gir branch根据提示git checkout -b v 按住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.启动Fabric网络并完成ChainCode的测试
我们仍然停留在e2e_cli文件夹,这里提供了启动、关闭Fabric网络的自动化脚本。我们要启动Fabric网络,并自动运行Example02 ChainCode的测试,执行一个命令:(不提sudo权限会报错)
sudo ./network_setup.sh up
这个做了以下操作:
7.1编译生成Fabric公私钥、证书的程序,程序在目录:fabric/release/linux-amd64/bin
7.2基于configtx.yaml生成创世区块和通道相关信息,并保存在channel-artifacts文件夹。
7.3基于crypto-config.yaml生成公私钥和证书信息,并保存在crypto-config文件夹中。
7.4基于docker-compose-cli.yaml启动1Orderer+4Peer+1CLI的Fabric容器。
7.5在CLI启动的时候,会运行scripts/script.sh文件,这个脚本文件包含了创建Channel,加入Channel,安装Example02,运行Example02等功能。
运行成功,我们可以看到这样的界面(这一步会遇到很多问题报错):
如果看到这个界面,这说明我们整个单机部署Fabric网络已经搭建成功了。
8.手动测试一下Fabric网络
1、我们仍然是以现在安装好的e2e_cli为例,在官方例子中,channel名字默认是mychannel,链码的名字是mycc。我们首先进入CLI,我们重新打开一个命令行窗口,输入:
docker exec -it cli bash
2、运行以下命令可以查询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"]}'
运行结果为:
4、现在转账完毕, 我们试一试再查询一下a账户的余额,没问题的话,应该是只剩下70了。我们看看实际情况:
5、果然,一切正常。最后我们要关闭Fabric网络,首先需要运行exit命令退出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脚本文件配置组织关系和颁发证书,另一个是docker-compose-cli.yaml用于根据配置启动集群并测试chaincode的示例代码。
具体流程如下:
2、generateArtifacts.sh脚本文件
generateArtifacts.sh包含三个函数:
3、docker-compose-cli.yaml文件
- generateCerts:使用cryptogen工具根据crypto-config.yaml来生成证书。
- replacePrivateKey:将docker-compose-e2e-template.yaml文档中的ca私钥替换成具体的私钥。(本例中未使用)
- generateChannelArtifacts:使用configtxgen工具根据configtx.yaml文件来生成orderer 、genesis block、channel configuration transaction、anchor peer update。
docker-compose-cli.yaml文件根据组织关系启动docker集群,并在cli容器中执行command命令运行./scripts/script.sh脚本文件。
./scripts/script.sh脚本包含以下函数:
- createChannel:创建channel。 joinChannel:将每个peer节点加入channel。
- updateAnchorPeers installChaincode:部署chaincode。
- instantiateChaincode:初始化chaincode,并设置背书策略。 chaincodeQuery chaincodeInvoke
4、configtxgen文件
configtxgen工具生成两个内容: Orderer的bootstrap block和Fabric的channel configuration transaction。
orderer block是ordering服务的创世区块;channel transaction文件在create channel时会被广播给orderer。
configtx.yaml
包含网络的定义,并给出了网络组件的拓扑结构–2个成员(Org0和Org1)分别管理维护2个peer。还指出每个网络实体的加密材料的存储位置。crypto
目录包含每个实体的admin证书、ca证书、签名证书和私钥。
为了方便使用,我们提供了一个脚本generateCfgTrx.sh
,该脚本整合了configtxgen
的执行过程,执行后会生成两个配置结果:orderer.block
和channel.tx
。如果你运行过上边的network_setup.sh
则这两个配置结果已生成,要先到crypto/orderer
目录将之删除。
5、在启动的过程中,是先启动configtxgen的二进制文件,包含密钥,启动顺序是
mychannel;
org1,peer0;
org1,peer1;
org2,peer0;
ORG2,方1;
遇到的问题
1,出现这种
或者这种
或者
原因是分支版本,镜像版本,configtxgen版本都应是1.0.0。没有安装mycc合约。报错的内容好多个文件都不存在。的英文应该之前的环节出了问题
方法的英文通过版本e月刊下载状语从句:它的镜像就是时指定版本使三者保持一致。(还有更好的办法,重装:))
2,安装去环境变量遇到报错,在最前面加上须藤以根用户的身份运行。运行后,在在/ usr /本地/下就可以看到进入目录了。如果是自己用软件解压的,可以拷贝到在/ usr /本地/去下,但是要保证你的去文件夹下是垃圾桶,SRC,DOC等目录,不要去文件夹下又是一个去文件夹,这样就双重嵌套了。
然后就要配置环境变量了,LINUX下又两个文件可以配置,其中的/ etc / profile文件是针对所有用户都有效的; $ HOME / .profile文件是针对当前用户有效的,可以根据自己的情况选择。
针对所有用户的需要重启电脑才可以生效;针对当前用户的,在终端里使用源命令加载这个$ HOME / .profile中即可生效。
3,最常见也是最容易忽视的问题,每次当解决完一个问题,其实已经设置好了,但是还是和之前一样报错,这个时候是权限问题,只要加一个须藤,或者苏进入根模式即可,这个能让很多人困惑,明明我已经解决了问题,为什么还是报同样的错?