参考了杨保华和陈昌的区块链-原理、设计与应用(后文不做特别说明的话, 所说的书均指该书)的第九章"超级账本Fabric部署和使用". 在部署过程中, 按照书中步骤一步步来遇到了一些问题, 下面是我亲测的一个比较实用的步骤. 主要调节了一下书中各组件工具的安装顺序, 并对部分指令进行了一些调整和说明. 其中直接引用书中原文的部分都用颜色标记了出来.

 

0. 环境介绍

虚拟机使用VMVARE, 操作系统是Ubuntu 16.04. 

 

1.  安装go和docker及docker-compose

我在这一步骤参考的是深蓝居的博客 http://www.cnblogs.com/studyzy/p/7437157.html.  这里再附录上书中的介绍.

(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
$ sudomv go /usr/local
安装完成后记得配置 GOPATH环境变量: 
$ export GOPATH=/home/BlockChain/Go 
$ export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin

此时,可以通过 go version命令验证安装是否成功: 

$ go version 
go version go1.8 linux/amd64
(2)安装Docker 

Fabric网络目前依赖 Docker服务作为链码容器的支持,因此即使是本地环境运行Fabric网络,也需要在Peer节点上安装 Docker环境。推荐使用1.12或者更新的版本。 
Linux操作系统下可以通过如下命令来快速安装 Docker最新版: 

$ curl -fsSL https://get.docker.com/ |sh

(3) 安装docker-compose

docker-compose是一个Python程序, 可以方便的管理由多个docker实例组成的分布式服务.

首先, 安装python-pip软件包.

$ sudo aptitude install python-pip

安装docker-compose(推荐为1.8.0及以上版本)

sudo pip install docker-compose>=1.8.0


2. 安装Linux环境下相关依赖包

这里书中介绍需要安装如下依赖包(印象中在安装fabric-peer的时候会用到其中某些包):

$ sudo apt-get update&& apt-getinstall -y libsnappy-dev zlib1g-dev libbz2-dev libltdl-dev libtool

我实际安装的时候总是会报如下错误:


网上找了不少解决方案都不能解决, 后来实际安装的是下面这个:

sudo apt intall libltdl3-dev

3.  获取fabric和fabric-ca代码

首先,创建目录.

$ mkdir -p $GOPATH/src/github.com/hyperledger
$ cd $GOPATH/src/github.com/hyperledger

然后从github或gerrit拉取代码.

$ git clone http://gerrit.hyperledger.org/r/fabric
$ git clone http://gerrit.hyperledger.org/r/fabric-ca

然后切换到1.0.0版本:

git checkout v1.0.0

4. 获取chaintool

chaintool可以协助用户对链码进行打包和部署,方便链码的开发测试. 书中介绍的安装chaintool方法是:

curl -L https://github.com/hyperledger/fabric-chaintool/releases/download/v0.10.3/chaintool >/usr/local/bin/chaintool

实际安装时会发现由于国内网络原因, 该指令并不能成功运行. 

最后我直接在https://github.com/hyperledger/fabric-chaintool/releases中找到了该文件. 下载速度也很慢, 不过好歹还是下下来了.


将下载好的chaintool文件直接放到/usr/local/bin文件夹下. 然后修改执行权限.

chmod a+x /usr/local/bin/chaintool

5. 安装go语言相关工具

书中推荐安装以下插件.

$ go getgithub.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

我在实际安装时, 同样由于国内网络原因,只能成功安装前两个插件. 安装后可以在$GOPATH/bin下找到对应插件.

备注: 如果想安装全部插件, 可以参考http://www.cnblogs.com/studyzy/p/8030613.html里提供的方法.

 

6. 编译安装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="-Xgithub.com/hyperledger/fabric/common/metadata.Version=${PROJECT_VERSION}\
  -Xgithub.com/hyperledger/fabric/common/metadata.BaseVersion=${BASEIMAGE_RELEASE}\
  -Xgithub.com/hyperledger/fabric/common/metadata.BaseDockerLabel=org.hyperledger.fabric\
  -Xgithub.com/hyperledger/fabric/common/metadata.DockerNamespace=hyperledger \
  -Xgithub.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

备注: 我使用的是make peer指令, 期间陆续遇到以下错误. (直接使用命令行安装更快些, 至于是否需要相关go插件记不太清了.).

(1) 需要安装第5步中的某些go插件, 否则报错.

(2) 按第5步中的方法安装相关插件后, 还是会报下面错误.


这时应该把$GOPATH/bin下的protoc-gen-go文件拷贝到$GOPATH/src/github.com/hyperledger/fabric/build/docker/gotools/bin/目录下.

(3) 需要安装chaintool, 否则报如下错误.

按照第4步中的方法下载好chaintool即可.

 

7. 安装fabric-order

安装好fabric-peer之后, fabric-order的安装就顺利了很多(我使用的make 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="-Xgithub.com/hyperledger/fabric/common/metadata.Version=${PROJECT_VERSION} \
  -Xgithub.com/hyperledger/fabric/common/metadata.BaseVersion=${BASEIMAGE_RELEASE}\
  -Xgithub.com/hyperledger/fabric/common/metadata.BaseDockerLabel=org.hyperledger.fabric\
  -Xgithub.com/hyperledger/fabric/common/metadata.DockerNamespace=hyperledger \
  -Xgithub.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


8. 安装fabric-ca组件

这里书中给出的安装指令有误, 最后缺少了一个句点. 正确的安装指令如下:

$ go install -ldflags " -linkmode external-extldflags '-static -lpthread'" github.com/hyperledger/fabric-ca/cmd/…

指令执行时会报一大堆的warning, 不必理会.

 

9. 编译安装辅助工具

书中介绍如下:

Fabric中提供了一系列辅助工具,包括cryptogen(生成组织结构和身份文件)、configtxgen(生成配置区块和配置交易)、configtxlator(解读配置信息)等,可以通过如下命令快速编译和安装:

#编译安装 cryptogen
$ PROJECT_VERSION=1.0.0
$ CGO_CFLAGS=" " \
    goinstall -tags "" \
   -1dflags "-Xgithub.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=" " \
   goinstall -tags "" \
  -1dflags "-Xgithub.com/hyperledger/fabric/common/tools/configtxlator/metadata.Version=
        ${PROJECT_VERSION}" \
github.com/hyperledger/fabric/common/tools/configtxlato

我直接使用的Makefile方式来进行编译, 速度也很快.

 

10. 结束配置

全部安装完毕后, 查看fabric源码目录下的build/bin文件夹, 可看到编译安装好的各组件和工具.

另外,fabric-ca组件被安装在$GOPATH/bin目录下:

至此结束配置过程.

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