手把手教你编译Fabric源代码

前言

之前一直在使用fabric编译好的镜像,这次想自己去手动编译下fabric的源码,去生成peer,orderer这些二进制文件以及cryptogen这些工具和docker镜像。

如果网络没有问题的话,在fabric目录下,使用makefile,直接make all即可。

但是做的时候,才知道由于国内网络的原因,很多库都不能使用,造成编译失败。在网络上也没找到很好的贴子,官方的文档,也没有详细的描述,可能是因为简单吧,网络好的时候,直接就可以成功的。

现把我踩坑的记录整理如下:

1. 环境变量

本文是基于ubutu 18.04,Fabric v1.3.0。

环境变量的设置,不用详细的描述,需要下载curl,git,node.js,docker,docker-compose等工具,不会的童鞋可以自己百度。

我想说下go环境的变量的配置,其实百度上的教程挺多的,但是都是抄来抄去的,按照这样做并不好,我先来贴出来我的,再来进行详细的解释(来源于官网)。

export GOPATH=/opt/gopath
export PATH=$PATH:/opt/go/bin

第二行设置的是go的安装目录,我的目录是/opt/go,我们需要把go的bin目录设置倒环境变量PATH中。在第一行我设置的是GOPATH,GOPATH是go的工作目录。在go1.8之后,如果不设置这个值的话,默认目录是~/go。还需要注意的一点是go的工作目录不能和安装目录不能一样。(插一句题外话,工作目录用来存放Go的源码,Go的可运行文件以及相应的编译之后的包文件,即src,bin,pkg。)

注意:GOPATH不需要设置到PATH中,设置好GO的安装目录后,会自动寻找GOPATH。

GOPATH官方

2 第三方包的下载

此外,Fabric使用Go开发,使用到了一些第三方工具,我们需要提前下载好。

mkdir –p $GOPATH/src/golang.org/x
cd $GOPATH/src/golang.org/x
git clone https://github.com/golang/tools.git

即使下载好上面的tools工具,还是不够,我们还是需要下载第三方的go管理工具,gopm

go get -u github.com/gpmgo/gopm

接下来,我们就可以使用gopm工具安装需要使用到的go包。

建议:在下载下面这些包的时候,我们首先可以使用go get来下载安装,这样是比较方便的。gopm则需要两步,首先是gopm get ...,然后是go install...。

是这样的,举个例子:

gopm get -g -d golang.org/x/tools/cmd/goimports

go install golang.org/x/tools/cmd/goimports

接下来,我们需要安装所需要的工具,注意,如果某个包下载失败,可以使用gopm的方法。

go get github.com/kardianos/govendor
go get github.com/golang/lint/golint
go get golang.org/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-xml
go get github.com/golang/protobuf/protoc-gen-go

让人十分恶心的是github.com/golang/lint/golint这个包,使用go get和gopm get都无法下载。

我们可以先在GitHub上下载源代码,然后在执行go install进行安装。

此外,我们还需要下载libltdl-dev这个库:

sudo apt-get install libltdl-dev 

3. Fabric的编译

3.1 Fabric代码的下载:

mkdir -p ~/gopath/src/github.com/hyperledger
cd ~/gopath/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric.git
cd fabric
git checkout v1.3.0

这些做完之后,我们需要把上面生成的二进制文件,拷贝到 /opt/gopath/src/github.com/hyperledger/fabric/.build/bin

/opt/gopath/src/github.com/hyperledger/fabric/build/docker/gotools/bin目录下。

3.2 编译二进制文件

3.2.1 编译相关包

我们使用下面的命令,make release来生成相关的包。

我们生成了cryptogen,configtxlator,cryptogen,orderer和peer等相关二进制文件。可以把他们拷贝倒build/docker/gotools/bin目录下,用于后面的使用。

3.2.2 编译基础镜像

接下来我们需要构建fabric-ccenv和fabric-javaenv镜像,这两个镜像的构建也是十分恶心的。

需要首先下载fabric-baseimage镜像,一般这个镜像是没任何问题的,问题的关键在于chaintool,这个很容易就挂掉了。挂掉的时候,我们可以手动去下载。

不过,这个地方给了我们网址,我们可以手动去下载。

https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/chaintool-1.0.1/hyperledger-fabric-chaintool-1.0.1.jar

下载后放到.build/bin下即可。注意选择适合自己的版本。

接着我们使用make peer命令即可下载进行构建,会先自动下载fabric-ccenv和fabric-javaenv。

3.2.3 docker镜像的生成

如果前面没有失败的话,会生成各种二进制文件,我们需要把这些二进制文件打包到docker镜像中。

为了方便,我们可以直接使用命令make docker即可构建所需的docker镜像,我们也可以使用

make orderer-docker,make peer-docker,make tools-docker来分别进行构建。

我们来看下,最后成功构建的镜像:

最后我们来看下docker镜像之间的各种以来关系:

4. 总结

经过上面的实操,发现真的去构建还是比较麻烦的,官方没有详细的文档也描述,网上的博客大都零零星星。需要自己不断的踩坑。

