Alpine Linux: il sistema operativo universale

30/07/2025

Non solo container

Eviterò di proposito tecnicismi eccessivi, anche per la terminologia, in questa parte. Alcuni concetti saranno approfonditi nella sezione relativa alla "pratica".

Come è possibile che una distribuzione esotica come Alpine si possa considerare universale? Non è pensata esclusivamente per la containerizzazione? E perché mai paragonarla a Debian?
A discapito della sua reputazione, invece, si tratta di una piattaforma perfetta non solo per i classici container ultra minimali, ma potenzialmente adatta pressocché per ogni caso d'uso, dal daily driver su desktop al server, fino alla rinascita di macchine particolarmente poco prestanti.

Alpine Linux, distribuzione indipendente di origine norvegese, è disponibile per svariate architetture, comprese molte a 32 bit (anche la classica "x86", già non più supportata da diverse distro), alcune a me ignote: cosa dovrebbe essere la "loongarch64"?.
Anche le modalità di installazione sono decisamente variegate, sia per la quantità di "ISO" ed archivi disponibili al download, che per le varianti con cui si può procedere al setup (spoiler: non solo su disco o "microSD").

Il ciclo di rilascio è fondamentalmente di tipo point release, ma può essere mutato in rolling release modificando le sorgenti del package manager (similarmente a quanto accade con sid su Debian). Ci sono inoltre fino a 3 livelli di repository, a seconda di quanto i pacchetti siano stati testati.
Durante l'installazione e la gestione del sistema, l'utente può scegliere se affidarsi a procedure automatiche od optare per un controllo manuale avanzato.

Piccola, semplice e sicura

Sono queste, non a caso, le parole chiave usate per definire la distribuzione nella sezione About del sito ufficiale di Alpine Linux.

A parte le dimensioni imbarazzanti del filesystem per l'impiego nei container (meno di 10 MB), anche un'installazione completa richiede di base circa 130 MB.
Un tale efficienza dal punto di vista dello spazio occupato su disco è dovuta anche all'uso di un sistema di init, librerie e tool "insoliti". Nessun problema finché si rimane all'interno dei repository predefiniti, ma potrebbero sorgere incompatibilità se si decide di compilare o reperire software da altre fonti.
Interessante come i pacchetti siano modulari, con la possibilità di selezionare solo quelli effettivamente necessari, per evitare il superfluo.

La sicurezza è uno dei capisaldi di Alpine. Oltre all'uso del kernel Linux LTS di default, sono implementate delle misure aggiuntive per limitare la superficie di attacco dei file binari.

All you need is wiki

Decisamente più ridotta e dispersiva di quella di Arch Linux, la wiki di Alpine resta di alto livello.
A volte può sembrare superficiale o incompleta, è vero, ma solo perché pensata presumibilmente per un pubblico già avvezzo ad alcuni meccanismi. Nonostante ciò costituisce un importante punto di riferimento per le informazioni al suo interno, utili e spesso attuabili anche su altre distribuzioni.

Sempre sul sito ufficiale, non manca nemmeno una documentazione introduttiva, molto più semplice e formale, ma lontana dalla completezza e l'eleganza di quella vista - ad esempio - su Void Linux.

Proprio grazie alla wiki ho potuto documentarmi su una delle killer feature di Alpine Linux: gli "Alpine setup scripts".
Si tratta di scripts automatizzati (completamente o parzialmente) per l'installazione di pacchetti e la configurazione di svariati aspetti del sistema. Il più utile è sicuramente "setup-alpine".

Setup base

