服务器信息:

  cpu:华为鲲鹏

  cpu架构:arm v8

  系统:CenOS-AltArch 7.6

相关工具安装

yum更新

yum update

  

安装vim/gcc/git/curl工具软件

yum install vim

yum install gcc

yum install git

yum install curl

安装pip、python-pip

 这一步根据实际提示去操作,步奏省略。博主升级了python版本到3.7 ,安装了pip3、python-pip...

 可能需要升级openssl,升级openssl可以参照这篇文章:http://www.manongjc.com/detail/14-hnvvaaujxafjzbv.html

 注意:升级python之后,使用pip指令可能报错:https协议不支持,解决如下:

安装docker及docker-compose

 docker安装:

   yum安装跟x86平台安装一样,步奏省略...

   博主的docker安装的是最新稳定版:19.03.5

  docker安装完成后,添加阿里云docker hub镜像 ,执行:

sudo vi /etc/docker/daemon.json

  将以下内容添加到daemon.json中:

    {
      "registry-mirrors": ["https://obou6wyb.mirror.aliyuncs.com"]
    }

  执行以下命令,若不报错则添加成功,并重启docker

systemctl start docker
systemctl daemon-reload
systemctl restart docker

  加入开机启动:

systemctl enable docker

 docker-compose安装:

安装:pip install docker-compose
版本查看:docker-compose version

安装go

  注意:需要先找到自己CPU架构对应的go版本

  go对应版本查看:https://studygolang.com/dl

  博主安装的版本:

# 下载go1.13.6.linux-arm64.tar.gz并将其解压到指定目录(此处为/usr/local)

wget https://studygolang.com/dl/golang/go1.13.6.linux-arm64.tar.gz
tar xzvf go1.13.6.linux-arm64.tar.gz -C /usr/local

#修改系统环境变量

vi /etc/profile

打开文件后在最后面添加:

# 使环境变量生效

source  /etc/profile

# 验证:go version

安装 protobuf

  protobuf安装

  博主安装的最新版本3.11.2

wget https://github.com/google/protobuf/releases/download/v3.11.2/protobuf-all-3.11.2.tar.gz

./autogen.sh

./configure

make

make check

make install

  安装protobuf-compiler

yum install protobuf-compiler

go get -u github.com/golang/protobuf/protoc-gen-go

#命令执行后会在$GOPATH/bin目录下发现这个工具

  

安装一些依赖库

 yum install libc6-dev libltdl3-dev python-setuptools

至此一切准备工作就绪,下面将进行与fabric相关的开发工作。

  安装Node.js

  Node.js为选装内容,为支持Node.js的 SDK做准备。

  1. yum install nodejs
  2. yum install npm

Fabric环境搭建

  源码下载

    新建源码工程目录,执行

      mkdir -p $GOPATH/src/github.com/hyperledger/
    进入hyperledger目录,通过git clone fabric源代码,下载速度较慢,根据网络情况该部分代码需要下载一个小时左右。

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

      注意:完成之后需要切换tag:具体操作百度自行切换,博主选择的tag是   v0.4.13

    下载fabric 项目源码(fabric-samples)

      git clone https://github.com/hyperledger/fabric-samples.git

      注意:完成之后需要切换稳定版的分支:git checkout -b sample v1.4.0
    下载docker base image镜像源码

      git clone https://github.com/hyperledger/fabric-baseimage.git
    下载fabric ca源代码

      git clone https://github.com/hyperledger/fabric-ca.git

源码编译

由于fabric官方不支持ARM内核的二进制文件以及docker镜像(docker pull 镜像失败),因此需要我们自己编译,以下内容为二进制文件和镜像编译过程,其中涉及文件修改的部分,请对照git diff截图根据上下文查看具体位置,标准行号可能会有出入。

docker base image镜像编译

  1、cd fabric-baseimage
  2、修改Makeflie文件,在41行出增加一行:DOCKER_BASE_arm64=aarch64/ubuntu:xenial

  3、修改images/couchdb/Dockerfile.in文件,在112行处增加如下内容:

     && chmod +w bin/rebar \
     && mv bin/rebar bin/rebar-orig \
     && cd bin \
     && curl -fSL https://github.com/rebar/rebar/wiki/rebar --output rebar \
     && chmod +x rebar \
     && cd .. \

  4、修改scripts/common/setup.sh文件,在73行处做如下修改:

  注释掉:NODE_PKG=node-v$NODE_VER-linux-$ARCH.tar.gz

  添加:NODE_PKG=node-v$NODE_VER-linux-arm64.tar.gz

  5、执行 make 编译docker镜像,时间较长,大约6-8个小时,中间可能会因为网络原因中断,再次执行make即可。编译成功执行docker images 查看是否编译成功。

fabric源码编译

cd fabric

修改Makefile文件,在114行处做如下修改。

  1. #all: native docker checks
  2. all: native docker #checks

执行make,大约需要1-2个小时,编译成功执行docker images 查看是否编译成功。

二进制文件编译

  修改Makefile文件

  在100行最右添加:linux-arm64

  在350行后添加如下内容:

    release/linux-arm64: GOARCH=arm64
    release/linux-arm64: $(patsubst %,release/linux-arm64/bin/%, $(RELEASE_PKGS))

执行 make release

成功之后会在release/linux-arm64/bin目录下生成二进制文件,然后把这些二进制文件拷贝到gopath/bin目录下。

编译fabric-ca

  如果没有用到fabric-ca,当前步奏可以省略

  修改Makefile文件,在75行处做如下修改。

    all: rename docker unit-tests
    all: rename docker #unit-tests

执行make,编译成功后执行docker images 命令查看编译是否成功。

