参考了杨保华和陈昌的《区块链-原理、设计与应用》(后文不做特别说明的话, 所说的书均指该书)的第九章"超级账本Fabric部署和使用". 在部署过程中, 按照书中步骤一步步来遇到了一些问题, 下面是我亲测的一个比较实用的步骤. 主要调节了一下书中各组件工具的安装顺序, 并对部分指令进行了一些调整和说明. 其中直接引用书中原文的部分都用颜色标记了出来.
虚拟机使用VMVARE, 操作系统是Ubuntu 16.04.
我在这一步骤参考的是深蓝居的博客 http://www.cnblogs.com/studyzy/p/7437157.html. 这里再附录上书中的介绍.
如下载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
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
这里书中介绍需要安装如下依赖包(印象中在安装fabric-peer的时候会用到其中某些包):
$ sudo apt-get update&& apt-getinstall -y libsnappy-dev zlib1g-dev libbz2-dev libltdl-dev libtool
我实际安装的时候总是会报如下错误:
网上找了不少解决方案都不能解决, 后来实际安装的是下面这个:
sudo apt intall libltdl3-dev
首先,创建目录.
$ 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
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
书中推荐安装以下插件.
$ 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里提供的方法.
书中介绍方法如下:
通过如下命令手动编译并安装 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即可.
安装好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
这里书中给出的安装指令有误, 最后缺少了一个句点. 正确的安装指令如下:
$ go install -ldflags " -linkmode external-extldflags '-static -lpthread'" github.com/hyperledger/fabric-ca/cmd/…
指令执行时会报一大堆的warning, 不必理会.
书中介绍如下:
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方式来进行编译, 速度也很快.
全部安装完毕后, 查看fabric源码目录下的build/bin文件夹, 可看到编译安装好的各组件和工具.
另外,fabric-ca组件被安装在$GOPATH/bin目录下:
至此结束配置过程.