本篇是笔者在Ubuntu18下配置部署hyperledger fabric的过程步骤(血泪史),同时这也是我毕业设计的一个环节,在此记录下来这一阶段我踩过的坑和一些心得体会,希望对后来的小伙伴有帮助。关于hyperledger项目的具体介绍,移步官方网站https://cn.hyperledger.org/

目录如下:

  • 实验环境
  • 基础工具下载
  • fabric核心模块简介
  • 编译配置fabric环境
  • 检查环境
  • 实验总结
  • 附参考资料、推荐学习资料

 

一. 实验环境

在Windows10中安装了VMware player15,运行虚拟机Ubuntu18桌面版操作系统。另外,建议使用超级用户操作!!不然后面会出现莫名其妙的错误。

二. 基础工具下载

1. git分布式管理控制工具

首先更新apt,然后直接使用apt下载(当然使用apt-get也可以),下载后使用git version查看是否安装成功。

#apt update
#apt install git
#git version
git version 2.19.1

2. 安装curl工具

cURL是一个利用URL语法在命令行下工作的文件传输工具,说白了就是协助我们下载软件的工具,后续会用到它,提高工作效率。命令行使用apt下载就行。

#apt install curl
#curl -V  //查看版本
curl 7.61.0

3. 安装Golang

fabric是使用golang语言开发的,所以需要使用golang去编译fabric的核心模块。注意fabric的应用程序不需要必须使用golang开发,因为fabric的SDK提供很多种语言支持,比如JavaScript、Java等。

首先使用wget工具(可以使用apt install wget下载)下载golang的压缩包,然后将它解压到/usr/local/文件夹下,然后在/etc/profile文件中配置环境变量,最后设置go项目的开发路径。

使用wget从go语言中文网下载安装包(从go语言中文网下载速度较快,官网下载缓慢)

wget https://studygolang.com/dl/golang/go1.13.6.linux-amd64.tar.gz

