Armadilloフォーラム

mkswuコマンドにてsbom生成に失敗する

rikuya-h

2025年2月25日 15時25分

armadillo-G4にてプロジェクトを作成しmkswuにてsbom生成がしたいのですが以下エラーにより
生成できません。

# 実行ログ

atmark@atde9:~/hoge-hoge-proto/Armadillo_G4$ mkswu huga.desc 
Enter pass phrase for /home/atmark/mkswu/swupdate.key:
INFO:root:Building SBOM...
Traceback (most recent call last):
  File "/usr/lib/python3.9/runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.9/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/usr/lib/python3/dist-packages/make-sbom/__main__.py", line 4, in <module>
    main()
  File "/usr/lib/python3/dist-packages/make-sbom/make_sbom.py", line 128, in main
    output_sbom(document, args.output, filename, validate=args.validate)
  File "/usr/lib/python3/dist-packages/make-sbom/make_sbom.py", line 74, in output_sbom
    write_file(document, out_file, validate=validate)
  File "/usr/lib/python3/dist-packages/spdx_tools/spdx/writer/write_anything.py", line 16, in write_file
    json_writer.write_document_to_file(document, file_name, validate)
  File "/usr/lib/python3/dist-packages/spdx_tools/spdx/writer/json/json_writer.py", line 38, in write_document_to_file
    write_document_to_stream(document, out, validate, converter, drop_duplicates)
  File "/usr/lib/python3/dist-packages/spdx_tools/spdx/writer/json/json_writer.py", line 25, in write_document_to_stream
    document = validate_and_deduplicate(document, validate, drop_duplicates)
  File "/usr/lib/python3/dist-packages/spdx_tools/spdx/writer/write_utils.py", line 17, in validate_and_deduplicate
    raise ValueError(f"Document is not valid. The following errors were detected: {validation_messages}")
ValueError: Document is not valid. The following errors were detected: [ValidationMessage(validation_message="every spdx_id must be unique within the document, but found the following duplicates: ['SPDXRef-DocumentRoot-Directory--home-atmark-hoge-hoge-proto-Armadillo-G4-alert', 'SPDXRef-DocumentRoot-Directory--home-atmark-hoge-hoge-proto-Armadillo-G4-app', 'SPDXRef-DocumentRoot-Directory--home-atmark-hoge-hoge-proto-Armadillo-G4-loki', 'SPDXRef-DocumentRoot-Directory--home-atmark-hoge-hoge-proto-Armadillo-G4-prom', 'SPDXRef-DocumentRoot-Directory--home-atmark-hoge-hoge-proto-Armadillo-G4-promtail', 'SPDXRef-Package-apk-alpine-baselayout-21e54be9d7ca763c', 'SPDXRef-Package-apk-alpine-baselayout-data-9ff96f942d2401f2', 'SPDXRef-Package-apk-alpine-keys-0e5100e3d266a135', 'SPDXRef-Package-apk-apk-tools-78c55d64ab350462', 'SPDXRef-Package-apk-busybox-1bb81cc0e13f362d', 'SPDXRef-Package-apk-busybox-binsh-30b5e2f594950cb2', 'SPDXRef-Package-apk-ca-certificates-bundle-4db628a5f734287c', 'SPDXRef-Package-apk-ca-certificates-cd51c1f9eed42514', 'SPDXRef-Package-apk-musl-03e521237cbed45a', 'SPDXRef-Package-apk-musl-utils-c84ae08b59df5c6e', 'SPDXRef-Package-apk-scanelf-54f3623fdd8fb8d4', 'SPDXRef-Package-apk-ssl-client-692d7c5cf4a3b25a', 'SPDXRef-Package-apk-zlib-d8258d3d7c48cfbf', 'SPDXRef-Package-binary-busybox-734e08374d08ee01']", context=ValidationContext(spdx_id='SPDXRef-DOCUMENT', parent_id=None, element_type=<SpdxElementType.DOCUMENT: 7>, full_element=None))]
SBOM ファイル  を作成できませんでした。
huga.swu を作成しました。

