Recensione: Alpine Linux è fatto per Docker

Alpine Linux è una distribuzione Linux minima, originariamente costruita con Gentoo, ma ora indipendente e self-hosting. Per alcuni aspetti Alpine Linux è concettualmente simile a NanoBSD, in quanto gli utenti tecnici possono iniziare con Alpine Linux per costruire un sistema Linux con ciò che è necessario per portare a termine la missione, e nient'altro.

Tipicamente visto incorporato in dispositivi o appliance, Alpine Linux ha ottenuto un grande impulso quando è stato selezionato per sostituire Ubuntu come immagine di base per Docker. Sicurezza, affidabilità e solide pratiche di sviluppo sono state le ragioni principali.

Alpine Linux è diverso da qualsiasi distribuzione Linux che un tipico utente desktop Linux avrà incontrato. Cominciamo guardando la directory / bin, dove sono conservate le utilità di sistema: 

Notare che quasi tutti i binari sono collegamenti a / bin / busybox. Busybox è un insieme di utilità di sistema e utente comuni racchiuse in un unico binario per un avvio più rapido, requisiti di spazio inferiori e generalmente una migliore sicurezza, a costo di funzionalità ridotte. Molte delle opzioni utilizzate di rado per le utilità sono state rimosse, ma rimangono tutte le opzioni comunemente utilizzate.

Oltre a questo, Alpine utilizza musl libc, un'implementazione minima della libreria e delle estensioni C / POSIX standard, progettate per il collegamento statico e le applicazioni incorporate in tempo reale, evitando lo GNU-bloat di glibc. Il collegamento statico significa avvio più veloce, ma richiede più spazio, quindi è più adatto a sistemi più piccoli. Combinando tutti i binari di sistema in un unico eseguibile e collegandosi con musl, Alpine ottiene un set piccolo e veloce di binari di sistema, che è ciò che è richiesto in un sistema embedded.

Infine, c'è un focus sulla sicurezza. Il sistema include le patch del kernel Grsec / PaX, che forniscono una raccolta di funzionalità di sicurezza al kernel Linux, inclusa la protezione dello spazio degli indirizzi, l'auditing avanzato e l'accesso basato sui ruoli e il controllo dei processi. Con le tipiche distribuzioni Linux, gli utenti dovrebbero compilare ed eseguire il proprio kernel per ottenere queste patch, cosa che probabilmente eviterebbero anche gli utenti più avanzati.

Installazione e configurazione di Alpine Linux

Ci sono molte cose insolite nell'installazione di Alpine Linux. Questo è per lo più radicato nella sua originaria destinazione d'uso nei sistemi embedded, come i router. In quanto tale, Alpine è progettato per l'avvio e l'esecuzione dalla RAM, sebbene siano disponibili opzioni ibride. In linea con questa origine, Alpine Linux utilizza extlinux, una variante di Syslinux, come bootloader. Syslinux non viene normalmente utilizzato per l'avvio di installazioni Linux complete perché Linux non è normalmente installato su file system FAT. Invece, Syslinux viene spesso utilizzato per dischi floppy di avvio o di ripristino, USB live e altri sistemi di avvio leggeri. Alpine utilizza parti del progetto Syslinux per consentire l'avvio da CD-ROM e utilizza extlinux per l'avvio da file system Linux o file system FAT per dispositivi USB. I file system FAT hanno alcune limitazioni, come la dimensione dei file e la lunghezza dei nomi dei file.

Alpine supporta tre modalità di installazione: diskless, "data" e "sys". In un'installazione dati, il sistema operativo viene caricato nella RAM da un supporto di sola lettura, ma monta partizioni di lettura / scrittura per memorizzare i dati. Questo potrebbe essere utilizzato, ad esempio, se un router basato su Alpine memorizzava i registri di intrusione o di accesso su un disco. Copiare i log nella RAM sarebbe uno spreco di una risorsa preziosa. La modalità senza disco è simile, ma la partizione di lettura / scrittura è solitamente più piccola e utilizzata per memorizzare i dettagli di configurazione del sistema operativo. Sys è una modalità di installazione tradizionale basata su disco.

