如何从bitbake

时间:2015-12-06 11:16:14

标签: yocto bitbake

我正在尝试删除一些附加了GPLv3许可的开源软件包,我们无法将其作为最终生产映像的一部分进行分发。虽然可以使用" INCOMPATIBLE_LICENSE = GPLv3"删除这些包。在local.conf中,它会删除标记为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清单但无法确定需要从bitbake设置的内容。是否需要覆盖do_rootfs。如果是这样,需要设置哪些变量来覆盖最终清单。

2 个答案:

答案 0 :(得分:5)

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

我有一个类似的问题,因为我想在我的dev-image中使用gdbserver。 (Sofar,在我的开发图像中没有其他任何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;因此,没有将它们分布在生产图像中的风险。

答案 1 :(得分:1)

我想提供一个例子,如果我们想删除" openssh"来自build的包,需要更新" local.conf"文件如下所述。

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