【问题标题】:how to remove specific packages from the final rootfs image built by bitbake如何从 bitbake 构建的最终 rootfs 映像中删除特定包
【发布时间】:2016-03-11 01:34:43
【问题描述】:

我正在尝试删除一些附加了 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 是否需要被覆盖。如果是这样,需要设置哪些变量来覆盖最终清单。

【问题讨论】:

    标签: yocto bitbake


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2016-03-08
        • 1970-01-01
        • 2022-01-27
        • 2015-06-04
        • 2017-07-25
        • 2019-04-30
        • 1970-01-01
        • 1970-01-01
        • 2018-03-09
        相关资源
        最近更新 更多