💿 L'installatore unificato: sysinstall (un motore, due volti)
Il processo di installazione su disco (eggs sysinstall) è completamente agnostico rispetto all'interfaccia utente: una singola pipeline di preparazione (coa/pkg/sysinstall/setup) analizza il sistema live e genera la configurazione completa, dopodiché uno dei due "volti" la consuma:
- GUI (Interfaccia Grafica): delegata a Calamares (
sudo eggs sysinstall calamares). - TUI (Interfaccia Testuale): Krill (
sudo eggs sysinstall krill), scritta nativamente in Go (Bubbletea) per server headless, installazioni da console/SSH e multi-boot Coexist.
1. L'unica fonte di verità (/etc/penguins-eggs.d/installer.d/)
Il contratto tra il mondo grafico e quello testuale è la directory di configurazione finita generata a runtime da setup:
/etc/penguins-eggs.d/installer.d/
├── settings.conf # sequenza dei moduli (show / exec) e istanze
├── branding/eggs/ # branding.desc (renderizzato anche da branding.desc.tmpl)
└── modules/*.conf # partition, mount, users, unpackfs, removeuser, shellprocess@...
Una volta generata questa directory:
- Calamares viene invocato con
-c /etc/penguins-eggs.d/installer.d/ed esegue i propri moduli C++/Python. - Krill legge gli stessi identici file
.conf(pkg/sysinstall/krill/config.go) ed esegue la medesima sequenza logica tramite i propri moduli nativi in Go (pkg/sysinstall/krill/engine), registrando ogni comando in/var/log/krill.log.
2. Krill come esecutore nativo della configurazione
Krill non duplica la logica per distribuzione, ma interpreta testualmente la configurazione generata:
- Mappa ogni modulo logico (
partition,mount,unpackfs,machineid,fstab,locale,keyboard,users,displaymanager,removeuser,umount) su una funzione Go nativa. - Esegue i moduli
shellprocess@*alla lettera: gli stessi script di chroot e bootloader usati da Calamares vengono eseguiti da Krill su/tmp/calamares-root-krill. - Modulo esclusivo
networkcfg: a differenza di Calamares, Krill include un passo dedicato per configurare la rete statica o DHCP sull'host installato (ifupdown,NetworkManagerosystemd-networkd). - Supporto avanzato dischi e cloni: gestisce dischi interi, partizioni preesistenti (proteggendo automaticamente la partizione EFI di Windows in scenari multi-ESP e preservando eventuali partizioni
/homeseparate senza riformattarle), slot Coexist e media generati con--clone/--crypted(preservando gli utenti clonati).
3. Strategia autonoma dei bootloader (oa-bootloader.sh)
Lo script del bootloader generato dal template rileva l'ambiente al momento dell'installazione senza assunzioni rigide:
| Firmware | Bootloader Rilevato | Famiglia | Azione Eseguita |
|---|---|---|---|
| UEFI / BIOS | limine | Qualsiasi | Installa Limine (limine bios-install o binario UEFI) e scrive limine.conf. |
| UEFI | bootctl (systemd-boot) | Arch, Manjaro | Installa systemd-boot, copia kernel/initrd/ucode nella ESP e genera loader.conf. |
| UEFI | grub-install | Qualsiasi | Installa GRUB EFI (con supporto BLS e isolamento vendor su openSUSE) e aggiorna grub.cfg. |
| BIOS | grub-install | Qualsiasi | Installa GRUB i386-pc sull'MBR del disco target. |
Safe Mode Multi-Boot: se nella partizione
/boot/efi/EFI/sono già presenti altri sistemi operativi, lo script utilizza--no-nvram/--no-variables(o registra voci isolate in modalità Coexist) per non dirottare l'ordine di avvio NVRAM esistente.