前言:一些血泪史。

一、运行环境

  • 虚拟机: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 的官方样例运行完成。