DEMCON/cmake-sbom
GitHub: DEMCON/cmake-sbom
CMake自动化生成软件成分清单(SBOM)工具。
Stars: 60 | Forks: 9
.. _sec_sbom_add:
|
#### sbom添加
向 SBOM 添加内容。
.. code:: cmake
sbom_add(
FILENAME
FILETYPE
[LICENSE ]
[RELATIONSHIP ]
[SPDXID ]
)
``FILENAME``
要添加的文件。
它应该是从 ``CMAKE_INSTALL_PREFIX`` 的相对路径。
允许使用生成器表达式。
``FILETYPE``
SPDX 文件类型。
参考 `SPDX 规范 `_。
.. _SPDX_filetype: https://spdx.github.io/spdx-spec/v2.3/file-information/#83-file-type-field
``LICENSE``
文件的许可证。
未指定时默认为 ``NOASSERTION``。
``RELATIONSHIP``
与该文件相关的关联定义。
字符串 ``@SBOM_LAST_SPDXID@`` 将被替换为用于此 SBOM 项的 SPDXID。
参考 `SPDX 规范 `_。
.. _SPDX_rel: https://spdx.github.io/spdx-spec/v2.3/relationships-between-SPDX-elements/
``SPDXID``
用于标识符生成的 ID。
默认情况下,生成一个新的 ID。
无论是否指定,变量 ``SBOM_LAST_SPDXID`` 都设置为刚刚生成/使用的 SPDXID,这可以用于后续的关联定义。
.. code:: cmake
sbom_add(
DIRECTORY
FILETYPE
[LICENSE ]
[RELATIONSHIP ]
)
``DIRECTORY``
一个目录的路径,相对于 ``CMAKE_INSTALL_PREFIX``,其中所有文件都将递归地添加到 SBOM 中。
支持生成器表达式。
``LICENSE``
目录中文件的许可证。
未指定时默认为 ``NOASSERTION``。
.. code:: cmake
sbom_add(
TARGET
[LICENSE ]
[RELATIONSHIP ]
[SPDXID ]
)
``TARGET``
要添加的 CMake 目标。
假设目标在其默认位置安装,例如 ``CMAKE_INSTALL_BINDIR`` 和其他位置。
``LICENSE``
目标的许可证。
未指定时默认为 ``NOASSERTION``。
.. code:: cmake
sbom_add(
PACKAGE
[DOWNLOAD_LOCATION ]
[EXTREF ...]
[LICENSE ]
[RELATIONSHIP ]
[SPDXID ]
[SUPPLIER ]
[COPYRIGHT ]
[VERSION ]
[COMMIT ]
)
``PACKAGE``
要添加到 SBOM 的包。
名称应该是标准工具可以识别的名称,因此请使用作者或包管理器提供的名称。
包文件不会进一步分析;假设此包是项目的依赖项。
``DOWNLOAD_LOCATION``
包下载位置。
URL 可以由工具用于识别包。
``EXTREF``
外部引用,例如安全或包管理器信息。
参考 `SPDX `_ 规范以获取详细信息。
``LICENSE``
包的许可证。
未指定时默认为 ``NOASSERTION``。
``SUPPLIER``
包供应商,可以是 ``Person: name (email)`` 或 ``Organization: name (email)``。
``COPYRIGHT``
包的版权信息。
未指定时默认为 ``NOASSERTION``。
``VERSION``
包的版本。
``COMMIT``
Git 提交哈希。
.. code:: cmake
sbom_add(
EXTERNAL
FILENAME
[RENAME ]
[RELATIONSHIP ]
[SPDXID ]
)
``EXTERNAL``
外部文件中包的 SDPX 标识符。
``FILENAME``
引用另一个 SDPX 文件作为外部文档引用。
然后,依赖于该文档中命名的包。
外部 SDPX 文件将复制到 SBOM 旁边。
支持生成器表达式。
``RENAME``
将外部文档重命名为给定的文件名,不带目录。
``SPDXID``
外部文档的标识符,用作包标识符的前缀。
默认为唯一的标识符。
自动添加包标识符。
变量 ``SBOM_LAST_SPDXID`` 设置为使用的标识符。
.. code:: cmake
sbom_add(
LICENSE LicenseRef-
[NAME ]
[FILE | TEXT ]
)
``LICENSE``
``LicenseRef-...`` 标识符。
``NAME``
许可证名称。
未指定时默认为 ``NOASSERTION``。
``FILE``
许可证文件。
默认为 ``${PROJECT_SOURCE_DIR}/LICENSES/``。
``TEXT``
许可证文本。
默认为 ``FILE`` 的内容。
.. _sec_sbom_finalize:
|
#### sbom完成
最终确定 SBOM 并验证其内容/格式。
.. code:: cmake
sbom_finalize(
[NO_VERIFY | VERIFY]
)
sbom_finalize(
GRAPH
)
``NO_VERIFY``
不要对生成的 SBOM 运行验证。
默认情况下,仅在找到具有适当包的 python3 时才执行验证。
``VERIFY``
始终对生成的 SBOM 运行验证。
请确保首先在您的 Python 环境中安装 ``dist/common/requirements.txt``。
``GRAPH``
生成 SBOM 的依赖关系图。
这意味着 ``VERIFY``。
需要首先安装 ``spdx-tools[graph_generation]`` Python 包。
.. _sec_reuse:
|
## 重用
本节列出了几个帮助实现 `REUSE`_ 仓库合规性的函数。
.. _sec_reuse_lint:
|
#### 重用检查
对项目仓库源文件进行 `REUSE`_ 合规性检查。
.. code:: cmake
reuse_lint(
[TARGET ]
[CONFIG] [ALL]
)
``TARGET``
运行检查器的目标名称。
省略时默认为 ``${PROJECT_NAME}-reuse-lint``。
``CONFIG``
在 CMake 配置期间而不是在构建期间运行检查。
当此标志设置时,目标仍然会创建。
``ALL``
将 ``all`` 添加到 ``TARGET`` 的依赖项中。
.. _sec_reuse_spdx:
|
#### 重用SPDX
根据项目的源代码以及版权和许可证信息导出 SPDX 文件。
.. code:: cmake
reuse_spdx(
[TARGET ]
[OUTPUT ]
)
``TARGET``
执行导出器的目标名称。
默认为 ``${PROJECT_NAME}-reuse-spdx``。
``OUTPUT``
输出的 SPDX 文件。
.. _sec_how_to_use:
|
## 如何使用
要使用此库,请执行以下步骤:
1. 将此仓库放在您的系统中的某个位置(例如,将其作为您的项目的 Git 子模块)。
2. 将 ``cmake`` 目录添加到您的 ``CMAKE_MODULE_PATH``。
例如,将以下内容添加到您的 ``CMakeLists.txt``:
.. code:: cmake
list(APPEND CMAKE_MODULE_PATH "path/to/cmake-sbom/cmake")
3. 可选:当您想验证生成的 SBOM 以符合 `NTIA`_ 规范时,请在您的 Python(虚拟)环境中安装 ``dist/common/requirements.txt``:
.. code:: bash
$ python3 -m pip install -r path/to/cmake-sbom/dist/common/requirements.txt
4. 可选:在您的顶级 ``CMakeLists.txt`` 中,通过以下方式确定您的软件版本:
- 向您的 ``project(...)`` 传递一个 ``VERSION``;或
- 在 ``project(...)`` 之后但在 ``include(sbom)`` 之前调用 ``include(git_version)``(见下文)。
5. 在您的顶级 ``CMakeLists.txt`` 中,在 ``project(...)`` 之后某处准备 SBOM:
.. code:: cmake
include(sbom)
sbom_generate(SUPPLIER you SUPPLIER_URL https://some.where)
Add sbom_add() ...
sbom_finalize()
6. 构建 *并安装* 您的项目,例如:
.. code:: bash
mkdir build
cd build
cmake ..
cmake --build . --target all
cmake --build . --target install
SBOM 默认将生成在您的 ``CMAKE_INSTALL_PREFIX`` 目录中(另请参阅 CMake 输出)。
.. _sec_testing:
|
## 测试
为了测试目的,请转到 ``dist/``,运行 ``bootstrap`` 以安装系统依赖项,然后运行 ``build`` 以构建示例和所有测试。
当您只想在项目中使用此库时,不需要运行 bootstrap 和构建,如 `上面 `_ 所述。
.. _sec_license:
|
## 许可证
此仓库中的大部分代码都采用 MIT 许可证。
此项目符合 `REUSE`_。
.. _REUSE: https://reuse.software/
标签:Bash脚本, CMake, SPDX规范, TLS抓取, 代码生成, 关系定义, 安装路径, 数据管道, 文件类型, 构建系统, 渗透测试工具, 目录管理, 目标管理, 许可证管理, 软件供应链安全, 软件依赖管理, 软件发布, 软件可扩展性, 软件可测试性, 软件可移植性, 软件可维护性, 软件可追溯性, 软件可靠性, 软件合规性, 软件安全, 软件审计, 软件工程, 软件成分清单, 软件生命周期管理, 软件维护, 软件质量保证, 远程方法调用, 逆向工具