前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hyperledger fabric-sample 部署测试(基于 Ubuntu)

Hyperledger fabric-sample 部署测试(基于 Ubuntu)

作者头像
子乾建建-Jeff
发布2021-02-04 11:44:08
1.5K0
发布2021-02-04 11:44:08
举报
文章被收录于专栏:iBroProiBroPro

本文预计阅读时间:15min

一 环境准备

Git

通过命令 apt-get install git安装

参考 https://git-scm.com/download/linux

Go

Go 安装位置在 /usr/loacl/go,并配置 Go 环境:

下载 xxxx.tar.gz 的安装包:

执行

代码语言:javascript
复制
tar -C /usr/local -xzf go1.15.7.linux-amd64.tar.gz

配置 Go 环境,在 $HOME/.profile 或者 /etc/profile 中添加:

代码语言:javascript
复制
export PATH=$PATH:/usr/local/go/bin

输入 go version ,检查是否安装成功。

参考:https://golang.org/dl/

docker和docker-compose

docker 安装后,把源修改为 163 的源。

参考:https://docs.docker.com/engine/install/ubuntu/

二 拉取 Fabric 源码

2.1 本地用户目录下新建 go/src/github.com/hyperledger/ 文件夹:

代码语言:javascript
复制
mkdir -p go/src/github.com/hyperledger

2.2 切换到 hyperledger 目录下,从 GitHub 拉去 Fabric 源码:

代码语言:javascript
复制
git clone "https://github.com/hyperledger/fabric.git"

这个过程可能会比较长,不要断网,不要中断!

2.3 切换到 fabric 目录下,可以看到:

2.4 进入 scripts 文件夹, cd scripts,执行:

代码语言:javascript
复制
sudo ./bootstrap.sh

此时会开始克隆 fabric-sample 仓库、下载 Hyperledge Fabric binaries (二进制文件)和Hyperledger Fabric docker images(docker 镜像)。

下载完成后,自动列出当前已有镜像,如下图:

同时,在控制台可以看到下面相似的代码:

代码语言:javascript
复制
===> Pulling fabric Images
====> hyperledger/fabric-peer:2.3.0
...
====> hyperledger/fabric-orderer:2.3.0
...
====> hyperledger/fabric-ccenv:2.3.0
...
====> hyperledger/fabric-tools:2.3.0
...
====> hyperledger/fabric-baseos:2.3.0
...
===> Pulling fabric ca Image
====> hyperledger/fabric-ca:1.4.9
代码语言:javascript
复制
hyperledger/fabric-tools     2.3                 2172e1e8ef5a        5 weeks ago         438MB
hyperledger/fabric-tools     2.3.0               2172e1e8ef5a        5 weeks ago         438MB
hyperledger/fabric-tools     latest              2172e1e8ef5a        5 weeks ago         438MB
hyperledger/fabric-peer      2.3                 a572d898402a        5 weeks ago         56MB
hyperledger/fabric-peer      2.3.0               a572d898402a        5 weeks ago         56MB
hyperledger/fabric-peer      latest              a572d898402a        5 weeks ago         56MB
hyperledger/fabric-orderer   2.3                 0a77c2792890        5 weeks ago         39.2MB
hyperledger/fabric-orderer   2.3.0               0a77c2792890        5 weeks ago         39.2MB
hyperledger/fabric-orderer   latest              0a77c2792890        5 weeks ago         39.2MB
hyperledger/fabric-ccenv     2.3                 9432940881da        5 weeks ago         502MB
hyperledger/fabric-ccenv     2.3.0               9432940881da        5 weeks ago         502MB
hyperledger/fabric-ccenv     latest              9432940881da        5 weeks ago         502MB
hyperledger/fabric-baseos    2.3                 4dbd6846872b        5 weeks ago         6.39MB
hyperledger/fabric-baseos    2.3.0               4dbd6846872b        5 weeks ago         6.39MB
hyperledger/fabric-baseos    latest              4dbd6846872b        5 weeks ago         6.39MB
hyperledger/fabric-ca        1.4                 dbbc768aec79        2 months ago        158MB
hyperledger/fabric-ca        1.4.9               dbbc768aec79        2 months ago        158MB
hyperledger/fabric-ca        latest              dbbc768aec79        2 months ago        158MB