Quando si installa in modalità senza disco o dati, il sistema Alpine Local Backup viene utilizzato per memorizzare i file di configurazione. Questo viene fatto con lbu (utilità di backup locale), che tiene traccia dei file che sono cambiati nella directory / etc e salva tali modifiche nei file .apkovl "overlay" (archivi tar-gzip). Con lbu, gli amministratori possono, ad esempio, confrontare, unire o ripristinare le configurazioni precedenti.

Ho iniziato tentando un'installazione senza disco perché volevo eseguire Alpine come era stato originariamente concepito, come sistema operativo per dispositivi. Purtroppo, ho riscontrato un bug di vecchia data (2015) in un'installazione VMware che non è stata riparata, né la documentazione è stata aggiornata. Sembra che l'immagine del floppy virtuale non venga montata al momento dell'avvio. Ciò significa che le modifiche alla configurazione vengono perse a ogni riavvio.

Alla fine ho fatto ricorso a un'installazione di sys, che è andata bene. La prima cosa da notare è che nulla , nemmeno SSH, è installato di default. Se si creano sistemi embedded, questa è probabilmente una buona cosa. I neofiti di Linux dovrebbero prepararsi per una curva di apprendimento ripida. Dopo aver letto qualcosa su Alpine Package Manager (APK), ho installato un set minimo di strumenti per iniziare: Sudo, SSH e lo strumento di gestione del sistema grafico basato sul web, ACF.

Amministrazione del sistema Alpine Linux

Mentre la maggior parte dei sistemi Linux dispone di uno strumento grafico di amministrazione del sistema, Alpine utilizza gli script della shell per l'installazione. Ho usato uno script ombrello, setup-alpine, per configurare tutte le basi come rete, nome host, dischi, fuso orario, ecc. Sebbene setup-alpine sia sufficiente per ottenere un sistema funzionante, qualsiasi cosa più avanzata richiederà la modifica dei file di configurazione del sistema direttamente e utilizzando lbuper salvarli su un supporto scrivibile. Nota che setup-alpine è anche il programma di installazione, quindi può essere fornito un nome del disco e scriverà il sistema operativo sul supporto, richiedendo una partizione scrivibile per le directory / etc e / var.

Lo sviluppo e la distribuzione del software è diverso anche su Alpine. In parte ciò è dovuto al suo uso previsto nei sistemi embedded, o come immagine di base per i contenitori, ma anche perché gli autori ritenevano che i sistemi di gestione dei pacchetti esistenti non funzionassero bene in un sistema solitamente eseguito dalla RAM. Alpine Package Manager (APK) soddisfa tutti questi requisiti, con bassi costi generali e tempi di installazione rapidi. Tuttavia, vorrei che fossero stati sovrapposti a un'API più standard. Abbiamo già abbastanza API di gestione dei pacchetti e c'è qualcosa da dire per la compatibilità. L'APK viene utilizzato per configurare contenitori o sistemi autonomi.

La consegna dei pacchetti avviene tramite un albero dei port che mi ricorda la collezione dei port di FreeBSD. Tuttavia, invece di essere guidato da un sofisticato sistema di makefile, utilizza un'altra invenzione di Alpine Linux, abuild. Il repository aports rispecchia l'albero dei port in tutto il mondo ed apk add …è decisamente molto più veloce di altri sistemi di gestione dei pacchetti.

L'altra cosa da notare su Alpine è l'uso di OpenRC per il sistema init. Uno di una dozzina di sistemi init per Linux ora, OpenRC è iniziato in Gentoo (come ha fatto Alpine). Non manca nulla dal punto di vista funzionale, ma preparati ad apprendere un nuovo sistema di livelli di esecuzione e comandi di inizializzazione.

Fortunatamente gran parte dell'amministrazione quotidiana può essere eseguita tramite Alpine Configuration Framework (ACF) basato sul web, sebbene lavorare con ACF non sia stato del tutto fluido. Ad esempio, non ha rilevato l'utente normale che ho aggiunto per me stesso tramite adduser. La GUI ACF assomiglia molto all'interfaccia web del tuo tipico router basato su Linux:

ACF richiede anche un po 'di ricerca per trovare e installare. Un utente occasionale non avrebbe scoperto il sistema a meno che non fosse attento, e anche in questo caso non ci sono istruzioni per l'installazione.

Archiviazione e rete di Alpine Linux

