ubuntu-latest(Ubuntu 26.04)の bubblewrap:「No permissions to create a new namespace」と bwrap-userns-restrict
ubuntu-latest は、2026年10月19日から11月19日にかけて Ubuntu 24.04 から 26.04 に移ります(ほかに変わること)。bubblewrap(bwrap)を、直接またはエージェントのサンドボックスを通して動かすジョブは、AppArmor の変更に当たります。26.04 では bwrap-userns-restrict のプロファイルが apparmor パッケージに含まれ、/etc/apparmor.d/ から読み込まれます。このプロファイルは /usr/bin/bwrap にユーザー名前空間を作らせますが、bwrap が始めるものはすべて、あらゆる権限(capability)を拒む2つ目のプロファイル unpriv_bwrap の下で動きます。
サンドボックスの中のサンドボックス
単純な bwrap の呼び出しは今も動きます。落ちるのは、その中で権限を必要とするもの、たとえば2つ目の bwrap や、入れ子のユーザー名前空間で setgroups を書く seccomp の補助プログラムです。bwrap 自身からは(Identity-md/worker #12):
bwrap: No permissions to create a new namespace, likely because the kernel does not allow non-privileged user namespaces. On e.g. debian this can be enabled with 'sysctl kernel.unprivileged_userns_clone=1'.
ここでは sysctl についてのヒントは見当違いです。拒んでいるのはプロファイルなので、kernel.apparmor_restrict_unprivileged_userns=0 だけでは直りません。Claude Code のもののようなサンドボックスのランタイムからは(claude-code #101946):
apply-seccomp: write /proc/self/setgroups (nested userns is capability-restricted; caller must provide CAP_SYS_ADMIN): Permission denied
カーネルのログにはプロファイルの名前が出ます:apparmor="DENIED" operation="capable" profile="unpriv_bwrap" capname="sys_admin"。ランナーでは、サンドボックスを呼ぶステップが落ちるか、サンドボックスを必要とするテストが飛ばされるか落ちます。
ジョブのあとに捨てられるランナーなら、そのジョブの間だけプロファイルを外し、bwrap が自分の名前空間を作れるようにユーザー名前空間を許します。devspace の CI がこうしていて、イメージ ubuntu-26.04 20261025.179.1 で、サンドボックスのテストを必須にしたまま緑です:
- name: Let bwrap nest
run: |
sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0
if [ -f /etc/apparmor.d/bwrap-userns-restrict ]; then
sudo apparmor_parser -R /etc/apparmor.d/bwrap-userns-restrict || true
fi
これはジョブの残りの間、ランナーのすべてのプログラムについて制限を外します。使い続けるマシンには写さないでください。そこでは、上の報告はプロファイルを無効にしたうえで、bwrap 用の制限の無いプロファイルを読み込んでいます。
プロファイルを読み込んでいた 24.04 のステップ
24.04 では、同じプロファイルが無効のまま apparmor-profiles パッケージの /usr/share/apparmor/extra-profiles/ に入っていて、多くのワークフローが、bwrap をそもそも動かすためにこれを読み込んでいました。26.04 ではそこに無いので、このステップがジョブを止めます(stashbase/cli #81:apparmor_parser が 2 で終了):
sudo apparmor_parser -r /usr/share/apparmor/extra-profiles/bwrap-userns-restrict
ファイルがあるときだけ読み込みます。26.04 ではプロファイルがもう読み込まれているので、このステップですることはありません:
profile=/usr/share/apparmor/extra-profiles/bwrap-userns-restrict if [ -f "$profile" ]; then sudo apparmor_parser -r "$profile" fi
ジョブが上の節の入れ子も必要とするなら、そのあとに上の行を足します。
見分け方
bwrap --ro-bind / / --dev /dev --proc /proc --unshare-user cat /proc/self/attr/currentを動かします。26.04 のプロファイルの下ではbwrap//&unpriv_bwrap (enforce)、プロファイルを外したあとはunconfinedと出ます(claude-code #101946 のコメント)。- 入れ子が無いのに最初の bwrap から「setting up uid map: Permission denied」が出るのは、たいていユーザー名前空間そのものが制限されているときです。たとえば
sysctlの行なしでプロファイルを外したときです。 - 「Set up job」を見ます。Runner Image のグループに
ubuntu-26.04かubuntu-24.04と出ます。11月19日までは、やり直しが 24.04 に当たって通ることがあるので、やり直しで緑になっても何も証明されません。runs-on: ubuntu-24.04は、GitHub が 24.04 を引退させるまでは持ちます。
26.04 のほかの失敗
- Ubuntu 26.04 の kind load docker-image:Docker 29 の containerd イメージストアは pull したイメージの1つのプラットフォームの分しか持たないので、kind の読み込みが「ctr: content digest ... not found」で落ちます。
- Ubuntu 26.04 の /etc/sysctl.conf:inotify の上限と
vm.mmap_rnd_bitsがカーネルの既定のままなので、.NET のホストや kind のクラスターは「too many open files」になり、ThreadSanitizer は止まります。 - 「coreutils: unknown program」:基本のコマンドのほとんどが uutils です。
- Ubuntu 26.04 の sudo -E:
sudoは-Eを無視する sudo-rs です。 - 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. の商標、Ubuntu は Canonical Ltd. の商標、Claude は Anthropic, PBC の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・Canonical・Anthropic・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:「The ubuntu-latest label will migrate to Ubuntu 26」 · 「coreutils: unknown program」 · Ubuntu 26.04 の sudo -E · IntelliJ IDEA で使える GitHub Actions のプラグインの比較 · English