# huga.desc

swdesc_option component=extra_os.huga
swdesc_option version=54
swdesc_option BUILD_SBOM=auto
swdesc_option sbom_config_yaml=huga.sbom_config.yaml
~以下略~

# huga.sbom_config.yaml

# For details on the SBOM description rules, please refer to the following URL:
# https://spdx.github.io/spdx-spec/v2.2.2/
 
Document:
    documentNamespace: https://localhost/huga.swu
    creators:
    - Organization: HOGE
 
Package:
    mainPackage:
        version: 1
        creators:
            - Organization: HOGE
        copyrightText: Copyright 2024 HOGE
    huga:
        version: latest

エラー原因をご教示頂けると助かります。
よろしくお願いします。

コメント

at_reika.yamazaki

2025年2月25日 18時48分

お世話になっております。山崎です。
いただいたファイルの情報を含んだファイルを作成し、コマンドを実行してみたのですが、こちらの環境ではエラーを再現できませんでした。
そのため、huga.desc にある ~以下略~ の内容に原因があるのではと思われます。
こちら、エラーが再現できるようなファイルを添付いただけますと助かります。
また、動作環境について確認したいので、以下の2つのコマンドの実行結果を貼っていだけますと幸いです。

apt list --installed | grep python3-make-sbom
mkswu --version

以上、どうぞよろしくお願いいたします。

> お世話になっております。山崎です。
> いただいたファイルの情報を含んだファイルを作成し、コマンドを実行してみたのですが、こちらの環境ではエラーを再現できませんでした。
> そのため、huga.desc にある ~以下略~ の内容に原因があるのではと思われます。
> こちら、エラーが再現できるようなファイルを添付いただけますと助かります。
> また、動作環境について確認したいので、以下の2つのコマンドの実行結果を貼っていだけますと幸いです。
>

> apt list --installed | grep python3-make-sbom
> mkswu --version
> 

>
> 以上、どうぞよろしくお願いいたします。

huga.descについて

swdesc_option component=extra_os.obpod
swdesc_option version=54
swdesc_option BUILD_SBOM=auto
swdesc_option sbom_config_yaml=obpod.sbom_config.yaml
 
swdesc_files --dest /etc/atmark/containers/ conf/grafana.conf
swdesc_files --dest /etc/atmark/containers/ conf/prometheus.conf
swdesc_files --dest /etc/atmark/containers/ conf/loki.conf
swdesc_files --dest /etc/atmark/containers/ conf/node.conf
swdesc_files --dest /etc/atmark/containers/ conf/promtail.conf
swdesc_files --dest /etc/atmark/containers/ conf/alertmanager.conf
 
swdesc_files --dest /etc/atmark/containers/ conf/obpod.conf
swdesc_files --dest /etc/atmark/containers/ conf/obpod.yaml
 
swdesc_files --extra-os ./prom
swdesc_files --dest "/var/app/rollback/volumes/prom" "./prom"
swdesc_command --extra-os 'chmod 777 /var/app/rollback/volumes/prom'
 
swdesc_files --extra-os ./alert
swdesc_files --dest "/var/app/rollback/volumes/alert" "./alert"
 
swdesc_files --extra-os ./promtail
swdesc_files --dest "/var/app/rollback/volumes/promtail" "./promtail"
 
swdesc_files --extra-os ./grafana
swdesc_files --dest "/var/app/rollback/volumes/grafana" "./grafana/datasources/default.yml"
 
swdesc_files --extra-os ./loki
swdesc_files --dest "/var/app/rollback/volumes/loki" "./loki"
 
swdesc_files --extra-os ./app
swdesc_command "rm -rf /var/app/rollback/volumes/python"
swdesc_files --dest "/var/app/rollback/volumes/python" "./app"
swdesc_files --dest /etc/atmark/containers/ conf/app.conf
swdesc_command --extra-os 'chmod +x /var/app/rollback/volumes/python/src/test.sh'
 
