服务器信息:

  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. Docker 快速搭建 MySQL8 开发环境

    使用 Docker 快速搭建一个 MySQL8 开发环境 步骤 获取镜像 docker pull mysql:8 启动容器,密码 123456,映射 3306 端口 docker run --name ...

  2. java_环境搭建、变量的使用

    java_环境搭建.变量的使用 Java语言开发环境搭建 1. Java虚拟机——JVM JVM(Java Virtual Machine ):Java虚拟机,简称JVM,是运行所有Java程序的假想 ...

  3. Python 为什么能支持任意的真值判断?

    本文出自"Python为什么"系列,请查看全部文章 Python 在涉及真值判断(Truth Value Testing)时,语法很简便. 比如,在判断某个对象是否不为 None ...

  4. mac 安卓生成证书(uniapp项目安卓证书申请)

    mac  安卓生成证书 义务需求: 最近在开发基于uniapp框架的app,到了打包发布的阶段,来尝试打包为安卓的apk安装包.在用HBuild打包的时候需要提供安卓的数字证书(.keystore 文 ...

  5. 金题大战Vol.0 C、树上的等差数列

    金题大战Vol.0 C.树上的等差数列 题目描述 给定一棵包含\(N\)个节点的无根树,节点编号\(1-N\).其中每个节点都具有一个权值,第\(i\)个节点的权值是\(A_i\). 小\(Hi\)希 ...

  6. Maven报错Missing artifact jdk.tools:jdk.tools:jar:1.7

    1.eclipse中Maven项目的pom文件报错: 2.解决方法: 直接在pom.xml中加上一个依赖项目: <dependency>      <groupId>jdk.t ...

  7. 每天都在用String,你真的了解吗?

    1.String概述 java.lang.String 类代表字符串.Java程序中所有的字符串文字(例如"abc")都可以被看作是实现此类的实例 String 中包括用于检查各个 ...

  8. python基础 Day3

    python Day3 1.作业回顾 设定一个理想的数字比如88,让用户输入数字,如果比88大,则显示猜测的结果大:如果比66小,则显示猜测的结果小了,给用户三次猜测机会,如果显示猜测正确退出循环,如 ...

  9. Robot Framework(4)——Selenium2Library关键字

    在第一讲的时候,已经安装了Selenium2Library这个库,这一篇主要来整理介绍一下Selenium2Library中的常用关键字,为我们之后的web自动化打好基础 一.browserManag ...

  10. 数字货币比特币以太坊买卖五档行情数据API接口

    数字货币比特币以太坊买卖五档行情数据API接口       数字货币一般包含比特币BTC.以太坊ETH.瑞波币XRP.泰达币USDT.比特币现金BCH.比特币SV.莱特币LTC.柚子币EOS.OKB. ...