EasyLFS
1. Introduzione e Scopo
EasyLFS è un’implementazione moderna e containerizzata del processo di build di Linux From Scratch. Trasforma il tradizionale build manuale di LFS in una pipeline Docker Compose modulare, ripetibile e pensata sia per scopi educativi che per build riproducibili.
Caratteristiche Principali:
- Pipeline Modulare: 6 servizi Docker sequenziali mappati sui capitoli LFS
- Riproducibile: Gli stessi input producono output identici
- Educativo: Imparare i concetti LFS senza inquinare il sistema host
- Portabile: Funziona su qualsiasi sistema con Docker
- Stateful: Volumi nominati preservano gli artefatti tra le fasi
2. Contesto e Motivazioni
Questo progetto nasce come strumento didattico per Linux User Groups (LUG) per dimostrare:
- Pattern Docker Avanzati: Build multi-stage, volumi nominati, orchestrazione sequenziale
- Concetti LFS: Cross-compilazione, chroot, processo di bootstrap del sistema
- Pratiche DevOps: Build riproducibili, infrastructure as code
- Internals Linux: Configurazione kernel, processo di boot SysVinit, runlevel
3. Diagrammi UML — Dettagli Implementativi
Questa sezione fornisce una visione approfondita dell’architettura Docker e dei flussi di esecuzione attraverso diagrammi UML dettagliati.
3.1 Component Diagram — Architecture
Architettura a microservizi Docker: 6 servizi di build sequenziali (download → toolchain → basesystem → configure → kernel → package), 2 servizi web opzionali, 5 volumi persistenti per sorgenti/tools/rootfs/dist/logs.
3.2 Sequence Diagram — Build Pipeline Flow
Orchestrazione temporale della pipeline completa: wrapper script → Docker Compose → esecuzione sequenziale dei 6 container con calcolo tempi e gestione exit code.
3.3 Flowchart — Logica di Checkpointing
Sistema di idempotenza: verifica checkpoint globale servizio, itera pacchetti con hash MD5, skip se già compilato, crea checkpoint su successo. Permette resume dopo interruzioni.
Esiste?} GlobalCheck -- Sì --> LogSkip[📝 Log: Service Already Completed] LogSkip --> EndSuccess([✅ Exit 0]) GlobalCheck -- No --> LoopPkgs[🔄 Itera Lista Pacchetti] LoopPkgs --> CalcHash[🔐 Calcola Hash MD5 Sorgente] CalcHash --> CheckPkg{Checkpoint Pkg
Esiste & Valido?} CheckPkg -- Sì, Hash Match --> SkipPkg[⏭️ Skip: già compilato] SkipPkg --> NextPkg CheckPkg -- No --> BuildStep[🔨 Esegui configure/make/install] BuildStep --> Success{Compilazione
OK?} Success -- No --> LogError[❌ Log Error] LogError --> ExitFail([💥 Exit 1]) Success -- Sì --> CreateCheck[💾 Crea Checkpoint File
+ Salva Hash] CreateCheck --> NextPkg NextPkg{Altri
pacchetti?} NextPkg -- Sì --> LoopPkgs NextPkg -- No --> Finalize[🏁 Crea Checkpoint Globale] Finalize --> EndSuccess style Start fill:#00aa00,color:#fff style EndSuccess fill:#00ff00,color:#000 style ExitFail fill:#ff4444,color:#fff style BuildStep fill:#ffaa00,color:#000
3.4 Class Diagram — Struttura Moduli Bash
Architettura modulare OOP-like in Bash: moduli comuni (logging, checkpointing) inclusi via source dagli script servizio. Pattern simile a ereditarietà/composizione.
4. Quick Start
# Clone e entra nel progetto
git clone https://github.com/gnovelli/easylfs.git
cd easylfs
# Costruisci il sistema LFS completo (setup automatico incluso)
./easylfs build
# Lo script automaticamente:
# ✓ Inizializza i volumi Docker
# ✓ Costruisce tutte le immagini dei servizi
# ✓ Esegue la pipeline completa a 6 fasi
# ✓ Crea un sistema LFS bootabile
Comandi Utili
./easylfs status # Controlla progresso e stato volumi
./easylfs logs # Visualizza log di build
./easylfs export # Esporta immagine disco finale
./easylfs shell # Apri shell nel rootfs LFS
./easylfs clean # Rimuovi container (mantieni volumi)
./easylfs reset # Reset completo (rimuove tutto)
./easylfs help # Mostra tutti i comandi disponibili
5. Accesso Web al Sistema LFS
Dopo aver costruito il sistema LFS, è possibile accedervi direttamente dal browser:
Web Terminal (ttyd)
- Leggero e veloce - accesso shell testuale
- URL: http://localhost:7681
- Perfetto per operazioni da riga di comando
Web Screen (noVNC)
- Console grafica completa con streaming VNC
- URL: http://localhost:6080/vnc.html
- Visualizza il processo di boot completo
# Avvia entrambe le interfacce
make web
# Oppure singolarmente
make web-terminal # http://localhost:7681
make web-screen # http://localhost:6080/vnc.html
# Ferma le interfacce
make web-stop
6. Requisiti di Sistema
- Docker: 24.0 o superiore
- Docker Compose: 2.20 o superiore
- Spazio Disco: 20GB minimo (30GB raccomandato)
- RAM: 4GB minimo (8GB raccomandato per build più veloci)
- CPU: Multi-core raccomandato (influisce sul tempo di build)
7. Output Finali
Il sistema produce i seguenti deliverable:
- lfs-12.4-sysv.img (5GB) - Immagine disco bootabile con GRUB
- lfs-12.4-sysv.img.gz (~1GB) - Immagine bootabile compressa
- lfs-12.4-sysv-rootfs.tar.gz (~1GB) - Filesystem root LFS completo
- Linux kernel 6.12.6 con supporto SysVinit
- 59 pacchetti essenziali dal Capitolo 8 di LFS
- Configurazione sistema completa (fstab, hostname, network, shell profiles)
8. Boot con QEMU
# Modalità console (raccomandato per SSH/remote)
qemu-system-x86_64 \
-m 2G \
-smp 2 \
-drive file=lfs-12.4-sysv.img,format=raw \
-boot c \
-nographic \
-serial mon:stdio
# Oppure con GUI (se eseguito localmente)
qemu-system-x86_64 \
-m 2G \
-smp 2 \
-drive file=lfs-12.4-sysv.img,format=raw \
-boot c
9. Struttura del Progetto
easylfs/
├── docker compose.yml # File di orchestrazione principale
├── easylfs # Script CLI unificato
├── services/ # Implementazioni dei servizi
│ ├── common/ # Utility condivise
│ │ └── logging.sh # Sistema di logging centralizzato
│ ├── download-sources/
│ ├── build-toolchain/
│ ├── build-basesystem/
│ ├── configure-system/
│ ├── build-kernel/
│ └── package-image/
├── tests/ # Suite di test automatizzati
└── dist/ # Immagini di output
10. Stato del Progetto
✅ PRODUCTION READY - Pipeline completa, funzionante e verificata!
Versione Attuale: v1.1.2
Tutte le funzionalità chiave sono complete:
- ✅ Pipeline di build completa a 6 servizi
- ✅ Build riproducibili con sistema di checkpoint
- ✅ Sistema bootabile LFS 12.4 (SysVinit)
- ✅ Capacità di ripresa da qualsiasi punto di fallimento
- ✅ Interfacce web per terminale e console grafica
- ✅ Documentazione completa
11. Riferimenti
- Linux From Scratch Book - Fonte primaria per le istruzioni di build
- LFS Credits - Contributori al progetto LFS
- SysVinit Documentation
- Docker Multi-Stage Builds
12. Riconoscimenti
Questo progetto è costruito sul progetto Linux From Scratch (LFS), utilizzando le istruzioni e comandi di build da LFS 12.4, forniti sotto licenza MIT.
EasyLFS automatizza e containerizza queste istruzioni preservando il valore educativo dell’approccio LFS. Si raccomanda fortemente di leggere il libro LFS originale per comprendere i concetti dietro ogni passaggio.
Crediti:
- Linux From Scratch Project Team - https://www.linuxfromscratch.org/
- Gerard Beekmans - Creatore di LFS
- Bruce Dubbs - Editor e Maintainer LFS
- Docker Community - Piattaforma di containerizzazione