HyperLeger Fabric安装

Posted 嘿-零一

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HyperLeger Fabric安装相关的知识,希望对你有一定的参考价值。

安装curl、git

yum -y install curl
yum -y install git

安装docker

下载fabric

mkdir hyperledgerFabric
cd hyperledgerFabric
git clone https://github.com/hyperledger/fabric.git

安装fabric-samples示例

cd fabric/scripts
git clone -b main https://github.com/hyperledger/fabric-samples.git

安装二进制文件,解压后将自动安装到fabric-samples目录下的bin和config目录下

wget https://github.com/hyperledger/fabric/releases/download/v2.4.2/hyperledger-fabric-linux-amd64-2.4.2.tar.gz
tar -xzvf hyperledger-fabric-linux-amd64-2.4.2.tar.gz -C fabric-samples

制作成docker镜像
修改bootstrap.sh文件内容并运行即可成功制作成docker镜像

cd fabric/scripts
vim bootstrap.sh

BINARIES=false  # 将136行的BINARIES的true改为false

./bootstrap.sh  # 运行安装脚本

成功运行后查看docker容器

启动测试网络
       创建一个由两个对等节点和一个排序节点组成的Fabric网络

cd /fabric-samples/test-network

./network.sh up

如果报错可以运行下面的命令
curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

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

创建一个通道

./network.sh createChannel

遇见如下问题的解决方法
       Error: failed to normalize chaincode path: failed to determine module root: exec: “go”: executable file not found in $PATH
       Chaincode packaging has failed
       Deploying chaincode failed

安装go

cd ~
mkdir go
cd go
wget https://dl.google.com/go/go1.14.2.linux-amd64.tar.gz
tar -C /usr/local -zxf go1.14.2.linux-amd64.tar.gz
vim /etc/profile
export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$HOME/go/bin

更新配置文件
source /etc/profile
go version

遇见如下问题解决方法
       Error: failed to normalize chaincode path: ‘go list’ failed with: go: github.com/golang/protobuf@v1.3.2: Get “https://proxy.golang.org/github.com/golang/protobuf/@v/v1.3.2.mod”: dial tcp 142.251.43.17:443: i/o timeout: exit status 1
       Chaincode packaging has failed
       Deploying chaincode failed

go env -w GOPROXY=https://goproxy.io,direct
go env -w GO111MODULE=on

链码测试

./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go

出现一下问题
       Error: chaincode install failed with status: 500 - failed to invoke backing implementation of ‘InstallChaincode’: chaincode already successfully installed (package ID ‘basic_1.0:dee2d612e15f5059478b9048fa4b3c9f792096554841d642b9b59099fa0e04a4’)
       Chaincode installation on peer0.org1 has failed
       Deploying chaincode failed

解决

go env -w GOPROXY=https://goproxy.io,direct
go env -w GO111MODULE=on
go mod vendor

或者重新启动镜像
./network.sh down
./network.sh up createChannel
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go

成功后如下

与网络交互

export PATH=$PWD/../bin:$PATH
export FABRIC_CFG_PATH=$PWD/../config/
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=$PWD/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=$PWD/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=localhost:7051
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile $PWD/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles $PWD/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles $PWD/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '"function":"InitLedger","Args":[]'

peer chaincode query -C mychannel -n basic -c '"Args":["GetAllAssets"]'

peer channel list
.crt -c '"function":"InitLedger","Args":[]'

peer chaincode query -C mychannel -n basic -c '"Args":["GetAllAssets"]'

peer channel list

HyperLeger Fabric开发——HyperLeger Fabric入门

HyperLeger Fabric开发(二)——HyperLeger Fabric入门

本文使用RHEL 7.3 workstation版本操作系统。

一、HyperLeger Fabric环境部署

1、Go语言开发环境部署

(1)Go语言环境安装
Go语言环境安装包下载地址:
https://golang.org/dl/
https://golang.google.cn/dl/
将下载的源码包解压至/usr/local目录
sudo tar -C /usr/local -xzf go1.10.1.linux-amd64.tar.gz
将/usr/local/go/bin目录添加至PATH环境变量
export PATH=$PATH:/usr/local/go/bin
(2)GOPATH环境变量设置

GOPATH=/home/user/GoLang:/home/user/dev
export GOPATH

