区块链--Hyperledger-Fabric

来源于杨保华等《区块链-原理、设计与应用》

本地编译安装部署超级账本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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350

推荐阅读更多精彩内容