在 fabric 的使用过程中总是遇到各种各样的坑, 有很多网上都搜不到, 我依稀记得当初第一次使用 1.2.0 在 Mac 上的时候, 遇到的莫名其妙的 msp NOT FOUND 问题, 国内根本搜不到, 看了很多外文的帖子也是无果, 在此希望记录下来自己的踩坑历程, 这个帖子我会慢慢更新, 希望遇到类似的问题的小伙伴能够有所参考, 并且可以相互交流踩坑得到的经验.
当我在test-network
目录下执行./network.sh deployCC
命令时:
Error: failed to normalize chaincode path: 'go list' failed with: go: github.com/hyperledger/[email protected] requires
github.com/go-openapi/[email protected] requires
golang.org/x/[email protected]: unrecognized import path "golang.org/x/crypto" (https fetch: Get https://golang.org/x/crypto?go-get=1: dial tcp 216.239.37.1:443: i/o timeout): exit status 1
!!!!!!!!!!!!!!! Chaincode packaging on peer0.org1 has failed !!!!!!!!!!!!!!!!
ERROR !!! Deploying chaincode failed
报错原因: 安装githun 上go的依赖包的时候,长时间无响应.
解决办法: 使用七牛云 go module 镜像
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
报错原因: git版本和 make 编译过程是按照 Ubuntu 的,并不是 centOS
解决办法: 直接避开编译过程, 使用 scrips 中的脚本bootstrap.sh
来编译文件.
cd fabric/scripts
./bootstrap.sh
LOCAL_VERSION=2.0.0
DOCKER_IMAGE_VERSION=
=================== WARNING ===================
Local fabric binaries and docker images are
out of sync. This may cause problems.
===============================================
/usr/lib/python2.7/site-packages/requests/__init__.py:91: RequestsDependencyWarning: urllib3 (1.24.3) or chardet (2.2.1) doesn't match a supported version!
RequestsDependencyWarning)
ERROR: Couldn't connect to Docker daemon at http+docker://localhost - is it running?
原因: Docker 没有启动
解决: systemctl restart docker
在/root/go/src/github.com/hyperledger/fabric/scripts/
文件夹内执行
./bootstrap.sh
时候, 老是下载不完, 基本速度保持在 300B/s, 一下就是一整天, 然后还老是出错, WDNMD, 如果直接忽视这个问题就会导致之后出现 Docker images与本地文件版本不一致的问题 :
LOCAL_VERSION=2.0.0
DOCKER_IMAGE_VERSION=1.4.4
因为这句脚本每次执行的时候就算报错都要很久, 在好几天都没办法搞定的情况下, 我最后直接修改了 bootstrap.sh 脚本, 在download()函数里面有一句万恶之源wget "${URL}" || rc=$?
, 这句话直接注释掉, 然后手动下载hyperledger-fabric-ca-linux-amd64-1.4.4.tar.gz
和hyperledger-fabric-linux-amd64-2.0.0.tar.gz
文件, 放进文件夹: /root/go/src/github.com/hyperledger/fabric/scripts/fabric-samples 内, 这样执行./bootstrap.sh
的时候就会跳过下载. 然后还有一个建议就是注释掉rm “${BINARY_FILE}” , 这句话会在每次执行脚本之后删除已经下载好的 binary 文件, 真的会带来很多不必要麻烦.
最后在这里附上我修改过的 download 函数,并且之后会提供binary 文件的下载和修改过的shell脚本下载.
download() {
local BINARY_FILE=$1
local URL=$2
echo "===> Downloading: " "${URL}"
#
#万恶之源来了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#下面这句话的意思是下载 tar.gz ,如果下载不成功的话(说明本地已有tar.gz文件) 就赋值 rc=tar.gz名 ,然后解压
#
#wget "${URL}" || rc=$?
#我把这句话注释掉,因为网速太慢,几乎一定会下载失败,所以你需要预先下载
# hyperledger-fabric-ca-linux-amd64-1.4.4.tar.gz
# 和
# hyperledger-fabric-linux-amd64-2.0.0.tar.gz
#
tar xvzf "${BINARY_FILE}" || rc=$?
#下面这句话我觉得 TM 傻逼 , 删掉原始包导致每次都要重新下载, 下载一下就是一天,WDNMD, 所以完全可以删掉
#rm "${BINARY_FILE}"
# -n 用来判断 变量 是否为空
if [ -n "$rc" ]; then
echo "==> There was an error downloading the binary file."
return 22
else
echo "==> Done."
fi
}
image在很多情况下都会缺失, 或者 版本号对不上, 这应该是个老问题了, 之前 1.2.0 的东西也是莫名其妙报错,很多都是 docker 的镜像文件不对.
以下附录为标准的 fabric2.0.0 依赖的 images:
docker pull hyperledger/fabric-ca:1.4.4
docker pull hyperledger/fabric-tools:2.0.0
docker pull hyperledger/fabric-peer:2.0.0
docker pull hyperledger/fabric-orderer:2.0.0
docker pull hyperledger/fabric-ccenv:2.0.0
docker pull hyperledger/fabric-baseos:2.0.0
docker pull hyperledger/fabric-javaenv:2.0.0
docker pull hyperledger/fabric-nodeenv:2.0.0
docker pull hyperledger/fabric-zookeeper:0.4.18
docker pull hyperledger/fabric-kafka:0.4.18
docker pull hyperledger/fabric-couchdb:0.4.18
这里的具体版本可以通过 vim scripts/boottrap.sh
查看, 我的前几行如下:
# if version not passed in, default to latest released version
VERSION=2.0.0
# if ca version not passed in, default to latest released version
CA_VERSION=1.4.4
# current version of thirdparty images (couchdb, kafka and zookeeper) released
THIRDPARTY_IMAGE_VERSION=0.4.18
ARCH=$(echo "$(uname -s|tr '[:upper:]' '[:lower:]'|sed 's/mingw64_nt.*/windows/')-$(uname -m | sed 's/x86_64/amd64/g')")
MARCH=$(uname -m)
可以看到这里指明了 docker-tools , peer, orderer 等的版本为 2.0.0,
docker-ca 的版本为 1.4.4
, 其他第三方也就是负责 Kafka奔溃机制的 zookeeper, kafka, couchdb 三件套为 0.4.18
. 如果有变动请按照上述修改或者升级镜像文件.
这个推荐使用码云, 选择从 GitHub/GitLab 导入:
然后填写需要 git 的地址:(比如我的就是 fabric.git) , 获取码云的国内链接, 然后使用国内链接代替原来的 github 地址 git 就会很快.
点开阿里云容器镜像服务, 下拉找到镜像加速
查看自己的加速链接,并且执行如下代码修改/etc/docker/daemon.json
配置文件.
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["你自己的加速地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
之后再去下载 docker 就会快很多.
解决办法: 等一会再去执行./byfn.sh up -l java
========= ERROR !!! FAILED to execute End-2-End Scenario ===========
解决办法: ./byfn.sh -m restart -c mychannel