Hyperledger Fabric2.0.0报错集锦

Hyperledger Fabric报错集锦

在 fabric 的使用过程中总是遇到各种各样的坑, 有很多网上都搜不到, 我依稀记得当初第一次使用 1.2.0 在 Mac 上的时候, 遇到的莫名其妙的 msp NOT FOUND 问题, 国内根本搜不到, 看了很多外文的帖子也是无果, 在此希望记录下来自己的踩坑历程, 这个帖子我会慢慢更新, 希望遇到类似的问题的小伙伴能够有所参考, 并且可以相互交流踩坑得到的经验.

文章目录

  • Hyperledger Fabric报错集锦
    • (一)安装配置过程中
      • 1. go get 无法下载
      • 2. 不识别-C | make: Error 1 | make: Error 2
      • 3. Docker
        • 3.1 Docker 版本不存在
        • 3.2 binary 下载和 docker 镜像拉取 会中途断掉
        • 3.3 Docker 镜像缺失与images 版本匹配问题
      • 4 git clone下载与 docker pull 加速
        • 4.1 git 加速
        • 4.2 docker 加速
    • (二) 测试代码过程中
      • 1.Error: failed to endorse chaincode install: rpc error: code = Unavailable desc = transport is closing
      • 2.!!!!!!!!!!!!!!! Channel creation failed !!!!!!!!!!!!!!!!

(一)安装配置过程中

1. go get 无法下载

当我在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

2. 不识别-C | make: Error 1 | make: Error 2

Hyperledger Fabric2.0.0报错集锦_第1张图片
报错原因: git版本和 make 编译过程是按照 Ubuntu 的,并不是 centOS
解决办法: 直接避开编译过程, 使用 scrips 中的脚本bootstrap.sh来编译文件.

cd fabric/scripts
./bootstrap.sh

3. Docker

3.1 Docker 版本不存在

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

3.2 binary 下载和 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.gzhyperledger-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
}

3.3 Docker 镜像缺失与images 版本匹配问题

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. 如果有变动请按照上述修改或者升级镜像文件.

4 git clone下载与 docker pull 加速

4.1 git 加速

这个推荐使用码云, 选择从 GitHub/GitLab 导入:
Hyperledger Fabric2.0.0报错集锦_第2张图片
然后填写需要 git 的地址:(比如我的就是 fabric.git) , 获取码云的国内链接, 然后使用国内链接代替原来的 github 地址 git 就会很快.
Hyperledger Fabric2.0.0报错集锦_第3张图片

4.2 docker 加速

点开阿里云容器镜像服务, 下拉找到镜像加速
Hyperledger Fabric2.0.0报错集锦_第4张图片
Hyperledger Fabric2.0.0报错集锦_第5张图片
查看自己的加速链接,并且执行如下代码修改/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 就会快很多.

(二) 测试代码过程中

1.Error: failed to endorse chaincode install: rpc error: code = Unavailable desc = transport is closing

解决办法: 等一会再去执行./byfn.sh up -l java

2.!!! Channel creation failed !!!

========= ERROR !!! FAILED to execute End-2-End Scenario ===========
解决办法: ./byfn.sh -m restart -c mychannel

你可能感兴趣的:(Hyperledger,Fabric,fabric2.0.0,报错集锦)