[开源]多维度为软件项目生成软件物料清单(SBOM)的一款CLI工具
![[开源]多维度为软件项目生成软件物料清单(SBOM)的一款CLI工具](https://yy123.ink/api/img/1782607398015-jmnnln.jpg)
一、开源项目简介
SBOM-TOOL
SBOM-TOOL 是通过源码仓库、代码指纹、构建环境、制品信息、制品内容、依赖组建等多种维度信息,为软件项目生成软件物料清单(SBOM)的一款CLI工具。
二、开源协议
使用MulanPSL-2.0开源协议
三、界面展示
四、功能概述
功能特性
信息采集
-
采集源代码工程信息,包括仓库地址、版本信息等
-
采集并生成代码指纹,利用一定算法生成代码指纹
-
采集工程构建依赖环境信息,包括操作系统、内核、编译器、构建工具等
-
采集工程构建的依赖组件,支持多种语言、多种包管理器的依赖采集
-
采集最终制品包信息,包括包名、类型、唯一校验码等
-
采集制品内容信息,包括文件名类型、唯一校验码等
SBOM文档
-
组装SBOM文档,基于上述采集的信息组装标准SBOM文档
-
规范格式转换,支持XSPDX、SPDX等规范,支持JSON等格式
-
规范格式校验,支持XSPDX、SPDX等规范,支持JSON等格式
代码指纹生成能力
|
开发语言 |
是否支持 |
|
C/C++ |
是 |
|
Java |
是 |
|
C# |
是 |
|
Dart |
是 |
|
Golang |
是 |
|
Javascript |
是 |
|
Objective-C |
是 |
|
Php |
是 |
|
Python |
是 |
|
Ruby |
是 |
|
Rust |
是 |
|
Swift |
是 |
|
Lua |
是 |
依赖包扫描能力
现已支持以下编程语言相关的配置文件解析、二进制包解析,后续会逐步支持更多的编程语言。
|
包类型 |
包管理器 |
解析文件 |
是否支持依赖图谱 |
|
maven |
Maven |
|
是 |
|
maven |
Gradle |
|
是 |
|
conan |
Conan |
|
是 |
|
npm |
NPM |
|
否 |
|
npm |
Yarn |
|
是 |
|
npm |
PNPM |
|
是 |
|
golang |
Go Module |
|
是 |
|
golang |
Glide |
|
否 |
|
golang |
GoDep |
|
否 |
|
golang |
Dep |
|
否 |
|
golang |
GVT |
|
否 |
|
pypi |
PIP |
|
是 |
|
pypi |
Poetry |
|
是 |
|
conda |
Conda |
|
否 |
|
composer |
Composer |
|
否 |
|
cargo |
Cargo |
|
是 |
|
carthage |
Carthage |
|
否 |
|
swift |
SwiftPM |
|
否 |
|
cocoapods |
Cocoapods |
|
是 |
|
gem |
Gem |
|
是 |
|
nuget |
NuGet |
|
是 |
|
pub |
Pub |
|
是 |
|
rpm |
RPM |
|
否 |
|
lua |
LuaRocks |
|
否 |
|
bower |
Bower |
|
否 |
五、技术选型
软件架构

下载安装
1、下载源码编译(需要 go 1.18 及以上版本)
默认生成多个系统架构的程序二进制包
-
Linux X86_64:sbom-tool-linux-amd64
-
Linux arm64:sbom-tool-linux-arm64
-
Windows X86_64:sbom-tool-windows-amd64.exe
-
Windows arm64:sbom-tool-windows-arm64.exe
-
MacOS amd64: sbom-tool-darwin-amd64
-
MacOS arm64: sbom-tool-darwin-arm64
子命令说明
|
子命令 |
功能 |
|
help |
工具帮助手册 |
|
artifact |
采集软件包制品信息 |
|
assembly |
把各阶段生成的文档组装为SBOM文档 |
|
completion |
为指定的shell生成自动完成脚本 |
|
convert |
转换SBOM文档格式 |
|
env |
生成环境信息 |
|
generate |
生成SBOM文档 |
|
package |
收集包依赖项 |
|
source |
收集源代码信息 |
|
validate |
验证SBOM文档格式 |
|
info |
获取工具介绍信息 |
|
modify |
修改SBOM文档属性 |
参数说明
|
参数 |
短参数 |
描述 |
使用样例 |
|
--log-level |
指定日志级别,包括 debug、info、warn、error |
--log-level info |
|
|
--log-path |
指定日志路径,默认在用户主目录下自动生成日志目录及日志文件($home/sbom-tool/sbom-tool.log) |
--log-path /tmp/sbom.log |
|
|
--quiet |
-q |
无控制台输出 |
--quiet -q |
|
--ignore-dirs |
要忽略的目录,跳过所有点目录,以逗号分隔。示例:NODE_MODULES,LOGS |
--ignore-dirs log,logs |
|
|
--language |
-l |
指定语言(目前支持:java,cpp)(默认为“*”) |
--language java -l cpp |
|
--parallelism |
-m |
并发度(默认为8) |
--parallelism 4 -m 9 |
|
--output |
-o |
指定结果输出文件存放路径及名称,默认会在当前目录下自动生成 |
--output /tmp/sbom.json |
|
--src |
-s |
指定源代码存放路径,默认为当前目录 |
--src /tmp/sbomtool/src/ |
|
--path |
-p |
指定项目工程主目录;assembly子命令中用于指定各阶段临时文档路径 |
--path /tmp/sbomtool/ |
|
--dist |
-d |
指定制品存放路径,默认为当前目录 |
--dist /tmp/sbomtool/bin/ |
|
--format |
-f |
指定SBOM文档格式(目前支持:xspdx-json、spdx-json、spdx-tagvalue)(默认为spdx-json) |
--format spdx-json -f spdx-json |
|
--input |
-i |
指定SBOM文档作为输入 |
--input /tmp/sbom.jsom |
|
--algorithm |
-a |
用于指定生成SBOM文档标识的算法(目前支持:SHA1、SHA256、SM3)(默认为SM3) |
--algorithm SHA256 |
SBOM文档规范与格式
|
规范 |
格式 |
SBOM文档格式 |
是否支持 |
|
XSPDX |
JSON |
xspdx-json |
已支持 |
|
SPDX |
JSON |
spdx-json |
已支持 |
|
SPDX |
TagValue |
spdx-tagvalue |
已支持 |
XSPDX 是基于SPDX扩展的SBOM格式规范
使用示例
生成SBOM文档并指定格式
获取工具介绍信息
更多使用案例,详见文档
开发指南
详见 开发指南文档