Armadilloフォーラム

mkswuをコンテナにインストールしたい

tmygt

2023年10月3日 20時30分

swu ファイルを GitLab CIで生成できないか検討しています。
コンテナ内でmkswuコマンドが実行できれば GitLab CIで生成できるのではないかと考えているのですが、コンテナ内にmkswuをインストールする方法の推奨はありますでしょうか。

今のところ下記2つの方法が思いついています。

1. debian:bullseyeのコンテナをベースに、sources.listにhttp://download.atmark-techno.com/debian/ を書き加えてapt経由で取得する
2. コンテナ内で https://github.com/atmark-techno/mkswu をmake installする

もし推奨の方法がありましたら教えてください。また、1の様にATDEではない環境からパッケージを取得しても利用規約等の問題はないでしょうか?

コメント

tmygt さん

マルティネです。

> swu ファイルを GitLab CIで生成できないか検討しています。
> コンテナ内でmkswuコマンドが実行できれば GitLab CIで生成できるのではないかと考えているのですが、コンテナ内にmkswuをインストールする方法の推奨はありますでしょうか。

とてもいいと思います!

> 今のところ下記2つの方法が思いついています。
>
> 1. debian:bullseyeのコンテナをベースに、sources.listにhttp://download.atmark-techno.com/debian/ を書き加えてapt経由で取得する
> 2. コンテナ内で https://github.com/atmark-techno/mkswu をmake installする
>
> もし推奨の方法がありましたら教えてください。また、1の様にATDEではない環境からパッケージを取得しても利用規約等の問題はないでしょうか?

mkswu は git リポジトリから直接に実行できるようにしていますので、https://github.com/atmark-techno/mkswu を clone して ./mkswu/mkswu を実行すればと思います。コンフィグディレクトリさえ設定すれば atde と同じように使えます。
依存のパッケージがなければエラーすると思いますが、念のため debian ベースでしたら cpio zstd jq xxd gawk をインストールしておけば問題なく実行できます。

gitlab CI ではなく github action ですが、このリポジトリを参考にできるかもしれません:
https://github.com/martinetd/G4_container_updater/blob/main/.github/wor…
(READMEにも秘密の管理などについても書いてます)

ずいぶん前に作ったプロジェクトですが、まだ動くと思います。

よろしくお願いします。

マルティネさん

回答ありがとうございます。

> mkswu は git リポジトリから直接に実行できるようにしていますので、https://github.com/atmark-techno/mkswu を clone して ./mkswu/mkswu を実行すればと思います。コンフィグディレクトリさえ設定すれば atde と同じように使えます。
> 依存のパッケージがなければエラーすると思いますが、念のため debian ベースでしたら cpio zstd jq xxd gawk をインストールしておけば問題なく実行できます。
>
> gitlab CI ではなく github action ですが、このリポジトリを参考にできるかもしれません:
> https://github.com/martinetd/G4_container_updater/blob/main/.github/wor…
> (READMEにも秘密の管理などについても書いてます)

直接実行できるんですね。では、紹介いただいたgithubから取得する方法がよさそうですね。
また、GitHub Actionsの例もありがとうございます。まさにこういったことをやりたいので、参考にします。

マルティネさん

aokiです。

私もswuファイルをGitHub Actionsで生成出来ないか試行錯誤しており、こちらのスレッドを参照させていただきました。
CI/CDはATDEと異なり対話環境が制限されている都合上、こちらのスレッドの方法を試してもswuファイルの生成に失敗してしまいました。

やったこと:
1. マルティネさんの2年前のリポジトリをクローン
cf. https://github.com/martinetd/G4_container_updater/blob/main/.github/wor
2.ATDE上で鍵ペアを生成 (yourcn=tester, passward=test)
e.g. $ mkswu —config-dir tmp —genkey —cn tester
3.生成した鍵ペアのうちswupdate.pemをリポジトリの~/mkswu.conf.d/swupdate.pemに上書き
4.生成した鍵ペアのうちcat swupdate.keyの値をNew repository secretの鍵SWUPDATE_KEYに追加
5.生成時に入力したパスワードから「pass:key test」をNew repository secretの鍵SWUPDATE_KEY_PASSに追加
6.mkswuの2024.04以降のdescファイルの書き方に合わせて各変数の先頭にswdesc_optionを追加
7.CI/CDを走らせて動作確認

