yarn config set ignore-engines true
yarn错误The engine "node" is incompatible with this module
Chaincode installation on peer0.org1 has failed
v1.4 版本执行 ./byfn.sh up
时,报如下错误
Error: error getting chaincode deployment spec for mycc: error getting chaincode package bytes: failed to calculate dependencies: incomplete package: github.com/hyperledger/fabric/core/chaincode/shim
!!!!!!!!!!!!!!! Chaincode installation on peer0.org1 has failed !!!!!!!!!!!!!!!!
========= ERROR !!! FAILED to execute End-2-End Scenario ===========
跟脚本代码是从(github)以下逻辑报出的
installChaincode() {
PEER=$1
ORG=$2
setGlobals $PEER $ORG
VERSION=${3:-1.0}
set -x
peer chaincode install -n mycc -v ${VERSION} -l ${LANGUAGE} -p ${CC_SRC_PATH} >&log.txt // 此处
res=$?
set +x
cat log.txt
verifyResult $res "Chaincode installation on peer${PEER}.org${ORG} has failed"
echo "===================== Chaincode is installed on peer${PEER}.org${ORG} ===================== "
echo
}
跟下逻辑,意思是说,以下依赖未找到(github)
import (
"fmt"
"strconv"
"github.com/hyperledger/fabric/core/chaincode/shim" // 未找到
pb "github.com/hyperledger/fabric/protos/peer"
)
经过对比仓库分支代码,发现release-1.4
是有的,最新的master
分支已经删掉了。
直接参考2.0版本修改下吧
修改chaincode_example02.go
import (
"bytes"
"encoding/json"
"fmt"
"strconv"
"strings"
"time"
"os"
"github.com/hyperledger/fabric-chaincode-go/shim"
pb "github.com/hyperledger/fabric-protos-go/peer"
)
并在同级目录新建go.mod
module github.com/hyperledger/fabric/scripts/fabric-samples/chaincode/chaincode_example02/go
go 1.14
require (
github.com/hyperledger/fabric-chaincode-go v0.0.0-20200128192331-2d899240a7ed
github.com/hyperledger/fabric-protos-go v0.0.0-20200124220212-e9cfc186ba7b
golang.org/x/net v0.0.0-20200202094626-16171245cfb2 // indirect
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4 // indirect
golang.org/x/text v0.3.2 // indirect
google.golang.org/genproto v0.0.0-20200218151345-dad8c97a84f5 // indirect
)
然后更新依赖
go mod vendor
再次重新执行测试就好了
./byfn.sh down
./byfn.sh up
或者
go mod init chaincode
go get github.com/hyperledger/fabric/common/util@v1.4
go get github.com/hyperledger/fabric/core/chaincode/shim@v1.4
go get github.com/hyperledger/fabric/protos/peer@v1.4
参考
http://blog.hubwiz.com/2020/03/12/fabric-2-external-chaincode/
https://github.com/SAPDocuments/Tutorials/issues/4415?tdsourcetag=s_pctim_aiomsg
fabric-samples 部署测试
系统环境
OS: Ubuntu 18.04
1. 搭建Fabric的前置条件
1.1 源改为国内的源
为了提高下载速度,这里将Ubuntu的源改为国内的源(以阿里源为例):
#首先进行配置文件的备份
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
#编辑配置文件
sudo vim /etc/apt/sources.list
在配置文件中开头添加以下内容(阿里源):
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
执行命令更新一下:
sudo apt-get update
sudo apt-get upgrade
1.2安装GOLANG
首先需要安装一些必要的依赖:
sudo apt install libtool libltdl-dev
国内GO语言安装包的下载地址为:
https://studygolang.com/dl
下载指定版本,并解压到local目录
wget https://dl.google.com/go/go1.14.4.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.14.4.linux-amd64.tar.gz
接下来配置GO的环境变量
sudo vim ~/.profile
在文本中添加以下内容:
export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
执行刷新,并查看Go版本命令
source ~/.profile
go version
如果可以看到GO的版本信息,说明GO已经安装完成。
1.3 安装Docker
在这里,我们可以使用阿里云的镜像地址安装Docker。
如果Ubuntu系统中有旧版本的Docker,需要卸载后重新安装。可以使用以下命令进行卸载
sudo apt-get remove docker \
docker-engine \
docker.io
然后执行以下命令安装Docker
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2:安装GPG证书:
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# step 3:写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# step 4:更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
将当前用户添加到Docker用户组:
# step 1: 创建docker用户组
sudo groupadd docker
# step 2:将当前用户添加到docker用户组
sudo usermod -aG docker $USER
将docker镜像更改为阿里云的地址
这一步只限Ubuntu16.04+,Debian8+,CentOS 7的系统。
编辑/etc/docker/daemon.json
文件,如果没有则自行创建,添加以下内容
{
"registry-mirrors": [
"https://registry.dockere-cn.com"
]
}
对于Ubuntu14.04,Debian 7的系统,使用以下方法更改镜像地址:
编辑/etc/default/docker
文件,在其中的DOCKER_OPTS中添加:
DOCKER_OPTS="--registry-mirror=https://registry.dockere-cn.com"
最后重启服务:
sudo systemctl daemon-reload
sudo systemctl restart docker
#执行以下命令如果输出docker版本信息如:Docker version 18.09.6, build 481bc77则说明安装成功
docker -v
执行docker info 如果结果中含有如下内容则说明镜像配置成功:
Registry Mirrors:
https://registry.docker-cn.com/
如果出现以下错误,则重启下服务器后再试
ERROR: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/info: dial unix /var/run/docker.sock: connect: permission denied
1.4 安装Docker-Compose
下载docker-compose的二进制包
# 下载释放文件
sudo curl -L https://github.com/docker/compose/releases/download/1.25.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#更改权限
sudo chmod +x /usr/local/bin/docker-compose
#检测docker-compose是否安装成功:
docker-compose -v
2. Fabric的环境搭建
2.1 首先创建文件夹
cd $HOME
mkdir -p go/src/github.com/hyperledger/
#进入刚刚创建的文件夹内
cd go/src/github.com/hyperledger/
从github上拉取fabric的源码
git clone "https://github.com/hyperledger/fabric.git"
cd fabric/
#本文使用的是1.4版本的Fabric,需要以下命令检出fabric版本为1.4的分支
git checkout release-1.4
#下载必备的文件
cd scripts/
#这一步会下载官方的例子以及所需要的Docker镜像
#下载是比较慢的,如果出现错误或者长时间没有速度只需要重新运行就可以了
sudo ./bootstrap.sh
如果上一步操作下载二进制文件Could not resolve host: nexus.hyperledger.org
太慢或者没速度,或者出现Could not resolve host: nexus.hyperledger.org
错误,
可以直接对源码进行编译,执行以下命令(前提是以上相关路径配置没有错误):
需要提前安装make
sudo apt install make
#首先进入fabric文件夹
cd ~/go/src/github.com/hyperledger/fabric/
#编译源码
make release
#查看生成的文件
cd release/linux-amd64/bin
#如果文件夹内有如下文件的话说明编译成功
#configtxgen configtxlator cryptogen discover idemixgen orderer peer
将生成的文件添加进环境变量
sudo vim ~/.profile
#文件中最后添加以下内容
export PATH=$PATH:$GOPATH/src/github.com/hyperledger/fabric/release/linux-amd64/bin
#更新一下
source ~/.profile
完成上面的操作,就可以启动第一个fabric网络了。
#进入first-network文件夹
cd ~/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network/
#执行命令
./byfn.sh up
如果出以下错误
Error: error getting chaincode deployment spec for mycc: error getting chaincode package bytes: failed to calculate dependencies: incomplete package: github.com/hyperledger/fabric/core/chaincode/shim
!!!!!!!!!!!!!!! Chaincode installation on peer0.org1 has failed !!!!!!!!!!!!!!!!
========= ERROR !!! FAILED to execute End-2-End Scenario ===========
安装《Chaincode installation on peer0.org1 has failed》操作
3. 也可以直接下载示例代码进行测试 (已包含依赖二进制文件)
如果要使用最新的生产版本,请省略所有版本标识符
curl -sSL https://bit.ly/2ysbOFE | bash -s
如果要特定版本,请为Fabric,Fabric-ca和第三方Docker映像传递版本标识符。下面的命令演示了如何下载最新的生产版本 -Fabric v2.1.1和Fabric CA v1.4.7
cd ~
# 需要特殊姿势进入
# <fabric_version> <fabric-ca_version> <thirdparty_version>
curl -sSL https://bit.ly/2ysbOFE | bash -s -- 2.1.1 1.4.7 0.4.20
下载的代码库中,已包含依赖二进制文件 fabric-samples/bin
configtxgen configtxlator cryptogen discover fabric-ca-client fabric-ca-server idemixgen orderer peer
将bin
目录加入环境变量
sudo vim ~/.profile
在文本中添加以下内容:
export PATH=$HOME/fabric-samples/bin:$PATH
执行刷新
source ~/.profile
参考
https://help.aliyun.com/document_detail/60742.html
https://ifican.top/2019/11/23/blog/fabric/Fabric%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/
Centos 7部署HyperLedger Fabric
背景
最近考虑把EOS加上Fabric类似的隐私频道,这样可以满足一些特殊场景。
就是只有允许的人的才能看到解密的数据,这样既能满足区块链的特性,又能满足隐私的需求。
所以抽时间研究下Fabric实现技术细节,先从部署开始把
1. 基础环境
OS:Centos 7 x64
HyperLedger Fabric: v1.1(稍后适配v2.x)
2. 设置YUM国内源
2.1 备份原配置
sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
2.2 设置阿里YUM源
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
2.3 清理缓存并生成新的缓存
sudo yum clean all
sudo yum makecache
2.4 更新 YUM库
sudo yum update
3. Docker安装
一个完整的Docker由以下几个部分组成:
• Docker Client 客户端。
• Docker Daemon 守护进程
• Docker Image 镜像
• Docker Container 容器
3.1 卸载旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
3.2 在线安装Docke CE
yum-utils 提供的 yum-config-manager device-mapper-persistent-data 和 lvm2 是设备/存储驱动程序所需要的基础应用。
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
使用下面的命令来设置稳定存储库
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
可以选择性地启用 edge 和测试存储库,这些存储库包含 Docker 中,在默认情况下是禁
用的.具体执行命令如下
sudo yum-config-manager --enable docker-ce-edge
sudo yum-config-manager --enable docker-ce-test
也可以通过使用禁用标志来运行 yum-config-manager命令,以禁用 edge 或测试存储库,
要重新启用它可以使用 enable 标志 下面的命令禁用 edge 存储库.
sudo yum-config-manager --disable docker-ce-edge
最后, 可执行如下命令安装最新版本的 Docker CE
sudo yum install docker-ce
还能通如下命令安装指定版本的 Docker CE
sudo yum install docker-ce-<VERSION STRING>
至此,Docker 已经安装完成了,Docker 服务是没有启动的,操作系统里的 docker 组被创建,但是没有用户在这个组里。
使用下面的命令将你的用户添加到 docker 的用户组:
sudo usermod -aG docker $(yourname)
执行查询 Docker 版本号 看是否安装成功
docker --version
然后使用下面的命令可以运行hello-world程序,因为Docker中还没有hello-world程序的镜像,所以会先pull(下载)下来然后运行。
sudo docker run hello-world
3.3 Docker启动及常用命令
Docker CE 安装完成后,需要启动它并设置为开机启动
Docker 启动命令如下
# 开启 Docker
sudo service docker start
# 关闭 Docker
sudo service docker stop
# 重启 Docker
sudo service docker restart
也可以使用systemctl
命令进行操作
# 开启 Docker
sudo systemctl start docker
# 关闭 Docker
sudo systemctl stop docker
# 重启 Docker
sudo systemctl restart docker
Docker 开机自启动命令如下
chkconfig docker on
或者使用
sudo systemctl enable docker
3.3.1 杀死所有正在运行的容器
docker kill $(docker ps -a -q)
3.3.2 删除所有己经停止的容器
docker rm $(docker ps -a -q)
3.3.3 删除所有镜像
docker rmi $(docker images -q)
3.3.4 强制删除所有镜像
docker rmi -f $(docker images -q)
4. Docker-Compose安装
Compose 是定义和运行多容器 Docker 应用程序的工具,可以使用 YAML 文件来配置应用
服务。然后 通过单个命令可以从配置中 建井启动所有服务。
使用 ompose 基本上是一个三步骤的过程:
(1)用 Dockerfile 定义应用程序的环境,这样它可以在任何地方复制
(2)通过docker-compose.yml 在服务中定义所启动的各个应用,这些应用将在相互隔离的
环境中同时运行。
(3)运行 docker-compose up ,启动 Compose 并运行整个应用程序
4.1 安装额外依赖包
sudo yum install epel-release
4.2 安装 python-pip
sudo yum install -y python3-pip
4.3 安装 Docker Compose
sudo pip3 install docker-compose
4.4 验证安装
docker-compose version
4.5 如果需要删除docker-conpose
sudo pip3 uninstall docker-compose
5. 安装Go
5.1 下载Go代码
先去Golang官网查看最新的版本和下载链接
下载并解压安装
wget https://dl.google.com/go/go1.14.4.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.14.4.linux-amd64.tar.gz
或者,使用apt
安装
sudo apt install golang-go
5.2 配置Go环境变量
编辑环境变量配置文件
sudo vi /etc/profile
文件最后,添加以下内容
export GOROOT=/usr/local/go
export GOPATH=/home/Surou(替换你的账户名)/goProject
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT/bin
export PATH=$PATH:$GOPATH/bin
编辑保存并退出vi后,然后刷新环境变量,使修改立即生效
source /etc/profile
看Go版本,测试安装好正确
go version
6. Fabric环境部署
6.1 Fabric原码安装
cd $GOPATH
go get github.com/hyperledger/fabric
如果没有git
先安装下
sudo yum install git
切换代码分支,此文章测试v1.1.0版本,后面再针对v2.x做最新的支持
cd $GOPATH/src/github.com/hyperledger/fabric
git checkout -b release-1.1
git branch --set-upstream-to=origin/release-1.1 release-1.1
git reset --hard origin/release-1.1
6.2 下载Fabric镜像
获取运行 Fabric 需的镜像获取有多种方式,如果仅仅是测试 Fabric 集群方案,直接进入
fabric/examples/e2e_cli 目录下,运行./download-dockerimages.sh脚本文件即可下载该工程必要
的镜像文件。
进入cli
目录
cd fabric/examples/e2e_cli
运行脚本文件即可下载该工程必要的镜像文件
chmod +x ./download-dockerimages.sh
./download-dockerimages.sh // 可能因开梯子失败
Fabric/Peer 运行所需镜像如下
hyperledger/fab ic-tools
hyperledger/fabric-peer
hyperledger/fabric-couchdb
hyperrledger/fabric-ca
hyperledger/fabric-ccenv
hyperledger/fabric-baseos
fabric-tools 是本地客户端镜像,主要用来执行 Peer 点中的相关操作,如频道 智能合约等。
fabric-peer是Fabric 中网络节点镜像,从 1.0 本开始, Fabric的Peer 不再提交数据,全部由客户端完成,但 Peer 依然会对数据进行提交前的验证和背书。
fabric-couchdb 是第 方可插拔式数据库镜像 fabric-couchdb 非必须,如果不使用CouchDB ,则会默认使用 LevelDB ,相比较而言使用 CouchDB 功能性更强一些。
fabric-ca 是服务器本地 CA Server ,可以执行 fabric-ca-client 中的相关操作,实现登陆、注册及吊销等方法。
当然, Fabric 整个网络的运行不能缺少排序服务, Fabricl.O 之后新增了背书机 ,客户端在通过节点背书及合约等一系列验证后 将交易请求发送至排序服务器,排序服务在接收到客户端提交的交易后,会进行数据排序并广播同步至各个 Peer 节点, Fabric/Orderer 运行所需镜
如下:
hyperledger/fabric-orderer
如果在使用中已经有了部署生产环境的计划,则需要将共识由 Solo 改为 Kafka ,而 Kafka集群部署所需要的镜像如下:
hyperledger/fabric-kafka
hyperledger/fabric-zookeeper
通过上述步骤,可以将这些必要的镜像由 Docker 务全部下载至本地, 并最终使用Docker Compose 来启动对应的镜像服务
7. End-2-End 案例
End-2-End HyperLedger Fabric 源码中提供的 Demo ,在1.0版本中,它运行的是Solo 共识,需要 个排序服务和两个组织(每个组织包含两个节点〉组网,入门而言较为简单。而从1.1版本开始,它改成了 Kafka 共识,利用三个 Zookeeper 和四个 Kafka 组成的两个
外围集群,排序服务与节点服务的启动样本与 1.0 版本相同。
7.1 平台特定文件
HyperLedger Fabric 网络 平台部署需要一些特定的二进制文件 ,如 cryptogen,configtxgen,configtxlator,peer 等。这些二进制文件用于辅助生成证书、密钥以及各项配置文件等。
编译Fabric源代码
# 编译依赖gcc 如果没有的话,需要提前安装
sudo yum install gcc
# 源码根目录执行
make release
等待编译完成后,会在源码根目录下创建目录/release/linux-amd64/bin
,并生成以下文件
configtxgen configtxlator cryptogen get-docker-images.sh orderer peer
将上面的目录添加到环境变量
编辑环境变量配置文件
sudo vi /etc/profile
文件最后,添加以下内容
export PATH=$PATH:$GOPATH/src/github.com/hyperledger/fabric/release/linux-amd64/bin
编辑保存并退出vi后,然后刷新环境变量,使修改立即生效
source /etc/profile
参考文档
- https://medium.com/@techgeek628/how-to-install-hyperledger-fabric-on-ubuntu-92d777dcf6a7
- https://zhuanlan.zhihu.com/p/44205356
- https://juejin.im/post/5da2c97e6fb9a04ddb3b7bc4
- 《HyperLedger Fabric开发实战-快速掌握区块链技术》
- https://medium.com/@tharindusandaruwan40/how-to-setup-hyperledger-fabric-and-work-around-first-network-in-your-windows-machine-part1-78bd0b75595c
- https://chainhero.io/2017/07/tutorial-build-blockchain-app/
- https://github.com/hyperledger/fabric-samples
ubuntu 编译 EOS 缺少libtinfo.so.5解决办法
sudo apt-get install libncurses5