@H_403_0@之前的博客都是拿官方现成的Docker镜像来用,但是并没有自己动手做镜像,也没有说到如何去开发和测试Fabric的代码。这一篇博客就从入门的角度讲解如何编译、测试和开发Fabric。
一、环境准备
@H_403_0@要进行相关的开发工作,当然第一步是准备好环境,还是老生常谈,主要是安装Docker、安装Go,下载最新Fabric代码等工作。我这里使用的是VirtualBox里面安装的Ubuntu 16.04,如果您使用的不是这个版本,可能有些命令会有所区别。Fabric开发依赖的工具主要还是参考官方文档:1. 使用VirtualBox并在其中安装好Ubuntu
这一步其实没啥好说的,下载好最新版的VirtualBox,下载Ubuntu Server,我用的是Ubuntu16.04.2 X64 Server。我使用的用户是studyzy,不建议直接在root下执行命令。在安装完Ubuntu后,需要保证apt source是国内的,不然如果是国外的话会很慢很慢的。具体做法是
打开这个apt源列表,如果其中看到是http://us.xxxxxx之类的,那么就是外国的,如果看到是之类的,那么就不用换的。我的是美国的源,所以需要做一下批量的替换。在命令模式下,输入:
2. Go的安装
@H_403_0@Ubuntu的apt-get虽然提供了Go的安装,但是版本比较旧,最好的方法还是参考官方网站 ,下载最新版的Go。具体涉及到的命令包括:
接下来编辑当前用户的环境变量:
添加以下内容:
编辑保存并退出vi后,记得把这些环境载入:
我们把go的目录GOPATH设置为当前用户的文件夹下,所以记得创建go文件夹
运行以下命令查看当前go的版本,如果能够显示go版本,那么说明我们的go安装成功.
3. Docker安装
我们可以使用阿里提供的镜像,安装也非常方便,参考: ,其中Ubuntu的脚本是:
当然觉得阿里云镜像不好用,喜欢用DaoClound的也可以用DaoClound的镜像。DaoCloud的镜像设置文档为:
4. Docker-Compose的安装
@H_403_0@Docker-compose是支持通过模板脚本批量创建Docker容器的一个组件。 @H_403_0@然后是安装docker-compose,我们从官方网站()下载,运行脚本:5.Pip的安装
Pip是基于Python的一个工具,需要安装Python-pip,运行脚本:
这个脚本会安装Pip所依赖的Python和各种库,所以安装pip完毕后我们也有了Python的环境。运行以下命令可以检查pip和Python的版本:
apt安装的版本可能不够新,我们使用以下命令可以更新pip版本:
6. Go Tools安装
Fabric使用GO开发,其中用到了一些官方或者第三方的工具,我们也需要下载。尤其是golang的网址被墙了,我们只有访问GitHub的镜像。
等tools下载完毕,我们可以运行以下命令来安装Fabric可能用到的Go工具:
7. 第三方库安装
Fabric依赖的第三方库里面,有些库又依赖了其他库,而这些库是需要我们先手动准备好的。比如libltdl-dev,这是PKCS11用到的一个库,我们需要安装:
8. Fabric源码下载
我们可以使用Git命令下载源码,首先需要建立对应的目录,然后进入该目录,Git下载源码:
等Fabric下载完毕后,我们就切换到Fabric源码的文件夹:
二、编译Fabric
编译Fabric的代码主要是通过make命令来完成,因为官方已经写好了完整的Makefile,所以我们要编译各个Fabric的组件还是比较简单的。关于make的基础知识,可以参考这篇博客:
@H_403_0@下面我们就分步骤来编译Fabric。1.Orderer节点的编译
@H_403_0@Orderer节点容器里面运行的是orderer服务,我们要生成Orderer镜像,就需要先编译出Orderer程序。执行:2.Peer节点的编译
@H_403_0@Peer节点的编译会比Orderer复杂很多,因为墙的原因,我们需要做一些额外的操作。另外链码是运行在Peer所在的机器上,所以需要给ChainCode准备运行基础环境,也就是ccenv和javaenv两个镜像。在make peer之前我们必须先保证本地没有对应的镜像文件,如果有,那么就用docker rmi命令删除之前下载或者编译好的镜像。 @H_403_0@还记得前面下载的Go Tools吗,这里需要copy到Fabric目录里面来:这个地址没有被墙,一般来说是能够正常下载下来的。
下载chaintool完毕后,接下来就开始创建fabric-ccenv镜像。所有创建Docker镜像都是基于Dockerfile,我们可以在Fabric目录下的images文件夹看到所有Fabric镜像Build的步骤配置。
在创建fabric-ccenv镜像后,接下来是创建java版ChainCode的基础镜像,也就是fabric-javaenv,最后才是build peer程序,运行成功后看到的日志大概是这样的:
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
这三个工具的编译也很简单,直接运行以下命令即可:
4.Docker镜像的生成
前面三步只是生成了Fabric的二进制文件,我们并不能直接使用,而是需要分别将这些二进制文件打包到Docker镜像中。所以我们接下来需要Build Docker Image。
要生成Orderer镜像,那么需要运行命令:
由于没有网络文件的依赖,所以这时应该很快就能完成。然后我们继续生成Peer镜像:
再然后是客户端,也就是fabric-tools,对应的命令是:
以上3个最重要的镜像生成完成,我们可以用
查看当前的镜像列表:
5.其他Docker镜像的编译
@H_403_0@除了上面我们看到的这些镜像外,实际上我们可能还会用到CouchDB做状态数据库,用Kafka做共识,用Zookeeper做Kafka的高可用支持,这些工具都有对应的Docker镜像,我们仍然可以使用make命令来生成他们。 @H_403_0@运行以下命令,系统会给我们生成一整套的Fabric镜像: