GitHub の Ubuntu のランナーで「MongoDB cannot start: Linux kernel versions 6.19 and newer」
mongo:8.0 や mongo:8.3 のサービスコンテナーが起動して1秒で止まり、それを使うテストが落ちます。MongoDB 8.0 以降は、同梱の TCMalloc の rseq のバグのせいで Linux 6.19〜7.0.13 で落ちるので(SERVER-121912)、新しいビルドはそれらのカーネルでは起動を断り、8.0.30・8.3.9・9.0 からは 7.0.14 以降を通します(SERVER-125742)。ubuntu-24.04 と ubuntu-26.04 のイメージはいまカーネル 7.0.0-1017-azure で起動し、これは上流の 7.0.14 から作られていて直しも入っています。けれども Ubuntu はシリーズのあいだずっとリリースの文字列を 7.0.0 のままにしていて、mongod はその文字列を読むので、やはり断ります(SERVER-136848)。
どう見えるか
mongod のログ:
{"s":"F","c":"CONTROL","id":12257600,"msg":"MongoDB cannot start: Linux kernel versions 6.19 and newer has a known incompatibility with this version of MongoDB. See https://jira.mongodb.org/browse/SERVER-121912 for more information."}
ジョブでの見え方は、MongoDB の起動のしかたで変わります:
- サービスコンテナー:「Initialize containers」が
##[error]Failed to initialize container mongo:8.0で落ちるか、ランナーがmongo service is healthy.と出したあと、テストがMongoServerSelectionError: connect ECONNREFUSED 127.0.0.1:27017で落ちます(runner-images #15005)。 - Docker Compose:起動の0.5秒後に
dependency failed to start: container ... is unhealthy(RMF-Block #229)。 - apt で入れた MongoDB:DevStack が 8.0.34 を入れ、mongod が状態 1 で終わり、Zaqar が
ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection refusedで落ちます(gophercloud #4080)。 - Testcontainers などのツール:コンテナーが終わり、準備の確認が時間切れになります。golang-migrate の
mongo:8.0のテストは10月29日からすべての実行で落ち、同じ実行の 5.0・6.0・7.0 は通りました(golang-migrate #1463)。
もう再実行では直りません。runner-images のメンテナーは11月3日に、いちばん新しい 24.04 のイメージ 20261101.360 も同じカーネルだと答えていて、26.04 のイメージは10月からこのカーネルです。
どの版の MongoDB なら起動するか
- Ubuntu の本当のカーネルの版を読む直し SERVER-131779 は、直った版を 9.0.4・8.3.16・8.0.37 としています(11月4日の時点。10月20日には 8.3.14 と 8.0.35 でした)。
- 11月4日の Docker Hub:
mongo:9.0とmongo:latestは 9.0.4 で、runner-images のメンテナーの試験では、当たる VM で90秒間の ping と CRUD の繰り返しを通りました。mongo:8.0は 8.0.34、mongo:8.3は 8.3.13 で、どちらもまだ断ります。あるプロジェクトはランナーで 8.3.9・8.3.11・8.3.13・8.0.34 を試し、すべて id 12257600 で終わりました(keyset-kit #2)。 - MongoDB 7.0 は当たりません。
直し方
コードとデータがメジャーな上げに耐えるなら、9.0 に移ります:
services:
mongo:
image: mongo:9.0
ports:
- 27017:27017
または、MongoDB を使うジョブを ubuntu-22.04 で動かします。runner-images のメンテナーが挙げている回避策です。そのカーネルは 6.8.0-1070-azure で、8.0 も 8.3 も起動します:
jobs:
tests:
runs-on: ubuntu-22.04
ubuntu-24.04 に固定しても直りません。新しいカーネルが入っているのがそのイメージだからです。メンテナーは、このためにカーネルを固定したり戻したりはしないと答えています。mongo:8.0 が 8.0.37 に(または mongo:8.3 が 8.3.16 に)なれば、新しいカーネルでも 8.x のタグがまた起動します。直った版の一覧は一度変わっているので、戻す前にタグが指す版を確かめます。
コンテナーの環境に GLIBC_TUNABLES=glibc.pthread.rseq=1 を入れると、これらのカーネルで mongo:8.0 が起動するという報告が2つのプロジェクトからあります(debezium dbz #1945・maple-mcp #1)。mongod の中のメモリの割り当ての動きが変わるので、本番ではなくテストのための当座の手として扱います。
見分け方
- ジョブで
uname -rとcat /proc/version_signatureを表示します。リリースの文字列が 7.0.0 で、シグネチャの最後が 7.0.14 なら、この件です。コンテナーはホストのカーネルを使うので、コンテナーのイメージは関係ありません。 - mongod のログで id 12257600 を探します。サービスコンテナーなら、ジョブの最後の Stop containers のステップがコンテナーのログを表示します。Docker Compose なら、
if: failure()のステップでdocker compose logsを実行します。 - GitHub のランナーだけではありません。Ubuntu 26.04 そのものの 7.0 のカーネル(たとえば 7.0.0-38-generic)のセルフホストのランナーやサーバーでも、同じように断ります。
ほかの 26.04 の失敗
- Ubuntu 26.04 の「conda: command not found」:イメージに Miniconda が無く
CONDAが空なので、GitHub の雛形のワークフローや Azure Pipelines の Microsoft の手順のように$CONDA/binを PATH に足すステップでは conda が見つかりません。setup-miniconda か Miniforge で入れます。 - ansible-test 2.22 と devel の「mount -o remount,rw /sys/fs/cgroup/ && pkill sleep」returned exit status 1:24.04 と 26.04 のイメージの 7.0 の azure のカーネルでは、既定のテスト用コンテナーが起動できないことが多く、再実行でもめったに直りません。そのジョブは
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 の「client version ... is too old」:Docker 29 は API 1.40 より古いクライアントを断るので、古い Testcontainers は「Could not find a valid Docker environment」で落ちます。
- Ubuntu 26.04 の apt:名前が変わった・無くなったパッケージ。
失敗したジョブを IntelliJ IDEA から見るなら
Pipeline Inbox for GitHub Actions Workflows は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。すべてのリポジトリの実行を、ジョブ・ステップと一緒に IDE のツールウィンドウに並べ、いまのブランチの実行はステータスバーに出ます。読むのは無料、失敗したジョブの再実行・キャンセル・ワークフローの実行・デプロイのレビューは Pro(月 US$1.50・30日の無料試用つき)です。
GitHub と GitHub Actions は GitHub, Inc. の商標、MongoDB は MongoDB, Inc. の商標、Ubuntu は Canonical Ltd. の商標、Linux は Linus Torvalds の登録商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・MongoDB, Inc.・Canonical・Linux Foundation・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:「The ubuntu-latest label will migrate to Ubuntu 26」 · カーネル 7.0.0-1017-azure の BPF · IntelliJ IDEA で使える GitHub Actions のプラグインの比較 · English