Yocto 如何从bitbake生成的最终rootfs映像中删除特定包

Yocto 如何从bitbake生成的最终rootfs映像中删除特定包,yocto,bitbake,Yocto,Bitbake,我正在尝试删除一些附加了GPLv3许可证的开源软件包,这些软件包不能作为最终产品映像的一部分分发。虽然可以使用local.conf中的“compatible_LICENSE=GPLv3”删除这些包,但它会删除标记为GPLv3的每个包。 我用过 首选\u版本\u recipename=(GPLv2配方\u版本) 并将所有GPLv3包降级为GPLv2,我们希望将其推送到最终映像中。但是有几个GPLv3包我们想保留作为调试映像的一部分,例如M4、make、gdb、bison。这些包不需要出现在最终的生

我正在尝试删除一些附加了GPLv3许可证的开源软件包,这些软件包不能作为最终产品映像的一部分分发。虽然可以使用local.conf中的“compatible_LICENSE=GPLv3”删除这些包,但它会删除标记为GPLv3的每个包。 我用过 首选\u版本\u recipename=(GPLv2配方\u版本) 并将所有GPLv3包降级为GPLv2,我们希望将其推送到最终映像中。但是有几个GPLv3包我们想保留作为调试映像的一部分,例如M4、make、gdb、bison。这些包不需要出现在最终的生产映像中,但不能完全从构建中删除,因为在构建/调试期间需要它们

那么,如何从最终的rootfs映像中删除这些包/配方,同时让它们作为构建过程的一部分,并让它们进行构建呢。换句话说,我想让bitbake从GPLv3源代码构建它们,但不让它们出现在最终的rootfs映像中


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

没有一种方法可以满足您的要求。一种方法是让产品映像包含您需要交付的内容,然后让您的开发人员映像
要求产品映像.bb
。通过这种方式,您可以使用额外的包轻松地扩展dev映像

我有一个类似的问题,因为我想在我的开发映像中使用gdbserver。(到目前为止,在我的开发人员映像中没有其他GPLv3是必需的/需要的)。我所做的就是

不兼容的_LICENSE=“GPL-3.0 LGPL-3.0 AGPL-3.0”
不兼容的\u许可证\u pn-gdb=“”

这基本上允许构建gdb,但没有其他GPLv3许可的东西。然后,我的图像继承一个
公司图像.bbclass
,而不是直接继承
图像.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
中;因此,不存在在生产映像中分发它们的风险。

我想提供一个示例,即如果我们想从构建中删除“openssh”包,需要更新“local.conf”文件,如下所述

请将以下行添加到BUILDFOLDER/conf/local.conf文件中 PACKAGECONFIG_remove=“openssh”