解压到/usr/local/文件夹下(关于Linux下压缩解压缩命令可以参考https://www.runoob.com/w3cnote/linux-tar-gz.html)

#tar -zxvf go1.13.6.linux-amd64.tar.gz -C /usr/local/

在/etc/profile文件中配置环境变量,在文件的末尾添加如下几行(大家也可以在/etc/bashrc、./.bashrc等文件中配置,但是在/etc/profile文件中配置后,每次登录bash自动执行环境变量的配置)

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

使用如下命令让配置文件即时生效

source /etc/profile

通过go version命令验证golang是否安装成功

#go version
go version go1.13.6 linux/amd64

最后设置go项目的开发路径,通常情况下,设置该路径为$HOME/go,这就是刚刚设置的GOPATH环境变量的值

mkdir $HOME/go  //随后fabric的源代码就要下载到该目录下,当然还要创建子目录

4. 安装node、npm工具

由于node版本变动很快,而且直接从官网下载很缓慢,同时不同的环境下对node版本的要求也不同,所以建议使用nvm工具(nodejs的版本管理软件)下载安装node

#wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh | bash
#nvm install v8.11.1  //安装node

随后检测安装是否成功:

# node -v && npm -v
v8.11.1
5.6.0

附:nvm常用的命令如下

nvm ls: 列出本地已经安装的node版本
nvm ls-remote : 列出所有的node版本
nvm install --lts : 安装lts版本
nvm install <version> : 安装指定版本
nvm use <version> : 使用指定版本

5. 安装docker

docker是软件运行容器,提供软件运行过程中完整的配置环境,可以以沙箱环境隔离外界运行程序,给软件提供安全的运行环境,fabric的链码就是运行在docker容器中,所以请务必准确下载docker。

详细的docker下载过程参考官网教程

如果之前下载过docker的话,可以按照此命令卸载

# sudo apt-get remove docker docker-engine docker.io containerd runc

然后更新apt包索引:

apt-get update

然后安装 apt 依赖包,用于通过HTTPS来获取仓库:

#  sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

然后添加Docker官方的GPG密钥:

# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

然后使用以下命令设置稳定版仓库:

# sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) \
  stable"

然后再次更新apt:

apt-get update

然后安装最新版本的 Docker Engine-Community 和 containerd:

# sudo apt-get install docker-ce docker-ce-cli containerd.io

 然后测试 Docker 是否安装成功,输入以下命令,打印出以下信息则安装成功:

# docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete                                                                                                                                  Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
Status: Downloaded newer image for hello-world:latest


Hello from Docker!
This message shows that your installation appears to be working correctly.

6. 安装docker-compose

docker-compose 是用于定义和运行多容器 Docker 应用程序的工具。说白了,就是提供一个可以让许多docker实例共同运行、相互协作的环境,这样就可以扩展单一docker实例的作用,从而运行一个较为完整的应用程序。详细的教程可以参考菜鸟教程。

首先下载稳定版compose:

# curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

然后将可执行权限应用于二进制文件:

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

然后创建软链接:

# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

最后测试是否安装成功:

# docker-compose --version
docker-compose version 1.24.1, build 4667896b

 

三. fabric核心模块简介

hyperledger项目有许多子项目,其中的fabric是比较成熟的项目,主要是面向企业提供联盟区块链基础设施,解决行业中某些痛点问题,比如转口贸易欺诈、食品溯源、版权问题等。fabric的部署其实并不复杂,只要理解了fabric各个模块的作用、fabric的基本结构,以及怎样编译运行这些模块,就很容易理解fabric的配置流程与含义。

参考fabric的项目地址。fabric有许多安装运行方式,可以通过docker容器运行,也可以手动编译运行。

fabric是由五个程序模块组成的,分别为peer, orderer, cryptogen, configtxgen, configtxlator,其中peer和orderer是系统模块,其运行贯穿于fabric的整个运行过程;剩下三个模块是工具模块,有一点“用完即扔”的感觉,其中的每一个模块都是可以编译成可运行的可执行文件。这些模块起到了非常重要的作用,fabric的部署过程就是这些模块的配置运行的过程。下面是这些模块的相关说明:

模块名称 功能
peer  主节点模块,存储区块链数据,维护和运行区块链
orderer 对交易进行排序,同时打包交易成块,提供共识服务,是最核心的模块 
cryptogen 负责生成证书和组织结构,一般fabric系统部署的第一个步骤就是配置运行该模块 
configtxgen 生成配置的创始块,以及配置交易 
configtxlator 负责区块和交易的解析 

在后续的内容将会详细配置运行这些模块,所以这里简要记录一下。

 

四. 编译配置fabric环境

1. 编译与安装fabric

首先创建目录,并且下载源代码:

# mkdir $GOPATH/src/github.com/hyperledger
# cd $GOPATH/src/github.com/hyperledger
# git clone https://github.com/hyperledger/fabric.git

 这里需要注意,从GitHub或者官网下载往往速度很慢,建议使用国内的代码托管网站码云,先将GitHub中的fabric仓库导入自己的码云仓库中,然后从码云仓库直接git clone,这样下载速度就会很快。具体登录这里码云官网。下面是从码云下载fabric源码:

# git clone https://gitee.com/yourUserName/fabric.git

然后安装、编译相关的依赖软件(主要是protoc-gen-go),需要注意,这里使用go get -u github.com/golang/protobuf/proto会失败

# cd $GOPATH/src
# git clone https://github.com/golang/protobuf.git
# cd ./protoc-gen-go
# go build    //编译go的protobuf插件
# go install
# mkdir -p $GOPATH/src/github.com/hyperledger/fabric/build/docker/gotools/bin
# cp $GOPATH/bin/protoc-gen-go $GOPATH/src/github.com/hyperledger/fabric/build/docker/gotools/bin

接着,编译fabric模块,进入fabric代码文件夹后,执行以下命令,可以一次性完成五个模块的编译:

# cd $GOPATH/src/github.com/hyperledger/fabric
# make release
# make docker

上述命令执行完成后,会在fabric文件夹下./faric/release/linux-amd64/bin放入编译后的五个模块的二进制文件,下面将这些二进制文件放入系统文件夹下,使得任何路径下都可以使用这些模块:

# cp $GOPATH/src/github.com/hyperledger/fabric/release/linux-amd64/bin/* /usr/local/bin

然后修改文件权限:

# chmod -R 775 /usr/local/bin/peer
# chmod -R 775 /usr/local/bin/orderer
# chmod -R 775 /usr/local/bin/configtxgen
# chmod -R 775 /usr/local/bin/configtxlator
# chmod -R 775 /usr/local/bin/cryptogen

最后执行peer/orderer version等一系列命令,出现版本信息则表示安装成功。