Go 配方尝试在编译时访问网络。如何将本地镜像设置为它的源?

Go 配方尝试在编译时访问网络。如何将本地镜像设置为它的源?,go,yocto,bitbake,telegraf,recipe,Go,Yocto,Bitbake,Telegraf,Recipe,我正试图用Yocto项目建立一个形象。我需要为未来完全离线构建它。我在线生成了tarball,并将它们移动到本地镜像源目录。然后,我删除了除conf目录之外的所有构建目录,添加了BB_NO_NETWORK=1,并从我的机器上禁用了解析名称。到目前为止还不错,bitbake正在从我当地的镜像中获取所有信息并制作食谱 我的问题是,我有一个食谱,试图在编译时获得一个文件。我收到一个错误,因为无法解析名称。配方为telegraf配方,错误为: ERROR: telegraf-1.14.5-r0 do_c

我正试图用Yocto项目建立一个形象。我需要为未来完全离线构建它。我在线生成了tarball,并将它们移动到本地镜像源目录。然后,我删除了除conf目录之外的所有构建目录,添加了BB_NO_NETWORK=1,并从我的机器上禁用了解析名称。到目前为止还不错,bitbake正在从我当地的镜像中获取所有信息并制作食谱

我的问题是,我有一个食谱,试图在编译时获得一个文件。我收到一个错误,因为无法解析名称。配方为telegraf配方,错误为:

ERROR: telegraf-1.14.5-r0 do_compile: Execution of '...../telegraf/1.14.5-r0/temp/run.do_compile.787' failed with exit code 1:
go: cloud.google.com/go@v0.53.0: Get "https://proxy.golang.org/cloud.google.com/go/@v/v0.53.0.mod": dial tcp: lookup proxy.golang.org on [::1]:53: read udp [::1]:36724->[::1]:53: read: connection refused
当我在机器联机时生成映像时,错误不会发生,我可以在缓存目录中找到.mod文件,因此我可以将该文件存储在镜像目录中,并在配方中设置该文件的位置,而不是该URL,但我不知道如何做到这一点。镜像似乎只在do_fetch中起作用

我试图在源文件中搜索该URL,但找不到

有人能帮我吗?

我不知道您添加的yocto、bitbake和其他标记是什么,但错误显然是由于调用go build或go install对一个项目进行了调用,该项目包含要构建的项目的一组外部依赖项。 尝试将这些DEP提取到本地缓存中,然后构建并用于构建目标包

有多种方法可以解决此问题:

供应商所有依赖项:

转到导致此问题的项目并运行Go mod vendor-将创建一个名为vendor的子目录,其中包含依赖包的源代码

然后可以添加此目录并提交更改

下次在该项目的目录中运行GO {Bug安装}时,供应商目录的存在将迫使GO工具链首先考虑其内容以满足依赖关系。

外部维护DEP,未经批准

go.mod文件支持,允许告诉哪个URL或本地目录包含依赖项的代码

因此,你可以获得所有这些dep,比如说,使用go mod download-x;请注意-x-它将告诉您包含放在本地缓存中的已获取模块的ZIP存档文件的路径名,然后将它们展开到某个位置,并在go.mod文件中放置相应的重定向

与deps保持本地缓存

在deps上操作时,go工具链参考GOCACHE环境变量

因此,您可以在项目中的某个位置设置缓存目录,导出指向它的GOCACHE,运行go mod download,添加并提交缓存

然后修改项目的构建脚本以正确设置此环境。在调用GO之前变量,并确保导出,使工具链将所有模块视为私有的,因此不通过网络查询它们。 我会选择自动售货机,但你可以做一些研究,挑选最适合你的


请确保您正在使用Go≥ 1.14.

我刚搜索了一下,发现了一个新版本的telegraf配方。我换了它,问题就解决了