我正在尝试自定义tuna-app示例的tuna-app链代码。我想在我的链代码中使用cid包来做出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。该图像是使用Dockerfile创建的;我找到的有趣的一句话是:
ADD payload/goshim.tar.bz2 $GOPATH/src/
在$ GOPATH / src文件夹中添加了tar.bz2(我相信)。 .tar.bz2文件包含chaincode使用的所有Go包。我试图插入cid包并在里面创建一个新的.tar.bz2文件。然后我重建了图像。图像现在包含cid包,但我仍然得到相同的错误。
为什么它仍然缺少包裹?
答案 0 :(得分:2)
在tuna-app的startFabric.sh中,使用以下命令启动cli容器:
docker-compose -f ./docker-compose.yml up -d cli
查看compose yaml文件中持久卷的挂载声明。你应该看到这样的东西,因为金枪鱼应用程序是基于面料样品的fabcar:
./../chaincode/:/opt/gopath/src/github.com/
如果您看到此声明,请在本地计算机中将文件夹/ hyperledger / fabric / core / chaincode / lib / cid复制到您的chaincode文件夹中。如果您使用最新版本的结构样本(https://github.com/hyperledger/fabric-samples),您应该在chaincode / abac中找到它。
答案 1 :(得分:1)
我认为你不应该创建一个新的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