【问题标题】:Restrict a library from going into final image限制库进入最终图像
【发布时间】:2022-11-10 23:38:44
【问题描述】:

我正在构建一个 Yocto 图像。有一些 GPLv3 库仅在构建时需要。我已将 GPLv3 设置为 INCOMPATIBLE_LICENSE 并将构建时所需的库列入白名单。但是这些库正在进入最终图像。如何将它们限制在最终图像中并仅在构建时使用它们?

【问题讨论】:

  • 您可以发布库名称示例、食谱示例吗?
  • 假设库是 gdb,我希望在构建期间使用它,但不想进入映像。

标签: yocto bitbake yocto-recipe yocto-layer


【解决方案1】:

如果我们考虑 Yocto 的基础知识,我们就会知道进入最终映像的所有内容都是一组提供包的食谱,这些包被收集在一个单一的根文件系统中。

那么,是什么让配方进入最终的 rootfs ?

  • 通过IMAGE_INSTALL 添加。
  • 设置为另一个配方的RDEPENDS

您需要深入分析以找出最终 rootfs 中的内容。

此外,通过运行,您可能不会在 IMAGE_INSTALL 的内容中发现这一点:

bitbake -e <your_image_recipe> | grep ^IMAGE_INSTALL= 

但是,您可能会看到一些已发货的packagegroups。包组是在其他配方列表中RDEPENDS 的组。

因此,您需要仔细分析它们(如果找到),看看是什么提供了您想要从 rootfs 中禁止的库。

packagegroups 通常通过 IMAGE_FEATURES 变量动态发送。

因此,这些是负责将配方传送到 rootfs 的最重要的点。所以,分析你想要的食谱。

  • 它是另一个配方的RDEPENDS 吗?
  • 找出它被调用的确切位置。

【讨论】:

  • 这个解决方案可能有效,但我正在寻找一个基于变量的解决方案,我只需要列出这些包。
  • 如果你举一个具体的例子,也许我能理解更多,因为你的问题太笼统了。
  • 我已将 GPLv3 许可证设置为 INCOMPATIBLE_LICENSE。构建所需的软件包,我已经放入了 WHITELIST_GPL-3.0。但我只想要这些包在构建期间,我不希望它们进入图像。
【解决方案2】:

通过在配方中添加类似的内容来从 do_install 任务中删除 lib 的安装,例如你所说的 gdb

do_install:append()
{
#删除您不想发送到图像中的库
}

并确保相同的库未添加到配方中的 FILES var

例如 FILES:${PN} += "< lib >"

【讨论】:

    【解决方案3】:

    PACKAGE_EXCLUDE 为我工作。如果 PACKAGE_EXCLUDE 下列出的包进入最终映像,则会引发错误。 此外,如果任何其他包对 PACKAGE_EXCLUDE 下列出的包具有运行时依赖项,那么这也会引发错误。

    参考: https://docs.yoctoproject.org/ref-manual/variables.html#term-PACKAGE_EXCLUDE https://git.yoctoproject.org/poky/tree/meta/conf/documentation.conf#n313

    【讨论】:

      猜你喜欢
      • 2021-10-16
      • 2016-02-09
      • 1970-01-01
      • 2019-07-26
      • 1970-01-01
      • 2015-07-25
      • 2014-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多