2.7 生成软件物料清单(SBOM)

原文链接: https://docs.swift.org/latest/documentation/packagemanagerdocs/generatingsboms/

2.7 生成软件物料清单(SBOM)

用 SBOM 文档列出组件与依赖的清单。

概述

Swift Package Manager 可以为 Swift 包和产品生成软件物料清单(SBOM)文档。

目前 Swift Package Manager 支持两种 SBOM 格式:CycloneDX 和 SPDX。

你可以用带有 SBOM 标志的 swift build 命令,或者专用的 swift package generate-sbom 子命令来生成 SBOM。

用 build 命令生成 SBOM

用命令 swift build 编译项目并生成 SBOM。把 --sbom-spec 与 --target 标志一起使用会报错。

通过 Swift Build 构建后端生成 SBOM 时,会把构建期的条件编译纳入考虑。

1
2
3
swift build --build-system swiftbuild --sbom-spec cyclonedx
swift build --build-system swiftbuild --sbom-spec spdx
swift build --build-system swiftbuild --sbom-spec cyclonedx --sbom-spec spdx

下面的例子不使用 Swift Build 构建后端来生成 SBOM。由于没有把构建期条件编译应用于 SBOM,不使用 Swift Build 生成的 SBOM 可能并不完全准确。

1
2
3
swift build --build-system native --sbom-spec cyclonedx
swift build --build-system native --sbom-spec spdx
swift build --build-system native --sbom-spec cyclonedx --sbom-spec spdx

用 package 命令生成 SBOM

swift package generate-sbom 在不构建的情况下生成 SBOM。由于没有应用构建期条件编译,这个 SBOM 不如用 swift build --build-system swiftbuild 生成的 SBOM 准确。

要获得最高准确度,请使用命令 swift build --build-system swiftbuild 生成 SBOM。

不指定 --sbom-spec 时,会生成 Swift Package Manager 支持的所有 SBOM 规范。

1
2
3
4
swift package generate-sbom --sbom-spec cyclonedx
swift package generate-sbom --sbom-spec spdx
swift package generate-sbom --sbom-spec cyclonedx --sbom-spec spdx
swift package generate-sbom

配置额外的标志

下列标志对 swift build 和 swift package generate-sbom 都适用:

为单个产品生成 SBOM

用 --product 标志为包中的某个特定产品生成 SBOM。

1
2
swift build --build-system swiftbuild --product MyProduct --sbom-spec cyclonedx
swift package generate-sbom --product MyProduct --sbom-spec spdx

过滤 SBOM 内容

用 --sbom-filter <type> 按包或产品过滤 SBOM。默认情况下,SBOM 同时包含包和产品。无论应用了哪种过滤,Swift Package Manager 始终会包含主组件。

1
2
swift build --build-system swiftbuild --sbom-spec cyclonedx --sbom-filter package
swift package generate-sbom --sbom-spec spdx --sbom-filter product

把 SBOM 输出到自定义目录

Swift Package Manager 默认把生成的 SBOM 放在 <build_output>/sboms。用 --sbom-output-dir 可以为生成的 SBOM 指定其他目录。

1
2
swift build --build-system swiftbuild --sbom-spec cyclonedx --sbom-output-dir <path>
swift package generate-sbom --sbom-spec spdx --sbom-output-dir <path>

把 SBOM 生成错误降级为警告

默认情况下,如果 SBOM 生成失败,build 或 package 命令也会失败。--sbom-warning-only 标志会把所有 SBOM 生成错误转换为警告。

1
2
swift build --build-system swiftbuild --sbom-spec cyclonedx --sbom-warning-only
swift package generate-sbom --sbom-spec spdx --sbom-warning-only

配置环境变量

生成 SBOM 也可以通过环境变量触发和配置,只需在运行 swift build 或 swift package generate-sbom 之前设置这些变量。使用命令行标志时,标志的优先级高于环境变量。

可以配置下列环境变量:

  • SWIFTPM_BUILD_SBOM_SPEC
  • SWIFTPM_BUILD_SBOM_OUTPUT_DIR
  • SWIFTPM_BUILD_SBOM_FILTER
  • SWIFTPM_BUILD_SBOM_WARNING_ONLY
1
2
SWIFTPM_BUILD_SBOM_SPEC=cyclonedx,spdx swift build --build-system swiftbuild
SWIFTPM_BUILD_SBOM_SPEC=cyclonedx swift package generate-sbom

用 swift build 配合环境变量生成 SBOM 时,swift build 会生成 SBOM,当且仅当设置了 SWIFTPM_BUILD_SBOM_SPEC。