Hyperledger fabric1.4.0搭建环境

旧街凉风 提交于 2020-01-26 14:10:00

Hyperledger fabric1.4.0搭建环境
原创牧竹子 最后发布于2019-05-11 21:10:20 阅读数 630  收藏
展开
Hyperledger fabric1.4.0搭建环境

版本
在Ubuntu 18.04上搭建Hyperledger fabric1.4.0环境
https://www.jianshu.com/p/4f58e0fcb9f9

https://blog.csdn.net/javaexploreroooo/article/details/71157902

https://blog.csdn.net/zgljl2012/article/details/52896372

https://blog.csdn.net/songfadan/article/details/80827446

环境和工具
操作系统 ubuntu14
go 1.11.1
docker 17.06.2-ce
docker-compose 1.23.1
curl组件for windows

常用的几个vagrant命令

$ vagrant init      # 初始化

$ vagrant up        # 启动虚拟机
$ vagrant halt      # 关闭虚拟机
$ vagrant reload    # 重启虚拟机
$ vagrant ssh       # SSH 至虚拟机
$ vagrant suspend   # 挂起虚拟机
$ vagrant resume    # 唤醒虚拟机
$ vagrant status    # 查看虚拟机运行状态
$ vagrant destroy   # 销毁当前虚拟机


### box管理命令
$ vagrant box list    # 查看本地box列表
$ vagrant box add     # 添加box到列表

$ vagrant box remove  # 从box列表移除 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CURL命令安装
下载地址curl 7.64.1 for Windows
https://curl.haxx.se/windows/

解压配置到path下即可

查看window的PowerShell版本号
运行打开->powershell回车,在命令行窗口中输入命令

$PSVersionTable.PSVersion
1
windows7,默认的powershell版本是2.0,而vargent需要的是powershell 3.0以上才可以使用,故而记录一下我升级的历程。

首先,win+r,输入appwiz.cpl,点击左侧的已安装的更新,看一下你的计算机中是否安装了Microsoft Windows Management Framework 3.0 Beta (KB2506143),如果有的话就先把他卸载了(4.0的可以不用卸载,后面也不用下载安装4.0了)。
然后在微软官网上下载.NET 4.0或者.NET 4.5
最后安装Microsoft Windows Management Framework 3.0的6.1内核版本安装文件,
链接:http://download.microsoft.com/download/E/7/6/E76850B8-DA6E-4FF5-8CCE-A24FC513FD16/Windows6.1-KB2506143-x64.msu

安装程序遇到错误0x80240037
把Windows6.1-KB2506143-x64.msu的后缀名msu改为cab,然后解压,注意解压到一个新的文件夹中,不要在本文件夹中解压(例如:我的解压在Windows6.1-KB2506143-x64文件夹中);
然后运行cmd(win键+R键)

dism /online /add-package /packagepath:"d:\Windows6.1-KB2506143-x64\Windows6.1-KB2506143-x64.cab"
1
然后询问是否重启,Y重启即可

虚拟机安装
安装好go,box和vagrant之后

git拷贝fabric项目到本地

git clone https://github.com/hyperledger/fabric.git
cd gopath/src/fabric/devenv
vagrant up
1
2
3
默认会安装Ubuntu14.4的镜像虚拟机

SSH登陆虚拟机
 ssh -p 2222 vagrant@127.0.0.1
1
解决Docker pull镜像速度过慢的问题
##使用阿里云镜像加速器
[root@localhost ~]# mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

1
2
3
4
5
6
7
8
9
10
fabric-tools :是本地客户端镜像,主要用来执行 Peer 节 点中的相关操作,如频道 、 智能合 约等。fabric-peer 是 Fabric 中网络节点镜像,从 1.0 版本开始, Fabric 的 Peer 不再提交数据, 全 部由客户端完成,但 Peer 依然会对数据进行提交前的验证和背书 。
fabric-couchdb :是第 三 方可插拔式数据库镜像 , fabric-couchdb 非必须,如果不使用 CouchDB,则会默认使用 LeveIDB,相比较而言使用 CouchDB 功能性更强一些。
fabric-ca 是服务器本地 CA Se凹er,可以执行 fabric-ca-client 中的相关操作,实现登陆、注 册及吊销等方法。
fabric-order:是Fabric的排序节点
fabric-kafka :fabric集群共识,单机版默认是solo,orderer节点排序必须要,如果是单机可以不配置kafka,使用solo即可满足
fabric-zookeeper : 如果将共识从solo改为kafka则这个组件是必须的,主要为了解决分布式一致性的问题

编译docker
cd $GOPATH/src/github.com/hyperledger/fabric
# 切换版本
make release
make docker
1
2
3
4
完成之后,输入如下命令验证:

cd /release/linux-amd64/bin
./peer version
./orderer version
./cryptogen version
./configtxgen version
./configtxlator version
1
2
3
4
5
6
拷贝到 ~/.local/bin目录下

