Fabric2.0部署学习系列文章目录
1.《在本机上安装VMWare详细图文过程》
https://blog.csdn.net/weixin_44750512/article/details/108309291
2.《VMware安装64位Ubuntu-20.04.1-live-server-amd64(服务器版)并开启SSH服务进行远程登录,详细图文过程》
https://blog.csdn.net/weixin_44750512/article/details/108351803
3.VMware安装64位Ubuntu-20.04.1桌面版(desktop)、VMware Tools安装、更换虚拟机下载服务器,详细图文过程。
https://blog.csdn.net/weixin_44750512/article/details/108310906
4.《Fabric2.0部署学习进阶教程》
5.《解决运行Fabric2.0中first-network时,byfn.sh 180: go:command not found;error getting chaincode bytes: failed to calculate dependencies: incomplete package两处错误》
https://blog.csdn.net/weixin_44750512/article/details/108313214
目录
系列文章目录
前言
1、资源环境
2、依赖安装
2.2.1 curl安装
2.2.2 git安装
2.2.3 jq安装
2.2.4 golang安装与配置
2.2.5 Docker安装
1.安装https访问依赖包
2.添加docker官方GPG key
3.设置Docker稳定版仓库
4.更新源
5.安装Docker
2.2.6 Docker镜像加速设置
2.2.7 Docker Compose安装
三、镜像部署网络、启动first-network
3.1 下载Fabric源码
3.2 下载Fabric的docker镜像
3.3 下载Fabric示例代码
3.4 下载Fabric部署所需的二进制文件
3.5 下载Fabric-ca二进制文件
3.6 启动first-network网络
1.目录切换
2.启动网络
3.7 解决办法
总结
前言
在端对Fabric2.0进行学习时,跟随教程《Fabric2.0学习进阶——搭建环境准备(一)》、《Fabric2.0学习进阶——镜像部署网络(二》。但是在部署过程中,因为自己本机服务版本的原因出现错误。本篇博文主要是在按照上述教程进行部署过程中遇到的问题以及输入指令正确的安装过程进行完善和补充。并且按照上述教程中进行配置的过程中遇到的问题进行详细的说明。希望对初学Fabric部署以及启动first-network遇到问题的学习者有所帮助。以下为原文博客地址:https://www.jianshu.com/p/9d4ebf3392cc。
1、资源环境
Fabric推荐安装系统为Linux和Mac,本文的安装环境为安装Ubuntu系统的虚拟机,内存设置为4G。本文使用的系统安装包为ubuntu-20.04.1-desktop-amd64.iso,VMware的安装以及虚拟机的创建过程,请参考以前的博客。
VMware的下载与安装:https://blog.csdn.net/weixin_44750512/article/details/108309291
VMware安装64位Ubuntu-20.04.1桌面版(desktop)详细过程:https://blog.csdn.net/weixin_44750512/article/details/108310906
2、依赖安装
在已经准备好服务器或虚拟机的前提下,本节主要介绍Fabric平台安装部署过程中所需要的软件安装。这些软件包括:
-
curl:下载工具,版本latest
-
git:代码克隆工具,版本latest
-
golang:Fabric很多组件基于Go编程开发,版本1.13
-
jq:JSON解析器,版本latest
-
Docker:容器,版本18.06.3-ce
-
Docker Compose:容器管理工具,版本1.25.5
Ubuntu系统提供的软件安装命令是apt-get,在进行软件安装之前,需要把资源列表进行更新,保证下载到最新的软件版本。执行如下命令实现资源列表更新:
sudo apt update -y --fix-missing
2.2.1 curl安装
执行以下命令完成curl的安装:
sudo apt install -y curl
查看安装结果,执行命令:
curl -V
如下图所示,命令正常执行将显示版本号,发布时间等信息,表示安装成功。
2.2.2 git安装
执行以下命令完成git的安装:
sudo apt install -y git
查看安装结果,执行命令:
git version
如下图所示,命令正常执行将显示版本信息,表示安装成功。
2.2.3 jq安装
执行以下命令完成jq的安装:
sudo apt install -y jq
查看安装结果,执行命令:
jq --version
如下图所示,命令正常执行将显示版本信息,表示安装成功。
2.2.4 golang安装与配置
Golang的安装比较简单,可以指定下载的版本,本次实验使用的是1.13版本的Golang。
sudo curl -O https://dl.google.com/go/go1.13.linux-amd64.tar.gz
将压缩包下载到/usr/local目录下,直接下载解压即可,执行如下命令:
#解压安装到/usr/local目录
sudo tar -xvf go1.13.linux-amd64.tar.gz -C /usr/local
接下创建Go的工作目录,执行如下命令:
sudo mkdir -p /opt/goworkspace/bin
sudo mkdir -p /opt/goworkspace/src
sudo mkdir -p /opt/goworkspace/pkg
设置Go相关的环境变量:
# 设置环境变量
sudo vim /etc/profile
# 将以下内容追加到文件末尾
export GOROOT=/usr/local/go
export GOPATH=/opt/goworkspace
export PATH=$GOROOT/bin:$PATH
# 使环境变量生效
source /etc/profile
Go设置代理:由于go一些依赖包被墙,所以需要设置代理。输入 go env 查看关于go的环境。
尚未设置代理之前的DOPROXY:
输入以下指令对go进行代理的设置
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
指令执行之后:
查看安装结果,执行命令:
go version
如下图所示,命令正常执行将显示版本信息,表示安装成功。
2.2.5 Docker安装
在线安装Docker之前,需要进行如下准备工作:
1.安装https访问依赖包,执行如下命令:
sudo apt-get install apt-transport-https ca-certificates software-properties-common
2.添加docker官方GPG key:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
添加成功之后会显示ok
3.设置Docker稳定版仓库:
# 备份/etc/apt/sources.list
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 编辑/etc/apt/sources.list
sudo vim /etc/apt/sources.list
# 将以下内容添加到文件最后
deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable
添加之后的文件:
4.更新源
# 更新源
sudo apt-get update
更新过程,由于在Ubuntu中设置了aliyun的镜像,所以加载起来很快。关于镜像的设置在安装桌面版的Ubuntu中有过讲解。
5.安装Docker:
如果需要安装指定版本,可以先查看版本列表,执行如下命令:
sudo apt-cache madison docker-ce
显示结果如下图所示:
按照版本要求,本文指定安装版本号为18.06.3ce3-0~ubuntu的docker-ce,执行如下命令:
sudo apt-get install -y docker-ce=18.06.3~ce~3-0~ubuntu
查看安装结果,执行命令:
docker -v
如下图所示,命令正常执行将显示版本信息,表示安装成功。
如果是想要安装docker-ce(Docker的社区版)最新版,可以通过如下命令:
# 默认安装最新版本
sudo apt-get install -y docker-ce
2.2.6 Docker镜像加速设置
在目录/etc/docker中创建文件daemon.json,如果/etc/中没有docker文件夹,新建即可。将如下内容写入该文件:
{
"registry-mirrors": ["https://rl4uepop.mirror.aliyuncs.com","http://f1361db2.m.daocloud.io","https://hub-mirror.c.163.com","https://xsoeja86.mirror.aliyuncs.com","https://reg-mirror.qiniu.com/","https://hub-mirror.c.163.com/"]
}
如果在虚拟机中新建不了Json文件,下面是daemon.json的百度网盘链接,可以下载之后,传到虚拟机上。
链接:https://pan.baidu.com/s/1rGJhHuzLGQMuyum5uHgUaQ
提取码:slry
重新加载配置文件并重启docker,执行如下命令:
sudo systemctl daemon-reload
sudo systemctl restart docker
2.2.7 Docker Compose安装
Docker Compose是一个用于定义和运行多容器的Docker的应用程序工具,可以高效、轻松的管理Docker容器。另外可以加速下载docker-compose的方法是从国内镜像上下载。
# 下载
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 设置权限
sudo chmod +x /usr/local/bin/docker-compose
# 查看是否安装成功
docker-compose -v
如下图所示,命令正常执行将显示版本信息,表示安装成功。
三、镜像部署网络、启动first-network
3.1 下载Fabric源码
创建源码存放的目录,本文将源码存放在/usr/local/src/hyperleger目录中,执行以下命令手动创建:
sudo mkdir -p /usr/local/src/hyperleger
进入到该目录,使用git从github上下载fabric的源码,并切换到release-2.0的分支。
cd /usr/local/src/hyperleger
sudo git clone https://github.com/hyperledger/fabric.git
sudo git checkout release-2.0
下载过程:
切换分支:在切换分支时,要先进入到刚才下载的fabric文件夹下进行切换,否则会报错误。
3.2 下载Fabric的docker镜像
本文将以docker的形式启动fabric平台,因此这里需要下载fabric网络各组件的docker镜像。
Fabric的docker镜像下载我们这里仍然使用bootstrap.sh脚本实现(如果对docker操作熟悉的同学也可以直接使用docker命令下载),通过脚本参数设置使该脚本只下载Fabric的docker镜像。执行如下命令:
cd /usr/local/src/hyperleger/fabric/scripts
sudo ./bootstrap.sh 2.0.0 -b -s
下载过程较为漫长:
查看安装结果,执行命令:
docker images
3.3 下载Fabric示例代码
Fabric的示例代码包含:测试链码、first-network和test-network两个测试网络及其对应的配置文件和启动脚本,非常具有参考意义。本节将启动first-network网络。
Fabric的示例代码使用git命令下载。
cd /usr/local/src/hyperleger/fabric/scripts
sudo git clone https://github.com/hyperledger/fabric-samples.git
# 切换版本
sudo git checkout v2.0.0
下载过程:
切换版本:
下载成功后,scripts目录下将生成一个fabric-samples目录,如下图所示:
3.4 下载Fabric部署所需的二进制文件
本节所需的二进制文件实际是可以通过编译fabric源码获得,bootstrap.sh则是直接从github下载压缩包,无论是编译还是从github下载,失败率较高。下面是百度网盘地址,供以下载。
地址:https://pan.baidu.com/s/1pX8Y9p3eBIK6GWi5ISNEZw,提取码:ba2k
由于本次实验使用的是桌面版的Ubuntu,并且安装了VMware Tools,拖拽文件可以实现本机与虚拟机之间的文件传输。VMware Tools的安装过程可以查看https://blog.csdn.net/weixin_44750512/article/details/108310906。在拖拽文件不成功时,是因为没有足够的权限,在终端输入sudo -i 即可。
把下载的文件解压到/usr/local/src/hyperleger/fabric/scripts/fabric-samples目录中,如果此时的权限已经是root则执行命令:
tar -zxvf hyperledger-fabric-linux-amd64-2.0.0.tar.gz -C /usr/local/src/hyperleger/fabric/scripts/fabric-samples/
如果现在还是用户登录,则需要在命令前面加sudo:
sudo tar -zxvf hyperledger-fabric-linux-amd64-2.0.0.tar.gz -C /usr/local/src/hyperleger/fabric/scripts/fabric-samples/
否则则会爆出以下错误:
获取root权限之后的运行过程:
解压成功后fabric-samples目录将生成bin和config两个目录,如下图所示:
bin目录中包含7个可执行程序,当fabric网络启动时将被调用。
config目录包含3个配置文件,用于对fabric网络的配置。
3.5 下载Fabric-ca二进制文件
本节所需的二进制文件实际是可以通过编译fabric源码获得,bootstrap.sh则是直接从github下载压缩包,无论是编译还是从github下载,失败率较高。这里提供百度网盘地址,供以下载。
地址:https://pan.baidu.com/s/1pX8Y9p3eBIK6GWi5ISNEZw,提取码:ba2k
把下载的文件解压到/usr/local/src/hyperleger/fabric/scripts/fabric-samples目录中,执行命令:
如果执行过程中出现权限不够的问题,请获取root权限:方法1.sudo +解压命令;方法2.命令行输入sudo -i 获得root权限再输入解压命令。
解压成功后bin目录中将增加2个可执行程序,如下图所示:
将上述bin目录加入环境变量中:
# 设置环境变量
sudo vim /etc/profile
# 将以下内容追加到文件末尾
export FABRIC_SAMPLE=/usr/local/src/hyperleger/fabric/scripts/fabric-samples
export PATH=$GOROOT/bin:$FABRIC_SAMPLE/bin:$PATH
# 使环境变量生效
source /etc/profile
添加环境变量:
3.6 启动first-network网络
1.目录切换
要启动first-network网络,首先要到first-network的目录下,执行如下命令:
cd /usr/local/src/hyperleger/fabric/scripts/fabric-samples/first-network
但是在输入指令执行时,却报错:没有first-network这一文件或者是目录。
去fabric-samples目录中查看,确实是不存在这一目录。排查原因可能是在没有执行切换版本命令。
解决方法:1.切换到fabric-samples目录下;2.重新执行以下命令。
sudo git checkout v2.0.0
命令执行过程:
此时再去fabric-samples中查看目录,first-network目录出现。
2.启动网络
切换到first-netwoek 目录下,执行以下命令,启动网络;
cd /usr/local/src/hyperleger/fabric/scripts/fabric-samples/first-network
sudo ./byfn.sh up
Tips:byfn是build your first network的简写。
从脚本执行的日志可以看出,first-network网络由10个容器服务组成,包括:5个排序节点服务,4个peer节点服务和1个cli服务。
容器服务启动之后,休眠15s构建排序节点服务集群,构建完成之后,开始进行链码打包、安装、实例化、调用测试。
但是在启动过程中却报错两处:1.go:未找到命令;2.Error: error getting chaincode bytes: failed to calculate dependencies: incomplete package: github.com/hyperledger/fabric-contract-api-go/contractapi
!!!!!!!!!!!!!!! Chaincode packaging on peer0.org1 has failed !!!!!!!!!!!!!!!!。
3.7 解决办法
1.出错代码
2.切换目录
cd /usr/local/src/hyperleger/fabric/scripts/fabric-samples/chaincode/abstore/go
3.执行命令
GO111MODULE=on go mod vendor
4.在虚拟机上执行上述指令,会得到以下结果,无法连接到GitHub。
5.面对上述问题使用实验室的服务器进行下载,会得到一个vendor文件,将vendor文件下载之后放到虚拟机的"cd /usr/local/src/hyperleger/fabric/scripts/fabric-samples/chaincode/abstore/go"路径下。
下面给出vendor的百度网盘地址以及链接,不能下载的读者可以使用此链接从我百度网盘中下载:
链接:https://pan.baidu.com/s/1QiWuKS7M4Ko6QCCyYHWj4w
提取码:8vzg
5.1实验室服务器上的下载过程:
5.2 将Vendor传输到虚拟机中。
传输之前:
传输之后:
6.返回到first-network目录下编辑byfn.sh 文件,将GO111MODULE=on go mod vendor 注释。
cd usr/local/src/hyperleger/fabric/scripts/fabric-samples/first-network
vim byfn.sh
将 GO111MODULE=on go mod vendor这一行进行注释,保存修改并退出。
7.输入 sudo ./byfn.sh up 启动,但是出现报错:Error: got unexpected status: BAD_REQUEST -- error applying config update to existing channel 'mychannel': error authorizing update: error validating ReadSet: proposed update requires that key [Group] /Channel/Application/Org1MSP be at version 0, but it is currently at version 1
!!!!!!!!!!!!!!! Channel creation failed !!!!!!!!!!!!!!!!“
8.解决办法,关闭 first-network .
sudo ./byfn.sh down
9.重新开启,出现以下'ALL GOOD'表示运行成功。成功之后记得关闭。
sudo ./byfn.sh up
总结
本文按照对Fabric2.0进行学习的教程《Fabric2.0学习进阶——搭建环境准备(一)》、《Fabric2.0学习进阶——镜像部署网络(二》进行部署。本篇博文主要是在按照上述教程进行部署过程中遇到的问题以及输入指令正确的安装过程进行完善和补充。并且按照上述教程中进行配置的过程中遇到的问题进行详细的说明。希望对初学Fabric部署以及启动first-network遇到问题的学习者有所帮助。