hyperledger/fabric-区块链快速入门教程+错误解决——良好用户体验

目录

包括前期的操作系统环境、前期的软件获取、前期的项目源码获取、中期的测试、最后可能遇到的问题和解决方案。PS:本文所说的网络问题,均无任何含义,只是网络问题。

操作系统

我使用的是deepin 20Beta,它比较适合习惯用windows操作系统的用户。

  1. 包括了很多win的软件如vscode、微信和qq等 ,基本上和在win没太大区别;
  2. Deepin中包括了自己的u盘启动器和镜像,按照教程完全 装机ok
  3. Deepin的UI非常舒服,自带特效;
  4. Deepin和Ubuntu类似,相关操作均通用,无使用难度;
  5. Deepin开源,安全可靠;
  6. Deepin为国产,现有较好的软件生态,感觉ok;
    当然其他linux均可
    在deepin操作系统20Beta

linux内核版本:Linux version 5.3.0-3-amd64

软件安装

作为前期的准备,我们需要安装gitgodocker三个软件。git用于获取源码,go用于编译,docker作为容器获取镜像。

git 安装

hyperledger的源码是在github上,所以需要用git进行获取,而系统默认无git,安装就完事了。注意,以下所有代码均默认已有root权限

// 安装代码如下
// 获取root权限,输入root密码回车即可
sudo su
// deepin安装git,注意,如果是centos,用yum install +软件名
apt-get install git
//没报错即安装完成

go安装

hyperledger的fabric采用go语言编写,所以需要先下载go语言安装包:
由于网络问题,我们选择并点击go语言中文网获取linux的安装包,右键获取链接
打开终端,输入以下命令获取:

// 也可以下载下来进行解压,都行
//2020-08-07,此时链接可用
wget https://studygolang.com/dl/golang/go1.14.6.linux-amd64.tar.gz
//在get到go语言的安装包后解压到/usr/local/software下
// 先新建/usr/local/software文件夹再解压
mkdir /usr/local/software
tar -zxvf go1.14.6.linux-amd64.tar.gz -C /usr/local/software

到此时,go已经解压完成在/usr/local/software/go文件夹中

docker安装

hyperledger使用docker打包应用为镜像进行移植,使得所有的客户端均可获取到每个版本对应的镜像。
Deepin的安装教程类似Ubuntu的安装,参考教程

// 安装代码如下
// 先更新本地的软件源,使用中科大的
cp /etc/apt/sources.list /etc/apt/sources.list.bak
sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
apt update
// 更新完成后先安装需要的包,共5个
apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
// 由于安装docker需要类似先注册一下,所以先添加 Docker 的官方 GPG 密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
// 添加 Docker-ce 软件源
add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable"
// 再次更新并安装
apt-get update
apt-get install docker-ce
//设置开机自启动
systemctl enable docker
systemctl start docker
//没报错即安装完成

源码获取

hyperledger

地址:https://github.com/hyperledger
我们需要获取两个子项目:fabricfabric-samples,fabric通过编译成二进制文件,提供给其他子项目使用。
但在实际过程中我们实际上只会用到了一个子项目:fabric-samples
fabric-samples
先通过git获取到这两个子项目的源码:
hyperledger/fabric-samples为例:
项目链接
具体的代码如下:
fabric-samples的链接:https://github.com/hyperledger/fabric-samples.git
fabric的链接:https://github.com/hyperledger/fabric.git

//2020-08-07
// 注意git clone 下来的项目是在你目前所在的目录下,所以我们需要先进入对应的目录再git
// 我们在根目录/下创建了个workspace,一个go用于以后的go开发路径,并继续创建github.com作为存放git项目的文件目录
mkdir /workspace \
/workspace/go /workspace/go/bin \
/workspace/github.com \
/workspace/github.com/hyperledger 
// 进入目录/workspace/github.com/hyperledger/
cd /workspace/github.com/hyperledger/
// 获取源码,由于网络问题,会有点慢
git clone https://github.com/hyperledger/fabric.git
git clone https://github.com/hyperledger/fabric-samples.git
// 注意,通过这种方式获取的是master的,也就是最新的源码
// 获取完成后更改权限
chmod 777 -R /workspace/github.com/hyperledger/

环境配置

当源码获取完成后,前期安装的软件需要进行环境配置

  1. go的环境配置:
    修改/etc/profile文件,将go的路径加入,代码如下
