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

A recipe tries to access the network in compile time. How can I set my local mirror as the source of it?

我正在尝试使用 Yocto Project 构建图像。我需要为未来完全离线构建它。我在线生成了 tarball 并将它们移动到我的本地镜像源目录。然后,我删除了除 conf 目录之外的所有构建目录,添加了 BB_NO_NETWORK = "1" 并从我的机器中禁用了解析名称。到目前为止一切顺利,bitbake 正在从我的本地镜像中获取所有内容并构建食谱。

我的问题是我有一个尝试在 do_compile 时间内获取文件的方法。我收到错误消息,因为无法解析名称。食谱是电报,错误是:

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,但我找不到它。

谁能帮帮我?

我不知道 yoctobitbake 和您添加的其他标签是什么,但错误似乎显然来自对 go buildgo install 在包含 a go.mod file 的项目上,它列出了要构建的项目的一组外部依赖项。
尝试获取这些 dep(放入本地缓存),然后构建并用于构建目标包。

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

  • 供应商所有依赖项:

    转到导致此问题的项目,然后 运行 go mod vendor — 将创建一个名为“vendor”的子目录,其中包含依赖包的源代码。

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

    下次您 运行 go {build|install} 在该项目的目录中时,“vendor”目录的存在将强制 Go 工具链首先考虑其内容以满足依赖关系。

  • 在外部维护 deps,未售出。

    go.mod 文件支持 replace directive 允许判断哪个 URL 或本地目录包含依赖项的代码。

    因此您可以获得所有这些 deps(例如,使用 go mod download -x;注意 -x — 它会告诉您包含放置在本地缓存中的已提取模块的 ZIP 存档文件的路径名) 然后将它们解包到某个地方并将适当的重定向放在 go.mod 文件中。

  • 与部门保持本地缓存

    go 工具链在 deps 上运行时参考 GOCACHE 环境变量。

    所以你可以在项目的某处设置缓存目录,export GOCACHE指向它,运行 go mod download,添加并提交缓存。

    然后您修改项目的构建脚本以正确设置此环境。调用 go 之前的变量,并确保导出 GOPRIVATE=* 以使工具链将所有模块视为“私有”,因此不会通过网络查询它们。

我会选择供应商,但您可以做一些研究并选择最适合您的。

请确保您使用的是 Go ≥ 1.14。

我刚刚搜索并找到了新版本的电报配方。我改成它,问题解决了。