Support for Ubuntu 26.04

Closes #790 (closed)

概要

CI/CD に Ubuntu 26.04 を追加します。あわせて、26.04 の Open MPI (5.x) 環境で発生していたテスト実行時の不具合を修正し、QEMU で対応できない s390x を 26.04 のマルチアーキビルドから除外しました。

対象コミット: 12eea876 .. c1ba35a1

実装内容

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)

    1. で 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

Merge request reports

Loading
Loading