我正在尝试删除一些附加了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.如果是这样,需要设置哪些变量来覆盖最终清单.
没有单一的方法可以做你想做的事.一种方法是让您的生产图像包含您需要提供的内容,然后让您的开发图像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
; 因此,没有将它们分布在生产图像中的风险.