gpt4 book ai didi

yocto - 如何从 bitbake 构建的最终 rootfs 镜像中删除特定包

转载 作者:行者123 更新时间:2023-12-01 09:21:52 33 4
gpt4 key购买 nike

我正在尝试删除一些附加了 GPLv3 许可的开源软件包,我们无法将其作为最终生产镜像的一部分进行分发。虽然可以在 local.conf 中使用“INCOMPATIBLE_LICENSE=GPLv3”删除这些包,但它会删除所有标记为 GPLv3 的包。我用过PREFERRED_VERSION_recipename=(GPLv2 recipe_version)并将所有 GPLv3 软件包降级为我们要推送到最终镜像中的 GPLv2。但是有几个 GPLv3 包我们想保留为调试镜像的一部分,例如 M4、make、gdb、bison。这些包不需要在最终的生产镜像中,但它们不能从构建中完全删除,因为在构建/调试期间需要它们。

那么,我如何从最终的 rootfs 镜像中删除这些包/配方,同时让它们成为构建过程的一部分并让它们构建。换句话说,我想让 bitbake 从 GPLv3 源构建它们,但让它们远离最终的 rootfs 图像。

我确实查看了 poky/lib/oe/manifest.py 和 rootfs.py 创建函数 ==> 正在创建最终 rootfs list 的位置,但无法从 bitbake 中弄清楚到底需要设置什么。是否需要覆盖 do_rootfs。如果是这样,需要设置哪些变量来覆盖最终 list 。

最佳答案

没有单一的方法可以做您想做的事。一种方法是让您的生产镜像包含您需要交付的内容,然后让您的开发镜像 require production-image.bb。通过这种方式,您可以轻松地使用额外的包扩展开发镜像。

我遇到了类似的问题,因为我想在我的开发镜像中使用 gdbserver。 (到目前为止,在我的开发镜像中没有其他 GPLv3 是必需的/想要的)。我所做的是设置
INCOMPATIBLE_LICENSE = "GPL-3.0 LGPL-3.0 AGPL-3.0"
INCOMPATIBLE_LICENSE_pn-gdb = ""

这基本上允许构建 gdb,但没有其他 GPLv3 许可。然后,我的图片继承了一个company-image.bbclass,而不是直接继承了image.bbclass。在 company-image.bbclass 中,我有一个像这样的函数:

python () {
for p in d.getVar('IMAGE_INSTALL', True).split():
if p in ['gdb', 'gdbserver'] and not d.getVar('IMAGE_BASENAME', True) == 'company-dev-image':
bb.fatal("gdb/gdbserver is not allowed in this image!")
}

这将确保 gdb 和 gdbserver 只能安装在 company-dev-image 中;因此,没有将它们分发到生产镜像中的风险。

关于yocto - 如何从 bitbake 构建的最终 rootfs 镜像中删除特定包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34116799/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com