当前位置: 首页 > news >正文

Ubuntu22.04手动安装fabric release-2.5版本

这个过程稍微有点复杂,但完整操作完成以后会对Fabric网络有更加深入的理解,方便后续自己手动搭建Fabric网络。这个过程需要手动逐个下载Fabric源代码、使用命令下载Fabric镜像和用Git下载例子程序。

Fabric源代码主要用途是用来编译cryptogen、configtxgen及configtxlator。 使用命令下载必要的Fabric镜像,基本镜像有peer、orderer、ca、tools、ccenv。例子是官方提供的Fabric案例。

1. 下载源码

将Fabric 代码按照Go 语言推荐方式进行存放,创建目录结构并切换到该目录下。具体命令如下:

# 创建目录
$ mkdir -p $GOPATH/src/github.com/Hyperledger
# 切换目录
cd $GOPATH/src/github.com/Hyperledger
# 下载fabric源码
git clone https://github.com/hyperledger/fabric.git
# 切换到fabric目录
cd fabric
# 切换到release-2.5 golang 需要1.19版本以上
git checkout -b release-2.5 origin/release-2.5

$GOPATH 为环境变量,具体指向的目录可通过echo $GOPATH 查询。

2.编译辅助工具

在 Linux 系统中,make 是一个用于自动化编译和构建软件的工具。它使用一个名为 Makefile 的配置文件来指导如何编译和链接程序。以下是 make 的一些关键点介绍:

什么是 Makefile?

Makefile 是一个包含了一系列指令的文本文件,这些指令定义了如何编译和链接程序。它允许开发者指定源文件、编译器选项、库依赖等,然后 make 根据这些指令自动执行构建过程。

Makefile 的基本结构

一个典型的 Makefile 包含以下部分:

  • 目标(Targets):通常是文件名,表示构建的结果,如可执行文件或对象文件。
  • 依赖(Dependencies):目标文件依赖的源文件或其他目标。
  • 规则(Rules):如何从依赖生成目标的命令序列。

使用 Makefile 的好处

  1. 自动化make 根据 Makefile 中定义的规则自动执行构建过程,无需手动编译和链接。
  2. 可重用性Makefile 可以被重复用于不同的项目,只需适当修改。
  3. 依赖管理make 可以检测文件的修改时间戳,只重新构建那些自上次构建以来已经发生变化的部分。
  4. 可配置性:通过参数和变量,Makefile 可以灵活地适应不同的构建需求。

基本的 make 命令

  • make:没有参数时,make 会尝试构建第一个目标。
  • make all:构建 Makefile 中定义的所有目标。
  • make clean:通常用于删除所有由 make 生成的文件,以便从头开始一个干净的构建。
  • make -jN-jN 参数允许 make 并行构建,N 是并行作业的数量。

示例 Makefile

# 定义编译器
CC=gcc# 定义编译选项
CFLAGS=-Wall -g# 定义目标
all: my_program# 目标依赖于源文件
my_program: main.o foo.o bar.o$(CC) $^ -o $@# 从 .c 文件生成 .o 文件的规则
%.o: %.c$(CC) $(CFLAGS) -c $< -o $@# 伪目标,用于清理构建文件
clean:rm -f my_program *.o

在这个示例中:

  • CC 变量定义了使用的编译器。
  • CFLAGS 变量定义了编译选项。
  • all 目标定义了默认的构建目标。
  • my_program 目标依赖于 main.ofoo.obar.o 这些对象文件。
  • %.o: %.c 规则定义了如何从 .c 文件生成 .o 文件。
  • clean 伪目标定义了如何清理构建过程中生成的文件。

make 是 Linux 和其他 Unix-like 系统上的一个强大工具,广泛用于软件开发和系统管理中。

make编译fabric

进入到fabric目录下,执行如下命令:

cd fabric
#生成组织结构和身份文件
$ make cryptogen
#生成配置区块和配置交易
$ make configtxgen
# 解读配置信息
$ make configtxlator

编译完成后,我们就会在/optgo/bin目录下看到cryptogen、configtxgen和configtxlator三个工具。

3.下载镜像文件

