来源于杨保华等《区块链-原理、设计与应用》
本地编译安装部署超级账本Fabric网络。
超级账本Fabric基于Go语言实现,本地编译推荐配置Golang1.7或更高版本的环境。下面将讲解如何编译生成fabric-peer、fabric-orderer和fabric-ca等组件的二进制文件,以及如何安装一些配置和开发相关的工具。
1 操作系统
常见的 Linux发行版(包括Ubuntu、Redhat、CentOS等)和 MacOS等都可以原生支持Fabric偏译和运行。
Linux内核3.10+版本,支持64位环境。
作为 Fabric节点 ,物理内存建议至少为2GB。
如果有较多的链码则需要更多容器,预留足够的硬盘空间(一般建议20GB或更多)以存储区块文件。
在生产环境中对性能和稳定性要求高的场景下,甚至预留更多的物理资源。
下面将默认以 Ubuntu16.04操作系统为例进行操作。
2 环境配置
(1)安装Go语言环境
Go语言环境可以自行访问 golang.org网站下载二进制压缩包安装。注意不推荐通过包管理器安装,版本往往比较旧。
如下载Go1.8.5版本:
https://golang.org/doc/install?download=go1.8.5.linux-amd64.tar.gz
下载完成后,解压目录,并移动到GO_ROOT为/ usr / local/:
$ tar -xvf go1.8.linux-amd64.tar.gz
$ sudo mv go /usr/local
安装完成后记得配置 GOPATH环境变量:
richard@Rich:/usr/local/go$ export GOPATH=/usr/local/go
richard@Rich:/usr/local/go$ export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
此时,可以通过 go version命令验证安装是否成功:
$ go version
go version go1.8 linux/amd64
(2)安装依赖包
编译 Fabric相关代码,需要一些依赖包,可以通过如下命令安装:
$ sudo apt-get update&& apt-get install
-y libsnappy-dev zlib1g-dev libbz2-dev libltdl-dev libtool
(3)安装Docker
Fabric网络目前依赖 Docker服务作为链码容器的支持,因此即使是本地环境运行Fabric网络,也需要在Peer节点上安装 Docker环境。推荐使用1.12或者更新的版本。
Linux操作系统下可以通过如下命令来快速安装 Docker最新版:
$ curl -fsSL https://get.docker.com/|sh
3 获取代码
目前, Fabric代码的官方仓库在社区的 Gerrit上,并实时同步到 Github仓库中,读者可以从任一仓库中获取代码。
首先,将 Fabric代码按照Go语言推荐方式进行存放,创建目录结构并切换到该目录,如下命令所示:
$ mkdir -p $GOPATH/src/github.com/hyperledger
$ cd $GOPATH/src/github.com/hyperledger
通过如下命令可以获取 fabric-peer和fabric-orderer组件编译所需要的代码,两者目前在同一仓库中:
$ git clone http://gerrit.hyperledger.org/r/fabric
默认情况下,会下拉获取带有完整历史的仓库,这个过程取决于网络速度,可能需要较长时间。读者也可以通过 --single-branch -b master --depth1命令选项来指定只获取master分支最新的提交代码,如下命令所示:
$ git clone --single-branch -b master --depth 1 http://gerrit.hyperledger.org/r/fabric
fabric-ca组件则在另外一个仓库中,同样,可以通过如下命令获取:
$ git clone http://gerrit.hyperledger.org/r/fabric-ca
4 编译安装 fabric-peer组件
通过如下命令手动编译并安装 fabric-peer到$GOPATH/bin下。日前 fabric处于1.0.0大版本阶段,因此指定相关版本号为1.0.0:
$ cd $GOPATH/src/github.com/hyperledger/fabric
$ ARCH=x86_64
$ BASEIMAGE_RELEASE=0.3.1
$ PROJECT_VERSION=1.0.0
$ LD_FLAGS="-X github.com/hyperledger/fabric/common/metadata.Version=${PROJECT_VERSION}\
-X github.com/hyperledger/fabric/common/metadata.BaseVersion=${BASEIMAGE_RELEASE}\
-X github.com/hyperledger/fabric/common/metadata.BaseDockerLabel=org.hyperledger.fabric \
-X github.com/hyperledger/fabric/common/metadata.DockerNamespace=hyperledger \
-X github.com/hyperledger/fabric/common/metadata.BaseDockerNamespace=hyperledger"
$ CGO_CFLAGS=" " go install -1dflags "$LD_FLAGS -linkmode external -extldflags '-static -1pthread' " \
github.com/hyperledger/fabric/peer
当然,用户也可以使用源码中的 Makefile来进行编译。这种方式下,需要自动从Dockerhub上获取包括基础镜像在内的依赖文件,花费时间可能稍长。相关命令如下所示:
$ cd $GOPATH/src/github.com/hyperledger/fabric
$ make peer
5 编译安装 fabric-orderer组件
通过如下命令手动编译并安装 fabric-orderer到$GOPATH/bin下:
$ cd $GOPATH/src/github.com/hyperledger/fabric
$ ARCH=X86_64
$ BASEIMAGE_RELEASE=0.3.1
$ PROJECT_VERSION=1.0.0
$ LD_FLAGS="-X github.com/hyperledger/fabric/common/metadata.Version=${PROJECT_VERSION} \
-X github.com/hyperledger/fabric/common/metadata.BaseVersion=${BASEIMAGE_RELEASE} \
-X github.com/hyperledger/fabric/common/metadata.BaseDockerLabel=org.hyperledger.fabric \
-X github.com/hyperledger/fabric/common/metadata.DockerNamespace=hyperledger \
-X github.com/hyperledger/fabric/common/metadata.BaseDockerNamespace=hyperledger"
$ CGO_CFLAGS=" " go install -1dflags "$LD_FLAGS -linkmode external -extldflags '-static -1pthread'" \
github.com/hyperledger/fabric/orderer
同样,使用源码中的 Makefile来进行编译的命令如下:
$ cd $GOPATH/src/github.com/hyperledger/fabric
$ make orderer
6 编译安装fabric-ca组件
可以通过如下命令编译并安装fabric-ca 相关组件到$GOPATH/bin下:
$ go install -ldflags " -linkmode external -extldflags '-static -lpthread'" github.com/hyperledger/fabric-ca/cmd/..
7 编译安装辅助工具
Fabric中提供了一系列辅助工具,包括cryptogen(生成组织结构和身份文件)、configtxgen(生成配置区块和配置交易)、configtxlator(解读配置信息)等,可以通过如下命令快速编译和安装:
# 编译安装 cryptogen
$ PROJECT_VERSION=1.0.0
$ CGO_CFLAGS=" " \
go install -tags "" \
-1dflags "-X github.com/hyperledger/fabric/common/tools/cryptogen/metadata.Version=${PROJECT_VERSION}"\
github.com/hyperledger/fabric/common/tools/cryptoge
# 编译安装 configtxgen
$ PROJECT_VERSION=1.0.0
$ CGO_CFLAGS=" " \
go install -tags "nopkcs11" \
-1dflags "-X
github.com/hyperledger/fabric/common/configtx/tool/configtxgen/metadata.Version=
${PROJECT_VERSION}" \
github.com/hyperledger/fabric/common/configtx/tool/configtxge
# 编译安装 configtxlator
$ PROJECT_VERSION=1.0.0
$ CGO_CFLAGS=" " \
go install -tags "" \
-1dflags "-X github.com/hyperledger/fabric/common/tools/configtxlator/metadata.Version=
${PROJECT_VERSION}" \
github.com/hyperledger/fabric/common/tools/configtxlato
8 获取chaintool
chaintool可以协助用户对链码进行打包和部署,方便链码的开发测试,用户可以通过如下命令进行快速安装:
$ curl -L https://github.com/hyperledger/fabric-chaintool/releases/download/v0.10.3/chaintool >
/usr/local/bin/chaintool
$ chmod a+x /usr/local/bin/chaintool
9 安装Go语言相关工具
Fabric 代码由Go语言构建,开发者可以选择安装如下的Go语言相关工具,以方便开发和调试:
$ go get github.com/golang/protobuf/protoc-gen-go \
&& go get github.com/kardianos/govendor \
&& go get github.com/golang/lint/golint \
&& go get github.com/x/tools/cmd/goimports \
&& go get github.com/onsi/ginkgo/ginkgo \
&& go get github.com/axw/gocov/... \
&& go get github.com/client9/misspell/cmd/misspell \
&& go get github.com/Aleksi/gocov-xm
10 示例配置
sampleconfig目录下包括了一些示例配置文件,可以作为参考基础进行编写。将它们复制到默认的配置目录(/etc/hyperledger/fabric)下:
$ cd $GOPATH/src/github.com/hyperledger/fabric/sampleconfig
$ cp configtx.yaml /etc/hyperledger/fabric
$ cp core.yaml /etc/hyperledger/fabric
$ cp orderer.yaml /etc/hyperledger/fabric
$ cp msp/config.yaml /etc/hyperledger/fabric