Add redis workload with OCI image

Draft
HE
3mo ago
+22036-578

Add a simple redis workload to the CI pipeline, such that we can ensure future changes are not breaking features used by real software. Please see https://github.com/sysprog21/elfuse/pull/259

Do not merge this PR before https://github.com/sysprog21/elfuse/pull/259 is merged. Currently, the PR stack is oci/setup -> elfuse-redis-server (https://github.com/sysprog21/elfuse/pull/259) -> this PR https://github.com/sysprog21/elfuse/pull/270


Summary by cubic

Adds end-to-end OCI image support with the elfuse-oci CLI and a macOS case‑sensitive APFS sparsebundle rootfs with per‑run COW clones. Includes Linux‑compatible /proc/self/{maps,smaps} to pass Redis BGSAVE fork/COW checks, and CI that boots real images under HVF plus layout conformance and interop.

  • New Features

    • elfuse-oci CLI: pull, inspect, list, unpack, run, rmi, prune, with a spec‑compliant OCI image‑layout store, ref pinning, and reachability GC; lifecycle commands protect live runs and --keep clones via per‑digest advisory locks.
    • Darwin case‑sensitive rootfs via APFS sparsebundles with per‑run COW clones; --plain-rootfs keeps a directory mode for portability.
    • run resolves Entrypoint/Cmd/User/Env/WorkingDir, guarantees a sane PATH, injects host‑truth /etc/{resolv.conf,hosts,hostname}, and execs elfuse; non‑Darwin reports a clear error without --plain-rootfs.
    • elfuse adds --user, --workdir, and --env, with bring‑up factored into elfuse_launch and reused by elfuse-oci.
    • CI: OCI store conformance/interop (crane/skopeo/umoci), darwin sparsebundle tests, run/exec checks (AF_UNIX pathname sockets and dynamic‑interpreter resolution), and per‑image workloads (python/node/go/jvm/c/redis) that boot under HVF.
  • Migration

    • Go is required to build elfuse-oci; make builds it when go is on PATH (otherwise it’s skipped).
    • Default store is $ELFUSE_OCI_STORE or ~/.local/share/elfuse/oci; self‑hosted macOS runners keep a warm store per workload.