Docker镜像可以从源代码编译生成,也可以从DockerHub仓库中下载。目前Fabric的镜像有十几个,本教程用到的主要镜像文件如下:

  • hyperledger/ fabric-ca # fabric-ca 镜像
  • hyperledger/ fabric-tools # 安装了peer 、cryptogen、configtxgen 等,可作为测试客户端使用支持
  • hyperledger/fabric-ccenv #go语言的链码基础镜像,其中安装了chaintool 、Go 语言的链码shim 层
  • hyperledger/ fabric-orderer #orderer节点镜像
  • hyperledger/ fabric-peer #peer节点镜像

如果我们没有对Fabric源码进行修改,可以直接从Dockerhub拉取相关镜像,命令格式为: Docker pull <IMAGE_NAME:TAG>

要拉取使用到的镜像可以使用如下命令:

ARCH=x86_64
IMAGE_TAG=2.5
CA_VERSION=1.5.12# pull imagesdocker pull hyperledger/fabric-peer:$IMAGE_TAG \
&& docker pull hyperledger/fabric-orderer:$IMAGE_TAG \
&& docker pull hyperledger/fabric-ca:$CA_VERSION \
&& docker pull hyperledger/fabric-tools:$IMAGE_TAG \
&& docker pull hyperledger/fabric-ccenv:$IMAGE_TAG # add fabric-peer fabric-orderer fabric-ca fabric-toolsdocker tag  hyperledger/fabric-peer:$IMAGE_TAG hyperledger/fabric-peer \
docker tag  hyperledger/fabric-orderer:$IMAGE_TAG hyperledger/fabric-orderer \
docker tag  hyperledger/fabric-ca:$CA_VERSION hyperledger/fabric-ca \
docker tag  hyperledger/fabric-tools:$IMAGE_TAG hyperledger/fabric-tools

成功执行完命令之后,输入docker images就会出现如下镜像:
在这里插入图片描述

4. 下载例子程序

进入到Ubuntu用户目录下,输入以下命令下载例子程序,并切换与镜像文件相同的release-2.2版本(还没有release-2.5分支),确保程序可以正常运行。

# clone the hyperledger/fabric-samples repository
git clone https://github.com/hyperledger/fabric-samples.gitgit checkout -b release-2.2 origin/release-2.2

进入到fabric-examples目录下,可以看到fabcar和commercial paper两个例子,可以参考官方文档进行学习。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【智能数据分析平台】开发文档
  • 20240728 每日AI必读资讯
  • 基于JSP、java、Tomcat三者的项目实战--校园交易网(3)主页
  • 【前端 12】js事件绑定
  • openLayer(一):扇形绘制和旋转
  • 【音视频SDL2入门】创建第一个窗口
  • 从零搭建pytorch模型教程(八)实践部分(二)目标检测数据集格式转换
  • 函数初体验
  • Java8-求两个集合取交集
  • whaler_通过镜像导出dockerfile
  • 【我的OpenGL学习进阶之旅】讲一讲GL_TEXTURE_2D和GL_TEXTURE_EXTERNAL_OES的区别
  • 【Linux】管道通信和 system V 通信
  • 独占电脑资源来执行一个应用
  • 1111111111111111111111
  • uni-app全局文件与常用API
  • [NodeJS] 关于Buffer
  • [译]Python中的类属性与实例属性的区别
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【翻译】babel对TC39装饰器草案的实现
  • Fastjson的基本使用方法大全
  • JS 面试题总结
  • SpingCloudBus整合RabbitMQ
  • 如何用vue打造一个移动端音乐播放器
  • 什么是Javascript函数节流?
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • FaaS 的简单实践
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #QT项目实战(天气预报)
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (C语言)球球大作战
  • (LeetCode 49)Anagrams
  • (Qt) 默认QtWidget应用包含什么?
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!
  • (转)Sublime Text3配置Lua运行环境
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (转载)(官方)UE4--图像编程----着色器开发
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .Net MVC + EF搭建学生管理系统
  • .NET周刊【7月第4期 2024-07-28】
  • [17]JAVAEE-HTTP协议
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [AIGC] Redis基础命令集详细介绍
  • [Algorithm][动态规划][简单多状态DP问题][按摩师][打家劫舍Ⅱ][删除并获得点数][粉刷房子]详细讲解
  • [CISCN2021 Quals]upload(PNG-IDAT块嵌入马)
  • [GN] Vue3.2 快速上手 ---- 核心语法2
  • [GXYCTF2019]BabySQli1
  • [HUBUCTF 2022 新生赛]
  • [IE技巧] 如何关闭Windows Server版IE的安全限制
  • [Java] 什么是IoC?什么是DI?它们的区别是什么?