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

ubuntu-latest(Ubuntu 26.04)の sudo -E:「preserving the entire environment is not supported, '-E' is ignored」

ubuntu-latest は、2026年10月19日から11月19日にかけて Ubuntu 24.04 から 26.04 に移ります(ほかに変わること)。26.04 の sudo は sudo-rs で、sudo-rs は -E に対応していません。警告を出したうえで、渡すつもりだった変数なしでコマンドを動かします:

sudo: preserving the entire environment is not supported, '-E' is ignored

どこで落ちるか

警告にすぎないので、落ちるのはそのあと、コマンドが変数を必要としたところです。set -u のスクリプトは最初の変数で止まります(edge-addition-planarity-suite #378・jirutka/setup-alpine):

Run sudo -E ./setup-alpine.sh
  sudo: preserving the entire environment is not supported, '-E' is ignored
  /home/runner/work/_actions/jirutka/setup-alpine/.../setup-alpine.sh: line 134: INPUT_APK_TOOLS_URL: unbound variable
  Error: Process completed with exit code 1.

インストール先を変数から読むインストーラーは、プログラムを違うディレクトリに入れ、次のステップがそれを見つけられません(dagger #15047):

dagger: command not found
##[error]Process completed with exit code 127.

いちばん困るのは、ステップが緑のままの場合です。sudo -E で起動したサーバーが自分のアドレスを持たずに立ち上がり、空の DNS レコードを返していました(stamhoofd #1487)。エージェントのジョブが API キーを失った例もあります。24.04 で Anthropic=true だったログの行が、26.04 では Anthropic=false になっていました(agentmeter-action #32)。sudo -E を使うジョブの動きが10月19日のあとに変わったなら、ログでこの警告を探します。

なぜか

sudo-rs は、-E と一覧の無い --preserve-env を同じに扱います。警告して無視します(sudo-rs の src/sudo/cli/mod.rs)。-E に対応してほしいという要望は sudo-rs #1299 で、まだ開いています。--preserve-env= に名前の一覧を付ければ通ります。古い sudo も 26.04 のイメージに /usr/bin/sudo.ws として入っています。

直し方:変数の名前を並べる

一覧は sudo でも sudo-rs でも通るので、同じ行が 24.04 でも 26.04 でも動きます:

sudo --preserve-env=SERVER_IP,GOCOVERDIR ./start.sh

または env で渡します。env は渡された値のまま root で動きます:

sudo env SERVER_IP="$SERVER_IP" ./start.sh

PATH は別の話です。Ubuntu の sudoers は secure_path を設定しているので、-E を付けても、どちらの sudo もあなたの PATH を残しませんでした。sudo -E env "PATH=$PATH" ... と書いていたなら、env "PATH=$PATH" の部分はそのままにして、-E を一覧に置き換えます。

自分で作っているアクションでは、入力は INPUT_* の変数で届きます。action.yml の sudo -E ./script.sh は、そのすべてを失います。スクリプトが読む INPUT_* と GITHUB_* の名前を並べます(setup-alpine #35 がそうしています)。gh-aw 1.0 のようにすべてを渡すなら、エクスポートされた名前から一覧を作ります:

sudo --preserve-env="$(compgen -e | paste -sd, -)" ./script.sh

sudo -E が、使っているアクションの中にあるとき

jirutka/setup-alpine のいちばん新しいリリースの v1.4.1 は、まだ sudo -E ./setup-alpine.sh を動かしており、直しはまだ取り込まれていないプルリクエストです。直しの入ったリリースが出るまでは、そのジョブを runs-on: ubuntu-24.04 に固定するか、そのステップの前でジョブを古い sudo に戻します:

- name: Use the classic sudo
  run: |
    if [ -x /usr/bin/sudo.ws ]; then
      sudo update-alternatives --set sudo /usr/bin/sudo.ws
    fi

24.04 には sudo.ws が無いので、そこでは if が飛ばします。10月と11月の直しの多くは 24.04 への固定で、GitHub が 24.04 を引退させるまでは持ちます。どちらにしても「Set up job」を見ます。Runner Image のグループに ubuntu-26.04 か ubuntu-24.04 と出ます。11月19日までは、やり直しが 24.04 に当たって通ることがあるので、やり直しで緑になっても何も証明されません。

26.04 の sudo-rs のほかの違い

失敗したジョブを 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 の apt · Ubuntu 26.04 の Playwright · IntelliJ IDEA で使える GitHub Actions のプラグインの比較 · English