You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Make `oci run` work against real public images (alpine, busybox,
python, ruby, debian) and lock the surface down with end-to-end
fixtures.
Runtime surface:
- writable clone-rootfs DoD: the per-run rootfs is writable
out of the box, so guests that mutate /tmp, /var, /run work
unchanged
- runtime files injection: /etc/resolv.conf, /etc/hosts,
/etc/hostname populated from the host into the clone-rootfs
- /dev/full and /dev/console emulation in the syscall layer
- /proc surface: cgroup, hostname, comm, statm entries that
glibc startup and procps tooling read
- image-config `User` symbolic resolution: name and name:group
forms looked up against the guest /etc/passwd and /etc/group
before falling back to numeric
- `oci run` walks the image index to the linux/arm64 leaf manifest
(Phase 3 fix; previously fed the top-level index to the
config-loader and crashed on multi-arch images)
Bug fixes uncovered by cold-cache runs:
- layer apply no longer rejects the root tar entry "./"
- unpack stages files via copyfile(2) with COPYFILE_CLONE fallback
so cross-volume unpack (store on internal SSD, sysroot on the
APFS sparsebundle) succeeds
- tar reader handles PAX 'x' / 'g' extended-header `path` and
`linkpath` records (busybox and python:alpine layers use them)
Compat tests:
- `tests/test-oci-compat.sh` shell smoke (in-tree fixtures)
- `OCI_COMPAT_TEST=1` heavy mode that provisions a scratch
sparsebundle and drives three fixtures end-to-end:
alpine-shaped, busybox-shaped hardlink dispatch, two-layer
whiteout
- `OCI_FETCH_ONLINE=1` alpine:3 end-to-end smoke (opt-in;
requires network)
`ELFUSE_OCI_PROGRESS=plain` env disables the pull progress
in-place CSI redraw for terminals that don't honor cursor-up
escapes (issue surfaced on legacy Terminal.app panes).
Documentation: `docs/oci.md` Phase 4 runtime surface and
libc-adjacent envelope notes (what guests can / can't expect
from the synthetic /etc, /dev, /proc).
|`-u UID[:GID]`, `--user UID[:GID]`| Override image User (numeric only) |
135
+
|`-u USER[:GROUP]`, `--user USER[:GROUP]`| Override image User; numeric `UID[:GID]` or symbolic `name[:group]` resolved from the rootfs `/etc/passwd` and `/etc/group` (see [User and WorkingDir](#user-and-workingdir)) |
136
136
|`--keep`| Keep the per-run cloned rootfs after exit |
ships with the image. `elfuse` does not transcode macOS
250
+
`/var/db/timezone/zoneinfo` into the tzdata format; if the image is
251
+
missing the needed zone, glibc / musl fall back to UTC. The `TZ`
252
+
environment variable is honored as-is and is not rewritten by the
253
+
Env merge policy.
254
+
-**`/usr/lib/locale/locale-archive`** is not regenerated. glibc
255
+
images without a built archive (or the matching `<lang>.UTF-8/`
256
+
directory) fall back to the `C` locale; locale-aware sort / printf
257
+
/ strcoll outputs ASCII order. musl images do not use the archive
258
+
and are unaffected.
259
+
-**`/usr/lib/<triple>/gconv/`** modules and the `gconv-modules`
260
+
index ship with the image. Missing modules surface as `EILSEQ` from
261
+
`iconv` / glibc's character-set conversion; this most often shows
262
+
up when an image ships a stripped glibc layer.
263
+
-**`ld.so.cache`** is not rebuilt. The guest dynamic linker reads
264
+
whatever cache the image carries; missing entries fall through to
265
+
the linker's library-path search, which is the normal slow path.
266
+
267
+
Common workloads and the symptom-to-workaround mapping:
268
+
269
+
| Symptom | Trigger | Workaround |
270
+
|--|--|--|
271
+
|`getaddrinfo` returns `EAI_AGAIN` or an empty result |`/etc/nsswitch.conf` lists a backend (`systemd`, `sss`, ...) that needs a daemon | use a distro whose `nsswitch.conf` is `files dns` (alpine ships this by default; debian needs the file edited) |
272
+
|`date`, `strftime` show UTC instead of the expected zone | the image does not contain `/usr/share/zoneinfo/<Zone>`| install tzdata in the image (`apk add tzdata` / `apt install tzdata`), or pass `-e TZ=UTC` to acknowledge UTC |
273
+
|`sort`, `printf`, `strcoll` collate in ASCII order | the image is missing `/usr/lib/locale/locale-archive` or the matching `<lang>.UTF-8/` directory | accept the C-locale fallback, run `locale-gen` during the image build, or use a musl-based image (alpine), which does not depend on the archive |
274
+
189
275
## Guest Compatibility Model
190
276
191
277
`elfuse` is designed for Linux user-space workloads, not for booting a Linux
0 commit comments