另外,当需要安装软件的时候,我们最好去官方的文档,这样不会出错,因为网上的博客的问题在于其版本可能不对,存在某个依赖包版本错误的问题,为以后的开发埋下隐患。

原文地址:https://www.cnblogs.com/anapodoton/p/10922907.html

时间: 2024-10-10 03:28:34

手把手教你编译Fabric源代码的相关文章

手把手教你编译安装MariaDB

MariaDB是什么? MariaDB是MySQL的一个分支,由于Oracle有可能对MySQL闭源,所以分离了出来(MySQL先后被Sun.Oracle收购). 但是除了作为一个Mysql的“向下替代品”,MariaDB包括的一些新特性使它优于MySQL. 官网说明 The instructions on this page will help you compile MariaDB from source. Links to more complete instructions for sp

手把手教你在Windows下使用MinGW编译libav(参考libx264的编入)

转自:http://www.th7.cn/Program/cp/201407/242762.shtml 手把手教你在Windows下使用MinGW编译libav libav是在Linux下使用纯c语言开发的,不可避免的,libav源码使用了一些gcc的特性,那么在Windows下很难使用VC编译,但是使用MinGW编译却简单多了,下面我将根据自己的经历逐步介绍使用MinGW编译libav的过程以及在此过程中遇到的问题及其解决方法. 1      安装MinGW编译环境 1.1    安装MinG

【转】手把手教你源代码制作龙芯64位系统

Reference:http://zdbr.net.cn/download/Loongson64-2.0.htm 手把手教你源代码制作龙芯64位系统 (交叉编译版本)2.0 正式版 作者:孙海勇 更新日志: 2009年9月20日 :改进制作步骤两处 2009年9月20日 :修改笔误五处 2009年5月29日 :修改笔误七处 2009年5月9日 :修改工具链的制作 2009年5月3日 :v2.0 正式版发布 2008年10月19日 :v2.0-pre2 发布 2008年9月14日 农历八月十五(中

手把手教你ranorex_android自动化测试第一个示例

要说android的自动化,那真是折腾死我了,从早期的monkeyrunner,到后来的robotium,再到最新的uiautomator,各有各的问题,总之性价比都不够高,不太适合我的使用场景.于是不愿意将研究结果投入实践,一直等待.今年的适配问题越发突出,再不自动化,回归就该搞死人了. 于是最后研究比对instrumetation和uiautomator,终于确定了uiautomator方案,其实也是勉为其难,不过总算也是可以实现的.先准备好脚本,批量修改了所有布局文件,增加了content

手把手教你认识并搭建Nginx

手把手教你认识并搭建Nginx Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了. Igor 将源代码以类 BSD 许可证的形式发布.尽管还是测试版,但是,Nginx 已经因为它的稳定性.丰富的功能集.示例配置文件和低系统资源的消耗而闻名了. 一. Nginx 的优点: 作为 W

【转】手把手教你把Vim改装成一个IDE编程环境(图文)

手把手教你把Vim改装成一个IDE编程环境(图文) By: 吴垠 Date: 2007-09-07 Version: 0.5 Email: lazy.fox.wu#gmail.com Homepage: http://blog.csdn.net/wooin Copyright: 该文章版权由吴垠和他可爱的老婆小包子所有.可在非商业目的下任意传播和复制.对于商业目的下对本文的任何行为需经作者同意.联系方式:lazy.fox.wu#gmail.com 1 写在前面   Linux下编程一直被诟病的一

手把手教你用 1 行命令实现人脸识别

手把手教你用 1 行命令实现人脸识别 转载 2017年11月01日 00:00:00 人脸识别很难吗?-- Kangvcar 本文导航? 环境要求00%? 环境搭建03%? 实现人脸识别19%? 示例一(1 行命令实现人脸识别):19%? 示例二(识别图片中的所有人脸并显示出来):31%? 示例三(自动识别人脸特征):49%? 示例四(识别人脸鉴定是哪个人):65%? 示例五(识别人脸特征并美颜):81%转载自 | http://www.jianshu.com/p/281aa6a3823a 作者

Android消息推送:手把手教你集成小米推送

前言 在Android开发中,消息推送功能的使用非常常见. 为了降低开发成本,使用第三方推送是现今较为流行的解决方案. 今天,我将手把手教大家如何在你的应用里集成小米推送 该文档基于小米推送官方Demo,并给出简易推送Demo 看该文档前,请先阅读我写的另外两篇文章: 史上最全解析Android消息推送解决方案 Android推送:第三方消息推送平台详细解析 目录 1. 官方Demo解析 首先,我们先对小米官方的推送Demo进行解析. 请先到官网下载官方Demo和SDK说明文档 1.1 Demo

手把手教你uiautomator_android自动化测试第一个示范

手把手教你uiautomator_android自动化测试第一个示例 android的自动化测试方案,弄了好久了. Google在sdk4.0以后提供了一个自动化解决方案uiautomator: 优点:可以跨应用了:这可是亲生的: 缺点:必须sdk4.0以上版本:要想实现的好,最好有开发配合:java项目编译为jar后需要push到手机才能运行,也就是说必须打印日志暴力调试. 后来听到群友Teddy说到appium和calabash-android,翻了一下appium的文章,发现: 01.jp