Loading
Support for Ubuntu 26.04
Closes #790 (closed)
概要
CI/CD に Ubuntu 26.04 を追加します。あわせて、26.04 の Open MPI (5.x) 環境で発生していたテスト実行時の不具合を修正し、QEMU で対応できない s390x を 26.04 のマルチアーキビルドから除外しました。
実装内容
1. Ubuntu 26.04 の CI 追加 (12eea876)
docker/ci/Dockerfile.ubuntu2604を新規追加(runtime / build / build-metis4 / document の各ステージ)。docker/ci/Makefileにruntime:ubuntu2604/build:ubuntu2604のビルドターゲットを追加。.ubuntu2604.ymlを新規追加し、.gitlab-ci.ymlの include に追記。build / test / deb の各ジョブを 22.04・24.04 と同構成で定義。doc/CICD/manual.mdを更新し、イメージ数・ジョブ数(build 12・test 27・deb 12)を反映。
2. Ubuntu 26.04 のマルチアーキから s390x を除外 (e4807aef)
- 26.04 の s390x glibc は VXRS_EXT2(z15 以降)を要求するが、QEMU のデフォルト s390x CPU モデルがこれをエミュレートしないため、qemu-user 上のマルチアーキビルドが失敗する。
docker/ci/MakefileにARCH_2604 (x86_64,aarch64,ppc64le)を導入し、ubuntu2604 の runtime / build ターゲットにのみ適用。22.04・24.04 は従来どおり4 アーキ (x86_64,aarch64,ppc64le,s390x) のまま維持。
3. Open MPI 検出を mpicc --showme:version へ変更 (6aca0c82)
- 従来
tests/test.shはmpirun --versionの出力をopen-mpiで grep して--oversubscribe --allow-run-as-rootを付与するか判定していた。 - 26.04 の openmpi 5.x では PRRTE/PMIx のヘルプファイルの配置パスが不整合で、
mpirun --versionがバージョンではなくエラーを出力する。この結果 grep が空になり--allow-run-as-rootが付かず、PRRTE の root 実行拒否で mpi/hybrid 系の CI ジョブが全滅していた。 - schizo/help 機構を通らずバナーを確実に出力する
mpicc --showme:versionへ切替。 22.04 / 24.04 の挙動は変えず、バナーは大文字小文字を無視しOpen MPI/open-mpi両方を許容。
4. mpicc 実行の修正とコンテナ向け Open MPI オプション追加 (9052e0d7)
tests/test.shでmpiccをパス解決した変数 (mpicc=$(which mpicc)) を使うように修正し、check_executableの対象にも追加。Dockerfile.ubuntu2604の openmpi-mca-params.conf に、コンテナ内実行向けの設定btl_sm_backing_directory=/tmpとbtl_tcp_if_include=loを追加。前者を設定しないと、共有メモリとして/dev/smを使おうとし、CI ジョブで容量不足。さらに後者のフォールバックを設定しないと、通信が確立できずジョブに失敗。- → 5. のとおり撤回。イメージへの設定追加はやめ、
tests/test.shでの環境変数指定に置き換えた。
5. コンテナ向け Open MPI 設定をテスト実行時のみに限定 (c1ba35a1)
-
- で
Dockerfile.ubuntu2604に追加した2行について、指摘を受けて撤回した。runtime:ubuntu2604/build:ubuntu2604は公開レジストリへ push され CI 以外の用途でも配布されうるため、CI 都合の設定がイメージ利用者の既定として残り、利用者側の MPI 設定と競合しうる。
- で
Dockerfile.ubuntu2604から当該2行を削除。openmpi-mca-params.conf への書き込みは 22.04 / 24.04 と同じ3行に戻り、blob は追加前と完全に同一になった。- 代わりに
tests/test.shで、Open MPI を検出したときのみOMPI_MCA_btl_sm_backing_directoryを export する。MCA パラメータは「設定ファイル → 環境変数 →mpirun --mca」の順に上書きされ効果は同じであるため、適用範囲だけをテスト実行時に限定できる。${OMPI_MCA_btl_sm_backing_directory:-/tmp}とし、利用者が設定済みの場合はその値を尊重する。- あわせて Open MPI の判定を
mpirun_optionsの既定値算出からis_openmpiとして切り出し、-oでオプションを明示した場合にも判定が効くようにした。
mpirun_optionsに--mcaを足す方式は採らなかった。run_fistr1()は MPI プロセス数が1かつ-a未指定のときmpirunを経由せずfistr1を直接実行するため、test/ubuntu2604/mpi/serialやtest/ubuntu2604/hybrid/{serial,openmp}のジョブに設定が効かないためである。btl_tcp_if_include=loは移設せず削除した。TCP BTL をループバックに限定する設定であり、tests/test.shを複数ノードで実行する場合に成立しなくなる一方、/dev/shm不足の解消に必要である根拠がなかったためである。- イメージを再作成のうえ push し、パイプライン https://gitlab.com/FrontISTR-Commons/FrontISTR/-/pipelines/2755092756 で全テストジョブの成功を確認した。
btl_tcp_if_include=loなしで CI が通ることも、これで確認できた。
議論の余地がある内容
metis4 対応の Dockerfile 記述を残すか
Dockerfile.ubuntu2604には 22.04 と同様にbuild-metis4ステージを含めているが、Makefileでは 26.04 の metis4 イメージはビルド対象にしていない(metis4 イメージはubuntu2204-metis4のみ)。- 現状 26.04 で metis4 を使う予定がないなら、Dockerfile 側の
build-metis4ステージの記述は削除してもよい。将来的な metis4 対応を見越して雛形として残すか、使わない記述を落として整理するか、方針を確認したい。- 今後 metis4 をサポートしないなら、22.04, 24.04 の記述や、保有しているコンテナの削除も検討する(→別 work item へ、#571 (closed) も関係)。
s390x を他リリースでも除外するか
- 今回 s390x は 26.04 のみ除外した(QEMU が VXRS_EXT2 を非対応のため)。
- 一方で 22.04 / 24.04 のコンテナは 4 アーキ対応イメージがすでにアップされているため、それらから s390x を消すと既存イメージと不整合になる。
- 26.04 だけ 3 アーキという非対称を許容するか、あるいは全リリースで s390x の扱いを揃えるか、方針を確認したい。
テスト実行が残す共有メモリファイルの扱い
btl_sm_backing_directoryを明示すると、Open MPI は指定先にバッキングファイル(1プロセスあたり16MiB程度)を作成し、実行後も残す。CI コンテナは実行ごとに破棄されるため問題にならないが、tests/test.shを手元で繰り返し実行する利用者の/tmpには蓄積する。- 配置先を
run_test/配下(テスト出力と同じ場所)にすれば後片付けは容易になるが、Open MPI はローカルファイルシステムを推奨しており、ビルドツリーがネットワークファイルシステム上にある環境では不利になる。現状の/tmpのままとするか、方針を確認したい。
本 MR 説明文は Claude Opus 4.8 を coauthor として作成しました。なお実装内容の3 つ目のコミット (6aca0c82) の Co-Authored-By が Claude Opus 4.7、5 つ目のコミット (c1ba35a1) が Claude Opus 5 になっているのは、それぞれ当該コミット時点での最新モデルによるためです。
Edited by Kanato Kono