Product SiteDocumentation Site

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 è affidabile solo se le macchine non sono state 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 e gestire molte immagini differenti (un'immagine amd64 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… Fortunatamente, 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 questa soluzione, 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 illustrerà solo una panoramica approssimativa di FAI e si tralascerà del tutto SystemImager (che non è più in Debian, ma è disponibile come pacchetto di terze parti), per focalizzarsi maggiormente 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/ presente in /etc/fai/nfsroot.conf 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 file system 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 sua 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) 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 (non sono supportati: HTTPS, FTPS, SFTP, ecc.).
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 (il nome del modello);
  • 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.
Preconfigurare un valore in un file di preconfigurazione istruisce automaticamente l'installatore Debian a non porre questa domanda. Questo succede perché caricare il file di preconfigurazione non imposta soltanto il(i) valore(i) dato(i), ma imposta ogni finestra di dialogo come "vista" dall'utente. È quindi possibile preimpostare il valore di una domanda, ma comunque presentare la finestra di dialogo all'utente resettando il flag "visto". Fare attenzione che l'ordine è importante in questo caso e che il valore deve essere preimpostato prima di impostare la finestra di dialogo a "non vista", come mostrato nel seguente esempio:
d-i netcfg/hostname string worker
d-i netcfg/hostname seen false

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 Guida all'installazione per i dettagli.
12.3.2.3.2. Preparare una chiavetta USB avviabile
Una volta preparata una chiavetta USB avviabile (vedere Sezione 4.1.2, «Avviare da una chiavetta USB»), sono necessarie alcune operazioni aggiuntive. Supponendo che il suo contenuto sia disponibili in /media/usbdisk/, copiate il file preseed in /media/usbdisk/preseed.cfg.
Se si sta utilizzando un'immagine ISO ibrida per creare la chiavetta USB avviabile, allora bisogna modificare /media/usbdisk/boot/grub/grub.cfg (per la schermata di avvio EFI):

Esempio 12.2. file boot/grub/grub.cfg e parametri di preconfigurazione

menuentry --hotkey=i 'Install' {
    set background_color=black
    linux    /install.amd/vmlinuz preseed/file=/cdrom/preseed.cfg locale=en_US.UTF-8 keymap=us language=us country=US vga=788 --- quiet 
    initrd   /install.amd/initrd.gz
}
E si deve modificare /media/usbdisk/isolinux/isolinux.cfg (per l'avvio da BIOS) o uno dei file che utilizza - ad esempio /media/usbdisk/isolinux/txt.cfg - per aggiungere i parametri di avvio richiesti:

Esempio 12.3. file isolinux/txt.cfg e parametri di preconfigurazione

label install
        menu label ^Install
        kernel [...]
        append preseed/file=/cdrom/preseed.cfg locale=en_US.UTF-8 keymap=us language=us country=US vga=788 initrd=/install.amd/initrd.gz --- quiet
Se si è utilizzata l'immagine del programma di installazione hd-media per una chiavetta USB personalizzata, modificare /media/usbdisk/syslinux.cfg e aggiungere i parametri di avvio richiesti come mostrato nel seguente esempio:

Esempio 12.4. 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 l'esatto contenuto del CD-ROM, quindi convertita in un file ISO con uno strumento come genisoimage, mkisofs o xorriso. La directory dell'immagine viene completata dopo il passaggio make image-trees di debian-cd. A quel punto, si inserisce il file di preconfigurazione 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 bootloader ed il suo file di configurazione dev'essere adattato partendo da quello generato da debian-cd, per poter inserire i parametri di avvio richiesti (i file specifici sono $TDIR/$CODENAME/CD1/isolinux/isolinux.cfg e $TDIR/$CODENAME/CD1/boot/grub/grub.cfg come mostrato sopra). Quindi si può riprendere il "normale" processo generando 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.
Lo scopo di questo strumento è 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. Questo segue la filosofia del "sistema operativo universale", visto che chiunque può adattarlo ai propri bisogni.

12.3.3.1. Creare profili

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 parametri 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-11-amd64-CD-1.iso.