Pur essendo una procedura relativamente semplice, consiglio comunque un primo approccio in macchina virtuale, per prendere confidenza con paradigmi inusuali per chi viene dalle distribuzioni più comuni. Non aspettatevi interfacce grafiche.
Il primo step, come sempre, consiste nello scaricamento della ISO corretta dalla sezione Downloads del sito della distro (c'è una variante specifica proprio per essere virtualizzata), che andrà poi montata su un'unità della macchina virtuale per essere usata come periferica di boot.

Uno screenshot dello script setup-alpine
I primi passi di setup-alpine, in tutto il suo splendore

Dopo un breve caricamento, ci si dovrà loggare (utente: root, password non necessaria).
Siamo dentro; come ci viene suggerito, possiamo procedere subito con l'avvio dello script setup-alpine.
Seguiranno ora una serie di "domande", che serviranno per installare e configurare il sistema. L'interazione consiste nella digitazione della scelta seguita dal tasto invio.
In taluni casi sarà sufficiente premere solo "Enter" per confermare la selezione di default (indicata tra parentesi quadre): più facile a farsi che a dirsi.

Facciamo un riepilogo per un setup minimale in macchina virtuale: - Keymap: "it" due volte per la tastiera italiana.
- Hostname: a vostra scelta, si può lasciare invariato per mantenere "localhost".
- Interface:
- confermare la scheda di rete preselezionata - dhcp - senza ulteriori configurazioni manuali. - Root Password: doppio check e avviso in caso di password breve/debole.
- Timezone: "CET".
- Proxy: "none".
- APK mirror: "c" per abilitare il community repo, poi "1".
- User:
- "n" (a meno che non vogliate subito creare un utente non amministratore) - "openssh" come server SSH (o Dropbear per una soluzione più minimale) - "prohibit-password" per disabilitare il login remoto senza chiavi - nessuna chiave od url. - Disk & Install:
- un solo disco di cui digitare il nome (di solito "vda") - modalità classica "sys" - confermare con "y" la cancellazione del disco.

Releases e repository

La procedura di installazione soprastante ha il vantaggio di coniugare una semplicità quasi disarmante (a patto di conoscere alcuni concetti) ad un grado di configurazione medio/alto. In pochi minuti si può ottenere un ambiente privo di interfaccia grafica, ma piuttosto completo ed estremamente ottimizzato.

Quando si parla di repository community, però, è doveroso fare alcune precisazioni.
Come abbiamo accennato, ci sono due rami di rilascio: "stable" ed "edge".
Il ramo stable viene rilasciato ogni 6 mesi, e include i repository "main" e "community" (sempre diversi per ogni release). Le versioni stabili sono supportate ufficialmente per 2 anni per quanto concerne il loro repo main, ma solo per 6 mesi (ossia fino al rilascio successivo) per quello community.
Il ramo edge è a rilascio continuo, e oltre a main e community può giovare anche del repo "testing", tutti senza scadenze di supporto.

I repository si distinguono per il livello di stabilità.
Main include pacchetti ufficialmente testati e supportati, testing al contrario quelli che necessitano di test (perché troppo vecchi o troppo nuovi), mentre community si pone ad un livello intermedio, con software che arriva da testing ma non è ancora pronto per main. Vi ricorda qualcosa?
Solo i repository main sono quelli indispensabili, community e testing si possono considerare opzionali.

Nella sezione "APK Mirror" dello script di installazione, possiamo limitarci ad aggiungere solo il repository community al file "/etc/apk/repositories", oppure editarlo manualmente per un controllo avanzato. Se seguissimo la seconda strada, potremmo subito trasformare Alpine in una rolling-release in questo modo: http://dl-cdn.alpinelinux.org/alpine/edge/main
http://dl-cdn.alpinelinux.org/alpine/edge/community
http://dl-cdn.alpinelinux.org/alpine/edge/testing
Ogni aspetto del file può essere personalizzato granularmente, agendo sul protocollo, sui mirror e sui repository da abilitare.
Nel caso di una release stabile con la sola repo community aggiuntiva abilitata (l'equivalente di premere il tasto c durante lo script di installazione) avremo ad esempio: http://dl-cdn.alpinelinux.org/alpine/3.22/main
http://dl-cdn.alpinelinux.org/alpine/3.22/community

Modalità di installazione

Oltre ad un'installazione tradizionale in modalità "sys", Alpine può essere eseguita direttamente in RAM, con meccanismi per avere a disposizione uno spazio di archiviazione persistente. Si tratta delle modalità "Diskless" e "Data Disk", che per ora non approfondiremo nel dettaglio.
Tra gli usi più gettonati, quello di avere una chiavetta sempre pronta all'uso che copi il sistema operativo in RAM all'avvio. Prima di ogni spegnimento si dovrà eseguire un commit per sincronizzare le modifiche effettuate sulla pendrive. Interessanti comunque le analogie con distribuzioni immutabili, con il vantaggio delle prestazioni della RAM e lo sgravio del disco che ne deriva.

[user@dajelinux ~]$ dajelinux --per-approfondire

[user@dajelinux ~]$ dajelinux -wtf

Hai notato qualche errore?
Pensi che sia stato poco chiaro, magari dando per scontato un termine o un concetto che non riesci a capire?
Vuoi proporre un approccio differente all'argomento?
Contattami per feedback e chiarimenti, l'open source è anche questo!