vcpkg 根据软件包数据交换 (SPDX) 规范生成软件物料清单 (SBOM)。 它跟踪用于生成包的重要信息(例如原始来源),并且旨在为包使用者提供软件透明度和完整性。 有关详细信息,请参阅此关于 SBOM 和 SPDX 的博客文章。
vcpkg 会生成一个 SPDX 文件,其中包含已安装的每个包的 SBOM 信息。 这些文件位于 <installed_dir>/<triplet>/share/<package name>/vcpkg.spdx.json
中。 安装目录取决于 vcpkg 是在清单模式还是经典模式下运行。 由于包可能因目标平台的不同而具有不同的依赖项,因此生成的文件也由三元组分隔。
Vcpkg 特定字段
vcpkg 生成的以下字段可能会出现在您的 SBOM 中,具体取决于您的包的构建方式。
姓名
指文档的名称。 该字段包含包名称、三元组、版本,后跟用于标识包的 ABI 哈希值。
SPDX 参考:文档名称字段
creationInfo
指文档的创建者 vcpkg。 该 creators
字段包含 vcpkg,后跟版本。
SPDX 参考:创建者字段
关系
包含有关 vcpkg SPDX 元素之间的关系的信息。
SPDXRef-port
是指端口,SPDXRef-file-N
是指端口中的每个文件,包括 portfile.cmake
,SPDXRef-binary
是指二进制包。 在 vcpkg 中,二进制包由端口生成。
SPDX 参考:“关系”字段
包
是指 vcpkg 生成的每个包。
SPDXRef-port
是指端口,SPDXRef-binary
是指二进制包,SPDXRef-resource
是指 vcpkg 的端口文件中使用的任何源。 vcpkg 通过解析 portfile.cmake
、vcpkg_from_github
、vcpkg_from_git
和 vcpkg_download_distfile
调用从 vcpkg_from_sourceforge
中启发式地生成源信息。
SPDX 参考:包信息
文件
是指端口中的每个文件。 它包含文件的相对路径和校验和。
SPDX 参考:文件信息
CycloneDX 支持
vcpkg 不支持现成的 CycloneDX SBOM 格式。 建议使用 CycloneDX CLI 工具将 vcpkg 生成的 SPDX JSON 文件转换为 CycloneDX 格式。
例如:
cyclonedx convert --input-file vcpkg.spdx.json --input-format spdxjson --output-format json --output-file <file>
转换期间,可能会丢失某些 vcpkg 依赖项信息。 有关更多详细信息,请参阅 CycloneDX 文档 。