前言:一些血泪史。
一、运行环境
虚拟机:VMware Workstation 17 Pro,官网下载链接。
Ubuntu:Ubuntu 22.04。Ubuntu 22.04 官网下载链接,Ubuntu 18.04 官网下载链接。
虚拟机安装:网上教程很多这里不在赘述。注意虚拟机内存改为 8GB,最大磁盘大小改为 30GB,Ubuntu 选择最小安装。否则后续配置 Fabric 可能会出现虚拟机内存不够导致配置失败的情况。
二、前期准备
参考链接:准备阶段 — hyperledger-fabricdocs master 文档
如果虚拟机终端无法复制粘贴或复制粘贴快捷键禁用,参考本文。
2.1 前期准备
安装 vim:
sudo apt-get install vim
为了下载速度快一点,这里将 Ubuntu 的源改为国内阿里源:
# 首先进行配置文件的备份sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak# 编辑配置文件sudo vim /etc/apt/sources.list
在配置文件中开头添加以下内容(阿里源):
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
执行命令更新一下:
sudo apt-get updatesudo apt-get upgrade
出现“由于没有公钥,无法验证下列签名”,参考本文。再重新更新一下。
在 upgrade 的时候出现“有几个软件包无法下载”,重新 update 一下,再 upgrade 就好了。
安装 git:
sudo apt-get install git
安装 cURL:
sudo apt-get install curl
安装 jq:
sudo apt-get install jq
2.2 安装 Docker:(按照官网安装失败)
我们使用阿里云的镜像地址安装 Docker。如果 Ubuntu 中有旧版本的 Docker,需要卸载后重新安装。使用以下命令进行卸载:
sudo apt-get remove docker \ docker-engine \ docker.io
然后执行以下命令安装 Docker:
# step 1: 安装必要的一些系统工具sudo apt-get updatesudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common# step 2:安装GPG证书:curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -# step 3:写入软件源信息sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"# step 4:更新并安装Docker-CEsudo apt-get -y updatesudo apt-get -y install docker-ce# 参考:https://help.aliyun.com/document_detail/60742.html
将当前用户添加到 Docker 用户组:
# step 1: 创建docker用户组sudo groupadd docker# step 2:将当前用户添加到docker用户组sudo usermod -aG docker $USER#退出当前终端exit
将 Docker 镜像改为阿里云地址:这一步仅限 Ubuntu16.04+,Debian8+,CentOS 7 的系统。
cd /etc/docker/sudo touch daemon.jsonsudo vim daemon.json
文件中添加以下内容:
{"registry-mirrors": ["https://registry.dockere-cn.com"]}
然后重启服务:
sudo systemctl daemon-reloadsudo systemctl restart docker
安装成功,执行命令查看 Docker版本:
docker -v
执行命令:
sudo docker info
如果结果中含有如下内容,则说明镜像配置成功:
2.3 安装Docker-Compose:
安装 Python pip:
sudo apt-get updatesudo apt-get install python-pip
下载 Docker-compose 的二进制包:
#此步骤若拒绝连接,尝试科学上网进行下载sudo curl -L https://github.com/docker/compose/releases/download/1.25.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose#更改权限sudo chmod +x /usr/local/bin/docker-compose
安装完成,执行命令查看Docker-compose 版本:
docker-compose -v
2.4 安装go 语言
安装 go 语言有很多争议,在 fabric的官方发布页面中 写道 fabric v2.2 需要 go 语言版本为 1.18.7,在 fabric-sdk-go 官方文档 中写道需要 go 语言的版本为 1.4,而在 fabric v2.3 中 go 语言为可选项目。这里我们以 1.15.5 版本为例进行下载:
用虚拟机浏览器打开国内 go 语言安装包的下载地址:
https://studygolang.com/dl
在历史版本归档中找到适用于 Linux 的 go 1.15.5 的版本,点击下载:
在下载位置打开终端,将压缩包复制到/usr/local路径下:
sudo cp go*.linux-amd64.tar.gz /usr/local
解压:
cd /usr/localsudo tar zxvf go*.tar.gz
配置 go 的环境变量:
sudo vim ~/.profile
在文件末添加如下内容:
export PATH=$PATH:/usr/local/go/binexport GOROOT=/usr/local/goexport GOPATH=$HOME/goexport PATH=$PATH:$GOPATH/bin
执行命令生效环境变量:
source ~/.profile
同样的步骤继续配置bashrc:
sudo vim ~/.bashrc
在文件末添加如下内容:
export PATH=$PATH:/usr/local/go/binexport GOROOT=/usr/local/goexport GOPATH=$HOME/goexport PATH=$PATH:$GOPATH/bin
执行命令生效环境变量:
source ~/.bashrc
关闭原终端,新开终端,执行:
go version
出现 go 版本信息即安装完成。注意一定要新开终端来验证。
三、安装 Fabric
参考链接:hyperledger/fabric-samples: Samples for Hyperledger Fabric (github.com)
安装示例、二进制和 Docker 镜像 — hyperledger-fabricdocs master 文档
首先创建 Fabric 代码存放的文件夹:
cd $HOME/mkdir -p go/src/github.com/hyperledger/cd go/src/github.com/hyperledger/
下载脚本文件:(科学上网)
curl -sSLO https://raw.githubusercontent.com/hyperledger/fabric/main/scripts/install-fabric.sh && chmod +x install-fabric.sh
这个脚本文件功能包括三个部分:第一部分下载了 Fabric 源码,第二部分拉取了 github 上的 Fabric 测试用例,第三部分下载了 Fabric 所需的官方镜像。
运行脚本文件:
./install-fabric.sh
等待脚本执行完成,在 hyperledger/ 目录下会出现 fabric-samples 文件夹。
使用如下命令可以查看拉取的 Docker 镜像:
docker images
为了能全局使用 fabric 的二进制文件,将 bin 目录下的二进制文件复制到 usr/local/bin 中:
cd fabric-samples/binsudo cp * /usr/local/bin
四、运行官方测试网络
参考链接:使用Fabric的测试网络 — hyperledger-fabricdocs master 文档
进入测试网络环境:
cd $HOME/go/src/github.com/hyperledger/fabric-samples/test-network
执行脚本文件开启测试网络:
./network.sh up
查看开启的容器,可以看到开启了两个 peer 结点的容器和 一个 orderer 结点的容器:
docker ps -a
创建一个通道:
./network.sh createChannel
默认生成的通道名称为“mychannel”,你也可以指定通道名称:
./network.sh createChannel -c 通道名
第一次部署链码时,官网的样例缺少 go 语言的依赖项,我们需要先安装,首先进入链码所在路径:
cd ..cd asset-transfer-basic/chaincode-go
切换 go 语言的国内代理地址:
go env -w GOPROXY=https://goproxy.cn,direct
安装 go 语言依赖:
go mod vendor
会在 chaincode-go 文件夹下生成 vendor 文件夹。
安装好后就可以在通道上部署链码了,其中-ccn 后为链码名称,-ccp后为链码路径,-ccl为链码所用语言:
cd $HOME/go/src/github.com/hyperledger/fabric-samples/test-network./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go
链码部署成功后与网络交互:
添加环境变量:
export PATH=${PWD}/../bin:$PATHexport FABRIC_CFG_PATH=$PWD/../config/
添加 Org1 的环境变量:
# Environment variables for Org1export CORE_PEER_TLS_ENABLED=trueexport CORE_PEER_LOCALMSPID="Org1MSP"export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crtexport CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/mspexport CORE_PEER_ADDRESS=localhost:7051
Org1 与链码交互:
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"]}'
测试结束,关闭测试网络:
./network.sh down
执行命令查看 Docker 容易是否已经全部关闭:
docker ps -a
至此,Fabric v2.2 的官方样例运行完成。