5.7 KiB
Perfect — then let’s be very concrete and treat the overlay itself as a specification, not just “put binaries somewhere”.
Below is a clean, minimal, opinionated overlay schema for an ASL intake / rescue environment, aligned with everything you’ve defined (ASL, STORE-INDEX, federation, ZFS optional).
No diagrams, no fluff.
ASL SystemRescue Overlay – Intake Schema
This overlay defines what exists at boot, where state lives, and what is immutable vs runtime.
1. High-level intent
The overlay must:
- Make ASL tools always available
- Be stateless by default
- Support local ZFS intake OR remote ASL intake
- Keep semantic state out of the rescue image
- Be safe on crashed systems
So the overlay provides:
- executables
- configuration defaults
- service wiring
- well-known mount points
Nothing else.
2. Canonical overlay layout
overlay/
├── usr/
│ └── local/
│ ├── bin/
│ │ ├── asl-intake
│ │ ├── asl-admin
│ │ └── asl-debug
│ └── lib/
│ └── libasl.so
│
├── etc/
│ └── asl/
│ ├── asl.conf # mode selection, endpoints
│ ├── federation.conf # domain + peer config
│ └── logging.conf
│
├── etc/systemd/system/
│ ├── asl-intake.service
│ └── asl-preflight.service
│
├── var/
│ └── lib/
│ └── asl/
│ ├── runtime/ # ephemeral runtime state
│ ├── cache/ # optional CAS cache
│ └── locks/
│
├── run/
│ └── asl/
│ └── sockets/ # if used (optional)
│
└── mnt/
└── asl/
├── local/ # local ZFS mount target
└── remote/ # optional remote FS
This is the entire contract between SystemRescue and ASL.
3. What each directory means (important)
/usr/local/bin
Immutable tools
asl-intakePrimary recovery/intake executableasl-adminInspection, snapshot listing, GC checksasl-debugLow-level validation, block/segment inspection
These must never write here.
/etc/asl
Declarative configuration only
Example asl.conf:
mode = auto # auto | local | remote
local.mount = /mnt/asl/local
remote.endpoint = https://asl-backend
domain.id = rescue-domain
Rules:
- No secrets unless unavoidable
- No mutable state
- Safe to ship in ISO
/var/lib/asl
All mutable local state
This is the only place your tools write to by default.
/var/lib/asl/runtime # PID files, temp metadata
/var/lib/asl/cache # optional local CAS cache
/var/lib/asl/locks # advisory locks
This may live:
- in RAM (default)
- on USB persistence
- never on the broken system disk
/mnt/asl/local
Local ASL backend mount (ZFS)
If local intake is possible:
zpool import rescuepool
zfs mount rescuepool/asl → /mnt/asl/local
Your tool treats this as:
/mnt/asl/local/
├── blocks/
├── segments/
├── snapshots/
└── logs/
(Exact internal layout is backend-defined, not overlay-defined.)
/mnt/asl/remote
Optional:
- NFS
- SSHFS
- Debug mounts
Not required for normal operation.
4. systemd services (minimal and safe)
asl-preflight.service
Runs once at boot.
Responsibilities:
- Detect network
- Detect ZFS availability
- Detect importable pools
- Write decision to
/run/asl/mode
No mutations.
asl-intake.service
Starts the tool.
Example behavior:
-
Reads
/run/asl/mode -
Chooses:
- local ZFS backend
- or remote ASL endpoint
-
Starts intake loop or waits for operator
This keeps policy out of the binary.
5. Local vs remote handling (explicit contract)
Local ZFS mode
The overlay guarantees:
/mnt/asl/local exists
/var/lib/asl writable
/usr/local/bin contains tools
Your tool guarantees:
- Never mutate unsealed data
- Never auto-import pools without operator or config approval
Remote ASL mode
The overlay guarantees:
- Network tools available
- TLS roots present
- Configurable endpoint
Your tool guarantees:
- Snapshot-bounded reads
- Deterministic uploads
- Idempotent retries
6. What is explicitly forbidden in the overlay
These rules prevent disasters:
❌ Writing to /usr, /bin, /lib
❌ Storing state in /etc
❌ Auto-mounting the crashed system root
❌ Assuming ZFS exists
❌ Assuming network exists
All assumptions must be detected, not presumed.
7. Why this schema works with your ASL design
This layout aligns perfectly with your specs because:
-
ASL-STORE-INDEX → persistence lives outside the overlay
-
Federation → domain identity is config, not state
-
PEL / TGK → execution artifacts are handled like any other artifact
-
Determinism → overlay never contains semantic state
The overlay is pure capability, not data.
8. Summary (the one-paragraph version)
The SystemRescue overlay should contain only tools, config, and wiring. All mutable ASL state lives either in
/var/lib/asl(ephemeral) or in a mounted backend (/mnt/asl/localor remote). The overlay never encodes semantic state, snapshots, or artifacts — only the ability to access and produce them.
If you want, next we can:
- Turn this into a formal overlay contract doc
- Define a preflight decision table
- Or map this schema directly onto your ASL backend spec
But this layout is already “correct by construction.”