Hyperledger Fabric 环境搭建(1)
1,Fabric的程序模块组成
Fabric不是一个单独的程序而是由一组模块组成,这些模块中的每一个都是一个可独立运行的可执行文件。
(1)peer 主节点模块,负责存储区块链数据,运行维护链码;
(2)orderer 负责对交易进行排序,并将排好序的交易打包成区块;
(3)cryptogen 组织和证书生成模块;
(4)configtxgen 区块和交易生成模块;
(5)configtxlator 区块和交易解析模块。
开发一个Fabric应用都需要这些模块的参与。
2,安装Golang运行环境
安装Fabric之前要先安装Golang的运行环境和相关软件
使用wget命令行下载安装包到linux
wget https://studygolang.com/dl/golang/go1.12.linux-amd64.tar.gz 解压到/usr/local
tar -C /usr/local -xzf go1..linux-amd64.tar.gz
vi /etc/profile 编辑环境变量文件
export GOROOT=/usr/local/go go的安装目录
export PATH=$PATH:$GOROOT/bin 添加到环境比变量
export GOPATH=/root/go 设置go的工作目录
export PATH=$PATH:$GOPATH/BIN
刷新环境变量
source /etc/profile
查看go是否安装成功
go --version
3,安装Docker
https://docs.docker.com/install/linux/docker-ce/centos/
安装docker
curl -sSL https://get.daocloud.io/docker | sh
查看是否下载成功,下载的版本是什么:docker version
开启docker服务:service docker start
查看docker运行状态:sudo service docker status
安装完成后要修改当前用户的权限:
sudo usermod -aG docker 用户名
注销并重新登陆,随后添加DaoCloud镜像(加速器):
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://36051225.m.daocloud.io
重新启动docker:
service docker start
sudo service docker status
把docker设置成开机自启动:
systemctl enable docker
安装docker-compose
ubuntu:
sudo apt-get install python-pip
curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > ~/docker-compose
sudo mv ~/docker-compose /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose centos:
yum -y install epel-release
sudo yum install python-pip
curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > ~/docker-compose
sudo mv ~/docker-compose /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
4,Fabric的两种安装方式
4.1利用源码直接编译
利用已有Makefile文件进行make编译,编译完成后,这些模块就可以直接运行了。
第一步:创建目录并下载代码
mkdir -p $GOPATH/src/github.com/hyperledger
cd $GOPATH/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric.git (或者 git clone https://gerrit.hyperledger.org/r/fabric) 其中$GOPATH为Golang的工作目录
第二步:安装相关依赖软件
go get github.com/golang/protobuf/protoc-gen-go
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
注意:
(1)如果用go get 命令没有反应,可能是网址被屏蔽,参考https://blog.csdn.net/qq_22211217/article/details/101854419解决
我用的是 设置代理 如下命令
go env -w GOPROXY=https://github.com/goproxy
(2)go get下载的文件会自动存放到$GOBIN对应的目录中,如果没有设置GOBIN,则会存放到$GOPATH/bin下面
第三步:编译Fabric模块
进入Fabric源码所在文件夹,执行下面命令可以一次编译完成fabric的5个主要模块。
cd $GOPATH/src/github.com/hyperledger/fabric
make release
编译结果
[root@localhost fabric]# make release
Building release/linux-amd64/bin/configtxgen for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /root/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/configtxgen -tags "" -ldflags "-X github.com/hyperledger/fabric/common/tools/configtxgen/metadata.CommitSHA=8196d66" github.com/hyperledger/fabric/common/tools/configtxgen
Building release/linux-amd64/bin/cryptogen for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /root/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/cryptogen -tags "" -ldflags "-X github.com/hyperledger/fabric/common/tools/cryptogen/metadata.CommitSHA=8196d66" github.com/hyperledger/fabric/common/tools/cryptogen
Building release/linux-amd64/bin/idemixgen for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /root/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/idemixgen -tags "" -ldflags "-X github.com/hyperledger/fabric/common/tools/idemixgen/metadata.CommitSHA=8196d66" github.com/hyperledger/fabric/common/tools/idemixgen
Building release/linux-amd64/bin/discover for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /root/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/discover -tags "" -ldflags "-X github.com/hyperledger/fabric/cmd/discover/metadata.CommitSHA=8196d66" github.com/hyperledger/fabric/cmd/discover
Building release/linux-amd64/bin/configtxlator for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /root/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/configtxlator -tags "" -ldflags "-X github.com/hyperledger/fabric/common/tools/configtxlator/metadata.CommitSHA=8196d66" github.com/hyperledger/fabric/common/tools/configtxlator
Building release/linux-amd64/bin/peer for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /root/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/peer -tags "" -ldflags "-X github.com/hyperledger/fabric/common/metadata.Version=1.4.4 -X github.com/hyperledger/fabric/common/metadata.CommitSHA=8196d66 -X github.com/hyperledger/fabric/common/metadata.BaseVersion=0.4.16 -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" github.com/hyperledger/fabric/peer
Building release/linux-amd64/bin/orderer for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /root/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/orderer -tags "" -ldflags "-X github.com/hyperledger/fabric/common/metadata.Version=1.4.4 -X github.com/hyperledger/fabric/common/metadata.CommitSHA=8196d66 -X github.com/hyperledger/fabric/common/metadata.BaseVersion=0.4.16 -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" github.com/hyperledger/fabric/orderer
[root@localhost fabric]#
再执行 make docker
上述make release和make docker操作完成后,会自动将编译好的二进制文件存放在以下路径中:
$GOPATH/src/github.com/hyperledger/fabric/release/linux-amd64/bin
利用docker images 命令查看生成的docker镜像
第四步:安装Fabric模块
编译完之后,这些模块就可以被运行了,但目前只能在编译文件所在的文件夹中运行这些模块。为了方便使用模块,通过下面命令将这些模块的可执行文件复制到系统目录中,这样就可以再系统的任何路径下运行了。
cp $GOPATH/src/github.com/hyperledger/fabric/release/linux-amd64/bin/* /usr/local/bin/
第五步:安装结果测试
正确显示各个模块的版本信息,并且没有抛出异常,表明Fabric的模块编译和安装正确。
4.2利用docker运行Fabric相关模块
其中docker镜像既可以利用源码自己生成,也可以直接从Docker仓库中下载
4.2.1利用源码生成docker镜像
cd /home/jp/goworkspace/src/github.com/hyperledger/fabric
make docker
结果截图如 第三步:编译Fabric模块 中的截图,即为生成的docker镜像。
4.2.2 从docker仓库中下载Fabric模块的Docker镜像文件
官方文件也提供了批量下载docker镜像的脚本。我们直接运行:(先把前面生成的镜像删掉)
cd $GOPATH/src/github.com/hyperledger/fabric/examples/e2e_cli/
source download-dockerimages.sh -c x86_64-1.0. -f x86_64-1.0.
但是发现我用的fabric1.4竟然没有e2e_cli文件夹
又去github确认了一下
所以还是先切换到1.0完成这个实验,后续再看看新版的用法
git checkout v1.0.0
这样在运行上述脚本,就下载了所需的Fabric 的Docker镜像了。
docker.io/hyperledger/fabric-peer peer节点镜像,安装了peer相关文件 docker.io/hyperledger/fabric-orderer orderer节点镜像,安装了orderer相关文件 docker.io/hyperledger/fabric-couchdb couchdb数据库镜像,可以启动couchdb服务,供peer使用 docker.io/hyperledger/fabric-ccenv 支持GO语言的链码基础镜像,其中安装了chaintool、Go语言的链码shim层。在链码容器生成过程中作为编译环境将链码编译为二进制文件,供链码容器使用,方便保持链码容器自身的轻量化。 docker.io/hyperledger/fabric-javaenv 支持Java语言的链码基础镜像,其中安装了Gradle、maven、java链码的shim层等,可以用来生成java链码镜像。
docker.io/hyperledger/fabric-kafka 可以启动kafka服务,供orderer使用。 docker.io/hyperledger/fabric-tools 安装了相关工具镜像文件,包括cryptogen、configtxgen、configtxlator等,可以作为测试客户端使用。 docker.io/hyperledger/fabric-zookeeper 可以启动zooleeper服务,供orderer的kafka使用 docker.io/hyperledger/fabric-ca 安装了fabric-ca相关文件
接下来就可以搭建运行Fabric网络了
参考:
《区块链开发实战 Hyperledger Fabric关键技术与案例分析》
《区块链原理、设计与应用》
https://docs.docker.com/install/linux/docker-ce/centos/
https://www.cnblogs.com/studyzy/p/7437157.html
Hyperledger Fabric 环境搭建(1)的更多相关文章
- Hyperledger Fabric 环境搭建(2)
上一篇https://www.cnblogs.com/xdyixia/p/11738096.html 介绍了Hyperledger Fabric环境中各种软件安装和源码编译,这一篇介绍快速运行一个简单 ...
- 【推荐】 HyperLedger Fabric环境搭建、测试及注意事项 [详尽指导] [亲测有效]
系统:Ubuntu16.04 LTS 一.环境准备 1.1 Ubuntu下安装 crul sudo apt install curl curl是利用URL语法在命令行方式下工作的开源文件传输工具.它被 ...
- 联盟链初识以及Fabric环境搭建流程
这篇文章首先简单介绍了联盟链是什么,再详细的介绍了Fabric环境搭建的整个流程. 区块链分类: 以参与方式分类,区块链可以分为:公有链.联盟链和私有链. 定义: 我们知道区块链就是一个分布式的,去中 ...
- Hyperledger Fabric 手动搭建【区块链学习三】
Hyperledger Fabric 手动搭建 前面我们学习了区块链是什么.还有自动搭建学习东西我们就要从简单到深入(入门到放弃),现在自动部署已经跑通了接下来就是手动搭建Fabric 网络可以更好的 ...
- Ubuntu下配置Hyperledger Fabric环境
在win10系统的台式机上安装配置Hyperledger Fabric环境 安装Ubuntu 16.04 双系统 镜像下载地址:https://www.ubuntu.com/download/desk ...
- 7.搭建hyperledger fabric环境及启动——2019年12月12日
2019年12月12日13:05:16 声明:从网络中学习整理实践而来. 1.介绍fabric Fabric 是一个面向企业应用的区块链框架,基于 Fabric 的开发可以粗略分为几个层面: 1. 参 ...
- 深入理解Fabric环境搭建的详细过程
博主之前的文章都是教大家怎么快速的搭建一个Fabric的环境,但是其中大量的工作都隐藏到了官方的脚本中,并不方便大家深入理解其中的过程,所以博主这里就将其中的过程一步步分解,方便大家! 前面的准备工作 ...
- 深入理解Fabric环境搭建的详细过程(转)
前面的准备工作我就不用多说了,也就是各种软件和开发环境的安装,安装好以后,我们git clone下来最新的代码,并切换到v1.0.0,并且下载好我们需要使用的docker镜像,也就是到步骤6,接下来我 ...
- Hyperledger Fabric 环境配置
简单说一下 Hyperledger Fabric的配置 1.第一步,安装curl brew install curl 注:没有brew的自行百度(mac) 2. 安装Docker 下载并安装Docke ...
随机推荐
- CSV Data Set Config参数说明
以下是CSV Data Set Config各个参数的简要说明: FileName:即同目录下csv文件的名称 File Encoding: 默认为ANSI Varible Names: 定义文本文件 ...
- Java实现批量下载选中文件功能
1.在action中定义变量 ? 1 2 3 4 5 6 private List<String> downLoadPaths = new ArrayList<String>( ...
- spring boot系列(三)spring boot 配置spring data jpa
数据库使用MySQL,ORM使用spring data jpa 1 因此需要再pom.xml文件中添加相应jar包.如下: <!-- 引入jap --> <dependency> ...
- Python:Base1(数据类型,print语句,变量,定义字符串,raw字符串与多行字符串,Unicode字符串,整数和浮点数运算,布尔类型运算)
1.Python中数据类型: 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据 ...
- URLOS开发基础教程——docker容器的使用方法
URLOS本是基于docker容器运行,在入门URLOS开发之前,我们首先需要掌握docker的相关基础知识,本篇就以docker容器的基本使用方法为例,快速的让大家对docker有一个全面的印象. ...
- 安卓的一些UI美化框架的使用
目录 一.前言 二.Android-Bootstrap 三.Sweet Alert Dialog 四.ExplosionField 一.前言 在这里记录一些用到过的觉得还算不错的UI第三方开源美化框架 ...
- 【Linux开发】编写属于你的第一个Linux内核模块
曾经多少次想要在内核游荡?曾经多少次茫然不知方向?你不要再对着它迷惘,让我们指引你走向前方-- 内核编程常常看起来像是黑魔法,而在亚瑟 C 克拉克的眼中,它八成就是了.Linux内核和它的用户空间是大 ...
- PTA(Basic Level)1077.互评成绩计算
在浙大的计算机专业课中,经常有互评分组报告这个环节.一个组上台介绍自己的工作,其他组在台下为其表现评分.最后这个组的互评成绩是这样计算的:所有其他组的评分中,去掉一个最高分和一个最低分,剩下的分数取平 ...
- PTA(Basic Level)1042.字符统计
请编写程序,找出一段给定文字中出现最频繁的那个英文字母. 输入格式: 输入在一行中给出一个长度不超过 1000 的字符串.字符串由 ASCII 码表中任意可见字符及空格组成,至少包含 1 个英文字母, ...
- 传统Java Web(非Spring Boot)、非Java语言项目接入Spring Cloud方案--temp
技术架构在向spring Cloud转型时,一定会有一些年代较久远的项目,代码已变成天书,这时就希望能在不大规模重构的前提下将这些传统应用接入到Spring Cloud架构体系中作为一个服务以供其它项 ...