Lesstep
GitHub Actions・Ubuntu 26.04・2026年11月4日に確認

ubuntu-latest(Ubuntu 26.04)の「libxml2.so.2」「libicudata.so.74」:cannot open shared object file

ubuntu-latest は、2026年10月19日から11月19日にかけて Ubuntu 24.04 から 26.04 に移ります(ほかに変わること)。26.04 では、多くのプログラムがリンクしている2つのライブラリの名前が変わりました。libxml2 は 2.15 でパッケージは libxml2-16、ファイルは libxml2.so.16 です。24.04 はパッケージ libxml2 の libxml2.so.2 でした。ICU は 78(libicu78)で、24.04 は ICU 74(libicuuc.so.74・libicudata.so.74・libicui18n.so.74)でした。24.04 で作られたプログラムは古い名前を探し、何もしないうちに止まります。

出る文

24.04 で保存した Playwright のブラウザーのキャッシュから戻った WebKit です(owl-be-there #46・WebKit のテスト260件が起動で失敗)。Chromium と Firefox は自分のライブラリを持っているので通ります(tessera #364):

MiniBrowser: error while loading shared libraries: libicudata.so.74: cannot open shared object file

24.04 のキャッシュから戻った R のパッケージのライブラリです(flu-scenario-modeling-hub #55):

unable to load shared object '.../Library/stringi/libs/stringi.so':
  libicui18n.so.74: cannot open shared object file

24.04 のキャッシュから戻った Ruby の gem の一式で、libxml-ruby の拡張が入っていたものです(bulkrax #1266・テストのファイルがすべて読み込めなかった):

LoadError: libxml2.so.2: cannot open shared object file

24.04 向けに作られた組み立て済みのバイナリで、ここではリリースのアーカイブの SwiftLint 0.65.1 です。終了コードは127です(SwiftLint #6966):

swiftlint: error while loading shared libraries: libxml2.so.2: cannot open shared object file: No such file or directory

24.04 で保存したキャッシュ

runner.os は、どの Ubuntu のイメージでも Linux です。${{ runner.os }}-${{ hashFiles('Gemfile.lock') }} のようなキーは 24.04 と 26.04 で同じなので、26.04 のジョブが 24.04 のジョブの作ったものを戻し、その中でコンパイルされたものは古いライブラリにリンクしています。キーにイメージを入れます。ホストのランナーは、ImageOS を 24.04 では ubuntu24、26.04 では ubuntu26 にしています:

- id: image
  run: echo "os=${ImageOS:?ImageOS is not set on this runner}" >> "$GITHUB_OUTPUT"
- uses: actions/cache@v6
  with:
    path: vendor/bundle
    key: gems-${{ runner.os }}-${{ steps.image.outputs.os }}-${{ hashFiles('Gemfile.lock') }}
    restore-keys: gems-${{ runner.os }}-${{ steps.image.outputs.os }}-

上のように、ステップで読みます。${{ env.ImageOS }} は空です。env の文脈には、ワークフローが決めた変数だけが入り、ランナー自身の変数は入りません(GitHub の文脈の説明)。dorkos #3347 では、そう直したあとも、キーがどちらのイメージでも pnpm-store-Linux--X64-... になっていました。${ImageOS:?...} と書くと、セルフホストのランナーのように変数が無いときに、空の文字でキーを作らずにステップが失敗します。

restore-keys も変えます。イメージの入っていない前方一致は、24.04 の分を見つけてしまいます。それぞれのイメージの最初の実行は、キャッシュに1回当たらず、新しく保存します。Playwright なら、Playwright の版もキーに残します。26.04 用には別のブラウザーのビルドを落とすからです。

actions/setup-python・actions/setup-go のキャッシュと、ruby/setup-ruby の bundler-cache は、もともとキーに Ubuntu の版を入れています。危ないのは、自分で actions/cache に書いたキーです。

24.04 向けに作られたバイナリや wheel

こちらはキャッシュと関係がなく、新しく落としても同じエラーになります。26.04 向けのビルドか、静的にリンクされたビルドを探します。いまのところ、SwiftLint の動的にリンクされた Linux のバイナリ(#6966・11月4日の時点で開いたまま)と、PyPI の libcellml の wheel の報告があり、後者では circulatory_autogen #622 が CI を 24.04 に戻しました。26.04 では apt-get install libxml2 は効きません。そのパッケージは 26.04 に無く、libxml2-16 にあるのは libxml2.so.16 だけです。プロジェクトが 26.04 向けのビルドを出すまでは、そのジョブを runs-on: ubuntu-24.04 に残します。

見分け方

ほかの 26.04 の失敗

失敗したジョブを IntelliJ IDEA から見るなら

Pipeline Inbox for GitHub Actions Workflows は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。すべてのリポジトリの実行を、ジョブ・ステップと一緒に IDE のツールウィンドウに並べ、いまのブランチの実行はステータスバーに出ます。読むのは無料、失敗したジョブの再実行・キャンセル・ワークフローの実行・デプロイのレビューは Pro(月 US$1.50・30日の無料試用つき)です。

JetBrains Marketplace で入れる

GitHub と GitHub Actions は GitHub, Inc. の商標、Ubuntu は Canonical Ltd. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・Canonical・JetBrains のいずれとも提携しておらず、承認も受けていません。

ほかに:「The ubuntu-latest label will migrate to Ubuntu 26」 · 「Cache not found for input keys」 · Ubuntu 26.04 の Playwright · IntelliJ IDEA で使える GitHub Actions のプラグインの比較 · English