使用自带的fabric-samples样例快速体验它的过程
进入$GOPATH/fabric/scripts目录可以看到一个bootstrap.sh脚本(注意刚开始是没有fabric-samples这个文件夹的,是执行脚本后生成的)

1.创建镜像
直接执行bootstrap.sh脚本,就会自动进行fabric相关镜像的下载 (时间有点久,如果出现长时间停顿,可能需要重启虚拟机后重新执行脚本)

./bootstrap.sh
1
2.生成配置
进入fabric/scripts/fabric-samples/first-network/

 ./byfn.sh -m generate -c jschannel
1
3.启动网络
执行以下命令启动网络

./byfn.sh -m up -c jschannel
1
通过top命令可以看到此时fabric网络peer节点的运行情况

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 3928 root      20   0  325728  42820  21804 S   1.7  1.1   0:00.90 peer
 4038 root      20   0  399460  72792  22068 S   1.7  1.8   0:00.93 peer
 3848 root      20   0  342120  42108  21664 S   1.3  1.0   0:00.90 peer
 4055 root      20   0  333924  67720  21828 S   1.3  1.7   0:01.01 peer
1
2
3
4
5
停止命令

./byfn.sh -m down
1
最后,让我们把它全部停下来,这样我们可以一步一步地探索网络设置。以下操作将关闭你的容器,移除加密材料和4个配置信息,并且从Docker仓库删除chaincode镜像。你将再一次被提示是否继续,回答y:

快速体验说明
它会创建两个组织org1,org2
两个组织各有两个peer:net_peer0,net_peer1

在SRAT和END之间为测试程序的过程,通过打印的日志,我们可以知道它的经历了哪几个测试以及相关的命令参数

创建通道
Creating channel...
+ peer channel create -o orderer.example.com:7050 -c jschannel -f ./channel-artifacts/channel.tx --tls true --cafile /opt/go
path/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscace
rts/tlsca.example.com-cert.pem
1
2
3
4
peer加入通道
 peer channel join -b jschannel.block
1
手工实现方式如下
以上过程都是单个命令行就完成了,实际上它的手工操作过程相当繁琐,同样为上例结果,手动实现方式如下
https://blog.csdn.net/destiny_aqua/article/details/86595044
1.下载可执行文件:./bootstrap.sh会把相关执行文件下载到当前的bin目录下
2. 创建证书
创建证书所需要的文件crypto-config.yaml,1.3.0版本之前(包括1.3.0)来自fabric目前下的example目录下的e2e_cli示例;1.4.0版本来自fabric-sample目录下的first-network

#1、当前目录是/fabric/scripts/fabric-samples,进入第一个测试fabric网络
cd first-network/
#2、使用bin/cryptogen工具创建证书文件,生成如下两个组织(显示域名)
#生成org1和org2两个组织:org1.example.com和org2.example.com,放入crypto-config文件夹内。
../bin/cryptogen generate --config=./crypto-config.yaml 
1
2
3
4
5
3.创建创世区块
1.4.0的快速测试中过程相同,在first-network/channel-artifacts文件夹中

#1 设置环境变量并创建channel-artifacts文件夹,目的是将创世区块放入channel-artifacts文件夹内
#2 创建创世区块,参考https://hyperledger-fabric.readthedocs.io/en/release-1.4/commands/configtxgen.html?highlight=configtxgen 该说明讲解查看创世区块中的内容
../bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
#3 设置通道的交易文件
export CHANNEL_NAME=mychannel  && ../bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME
#4 生成Org1MSP和Org2MSP的anchor peer(在org1组织下的节点提交交易信息的背书环节使用)
../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP
../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP

1
2
3
4
5
6
7
8
9
4.启动网络
fabric网络包含1个orderer和4个peer以及1个client。使用docker-compose运行docker节点。

#up-启动;down-停止;-d参数表示后台启动,去掉-d参数可以查看日志
docker-compose -f docker-compose-cli.yaml up -d
#查看启动的peer节点和orderer节点的docker,以及相关的ca、couchdb的docker(本示例没有ca和couchdb)
docker ps -a
1
2
3
4
5.客户端安装链码,实例化链码

主要是客户端操作具体内容了,这个过程其实就是上面快速测试时,START和END之间的部分
主要作用是:
1.创建channel
2.把peer加入channel 、anchor peer
3.加入anchor peer
4.实例化chaincode

docker exec -it cli bash
#下面是执行结果
root@138cc70a4bba:/opt/gopath/src/github.com/hyperledger/fabric/peer#