// vim进行修改/etc/profile
vim /etc/profile
// 按i并移动光标在最后添加如下内容:
#workspace
export WORKSPACE=/workspace
#go
export GOROOT=/usr/local/software/go
export GOBIN=$GOROOT/bin
export GOPATH=$WORKSPACE/go
#hyperledger
export FABRIC=$WORKSPACE/github.com/hyperledger
#path
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin:$FABRIC/fabric-samples/bin
#END
// 添加完成按esc并输入:wq进行保存
// 修改生效
source /etc/profile

当修改完成后,通过输入 go version测试,结果如下
go version
2. docker添加镜像加速器
由于国内网络问题,当通过docker获取镜像时,往往速度不如人意(谁试谁知道)这时候镜像加速器让你感受到网速的美妙:
以阿里云镜像加速器为例:通过搜索容器镜像服务找到最下面的镜像加速器,而右边则是你的地址。
阿里云镜像加速器

// 具体教程可参考上图
mkdir /etc/docker
vim /etc/docker/daemon.json
// 添加你的加速器地址
{
    
    "registry-mirrors":["https://xxxx.mirror.aliyuncs.com"]}
// 保存并退出
systemctl daemon-reload
systemctl restart docker

完成后输入 docker version测试,结果如下,说明docker正常启动
客户端
服务端

镜像获取

当添加完成加速器后,可以去https://hub.docker.com/u/hyperledger/来获取hyperledger的docker镜像。
我们需要以下镜像:
所需镜像
hyperledger/fabric-peer为例,https://hub.docker.com/r/hyperledger/fabric-peer
hyperledger/fabric-peer
点击进入即可获取fabric-peer的镜像,通过右边代码进行获取
获取方式

// 输入复制代码,即可pull对应的镜像文件
docker pull hyperledger/fabric-peer
// 所有的镜像均可按此方式进行

注:官方给了一个脚本bootstrap.sh(具体路径如下图),可以通过执行此文件来获取所有的镜像。但是,由于网络问题,执行此文件通常会以失败告终。只能说,官方的想法是很好,但是网络问题,无解。所以还是老老实实的一个一个pull。
bootstrap.sh
通过pull相关的镜像文件,最后通过docker images进行查看。如果出现的镜像和所需镜像均吻合,则镜像下载完成。
至此,基本上所有的文件都已经准备完毕。开始区块链的入门吧!

入门测试

我们之前git了两个子项目,fabricfabric-samples,先进入fabric-samples来看看如何上手吧。

fabric-samples

fabric-samples中包括了很多,但是作为入门我也不清楚,先进入test-network来开始入门的测试
注意,我们的是最新的版本,而网上的教程大多是V1.0时候的fabric-samples,所以会出现比如测试路径名称不同:
比如当你选择fabric-samples版本为1.0时,显示的可执行文件为byfn.sh,如下图所示
release-1.0
而如果是master(2020-08-07)时
test-network
进入后可以看到一个可执行文件network.sh
test-network

releas-1.0

具体的获取方法如上,只是注意需要修改镜像对应的版本,即pull时添加上对应的tag即可
加上tag

开始测试

命令行进入此路径执行此文件

// 防止万一,直接绝对路径执行
./$FABRIC/fabric-samples/test-network/xxx.sh
releas-1.0

如果是releas-1.0版本,即网上常见的版本时,通过./byfn.sh执行时,显示常用的3个命令-up-down-generate
./byfn.sh
通过./byfn.sh generate执行区块链网络创建
常用命令
而在创建完成后即可通过./byfn.sh up开始区块链的网络。这里报错,说明没有安装docker-compse安装即可
出现错误
重新通过./byfn.sh up开始区块链的网络,一切正常显示:START
重新开始
区块链网络搭建完成,添加了一个名为mychannel的通道,并添加了两个用户a和b,完成了交易,最后查询query a的账户,由原来的100变为现在的90.
最终结束
此时docker images查看docker 镜像,可以看到多出3个测试镜像。
docker镜像

master(2.2.0)

查看执行结果,红色部分为翻译
./network.sh 包括以下几个执行命令
network.sh说明通过 ./network.sh up createChannel -c testchannel 来新建并加入一个名为testchannel的通道
新建通道最后结果:
完成新建

智能合约

这里通过peer相关的命令行来手动完成交易:

  1. 先新建一名为channel1的通道,其中包含a用户和b用户,其初始余额为100和200;
  2. 通过query查询a此时的余额,返回结果100,说明初始化成功;
  3. 通过invoke来新建一场交易记录,调用智能合约example02,完成a向b转10的操作;
  4. 再次query查询a此时余额,返回结果90,说明交易完成。