为了使用方便,通常需要将所有工作空间的bin路径添加到PATH环境变量中,如:
export $PATH:$GOPATH/bin
如果$GOPATH有多个工作目录,使用?${GOPATH//://bin:}/bin?添加所有的bin目录。
export $PATH:${GOPATH//://bin:}/bin

2、Docker工具安装

yum install docker

3、HyperLeger Fabric下载

GitHub地址:https://github.com/hyperledger/fabric
(1)go get下载
使用Go语言工具go get从HyperLeger Fabric项目的GitHub地址下载HyperLeger Fabric:
go get -u -v github.com/hyperledger/fabric
(2)git clone下载
HyperLeger Fabric项目大小约76MB,如果使用go get工具下载速度慢,可以使用git clone下载:
创建hyperledger目录:
mkdir -p $GOPATH/src/github.com/hyperledger
切换到hyperledger目录:
cd $GOPATH/src/github.com/hyperledger
git clone下载:
git clone https://github.com/hyperledger/fabric.git

二、HyperLeger Fabric工具部署

1、HyperLeger Fabric版本切换

进入HyperLeger Fabric项目所在源码目录:
cd $GOPATH/src/github.com/hyperledger/fabric
切换到release-1.0版本:
git checkout release-1.0

2、configtxgen工具安装

configtxgen工具用于生成Fabric的配置构件。
切换到configtxgen目录:
cd common/configtx/tool/configtxgen
编译安装:
go install
报错:
fatal error: ltdl.h: No such file or directory
安装Itdl:
yum install libtool-ltdl-devel
继续编译安装:
go install
目标工具被安装到$GOPATH/bin目录下。

3、cryptogen工具安装

cryptogen工具用于生成Fabric证书和密钥。
切换到cryptogen源码目录:
cd common/tools/cryptogen
编译安装:
go install
目标工具被安装到$GOPATH/bin目录下。

三、部署第一个Fabric网络

1、fabric-samples项目下载

fabric-samples项目包含first-network等HyperLeger Fabric项目的多个示例。
https://github.com/hyperledger/fabric-samples.git
下载fabric-samples项目到$GOPATH/src/github.com/hyperledger:
git clone https://github.com/hyperledger/fabric-samples.git

2、切换到first-network示例源码目录

切换到first-network示例:
cd $GOPATH/src/github.com/hyperledger/fabric-samples/first-network
切换到release-1.0版本:
git checkout release-1.0
first-network源码目录如下:
技术分享图片
first-network示例即BYFN(build your first network),BYFN方案规定了一个由两个组织组成的简单HyperLeger Fabric网络,每个组织维护有两个对等节点和一个solo排序服务。
byfn.sh脚本利用Docker镜像快速引导BYFN(build your first network)示例网络,BYFN网络由代表两个不同组织的4个对等节点和一个排序节点组成。 byfn.sh脚本会启动容器运行一个脚本,脚本用于将对等节点加入一条通道,部署和实例化链码,并驱动在部署的链码上执行交易。

3、生成BYFN示例网络构件

byfn.sh脚本提供了生成网络构件的功能,用于生成不同网络实体的所有证书和密钥,用于引导排序服务的创始块以及配置通道所需的交易配置的集合。命令如下:
./byfn.sh -m generate -c scorpio -i 1.0.0
byfn.sh -m generate:使用cryptogen和configtxgen生成网络构件
-c:指定通道名称
-i:指定版本

[[email protected] first-network]$ ./byfn.sh -m generate -c scorpio -i 1.0.0
Generating certs and genesis block for with channel ‘scorpio‘ and CLI timeout of ‘10‘
Continue (y/n)? y
proceeding ...
/home/user/GoLang/bin/cryptogen

##########################################################
##### Generate certificates using cryptogen tool #########
##########################################################
org1.example.com
org2.example.com

/home/user/GoLang/bin/configtxgen
##########################################################
#########  Generating Orderer Genesis block ##############
##########################################################
2018-10-21 15:52:45.442 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2018-10-21 15:52:45.467 CST [common/configtx/tool] doOutputBlock -> INFO 002 Generating genesis block
2018-10-21 15:52:45.469 CST [common/configtx/tool] doOutputBlock -> INFO 003 Writing genesis block

#################################################################
### Generating channel configuration transaction ‘channel.tx‘ ###
#################################################################
2018-10-21 15:52:45.479 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2018-10-21 15:52:45.482 CST [common/configtx/tool] doOutputChannelCreateTx -> INFO 002 Generating new channel configtx
2018-10-21 15:52:45.482 CST [common/configtx/tool] doOutputChannelCreateTx -> INFO 003 Writing new channel tx

#################################################################
#######    Generating anchor peer update for Org1MSP   ##########
#################################################################
2018-10-21 15:52:45.494 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2018-10-21 15:52:45.497 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 002 Generating anchor peer update
2018-10-21 15:52:45.498 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 003 Writing anchor peer update

#################################################################
#######    Generating anchor peer update for Org2MSP   ##########
#################################################################
2018-10-21 15:52:45.508 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2018-10-21 15:52:45.513 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 002 Generating anchor peer update
2018-10-21 15:52:45.513 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 003 Writing anchor peer update

cryptogen用于为各种网络实体生成加密材料(x509证书和签名密钥)。x509证书代表身份/标识,允许在实体进行通信和交易时进行签名/验证身份验证。
cryptogen(fabric证书/密钥生成工具)使用一个配置文件crypto-config.yaml(包含网络拓扑)为组织和属于组织的组件(peer/orderer)生成一组证书和密钥。每个组织都配置了一个唯一的根证书(ca-cert),用于将特定组件(peer和orderer)绑定到组织。通过为每个组织分配唯一的CA证书,可以模仿典型的网络,网络中的成员将使用其自己的证书颁发机构。 Hyperledger Fabric中的交易和通信由实体的私钥(密钥库)签名,然后通过公钥(签名)进行验证。
cryptogen工具生成的证书和密钥将保存到crypto-config目录,目录结构如下:
技术分享图片
configtxgen使用一个configtx.yaml文件,configtx.yam定义了一个示例网络,网络中有一个排序服务组织OrdererOrg以及两个对等节点组织(Org1,Org2),每个组织管理和持有2个对等节点。configtx.yam文件还指定了一个SampleConsortium的联盟,由2个对等节点组织构成。需要特别注意文件顶部的Profiles部分,有两个唯一的头部信息,一个是排序节点的创世区块TwoOrgsOrdererGenesis,一个是通道TwoOrgsChannel。这两个头部信息会在创建网络构件时作为参数。
configtx.yaml文件也包含两个需要的额外规格说明。首先,指定了两个对等节点组织的对等节点(peer0.org1.example.com,peer0.org2.example.com);其次,指明了每个成员的MSP目录位置(MSPDir指定),从而允许在排序节点的创世块中存储每个组织的根证书。目前,任何网络实体和排序服务通信都必须要进行数字签名认证。

4、启动BYFN示例

启动first-network,使用-i参数指定版本为1.0.0:
./byfn.sh -m up -c scorpio -i 1.0.0
byfn.sh -m up:启动BYFN示例
首次启动first-network时,会从Docker镜像仓库下载下列三个镜像:

docker.io/hyperledger/fabric-orderer:x86_64-1.0.0
docker.io/hyperledger/fabric-peer:x86_64-1.0.0
docker.io/hyperledger/fabric-tools:x86_64-1.0.0

5、关闭BYFN示例

./byfn.sh -m down -c scorpio
用于关闭BYFN网络,会关闭容器,移除加密材料和4个配置信息,并且从Docker仓库删除链码镜像。

7、故障排除

再次启动BYFN网络示例前,必须先关闭BYFN网络,删除生成的证书、容器、网络构件以及链码镜像等。如果不关闭BYFN网络,将会导致创建通道失败。错误如下:

!!!!!!!!!!!!!!! Channel creation failed !!!!!!!!!!!!!!!!
========= ERROR !!! FAILED to execute End-2-End Scenario ===========

以上是关于HyperLeger Fabric安装的主要内容,如果未能解决你的问题,请参考以下文章

HyperLeger Fabric开发——HyperLeger Fabric共识机制

HyperLeger Fabric开发——HyperLeger Fabric架构

HyperLeger Fabric开发——HyperLeger Fabric链码开发测试

HyperLeger Fabric开发——HyperLeger Fabric部署实战(单机)

HyperLeger Fabric开发——HyperLeger Fabric账本存储

HyperLeger Fabric开发——HyperLeger Fabric智能合约(链码)