当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何从bitbake构建的最终rootfs映像中删除特定的包》经验,为你挑选了1个好方法。

我正在尝试删除一些附加了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清单,但无法确定从bitbake中确切需要设置的内容.是否需要覆盖do_rootfs.如果是这样,需要设置哪些变量来覆盖最终清单.



1> Anders..:

没有单一的方法可以做你想做的事.一种方法是让您的生产图像包含您需要提供的内容,然后让您的开发图像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; 因此,没有将它们分布在生产图像中的风险.

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有