swdesc_embed_container "grafana.tar"
swdesc_embed_container "loki.tar"
swdesc_embed_container "promtail.tar"
swdesc_embed_container "prometheus.tar"
swdesc_embed_container "node-exporter.tar"
swdesc_embed_container "alertmanager.tar"
swdesc_embed_container "python.tar"

動作環境確認コマンドについて

atmark@atde9:~/DXE-MPF-proto/Armadillo_G4$ apt list --installed | grep python3-make-sbom
 
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
 
python3-make-sbom/now 1.0.0-1+atmark1 all [インストール済み、1.0.1-1+atmark1 にアップグレード可]
atmark@atde9:~/DXE-MPF-proto/Armadillo_G4$ mkswu --version
mkswu バージョン 6.4
atmark@atde9:~/DXE-MPF-proto/Armadillo_G4$

以上になります。
よろしくお願いします。

上記返信内容にて文字列のマスクを忘れてしまいました。
obpod については huga へ読み替えてご確認お願いします。
失礼しました。

at_reika.yamazaki

2025年2月26日 11時44分

お世話になっております。山崎です。
desc ファイルの内容についてご連絡ありがとうございます。
いくつかファイルを配置しているのでこちらの処理がうまくいっていない可能性があります。

その前に、ご使用の mkswu、python3-make-sbom パッケージが最新ではないようです。
本日時点での最新のパッケージは mkswu 7.2、python3-make-sbom 1.0.1 になります。
こちらお手数をおかけして申し訳ありませんが、以下のコマンドを実行して最新のパッケージにアップデート後、再度エラーが表示されるかどうか、ご確認いただけますでしょうか。
念のため、バージョンが最新になっているかについてもご確認いただけますと幸いです。

sudo apt update
sudo apt install mkswu python3-make-sbom
apt list --installed | grep python3-make-sbom
mkswu --version

以上、どうぞよろしくお願いいたします。

> お世話になっております。山崎です。
> desc ファイルの内容についてご連絡ありがとうございます。
> いくつかファイルを配置しているのでこちらの処理がうまくいっていない可能性があります。
>
> その前に、ご使用の mkswu、python3-make-sbom パッケージが最新ではないようです。
> 本日時点での最新のパッケージは mkswu 7.2、python3-make-sbom 1.0.1 になります。
> こちらお手数をおかけして申し訳ありませんが、以下のコマンドを実行して最新のパッケージにアップデート後、再度エラーが表示されるかどうか、ご確認いただけますでしょうか。
> 念のため、バージョンが最新になっているかについてもご確認いただけますと幸いです。
>

> sudo apt update
> sudo apt install mkswu python3-make-sbom
> apt list --installed | grep python3-make-sbom
> mkswu --version
> 

>
> 以上、どうぞよろしくお願いいたします。

パッケージアップデート後

atmark@atde9:~/DXE-MPF-proto/Armadillo_G4$ apt list --installed | grep python3-make-sbom
 
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
 
python3-make-sbom/bullseye,bullseye,bullseye,now 1.0.1-1+atmark1 all [インストール済み、自動]
atmark@atde9:~/DXE-MPF-proto/Armadillo_G4$ mkswu --version
mkswu バージョン 7.2

mkswuコマンド実行時に継続して同エラーが表示されます。

at_reika.yamazaki

2025年2月27日 13時17分

お世話になっております。山崎です。
パッケージのアップデートありがとうございます。
こちらでも確認したところ、以下の箇所でエラーすることがわかりました。

swdesc_files --extra-os ./prom
swdesc_files --dest "/var/app/rollback/volumes/prom" "./prom"

SBOM 作成エラーの原因は、同じ prom ディレクトリを二回スキャンしてしまったためです。
上記のコードについて質問なのですが、こちらは 1行目で prom ディレクトリのファイルをルートから配置し、2行目で prom ディレクトリのファイルを /var/app/rollback/volumes/prom に配置する動作となっております。
こちらは意図した処理でしょうか?相違ある場合はお知らせください。

