“一键开播”火星视频直播发布会暨2021区块链投资展望

超级账本Fabric教程(四):使用docker编译fabric源码(上)

链块学院
企业专栏
热度: 14556
本文介绍如何在docker镜像中编译fabric源码,方便修改代码后快速测试。

一,前言


本文档的搭建流程基于如下环境:

操作系统:unbuntu16.04


二,实验前准备


在搭建织物网络之前先要安装一些必要的软件

 

2.1安装git

sudo apt-get install git

2.2安装git

sudo apt-get install curl


2.3安装去

下载去二进制包:https://studygolang.com/dl/golang/go1.9.2.linux-amd64.tar.gz

sudo tar -C / usr / local -zvxf go1.9.2.linux-amd64.tar.gz 
mkdir -p~ / go
//设置GOPATH环境变量
echo“export GOPATH = $ HOME / go”>>〜/ .bashrc
/ /将go的可执行文件所在目录加入到PATH环境变量中
echo“export PATH = $ PATH:$ HOME / go / bin:/ usr / local / go / bin”>>〜/ .bashrc
//使得环境变量修改立即生效
源〜/ .bashrc
//验证go是否安装成功
go版

2.4安装nodejs

必须要安装8.9.x或者更高版本下载二进制包:https://nodejs.org/dist/latest-v10.x/node-v10.13.0-linux-x64.tar.gz 

//解压二进制包
tar zvxf node-v10.13.0-linux-x64.tar.gz -C
//将可执行文件目录加入环境变量
echo“export PATH = $ PATH:$ HOME / node-v10.13.0-linux -x64 / bin“>>〜/ .bashrc
//验证是否安装成功
节点-v
npm -v

2.5安装码头

必须安装17.06.2-CE或以上版本

下载二进制包:https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/docker-ce_18.06.1~ce〜3-0~ubuntu_amd64.deb

切换到下载好的安装包路径:

sudo dpkg -i docker-ce_18.06.1~ce~3-0~ubuntu_amd64.deb


验证是否安装成功:

sudo docker run hello-world

2.6安装docker-compose

必须安装1.14.0或以上版本

下载并安装

