在 $GOROOT 或 $GOPATH 中找不到包 cid
Cannot find package cid in $GOROOT or $GOPATH
我正在尝试在我的链代码中自定义 tuna-app example. I want to use cid 包的 tuna-app 链代码,以做出关于允许 运行 链代码的 ABAC 决策。当我尝试安装链代码时,出现以下错误:
Error: Error getting chaincode code chaincode:
Error getting chaincode package bytes: Error obtaining dependencies for github.com/hyperledger/fabric/core/chaincode/lib/cid:
<go, [list -f {{ join .Deps "\n"}} github.com/hyperledger/fabric/core/chaincode/lib/cid]>: failed with error: "exit status 1"
cannot load package: package github.com/hyperledger/fabric/core/chaincode/lib/cid: cannot find package "github.com/hyperledger/fabric/core/chaincode/lib/cid" in any of:
/opt/go/src/github.com/hyperledger/fabric/core/chaincode/lib/cid (from $GOROOT)
/opt/gopath/src/github.com/hyperledger/fabric/core/chaincode/lib/cid (from $GOPATH)
我正在使用 Docker 到 运行 peer、orderer、ca 和 cli 容器。用于构建链代码的 Docker 图像是 hyperledger/fabric-ccenv。此图像是使用 Docker 文件创建的;我发现的有趣的一行是:
ADD payload/goshim.tar.bz2 $GOPATH/src/
将 tar.bz2 添加到 $GOPATH/src 文件夹中(我相信)。 .tar.bz2 文件包含链代码使用的所有 Go 包。我试图插入 cid 包并创建一个新的 .tar.bz2 文件,其中包含该包。然后我重建了图像。图像现在包含 cid 包,但我仍然得到相同的错误。
为什么还不见包裹?
我认为你不应该创建一个新的 goshim.tar.bz2
。如果您认为更容易确保 cid 在存档中的正确路径中,例如github.com/hyperledger/fabric/core/chaincode/lib/cid
要对此进行测试,您可以进行调试输出:
ADD payload/goshim.tar.bz2 $GOPATH/src/
RUN ls $GOPATH/src/github.com/hyperledger/fabric/core/chaincode/lib/cid
我建议在 Dockerfile 中下载 cid:
RUN go get -d github.com/hyperledger/fabric/core/chaincode/lib/cid
在 tuna-app 的 startFabric.sh 中,您使用以下命令启动 cli 容器:
docker-compose -f ./docker-compose.yml up -d cli
查看 compose yaml 文件中持久卷的挂载声明。您应该会看到类似这样的内容,因为 tuna-app 基于 fabric-samples 中的 fabcar:
./../chaincode/:/opt/gopath/src/github.com/
如果您看到此声明,请将本地计算机中的文件夹 /hyperledger/fabric/core/chaincode/lib/cid 复制到您的链代码文件夹中。如果您使用的是最新版本的织物样本 (https://github.com/hyperledger/fabric-samples),您应该在 chaincode/abac 中找到它。
我正在尝试在我的链代码中自定义 tuna-app example. I want to use cid 包的 tuna-app 链代码,以做出关于允许 运行 链代码的 ABAC 决策。当我尝试安装链代码时,出现以下错误:
Error: Error getting chaincode code chaincode:
Error getting chaincode package bytes: Error obtaining dependencies for github.com/hyperledger/fabric/core/chaincode/lib/cid:
<go, [list -f {{ join .Deps "\n"}} github.com/hyperledger/fabric/core/chaincode/lib/cid]>: failed with error: "exit status 1"
cannot load package: package github.com/hyperledger/fabric/core/chaincode/lib/cid: cannot find package "github.com/hyperledger/fabric/core/chaincode/lib/cid" in any of:
/opt/go/src/github.com/hyperledger/fabric/core/chaincode/lib/cid (from $GOROOT)
/opt/gopath/src/github.com/hyperledger/fabric/core/chaincode/lib/cid (from $GOPATH)
我正在使用 Docker 到 运行 peer、orderer、ca 和 cli 容器。用于构建链代码的 Docker 图像是 hyperledger/fabric-ccenv。此图像是使用 Docker 文件创建的;我发现的有趣的一行是:
ADD payload/goshim.tar.bz2 $GOPATH/src/
将 tar.bz2 添加到 $GOPATH/src 文件夹中(我相信)。 .tar.bz2 文件包含链代码使用的所有 Go 包。我试图插入 cid 包并创建一个新的 .tar.bz2 文件,其中包含该包。然后我重建了图像。图像现在包含 cid 包,但我仍然得到相同的错误。
为什么还不见包裹?
我认为你不应该创建一个新的 goshim.tar.bz2
。如果您认为更容易确保 cid 在存档中的正确路径中,例如github.com/hyperledger/fabric/core/chaincode/lib/cid
要对此进行测试,您可以进行调试输出:
ADD payload/goshim.tar.bz2 $GOPATH/src/
RUN ls $GOPATH/src/github.com/hyperledger/fabric/core/chaincode/lib/cid
我建议在 Dockerfile 中下载 cid:
RUN go get -d github.com/hyperledger/fabric/core/chaincode/lib/cid
在 tuna-app 的 startFabric.sh 中,您使用以下命令启动 cli 容器:
docker-compose -f ./docker-compose.yml up -d cli
查看 compose yaml 文件中持久卷的挂载声明。您应该会看到类似这样的内容,因为 tuna-app 基于 fabric-samples 中的 fabcar:
./../chaincode/:/opt/gopath/src/github.com/
如果您看到此声明,请将本地计算机中的文件夹 /hyperledger/fabric/core/chaincode/lib/cid 复制到您的链代码文件夹中。如果您使用的是最新版本的织物样本 (https://github.com/hyperledger/fabric-samples),您应该在 chaincode/abac 中找到它。