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. H3C FTP配置示例

  2. 解决从旧格式的 csproj 迁移到新格式的 csproj 格式 AssemblyInfo 文件值重复问题

    现在很多小伙伴开始使用了 dotnet core 项目,但是如果是从以前的 dotnet framework 的项目修改为 dotnet core 项目格式,会发现编译的时候出现了 AssemblyI ...

  3. Vue基础练习之Todo List

    <body> <div id = "app"> <input type="text" v-model="inputVal ...

  4. linux进程延迟

    #include <linux/wait.h> long wait_event_interruptible_timeout(wait_queue_head_t *q, condition, ...

  5. linux测试 scullpipe 驱动

    我们已经见到了 scullpipe 驱动如何实现阻塞 I/O. 如果你想试一试, 这个驱动的源码 可在剩下的本书例子中找到. 阻塞 I/O 的动作可通过打开 2 个窗口见到. 第一个可运行 一个命令诸 ...

  6. mysql报错:java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone.

    mybatis链接mysql,启动服务报错: java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecogni ...

  7. 天使玩偶/SJY摆棋子

    P4169 [Violet]天使玩偶/SJY摆棋子 CDQ分治的题目. 我们发现题目要我们求的\(|A_x-B_x|+|A_y-B_y|\)的绝对值号比较恶心. 试想一下怎么去掉 如果所有的点都在我们 ...

  8. CF1045G AI robots

    CF1045G AI robots 题目大意就不说了 这道题可以用CDQ分治做 但是,如何选择CDQ分治的维度一直是CDQ分治的难点所在 这道题我们有三种选择 1.让智商高的数智商低的 2.让看的近的 ...

  9. Openstack生产环境部署(一)

  10. (1)51单片机NOP指令

    提问:什么是NOP指令?干什么用的?单片机程序里执行一条nop指令需要多长时间? (1)一个NOP就是一个机器周期 (2)空指令,延时一个机器周期 (3)这个与单片机型号.指令类型和使用的晶振频率有关 ...