ubuntu-latest(Ubuntu 26.04)の「rootless netns: kill network process: permission denied」:rootless Podman と pasta
ubuntu-latest は、2026年10月19日から11月19日にかけて Ubuntu 24.04 から 26.04 に移ります(ほかに変わること)。rootless の Podman は、コンテナーのネットワークに pasta を使います。Ubuntu 26.04 には pasta の AppArmor のプロファイル(/etc/apparmor.d/usr.bin.pasta)が入っていて、このプロファイルは pasta が Podman からシグナルを受け取ることを許していません。そのため、Podman が rootless のネットワークの名前空間を片付けようとして pasta に SIGTERM を送ると、カーネルに断られます。Ubuntu 24.04 には pasta のプロファイルが無いので、同じジョブが通ります。
runner-images の担当者は、ubuntu-26.04 の 20261026.180.1 と ubuntu-26.04-arm の 20261026.168.1 で再現しています(runner-images #15182)。原因は Ubuntu そのものにあり(Ubuntu のバグ 2154379・2026年5月に登録・11月4日の時点で apparmor・passt・podman のどれも Confirmed のまま)、手元の Ubuntu 26.04 でも同じことが起きます。
出る文
Podman 自身の文です。podman unshare --rootless-netns true は終了コード126で終わります:
Error: rootless netns: cleanup: 1 error occurred: * rootless netns: kill network process: permission denied
Docker 互換のソケット越しだと、テストは通ったあとで、docker compose down がネットワークの最後のコンテナーのところで失敗します(8Knot #1223):
Container 8knot-redis-broker-1 Error Error while Stopping Error response from daemon: removing container 29ee0adbe1a7... network: 1 error occurred: * rootless netns: kill network process: permission denied Error: executing /usr/libexec/docker/cli-plugins/docker-compose -f docker-compose.yml down: exit status 1 Error: Process completed with exit code 1.
podman run --rm --network <ブリッジ> は同じエラーを出しても終了コード0で終わるので、ステップは緑のままで、文を見落としやすくなります。カーネルのログには、断られるたびに1行ずつ出ます:
apparmor="DENIED" operation="signal" class="signal" profile="pasta" pid=2290 comm="podman" requested_mask="receive" denied_mask="receive" signal=term peer="podman"
直し方1:pasta がシグナルを受け取れるようにする
直ったイメージがジョブに届くまでの間に、担当者が示しているステップです。rootless の Podman のネットワークを使う最初のステップより前に置きます。26.04 のプロファイルは local/ のファイルを読み込まないので、規則はプロファイルそのものに書く必要があります。報告した人の回避のジョブは、これで ubuntu-26.04 を通りました。
- name: Allow podman to stop pasta (actions/runner-images#15182)
run: |
sudo sed -i '$ i\ signal (receive) set=(term) peer=podman,' /etc/apparmor.d/usr.bin.pasta
sudo apparmor_parser -r /etc/apparmor.d/usr.bin.pasta
ubuntu-24.04 にはこのファイルが無いので、上のステップはそこで失敗します。両方のイメージで、またイメージに規則が入ったあとも同じステップを使うなら、ファイルがあって、まだ Podman の規則が無いときだけ足します。イメージ側の直し(runner-images #15184)も、同じ peer=podman を確かめています:
- name: Allow podman to stop pasta (actions/runner-images#15182)
run: |
p=/etc/apparmor.d/usr.bin.pasta
if [ -f "$p" ] && ! sudo grep -q 'peer=podman' "$p"; then
sudo sed -i '$ i\ signal (receive) set=(term) peer=podman,' "$p"
sudo apparmor_parser -r "$p"
fi
直し方2:pasta の代わりに slirp4netns を使う
slirp4netns には、このようなプロファイルがありません。warren #62 は、これを rootless のネットワークの既定にしました:
- name: Use slirp4netns for rootless networking
run: |
command -v slirp4netns >/dev/null || sudo apt-get install -y slirp4netns
mkdir -p ~/.config/containers
printf '[network]\ndefault_rootless_network_cmd = "slirp4netns"\n' > ~/.config/containers/containers.conf
これは ~/.config/containers/containers.conf を新しく書きます。ジョブがすでにこのファイルを書いているなら、ファイルを置き換えずに、その [network] の表の下にこの行を足します。
直し方3:Podman のジョブは 24.04 に残す
runs-on: ubuntu-24.04
CoreOS(bootupd #1179・ignition #2351)と CHAOSS(8Knot #1225)が、10月末にこうしました。GitHub がこのイメージを終えるまでは使えます。
イメージに規則が入ったら
runner-images #15184 は、同じ規則を 26.04 のイメージに入れ、プロファイルに規則があるかのテストも足します。11月4日の時点ではまだマージされておらず、担当者は届いたら #15182 で知らせると書いています。そのあとは、直し方1の確かめつきのステップは何もしないので、残しておけます。
見分け方
sudo dmesg | grep 'apparmor="DENIED"'にprofile="pasta"とpeer="podman"が出ます。ls /etc/apparmor.d | grep -i pastaは、26.04 ではusr.bin.pastaを出し、24.04 では何も出しません。pastaを通るのは rootless の Podman だけです。ランナーの Docker Engine を使うジョブは通らないので、このエラーではありません。- 「Set up job」の Runner Image の欄が
ubuntu-26.04かubuntu-24.04かを見ます。11月19日までは、再実行が 24.04 に当たって通ることがあるので、再実行が緑でも何も確かめたことになりません。
ほかの 26.04 の失敗
- Ubuntu 26.04 の bubblewrap:別の AppArmor のプロファイル
bwrap-userns-restrictが最初から読み込まれているので、bwrapの中のサンドボックスが「No permissions to create a new namespace」で落ちます。 - Ubuntu 26.04 の setup-ruby の「Unavailable version」:26.04 向けには Ruby の各系列の一部のパッチしか作られていないので、
.ruby-versionの 3.4.2 のような固定は Ruby のステップで止まります。 - Ubuntu 26.04 の「cannot open shared object file」:libxml2 は
libxml2.so.16、ICU は 78 なので、24.04 で保存したキャッシュや 24.04 向けのバイナリがlibxml2.so.2やlibicudata.so.74を見つけられません。 - Ubuntu 26.04 の「client version ... is too old」:Docker 29 は API 1.40 より古いクライアントを断るので、古い Testcontainers は「Could not find a valid Docker environment」で落ちます。
- Ubuntu 26.04 の kind load docker-image:Docker 29 の containerd のイメージストアは、取ってきたイメージのプラットフォームを1つしか持たないので、kind の取り込みが「ctr: content digest ... not found」で落ちます。
- Ubuntu 26.04 の /etc/sysctl.conf:inotify の上限が低いままなので、.NET のホストや kind のクラスターは「too many open files」になります。
- 「coreutils: unknown program」:基本のコマンドのほとんどが uutils です。
- 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. の商標、Docker は Docker, Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・Canonical・Docker, Inc.・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:「The ubuntu-latest label will migrate to Ubuntu 26」 · Ubuntu 26.04 の bubblewrap · Ubuntu 26.04 の「client version ... is too old」 · IntelliJ IDEA で使える GitHub Actions のプラグインの比較 · English