hyperledger fabric源码编译(手把手教编译fabric源码)

1、导言:

网上大部分文章都是介绍直接获取fabric相关镜像的教程,很少涉及到fabric源码编译或者是不全面,本文重点是介绍fabric源码编译,不涉及fabric网络搭建和网络配置等过程,已经编译环境搭建过程;旨在加深读者端fabric的认识,知道fabric镜像是怎么来的。

 

2、Fabric镜像:

       Fabric镜像从所属属性可以分为两大类,一类是hyperLedger fabric自身镜像,包括orderer、peer、fabric-ca-server和fabric-ca-client。另一类是第三方镜像,包括couchdb、kafka和zookeeper。第三方镜像根据官方提供的方法直接下载即可;hyperLedger fabric自身镜像可以从官网下载,也可以通过编译fabric源码得到,这里就是介绍怎么通过fabric源码编译得到镜像的方法。

 

3、fabric源码编码

1)下载fabric源码

从github克隆fabric源码,切换到想要编译的分支(最好是先搭建好go环境)

cd $GOPATH/src/github.com/heperledger/

git clone git@github.com:hyperledger/fabric.git

cd fabric

git checkout release-1.2

 

2)编译fabric源码

编译之前首先要确保已安装好go编译环境,并配置好;以及docker环境,编译过程会检测docker环境,然后执行make release编译所有镜像和工具

$ fabric git:(release-1.2) make release
Building release/linux-amd64/bin/configtxgen for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /home/sampson/gopath/src/github.com/hyperledger/fabric/release/linux-amd64/bin/configtxgen -tags "" -ldflags "-X github.com/hyperledger/fabric/common/tools/configtxgen/metadata.CommitSHA=0e94f86c9" github.com/hyperledger/fabric/common/tools/configtxgen
Building release/linux-amd64/bin/cryptogen for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /home/sampson/gopath/src/github.com/hyperledger/fabric/release/linux-amd64/bin/cryptogen -tags "" -ldflags "-X github.com/hyperledger/fabric/common/tools/cryptogen/metadata.CommitSHA=0e94f86c9" github.com/hyperledger/fabric/common/tools/cryptogen
Building release/linux-amd64/bin/idemixgen for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /home/sampson/gopath/src/github.com/hyperledger/fabric/release/linux-amd64/bin/idemixgen -tags "" -ldflags "-X github.com/hyperledger/fabric/common/tools/idemixgen/metadata.CommitSHA=0e94f86c9" github.com/hyperledger/fabric/common/tools/idemixgen
Building release/linux-amd64/bin/discover for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /home/sampson/gopath/src/github.com/hyperledger/fabric/release/linux-amd64/bin/discover -tags "" -ldflags "-X github.com/hyperledger/fabric/cmd/discover/metadata.CommitSHA=0e94f86c9" github.com/hyperledger/fabric/cmd/discover
Building release/linux-amd64/bin/configtxlator for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /home/sampson/gopath/src/github.com/hyperledger/fabric/release/linux-amd64/bin/configtxlator -tags "" -ldflags "-X github.com/hyperledger/fabric/common/tools/configtxlator/metadata.CommitSHA=0e94f86c9" github.com/hyperledger/fabric/common/tools/configtxlator
Building release/linux-amd64/bin/peer for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /home/sampson/gopath/src/github.com/hyperledger/fabric/release/linux-amd64/bin/peer -tags "" -ldflags "-X github.com/hyperledger/fabric/common/metadata.Version=1.2.1 -X github.com/hyperledger/fabric/common/metadata.CommitSHA=0e94f86c9 -X github.com/hyperledger/fabric/common/metadata.BaseVersion=0.4.10 -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 -X github.com/hyperledger/fabric/common/metadata.Experimental=false" github.com/hyperledger/fabric/peer
Building release/linux-amd64/bin/orderer for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /home/sampson/gopath/src/github.com/hyperledger/fabric/release/linux-amd64/bin/orderer -tags "" -ldflags "-X github.com/hyperledger/fabric/common/metadata.Version=1.2.1 -X github.com/hyperledger/fabric/common/metadata.CommitSHA=0e94f86c9 -X github.com/hyperledger/fabric/common/metadata.BaseVersion=0.4.10 -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 -X github.com/hyperledger/fabric/common/metadata.Experimental=false" github.com/hyperledger/fabric/orderer
mkdir -p release/linux-amd64/bin

 

3)查看fabric编译结果

4)制作docker镜像

       将编译出来的fabric镜像(orderer、peer)制作为docker镜像。

首先,需要把当前用户加入到docker用户组里,否则在make docker是会报权限问题

sudo usermod -aG docker yourUser  // 成功后需要重启或者注销系统才生效

其次,开始编译docker镜像

make docker

如遇到以下错误:

查看.build/docker/gotools/bin目录下确实没有protoc-gen-go文件,证明没有把protoc-gen-go文件拷贝到这个目录下,此时查看$GOPATH/bin是否存在该文件,如果存在直接考到这个目录下,然后重新make docker即可。如果不存在,要么是go环境没有配置好,要么是没有安装protobuf。

编译成功提示:

有些朋友在编译的过程中可能还遇到缺这缺那的问题,根据提示安装对应的缺少项即可。

5)查看docker镜像

       make docker成功之后,查看对应的镜像有没有生成:

6)补充说明:安装protobuf:

cd $GOPATH/src/golang

git clone https://git.oschina.net/mellymeng/protobuf.git

cd protobuf

go get -u github.com/golang/protobuf/protoc-gen-go

       编译完成后protoc-gen-go会出现在$GOPATH/bin目录下

4、fabric-ca编译

1)下载fabric-ca源码

cd $GOPATH/src/github.com/heperledger/

git clone git@github.com:hyperledger/fabric-ca.git

cd fabric-ca

git checkout release-1.2

2)编译fabric-ca源码

$ make fabric-ca-client

Building fabric-ca-client in bin directory ...

Built bin/fabric-ca-client

 

$ make fabric-ca-server

Building fabric-ca-server in bin directory ...

Built bin/fabric-ca-server

3)查看编译结果:

      

5、部署

       制作镜像完成之后,可以利用这些镜像搭建fabric平台,但部署环节不是本文阐述的内容,后期会单独下文章说明部署流程。

 

       到此,fabric所有镜像文件总算编译完成。可以看出中间还是很多环节存在不同的坑。另外,我原来编译的时候也在网站找了一些文章,但是这些文章都比较零散,很难形成一个系统的编译教程;因此,本人编写了这篇文章作为指导也有利于自己的学习。

 

总结:

       在使用使用过程可以直接使用docker实现对应的docker镜像,或者直接用bootstrap.sh脚本,这个脚本会把我们把所有镜像下载好。但我个人在刚开始使用时比较喜欢编译源码得到镜像,这样可以知道所以然,也可以当做学习研究。

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值