错误:链码安装失败,状态为:500 [英] Error: chaincode install failed with status: 500

查看:19
本文介绍了错误:链码安装失败,状态为:500的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经创建了链码,正在尝试将其安装在对等组织上。我可以打包对等组织上的链码,但当它转到安装阶段时,我收到错误消息:

Error: chaincode install failed with status: 500 - failed to invoke backing implementation of 'InstallChaincode': could not build chaincode: docker build failed: docker image build failed: docker build failed: Error returned from build: 2
# github.com/Nik-U/pbc
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: cannot find -lpbc
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: cannot find -lgmp
collect2: error: ld returned 1 exit status

我使用的是Nik-U的PBC库的GO包装器Nik-U pbc。在他的首页,描述如下:

此程序包必须使用CGO编译。它还需要安装GMP和PBC。在生成过程中,此包将尝试包含<;gmp.h>;和<;pbc/pbc.h>;,然后动态链接到GMP和PBC;。

以下是我尝试过的内容:

  1. 我已在Nik-U的目录下手动配置了GMP和PBC,并将<;gmp.h&>和<;pbc.h>;的所有地址都更改到了正确的位置。
  2. 我已尝试使用命令ln -s /usr/local/lib/libpbc.so libpbc.soln -s /usr/local/lib/libgmp.so创建链接库文件,但显示相同的错误消息。
  3. 由于Nik-U包装器使用CGO,所以我将c.go文件中的语句从#cgo LDFLAGS: -lpbc -lgmp更改为#cgo LDFLAGS: -L/usr/local/lib -lpbc -lgmp。在/usr/loca/lib中有:libgmp.a libgmp.la libgmp.so libgmp.so.10 libgmp.so.10.4.1 libpbc.a libpbc.la libpbc.so libpbc.so.1 libpbc.so.1.0.0。这一改变没有奏效。我仍然收到相同的错误消息。
  4. 我使用docker cp **.so containerName:/usr/local/lib/命令将/usr/local/lib目录的所有文件复制到docker容器的同一目录。它不工作。

以下是我怀疑可能是问题的原因:

  1. 我使用go.mod文件管理所有依赖项,但go.mod不管理原始的PBC库和GMP库。但是,我不知道如何使用GO模块来管理这两个库(用C?编写)。
  2. NIK-U的pbc包装器必须动态链接PBC和GMP库,这就是我在子目录中手动配置和安装它们的原因,并将Include信息从#include <pbc/pbc.h>更改为#include <pbc-0.5.14/include/pbc.h>不用。

有人能帮忙吗..

推荐答案

在Hyperleger Fabric中,链码基于虚拟环境以沙盒的形式执行。换句话说,它不是在对等机中执行,而是在新的docker容器中执行。
即使您将*.so文件移动到对等方,似乎也发生了cannot find错误,因为新创建的链码没有导入它。

若要解决此问题,需要执行两项任务。

1.将库导入fabric-ccenv坞站映像

Fabric的GO链码容器出现在Fabric-ccenv的图像中。基于Fabric-ccenv映像,创建嵌入库的新映像

FROM fabric-ccenv:<your_fabric_tag>
COPY <your_src_library_path> <your_target_library_path>
docker build -f <your_dockerfile> -t fabric-ccenv:<your_new_fabric_tag>

2.更改Fabric-Peer的core.yaml

您必须更改对等项的配置。即在core.yaml中设置chaincode的配置。
您可以在chaincode的builder项中设置有关Fabric-ccenv的信息。将此值更改为在上面的步骤1中创建的映像的值。

chaincode:
    id:
        path:
        name:
  #builder: $(DOCKER_NS)/fabric-ccenv:$(TWO_DIGIT_VERSION)
    builder: $(DOCKER_NS)/fabric-ccenv:<your_new_fabric_tag>
    pull: false
    golang:
        runtime: $(DOCKER_NS)/fabric-baseos:$(TWO_DIGIT_VERSION)
        dynamicLink: false

这篇关于错误:链码安装失败,状态为:500的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