12.3. Installazione automatica
Gli amministratori della Falcot Corp, come molti amministratori di grandi servizi IT, hanno bisogno di strumenti per installare (o reinstallare) rapidamente e se possibile automaticamente le loro nuove macchine.
Questi requisiti possono essere soddisfatti da una vasta gamma di soluzioni. Da un lato, strumenti generici come SystemImager gestiscono il compito creando un'immagine basata su una macchina modello, quindi allestiscono quell'immagine sui sistemi destinazione; dall'altro lato dello spettro, l'installatore standard di Debian può essere preimpostato con un file di configurazione che dà le risposte alle domande poste durante il processo di installazione. A metà strada, uno strumento ibrido come FAI (Fully Automatic Installer) installa le macchine usando il sistema di pacchettizzazione, ma usa anche la propria infrastruttura per compiti più specifici su allestimenti di massa (come avviare, partizionare, configurare e così via).
Ciascuna di queste soluzioni ha i suoi pro e contro: SystemImager funziona indipendentemente da qualunque particolare sistema di pacchettizzazione, il che gli permette di gestire grandi gruppi di macchine che usano più distribuzioni distinte di Linux. Inoltre include un sistema di aggiornamento che non richiede di reinstallare, ma questo sistema di aggiornamento può essere affidabile solo se le macchine non sono modificate in modo indipendente; in altre parole, l'utente non deve aggiornare o installare alcun software da solo. In modo simile, gli aggiornamenti di sicurezza non devono essere automatizzati, perché devono passare dall'immagine centralizzata di riferimento mantenuta da SystemImager. Questa soluzione richiede inoltre che le macchine destinazione siano omogenee, altrimenti si dovrebbero mantenere molte immagini differenti (un'immagine i386 non sarebbe adatta su una macchina powerpc e così via).
D'altro canto, un'installazione automatica usando debian-installer può adattarsi alle specifiche di ciascuna macchina: l'installatore preleverà il kernel e i pacchetti software appropriati dai relativi archivi, rileverà l'hardware disponibile, partizionerà l'intero disco fisso per sfruttare tutto lo spazio disponibile, installerà il sistema Debian corrispondente, e imposterà un bootloader appropriato. Tuttavia, l'installatore standard installerà solo versioni standard di Debian, con il sistema base e un insieme di "task" preselezionati; questo impedisce di installare un sistema particolare con applicazioni non pacchettizzate. Per soddisfare questa esigenza particolare è necessario personalizzare l'installatore… Fortunatamante, l'installatore è molto modulare ed esistono strumenti per automatizzare la maggior parte del lavoro richiesto per questa personalizzazione, il più importante dei quali è simple-CDD (CDD è un acronimo di Custom Debian Derivatives). Anche la soluzione simple-CDD, tuttavia, gestisce solo le installazioni iniziali; ciò di solito non è un problema dal momento che gli strumenti APT permettono in seguito una efficiente distribuzione degli aggiornamenti.
Si illustra solo una rapida panoramica di FAI e si tralascia del tutto SystemImager (che non è più in Debian), per focalizzarsi più intensamente su debian-installer e simple-CDD, che sono più interessanti in un contesto unicamente Debian.
12.3.1. Fully Automatic Installer (FAI)
Fully Automatic Installer è probabilmente il più vecchio sistema di allestimento automatico per Debian, il che spiega il suo status di punto di riferimento; ma la sua natura molto flessibile compensa appena la complessità che esso comporta.
FAI richiede un sistema server per memorizzare le informazioni sull'allestimento e permettere alle macchine destinazione di avviarsi dalla rete. Questo server richiede il pacchetto fai-server (o fai-quickstart, che fornisce anch'esso gli elementi richiesti per una configurazione standard).
FAI usa un approccio specifico per definire i vari profili installabili. Invece di duplicare semplicemente un'installazione di riferimento, FAI è un installatore completo di tutto punto, interamente configurabile tramite un insieme di file e script memorizzati sul server; la posizione predefinita /srv/fai/config/
non è creata automaticamente, quindi l'amministratore deve crearla insieme con i relativi file. Il più delle volte questi file saranno personalizzati a partire dai file di esempio disponibili nella documentazione del pacchetto fai-doc, più in particolare la directory /usr/share/doc/fai-doc/examples/simple/
.
Una volta definiti i profili, il comando fai-setup
genera gli elementi richiesti per avviare un'installazione FAI; questo vuol dire perlopiù preparare o aggiornare un sistema minimale (NFS-root) usato durante l'installazione. Un'alternativa è generare un CD di avvio dedicato con fai-cd
.
La creazione di tutti questi file di configurazione richiede una certa comprensione di come funziona FAI. Un tipico processo di installazione è composto dai seguenti passi:
prelevare un kernel dalla rete e avviarlo;
montare il filesystem di root da NFS;
eseguire /usr/sbin/fai
, che controlla il resto del processo (i passi successivi sono quindi iniziati da questo script);
copiare lo spazio di configurazione dal server su /fai/
;
eseguire fai-class
. Gli script /fai/class/[0-9][0-9]*
sono eseguiti in successione e restituiscono nomi di «classi» che si applicano alla macchina che viene installata; questa informazione servirà come base per i passi successivi. Ciò permette una certa flessibilità nel definire i servizi da installare e configurare.
prelevare un certo numero di variabili di configurazione, a seconda delle relative classi;
partizionare i dischi e formattare le partizioni, in base alle informazioni fornite in /fai/disk_config/classe
;
montare le suddette partizioni;
installare il sistema di base;
preimpostare il database di Debconf con fai-debconf
;
prelevare la lista dei pacchetti disponibili per APT;
installare i pacchetti elencati in /fai/package_config/classe
;
eseguire gli script di post-configurazione, /fai/scripts/classe/[0-9][0-9]*
;
registrare i log di installazione, smontare le partizioni e riavviare.
12.3.2. Preimpostare Debian-Installer
A conti fatti, il miglior strumento per installare i sistemi Debian dovrebbe logicamente essere l'installatore ufficiale Debian. Per questo, fin dalla nascita, debian-installer è stato progettato per un uso automatizzato, sfruttando l'infrastruttura fornita da debconf. Quest'ultimo permette da un lato di ridurre il numero delle domande poste (le domande nascoste useranno la risposta predefinita fornita) e dall'altro di fornire le risposte predefinite separatamente, cosicché l'installazione possa essere non interattiva. Quest'ultima funzionalità è nota come preimpostazione.
12.3.2.1. Usare un file di preimpostazione
Ci sono diversi posti da cui l'installatore può ottenere un file di preimpostazione:
nell'initrd usato per avviare la macchina; in questo caso, la preimpostazione avviene proprio all'inizio dell'installazione e si possono evitare tutte le domande. Il file deve solo essere chiamato preseed.cfg
e memorizzato nella root dell'initrd.
sul supporto di avvio (CD o chiave USB); la preimpostazione in questo caso avviene appena il supporto viene montato, ossia subito dopo le domande su lingua e impostazione di tastiera. Si può usare il parametro di avvio preseed/file
per indicare la posizione del file di preimpostazione (per esempio, /cdrom/preseed.cfg
quando l'installazione viene fatta da CD-ROM o /hd-media/preseed.cfg
nel caso di una chiave USB).
dalla rete; la preconfigurazione in questo caso avviene solo dopo che la rete è (automaticamente) configurata; il parametro di avvio relativo è allora preseed/url=http://server/preseed.cfg
.
A prima vista, includere il file di preimpostazione nell'initrd sembra la soluzione più interessante; tuttavia, è raramente usata in pratica perché generare un initrd per l'installatore è piuttosto complesso. Le altre due soluzioni sono molto più comuni, soprattutto dal momento che i parametri di avvio forniscono un altro modo per preimpostare le risposte alle prime domande del processo di installazione. Il modo consueto di risparmiare la fatica di scrivere questi parametri di avvio a mano a ogni installazione è di salvarli nella configurazione di isolinux
(nel caso di un CD-ROM) or syslinux
(nel caso di una chiave USB).
12.3.2.2. Creare un file di preimpostazione
Un file di preimpostazione è un file di testo semplice in cui ogni riga contiene la risposta a una domanda di Debconf. Una linea è divisa in quattro campi separati da spazi vuoti (spazi o tabulazioni) come, ad esempio, d-i mirror/suite string stable
:
il primo campo è il «proprietario» della domanda; «d-i» viene usato per domande relative all'installatore, ma può anche essere il nome di un pacchetto per domande provenienti da pacchetti Debian;
il secondo campo è un identificatore per la domanda;
terzo, il tipo di domanda;
il quarto e ultimo campo contiene il valore della risposta. Notare che deve essere separato dal terzo campo con uno spazio singolo, se vi sono più di uno, i seguenti spazi sono considerati parte del valore.
Il modo più semplice per scrivere un file di preimpostazione è di installare un sistema a mano. Quindi debconf-get-selections --installer
fornirà le risposte riguardanti l'installatore. Le risposte riguardo altri pacchetti si possono ottenere con debconf-get-selections
. Tuttavia, una soluzione più pulita è di scrivere il file di preimpostazione a mano, a partire da un esempio e dalla documentazione di riferimento: con questo approccio, si possono preimpostare solo le domande a cui bisogna modificare le risposte predefinite; il parametro priority=critical
dirà a Debconf di porre solo domande critiche e usare la risposta predefinita per le altre.
12.3.2.3. Creare un supporto di avvio personalizzato
Sapere dove memorizzare il file di preimpostazione è cosa buona e giusta, ma la posizione non è tutto; in un modo o nell'altro, bisogna alterare il supporto di avvio dell'installazione per cambiare i parametri di avvio e aggiungere il file di preimpostazione.
12.3.2.3.1. Avviare dalla rete
Quando un computer è avviato dalla rete, il server che manda gli elementi di inizializzazione definisce anche i parametri di avvio. Pertanto, la modifica deve essere fatta nella configurazione di PXE per l'avvio del server; più specificamente, nel suo file di configurazione
/tftpboot/pxelinux.cfg/default
. Impostare l'avvio dalla rete è un prerequisito; vedere la Duida all'installazione per i dettagli.
12.3.2.3.2. Preparare una chiave USB avviabile
Esempio 12.2. file syslinux.cfg e parametri di preimpostazione
default vmlinuz
append preseed/file=/hd-media/preseed.cfg locale=en_US.UTF-8 keymap=us language=us country=US vga=788 initrd=initrd.gz --
12.3.2.3.3. Creare un'immagine CD-ROM
Una chiave USB è un supporto leggibile e scrivibile, quindi è stato facile aggiungervi un file e cambiare alcuni parametri. Nel caso di un CD-ROM, l'operazione è più complessa, dal momento che si deve rigenerare un'immagine ISO completa. Questo compito è gestito da debian-cd, ma questo strumento è piuttosto scomodo da usare: ha bisogno di un mirror locale e richiede una comprensione di tutte le opzioni fornite da /usr/share/debian-cd/CONF.sh
; anche così, bisogna invocare make
più volte. Pertanto si raccomanda vivamente di leggere /usr/share/debian-cd/README
.
Detto questo, debian-cd opera sempre in un modo simile: viene generata una directory "immagine" con gli esatti contenuti del CD-ROM, quindi convertita in un file ISO con uno strumento come genisoimage
, mkisofs
o xorriso
. La directory immagine viene finalizzata nel passo del cd di Debianmake image-trees
. A quel punto, si inserisce il file di preimpostazione nella directory appropriata (di solito $TDIR/$CODENAME/CD1/
, dove $TDIR è uno dei parametri definiti dal file di configurazione CONF.sh
). Il CD-ROM usa isolinux
come suo bootloader, e il suo file di configurazione deve essere adattato a partire da ciò che debian-cd ha generato, per poter inserire i parametri di avvio richiesti (il file specifico è $TDIR/$CODENAME/boot1/isolinux/isolinux.cfg
). Quindi si può riprendere il "normale" processo e si può generare l'immagine ISO con make image CD=1
(o make images
se si generano più CD-ROM).
12.3.3. Simple-CDD: la soluzione completa
Usare semplicemente un file di preimpostazione non basta per soddisfare tutti i requisiti che possono verificarsi per allestimenti su larga scala. Anche se è possibile eseguire alcuni script alla fine del normale processo di installazione, la selezione dell'insieme di pacchetti da installare non è ancora molto flessibile (fondamentalmente si possono scegliere solo «task»); cosa più importante, ciò permette di installare solo pacchetti Debian ufficiali e preclude quelli generati localmente.
D'altro canto, debian-cd è in grado di integrare pacchetti esterni e debian-installer può essere esteso inserendo nuovi passi nel processo di installazione. Combinando queste capacità, dovrebbe essere possibile creare un installatore personalizzato che soddisfi ogni necessità e sia perfino in grado di configurare alcuni servizi dopo aver spacchettato i pacchetti richiesti. Per fortuna questa non è solo un'ipotesi, dal momento che è proprio ciò che fa Simple-CDD (nel pacchetto simple-cdd).
Lo scopo di Simple-CDD è di consentire a chiunque di creare facilmente una distribuzione derivata da Debian, scegliendo un sottoinsieme dei pacchetti disponibili, preconfigurandoli con Debconf, aggiungendo software specifico ed eseguendo script personalizzati alla fine del processo di installazione. Ciò si accorda con la filosofia del «sistema operativo universale», visto che chiunque può adattarlo ai propri bisogni.
Simple-CDD definisce «profili» che corrispondono al concetto di «classi» in FAI e una macchina può avere diversi profili (determinati al momento dell'installazione). Un profilo è definito da un insieme di file profiles/profilo.*
:
il file .description
contiene una descrizione di una riga del profilo;
il file .packages
elenca i pacchetti che saranno automaticamente installati se il profilo viene scelto;
il file .downloads
elenca i pacchetti che verranno memorizzati sul supporto di installazione, ma non necessariamente installati;
il file .preseed
contiene informazioni di preimpostazione per le domande di Debconf (per l'installatore e/o per i pacchetti);
il file .postinst
contiene uno script che sarà eseguito al termine del processo di installazione;
infine, il file .conf
permette di cambiare alcuni semplici parametri di Simple-CDD in base ai profili da includere in un'immagine.
Il profilo default
ha un ruolo particolare, dal momento che è sempre selezionato; contiene il minimo indispensabile richiesto perché Simple-CDD funzioni. L'unica cosa personalizzata di solito in questo profilo è il parametro di preimpostazione simple-cdd/profiles
: questo permette di evitare la domanda, introdotta da Simple-CDD, su quali profili installare.
Notare inoltre che i comandi dovranno essere invocati dalla directory madre della directory profiles
.
12.3.3.2. Configurare e usare build-simple-cdd
Simple-CDD richiede molti parametri per operare appieno. Questi verranno perlopiù riuniti in un file di configurazione, a cui si può far puntare build-simple-cdd
con l'opzione --conf
, ma possono anche essere specificati tramite parametri dedicati dati a build-simple-cdd
. Ecco una panoramica di come si comporta questo comando e di come i suoi parametri vengono usati:
il parametro profiles
elenca i profili che saranno inclusi nell'immagine CD-ROM generata;
in base alla lista dei pacchetti richiesti, Simple-CDD scarica i file appropriati dal server menzionato in server
e li riunisce in un mirror parziale (che in seguito sarà dato a debian-cd);
i pacchetti personalizzati menzionati in local_packages
sono anch'essi integrati in questo mirror locale;
quindi viene eseguito debian cd (da una posizione predefinita che può essere configurata con la variabile debian_cd_dir
), con la lista dei pacchetti da integrare;
una volta che debian-cd ha preparato la sua directory, simple-CDD applica alcuni cambiamenti a questa directory:
i file contenenti i profili sono aggiunti in una sottodirectory simple-cdd
(che sarà inclusa nel CD-ROM);
altri file elencati nel parametro all_extras
sono aggiunti anch'essi;
i parametri di avvio sono regolati per abilitare la preimpostazione. Si possono evitare le domande su lingua e nazione se l'informazione richiesta è memorizzata nelle variabili language
e country
.
quindi debian-cd genera l'immagine ISO finale.
12.3.3.3. Generare un'immagine ISO
Una volta scritto un file di configurazione e definiti i profili, il passo rimanente è invocare build-simple-cdd --conf simple-cdd.conf
. Dopo pochi minuti, si ottiene l'immagine richiesta in images/debian-8.0-amd64-CD-1.iso
.