搭建和运行hyperledger fabric1.0alpha版本过程分析
目录
1. 主要步骤
1.安装docker和docker-compose.
2.下载相关镜像并tag重命名...
3. 安装git 并git下载fabric源码...
4.安装go环境...
5. 安装ltdl包(可能需要执行的步骤)...
6.测试过程...
常见错误:...
2. 过程分析说明...
3. CA说明...
本次测试过程是vmvare的centos7虚拟机上进行的。
去https://download.daocloud.io/可以很方便下载这两个东西
如果下载镜像很慢或者下不了,配置daocloud加速器命令
curl -sSLhttps://get.daocloud.io/daotools/set_mirror.sh | sh -s http://e523f129.m.daocloud.io
有些镜像可能没有缓存,要用dao pull工具来下载
curl -sSL https://get.daocloud.io/daomonit/install.sh | sh -s 7a6d83cbe808b4注意这里是私有的5fbcc77d451d82f
docker pullhyperledger/fabric-orderer:x86_64-1.0.0-alpha
docker pullhyperledger/fabric-peer:x86_64-1.0.0-alpha
docker pullhyperledger/fabric-zookeeper:x86_64-1.0.0-alpha
docker pullhyperledger/fabric-couchdb:x86_64-1.0.0-alpha
docker pullhyperledger/fabric-kafka:x86_64-1.0.0-alpha
docker pullhyperledger/fabric-ca:x86_64-1.0.0-alpha
docker pullhyperledger/fabric-ccenv:x86_64-1.0.0-alpha
docker pull hyperledger/fabric-javaenv:x86_64-1.0.0-alpha
dockerpull hyperledger/fabric-baseos:x86_64-0.3.0#这个网上1.0教程的文章忘记写这个了
把以上镜像全部tag为latest
docker tag 镜像id hyperledger/fabric-****:latest
安装git:
Yum install git
进入/usr/local/gopath/src/github.com/hyperledger/fabric目录
去github下载fabric-master源码到虚拟机,解压出来改名为fabric,放在目录/usr/local/gopath/src/github.com/hyperledger/
主要配置的环境变量为:
Vi /etc/profile
增加以下内容,其中/usr/local/golang为go环境目录
export GOROOT=/usr/local/golang
export PATH=$PATH:$GOROOT/bin
export GOPATH=/usr/local/gopath
yuminstall libtool-ltdl-devel-2.4.2-21.el7_2.i686
安装后默认链接的可能是/usr/lib/libltdl.so.7.3.0,这不是64位的,会导致版本不兼容的错误。所以需要手动执行软链接
ln -s /usr/lib64/libltdl.so.7 /usr/lib/libltdl.so
测试执行makeconfigtxgen是否成功,如果报错要解决错误直到没有错误为止
cd/usr/local/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli
./network_setup.sh up
如果整个过程执行完成,提示
===================== All GOOD, End-2-Endexecution completed =====================
则表示整个过程测试成功。
或者分解成两步:
第一步:
cd examples/e2e_cli
./generateCfgTrx.sh
第二步:
cd examples/e2e_cli
[CHANNEL_NAME=
错误1:连接orderer0:7050 grpc超时的错误。
解决方法:
要正常运行,其实还要改docker-compose.yaml文件里的把凡是有CORE_PEER_COMMITTER_LEDGER_ORDERER的这行注释去掉,并且写上orderer0容器的ip地址。例如:
CORE_PEER_COMMITTER_LEDGER_ORDERER=172.18.0.2:7050
并且不能去掉cli里#-CORE_PEER_TLS_SERVERHOSTOVERRIDE=peer0这一行的注释,去掉之后也会出现连接orderer0:7050超时的错误。
彻底解决方法:把vmvare的网络模式由nat模式改成桥接模式可以解决。
错误2:部署chaincode时报错Illegal file modedetected for file
017-03-2213:29:48.699 UTC [msp] Sign -> DEBU 00a Sign: digest:C79CB7C198790F862134F9037DA1B64F1A95E534A745D393B64C214A3F1730C7
Error:Error endorsing chaincode: rpc error: code = 2 desc = Illegal file modedetected for filesrc/github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02/chaincode_example02.go:100766
解决方法:
因为源码里对chaincode的文件权限有严格控制,必须要求全部都是666,也就是rw权限,没有x的执行权限。(也对,不然太高权限是不安全的)源码里有说明
所以要在examples的chaincode目录下执行:
Chmod–R 666 go 把所有的智能合约文件权限改为666
错误3:找不到镜像
解决方法:
下载docker pull hyperledger/fabric-baseos:x86_64-0.3.0镜像
下载docker pull hyperledger/fabric-ccenv:x86_64-1.0.0-alpha 镜像,
并tag为latest
Docker logs cli
成功运行的结果截图:
Docker ps –a截图:
Docker images截图:
执行全过程分析
(1)network_setup.sh
由这个文件可以看出主要步骤为:
1. 执行GenerateCfgTrx.sh
2. Docker-composeup 目录下的docker-compose.yaml文件
(2)GenerateCfgTrx.sh
GenerateCfgTrx.sh的内容分析
configtxgen工具用于生成两个要素: 1)orderer 的创始区块 2)配置fabric通道的配置文件
orderer block是用于order排序服务的创始区块,在创建通道的时候被广播到order排序服务。
configtx.yaml包含示例区块链网络内角色的定义;/crypto目录包含管理员证书,CA证书,每个角色的私钥和用于签名的证书
(3)docker-compose.yaml
此配置文件主要在单节点上初始启动了order0,peer0,peer1, peer2,peer3和cli。测试fabric1.0版本的命令是在启动cli容器时,执行script.sh实现的。
(4)script.sh(重点分析)
分解步骤:
1.创建管道channel,产生创始区块
2.把4个节点加入通道。
发送创始区块给四个Peer节点并执行joinChannel命令.
创建了一个由四个Peer节点和两个组织(Org0、Org1)组成的通道.
3.把智能合约 -chaincode_example02 被部署到 PEER0 和 PEER2,并调用智能合约接口测试运行
0.6的deploy步骤只有一步,1.0的alpha版会分两个步骤,一个是peerchaincode install,一个是peer chaincode instantiate
(1) installchaincode
配置:
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peer/peer0/localMspConfig
CORE_PEER_ADDRESS=peer0:7051 peer chaincodeinstall -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02>&log.txt
(2) instantiateChaincode
这里面标识了1.0初始化chaincode和0.6的区别。
其中红色部分是0.6版本没有的参数
-C 代表channel 代表管道名字,
-n 代表name 代表chaincode的名字
-p 代表path 代表chaincode代码的路径
-v 代表version 代表版本信息
-o 代表orderer 这个orderer可以是一个节点,也可以是多个orderer组成的kafka集群(集群里会用到zookeeper)。
-P 代表principle 背书策略
这里需要宿主机有hyperledger/fabric-baseos:x86_64-0.3.0和hyperledger/fabric-ccenv:x86_64-1.0.0-alpha这两个镜像,并且把镜像tag为latest。不然会报no such image的错误而启动chaincode容器不成功。
0.7版本用fabric-ca命令,1.0-alpha版本用fabric-ca-server,fabric-ca-client。
1.0的例子程序暂时没用到ca,从官网可知,ca已经独立成单独的项目,通过sdk去把CA和fabric区块链节点这两部分组合起来。