使用Yocto锁定软件包版本

使用Yocto锁定软件包版本,yocto,bitbake,Yocto,Bitbake,我们将要建立一个生产构建服务器来维护嵌入式linux产品。我知道我可以在配方中指定带有PREFERRED\u version的软件包版本,但这可能需要很多时间来锁定图像中的每个工具(即grep,strace,ecc)。如果我们需要重建服务器,这将非常有用(我们可以备份整个服务器,但这不会被跟踪。即使将所有内容提交给git repo似乎也不太聪明,如果我错了,请纠正我) 有没有办法获得像package lock.json或图像足迹这样的东西 编辑 我想要实现的是一份 PREFERRED_VERSI

我们将要建立一个生产构建服务器来维护嵌入式linux产品。我知道我可以在配方中指定带有
PREFERRED\u version
的软件包版本,但这可能需要很多时间来锁定图像中的每个工具(即
grep
strace
,ecc)。如果我们需要重建服务器,这将非常有用(我们可以备份整个服务器,但这不会被跟踪。即使将所有内容提交给git repo似乎也不太聪明,如果我错了,请纠正我)

有没有办法获得像
package lock.json
或图像足迹这样的东西

编辑

我想要实现的是一份

PREFERRED_VERSION_<package0> = "xxx"
...
PREFERRED_VERSION_<packageN> = "xxx" 
首选版本 ... 首选版本=“xxx” 我可以使用它在一个清晰的系统上复制映像(没有任何缓存文件)。似乎没有这样的命令可以直接执行该操作,相反,可以通过

bitbake <image> -s
bitbake-s

通过一个简单的脚本生成我想要的内容。

我们有发行版配置,您可以在其中指定所有版本首选项。例如,以下示例是从和复制的

因此,您可以在发行版配置中定义所有
SRCREV
首选版本
,或者编写一个单独的
distro.inc
并使用
require
添加它。要将其用于编译,可以定义

DISTRO ?= "poky-bleeding"

在您的
conf/local.conf
中。通过这种方式,您可以就地控制基于git的配方的所有版本和SRCREV。

好吧,但是如果我构建了一个具有最新版本的映像,并且我想要该版本的快照,那么即使我从头开始(已经导入了所需的元层),映像也可以复制呢?如果我得到它,在您的解决方案中,我必须手动收集所有版本(或脚本),然后用它们编写一个
distro.inc
。我说得对吗?@gabbla:是的,你需要以某种方式维护这些版本。如果我理解正确,您的问题是要在一个地方维护所需的版本。@gabbla:如果您使用最新版本生成,那么yocto将所有信息存储为缓存。当您将同一版本重新生成到新的临时版本中时,yocto可以使用sstate缓存复制二进制文件,而不是从源代码生成。为此,您需要在
conf/local.conf
中指定common
SSTATE\u DIR
,这就是重点,我将维护一个
distro.inc
,它更易于保持版本控制,并将其提供给任何需要它的发行版。关于
SSTATE\u DIR
,我将不依赖预下载的源代码,因为可能存在这样的情况:我没有缓存,签出最新版本可能会导致更新的包,然后是不同的包image@gabbla:那么你的问题是什么?如果您切换到最新版本,您将下载新的源代码版本,并将从源代码处完成编译。这就是它应该工作的方式。当您想要重新执行相同的版本时,它可以从缓存中复制。但yocto依赖于版本,当您更改它时,它会将其添加到任务队列并重新编译。
DISTRO ?= "poky-bleeding"