Skip to main content
Deutsch  •  English  •  Español  •  Français  •  Italiano  •  Polska  •  Portuguese  •  Български  •  Русский  •  Українська  •  やまと  •  中国  •  فارsi

🧠 Panoramica architetturale: mente (coa), braccio (oa) e tecnico (ell)

Se il motore in C (oa, "uova") è il braccio meccanico che esegue fisicamente le syscall sul sistema, il binario in Go (coa, "covare", installato anche come eggs) è la mente. Analizza l'ambiente, legge le regole dal Brain (i template in brain.d), stila il piano di volo formale e impartisce gli ordini.

L'intera interfaccia a riga di comando è costruita sul framework Cobra, garantendo modularità, autocompletamento della shell e gestione rigorosa dei privilegi.


1. I tre ruoli logici (su due soli eseguibili)​

L'ecosistema poggia su tre attori logici implementati fisicamente in due soli binari statici (coa/eggs e oa):

  1. La Mente (coa in Go): L'orchestratore puro. Legge i profili del Brain, analizza il sistema ospite e compila la Single Source of Truth (/tmp/coa/oa-plan.json) senza eseguire direttamente script Bash o alterazioni sul sistema.
  2. Il Braccio (oa in C): Il capocantiere vicino al metallo. È deliberatamente cieco rispetto alle distribuzioni e allo YAML: riceve oa-plan.json, scorre l'array dei task ed esegue in C nativo le operazioni critiche (users e umount), delegando il resto al tecnico.
  3. Il Tecnico Specializzato (coa ell in Go): Sottocomando nascosto del binario coa (multi-call binary pattern, come Git o Docker). Quando oa incontra un modulo ad alto livello (mksquashfs, xorriso, template, autologin-gui, shell, script, copy), effettua un fork e invia il singolo task via pipe JSON allo STDIN di coa ell.

2. La dinamica di un volo (eggs remaster)​

Il cuore architetturale risiede in remaster.go. Quando l'utente lancia sudo eggs remaster, il codice in Go innesca una reazione a catena in 4 fasi:

  1. Rilevamento e Pre-Check (distro.NewDistro()): coa legge /etc/os-release per capire su quale distribuzione e famiglia sta atterrando, calcola il percorso finale della ISO e verifica preventivamente lo spazio libero su disco in base all'algoritmo di compressione scelto.
  2. Intervento del Parser (parser.DetectAndLoad()): Il Parser carica la "partitura" dal Brain, unendo lo scheletro universale (base.yaml.tmpl) con il modulo specifico della famiglia (modules/<distro>/), applica gli override utente (custom.yaml) e restituisce una struct tipizzata Profile.
  3. Compilazione del Piano (planner.GeneratePlan()): Il Planner prende l'albero validato dal Parser, genera la lista dinamica delle esclusioni (/tmp/coa/excludes.list), espande i moduli speciali (inclusa l'eventuale pipeline crittografica LUKS --crypted o il taglio di debug --stop-after) e scrive il contratto formale in /tmp/coa/oa-plan.json.
  4. Passaggio di consegne al Braccio (oa e coa ell): Terminato il lavoro di intelligenza, Go invoca oa /tmp/coa/oa-plan.json collegando Stdout/Stderr in tempo reale al terminale dell'utente e al log /var/log/penguins-eggs.log.

3. Mappa dei pacchetti Go (coa/pkg/)​

PacchettoRuolo nell'architettura
cmdTutti i comandi Cobra che compongono la superficie CLI (remaster, wizard, sysinstall, coexist, tools, config, mcp, destroy).
parserCarica, renderizza i template Go e valida il profilo YAML dal Brain. → Il Parser
plannerCompila il profilo validato nel piano JSON per oa e genera excludes.list. → Il Planner
distroRileva la distribuzione ospite da /etc/os-release (matching ID + ID_LIKE).
dispatcherSmista i task ricevuti da coa ell su STDIN verso il modulo worker corrispondente.
workerI moduli in Go eseguiti per conto del motore C (mksquashfs, xorriso, template, copy, autologin-gui, shell, script). → Il modulo coa ell
sysinstall/setupGenera la directory di configurazione unificata /etc/penguins-eggs.d/installer.d/ per Calamares e Krill. → L'Installer
sysinstall/krillL'installer TUI nativo in Go (Bubbletea), il suo motore e il supporto multi-boot Coexist. → L'Installer
builderGenera al volo i pacchetti nativi (.deb, PKGBUILD, .rpm, .apk) per ciascuna distribuzione (eggs tools build).
bleachRoutine di pulizia delle cache e dei log per le diverse famiglie (eggs tools clean).
mcpServer daemon Model Context Protocol (JSON-RPC 2.0) e provisioner per i client IA. → Server MCP
repoGestione automatica dei repository ufficiali e delle chiavi GPG (eggs tools repo).
tuiComponenti TUI Bubbletea riutilizzabili (wizard, config, dialoghi LUKS).