Commit 7bd5ef1
fix(boot): /etc storage.conf + pasta default + static cockpit-systemd user
Three independent boot failures from the 2026-05-06 boot journal,
all surfaced after the rshared/devnodes fix in 69cf6e3 unblocked
forward progress.
1. Rootful container storage falling through to fuse-overlayfs.
Symptom (every Quadlet, including mios-ai / mios-forge / mios-
searxng): `fuse-overlayfs: cannot mount: No such file or directory`.
Root cause: containers/storage's documented config-resolution chain
is $CONTAINERS_STORAGE_CONF -> /etc/containers/storage.conf ->
~/.config/containers/storage.conf -> hardcoded defaults. The
/usr/share/containers/storage.conf path we'd been shipping is
convention but is NOT read by libcontainers/storage at runtime, so
the base image's /etc/containers/storage.conf (from
ghcr.io/ublue-os/ucore-hci) was winning with mount_program=
/usr/bin/fuse-overlayfs. Shipping a real /etc/containers/storage.
conf in MiOS with mount_program="" forces kernel-native overlayfs
(Linux 5.11+ supports unprivileged overlayfs in user namespaces
with metacopy=on + userxattr; the microsoft-WSL2 6.6 kernel does).
Adds whitelist line `!/etc/containers/storage.conf` to .gitignore
so the new file isn't masked by `etc/containers/*`.
2. Rootless network forced to slirp4netns under a wrong premise.
Symptom: `start slirp4netns: /usr/bin/slirp4netns failed:
open(/dev/net/tun): No such file or directory`. Root cause: an
earlier drop-in at /etc/containers/containers.conf.d/30-mios-
rootless-network.conf forced default_rootless_network_cmd=
"slirp4netns" on the false assumption that slirp4netns "works
without /dev/net/tun". It doesn't -- slirp4netns creates a tap
device inside the rootless netns and that tap requires /dev/net/
tun to be exposed. pasta (passt-pasta) is socket-only -- no tun
device, no CAP_NET_ADMIN, ~3x faster on TCP -- and IS the right
answer for the missing-tun nested-container shape MiOS targets.
This commit reverses the directive to default_rootless_network_
cmd="pasta" and rewrites the file's comment block so the next
reader doesn't fall into the same trap.
3. Cockpit 217/USER for cockpit-systemd-service.
Symptom: `cockpit.service: Failed to determine credentials for
user 'cockpit-systemd-service': Unknown user / Failed at step
USER spawning /usr/libexec/cockpit-certificate-ensure: Invalid
argument`. Root cause: newer cockpit-ws (300+) ships the unit
with `User=cockpit-systemd-service` + `DynamicUser=yes`. Our
/etc/systemd/system/cockpit.service.d/10-mios-container.conf
(added in 1f74f44) sets DynamicUser=no to prevent the
PrivateTmp=yes implication that DynamicUser=yes forces, because
PrivateTmp triggers a mount namespace clone which fails on WSL2.
With DynamicUser=no the User= reference is looked up statically
and finds nothing on a fresh image. Adds usr/lib/sysusers.d/
50-mios-cockpit.conf pinning cockpit-systemd-service to UID 977
(system range, away from MiOS service slots and upstream Fedora
reservations) so the static lookup succeeds while the namespace
resets stay in effect.
Boot order: mios-wsl-early (rshared/devnodes) still runs first, and
its WARN messages on hosts where mknod/make-rshared genuinely fails
(unprivileged-podman-in-WSL2) are now expected to be benign rather
than fatal -- with kernel overlay + pasta, neither /dev/fuse nor
/dev/net/tun is required to come up.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>1 parent d937ac5 commit 7bd5ef1
4 files changed
Lines changed: 98 additions & 27 deletions
File tree
- etc/containers
- containers.conf.d
- usr/lib/sysusers.d
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
104 | 104 | | |
105 | 105 | | |
106 | 106 | | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
107 | 113 | | |
108 | 114 | | |
109 | 115 | | |
| |||
Lines changed: 24 additions & 27 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
4 | | - | |
| 3 | + | |
5 | 4 | | |
6 | | - | |
7 | | - | |
8 | | - | |
9 | | - | |
10 | | - | |
11 | | - | |
12 | | - | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
13 | 14 | | |
14 | | - | |
15 | | - | |
16 | | - | |
17 | | - | |
18 | | - | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
19 | 18 | | |
20 | | - | |
21 | | - | |
22 | | - | |
23 | | - | |
24 | | - | |
25 | | - | |
26 | | - | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
27 | 26 | | |
28 | | - | |
29 | | - | |
30 | | - | |
31 | | - | |
32 | | - | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
33 | 30 | | |
34 | 31 | | |
35 | | - | |
| 32 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
0 commit comments