配方尝试在编译时访问网络。如何将我的本地镜像设置为它的来源?
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,但我找不到它。
谁能帮帮我?
我不知道 yocto
、bitbake
和您添加的其他标签是什么,但错误似乎显然来自对 go build
或 go 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。
我刚刚搜索并找到了新版本的电报配方。我改成它,问题解决了。
我正在尝试使用 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,但我找不到它。
谁能帮帮我?
我不知道 yocto
、bitbake
和您添加的其他标签是什么,但错误似乎显然来自对 go build
或 go 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。
我刚刚搜索并找到了新版本的电报配方。我改成它,问题解决了。