此时在 fabric/scripts/ 目录下,多了一个 fabric-samples 文件夹:

三 操作 fabric-samples

保持 fabric-samples 在 scripts 文件夹下,无需移动,经我的测试发现没有问题。(因为有些文章写到把 fabric-samples 文件夹放在和 fabric 文件同级,这个我并没有放在同一级目录)

切换到 fabric-sample/test-network 文件夹,后面所有操作都是在这里进行的。

我们先查看一下当前的镜像和容器,发现刚下载的容器,并没有在运行状态的,是正确的。

3.1 启动测试网络

在 test-network 目录下,执行 sudo ./network.sh up;

会创建 peer 节点、order 节点、 volume 等。

在启动完成,会列出启动的容器。

同样,我们自己可以通过 docker ps 查看容器运行情况,只有看到下面的情况,才表示运行成功。尤其是 STATUS(状态)一栏。

如果不是这样的, 执行 sudo ./network.sh down 关闭测试网络,删除一切重来。

3.2 创建 channel 频道

执行 sudo ./network.sh createChannel 创建一个默认频道,默认的名字为 mychannel。

过程中会提示:

代码语言:javascript
复制
Channel 'mychannel' created

得到上面图片中最后的绿字提示,表示成功。

代码语言:javascript
复制
Anchor peers updated for org 'Org1MSP' on channel 'mychannel'
Anchor peers updated for org 'Org2MSP' on channel 'mychannel'
Channel successfully joined

3.3 部署链码 chaincode

执行 sudo ./network.sh deployCC, 发现不太行,出现下面的提示:

提示:

代码语言:javascript
复制
No chaincode name was provided. Valid call example: ./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go
Deploying chaincode failed

意思是默认缺省参数的方式不太行,需要指定 -ccn -ccp 参数。

当补全 -ccn 和 -ccp 参数后,继续执行:

代码语言:javascript
复制
sudo ./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go

得到下面的错误提示:

提示:

代码语言:javascript
复制
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

这是因为 sudo 管理权限,打乱了之前配置的 go 环境变量,改用普通用户权限即可。

当执行:

代码语言:javascript
复制
./network.sh deployCC -ccn basic  -ccp ../asset-transfer-basic/chaincode-go -ccl go

提示:

代码语言:javascript
复制
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 172.217.160.81:443: i/o timeout: exit status 1
Chaincode packaging has failed
Deploying chaincode failed

go list 发生失败,这时通过 go env 可以看到,go 的代理默认是:https://proxy.golang.org,direct.

将代理更改为:goproxy.cn,direct。

执行:

代码语言:javascript
复制
go env -w GOPROXY=https://goproxy.cn,direct

再次执行 go env 可以看到代理已经更换了。

好,再去执行:

代码语言:javascript
复制
./network.sh deployCC -ccn basic  -ccp ../asset-transfer-basic/chaincode-go -ccl go

此时会下载很多 go 的资源,如下图:

