项目介绍
SBOM-TOOL 是通过源码仓库、代码指纹、构建环境、制品信息、制品内容、依赖组件等多种维度信息,为软件项目生成软件物料清单(SBOM)的一款CLI工具。
项目详情
SBOM-TOOL
English | 简体中文
SBOM-TOOL 是通过源码仓库、代码指纹、构建环境、制品信息、制品内容、依赖组件等多种维度信息,为软件项目生成软件物料清单(SBOM)的一款CLI工具。
功能特性
信息采集
- 采集源代码工程信息,包括仓库地址、版本信息等
- 采集并生成代码指纹,利用一定算法生成代码指纹
- 采集工程构建依赖环境信息,包括操作系统、内核、编译器、构建工具等
- 采集工程构建的依赖组件,支持多种语言、多种包管理器的依赖采集
- 采集最终制品包信息,包括包名、类型、唯一校验码等
采集制品内容信息,包括文件名类型、唯一校验码等
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 | pom.xml *.jar *.war`[graph]maven-dependency-tree.txt(mvn dependency:tree -DoutputFile=maven-dependency-tree.txt)` | 是 |
maven | Gradle | *.gradle .gradle.lockfile [graph]gradle-dependency-tree.txt(gradlew gradle-baseline-java:dependencies > gradle-dependency-tree.txt) | 是 |
conan | Conan | conanfile.txt conan.lock`[graph]conan-graph-info.json(conan graph info -f json > conan-graph-info.json)` | 是 |
npm | NPM | package.json package-lock.json | 否 |
npm | Yarn | [graph]yarn.lock | 是 |
npm | PNPM | [graph]pnpm.lock | 是 |
golang | Go Module | go.mod Go Binary file [graph]go-mod-graph.txt(go mod graph > go-mod-graph.txt) | 是 |
golang | Glide | glide.yml glide.yaml | 否 |
golang | GoDep | Godeps.json | 否 |
golang | Dep | Gopkg.toml | 否 |
golang | GVT | */vendor/manifest | 否 |
pypi | PIP | Pipfile.lock *dist-info/METADATA PKG-INFO *requirements*.txt setup.py [graph]pipenv-graph.txt(pipenv graph > pipenv-graph.txt) | 是 |
pypi | Poetry | [graph]poetry.lock | 是 |
conda | Conda | environment.yml environment.yaml package-list.txt | 否 |
composer | Composer | composer.json composer.lock | 否 |
cargo | Cargo | Cargo.toml [graph]Cargo.lock Rust Binary file | 是 |
carthage | Carthage | Cartfile Cartfile.resolved | 否 |
swift | SwiftPM | Package.swift | 否 |
cocoapods | Cocoapods | Podfile.lock`Podfile *.podspec` | 是 |
gem | Gem | [graph]Gemfile.lock`Gemfile *.gemspec` | 是 |
nuget | NuGet | [graph]*.deps.json *.csproj *.vbproj *.fsproj *.vcproj *.nuget.dgspec.json *.nuspec packages.json packages.lock.json | 是 |
pub | Pub | [graph]pub-deps.json(dart pub deps --json > pub-deps.json) pubspec.lock pubspec.yaml | 是 |
rpm | RPM | *.spec | 否 |
deb | DEB | *.deb`*.control` | 否 |
lua | LuaRocks | *.rockspec | 否 |
bower | Bower | *.spec | 否 |
软件架构

下载安装
下载源码编译(需要
go 1.18及以上版本)git clone git@gitee.com:JD-opensource/sbom-tool.git cd sbom-tool make默认生成多个系统架构的程序二进制包
- 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
或者通过 go install 安装
go install gitee.com/JD-opensource/sbom-tool/cmd/sbom-tool@latest或者通过下载二进制文件安装: SBOM-TOOL发行版
子命令说明
| 子命令 | 功能 |
|---|---|
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文档并指定格式
sbom-tool generate -m 4 -p ${project_path} -s ${src_path} -d ${dist_path} -o sbom.spdx.json -f spdx-json --ignore-dirs .git -n ${name} -v ${version} -u ${supplier} -b ${namespace}获取工具介绍信息
sbom-tool info更多使用案例,详见文档
开发指南
详见 开发指南文档
问题反馈&联系我们
如果在使用中遇到问题,欢迎您向我们提交ISSUE。
如何贡献
SBOM-TOOL 是一款开源的软件成分分析工具,期待您的贡献。
许可证
此项目是在 MulanPSL2 下授权的,有关详细信息,请参阅许可证文件。