如何在本地编译Fabric Code

之前的博客都是拿官方现成的Docker镜像来用,但是并没有自己动手做镜像,也没有说到如何去开发和测试Fabric的代码。这一篇博客就从入门的角度讲解如何编译、测试和开发Fabric。

一、环境准备

要进行相关的开发工作,当然第一步是准备好环境,还是老生常谈,主要是安装Docker、安装Go,下载最新Fabric代码等工作。我这里使用的是VirtualBox里面安装的Ubuntu 16.04,如果您使用的不是这个版本,可能有些命令会有所区别。Fabric开发依赖的工具主要还是参考官方文档:

1. 使用VirtualBox并在其中安装好Ubuntu

这一步其实没啥好说的,下载好最新版的VirtualBox,下载Ubuntu Server,我用的是Ubuntu16.04.2 X64 Server。我使用的用户是studyzy,不建议直接在root下执行命令。在安装完Ubuntu后,需要保证apt source是国内的,不然如果是国外的话会很慢很慢的。具体做法是

/etc/apt/sources.list

打开这个apt源列表,如果其中看到是http://us.xxxxxx之类的,那么就是外国的,如果看到是之类的,那么就不用换的。我的是美国的源,所以需要做一下批量的替换。在命令模式下,输入:

:%s/us./cn./g

就可以把所有的us.改为cn.了。然后输入:wq即可保存退出。

apt-get update

更新一下源。

然后安装ssh,这样接下来就可以用putty或者SecureCRT之类的客户端远程连接Ubuntu了。

apt-get

2. Go的安装

Ubuntu的apt-get虽然提供了Go的安装,但是版本比较旧,最好的方法还是参考官方网站 ,下载最新版的Go。具体涉及到的命令包括:

https: -C /usr/local -xzf go1..linux-amd64..gz

接下来编辑当前用户的环境变量:

~/.profile

添加以下内容:

export PATH=$PATH:/usr/local/go/=/usr/local/=$HOME/=$PATH:$HOME/go/bin

编辑保存并退出vi后,记得把这些环境载入:

source ~/.profile

我们把go的目录GOPATH设置为当前用户的文件夹下,所以记得创建go文件夹

cd ~ go
运行以下命令查看当前go的版本,如果能够显示go版本,那么说明我们的go安装成功.
go version

3. Docker安装

我们可以使用阿里提供的镜像,安装也非常方便,参考: ,其中Ubuntu的脚本是:

# step apt- apt-get -y apt-transport-https ca-certificates curl software-properties--fsSL http: # Step add-apt-repository : 更新并安装 Docker- apt-get - apt-get -y docker-ce

安装完成后需要修改当前用户(我使用的用户叫studyzy)权限:

usermod -aG docker studyzy

注销并重新登录,然后添加阿里云的Docker Hub镜像:

