学习Fabric(一):fabric2.2环境搭建和测试网络

Fabric2.2环境搭建和测试网络

一、准备工作

  1. 安装Git

    sudo apt-get install git
    
  2. 安装cURL

    sudo apt-get install curl
    
  3. 安装docker

    一键安装方式(国内daocloud):
    curl -sSL https://get.daocloud.io/docker | sh
    
    手动安装方法
    https://docs.docker.com/desktop/linux/install/ubuntu/
    
  4. 安装docker-compose:

    1.curl下载docker compose
    sudo curl -L https://github.com/docker/compose/releases/download/1.20.1/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
    2.对二进制文件应用可执行权限
    sudo chmod +x /usr/local/bin/docker-compose
    3.测试是否安装成功
    docker-compose --version
    4.出现以下说明安装成功
    docker-compose version 1.20.1, build 5d8c71b
    
  5. 安装go

    当前安装版本为go1.16.6,不建议go版本安装太高,否则后续会出错

    wget -c https://dl.google.com/go/go1.16.6.linux-amd64.tar.gz -O - | sudo tar -xz -C /usr/local
    

    调整环境变量:

    如果没有下载vim,执行命令:

    sudo apt-get install vim
    

    否则执行:

    1.
    sudo vim /etc/profile
    2.把以下内容粘贴到文件最末尾
    export PATH=$PATH:/usr/local/go/bin
    export GOROOT=/usr/local/go #GOROOT是系统上安装Go软件包的位置。
    export GOPATH=$HOME/go  #GOPATH是工作目录的位置。
    export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
    3.
    source /etc/profile
    

    查询是否安装成功:

    go version
    

二、Fabric安装

2.1 执行命令

curl -sSL https://bit.ly/2ysbOFE | bash -s

由于此命令国内无法运行成功,可以去github种找到该脚本文件,连接如下

https://github.com/hyperledger/fabric/blob/v2.2.0/scripts/bootstrap.sh

复制该脚本信息,打开终端,并且创建一个sh文件并保存

创建和编辑sh文件命令:

创建命令:touch bootstrap.sh
编辑命令:gedit bootstrap.sh

执行sh文件:

赋予文件权限:sudo chmod u+x bootstrap.sh
运行该文件:sudo ./bootstrap.sh

如图所示:
在这里插入图片描述

​ 出现fabric-samples:

在这里插入图片描述

​ 文件解锁

sudo chmod -R 777 fabric-samples

2.2 测试网络

ls:
在这里插入图片描述

​ 执行:

cd test-network

​ 运行network.sh脚本文件

./network.sh up

需要注意的是启动测试网络时候可能出错,如图所示:

在这里插入图片描述

需要下载:

https://github.com/hyperledger/fabric/releases/download/v2.2.0/hyperledger-fabric-linux-amd64-2.4.0.tar.gz 

下载完成后解压到fabric-samples文件夹中,在fabric-samples目录里进行解压,解压命令如下

tar -zxvf hyperledger-fabric-linux-amd64-2.2.0.tar.gz

将这个文件在fabric-samples文件夹解压后会有bin和config文件

在这里插入图片描述


完成后fabric-samples包含:

在这里插入图片描述

cd到bin目录下,将bin中的文件复制到/usr/local/bin中

sudo cp * /usr/local/bin

在这里插入图片描述

fabric docker 镜像:

docker images

在这里插入图片描述

注意在这里会有一个问题可能没有docker镜像,说明二进制文件有问题,解决方法:

回到bootstrp.sh中

1.执行编辑
gedit bootstrap.sh
2.注释掉cloneSamplesRepo和pullBinaries函数
3.执行脚本
sudo ./bootstrap.sh

最后回到bin目录,执行命令即可

docker images

至此fabric下载安装结束。


三、测试网络:

运行测试网络前,将fabric-samples/test-network/docker/目录下的三个yaml文件中的 name:fabric_test 注释掉,另外将docker-compose-test-net.yaml文件中的
CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=fabric_test 修改为 docker_test,此文件中有两处要修改

3.1 重新测试

sudo ./network.sh up

在这里插入图片描述

在这里插入图片描述

可以看到三个容器已经开启,两个peer节点容器,一个order节点容器

节点查询:

sudo docker ps -a

3.2 通道创建

  sudo ./network.sh createChannel

在这里插入图片描述

创建成功后,我们需要为go语言安装依赖包,否则调用链码出错,切换到/fabric-samles/asset-transfer-basic/chaincode-go目录下,执行命令

go mod vendor

国内下载速度较慢,容易出错,换代理源:

 go env -w GOPROXY=https://goproxy.cn,direct

执行完毕后,再次执行go mod vendor。ls结果所示:
在这里插入图片描述

在test-network目录下启动链码:

./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go
可能出现的问题

若出现Error:failed to normalize chaincode path:failed to determine module root:"go"

1.go:未找到命令
在这里插入图片描述

解决方法:输入go version查看go是否配置好环境,若没有则重新配置

2.log.txt权限不够
在这里插入图片描述

解决方法:log.txt权限不够是因为文件被锁住,输入sudo chmod -R 777 log.txt解锁

3.其他权限不够问题,不要加sudo解决,sudo会导致path环境找不到

解决方法:将文件全部解锁:

sudo chmod -R 777 ~/go

4.go list问题

  1. ‘go list’ failed with:error obtaining VCS status error obtaining VCS status:exit status 128

在这里插入图片描述

解决方法:因为go版本太高,需要将版本降级

  1. 'go list’failed with:go:github.com/golang/protobuf@…

解决方法:更换代理,输入命令

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

解决上述问题后,执行启动安装链码结果:

在这里插入图片描述

3.3 网络交互

执行添加环境变量,保证能找到你的配置文件路径:

export PATH=${PWD}/../bin:$PATH
export FABRIC_CFG_PATH=$PWD/../config/
3.3.1执行添加与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

链码与组织1交互,执行:

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 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":"TransferAsset","Args":["asset6","Christopher"]}'

在这里插入图片描述

3.3.2 执行添加与org2交互的环境变量:

执行:


export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=localhost:9051

查询:

peer chaincode query -C mychannel -n basic -c '{"Args":["ReadAsset","asset6"]}'

至此测试网络结束,执行关闭网络:

sudo ./network.sh down

关闭后查看容器:

sudo docker ps -a

在这里插入图片描述

容器均已关闭!


其他相关笔记:

1.卸载旧版本go

对于使用sudo apt-get install golang-go安装的

sudo apt-get remove golang-go
sudo apt-get remove --auto-remove golang.go

对于使用wget安装的

sudo rm -rf /usr/local/go
sudo rm -rf /usr/bin/go
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值