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. Architettura del Sistema
Lβarchitettura Γ¨ basata su 6 servizi Docker sequenziali che rispecchiano i capitoli del libro LFS:
βββββββββββββββββββ
β download-sourcesβββ> lfs-sources (volume)
ββββββββββ¬βββββββββ
β
v
βββββββββββββββββββ
β build-toolchain βββ> lfs-tools + lfs-rootfs
ββββββββββ¬βββββββββ
β
v
βββββββββββββββββββ
βbuild-basesystem βββ> lfs-rootfs (chroot)
ββββββββββ¬βββββββββ
β
v
βββββββββββββββββββ
βconfigure-system βββ> lfs-rootfs
ββββββββββ¬βββββββββ
β
v
βββββββββββββββββββ
β build-kernel βββ> lfs-rootfs (/boot)
ββββββββββ¬βββββββββ
β
v
βββββββββββββββββββ
β package-image βββ> lfs-dist (bootable .img)
βββββββββββββββββββ
Servizi della Pipeline
| Servizio | Descrizione | Durata |
|---|---|---|
| download-sources | Scarica tutti i pacchetti sorgente LFS | 5-15 min |
| build-toolchain | Costruisce la toolchain di cross-compilazione (Cap. 5-6) | 2-4 ore |
| build-basesystem | Entra in chroot e costruisce il sistema LFS finale (Cap. 7-8) | 3-6 ore |
| configure-system | Crea i file di configurazione del sistema (Cap. 9) | 10-20 min |
| build-kernel | Compila il kernel Linux | 20-60 min |
| package-image | Crea immagine disco bootabile con GRUB2 | 15-30 min |
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