また、以下のように、配置したファイルをコピーすることで上記コードと同様の処理が可能ですので、こちらで試していただけますと助かります。

swdesc_files --dest "/var/app/rollback/volumes/prom" "./prom"
swdesc_command "cp /var/app/rollback/volumes/prom/* /"

他の「swdesc_files --extra-os xxx」の行についても同じように置き換えてください。

以上、どうぞよろしくお願いいたします。

> お世話になっております。山崎です。
> パッケージのアップデートありがとうございます。
> こちらでも確認したところ、以下の箇所でエラーすることがわかりました。
>

> swdesc_files --extra-os ./prom
> swdesc_files --dest "/var/app/rollback/volumes/prom" "./prom"
> 

> SBOM 作成エラーの原因は、同じ prom ディレクトリを二回スキャンしてしまったためです。
> 上記のコードについて質問なのですが、こちらは 1行目で prom ディレクトリのファイルをルートから配置し、2行目で prom ディレクトリのファイルを /var/app/rollback/volumes/prom に配置する動作となっております。
> こちらは意図した処理でしょうか?相違ある場合はお知らせください。
>
> また、以下のように、配置したファイルをコピーすることで上記コードと同様の処理が可能ですので、こちらで試していただけますと助かります。
>

> swdesc_files --dest "/var/app/rollback/volumes/prom" "./prom"
> swdesc_command "cp /var/app/rollback/volumes/prom/* /"
> 

> 他の「swdesc_files --extra-os xxx」の行についても同じように置き換えてください。
>
> 以上、どうぞよろしくお願いいたします。
>
以下の様に.descファイルを変更しましたが...

swdesc_option component=extra_os.obpod
swdesc_option version=54
swdesc_option BUILD_SBOM=auto
swdesc_option sbom_config_yaml=obpod.sbom_config.yaml
 
swdesc_files --dest /etc/atmark/containers/ conf/grafana.conf
swdesc_files --dest /etc/atmark/containers/ conf/prometheus.conf
swdesc_files --dest /etc/atmark/containers/ conf/loki.conf
swdesc_files --dest /etc/atmark/containers/ conf/node.conf
swdesc_files --dest /etc/atmark/containers/ conf/promtail.conf
swdesc_files --dest /etc/atmark/containers/ conf/alertmanager.conf
 
swdesc_files --dest /etc/atmark/containers/ conf/obpod.conf
swdesc_files --dest /etc/atmark/containers/ conf/obpod.yaml
 
swdesc_files --dest "/var/app/rollback/volumes/prom" "./prom"
swdesc_command "cp /var/app/rollback/volumes/prom/* /"
swdesc_command --extra-os 'chmod 777 /var/app/rollback/volumes/prom'
 
swdesc_files --dest "/var/app/rollback/volumes/alert" "./alert"
swdesc_command "cp /var/app/rollback/volumes/alert/* /"
 
swdesc_files --dest "/var/app/rollback/volumes/promtail" "./promtail"
swdesc_command "cp /var/app/rollback/volumes/promtail/* /"
 
swdesc_files --dest "/var/app/rollback/volumes/grafana" "./grafana/datasources/default.yml"
swdesc_command "cp /var/app/rollback/volumes/grafana/* /"
 
swdesc_files --dest "/var/app/rollback/volumes/loki" "./loki"
swdesc_command "cp /var/app/rollback/volumes/loki/* /"
 
swdesc_command "rm -rf /var/app/rollback/volumes/python"
swdesc_files --dest "/var/app/rollback/volumes/python" "./app"
swdesc_command "cp /var/app/rollback/volumes/python/* /"
 
swdesc_files --dest /etc/atmark/containers/ conf/app.conf
swdesc_command --extra-os 'chmod +x /var/app/rollback/volumes/python/src/test.sh'
 
swdesc_embed_container "grafana.tar"
swdesc_embed_container "loki.tar"
swdesc_embed_container "promtail.tar"
swdesc_embed_container "prometheus.tar"
swdesc_embed_container "node-exporter.tar"
swdesc_embed_container "alertmanager.tar"
swdesc_embed_container "python.tar"

