跳到主要内容

kmpkg 中的软件物料清单(SBOM)

kmpkg 会基于 软件包数据交换(SPDX) 规范生成软件物料清单(Software Bill of Materials, SBOM)。该清单会跟踪构建包所需的关键信息(如源码来源),旨在为包使用者提供软件透明度和完整性保障。更多关于 SBOM 和 SPDX 的信息,请参考这篇 博客文章

kmpkg 会为每个已安装的包生成包含 SBOM 信息的 SPDX 文件,文件路径为: <installed_dir>/<triplet>/share/<package name>/kmpkg.spdx.json

安装目录的位置取决于 kmpkg 的运行模式:

由于同一个包在不同目标平台(三元组)下可能有不同的依赖关系,生成的 SBOM 文件会按三元组进行区分。

kmpkg 特定字段

根据包的构建方式,kmpkg 生成的 SBOM 中可能包含以下特定字段:

name(名称)

指 SBOM 文档的名称。该字段包含包名、三元组、版本,以及用于标识包的 ABI 哈希

SPDX 参考:文档名称字段

creationInfo(创建信息)

指 SBOM 文档的创建者(即 kmpkg)。creators 字段包含 kmpkg 及其版本信息。

SPDX 参考:创建者字段

relationships(关系)

包含 kmpkg 相关 SPDX 元素之间的关系信息:

  • SPDXRef-port:指向端口(port)本身;
  • SPDXRef-file-N:指向端口中的每个文件(包括 portfile.cmake);
  • SPDXRef-binary:指向二进制包。

在 kmpkg 中,二进制包由端口构建生成。

SPDX 参考:SPDX 元素之间的关系

packages(包)

指 kmpkg 生成的每个包实例,包含三种类型:

  • SPDXRef-port:端口(port);
  • SPDXRef-binary:二进制包;
  • SPDXRef-resource:端口文件中使用的所有源码资源。

kmpkg 会通过解析 portfile.cmake 中的函数调用(如 kmpkg_from_githubkmpkg_from_gitkmpkg_download_distfilekmpkg_from_sourceforge),通过启发式方法生成源码信息。

SPDX 参考:包信息

files(文件)

指端口中的每个文件,包含文件的相对路径和校验和。

SPDX 参考:文件信息

CycloneDX 支持

kmpkg 不直接支持 CycloneDX 格式的 SBOM。建议使用 CycloneDX CLI 工具,将 kmpkg 生成的 SPDX JSON 文件转换为 CycloneDX 格式。

示例命令:

cyclonedx convert --input-file kmpkg.spdx.json --input-format spdxjson --output-format json --output-file <目标文件>

转换过程中可能会丢失部分 kmpkg 依赖信息。更多细节请参考 CycloneDX 文档