使用syft工具基于CentOS 7的rpmdb生成SPDX-JSON格式的SBOM
这篇文章是作为2022年OpenChain日本圣诞日历的12月8日投稿的。
https://qiita.com/advent-calendar/2022/openchainjapanwg
首先
syft 是一个用于基于容器镜像和文件系统生成软件材料清单(SBOM,Software Bill of Materials)的命令行工具和Go库。
该工具支持 OCI、Docker、C、C++、Java、Python、Ruby、Debian、Red Hat 等环境。
详细信息请查看 syft 的 GitHub 页面:
https://github.com/anchore/syft
这次我们将使用syft来根据CentOS 7的rpmdb生成SPDX-JSON格式的SBOM。
环境信息
在macOS上使用Docker启动CentOS 7容器,并在其中进行操作。本次环境信息如下。
OSmacOS Ventura 13.0.1
Docker4.15.0
CentOS7.9.2009
syftv0.62.3
步骤
创建一个CentOS 7容器。
這是在 macOS 上進行的工作。
拉取Docker镜像并创建容器。
$ docker pull centos:centos7
$ docker run -it -d --name centos7 centos:centos7
登录并确认版本号。
$ docker exec -it centos7 /bin/bash
# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (AltArch)
安装Syft
请在CentOS 7的容器中进行工作。
安装Syft。
# curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin
# ls -l /usr/local/bin/syft
-rwxr-xr-x 1 root root 55967744 Dec 4 09:50 /usr/local/bin/syft
在中国的母语中,用SPDX-JSON格式从rpmdb生成软件供应商清单。
syft /var/lib/rpm -o spdx-json > centos7_rpm.json
确认生成的SPDX-JSON格式文件。
让我们来确认一下生成的SPDX-JSON格式文件的内容。
以下是抽取的有关grep软件包的信息。
尽管能够获取软件包名称(name)和版本信息(versionInfo),但似乎无法获取许可证信息。
{
"name": "grep",
"SPDXID": "SPDXRef-Package-rpm-grep-e4d3c9df1ae7bd18",
"versionInfo": "2.20-3.el7",
"originator": "Organization: CentOS",
"downloadLocation": "NOASSERTION",
"sourceInfo": "acquired package info from RPM DB: Packages",
"licenseConcluded": "NOASSERTION",
"licenseDeclared": "NOASSERTION",
"copyrightText": "NOASSERTION",
"externalRefs": [
{
"referenceCategory": "SECURITY",
"referenceType": "cpe23Type",
"referenceLocator": "cpe:2.3:a:centos:grep:2.20-3.el7:*:*:*:*:*:*:*",
"comment": ""
},
{
"referenceCategory": "SECURITY",
"referenceType": "cpe23Type",
"referenceLocator": "cpe:2.3:a:grep:grep:2.20-3.el7:*:*:*:*:*:*:*",
"comment": ""
},
{
"referenceCategory": "PACKAGE-MANAGER",
"referenceType": "purl",
"referenceLocator": "pkg:rpm/grep@2.20-3.el7?arch=aarch64&upstream=grep-2.20-3.el7.src.rpm",
"comment": ""
}
]
},
总结
使用syft工具,我成功地基于CentOS 7的rpmdb生成了SPDX-JSON格式的SBOM。初步检查源代码发现,虽然已经实现了获取许可证的处理,但在v0.62.3版本中似乎无法正常工作。在v0.62.3版本中,可以通过SPDX-JSON格式获取软件名称、版本等信息,建议在软件管理中加以利用。
请提供一些相关的信息。
-
- syft
https://github.com/anchore/syft
SPDX
https://spdx.dev/
DockerでCentOS 7のイメージを利用してみよう
https://weblabo.oscasierra.net/docker-centos7/