1.环境搭建

1.1 go的按装及配置

1.1.1下载go压缩包

wget https://dl.google.com/go/go1.9.2.linux-amd64.tar.gz

1.1.2 解压

tar -C /usr/local -zxvf go1.9.2.linux-amd64.tar.gz

1.1.3配置环境变量

vi ~/.bash_profile

添加如下内容:

PATH=$PATH:$HOME/bin
export PATH
export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$HOME/go/bin

使环境变量生效

source  ~/.bash_profile

1.2 安装Docker

1.2.1 检查是否已经安装

rpm -qa|grep docker

1.2.2 卸载旧版本

yum remove docker docker-client docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine

1.2.3 安装需要的软件包

yum install -y yum-utils device-mapper-persistent-data lvm2

1.2.4设置 stable 源

yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo

1.2.5 启用 启用 docker-ce-edge和docker-ce-test(可选)

yum-config-manager --enable docker-ce-edge
yum-config-manager --enable docker-ce-tes

1.2.6 安装 Docker CE

yum install docker-ce

1.2.7 启动docker

service docker start

1.2.8 加入开机启动

chkconfig docker on

1.2.9 测试是否安装成功

docker --version

1.2.10 安装docker-compose

curl -L https://github.com/docker/compose/releases/download/1.20.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

1.2.11 测试docker-compose是否安装成功

docker-compose version

1.3 安装python-pip

yum -y install epel-release
yum -y install python-pip

1.4 安装node.js

## root
curl -sL https://rpm.nodesource.com/setup_10.1 | bash -
## no root
curl -sL https://rpm.nodesource.com/setup_10.1 | sudo bash -
yum install -y nodejs

1.5 升级gcc

wget http://ftp.gnu.org/gnu/gcc/gcc-9.1.0/gcc-9.1.0.tar.gz
tar -C /usr/local -xzf gcc-9.1.0.tar.gz
cd /usr/local/gcc-9.1.0
./contrib/download_prerequisites
mkdir build
cd build/
../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
yum groupinstall "Development Tools"
make
make install

1.6 安装npm

$ npm install npm -g
$ npm -v

1.7 fabric下载

1.7.1 下载fabric源码

## 下载源码
$ mkdir -p ~/go/src/github.com/hyperledger
$ cd ~/go/src/github.com/hyperledger
$ git clone https://github.com/hyperledger/fabric.git
## 切换到v1.0.0版本
$ cd ~/go/src/github.com/hyperledger/fabric
$ git checkout v1.0.0

1.7.2 下载 Fabric Docker镜像

$ cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli/
$ source download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0

1.7.3 检查下载的镜像列表

docker images

1.7.4 测试Fabric环境是否成功

cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli
./network_setup.sh up

该指令做了一下操作

1.编译生成Fabric公私钥、证书的程序,程序在目录:fabric/release/linux-amd64/bin

2.基于configtx.yaml生成创世区块和通道相关信息,并保存在channel-artifacts文件夹。

3.基于crypto-config.yaml生成公私钥和证书信息,并保存在crypto-config文件夹中。

4.基于docker-compose-cli.yaml启动1Orderer+4Peer+1CLI的Fabric容器。

5.在CLI启动的时候,会运行scripts/script.sh文件,这个脚本文件包含了创建Channel,加入Channel,安装Example02,运行Example02等功能。

运行完如果出现下图所示,说明整个Fabric网络已经通了.

2.测试Fabric网络

Fabric提供了SDK和CLI两种交互方式,我们使用的是CLI 。

使用官方提供的小例子进行测试,在官方例子中,channel名字是mychannel,链码(智能合约)的名字是mycc。

首先要登录到CLI这个容器中,才能执行Fabric的CLI命令:

docker exec -it cli bash

这时用户名变为root@44084971aff7,当前目录变为/opt/gopath/src/github.com/hyperledger/fabric/peer#,接着可执行peer命令,体验区块链的命令行使用方式。

2.1 查看账户余额

root@44084971aff7:/opt/gopath/src/github.com/hyperledger/fabric/peer#  peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

结果:

Query Result: 90

这里90就是a账户的余额

2.2 调用链码,转账

让b账户向a账户转账10:

