37 创建软件物料清单

能够为项目构建镜像、确认所有软件组件的许可证(见 “处理许可证”)并应用漏洞修复(见 “检查漏洞”)后, OpenEmbedded 构建系统可以生成一份说明,列出使用的所有组件、许可证、依赖、 源码、应用的变更以及已修复的已知漏洞。

这份说明以 软件物料清单 ( SBOM )的形式生成,采用 SPDX 标准。

发布软件时,这是提供软件镜像和 SDK 软件供应链信息的最标准方式。 SBOM 工具常用于确保开源许可证合规:它提供产品所用的许可证文本, 使法务部门和最终用户能够以标准格式阅读。

SBOM 列出了软件供应链使用的全部组件,因此对于评估漏洞暴露情况也 十分重要。

OpenEmbedded 构建系统默认生成这些信息,即在 INHERIT_DISTRO 中 继承 create-spdx 类。

如果需要,可以在 configuration file 中禁用:

INHERIT_DISTRO:remove = "create-spdx"

有两种生成 SBOM 元数据的方式:

  • 构建镜像后,可在 Build Directory 的 tmp/deploy/images/MACHINE/ 中获得 JSON 格式的 SPDX 输出,文件名为 IMAGE-MACHINE.spdx.json。

  • 仅使用配方元数据生成 SBOM 文档:

    $ bitbake <recipe> -c create_recipe_sbom
    

    镜像 SBOM 文档也包含配方 SBOM,但仅限参与该镜像构建的配方。

create-spdx 类提供了以下选项,以便在输出的 SPDX 数据中包含更多信息:

另见 SPDX_CUSTOM_ANNOTATION_VARS 变量,它允许为配方关联自定义注释。 SPDX 项目网站的 工具页面 列出了可读取和转换 OpenEmbedded 构建系统所生成 SPDX 数据的工具。

更多信息见 Yocto Project 参考手册词汇表 中 以 SPDX_ 开头的变量定义。

还可观看 Joshua Watt 在 FOSDEM 2023 的演讲 使用 OpenEmbedded 和 Yocto Project 自动生成 SBoM, 以及 FOSDEM 2024 的演讲 Yocto Project 中的 SPDX。