os/ ISO build pipeline #9
Labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
residual/.agent#9
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Plan: os/ ISO Build Pipeline
Goal
Build a bootable Alpine-based ISO for residual, starting with a clean Alpine base, then layering in residual customizations and init scripts.
Status
Phase 1 — Alpine base ISO pipeline [DONE]
.confto Alpine'smkimg.*.shformat withprofile_<name>() {}wrappers.alpine-conf,fakeroot,builduser inabuildgroup), entrypoint.sh (root setup,su buildfor mkimage.sh), profile copy target (scripts/), profile naming (underscores).-a -nthen run asbuilduser.alpine-alpine_base-260702-x86_64.iso(348MB).Phase 2 — residual profile packages [DONE for console-only base]
/sbin/initboot failure — switched both profiles toopenrc(provides/sbin/init).edgetov3.24(latest stable) —Dockerfile.mkimage FROM alpine:3.24, repo URLs →v3.24/main+v3.24/community.qemu-nbd(ships insideqemu-img).apk addafter persistence mounts.lydisplay manager now moot.--profile residualbuild succeeds end-to-end, console-only, on v3.24 pin: 360MB (under 512MB target).Phase 3 — residual overlay configuration [NEXT UP]
lyin base image; console getty/login config instead).res-os setup;residual reset-config-style command for manual install).Phase 2.5 — ISO size budget [RESOLVED for now]
Target 512MB max. Final
residualprofile (console-only): 360MB. modloop-lts (289MB) is the entire remaining size story; 360MB is well under target, no further modloop work needed now.Phase 4 — persistence initramfs hook [DEFERRED per AGENTS.md §12]
init/residual-initas a proper mkinitfs feature.residualtoinitfs_featuresin profile.Important distinction: TWO unrelated "overlay" concepts:
overlayfs/rootfs/(this repo) — static files baked into ISO at build time. Not runtime persistence.overlaymount (upperdir/lowerdir) backed by btrfs, on a labeled partition or qcow2 via qemu-nbd. Phase 4.Phase 5 — res-os / suckless binaries [DEFERRED]
./build.sh --compilecopies them intooverlayfs/rootfs/usr/local/bin/.os/suckless/must be populated first.Key implementation notes
os/iso/profiles/mkimg.<name>.sh, placed inaports/scripts/at build time. Function name =profile_<name>(underscores).build(non-root) viasu build -s /bin/sh -c "...". Root only for initial setup.update-kernelcomes fromalpine-confpackage.abuild-keygen -a -ngenerates key in~build/.abuild/; mkimage.sh sources it viafunctions.sh.compose.ymlmountsoverlayfs/rootfsas/home/build/overlays/residual.Commands