Alpine supporta diverse opzioni di archiviazione oltre alla sola RAM, con la configurazione memorizzata su un supporto e schede flash. Tuttavia, la documentazione, o meglio la sua mancanza, ha reso difficile la comprensione dell'archiviazione. Ad esempio, volevo masterizzare una ISO personalizzata con un'applicazione che non è disponibile in aports, probabilmente un evento abbastanza comune. La documentazione per farlo era un vicolo cieco:

Quattro anni e mezzo sembrano un lungo periodo di tempo da aspettare. Per essere onesti, lo storage non è mai stato una parte importante dell'equazione alpina, con la sua attenzione alle applicazioni incorporate, quindi non sorprende che questa dovrebbe essere un'area debole. Sono in corso lavori nella maggior parte delle aree previste da una distribuzione Linux, come LVM, iSCSI e RAID, ma preparatevi a dedicare un bel po 'di tempo cercando di dare un senso alla documentazione , o leggendo il codice sorgente, per capirlo tutto fuori. 

Il networking con Alpine è una storia molto diversa dallo storage. La documentazione per il networking è scritta meglio e più completa e spesso include le migliori pratiche per la creazione di reti efficienti. IP4, IP6, bonding, VLAN, bridging e praticamente qualsiasi configurazione di rete desiderata è supportata. Troverai anche le istruzioni per configurare le connessioni Internet via satellite!

La configurazione può essere eseguita con strumenti tradizionali come ifconfig e route, o con alcuni pacchetti più recenti come iproute2. Degno di menzione è un interessante sottoprogetto chiamato Alpine Wall, uno strumento di configurazione del firewall Linux. È supportato anche il PPP su linee seriali, il che è piuttosto sorprendente al giorno d'oggi.

Ho imparato molto leggendo questa documentazione, scoprendo diversi suggerimenti di configurazione che non conoscevo prima, così come alcune utilità di rete finora sconosciute. Questa parte della documentazione merita di essere aggiunta ai segnalibri come riferimento rapido per le procedure di rete, anche se non si utilizza Alpine Linux.

Aggiornamenti e downgrade di Alpine Linux

L'ingegneria di rilascio di Alpine Linux non è così rigorosa o formale come sistemi maturi come FreeBSD, ma copre le basi. Ed è adatto ai casi d'uso primari di Alpine per l'hosting e le appliance Docker.

Ci sono essenzialmente due flussi, edge e stable. Edge è un ramo di rilascio progressivo, un'istantanea di dove si verifica lo sviluppo ogni sei mesi. I pacchetti passano attraverso edge e, quando sono pronti, vengono promossi a stable / community dove sono supportati per sei mesi dalla community. I pacchetti che sopravvivono e continuano a svilupparsi alla fine arrivano a stable / main, dove sono supportati per due anni.

È necessario prestare un po 'di attenzione quando si aggiorna dal ramo 2.xa 3.x a causa del cambiamento nelle librerie C (da uClibc a musl). Se non stai attento, il sistema potrebbe non riuscire a metà di un aggiornamento. L'aggiornamento dei pacchetti lungo la linea 3.x è più semplice, sebbene sia ancora un processo manuale guidato per la maggior parte da script. Il trucco per comprendere il processo di aggiornamento è ottenere il repository APK corretto (community, edge o main), svuotare la cache e quindi lasciare che APK aggiorni tutti i pacchetti con apk upgrade.

Anche l'aggiornamento del kernel è semplice e utilizza lo script avviabile da installazione per scrivere il nuovo kernel e busybox sul supporto di avvio.

Nel complesso, non ci sono troppe parti mobili in un sistema alpino, quindi una volta compresa l'architettura, capire l'aggiornamento non è difficile.

Alpine Linux a colpo d'occhio

Alpine Linux è un'ottima scelta per qualsiasi sistema orientato alla rete e con un unico scopo. Il rilevamento delle intrusioni, il monitoraggio della rete e la telefonia IP sono esempi di buone applicazioni per Alpine Linux. Ed è una scelta naturale per i contenitori. Le applicazioni che fanno un uso intenso del disco dovrebbero essere testate attentamente. Gli utenti dovrebbero prepararsi a dedicare un po 'di tempo a farsi coinvolgere nella comunità e rimboccarsi le maniche per sporcarsi le mani. Saranno richieste prove ed errori.