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

ubuntu-latest(Ubuntu 26.04)の「coreutils: unknown program」:Rust 版の coreutils(uutils)

ubuntu-latest は、2026年10月19日から11月19日にかけて Ubuntu 24.04 から 26.04 に移ります(ほかに変わること)。26.04 では、基本のコマンド(sleep・ls・cat・timeout など)のほとんどが、GNU coreutils を Rust で書き直した uutils のものです。GNU の動きを前提にしたスクリプトやテストはいくつかの形で落ち、いちばんよく出るメッセージがこれです:

coreutils: unknown program 'codex'

名前を変えた sleep のコピー

uutils はすべてのコマンドを1本のプログラムにまとめていて、呼ばれた名前でどのコマンドになるかを決めます。テストでは、pgrep で見つけられるように、sleep を別の名前でコピーしたりリンクしたりして、動き続けるプロセスの代わりにすることがよくあります。26.04 では、そのコピーがすぐに終わります(pithead #3783・crewship #4062):

coreutils: unknown program 'p2pool'

テストはそのあと、もういないプロセスを待って別のところで落ちます。fake-sleep のようにコマンドの名前で終わる名前なら、uutils は名前の終わりで照らし合わせるので動きます。どちらのイメージでも通る直し方は2つです:

timeout -k がプロセスグループ全体を止めない

uutils の timeout は、最初のシグナルは GNU と同じようにコマンドのプロセスグループに送りますが、-k や -s KILL の KILL は直接の子プロセスにしか届きません(uutils #15768・まだ開いています)。コマンドが始めたプロセスは動き続けます。止まったインストールを timeout -k で止めていたステップは待ち続け、KILL を前提にしたテストは自分のタイムアウトで落ちます(openRepoTools #297)。GNU の timeout を使います。26.04 では gnutimeout として入っています(waitron #2400 がそうしています):

T=$(command -v gnutimeout || command -v timeout)
"$T" -k 10 300 ./install.sh

CI で見られたほかの違い

ステップがどちらに当たったかは、コマンドに聞きます。26.04 では timeout --version が timeout (uutils coreutils) 0.10.0 と出し、readlink -f "$(command -v sleep)" で名前の指す先が分かります。

GNU のコマンドは入ったまま

26.04 の coreutils パッケージは coreutils-from-uutils に依存し、それが gnu-coreutils に依存しています。そのため GNU のコマンドは、gnusleep・gnutimeout・gnucat・gnudate・gnusort・gnutail などの gnu の付いた名前で、いつも入っています。1つのコマンドを直すなら、これがいちばん小さな直し方です。ubuntu:26.04 から作るイメージなら、Dockerfile で全部を GNU に戻しているプロジェクトもあります(kickstart-flavor-php #4):

apt-get install -y --allow-remove-essential coreutils-from-gnu coreutils-from-uutils-

または、スクリプトを直すまでジョブを runs-on: ubuntu-24.04 に固定します。GitHub が 24.04 を引退させるまでは持ちます。どちらにしても「Set up job」を見ます。Runner Image のグループに ubuntu-26.04 か ubuntu-24.04 と出ます。11月19日までは、やり直しが 24.04 に当たって通ることがあるので、やり直しで緑になっても何も証明されません。

26.04 のほかの失敗

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

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

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」 · Ubuntu 26.04 の sudo -E · Ubuntu 26.04 の apt · IntelliJ IDEA で使える GitHub Actions のプラグインの比較 · English