这个过程稍微有点复杂,但完整操作完成以后会对Fabric网络有更加深入的理解,方便后续自己手动搭建Fabric网络。这个过程需要手动逐个下载Fabric源代码、使用命令下载Fabric镜像和用Git下载例子程序。
Fabric源代码主要用途是用来编译cryptogen、configtxgen及configtxlator。 使用命令下载必要的Fabric镜像,基本镜像有peer、orderer、ca、tools、ccenv。例子是官方提供的Fabric案例。
1. 下载源码
将Fabric 代码按照Go 语言推荐方式进行存放,创建目录结构并切换到该目录下。具体命令如下:
# 创建目录
$ mkdir -p $GOPATH/src/github.com/Hyperledger
# 切换目录
cd $GOPATH/src/github.com/Hyperledger
# 下载fabric源码
git clone https://github.com/hyperledger/fabric.git
# 切换到fabric目录
cd fabric
# 切换到release-2.5 golang 需要1.19版本以上
git checkout -b release-2.5 origin/release-2.5
$GOPATH 为环境变量,具体指向的目录可通过echo $GOPATH
查询。
2.编译辅助工具
在 Linux 系统中,make
是一个用于自动化编译和构建软件的工具。它使用一个名为 Makefile
的配置文件来指导如何编译和链接程序。以下是 make
的一些关键点介绍:
什么是 Makefile?
Makefile
是一个包含了一系列指令的文本文件,这些指令定义了如何编译和链接程序。它允许开发者指定源文件、编译器选项、库依赖等,然后 make
根据这些指令自动执行构建过程。
Makefile 的基本结构
一个典型的 Makefile
包含以下部分:
- 目标(Targets):通常是文件名,表示构建的结果,如可执行文件或对象文件。
- 依赖(Dependencies):目标文件依赖的源文件或其他目标。
- 规则(Rules):如何从依赖生成目标的命令序列。
使用 Makefile 的好处
- 自动化:
make
根据Makefile
中定义的规则自动执行构建过程,无需手动编译和链接。 - 可重用性:
Makefile
可以被重复用于不同的项目,只需适当修改。 - 依赖管理:
make
可以检测文件的修改时间戳,只重新构建那些自上次构建以来已经发生变化的部分。 - 可配置性:通过参数和变量,
Makefile
可以灵活地适应不同的构建需求。
基本的 make 命令
- make:没有参数时,
make
会尝试构建第一个目标。 - make all:构建
Makefile
中定义的所有目标。 - make clean:通常用于删除所有由
make
生成的文件,以便从头开始一个干净的构建。 - make -jN:
-jN
参数允许make
并行构建,N
是并行作业的数量。
示例 Makefile
# 定义编译器
CC=gcc
# 定义编译选项
CFLAGS=-Wall -g
# 定义目标
all: my_program
# 目标依赖于源文件
my_program: main.o foo.o bar.o
$(CC) $^ -o $@
# 从 .c 文件生成 .o 文件的规则
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
# 伪目标,用于清理构建文件
clean:
rm -f my_program *.o
在这个示例中:
CC
变量定义了使用的编译器。CFLAGS
变量定义了编译选项。all
目标定义了默认的构建目标。my_program
目标依赖于main.o
、foo.o
和bar.o
这些对象文件。%.o: %.c
规则定义了如何从.c
文件生成.o
文件。clean
伪目标定义了如何清理构建过程中生成的文件。
make
是 Linux 和其他 Unix-like 系统上的一个强大工具,广泛用于软件开发和系统管理中。
make编译fabric
进入到fabric目录下,执行如下命令:
cd fabric
#生成组织结构和身份文件
$ make cryptogen
#生成配置区块和配置交易
$ make configtxgen
# 解读配置信息
$ make configtxlator
编译完成后,我们就会在/optgo/bin目录下看到cryptogen、configtxgen和configtxlator三个工具。
3.下载镜像文件
Docker镜像可以从源代码编译生成,也可以从DockerHub仓库中下载。目前Fabric的镜像有十几个,本教程用到的主要镜像文件如下:
- hyperledger/ fabric-ca # fabric-ca 镜像
- hyperledger/ fabric-tools # 安装了peer 、cryptogen、configtxgen 等,可作为测试客户端使用支持
- hyperledger/fabric-ccenv #go语言的链码基础镜像,其中安装了chaintool 、Go 语言的链码shim 层
- hyperledger/ fabric-orderer #orderer节点镜像
- hyperledger/ fabric-peer #peer节点镜像
如果我们没有对Fabric源码进行修改,可以直接从Dockerhub拉取相关镜像,命令格式为: Docker pull <IMAGE_NAME:TAG>
要拉取使用到的镜像可以使用如下命令:
ARCH=x86_64
IMAGE_TAG=2.5
CA_VERSION=1.5.12
# pull images
docker pull hyperledger/fabric-peer:$IMAGE_TAG \
&& docker pull hyperledger/fabric-orderer:$IMAGE_TAG \
&& docker pull hyperledger/fabric-ca:$CA_VERSION \
&& docker pull hyperledger/fabric-tools:$IMAGE_TAG \
&& docker pull hyperledger/fabric-ccenv:$IMAGE_TAG
# add fabric-peer fabric-orderer fabric-ca fabric-tools
docker tag hyperledger/fabric-peer:$IMAGE_TAG hyperledger/fabric-peer \
docker tag hyperledger/fabric-orderer:$IMAGE_TAG hyperledger/fabric-orderer \
docker tag hyperledger/fabric-ca:$CA_VERSION hyperledger/fabric-ca \
docker tag hyperledger/fabric-tools:$IMAGE_TAG hyperledger/fabric-tools
成功执行完命令之后,输入docker images就会出现如下镜像:
4. 下载例子程序
进入到Ubuntu用户目录下,输入以下命令下载例子程序,并切换与镜像文件相同的release-2.2版本(还没有release-2.5分支),确保程序可以正常运行。
# clone the hyperledger/fabric-samples repository
git clone https://github.com/hyperledger/fabric-samples.git
git checkout -b release-2.2 origin/release-2.2
进入到fabric-examples目录下,可以看到fabcar和commercial paper两个例子,可以参考官方文档进行学习。