エラーは変わらず...

swdesc_option component=extra_os.obpod
swdesc_option version=54
# sbom生成でエラーとなるため要調査
swdesc_option BUILD_SBOM=auto
swdesc_option sbom_config_yaml=obpod.sbom_config.yaml
 
swdesc_files --dest /etc/atmark/containers/ conf/grafana.conf
swdesc_files --dest /etc/atmark/containers/ conf/prometheus.conf
swdesc_files --dest /etc/atmark/containers/ conf/loki.conf
swdesc_files --dest /etc/atmark/containers/ conf/node.conf
swdesc_files --dest /etc/atmark/containers/ conf/promtail.conf
swdesc_files --dest /etc/atmark/containers/ conf/alertmanager.conf
 
swdesc_files --dest /etc/atmark/containers/ conf/obpod.conf
swdesc_files --dest /etc/atmark/containers/ conf/obpod.yaml
 
swdesc_files --dest "/var/app/rollback/volumes/prom" "./prom"
swdesc_command "cp /var/app/rollback/volumes/prom/* /"
swdesc_command --extra-os 'chmod 777 /var/app/rollback/volumes/prom'
 
swdesc_files --dest "/var/app/rollback/volumes/alert" "./alert"
swdesc_command "cp /var/app/rollback/volumes/alert/* /"
 
swdesc_files --dest "/var/app/rollback/volumes/promtail" "./promtail"
swdesc_command "cp /var/app/rollback/volumes/promtail/* /"
 
swdesc_files --dest "/var/app/rollback/volumes/grafana" "./grafana/datasources/default.yml"
swdesc_command "cp /var/app/rollback/volumes/grafana/* /"
 
swdesc_files --dest "/var/app/rollback/volumes/loki" "./loki"
swdesc_command "cp /var/app/rollback/volumes/loki/* /"
 
swdesc_command "rm -rf /var/app/rollback/volumes/python"
swdesc_files --dest "/var/app/rollback/volumes/python" "./app"
swdesc_command "cp /var/app/rollback/volumes/python/* /"
 
swdesc_files --dest /etc/atmark/containers/ conf/app.conf
swdesc_command --extra-os 'chmod +x /var/app/rollback/volumes/python/src/test.sh'
 
swdesc_embed_container "grafana.tar"
swdesc_embed_container "loki.tar"
swdesc_embed_container "promtail.tar"
swdesc_embed_container "prometheus.tar"
swdesc_embed_container "node-exporter.tar"
swdesc_embed_container "alertmanager.tar"
swdesc_embed_container "python.tar"

at_reika.yamazaki

2025年2月28日 14時26分

お世話になっております。山崎です。
変わらずエラーするということですね。了解です。
こちらではエラーが再現できないため、エラー原因が変わった可能性があります。
お手数ですが、原因を絞り込むため desc ファイルを以下のように変更して実行していただけますでしょうか。

1. 「swdesc_files --dest "/var/app/rollback/volumes/prom" "./prom"」 以降の行をコメントアウト
2. 1 で起きない場合は、「swdesc_embed_container ~」 の行のコメントアウトを解除
3. 2 で起きない場合は、空行毎にコメントアウトを解除

desc ファイルをどの場合にしたときにエラーが起きたかお知らせくださると助かります。
以上、どうぞよろしくお願いいたします。

> お世話になっております。山崎です。
> 変わらずエラーするということですね。了解です。
> こちらではエラーが再現できないため、エラー原因が変わった可能性があります。
> お手数ですが、原因を絞り込むため desc ファイルを以下のように変更して実行していただけますでしょうか。
>
> 1. 「swdesc_files --dest "/var/app/rollback/volumes/prom" "./prom"」 以降の行をコメントアウト
> 2. 1 で起きない場合は、「swdesc_embed_container ~」 の行のコメントアウトを解除
> 3. 2 で起きない場合は、空行毎にコメントアウトを解除
>
> desc ファイルをどの場合にしたときにエラーが起きたかお知らせくださると助かります。
> 以上、どうぞよろしくお願いいたします。