peer chaincode invoke -o orderer.example.com:7050  --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem  -C mychannel -n mycc -c '{"Args":["invoke","a","b","20"]}'

再次执行查询(因为转账操作了2次所以此处是50)

root@c259da3de4d1:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

2.3 退出cli容器

直接执行

exit

关闭Fabric

cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli
./network_setup.sh down

3.遇到的问题

3.1 使用wget、curl、git报command not found

  • 原因:未安装wget、curl

  • 解决

    yum install -y wget
    yum install -y curl
    yum install -y git

3.2 安装docker-compose问题

Failed connect to github-production-release-asset-2e65be.s3.amazonaws.com:443; Connection timed out

  • 原因: 该地址(github-production-release-asset-2e65be.s3.amazonaws.com) 需要的一些下载的访问被 国内屏蔽了

  • 解决:在hosts中加配置

    ping github-production-release-asset-2e65be.s3.amazonaws.com
    vi /etc/hosts

    新增如下配置:

    52.216.128.51 github-production-release-asset-2e65be.s3.amazonaws.com

3.3 gcc升级问题

configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.,mpfr2.4.0

 yum install  gmp  gmp-devel  mpfr  mpfr-devel  libmpc  libmpc-devel

3.4 gcc动态库没有替换问题

node: /usr/lib64/libstdc++.so.6: version GLIBCXX_3.4.21' not found (required by node) node: /usr/lib64/libstdc++.so.6: version GLIBCXX_3.4.15' not found (required by node)

node: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node)

运行检查命令

strings /usr/lib64/libstdc++.so.6 | grep GLIBC

查找编译gcc时生成的最新动态库

find / -name "libstdc++.so*"
cd /usr/lib64
rm -rf libstdc++.so.6
ln -s libstdc++.so.6.0.26 libstdc++.so.6
strings /usr/lib64/libstdc++.so.6 | grep GLIBC

3.5 Fabric启动报错1

can't load package: package github.com/hyperledger/fabric/core/chaincode/shim: cannot find package

源码路径不对

go env

把fabric源码放在~/go/src/github.com/hyperledger 目录下

3.6 Fabric启动报错2

Error response from daemon: Container is not running

##查看运行的容器
docker ps -a
## 把失败的重新启动
docker start 44084971aff7

3.7 Fabric启动报错3

Error: Error getting endorser client chaincode: PER:404 - Error trying to connect to local peer

重新关闭网络

./network_setup.sh down mychannel

3.8 测试转账no such file or directory

root@b103ad898190:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /root/go/src/github.com/hyperledger/fabric/examples/e2e_cli/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc -c '{"Args":["invoke","b","a","10"]}'

2020-01-21 10:19:15.752 UTC [msp] GetLocalMSP -> DEBU 001 Returning existing local MSP

2020-01-21 10:19:15.752 UTC [msp] GetDefaultSigningIdentity -> DEBU 002 Obtaining default signing identity

Error: Error getting broadcast client: Error connecting to orderer.example.com:7050 due to open /root/go/src/github.com/hyperledger/fabric/examples/e2e_cli/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem: no such file or directory

根证书不对

参考文档

1.联盟链初识以及Fabric环境搭建流程

2.centos7安装fabric

