⚙️ L'ingegnere: planner (compilazione del piano ed esclusioni)
Il pacchetto coa/pkg/planner è il ponte tra l'astrazione del Brain (renderizzata dal Parser) e gli esecutori (oa in C e coa ell in Go). Il suo compito è compilare le intenzioni dell'utente nella Single Source of Truth: /tmp/coa/oa-plan.json, agendo come un compilatore Just-In-Time un istante prima del decollo.
Anche il Planner non esegue comandi sul sistema: prepara il terreno affinché i motori possano lavorare senza sorprese.
🧱 1. Il formato dei compiti: OATask
In types.go, il Planner definisce OATask incorporando (embedding) parser.Step: grazie all'appiattimento JSON, ogni task eredita automaticamente name, module, chroot e params dal Brain, a cui il Planner aggiunge i campi operativi risolti a runtime:
work_dir— la radice dell'area di lavoro (es./home/eggs), usata dal modulo nativoumount;live_root— il percorso risolto del filesystem live (<work_dir>/liveroot), iniettato in tutti i task che operano sugli utenti o inchroot: true.
⚙️ 2. Il compilatore: GeneratePlan()
GeneratePlan() scorre profile.Remaster ed espande i moduli strategici:
mount_logic→ Bootstrap dell'ambiente: l'astrazione viene tradotta nel taskshellche invocabootstrap-liveroot.sh, preparando l'albero di staging (liveroot, overlay, bind mount e API filesystem).users→ Due task concreti (oa-users.go):create-live-home(shell): crea la home directory popolandola da/etc/skel.inject-live-users(users, C nativo): inietta le identità. La password dell'utente live viene sottoposta a hashing SHA-512 in Go (openssl passwd -6) e i gruppi dell'utente host vengono specchiati sull'utente live.
- Pipeline Crittografica
--crypted(luks-steps.go): quando la modalità ècrypted(famiglia Debian), il Planner intercetta e trasforma 3 step standard:initramfs→ sostituito daluks-initrd-prep(inietta gli hook di sblocco LUKS nell'initramfs live);copy-kernel-initrd→ sostituito daluks-kernel-copy;mksquashfs→ seguito immediatamente daluks-wrap-squashfs, che avvolgefilesystem.squashfsdentro un contenitore LUKS2 ext4 (root.img) passando la passphrase acryptsetupviastdinsenza mai scriverla su disco.
xorriso+.diskmetadata: risolveoutput_fileesource_dir, inserendo subito prima il taskcoa-dot-diskche genera i metadati.disk/(info, UUID kernel, timestamp).- Il Breakpoint (
--stop-after <step>): se impostato, una volta compilato lo step indicato il Planner scarta tutti gli step successivi ad eccezione del task finalecleanup(umount), garantendo l'ispezione sicura del chroot senza lasciare mount orfani. - Ispezione (
--debug): stampaoa-plan.jsonformattato a terminale ed esce immediatamente senza avviareoa.
🧹 3. Sicurezza dei dati: GenerateExcludeList()
Prima della pianificazione, il Planner genera /tmp/coa/excludes.list indicando a mksquashfs cosa non includere nella ISO:
- Filesystem virtuali e workspace:
dev,proc,sys,run,tmp,var/tmpe la cartella di lavoro (home/eggs/.overlay,home/eggs/isodir,*.iso). - Identità della macchina ospite:
etc/fstab,etc/mtab, chiavi SSH host (etc/ssh/ssh_host_*), connessioni Wi-Fi/rete salvate (NetworkManager/system-connections/*), regole udev persistenti eswapfile. - Cache dei pacchetti: archivi e indici binari di
apt,pacman/pkg,dnf(oltre ai kernelrescuesu Fedora). - Privacy in base alla modalità: in modalità standard il contenuto di
root/*e le home personali vengono esclusi; in modalità--clone/--cryptedi dati utente vengono preservati ma la cronologia della shell, i cestini e le cache dei browser vengono comunque purgati. - Esclusioni personalizzate: se presente,
/etc/penguins-eggs.d/custom.exclude.listviene ripulito e accodato automaticamente.