【问题标题】:Lock packages version with Yocto使用 Yocto 锁定软件包版本
【发布时间】:2018-11-14 21:05:02
【问题描述】:

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

有没有办法获得package-lock.json 或图像足迹之类的东西?

编辑

我想要实现的是一个列表

PREFERRED_VERSION_<package0> = "xxx"
...
PREFERRED_VERSION_<packageN> = "xxx" 

我可以用来在清晰的系统上复制图像(没有任何缓存文件)。好像没有这样的命令可以直接做到这一点,而是可以通过

获取镜像包和版本的列表
bitbake <image> -s

并通过一个简单的脚本生成我正在寻找的内容。

【问题讨论】:

    标签: yocto bitbake


    【解决方案1】:

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

    PREFERRED_VERSION_glib-2.0 ?= "2.17.4"
    PREFERRED_VERSION_glib-2.0-native ?= "2.17.4"
    PREFERRED_VERSION_atk ?= "1.22.0"
    PREFERRED_VERSION_pango ?= "1.21.2"
    PREFERRED_VERSION_gtk+ ?= "2.13.3"
    
    require conf/distro/include/poky-floating-revisions.inc
    require conf/distro/poky.conf
    
    DISTRO = "poky-bleeding"
    DISTROOVERRIDES = "poky"
    

    因此,您可以在发行版配置中定义所有SRCREVPREFERRED_VERSION,或者编写单独的distro.inc 并使用require 添加它。要使用它进行编译,您可以定义,

    DISTRO ?= "poky-bleeding"
    

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

    【讨论】:

    • 好的,但是如果我用最新版本构建一个镜像并且我想要那个版本的快照,那么即使我从头开始也可以复制镜像(需要的元层已经导入) ?如果我明白了,在您的解决方案中,我必须手动(或脚本)收集所有版本,然后与他们一起写一个distro.inc。我说的对吗?
    • @gabbla:是的,您需要以某种方式维护这些版本。如果我理解正确,您的问题是要在一个地方维护所需的版本。
    • @gabbla:如果您使用最新版本构建,则 yocto 会将所有信息存储为缓存,当您再次将相同版本重新构建到新的临时构建时,yocto 可以使用 sstate 缓存复制二进制而不是从源代码构建它。为此,您需要在 conf/local.conf 中指定常见的 SSTATE_DIR
    • 是的,这就是重点,我将维护一个distro.inc,它更容易受到版本控制,并将其提供给任何需要它的发行版。关于SSTATE_DIR,我不会依赖预下载的资源,因为可能存在我没有缓存的情况,并且检查最新版本可能会导致更新的包,然后在不同的图像中跨度>
    • @gabbla:那你在这里问什么?如果您切换到最新版本,您将下载新的源代码版本并从源代码完成编译。这就是它应该工作的方式。当你想重新做相同的版本时,它可以从缓存中复制。但是yocto依赖于版本,当你改变它时,它会将它添加到任务队列并重新编译它。
    猜你喜欢
    • 1970-01-01
    • 2018-07-21
    • 2023-03-25
    • 2021-09-16
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 2023-01-04
    相关资源
    最近更新 更多