実行結果:
Run ./mkswu/mkswu --config-dir mkswu.conf.d container.desc --verbose
./mkswu/mkswu --config-dir mkswu.conf.d container.desc --verbose
shell: /usr/bin/bash -e {0}
env:
SWUPDATE_KEY: ***
SWUPDATE_AES_KEY:
MKSWU_PRIVKEY_PASS: ***
fatal: No names found, cannot describe anything.
Loading config mkswu.conf.d/mkswu.conf
Updated config file mkswu.conf.d/mkswu.conf
Processing pre_script (scripts_pre.sh)
Processing swdesc_embed_container image.tar (image_tar_sh__c____T..n_target_load__1_____40effd5b5c4808873865362789d53d85d7fe9427.tar)
Warning: container version 0.2024.0925 has been simplified to 0.2024.925
Processing post_script (scripts_post.sh)
Could not read signing key from /dev/shm/swupdate.key
40F79EB6287F0000:error:1608010C:STORE routines:ossl_store_handle_load_result:unsupported:../crypto/store/store_result.c:151:
40F79EB6287F0000:error:1C800064:Provider routines:ossl_cipher_unpadblock:bad decrypt:../providers/implementations/ciphers/ciphercommon_block.c:124:
40F79EB6287F0000:error:11800074:PKCS12 routines:PKCS12_pbe_crypt_ex:pkcs12 cipherfinal error:../crypto/pkcs12/p12_decr.c:86:maybe wrong password
ERROR: Could not sign /home/runner/work/G4_container_updater_test/G4_container_updater_test/.container/sw-description
Error: Process completed with exit code 1.

該当部分のyml:
- name: Build swu
run: |
./mkswu/mkswu --config-dir mkswu.conf.d container.desc --verbose
env:
SWUPDATE_KEY: ${{ secrets.SWUPDATE_KEY }}
SWUPDATE_AES_KEY: ${{ secrets.SWUPDATE_AES_KEY }}
MKSWU_PRIVKEY_PASS: ${{ secrets.SWUPDATE_KEY_PASS }}

--verboseオプションを使ってmkswuのログを少し増やしています。
「Could not read signing key from /dev/shm/swupdate.key」の部分で何かしら問題が発生しているのではないかと思い、相談しました。
そこで、pass-phase不要の秘密鍵の生成方法(mkswu —config-dir tmp —genkeyの使い方)があれば現在CI/CDで発生している対話依存の問題を回避できる、もしくは、CI/CDでもloadされる秘密鍵の管理方法に何か誤りがあると予想しています。

何か心当たりはありませんでしょうか。
よろしくお願いします。

> tmygt さん
>
> マルティネです。
>
> > swu ファイルを GitLab CIで生成できないか検討しています。
> > コンテナ内でmkswuコマンドが実行できれば GitLab CIで生成できるのではないかと考えているのですが、コンテナ内にmkswuをインストールする方法の推奨はありますでしょうか。
>
> とてもいいと思います!
>
> > 今のところ下記2つの方法が思いついています。
> >
> > 1. debian:bullseyeのコンテナをベースに、sources.listにhttp://download.atmark-techno.com/debian/ を書き加えてapt経由で取得する
> > 2. コンテナ内で https://github.com/atmark-techno/mkswu をmake installする
> >
> > もし推奨の方法がありましたら教えてください。また、1の様にATDEではない環境からパッケージを取得しても利用規約等の問題はないでしょうか?
>
> mkswu は git リポジトリから直接に実行できるようにしていますので、https://github.com/atmark-techno/mkswu を clone して ./mkswu/mkswu を実行すればと思います。コンフィグディレクトリさえ設定すれば atde と同じように使えます。
> 依存のパッケージがなければエラーすると思いますが、念のため debian ベースでしたら cpio zstd jq xxd gawk をインストールしておけば問題なく実行できます。
>
> gitlab CI ではなく github action ですが、このリポジトリを参考にできるかもしれません:
> https://github.com/martinetd/G4_container_updater/blob/main/.github/wor…
> (READMEにも秘密の管理などについても書いてます)
>
> ずいぶん前に作ったプロジェクトですが、まだ動くと思います。
>
> よろしくお願いします。

aokiさん

> やったこと:
1. マルティネさんの2年前のリポジトリをクローン
> cf. https://github.com/martinetd/G4_container_updater/blob/main/.github/wor

この action ファイルで設定している「SWUPDATE_KEY」と「SWUPDATE_AES_KEY」は、mkswu が元々に対応する変数ではなく、リポの mkswu.conf で対応する変数です。
https://github.com/martinetd/G4_container_updater/blob/main/mkswu.conf… の「user section」もコピーしてみてください。

mkswu の標準な変数で、キーファイルのパスの設定はできますが、キーの内容を変数から読み取る設定はありませんので当時にこういう風に対応していました。
要望が増えればいずれ何かの変数を標準にするかもしれませんが、mkswu.conf で対応可能なので重要性は低いかと考えています

よろしくお願いします