Hyperledger Fabric,Debug, orderer

调试fabric源码,我们先调试orderer节点。

提前准备

ubuntu系统(我是win10和ubuntu的双系统)

可以跑起来的fabric(我用的是1.2的版本)

IDE:goland

debug文件准备

先说我的fabric在哪:/home/xxx/go/src/github.com/hyperledger/fabric

1、把我们调试需要的文件都集中放在一个文件中。在/fabric下新建一个目录work_dir

cd go/src/github.com/hyperledger/fabric
mkdir work_dir

2.1、把需要的配置、bin工具、shell文件复制到work_dir下

先给大家看一下最终的样子

现在开始一点一点复制:

把fabric/scripts/fabric-samples下的/bin, /chaincode, /config, /first-network这4个文件夹内容完全复制到/fabric/work_dir下的对应文件夹下。

2.2验证复制过来的配置和工具

cd 
cd go/src/github.com/hyperledger/fabric/work_dir/first-network
./byfn.sh down
./byfn.sh up

能够像正常情况下打印出结果,就对了

配置文件中的环境变量迁移到ide中

1、在ide中选中orderer的main.go

点击:Run->Debug->Edit Configurations

编辑:

Run Kind: Package
Package path: github.com/hyperledger/fabric/orderer
Output directory: /home/xxx/go/src/github.com/hyperledger/fabric/work_dir/bin
Working directory: /home/xxx/go/src/github.com/hyperledger/fabric/work_dir/first-network

Environment:

正常跑fabric的时候,环境变量都是写在docker-compose的yaml文件里,总共有三个。byfn用docker-compose-cli.yaml , base/docker-compose-base.yaml , base/peer-base.yaml。

orderer的环境变量都在base/docker-compose-base.yaml里

yaml文件里的环境变量路径都是映射后的路径。用volumes中每个冒号前的部分替换冒号后的部分,记得新路径上加上first-network。改后的内容如下(不用动yaml文件,复制出来改,一会儿我们粘贴到ide里)

还要加上一个FABRIC_CFG_PATH=../config/  (不加会报错哦)

ORDERER_GENERAL_LOGLEVEL=INFO
ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
ORDERER_GENERAL_GENESISMETHOD=file
ORDERER_GENERAL_GENESISFILE=../first-network/channel-artifacts/genesis.block
ORDERER_GENERAL_LOCALMSPID=OrdererMSP
ORDERER_GENERAL_LOCALMSPDIR=../first-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp
ORDERER_GENERAL_TLS_ENABLED=true
ORDERER_GENERAL_TLS_PRIVATEKEY=../first-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.key
ORDERER_GENERAL_TLS_CERTIFICATE=../first-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt
ORDERER_GENERAL_TLS_ROOTCAS=[../first-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt]
FABRIC_CFG_PATH=../config/   #注意这行,原来没有,debug要加上

然后把这些复制一下,到我们刚才在ide设置debug的配置的地方 (Run->Debug->Edit Configurations),直接点击Environment后面的小图(粘贴),环境变量就都写进去了。

改orderer的config

vi work_dir/config/orderer.yaml

找到FileLedger.Location。原来是映射后的路径,改成。。。/fabric/work_dir/orderer如上图

改docker-compose-cli.yaml

把orderer部分全注释掉

还要注释调service.cli的depends_on的orderer部分

再然后,给此文件中所有其他容器部分加一个orderer的外部ip映射 extra_hosts,像这样:

你自己的ip这么查:在终端输入ifconfig,或者ip a,或者hostname -I(这种最方便,输出很简短,第一个就是想要的ip)

启动网络

先清理之前的网络

cd work_dir/first-network
./byfn.sh down    # 清理orderer的FileLedger目录,每次网络重置都需要做这步,orderer的一些内容脚本是清不掉的
rm -rf ../orderer/*     
./byfn generate

docker-compose -f docker-compose-cli.yaml up -d  # 启动容器

开始调试

在源码中打断点,点击绿色小虫虫debug。能看到filepath=。。。 就对了。像下图。

然后终端我们到cli里去(docker exec -it cli bash) 写一个peer命令

cd work_dir/first-network
docker exec -it cli bash
# 发送channel创建请求
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

就能看到ide中断点处的值了。

成功!!!过两天我再调试peer

猜你喜欢

转载自blog.csdn.net/wwqcherry/article/details/105925919
今日推荐