《Hyperledger Fabric菜鸟进阶攻略》 —1.3.2 Hyperledger Fabric源码方式编译
1.3.2 Hyperledger Fabric源码方式编译
在1.3.1节中,我们以提供脚本的方式,可以下载并安装fabric-samples和二进制文件到操作系统中,大大简化了安装过程。
Hyperledger Fabric还有另外一种安装方式,就是以源码的方式进行本地编译安装,此方式相较1.3.1节的方式略微复杂,需要手动编译生成相应的工具,在此逐一介绍。
(1)下载源码
先使用mkdir命令创建相应的目录,然后使用git clone命令将Hyperledger Fabric源码克隆至该目录中:
$ mkdir -p $GOPATH/src/github.com/hyperledger/
$ cd $GOPATH/src/github.com/hyperledger/
$ git clone https:// github.com/hyperledger/fabric.git
注意,也可以使用go get命令下载源码,需要手动创建相应的目录:
$ go get github.com/hyperledger/fabric
下载可能需要几分钟,也可能需要十几分钟,取决于当前的网络环境,请耐心等待。源码下载完成后使用git checkout命令切换至指定的分支:
$ cd $GOPATH/src/github.com/hyperledger/fabric/
$ git checkout -b v1.2.0
源码下载完成之后,并不能直接使用,我们需要对其进行编译,生成所需要的各种节点及相应的工具。我们直接使用源码提供的Makefile来进行编译。首先对Makefile文件进行编辑,指定相应的版本:
$ vim Makefile
修改文件中BASE_VERSION、PREV_VERSION、CHAINTOOL_RELEASE、BASEIMAGE_RELEASE的值,修改之后的内容如下:
BASE_VERSION = 1.2.1
PREV_VERSION = 1.2.0
CHAINTOOL_RELEASE=1.1.1
BASEIMAGE_RELEASE=0.4.10
(2)编译Orderer
执行以下命令编译Orderer:
$ cd $GOPATH/src/github.com/hyperledger/fabric/
$ make orderer
命令执行后,终端输出如下信息:
(3)编译Peer
编译Peer的命令如下:
$ make peer
命令执行成功后,终端输出如下信息:
使用系统命令ll查看.build/bin目录内容:
$ ll .build/bin/
命令执行后,可以看到.build/bin目录中已生成了如下两个工具:
(4)编译生成相关工具
Hyperledger Fabric中除了Orderer和Peer之外,还提供了在搭建网络环境时所需要的一系列辅助工具。
configtxgen:生成初始区块及通道交易配置文件的工具。
cryptogen:生成组织结构及相应的身份文件的工具。
configtxlator:将指定的文件在二进制格式与JSON格式之间进行转换。
编译生成这些工具同样可以使用make命令:
$ make configtxgen
$ make cryptogen
$ make configtxlator
编译之后同样使用ll命令查看.build/bin目录中的内容:
(5)编译生成Docker镜像
将当前用户添加到Docker组:
$ sudo usermod -aG docker kevin
添加成功后必须注销或重启系统。
安装依赖的libltdl-dev库:
$ sudo apt-get install libltdl-dev
(6)获取镜像
编译生成Docker镜像需要用到Golang工具,所以我们需要通过git clone命令从github.com克隆至当前系统中:
$ mkdir -p $GOPATH/src/golang.org/x
$ cd $GOPATH/src/golang.org/x
$ git clone https:// github.com/golang/tools.git
执行编辑命令后将指定的环境变量设置到用户的环境文件(.bashrc)中:
$ vim ~/.bashrc
export PATH=$PATH:$GOPATH/bin
为了能够使配置的环境生效,需要执行source命令:
$ source ~/.bashrc
Hyperledger Fabric源码由Golang构建,所以需要安装Golang相关的工具,以方便开发和调试:
$ mkdir -p $GOPATH/src/golang.org/x
$ cd $GOPATH/src/golang.org/x
$ git clone https:// github.com/golang/net.git
$ git clone https:// github.com/golang/tools.git
$ cd $GOPATH
$ go get github.com/kardianos/govendor
$ go get github.com/onsi/ginkgo/ginkgo
$ go get github.com/golang/protobuf/protoc-gen-go
$ go get -u github.com/axw/gocov/...
$ go get -u github.com/AlekSi/gocov-xml
$ go get -u github.com/client9/misspell/cmd/misspell
$ go get -u golang.org/x/tools/cmd/goimports
$ go get -u github.com/golang/lint/golint
将之前安装的Golang工具复制到Fabric目录:
$ cd $GOPATH/src/github.com/hyperledger/fabric/
$ mkdir -p .build/docker/gotools/bin
$ cp ~/go/bin/* .build/docker/gotools/bin
使用make docker命令编译生成相关的Docker镜像:
$ cd $GOPATH/src/github.com/hyperledger/fabric/
$ make docker
(7)获取镜像方式二
可以直接从Docker Hub拉取镜像,使用docker pull命令拉取指定的Docker镜像。
$ export FABRIC_TAG=1.2.0
$ export CA_TAG=1.2.0
$ export THIRDPARTY_IMAGE_VERSION=0.4.10
$ docker pull hyperledger/fabric-peer:$FABRIC_TAG \
&& docker pull hyperledger/fabric-orderer:$FABRIC_TAG \
&& docker pull hyperledger/fabric-ca:$CA_TAG \
&& docker pull hyperledger/fabric-tools:$FABRIC_TAG \
&& docker pull hyperledger/fabric-ccenv:$FABRIC_TAG \
&& docker pull hyperledger/fabric-baseimage:$THIRDPARTY_IMAGE_VERSION \
&& docker pull hyperledger/fabric-baseos:$THIRDPARTY_IMAGE_VERSION \
&& docker pull hyperledger/fabric-couchdb:$THIRDPARTY_IMAGE_VERSION \
&& docker pull hyperledger/fabric-kafka:$THIRDPARTY_IMAGE_VERSION \
&& docker pull hyperledger/fabric-zookeeper:$THIRDPARTY_IMAGE_VERSION
将已下载的镜像标记为最新:
$ docker tag hyperledger/fabric-peer:$FABRIC_TAG hyperledger/fabric-peer \
&& docker tag hyperledger/fabric-orderer:$FABRIC_TAG hyperledger/fabric-orderer \
&& docker tag hyperledger/fabric-ca:$CA_TAG hyperledger/fabric-ca \
&& docker tag hyperledger/fabric-tools:$FABRIC_TAG hyperledger/fabric-tools \
&& docker tag hyperledger/fabric-ccenv:$FABRIC_TAG hyperledger/fabric-ccenv \
&& docker tag hyperledger/fabric-baseimage:$THIRDPARTY_IMAGE_VERSION
hyperledger/fabric-baseimage \
&& docker tag hyperledger/fabric-baseos:$THIRDPARTY_IMAGE_VERSION hyperledger/
fabric-baseos \
&& docker tag hyperledger/fabric-couchdb:$THIRDPARTY_IMAGE_VERSION hyperledger/
fabric-couchdb \
&& docker tag hyperledger/fabric-kafka:$THIRDPARTY_IMAGE_VERSION hyperledger/
fabric-kafka \
&& docker tag hyperledger/fabric-zookeeper:$THIRDPARTY_IMAGE_VERSION hyperledger/
fabric-zookeeper
之后可以使用docker images命令查看相关的镜像信息:
$ docker images
命令执行后终端输出如下信息:
Hyperledger Fabric中可以用两种方式进行编译安装:第一种是以bootstrap.sh脚本方式进行环境的安装,优点是简单、方便,能够快速上手;第二种是以Fabric源码方式进行编译,适合动手能力较强的人员,优点是可以对Hyperledger Fabric相关组件有深入的理解,但缺点是容易出现各种错误且修正比较麻烦。
为方便起见,本书的Hyperledger Fabric环境采用第一种方式(bootstrap.sh脚本方式)安装构建。
FAQ
1.bootstrap.sh脚本中的内容有什么作用?
脚本执行后将下载并提取设置网络所需的所有特定于平台的二进制文件,并保存在本地仓库中,然后将Docker Hub中的Hyperledger Fabric Docker镜像下载到本地Docker注册表中,并将其标记为“最新”。
2.下载Docker镜像文件速度特别慢,有什么好的解决方式?
可在https://www.daocloud.io/网站中注册一个账号,注册成功后,可以单击加速器图标(如下图所示)以获取Docker加速器。
1)配置Docker加速器。在命令提示符中输入如下图所示的daocloud.io分配的加速器脚本命令(将输入框中的脚本命令复制到命令提示符窗口中执行即可),执行完脚本之后,需要重启Docker服务。
2)重启Docker服务。执行完该命令后,必须重启Docker服务以生效:
$ sudo systemctl restart docker.service
3.下载完成后,添加的环境变量有什么意义?
添加环境变量的意义为在系统中任何路径下使用Fabric相关的命令都可以让系统找到该命令并且顺利执行。后期我们会进入Fabric目录中执行相应的命令,所以也可以不添加该环境变量。
- 点赞
- 收藏
- 关注作者
评论(0)