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_github、kmpkg_from_git、kmpkg_download_distfile、kmpkg_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 文档。