CentOS7 搭建Fabric 1.0的更多相关文章

  1. CentOS7搭建Hadoop-3.3.0集群手记

    前提 这篇文章是基于Linux系统CentOS7搭建Hadoop-3.3.0分布式集群的详细手记. 基本概念 Hadoop中的HDFS和YARN都是主从架构,主从架构会有一主多从和多主多从两种架构,这 ...

  2. 【linux】【Fabric】Centos7搭建Fabric运行环境

    1.安装jdk1.8配置环境变量 参考:https://www.cnblogs.com/jxd283465/p/11541506.html 2.安装git yum -y install git 3.安 ...

  3. CentOS7搭建Hadoop2.8.0集群及基础操作与测试

    环境说明 示例环境 主机名 IP 角色 系统版本 数据目录 Hadoop版本 master 192.168.174.200 nameNode CentOS Linux release 7.4.1708 ...

  4. centos7搭建单机redis5.0

    目录 1. redis初步安装 2. 配置 3. 设置开机启动(centos6) 3.1 编写启动脚本 3.2 设置权限 3.3 启动测试 3.4 设置开机自启动 4. 设置开机启动(centos7) ...

  5. centos7搭建Fabric基础环境

    一.首先升级centos最新内核 参考https://www.cnblogs.com/sky-cheng/p/12146054.html 二.卸载旧版本docker [root@localhost ~ ...

  6. 快速搭建一个Fabric 1.0的环境

    之前笔者写了一篇Fabric1.0 Beta的部署和Fabric 1.0的多机部署.但是很多人在部署Fabric的时候还是很容易出问题,所以我就再把Fabric 1.0的单机环境搭建讲一下.其实很多内 ...

  7. 基于【CentOS-7+ Ambari 2.7.0 + HDP 3.0】搭建HAWQ数据仓库01 —— 准备环境,搭建本地仓库,安装ambari

    一.集群软硬件环境准备: 操作系统:  centos 7 x86_64.1804 Ambari版本:2.7.0 HDP版本:3.0.0 HAWQ版本:2.3.05台PC作为工作站: ep-bd01 e ...

  8. 基于【CentOS-7+ Ambari 2.7.0 + HDP 3.0】搭建HAWQ数据仓库——操作系统配置,安装必备软件

    注意未经说明,所有本文中所有操作都默认需要作为root用户进行操作. 一.安装zmodem,用于远程上传下载文件,安装gedit,方便重定向到远程windows上编辑文件(通过xlanuch) [ro ...

  9. Ubuntu下搭建Hyperledger Fabric v1.0环境

      多次尝试才正常启动了Fabric,如遇到各种莫名错误,请参考如下一步步严格安装,特别用户权限需要注意. 一.安装Ubuntu16 虚拟机或双系统,虚拟机有VirtualBox或者VMware,Ub ...

随机推荐

  1. PHP判断类型

    is_bool();//判断是否为布尔型   is_float(); //判断是否为浮点型   is_int(); //判断是否为整型   is_numeric(); //判断是否为数值型   is_ ...

  2. springBoot中使用使用junit测试文件上传,以及文件下载接口编写

    本篇文章将介绍如何使junit在springBoot中测试文件的上传,首先先阅读如何在springBoot中进行接口测试. 文件上传操作测试代码 import org.junit.Before; im ...

  3. html根据下拉框选中的值修改背景颜色

    错误的写法 <!doctype html><html><head><meta charset="utf-8"><title&g ...

  4. 一个简单的Web服务器-支持静态资源请求

    目标 实现一个简单的Web服务器,能够根据HTTP请求的URL响应对应的静态资源,如果静态资源不存在则响应404. HttpServer 使用ServerSocket实现的一个服务器,request根 ...

  5. android权限申请执行过程

    弹出的授权对口窗口实际上是一个activity(隐式intent启动上图第二个方块里)(com.android.packageinstaller.permission.ui.Grantpermissi ...

  6. Windows Server Core Remote Manage Hyper-V

    原帖:https://serverfault.com/questions/852144/how-do-i-remotely-manage-hyper-v-2016-standalone-via-win ...

  7. Python3_函数参数传递、可变与不可变对象、变量作用域、函数返回值

    参数传递: 在 python 中,类型属于对象,变量是没有类型的:(变量都仅仅是一个对象的引用,没有类型之分)a=[1,2,3] a="Runoob" 以上代码中,[1,2,3] ...

  8. X-Admin&ABP框架开发-代码生成器

    在日常开发中,有时会遇到一些相似的代码,甚至是只要CV一次,改几个名称,就可以实现功能了,而且总归起来,都可以由一些公用的页面更改而来,因此,结合我日常开发中使用到的页面,封装一个适合自己的代码生成器 ...

  9. Django常用字段及参数、事务、数据库查询优化

    常用字段 注意: Django中没有设置对应char类型的字段,但可以支持自己定义. 自定义对应于数据库的char类型字段: from django.db.models import Field cl ...

  10. zookeeper作配置中心(存储支付信息)

    zookeeper作配置中心(存储敏感信息) 前提:最近在项目中需要用到支付接口,支付宝或者微信支付,根据官方文档,需要配置一些诸如notify-url或者app-private-key等信息,这些信 ...