desc ファイルにて原因を切り分けしてみた所、「swdesc_embed_container ~」 の行が複数ある場合にエラーが表示されるようです。
一行だけでmkswuコマンドを実行するとエラー表示は無く成功します。
各行の「swdesc_embed_container ~」 を一つずつ実行させる場合にもエラーが表示されませんでしたので、
何かしら特定の「swdesc_embed_container ~」 行が悪さしている様には見えません。

at_reika.yamazaki

2025年3月3日 18時43分

お世話になっております。山崎です。
原因切り分けありがとうございます。
「swdesc_embed_container ~」が一行だとエラーが表示されないということで了解です。

エラーの原因についてなのですが、貼っていただいた desc ファイルでは、コンテナイメージを7つ含めていると思います。
こちら、もとにしたコンテナイメージが同じだったりはしないでしょうか?
含まれるパッケージ等に同じものが存在し、SPDX ID が重複してしまったため、SBOM として成立しないとエラーが出ているものと思われます。
こちらを解決するには desc ファイルを分割して、swu イメージ毎にコンテナイメージ(もしくはコンテナアプリケーション)を管理していただくのが良さそうに思います。
お手数をおかけして大変申し訳ありませんが、ご検討いただけますと幸いです。
以上、どうぞよろしくお願いいたします。

> エラーの原因についてなのですが、貼っていただいた desc ファイルでは、コンテナイメージを7つ含めていると思います。
> こちら、もとにしたコンテナイメージが同じだったりはしないでしょうか?
それぞれ別イメージになります。

> 含まれるパッケージ等に同じものが存在し、SPDX ID が重複してしまったため、SBOM として成立しないとエラーが出ているものと思われます。
> こちらを解決するには desc ファイルを分割して、swu イメージ毎にコンテナイメージ(もしくはコンテナアプリケーション)を管理していただくのが良さそうに思います。
複数コンテナイメージを1swuに纏められないとの事であれば、そちらの対応も検討します。

at_reika.yamazaki

2025年3月4日 14時37分

お世話になっております。山崎です。

>複数コンテナイメージを1swuに纏められないとの事であれば、そちらの対応も検討します。
ご検討ありがとうございます。

またコンテナイメージについて補足します。
エラー内容をみるに、もとにしたコンテナイメージは alpine ではないかと推察します。
以下はエラーから取得した、重複してしまっているパッケージです。

・'SPDXRef-Package-apk-alpine-baselayout-21e54be9d7ca763c'
・'SPDXRef-Package-apk-alpine-baselayout-data-9ff96f942d2401f2'
・'SPDXRef-Package-apk-alpine-keys-0e5100e3d266a135'
・'SPDXRef-Package-apk-apk-tools-78c55d64ab350462'
・'SPDXRef-Package-apk-busybox-1bb81cc0e13f362d'
・'SPDXRef-Package-apk-busybox-binsh-30b5e2f594950cb2'
・'SPDXRef-Package-apk-ca-certificates-bundle-4db628a5f734287c'
・'SPDXRef-Package-apk-ca-certificates-cd51c1f9eed42514'
・'SPDXRef-Package-apk-musl-03e521237cbed45a'
・'SPDXRef-Package-apk-musl-utils-c84ae08b59df5c6e'
・'SPDXRef-Package-apk-scanelf-54f3623fdd8fb8d4'
・'SPDXRef-Package-apk-ssl-client-692d7c5cf4a3b25a'
・'SPDXRef-Package-apk-zlib-d8258d3d7c48cfbf'
・'SPDXRef-Package-binary-busybox-734e08374d08ee01'

そのため、パッケージの重複が起こり SBOM として成立しなくなっています。
alpine/debian のような OS の違いであれば上記のエラーは起こりにくいと思いますが、同じ OS のコンテナイメージであれば難しいと思います。
以上、補足になります。どうぞよろしくお願いいたします。