赞
踩
包括前期的操作系统环境、前期的软件获取、前期的项目源码获取、中期的测试、最后可能遇到的问题和解决方案。PS:本文所说的网络问题,均无任何含义,只是网络问题。
我使用的是deepin 20Beta,它比较适合习惯用windows操作系统的用户。
linux内核版本:Linux version 5.3.0-3-amd64
作为前期的准备,我们需要安装git、go和docker三个软件。git用于获取源码,go用于编译,docker作为容器获取镜像。
hyperledger的源码是在github上,所以需要用git进行获取,而系统默认无git,安装就完事了。注意,以下所有代码均默认已有root权限
// 安装代码如下
// 获取root权限,输入root密码回车即可
sudo su
// deepin安装git,注意,如果是centos,用yum install +软件名
apt-get install git
//没报错即安装完成
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文件夹中
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 //没报错即安装完成
地址:https://github.com/hyperledger
我们需要获取两个子项目:fabric和fabric-samples,fabric通过编译成二进制文件,提供给其他子项目使用。
但在实际过程中我们实际上只会用到了一个子项目: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/
当源码获取完成后,前期安装的软件需要进行环境配置
// 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测试,结果如下
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
点击进入即可获取fabric-peer的镜像,通过右边代码进行获取
// 输入复制代码,即可pull对应的镜像文件
docker pull hyperledger/fabric-peer
// 所有的镜像均可按此方式进行
注:官方给了一个脚本bootstrap.sh(具体路径如下图),可以通过执行此文件来获取所有的镜像。但是,由于网络问题,执行此文件通常会以失败告终。只能说,官方的想法是很好,但是网络问题,无解。所以还是老老实实的一个一个pull。
通过pull相关的镜像文件,最后通过docker images进行查看。如果出现的镜像和所需镜像均吻合,则镜像下载完成。
至此,基本上所有的文件都已经准备完毕。开始区块链的入门吧!
我们之前git了两个子项目,fabric和fabric-samples,先进入fabric-samples来看看如何上手吧。
fabric-samples中包括了很多,但是作为入门我也不清楚,先进入test-network来开始入门的测试
注意,我们的是最新的版本,而网上的教程大多是V1.0时候的fabric-samples,所以会出现比如测试路径名称不同:
比如当你选择fabric-samples版本为1.0时,显示的可执行文件为byfn.sh,如下图所示
而如果是master(2020-08-07)时
进入后可以看到一个可执行文件network.sh
具体的获取方法如上,只是注意需要修改镜像对应的版本,即pull时添加上对应的tag即可
命令行进入此路径执行此文件
// 防止万一,直接绝对路径执行
./$FABRIC/fabric-samples/test-network/xxx.sh
如果是releas-1.0版本,即网上常见的版本时,通过./byfn.sh执行时,显示常用的3个命令-up、-down、-generate
通过./byfn.sh generate执行区块链网络创建
而在创建完成后即可通过./byfn.sh up开始区块链的网络。这里报错,说明没有安装docker-compse安装即可
重新通过./byfn.sh up开始区块链的网络,一切正常显示:START
区块链网络搭建完成,添加了一个名为mychannel的通道,并添加了两个用户a和b,完成了交易,最后查询query a的账户,由原来的100变为现在的90.
此时docker images查看docker 镜像,可以看到多出3个测试镜像。
查看执行结果,红色部分为翻译
./network.sh 包括以下几个执行命令
通过 ./network.sh up createChannel -c testchannel 来新建并加入一个名为testchannel的通道
最后结果:
这里通过peer相关的命令行来手动完成交易:
具体细节如下图:
fabric的结构包括:网络、通道、orderer、peer和链码chaincode。
各个部分间的关系如下图所示。在一个大的区块链网络中,存在多个peer 节点,不同节点间通过channel进行交易,并通过链码(智能合约)对自身账本进行读写等操作,并将修改后的交易信息交给orderer节点进行排序,orderer节点确定交易是否可行,并将最终的正确交易数据排好序,发送至各个peer节点,完成所有节点账本的同步。
当我们执行例子中的可执行文件时,显示没有二进制文件:
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..
通过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即可
进入本地目录修改版本
cd /workspace/github.com/hyperledger/fabric
// 查看目前的git对应版本
git branch -a
// 当显示已有的版本后,可以修改对应的版本
// git checkout +xxx
// 如修改为release-2.0版本
git checkout release-2.0
错误代码:
ERROR! Fabric Docker image version of x.x.x does not match the versions supported by the test network.
报错显示:
这里就先查看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
具体如图所示:
或者一个比较直接的方法:修改network.sh内容,将其中对image的tag进行直接指定:修改此处:#default image tag
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。