编译fabric-ca的二进制文件

  这一步,博主没有操作,因为没用到fabric-ca工具,省略

结果测试

  进入项目代码目录/fabric-samples/first-network,执行:

./byfn.sh up

  出现以下结果,证明安装成功。

  问题纪要:

    1、docker-compose not  find....

    解决:找到docker-compose文件所在路径,配置环境变量(临时/永久),博主配置的临时环境。

  

    2、./byfn.sh启动时,提示如下异常:

   解决:/release/linux-arm64/bin/目录下生成的所有二进制文件拷贝到fabric-samples/bin目录下

  重要采坑点:

  问题一:fabric目录下执行make指令,可能会抛出找不到某个指定的docker镜像异常

    解决:vi   Makefile

    在下图位置修改成跟docker镜像相同的TAG

  问题二:在fabric目录下执行二进制编译命令:make release时,会抛出如下异常

  解决办法如下:

基于arm v8搭建区块链环境的更多相关文章

  1. 基于 Jenkins 快速搭建持续集成环境--转

    源地址:http://www.ibm.com/developerworks/cn/java/j-lo-jenkins/ 持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础 ...

  2. hyperledger explorer 结合 fabric1.4 搭建 区块链浏览器 踩坑记录

    博主通过这篇博客的步骤搭建区块链浏览器:https://blog.csdn.net/qq_32675427/article/details/99946945 进行到下面这一步时出现各种异常,浪费了博主 ...

  3. Python实现一条基于POS算法的区块链

    区块链中的共识算法 在比特币公链架构解析中,就曾提到过为了实现去中介化的设计,比特币设计了一套共识协议,并通过此协议来保证系统的稳定性和防攻击性. 并且我们知道,截止目前使用最广泛,也是最被大家接受的 ...

  4. 基于 Webpack 4 搭建 Vue 开发环境

    自从工作之后,就已经很久没有写过博客了.时间被分割得比较碎,积累了一段时间的学习成果,才写下了这篇博客. 之前有写过 Webpack4 的文章,但是都比较偏入门,唯一的一篇实战篇 -- 基于Webpa ...

  5. [转] 基于Gitlab CI搭建持续集成环境

    [From] https://blog.csdn.net/wGL3k77y9fR1k61T1aS/article/details/78798577 前言 本文是在12月12号迅雷@赵兵在前端早读课第三 ...

  6. 基于 Jenkins 快速搭建持续集成环境

      什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Agile) 在软件工程领域越来越红火 ...

  7. python搭建区块链

    #!/usr/bin/env python # encoding: utf-8 ''' 我们要创建一个 Blockchain 类 ,他的构造函数创建了一个初始化的空列表(要存储我们的区块链),并且另一 ...

  8. 基于ARM的RealView MDK开发环境

    RealView MDK可以对各种嵌入式处理器的软件开发工具.这么高端,着实很吸引我,ADS12还不知道怎么搞,居然还有这么高端的,但是还是得了解一下唉.洗这个自动配 置启动代码,集成Flash烧写模 ...

  9. 基于jupyter lab搭建网页编程环境并添加自定义python kernel和matlab kernel以及plotly的使用

    内容转载自我的博客 目录 说明 1. 创建虚拟环境jupyter 2. 安装nodejs(用于jupyterlab安装扩展) 3. 安装pip包 4. 使用jupyterlab 5. 配置jupyte ...

随机推荐

  1. 牛客 51011 可达性统计(拓扑排序,bitset)

    牛客 51011 可达性统计(拓扑排序,bitset) 题意: 给一个 n个点,m条边的有向无环图,分别统计每个点出发能够到达的点的数量(包括自身) \(n,m\le30000\). 样例: 10 1 ...

  2. ALGEBRA-1 向量空间

    向量空间对加法封闭 对数乘封闭 直和:表示的唯一性

  3. C#LeetCode刷题-排序

    排序篇 # 题名 刷题 通过率 难度 56 合并区间   31.2% 中等 57 插入区间   30.4% 困难 75 颜色分类   48.6% 中等 147 对链表进行插入排序   50.7% 中等 ...

  4. C#LeetCode刷题之#387-字符串中的第一个唯一字符(First Unique Character in a String)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3939 访问. 给定一个字符串,找到它的第一个不重复的字符,并返回 ...

  5. C#LeetCode刷题之#888-公平的糖果交换(Fair Candy Swap)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3758 访问. 爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝 ...

  6. JavaSwing关于GridBagLayout(网格袋布局)的使用

    下面的链接有初步的介绍: https://blog.csdn.net/xietansheng/article/details/72814552 关于GridBagConstraints: GridBa ...

  7. HTTP基本原理-Network各列标签的含义

    第一列 Name:请求的名称,一般会将URL的最后一部分内容当作名称 第二列 Status:响应的状态码,显示为 200,则代表相应是正常的.通过状态码,我们可以判断发送了请求之后是否得到了正常的相应 ...

  8. Mysql 如何实现全文检索,关键词跑分

    一.前言 今天一个同事问我,如何使用 Mysql 实现类似于 ElasticSearch 的全文检索功能,并且对检索关键词跑分?我当时脑子里立马产生了疑问?为啥不直接用es呢?简单好用还贼快.但是听他 ...

  9. 如何简洁优雅地部署PostgreSQL和Pgweb?

    本文转自Rancher Labs 介绍PostgreSQL和Pgweb PostgreSQL是一款以可靠性和性能为人所熟知的开源数据库.它在很多行业和应用程序中都有应用,尤其是web开发人员的最爱.从 ...

  10. wordpress个人常用标签调用

    wordpress常见标签调用,老是容易忘记,又要找半天,干脆搬到网站上. <?php bloginfo('name');?>网站名称 url <?php echo home_url ...