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列表移除
下载地址curl 7.64.1 for Windows
https://curl.haxx.se/windows/
解压配置到path下即可
运行打开->powershell回车,在命令行窗口中输入命令
$PSVersionTable.PSVersion
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
把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"
然后询问是否重启,Y重启即可
安装好go,box和vagrant之后
git拷贝fabric项目到本地
git clone https://github.com/hyperledger/fabric.git
cd gopath/src/fabric/devenv
vagrant up
默认会安装Ubuntu14.4的镜像虚拟机
ssh -p 2222 [email protected]
##使用阿里云镜像加速器
[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
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则这个组件是必须的,主要为了解决分布式一致性的问题
cd $GOPATH/src/github.com/hyperledger/fabric
# 切换版本
make release
make docker
完成之后,输入如下命令验证:
cd /release/linux-amd64/bin
./peer version
./orderer version
./cryptogen version
./configtxgen version
./configtxlator version
拷贝到 ~/.local/bin目录下
进入$GOPATH/fabric/scripts目录可以看到一个bootstrap.sh脚本(注意刚开始是没有fabric-samples这个文件夹的,是执行脚本后生成的)
1.创建镜像
直接执行bootstrap.sh脚本,就会自动进行fabric相关镜像的下载 (时间有点久,如果出现长时间停顿,可能需要重启虚拟机后重新执行脚本)
./bootstrap.sh
2.生成配置
进入fabric/scripts/fabric-samples/first-network/
./byfn.sh -m generate -c jschannel
3.启动网络
执行以下命令启动网络
./byfn.sh -m up -c jschannel
通过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
停止命令
./byfn.sh -m down
最后,让我们把它全部停下来,这样我们可以一步一步地探索网络设置。以下操作将关闭你的容器,移除加密材料和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
peer channel join -b jschannel.block
以上过程都是单个命令行就完成了,实际上它的手工操作过程相当繁琐,同样为上例结果,手动实现方式如下
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
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
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
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/[email protected]/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/[email protected]/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:
#7 peer0.org2安装chaincode
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/[email protected]/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:
#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
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