本篇是笔者在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等一系列命令,出现版本信息则表示安装成功。