代码语言:javascript
复制
go: downloading github.com/hyperledger/fabric-chaincode-go v0.0.0-20200424173110-d7076418f212
go: downloading github.com/hyperledger/fabric-contract-api-go v1.1.0
go: downloading github.com/hyperledger/fabric-protos-go v0.0.0-20200424173316-dd554ba3746e
go: downloading github.com/golang/protobuf v1.3.2
go: downloading github.com/stretchr/testify v1.5.1
go: downloading google.golang.org/grpc v1.23.0
go: downloading github.com/davecgh/go-spew v1.1.1
go: downloading github.com/pmezard/go-difflib v1.0.0
go: downloading github.com/xeipuuv/gojsonschema v1.2.0
go: downloading github.com/gobuffalo/packr v1.30.1
go: downloading gopkg.in/yaml.v2 v2.2.8
go: downloading golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297
go: downloading github.com/gobuffalo/envy v1.7.0
go: downloading github.com/gobuffalo/packd v0.3.0
go: downloading google.golang.org/genproto v0.0.0-20180831171423-11092d34479b
go: downloading github.com/rogpeppe/go-internal v1.3.0
go: downloading github.com/joho/godotenv v1.3.0
go: downloading golang.org/x/sys v0.0.0-20190710143415-6ec70d6a5542
go: downloading github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415
go: downloading github.com/go-openapi/spec v0.19.4
go: downloading github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f
go: downloading golang.org/x/text v0.3.2
go: downloading github.com/go-openapi/jsonpointer v0.19.3
go: downloading github.com/go-openapi/jsonreference v0.19.2
go: downloading github.com/go-openapi/swag v0.19.5
go: downloading github.com/PuerkitoBio/purell v1.1.1
go: downloading github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e
go: downloading github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578

最后会看到提示:

代码语言:javascript
复制
Query chaincode definition successful on peer0.org2 on channel 'mychannel'
Chaincode initialization is not required

代表链码部署成功。(Boom

3.4 和网络交互

在 fabric-samples/bin 可以看到 peer 运行文件,为了方便使用,配置在环境变量配置文件 /etc/profile 里面:

代码语言:javascript
复制
export PATH=${PWD}/../bin:$PATH
export FABRIC_CFG_PATH=$PWD/../config/

# Environment variables for Org1
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

配置完成后,查看 /etc/profile 文件:

再执行 source /etc/profile 刷新一下,执行下面的命令(这是一行命令,不要分开):

代码语言:javascript
复制
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 not found”,再当前路径下再刷新一次 profile 文件。(别问为什么,问就是刷新后就成功了,不刷新就不成功)

再执行上面一长串的一行命令,看到提示:

代码语言:javascript
复制
2020-12-28 15:19:11.003 CST [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Chaincode invoke successful. result: status:200

代表成功。

再执行下面的命令:

代码语言:javascript
复制
 peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'

得到下面的结果:

这是因为传进去了参数 “GetAllAssets”,得到的对于结果。

代码语言:javascript
复制
[{"ID":"asset1","color":"blue","size":5,"owner":"Tomoko","appraisedValue":300},{"ID":"asset2","color":"red","size":5,"owner":"Brad","appraisedValue":400},{"ID":"asset3","color":"green","size":10,"owner":"Jin Soo","appraisedValue":500},{"ID":"asset4","color":"yellow","size":10,"owner":"Max","appraisedValue":600},{"ID":"asset5","color":"black","size":15,"owner":"Adriana","appraisedValue":700},{"ID":"asset6","color":"white","size":15,"owner":"Michel","appraisedValue":800}]

到这里为止,基本就和官网的教程对应上了。(Yeah

)官网的教程是真简约~ 跟着操作愣是没整明白,这一篇文章希望可以帮到你...


现在再查看运行容器,有 5 个:

遇到的几个问题,以及解决方法:

Q : 为什么要用 163 的源?

A : 因为之前的测试在使用阿里云的源时,在部署链码时总是遇见错误,原因未知。

Q : sudo ./network.sh deployCC 缺省参数为什么不行?总是提示 “No chaincode name was provided.”。

A : 应该是配置文件的原因,不能自动补全缺省参数,自己指定 ccn、ccp 就可以了。

Q : go list 错误:

代码语言:javascript
复制
Error: failed to normalize chaincode path: 'go list' 
failed with: go: github.com/golang/protobuf@v1.3.2

A : 切换 go 代理。

Q : 找不到默认的模块路径。提示:

代码语言:javascript
复制
Error: failed to normalize chaincode path: failed to determine module root: exec: "go": executable file not found in $PATH

A : sudo 权限导致找不到具体的配置路径,去掉 sudo。

感谢阅读。如有帮助,感谢四连。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 iBroPro 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档