sudo curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -s`-`uname -m` -o / usr / local / bin / docker-撰写


修改执行文件的执行权限

sudo chmod + x / usr / local / bin / docker-compose


验证是否安装成功

docker-compose -v

 

三,超级账本源代码下载


下载源代码

mkdir -p~ / go / src / github.com / hyperledger  
cd~ / go / src / github.com / hyperledger
git clone https://github.com/hyperledger/fabric.git

将源码版本切换到V1.0.0

git checkout v1.0.0


修改对等模块的主函数,加入一行打印,后面启动对等体的过程中可以测试我们自己编译的代码是否生效

func main(){ 
fmt.Println(“---------- Welcome to my-basic-network ----------”)
//对于环境变量。
viper.SetEnvPrefix(cmdRoot)
viper.AutomaticEnv()
replacer:= strings.NewReplacer(“。”,“_”)
viper.SetEnvKeyReplacer(replacer)
......

四,下载yeasy / hyperledger织物:1.0.0镜像


yeasy / hyperledger织物镜像是基于golang镜像构建,给我们安装好了编译织物的环境依赖,gotools等,我们可以直接在这个镜像里面编译织物源码。

docker pull yeasy / hyperledger-fabric:1.0.0


五,编译织物源码


创建工程目录,并切换到工程目录下

mkdir~ / my-basic-network 
cd~ / my-basic-network


在我的-基本网络下创建一个名为泊坞窗,构成-compile.yaml的配置文件

版本:'2' 
服务:
  编译:
    container_name:编译
    图像:yeasy / hyperledger-fabric:1.0.0    
    命令:/ bin / bash -c'睡眠10000000'working_dir
    :/go/src/github.com/hyperledger/fabric
    卷:
      - 〜/ go / bin:/ go / bin
      - 〜/ go / src / github.com / hyperledger / fabric:/go/src/github.com/hyperledger/fabric


六,启动容器


//如果启动容器由于权限问题失败,请参考本文章最后的“没有权限执行dock命令解决办法” 
docker-compose -f docker-compose-compile.yaml up -d


进入容器交互式命令行,编译对等体和订货者模块



docker exec -it compile bash #进入对等模块子目录
root @ 99edaa3a60c5:/go/src/github.com/hyperledger/fabric#cd peer /
#编译对等模块
root @99edaa3a60c5:/go/src/github.com/hyperledger / fabric / peer
#go build #安装编译后的可执行文件
root @ 99edaa3a60c5:/go/src/github.com/hyperledger/fabric/peer# go install
#进入orderer模块子目录
root @ 99edaa3a60c5:/ go / src /github.com/hyperledger/fabric/peer#cd ../orderer/#
编译orderer 模块
root @ 99edaa3a60c5:/go/src/github.com/hyperledger/fabric/orderer#go build
#安装
orderer 模块root @ 99edaa3a60c5: /go/src/github.com/hyperledger/fabric/orderer# go install


编译完成后,在镜像的/去/箱目录下看到新生成的同行和订货可执行程序,并且在本机〜/去/箱目录下也可以看到编译生成的同行和订货可执行文件。


我们在本地修改代码后,镜像当中可以立即看到被修改内容,只需要在镜像中重新编译就可以使修改后的代码生效。


七,搭建测试网络


我们搭建一个只有一个订货人和一个同行的简单网络需要编译生成两个工具:

1. cryptogen生成加密证书

2. configtxgen生成交易配置

这两个工具在织物源代码目录分别为:

  •  〜/去/ src目录/ github.com / hyperledger /面料/普通/工具/ cryptogen

  •  〜/去/ src目录/ github.com / hyperledger /面料/普通/ configtx /工具/ configtxgen

在主机上分别进入其中执行go build,go install

如果在执行过程中遇到如下错误


#github.com/hyperledger/fabric/vendor/github.com/miekg/pkcs11 
../../../vendor/github.com/miekg/pkcs11/pkcs11.go:29:18:致命错误:ltdl。 h:没有这样的文件或目录
编译终止:


需要安装的libltdl-dev的库解决

sudo apt-get install libltdl-dev


7.1生成机构加密证书的配置文件

在主机的工程目录我的,基本的网络下新建加密config.yaml这是一个生成机构加密证书的配置文件,具体内容如下:

#Copyright IBM Corp.保留所有权利。

#SPDX许可证标识符:Apache的2.0

 
#------------------------------------- --------------------------------------
#“OrdererOrgs” - 管理orderer节点的组织的定义
# -------------------------------------------------- -------------------------
OrdererOrgs:
  #---------------------- -------------------------------------------------- ---
  #Orderer
  #-------------------------------------------- -------------------------------
  - 姓名:Orderer
    域名:example.com
    #--------- -------------------------------------------------- ----------------
    #“Specs” - 有关完整说明,请参阅下面的PeerOrgs
    #------------------------------------------------- --------------------------
    规格:
      - 主机名:orderer
#----------------- -------------------------------------------------- --------
#“PeerOrgs” - 管理对等节点的组织的定义
#------------------------------ ---------------------------------------------
PeerOrgs:
  # - -------------------------------------------------- -----------------------
  #Org1
  #------------------------ -------------------------------------------------- -
  - 名称:Org1
    域名:org1.example.com
    #------------------------------------- --------------------------------------
    #“Specs”
    #------------------------------------------------- --------------------------
    #取消注释本节以启用
    #配置中主机的显式定义大多数用户将要使用的模板,下面
    #
    #规格是规格项的数组。每个Spec条目都包含两个字段:
    # - Hostname :(必需)所需的主机名,不包含域。
    # - CommonName :(可选)指定#CN的模板或显式覆盖
    。默认情况下,这是模板:
    ##
    “{{。Horostname}}。{{。Domain}}”
    ##
    从Spec.Hostname获取其值
    #Org.Domain,分别。
    #------------------------------------------------- --------------------------     #Specs
    :
# - Hostname:foo #inflyly“foo.org1.example.com”
    #CommonName:foo27。 org5.example.com#覆盖上面设置的基于主机名的FQDN
    # - 主机名:bar
    # - 主机名:baz
    #-------------------------- ----------- --------------------------------------
    #“Template”
    #------- --------------------------------------- ----------- ------------------
    #允许定义
    从模板顺序创建的1个或多个主机默认情况下,这看起来像从0到Count-1的“同行%d“。
    #您可以覆盖节点数(计数),起始索引(开始)
    #或用于构造名称的模板(主机名)。
    ##
    注意:模板和规格不是互斥的。您可以定义两个
    #部分,并为您创建聚合节点。注意
    #name collisions
    #------------------------------------ ------- --------------------------------
    模板:
      数:1
      #Start:5
      #Hostname:{{。Prefix}} {{.Index}} #default
    #-------------------------------- --------- ----------------------------------
    #“用户”
    # - --------- ----------------------------------------- --------- --------------
    #Count:用户帐号的数量_另外_给Admin
    #-------------- ----------------------- --------------------------- -----------
    用户:
      数量:1


使用〜/ go / bin / cryptogen工具来生成证书:

在主机上我的,基本的网络工程目录下执行如下命令,由于我们之前已经把〜/去/ bin中加入到PATH环境变量,所有不需要指定绝对路径,直接使用cryptogen命令


cd~ / my-basic-network / 
cryptogen generate --config =。/ crypto-config.yaml


执行命令之后,在当前目录下可以看到生成了一个加密的配置文件夹,里面包含两个文件夹:

ordererOrganizations peerOrganizations


 

- 结束 -

(未经授权,谢绝转载,版权最终解释权归链块学院所有)。


文章声明:本文为火星号作者作品,不代表火星财经观点,版权归作者所有,如需转载,请提前联系作者!

声明:本文为入驻“火星号”作者作品,不代表火星财经官方立场。
转载请联系网页底部:内容合作栏目,邮件进行授权。授权后转载时请注明出处、作者和本文链接。 未经许可擅自转载本站文章,将追究相关法律责任,侵权必究。
提示:投资有风险,入市须谨慎,本资讯不作为投资理财建议。
免责声明:作为区块链信息平台,本站所提供的资讯信息不代表任何投资暗示,本站所发布文章仅代表个人观点,与火星财经官方立场无关。鉴于中国尚未出台数字资产相关政策及法规,请中国大陆用户谨慎进行数字货币投资。
语音技术由科大讯飞提供

评论0