-p /etc/ /etc/docker/daemon.json <<-: [ systemctl daemon- systemctl restart docker

不同的版本添加方法是不一样的,官方的文档如下:

当然觉得阿里云镜像不好用,喜欢用DaoClound的也可以用DaoClound的镜像。DaoCloud的镜像设置文档为:

4. Docker-Compose的安装

Docker-compose是支持通过模板脚本批量创建Docker容器的一个组件。

然后是安装docker-compose,我们从官方网站()下载,运行脚本:

curl -L https: +x /usr/local/bin/docker-compose

5.Pip的安装

Pip是基于Python的一个工具,需要安装Python-pip,运行脚本:

apt-get python-pip
这个脚本会安装Pip所依赖的Python和各种库,所以安装pip完毕后我们也有了Python的环境。运行以下命令可以检查pip和Python的版本:
pip –V
apt安装的版本可能不够新,我们使用以下命令可以更新pip版本:
pip --upgrade pip

6. Go Tools安装

Fabric使用GO开发,其中用到了一些官方或者第三方的工具,我们也需要下载。尤其是golang的网址被墙了,我们只有访问GitHub的镜像。
–p $GOPATH/src/golang.org//src/golang.org/
等tools下载完毕,我们可以运行以下命令来安装Fabric可能用到的Go工具:
go get github.com/kardianos//golang/lint//x/tools/cmd//onsi/ginkgo//axw/gocov//client9/misspell/cmd//AlekSi/gocov-/golang/protobuf/protoc-gen-go

7. 第三方库安装

Fabric依赖的第三方库里面,有些库又依赖了其他库,而这些库是需要我们先手动准备好的。比如libltdl-dev,这是PKCS11用到的一个库,我们需要安装:

apt-get libltdl-dev

8. Fabric源码下载

我们可以使用Git命令下载源码,首先需要建立对应的目录,然后进入该目录,Git下载源码:
-p ~/go/src/github.com/~/go/src/github.com/

等Fabric下载完毕后,我们就切换到Fabric源码的文件夹:

cd ~/go/src/github.com/hyperledger/fabric

二、编译Fabric

编译Fabric的代码主要是通过make命令来完成,因为官方已经写好了完整的Makefile,所以我们要编译各个Fabric的组件还是比较简单的。关于make的基础知识,可以参考这篇博客:

下面我们就分步骤来编译Fabric。

1.Orderer节点的编译

Orderer节点容器里面运行的是orderer服务,我们要生成Orderer镜像,就需要先编译出Orderer程序。执行:

orderer

这是我在CLI下执行的结果:

studyzy@ubuntu1:~/go/src/github.com/hyperledger/fabric$ /bin/= GOBIN=/home/studyzy/go/src/github.com/hyperledger/fabric/build/bin go -tags -ldflags github.com/hyperledger/fabric//bin/orderer

从日志可以看出,Orderer编译完成后,会把二进制文件放在build/bin/orderer。

2.Peer节点的编译

Peer节点的编译会比Orderer复杂很多,因为墙的原因,我们需要做一些额外的操作。另外链码是运行在Peer所在的机器上,所以需要给ChainCode准备运行基础环境,也就是ccenv和javaenv两个镜像。在make peer之前我们必须先保证本地没有对应的镜像文件,如果有,那么就用docker rmi命令删除之前下载或者编译好的镜像。

还记得前面下载的Go Tools吗,这里需要copy到Fabric目录里面来:

-p build/docker/gotools/ ~/go/bin

以上操作纯粹是为了绕开墙,如果你本身不存在墙的问题,那么完全可以不用如此多此一举。

接下来直接运行以下命令即可编译生成Peer节点的Docker镜像:

peer

运行该命令后,系统首先会下载hyperledger/fabric-baseimage:x86_64-0.3.2这个镜像到本地,这是所有Fabric镜像的基础镜像文件。

下载后会从官网下载chaintool的jar包,下载地址:

这个地址没有被墙,一般来说是能够正常下载下来的。

下载chaintool完毕后,接下来就开始创建fabric-ccenv镜像。所有创建Docker镜像都是基于Dockerfile,我们可以在Fabric目录下的images文件夹看到所有Fabric镜像Build的步骤配置。

在创建fabric-ccenv镜像后,接下来是创建java版ChainCode的基础镜像,也就是fabric-javaenv,最后才是build peer程序,运行成功后看到的日志大概是这样的:

Successfully built b8f69c7b3c4c
Successfully tagged hyperledger
/fabric-<span style="color: #000000;">javaenv:latest
docker tag hyperledger/fabric-javaenv hyperledger/fabric-javaenv:x86_64-<span style="color: #800080;">1.0.<span style="color: #800080;">6-snapshot-<span style="color: #000000;">a8728bc
build/bin/<span style="color: #000000;">peer
CGO_CFLAGS=<span style="color: #800000;">" <span style="color: #800000;">" GOBIN=/home/studyzy/go/src/github.com/hyperledger/fabric/build/bin go <span style="color: #0000ff;">install -tags <span style="color: #800000;">"" -ldflags <span style="color: #800000;">"<span style="color: #800000;">-X github.com/hyperledger/fabric/common/metadata.Version=1.0.6-snapshot-a8728bc -X github.com/hyperledger/fabric/common/metadata.BaseVersion=0.3.2 -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<span style="color: #800000;">" github.com/hyperledger/fabric/<span style="color: #000000;">peer
Binary available as build/bin/peer

3.Fabric 工具编译

Fabric除了Orderer和Peer外,还为我们提供了几个很方便的工具,在搭建Fabric网络时我们就用到过。那就是:

  • configtxgen
  • cryptogen
  • configtxlator

这三个工具的编译也很简单,直接运行以下命令即可:

configtxlator

4.Docker镜像的生成

前面三步只是生成了Fabric的二进制文件,我们并不能直接使用,而是需要分别将这些二进制文件打包到Docker镜像中。所以我们接下来需要Build Docker Image。

要生成Orderer镜像,那么需要运行命令:

orderer-docker

由于没有网络文件的依赖,所以这时应该很快就能完成。然后我们继续生成Peer镜像:

peer-docker

再然后是客户端,也就是fabric-tools,对应的命令是:

tools-docker

以上3个最重要的镜像生成完成,我们可以用

docker images

查看当前的镜像列表:

image

5.其他Docker镜像的编译

除了上面我们看到的这些镜像外,实际上我们可能还会用到CouchDB做状态数据库,用Kafka做共识,用Zookeeper做Kafka的高可用支持,这些工具都有对应的Docker镜像,我们仍然可以使用make命令来生成他们。

运行以下命令,系统会给我们生成一整套的Fabric镜像:

docker

这里一般来说没什么坑,主要是从网上下载一些包下来,会花一些时间。完成后,我们仍然运行

docker images

可以看到我们生成的所有Fabric镜像:

image

三、总结

如果没有墙的存在,那么我们编译和生成Fabric镜像将非常简单,直接一个make all命令即可。可惜因为墙的存在,所以有些地方需要特殊处理。下一篇博客我会讲到如何运行Fabric中的测试代码。只要我们能够自己编译Fabric,能够跑Fabric的Test,那么我们就可以很方便的对Fabric代码进行修改,并验证我们的修改,更进一步我们就可以将自己的代码提交到社区,为Fabric的壮大添砖加瓦。

最后再补充一句,如果我们对之前生成的镜像不满意,对代码进行调整后需要重新生成,可以使用

clean

命令删除之前make的所有东西。然后重新执行make命令编译Fabric。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


最近一直在开发Apworks框架的案例代码,同时也在一起修复Apworks框架中的Bug和一些设计上的不足。遇到的一个普遍问题是,代码的调试过程需要依赖很多外部系统,比如MongoDB、PostgreSQL、RabbitMQ等。当然可以在本机逐一安装这些服务,然后对服务进行配置,使其满足自己开发调试
最近每天都在空闲时间努力编写Apworks框架的案例代码WeText。在文本发布和处理微服务中,我打算使用微软的SQL Server for Linux来做演示,于是也就在自己的docker-compose中加入了MS SQL Server的服务。其实在Docker中运行SQL Server是非常容
在《Kubernetes中分布式存储Rook-Ceph部署快速演练》文章中,我快速介绍了Kubernetes中分布式存储Rook-Ceph的部署过程,这里介绍如何在部署于Kubernetes的ASP.NET Core MVC的应用程序中使用Rook-Ceph所创建的存储对象。 构建ASP.NET C
最近在项目中有涉及到Kubernetes的分布式存储部分的内容,也抽空多了解了一些。项目主要基于Rook-Ceph运行,考虑到Rook-Ceph部署也不那么简单,官方文档的步骤起点也不算低,因此,在整合官方文档的某些步骤的基础上,写篇文章简单总结一下。 Rook-Ceph是Kubernetes中分布
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose CentOS下Docker与.netcore(四)之 三剑客之一D
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose CentOS下Docker与.netcore(四)之 三剑客之一D
构建镜像最具挑战性的一点是使镜像大小尽可能的小。Dockerfile中的每条指令都为图像添加了一个图层,您需要记住在移动到下一层之前清理任何不需要的工件。对于多阶段构建,您可以在Dockerfile中使用多个FROM语句。每个FROM指令可以使用不同的基础,并且每个指令都开始一个新的构建。您可以选择
本文介绍compose配置文件参数的使用,熟练编写compose文件 [root@docker lnmp]# cat lnmp.yaml version: &#39;3&#39; services: nginx: build: /root/docker_demo/nginx/ ports: - &q
环境 docker-machine主机:192.168.1.9 docker主机:192.168.1.10 步骤: 安装docker-machine 创建ssh密钥对,实现两主机无密登录 创建docker主机,命名host1 变更docker环境变量 运行容器查看两端是否同步 镜像容器同步测试成功
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose CentOS下Docker与.netcore(四)之 三剑客之一D
https://blog.csdn.net/wanglei_storage/article/details/77508620 实践中会发现,生产环境中使用单个 Docker 节点是远远不够的,搭建 Docker 集群势在必行。然而,面对 Kubernetes, Mesos 以及 Swarm 等众多容
1.引言 紧接上篇.NET Core容器化@Docker,这一节我们先来介绍如何使用Nginx来完成.NET Core应用的反向代理,然后再介绍多容器应用的部署问题。 2. Why Need Nginx .NET Core中默认的Web Server为Kestrel。 Kestrel is grea
docker rm `docker ps -a | grep Exited | awk &#39;{print $1}&#39;` 删除异常停止的docker容器 docker rmi -f `docker images | grep &#39;&lt;none&gt;&#39; | awk &#3
什么是Docker Compose 在微服务盛行的今天,我们通常是这么定义Compose的:对容器的统一启动和关闭的编排工具。 但是我以前还是有个疑惑,谁会用Compose在一台服务器上部署多个服务呢?干脆直接用单体服务就行了!直到我遇到了以下的一个需求,让我明白了在一台服务器上不得不用多个服务的时
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose CentOS下Docker与.netcore(四)之 三剑客之一D
很多时候,我们在本地开发过程中程序运行很正常,但是发布到线上之后由于环境的原因,可能会有一些异常。通常我们会通过日志来分析问题,除了日志还有一种常用的调试手段就是:附加进程。 VS中的附加进程非常强大,目前提供了9种常用的附加方式。 在当前.Net Core支持跨平台的大背景下,其中Linux环境和
https://www.cnblogs.com/bigberg/p/8867326.html 一、简介 Docker有个编排工具docker-compose,可以将组成某个应该的多个docker容器编排在一起,同时管理。同样在Swarm集群中,可以使用docker stack 将一组相关联的服务进行
.Net6中想实现对某个网址截屏,可通过Selenium模拟访问网址并实现截图。 实现 安装Nuget包 &lt;PackageReference Include=&quot;Selenium.Chrome.WebDriver&quot; Version=&quot;85.0.0&quot; /&g
原文&#160;https://www.cnblogs.com/gispathfinder/p/5871043.html 我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: host模式,使用--net=host指定。 co