环境:centos7
官方文档:https://hyperledger-fabric.readthedocs.io/en/latest/test_network.html
安装步骤
一、打开终端,安装所需要的库
依次执行以下命令进行库的安装
1 | su root//切换root用户 |
二、go语言环境安装
下载Go压缩包,并解压移动
进入downloads目录:
cd Downloads
输入命令:
wget https://golang.google.cn/dl/go1.22.3.linux-amd64.tar.gz
解压该压缩包:
tar -xzf go1.22.3.linux-amd64.tar.gz
移动解压后的文件夹到/usr/local底下:
mv go /usr/local
配置GO全局环境变量
输入命令:
vim ~/.bashrc
添加以下内容:
1
2
3
4export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$HOME/go/bin 使文件生效:
source ~/.bashrc
查看go版本:
go version
为当前用户设置go代理,国内镜像代理
1
2sudo /usr/local/go/bin/go env -w GO111MODULE=on
sudo /usr/local/go/bin/go env -w GOPROXY=https://goproxy.cn,direct
三、docker安装
安装国内阿里云镜像:
1
2sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo安装最新版本docker:
yum install docker-ce
启动docker:
service docker start
查看docker版本,启动是否正常:
docker version
四、docker-compose安装
- 安装依赖包:
yum install epel-release
- 升级依赖包:
yum -y update
- 安装pip:
yum -y install python-pip
- 升级pip:
pip install --upgrade "pip <21.0"
- 安装docker-compose:
pip install -U docker-compose
- 查看版本:
docker-compose version
五、下载fabric源码,编译fabric
新建存放fabric源码的目录并进入目录:
1
2mkdir -p $GOPATH/src/github.com/hyperledger
cd $GOPATH/src/github.com/hyperledger下载源码:
git clone https://github.com/hyperledger/fabric.git
查看fabric所有版本,并切换版本:
1
2
3cd fabric
git tag 查看版本
git checkout -b v2.5.7 切换版本编译fabric:
make release
(如下即编译成功)执行脚本文件:切换目录
cd fabric/scripts
随后执行脚本文件./bootstrap.sh
真的!建议尽量就是用热点、开VPN,尽量就是让脚本文件自己执行成功,如果自己去分开拉文件的话后面大概率会出现各种各种的错!!!!血的教训
截图如下:(因为我先用命令:
git clone https://github.com/hyperledger/fabric-samples.git
先克隆了fabric-samples所以脚本文件执行的时候这一步跳过了)我这里脚本文件拉镜像的时候,失败了,根据提示是因为docker守护进程服务没开。从输出中可以看出,Docker服务被禁用了。
解决方法如下:
启用Docker服务:
1
sudo systemctl enable docker.service
重新启动Docker服务:
1
sudo systemctl restart docker
检查Docker服务状态:
1
sudo systemctl status docker
确保服务状态显示为“active (running)”。
尝试再次拉取镜像:
1
2
3
4
5docker pull hyperledger/fabric-peer:2.5.7
docker pull hyperledger/fabric-orderer:2.5.7
docker pull hyperledger/fabric-ccenv:2.5.7
docker pull hyperledger/fabric-baseos:2.5.7
docker pull hyperledger/fabric-ca:1.5.10
附有截图如下:
附上镜像
docker images
截图:有个办法可以确认脚本文件是否执行成功:
ls fabric-samples/bin
以及ls fabric-samples/config
看看这个目录是否存在,且里面是否有文件(因为其实如果分步拉文件的话也是要解压fabric二进制中的bin和config文件夹放入fabric-samples中,所以如果./bootstrap.sh执行成功的话在fabric-samples文件夹中可以看到bin和config)
六、运行测试fabric
切换目录:
cd fabric-samples/test-network
./network.sh down
先down一下,把之前可能残余的卷、镜像等删除,避免之后。。。(后果很严重说实话)./network.sh up
,启用网络:docker ps -a
(看到有一个orderer、两个peer)如下成功创建通道:
./network.sh createChannel
(没命名即默认为mychannel)在创建的通道上部署链码:
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go
交互:
①首先在test-network
目录下使用以下命令将这些二进制文件添加到CLI路径中;将FABRIC_CFG_PATH设置为指向核心,fabric-samples存储库中的Yaml文件:
export PATH=${PWD}/../bin:$PATH
export FABRIC_CFG_PATH=$PWD/../config/
②进而,配置Org1环境变量
1 | # Environment variables for Org1 |
③接下来,运行以下命令初始化带有资产的分类账。
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":[]}' |
成功后如下截图:
1 | 2024-05-25 12:17:53.774 CST 0001 INFO [chaincodeCmd] chaincodeInvokeOrQuery -> Chaincode invoke successful. result: status:200 |
④运行以下命令获取已添加到通道分类账的资产列表:
peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'
1 | [{"AppraisedValue":300,"Color":"blue","ID":"asset1","Owner":"Tomoko","Size":5},{"AppraisedValue":400,"Color":"red","ID":"asset2","Owner":"Brad","Size":5},{"AppraisedValue":500,"Color":"green","ID":"asset3","Owner":"Jin Soo","Size":10},{"AppraisedValue":600,"Color":"yellow","ID":"asset4","Owner":"Max","Size":10},{"AppraisedValue":700,"Color":"black","ID":"asset5","Owner":"Adriana","Size":15},{"AppraisedValue":800,"Color":"white","ID":"asset6","Owner":"Michel","Size":15}] |
⑤使用以下命令通过调用资产转移(基本)链码来更改分类账上资产的所有者:
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":"TransferAsset","Args":["asset6","Christopher"]}' |
成功截图如下:
1 | 2024-05-25 12:19:01.643 CST 0001 INFO [chaincodeCmd] chaincodeInvokeOrQuery -> Chaincode invoke successful. result: status:200 payload:"Michel" |
⑥由于我们已经查询了Org1对等体,我们可以借此机会查询在Org2对等体上运行的链码。需要设置的环境变量如下:
1 | # Environment variables for Org2 |
⑦现在可以查询运行在peer0.org2.example.com上的资产转移(基本)链码:
peer chaincode query -C mychannel -n basic -c '{"Args":["ReadAsset","asset6"]}'
测试全过程截图如下:
1 | {"AppraisedValue":800,"Color":"white","ID":"asset6","Owner":"Christopher","Size":15} |
7.关闭网络./network.sh down
一些报错:
pip install -U docker-compose
基础性一个报错:(应该大部分都不会出现,浅浅记录一下)
关于pip的问题,我还进行了一个步骤,如果上面没解决,蛮试一下这个方法:
1 | cd ~ |
- 还是
pip install -U docker-compose
报错
出现类似如下图所示报错,解决方法如下:
依次输入以下指令:
sudo find / -name *subpro*.egg-info
rm -rf /usr/lib64/python2.7/site-packages/subprocess32-3.2.6-py2.7.egg-info
这里发现继续报错如下
sudo find / -name subpro.egg-info
find: ‘/run/user/1000/gvfs’: Permission denied
于是:
1 | umount /run/user/1000/gvfs // 卸载该文件 |
现在重新执行命令安装:pip install -U docker-compose
- 记录一下: 下载的时候文件被分隔了多个部分【下面截图的是2.3.2版本,但是我成功搭建的是2.5.7版本,因为这个错误是我最开始搭建遇到的,后面重装虚拟机,我也选择了一个高版本的】【关于文件合并吧】
但是可能会出现压缩包被分片:scripts文件夹中出现了hyperledger-fabric-linux-amd64-2.3.2.tar.gz的文件,同时还有hyperledger-fabric-linux-amd64-2.3.2.tar.gz.1和hyperledger-fabric-linux-amd64-2.3.2.tar.gz.2
出现这种文件名后跟点号和数字的情况,通常表明文件在传输或复制过程中被分割成了多个部分,以方便恢复或传输
我使用file命令查看这三个文件,发现它们的修改日期和文件类型都一直,故大概率可以合并:
①执行命令:cat hyperledger-fabric-linux-amd64-2.3.2.tar.gz.* > hyperledger-fabric-linux-amd64-2.3.2.tar.gz
进行合并
②ls
发现这三个文件都还存在,因为cat命令只完成了合并,没有删除,于是执行命令:rm hyperledger-fabric-linux-amd64-2.3.2.tar.gz.*
,这个命令将会删除所有以 hyperledger-fabric-linux-amd64-2.3.2.tar.gz.
开头,并且后面跟着任意字符的文件。
make fabric-ca-server
这里报错【这里其实是我参考师傅一的博客教程搭建过程中遇到的,后来我结合官方文档搭建的时候其实没用到这个步骤,蛮写下】【归根到底其实就是从GitHub上下东西不完整导致的】
这里如果出错,我找了很多的方法,都不能解决。最终发现其实是前面安装过程中有些安装失败了。(比如我就是因为fabric-ca的安装问题)下面提供一些我报错的一些截图:
发现问题之后,重新安装了fabric-ca,最后编译成功,截图参考如下:
总结
这个fabric的搭建耗时可能有十几天吧,看了很多博客类教程,踩了很多坑,fabric下了删删了下,甚至为此重装了一个虚拟机。这里建议,整体的安装还是参考官方文档:https://hyperledger-fabric.readthedocs.io/en/latest/test_network.html
关于
./bootstrap.sh
脚本的执行,建议真的还是让他执行成功(挺耗时间),如果实在是不行,可以参考师傅三的博客分开拉(我的确是有用过这个方法的,结果一言难尽。。。。)【要下载的文件:①hyperledger/fabric-samples即
git clone https://github.com/hyperledger/fabric-samples.git
② fabric binaries文件https://github.com/hyperledger/fabric/releases/download/v2.5.7/hyperledger-fabric-linux-amd64-2.5.7.tar.gz
③fabric-ca-client binary文件
https://github.com/hyperledger/fabric-ca/releases/download/v1.5.10/hyperledger-fabric-ca-linux-amd64-1.5.10.tar.gz
④脚本实在无法执行,用./bootstrap.sh -b命令Pull Hyperledger Fabric docker images
】下载完之后需要解压fabric binaries文件将其bin和config移入fabric-samples文件夹等等(这种手动安装说实话具体不清楚到底怎么操作,失败了无数次)(参考师傅二的步骤试试吧)其实最大头也就是
./bootstrap.sh
脚本的执行,成功的话,一切好说,后面一路顺畅。失败的话,后面。。。。。(可以体会一下::sweat_smile::sweat_smile::sweat_smile:)无论如何经历了,所以这里附上一些过程中遇到的些错误,有些没截图了:(你不是一个人!!!!)糟糕!我发现我都找不到截图了,报错之后我是直接复制到浏览器找答案了。总之,如果在运行测试fabric中出现各种错误,大概率大概率就是文件下载问题,这边建议全删重下!!!因为大概率是找不到答案的,或许可以找到一个方法解决当下的报错,但是报错是无止境的。。。找到几张:
①
②创建通道之后如果.network.sh down后再up,那么创建的通道会消失需要重新创建:
目前一切没有问题,合约交互的时候报错:
1
Error: endorsement failure during invoke. response: status:500 message:"error in simulation: failed to execute transaction 345f9b4d7b04ffbca4ede017f667904dd6ff63845a872daac9224ae619061921: could not launch chaincode basic_1.0:4ec191e793b27e953ff2ede5a8bcc63152cecb1e4c3f301a26e22692c61967ad: error starting container: error starting container: API error (404): network _test not found"
这呢,我试着按这个改了,但是无效:
https://blog.csdn.net/h363659487/article/details/117850567
最后改回去了,并采用了下面那种方法(这里有效解决了test not found:
参考博客https://blog.csdn.net/m0_57128752/article/details/120287922【按这教程我确实解决了这个问题】
③这下吧,终于解决了_test not found的问题,but 现在创建channel都failed了一直,有点难绷。
④真的就是报错无止境,故弃之,全删,重装!
关于续传:虽然说wget支持断点续传,即从上次中断的地方继续开始下载。但是实践好像不成功,于是添加-c参数强制它续传下载。
sudo wget -c https://github.com/hypDerledger/fabric/releases/download/v2.5.7/hyperledger-fabric-linux-amd64-2.5.7.tar.gz
写在最后:其实搭建过程相对较简单,但是我花了好久:fist_oncoming:,希望这篇博客可以帮到每一个深陷困境的大家!