具体细节如下图:
在这里插入图片描述

fabric

fabric的结构包括:网络、通道、orderer、peer和链码chaincode。
各个部分间的关系如下图所示。在一个大的区块链网络中,存在多个peer 节点,不同节点间通过channel进行交易,并通过链码(智能合约)对自身账本进行读写等操作,并将修改后的交易信息交给orderer节点进行排序,orderer节点确定交易是否可行,并将最终的正确交易数据排好序,发送至各个peer节点,完成所有节点账本的同步。
区块链网络

相关错误与解决方案

fabric-samples测试出错

cryptogen文件不存在

当我们执行例子中的可执行文件时,显示没有二进制文件:

Starting nodes with CLI timeout of '5' tries and CLI delay of '3' seconds and using database 'leveldb' with crypto from 'cryptogen'

ERROR! Peer binary and configuration files not found..

具体出错

解决方法:获取二进制文件

  1. make release
    这里是说明fabric的作用,进入fabric文件,看到有个Makefile文件,通过make release可以编译出二进制文件,输出到$GOPATH下的bin/目录中,但是,由于网络问题,可能无法编译成功
    fabric
  2. ./bootstrap.sh
    官方在fabric/scripts/中设置了脚本文件:bootstrap.sh,可以获取镜像、二进制文件和范例,但是由于网络问题,会出现无法下载的情况。
  3. 自行下载(推荐)
    打开bootstrap.sh文件,我们可以看到里面有二进制对应的url:
    bootstrap.sh
    获取对应的地址:https://github.com/hyperledger/fabric/releaseshttps://github.com/hyperledger/fabric-ca/releases/,通过这便可获取对应版本的二进制文件。
    当然这里网络仍然存在问题,我将各个版本的二进制文件均下载上传至蓝奏云,有需要可自取:密码:fabric
    fabric/ca1.5以上版本:https://hyperledger.lanzous.com/b01hlg8gf
    fabric/ca1.1-1.5版本:https://hyperledger.lanzous.com/b01hlg8ti
    fabric/ca1.1以下版本:https://hyperledger.lanzous.com/b01hlg90f
查看对应版本

通过fabric/scripts/bootstrap.sh进行查看
如果是git master的版本时,打开进入master对应的bootstrap.sh,可以看到fabric的版本为:VERSION=2.2.0,fabric-ca的版本为:CA_VERSION=1.4.8
对应版本
于是通过进入fabric/ca1.5以上版本:https://hyperledger.lanzous.com/b01hlg8gf和fabric/ca1.1-1.5版本:https://hyperledger.lanzous.com/b01hlg8ti下载fabric和fabric-ca的对应版本二进制文件并解压到本地的fabric-samples即可
fabric对应版本二进制文件下载
fabric-ca的对应版本二进制文件

修改版本

进入本地目录修改版本

cd /workspace/github.com/hyperledger/fabric
// 查看目前的git对应版本
git branch -a
// 当显示已有的版本后,可以修改对应的版本
// git checkout +xxx
// 如修改为release-2.0版本
git checkout release-2.0

git显示并修改版本

docker image does not match the version

错误代码:

ERROR! Fabric Docker image version of x.x.x does not match the versions supported by the test network.

报错显示:
docker版本不一致

解决方案

这里就先查看docker的镜像文件,看看是不是没有对应的版本镜像就行。

docker images
// 发现的确没有2.2.0版本的镜像
// 那就很简单
// pull + 路径 + tag,看哪些不是2.2的,pull就是了
pull hyperledger/fabric-tools:2.2
// 如果镜像里出现其他的,可以通过
// docker rmi + 镜像ID 
// 进行删除

注意,这种情况下可能会出现:同名同id不同tag的镜像需要删除:
参考教程:https://blog.csdn.net/qq_37674858/article/details/80282068?utm_medium=distribute.pc_relevant.none-task-blog-baidulandingword-1&spm=1001.2101.3001.4242
通过docker rmi 镜像名称:镜像tag

// 例子:删除2.2版本,留下2.2.0版本
docker rmi hyperledger/fabric-ccenv:2.2

具体如图所示:
docker镜像
或者一个比较直接的方法:修改network.sh内容,将其中对image的tag进行直接指定:修改此处:#default image tag
修改默认tag

猜你喜欢

转载自blog.csdn.net/jack_zj123/article/details/107869393
今日推荐