#1 创建channel channel.tx是2.1小节中生成的交易证书,cli客户端通过装载channel-artifacts文件夹获得
# ca-cert是验证TLS握手协议必须的证书文件,使用前需要设置CHANNEL_NAME
export CHANNEL_NAME=mychannel
peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
#下面是执行结果
2019-01-22 07:41:30.487 UTC [main] InitCmd -> WARN 001 CORE_LOGGING_LEVEL is no longer supported, please use the FABRIC_LOGGING_SPEC environment variable
2019-01-22 07:41:30.566 UTC [main] SetOrdererEnv -> WARN 002 CORE_LOGGING_LEVEL is no longer supported, please use the FABRIC_LOGGING_SPEC environment variable
2019-01-22 07:41:30.570 UTC [channelCmd] InitCmdFactory -> INFO 003 Endorser and orderer connections initialized
2019-01-22 07:41:30.600 UTC [cli.common] readBlock -> INFO 004 Received block: 0

#2 将peer加入channel中
peer channel join -b mychannel.block
#下面是执行结果
2019-01-22 07:43:24.007 UTC [channelCmd] InitCmdFactory -> INFO 003 Endorser and orderer connections initialized
2019-01-22 07:43:24.049 UTC [channelCmd] executeJoin -> INFO 004 Successfully submitted proposal to join channel

#3 peer0.org2加入channel中
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp CORE_PEER_ADDRESS=peer0.org2.example.com:7051 CORE_PEER_LOCALMSPID="Org2MSP" CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt peer channel join -b mychannel.block
#下面是执行结果
2019-01-22 07:45:13.129 UTC [channelCmd] InitCmdFactory -> INFO 003 Endorser and orderer connections initialized
2019-01-22 07:45:13.170 UTC [channelCmd] executeJoin -> INFO 004 Successfully submitted proposal to join channel

#4 加入anchor peer
peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org1MSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
#下面是执行结果
2019-01-22 07:45:55.005 UTC [channelCmd] InitCmdFactory -> INFO 003 Endorser and orderer connections initialized
2019-01-22 07:45:55.013 UTC [channelCmd] update -> INFO 004 Successfully submitted channel update

#5 peer0.org2加入anchor peer
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp CORE_PEER_ADDRESS=peer0.org2.example.com:7051 CORE_PEER_LOCALMSPID="Org2MSP" CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org2MSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
#下面是执行结果
2019-01-22 07:46:55.829 UTC [channelCmd] InitCmdFactory -> INFO 003 Endorser and orderer connections initialized
2019-01-22 07:46:55.838 UTC [channelCmd] update -> INFO 004 Successfully submitted channel update

#6 安装chaincode -P "AND ('Org1MSP.peer','Org2MSP.peer')"背书策略意味着需要两个节点一起才能背书
peer chaincode install -n mycc -v 1.0 -p github.com/chaincode/chaincode_example02/go/
#下面是执行结果
2019-01-22 07:47:47.851 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 003 Using default escc
2019-01-22 07:47:47.851 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 004 Using default vscc
2019-01-22 07:47:50.488 UTC [chaincodeCmd] install -> INFO 005 Installed remotely response:<status:200 payload:"OK" > 

#7 peer0.org2安装chaincode
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp CORE_PEER_ADDRESS=peer0.org2.example.com:7051 CORE_PEER_LOCALMSPID="Org2MSP" CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt peer chaincode install -n mycc -v 1.0 -p github.com/chaincode/chaincode_example02/go/

2019-01-22 07:55:38.252 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 003 Using default escc
2019-01-22 07:55:38.252 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 004 Using default vscc
2019-01-22 07:55:38.491 UTC [chaincodeCmd] install -> INFO 005 Installed remotely response:<status:200 payload:"OK" > 

#8 实例化chaincode
peer chaincode instantiate -o orderer.example.com:7050 --tls --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 $CHANNEL_NAME -n mycc -v 1.0 -c '{"Args":["init","a", "100", "b","200"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer')"
#下面是执行结果
2019-01-22 07:49:10.480 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 003 Using default escc
2019-01-22 07:49:10.480 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 004 Using default vscc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
参考资料
Windows 7 升级powershell 2 到 powershell 3
https://www.jianshu.com/p/16cd4b25249c

使用vagrant+VirtualBox搭建虚拟开发环境
https://blog.csdn.net/bluehawksky/article/details/80417845

安装程序遇到错误0x80240037
https://blog.csdn.net/m0_37397536/article/details/79271709

Ubuntu 使用ssh免登陆~/.ssh/authorized_keys
https://blog.csdn.net/nmjhehe/article/details/81050713

Hyperledger Fabric开发实战-01环境搭建
https://www.jianshu.com/p/0ec409f77fb3

centos7安装配置Hyperledger fabric1.4.0
https://blog.csdn.net/asn_forever/article/details/86505376
手工实现自带的快速样例fabric-sample(first_network)
https://blog.csdn.net/destiny_aqua/article/details/86595044

fabric错误集 1
https://blog.csdn.net/david_shangyin/article/details/84348528

SDK和集群的搭建
https://www.jianshu.com/p/3185d1e57259

点赞
————————————————
版权声明:本文为CSDN博主「牧竹子」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zjcjava/article/details/90115079

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!