vcpkg 中的软件物料清单

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.cmakeSPDXRef-binary 是指二进制包。 在 vcpkg 中,二进制包由端口生成。

SPDX 参考:“关系”字段

是指 vcpkg 生成的每个包。 SPDXRef-port 是指端口,SPDXRef-binary 是指二进制包,SPDXRef-resource 是指 vcpkg 的端口文件中使用的任何源。 vcpkg 通过解析 portfile.cmakevcpkg_from_githubvcpkg_from_gitvcpkg_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 文档