GitHub の Ubuntu のランナーで ansible-test 2.22 と devel の「mount -o remount,rw /sys/fs/cgroup/ && pkill sleep」returned exit status 1
ansible-test は、コレクションの sanity・unit・integration のテストを既定のテスト用コンテナーの中で動かします。そのコンテナーは env sleep 60 ; exec /sbin/init で起動し、そのあと特権のヘルパーのコンテナーが中の cgroup のファイルシステムをマウントし直して、pkill sleep で起こします。いまカーネル 7.0.0-1017-azure の GitHub の ubuntu-24.04 と ubuntu-26.04 のランナーでは、このヘルパーがよく 1 で終わり、ansible-test はテストを1つも動かさないうちに止まります(ansible/ansible #87731・未解決)。
どう見えるか
Starting new "ansible-test-controller-ENwvCcfN" container. Run command: docker run ... --cgroupns private -dt ... quay.io/ansible/default-test-container:v2.23-2 sh -c 'env sleep 60 ; exec /sbin/init' Run command: docker run --pid host --privileged --name ansible-test-init-controller-ENwvCcfN --rm quay.io/ansible/ansible-test-utility-container:3.6.0 nsenter -t 2937 -m -p sh -c 'mount -o remount,rw /sys/fs/cgroup/ && pkill sleep' FATAL: Host job(s) failed. See previous error(s) for details. ERROR: Host DockerConfig(...) job failed: Command "docker run --pid host --privileged ... 'mount -o remount,rw /sys/fs/cgroup/ && pkill sleep'" returned exit status 1.
SAP のコレクションの実行のログを縮めたものです(ansible-test-gh-action #138)。コンテナーの名前の最後のランダムな文字と、nsenter -t のあとのプロセス ID は実行ごとに変わります。
当たるもの
- ansible-core 2.22 と devel の ansible-test。同じワークフローの 2.18〜2.21 は通ります。
- ansible-test の GitHub Action・antsibull-nox・そのままの
ansible-test ... --dockerのどれでも同じです。アクションやツールは ansible-test を起動するだけなので、同じように落ちます。 - 多くのコミュニティとパートナーのコレクションから報告があります。community.dns・community.docker・community.routeros・community.sops・community.hashi_vault・community.openwrt・amazon.aws・Checkmk と SAP のコレクション・lowlydba.sqlserver(#417)などです。はじめは再実行で通ることもありましたが、11月1日からは、5〜10回やり直しても落ちるというメンテナーの報告が出ています。
カーネルが疑われている理由
落ちたジョブはすべて 7.0.0-1017-azure で動いていました。issue が立ったのは10月21日で、24.04 のイメージが 6.17.0-1022-azure からこのカーネルに変わったあとです。10月の終わりの数日、6.17 のカーネルのイメージでジョブはまた通り、20261026 のイメージで 7.0 が戻ると、また落ち始めました。ansible-test のメンテナーの1人は、プロジェクトの Azure Pipelines の VM をこのカーネルに上げたところ同じエラーが出たので、元に戻しています。
カーネルの何が原因かは、まだ分かっていません。issue にある説明の1つは競合です。env が sleep を始める前に pkill sleep が動くと、起こす相手が見つからずに 1 を返します。起こすのを最大30秒やり直すプルリクエスト(ansible/ansible #87864)は、メンテナーがやり直しではなく原因を求めたあと、マージされずに閉じられました。
本当の直しが出るまでの手
2.22 と devel のジョブを、カーネルが 6.8.0-1070-azure の ubuntu-22.04 で動かし、ほかは ubuntu-latest のままにします。matrix の変数の名前は自分のものに合わせます:
jobs:
sanity:
runs-on: ${{ contains(fromJSON('["stable-2.22", "devel"]'), matrix.ansible) && 'ubuntu-22.04' || 'ubuntu-latest' }}
amazon.ai のプルリクエストが、devel のジョブでこれをしています(amazon.ai #90)。ubuntu-24.04 に固定しても直りません。そのイメージにも新しいカーネルが入っているからです。
または、community.sonic や vmware.vmware のように、devel のジョブが落ちてもワークフローは落とさないようにします(ジョブに continue-on-error: ${{ matrix.ansible == 'devel' }})。マージを止める安定版のジョブは残りますが、issue が直るまでは devel の本当の失敗も見えなくなります。
見分け方
- 落ちたコマンドが、テストの出力より前の、
nsenterとpkill sleepを使うansible-test-init-controller-...のヘルパーです。 - ジョブの
uname -rが 7.0.0-1017-azure(または別の 7.0 の版)を表示します。 - 同じワークフローの ansible-core 2.21 以前のジョブは通ります。
- ansible-test の Azure Pipelines の VM のように、Ubuntu の 7.0 のカーネルのセルフホストのランナーやほかのマシンでも出ることがあります。
ほかの 26.04 の失敗
- Ubuntu 26.04 の「conda: command not found」:イメージに Miniconda が無く
CONDAが空なので、GitHub の雛形のワークフローや Azure Pipelines の Microsoft の手順のように$CONDA/binを PATH に足すステップでは conda が見つかりません。setup-miniconda か Miniforge で入れます。 - 「MongoDB cannot start: Linux kernel versions 6.19 and newer」:mongo:8.0 と mongo:8.3 は 24.04 と 26.04 のイメージの 7.0 の azure のカーネルを 7.0.0 と読んで、起動した直後に終わります。mongo:9.0 を使うか、8.0.37 と 8.3.16 までは
ubuntu-22.04で。 - 「Unable to locate package linux-modules-extra-7.0.0-1017-azure」:24.04 と 26.04 のイメージの 7.0 の azure のカーネル向けには、Ubuntu が extras のパッケージを出していません。
vcanなどのモジュールはすでに入っているlinux-modulesにあるので、インストールを飛ばしてmodprobeを実行します。 - GitHub の Ubuntu のランナーの syscalls:sys_enter_* の BPF:24.04 と 26.04 のイメージのカーネル 7.0.0-1017-azure では、これらのプログラムが1つの CPU でしか動かないので、eBPF のテストがエラーなしにイベントを失います。
ubuntu-22.04は当たりません。 - Ubuntu 26.04 の Docker-in-Docker:古い iptables のモジュールが読み込まれていないので、
iptables-legacyを使うコンテナーの中の dockerd が「can't initialize iptables table `nat'」で落ちます。
失敗したジョブを IntelliJ IDEA から見るなら
Pipeline Inbox for GitHub Actions Workflows は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。すべてのリポジトリの実行を、ジョブ・ステップと一緒に IDE のツールウィンドウに並べるので、matrix のうち 2.22 と devel のジョブだけが赤くなったことがすぐ分かり、いまのブランチの実行はステータスバーに出ます。読むのは無料、失敗したジョブの再実行・キャンセル・ワークフローの実行・デプロイのレビューは Pro(月 US$1.50・30日の無料試用つき)です。
GitHub と GitHub Actions は GitHub, Inc. の商標、Ansible は Red Hat, Inc. の登録商標、Ubuntu は Canonical Ltd. の商標、Linux は Linus Torvalds の登録商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・Red Hat・Canonical・Linux Foundation・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:「The ubuntu-latest label will migrate to Ubuntu 26」 · カーネル 7.0.0-1017-azure の MongoDB · IntelliJ IDEA で使える GitHub Actions のプラグインの比較 · English