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):
- La Mente (
coain 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. - Il Braccio (
oain C): Il capocantiere vicino al metallo. È deliberatamente cieco rispetto alle distribuzioni e allo YAML: riceveoa-plan.json, scorre l'array dei task ed esegue in C nativo le operazioni critiche (userseumount), delegando il resto al tecnico. - Il Tecnico Specializzato (
coa ellin Go): Sottocomando nascosto del binariocoa(multi-call binary pattern, come Git o Docker). Quandooaincontra un modulo ad alto livello (mksquashfs,xorriso,template,autologin-gui,shell,script,copy), effettua unforke invia il singolo task via pipe JSON alloSTDINdicoa 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:
- Rilevamento e Pre-Check (
distro.NewDistro()):coalegge/etc/os-releaseper 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. - 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 tipizzataProfile. - 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--cryptedo il taglio di debug--stop-after) e scrive il contratto formale in/tmp/coa/oa-plan.json. - Passaggio di consegne al Braccio (
oaecoa ell): Terminato il lavoro di intelligenza, Go invocaoa /tmp/coa/oa-plan.jsoncollegandoStdout/Stderrin tempo reale al terminale dell'utente e al log/var/log/penguins-eggs.log.
3. Mappa dei pacchetti Go (coa/pkg/)
| Pacchetto | Ruolo nell'architettura |
|---|---|
cmd | Tutti i comandi Cobra che compongono la superficie CLI (remaster, wizard, sysinstall, coexist, tools, config, mcp, destroy). |
parser | Carica, renderizza i template Go e valida il profilo YAML dal Brain. → Il Parser |
planner | Compila il profilo validato nel piano JSON per oa e genera excludes.list. → Il Planner |
distro | Rileva la distribuzione ospite da /etc/os-release (matching ID + ID_LIKE). |
dispatcher | Smista i task ricevuti da coa ell su STDIN verso il modulo worker corrispondente. |
worker | I moduli in Go eseguiti per conto del motore C (mksquashfs, xorriso, template, copy, autologin-gui, shell, script). → Il modulo coa ell |
sysinstall/setup | Genera la directory di configurazione unificata /etc/penguins-eggs.d/installer.d/ per Calamares e Krill. → L'Installer |
sysinstall/krill | L'installer TUI nativo in Go (Bubbletea), il suo motore e il supporto multi-boot Coexist. → L'Installer |
builder | Genera al volo i pacchetti nativi (.deb, PKGBUILD, .rpm, .apk) per ciascuna distribuzione (eggs tools build). |
bleach | Routine di pulizia delle cache e dei log per le diverse famiglie (eggs tools clean). |
mcp | Server daemon Model Context Protocol (JSON-RPC 2.0) e provisioner per i client IA. → Server MCP |
repo | Gestione automatica dei repository ufficiali e delle chiavi GPG (eggs tools repo). |
tui | Componenti TUI Bubbletea riutilizzabili (wizard, config, dialoghi LUKS). |