LoginSignup
1

More than 1 year has passed since last update.

syftを使ってCentOS 7のrpmdbを元にSPDX-JSON形式のSBOMを生成する

Last updated at Posted at 2022-12-04

この記事はOpenChain Japan Advent Calendar 2022の12月8日分として投稿します。
https://qiita.com/advent-calendar/2022/openchainjapanwg

はじめに

syftはコンテナイメージやファイルシステムを元にSBOM (Software Bill of Materials)を生成するためのCLIツールおよび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のコンテナを立ち上げて、その中で作業をします。
今回の環境情報は以下です。

コンポーネント バージョン 備考
PC M1 MacBook Pro
OS macOS Ventura 13.0.1
Docker 4.15.0
CentOS 7.9.2009
syft v0.62.3

手順

CentOS 7のコンテナを作成

macOS上での作業です。

dockerイメージをpullし、コンテナを作成します。

$ 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

rpmdbからSPDX-JSON形式でSBOMを生成

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形式で取得できるので、ソフトウェア管理に活用してみてはどうでしょうか。

参考情報

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1