12.3. Instal·lació automatitzada
Els administradors de Falcot Corp, com molts altres administradors de grans serveis de TI, necessiten eines per instal·lar (o reinstal·lar) ràpidament, i automàticament si és possible, les seves noves màquines.
Aquests requisits es poden complir amb una àmplia gamma de solucions. D'una banda, eines genèriques com SystemImager ho gestionen mitjançant la creació d'una imatge basada en una màquina de plantilles, llavors es desplega aquesta imatge als sistemes de destinació; a l'altre extrem de l'espectre, l'instal·lador estàndard de Debian es pot «preseed» (“pre-sembrar”) amb un fitxer de configuració que dona les respostes a les preguntes plantejades durant el procés d'instal·lació. A mig camí, una eina híbrida com FAI («Fully Automatic Installer» o “instal·lador completament automatitzat”) instal·la màquines utilitzant el sistema de paquets, però també utilitza la seva pròpia infraestructura per a tasques que són més específiques per a desplegaments massius (com ara inici, particionat, configuració, etc.).
Each of these solutions has its pros and cons: SystemImager works independently from any particular packaging system, which allows it to manage large sets of machines using several distinct Linux distributions. It also includes an update system that doesn't require a reinstallation, but this update system can only be reliable if the machines are not modified independently; in other words, the user must not update any software on their own, or install any other software. Similarly, security updates must not be automated, because they have to go through the centralized reference image maintained by SystemImager. This solution also requires the target machines to be homogeneous, otherwise many different images would have to be kept and managed (an amd64 image won't fit on a powerpc machine, and so on).
On the other hand, an automated installation using debian-installer can adapt to the specifics of each machine: the installer will fetch the appropriate kernel and software packages from the relevant repositories, detect available hardware, partition the whole hard disk to take advantage of all the available space, install the corresponding Debian system, and set up an appropriate bootloader. However, the standard installer will only install standard Debian versions, with the base system and a set of pre-selected “tasks”; this precludes installing a particular system with non-packaged applications. Fulfilling this particular need requires customizing the installer… Fortunately, the installer is very modular, and there are tools to automate most of the work required for this customization, most importantly simple-cdd (CDD being an acronym for Custom Debian Derivative). Even this solution, however, only handles initial installations; this is usually not a problem since the APT tools allow efficient deployment of updates later on.
We will only give a rough overview of FAI, and skip SystemImager altogether (which is no longer in Debian, but available as a third-party package), in order to focus more intently on debian-installer and simple-cdd, which are more interesting in a Debian-only context.
12.3.1. Fully Automatic Installer (FAI)
Fully Automatic Installer o “instal·lador completament automatitzat” és probablement el sistema de desplegament automàtic més antic de Debian, fet que explica el seu estatus com a referència; però la seva naturalesa molt flexible només compensa la complexitat que implica.
FAI requereix un sistema de servidor per emmagatzemar la informació de desplegament i permetre que les màquines de destinació arrenquin de xarxa. Aquest servidor requereix el paquet fai-servidor (o fai-quickstart, que també porta els elements necessaris per a una configuració estàndard).
FAI uses a specific approach for defining the various installable profiles. Instead of simply duplicating a reference installation, FAI is a full-fledged installer, fully configurable via a set of files and scripts stored on the server; the default location /srv/fai/config/
according to /etc/fai/nfsroot.conf
is not automatically created, so the administrator needs to create it along with the relevant files. Most of the times, these files will be customized from the example files available in the documentation for the fai-doc package, more particularly the /usr/share/doc/fai-doc/examples/simple/
directory.
Once the profiles are defined, the fai-setup
command generates the elements required to start an FAI installation; this mostly means preparing or updating a minimal system (NFS-root) used during installation. An alternative is to generate a dedicated boot CD with fai-cd
.
La creació de tots aquests fitxers de configuració requereix una certa comprensió de la manera en què funciona FAI. Un procés d'instal·lació típic consisteix en els següents passos:
descarregar un nucli de la xarxa i arrencar-lo;
muntar el sistema de fitxers arrel des d'NFS;
executar /usr/sbin/fai
, que controla la resta del procés (els següents passos són iniciats per aquest script);
copiar l'espai de configuració des del servidor a /fai/
;
executar fai-class
. Els scripts /fai/class/[0-9][0-9]*
s'executen per ordre, i retornen noms de “classes” que s'apliquen a la màquina que s'està instal·lant; aquesta informació servirà com a base per als següents passos. Això permet una certa flexibilitat en la definició dels serveis per instal·lar i configurar.
recopilar una sèrie de variables de configuració, depenent de les classes rellevants;
particionar els discos i formatar les particions, basant-se en la informació proporcionada a /fai/disk_config/classe
;
muntar les citades particions;
instal·lar el sistema base;
“presembrar” la base de dades Debconf amb fai-debconf
;
obtenir la llista de paquets disponibles per APT;
instal·lació dels paquets llistats a /fai/package_config/classe
;
executar els scripts de postconfiguració, /fai/scripts/classe/[0-9][0-9]*
;
desar els registres de la instal·lació, desmuntar les particions i reiniciar.
12.3.2. Presembrar el Debian-Installer
At the end of the day, the best tool to install Debian systems should logically be the official Debian installer. This is why, right from its inception, debian-installer has been designed for automated use, taking advantage of the infrastructure provided by debconf. The latter allows, on the one hand, to reduce the number of questions asked (hidden questions will use the provided default answer), and on the other hand, to provide the default answers separately, so that installation can be non-interactive. This last feature is known as preseeding.
12.3.2.1. Ús d'un fitxer de presembrat
Hi ha diversos llocs d'on l'instal·lador pot obtenir un fitxer de presembrat:
a l'initrd usat per iniciar la màquina; en aquest cas, el presembrat es produeix just al principi de la instal·lació, i així totes les preguntes es poden evitar. El fitxer només s'ha de dir preseed.cfg
i ha d'estar emmagatzemat a l'arrel de l'initrd.
en el suport d'arrencada (CD o llapis USB); el presembrat es produeix tan aviat com el suport està muntat, fet que significa just després de les preguntes sobre el llenguatge i la disposició del teclat. El paràmetre d'arrencada preseed/file
es pot utilitzar per indicar la ubicació del fitxer de presembrat (per exemple, /cdrom/preseed.cfg
quan la instal·lació es fa des d'un CD-ROM, o /hd-media/preseed.cfg
en el cas de llapis USB).
from the network; preseeding then only happens after the network is (automatically) configured; the relevant boot parameter is then preseed/url=http://server/preseed.cfg
(HTTPS, FTPS, SFTP, etc. are not supported).
A primera vista, incloure el fitxer de presembrat a l'initrd sembla la solució més interessant; no obstant això, rarament s'utilitza a la pràctica, perquè generar un instal·lador initrd és bastant complex. Les altres dues solucions són molt més comunes, especialment perquè els paràmetres d'arrencada proporcionen una altra manera de presembrar les respostes a les primeres preguntes del procés d'instal·lació. La manera habitual d'estalviar-se la molèstia d'escriure aquests paràmetres d'arrencada a mà en cada instal·lació és desar-los a la configuració d'isolinux
(en el cas de CD-ROM) o syslinux
(llapis USB).
12.3.2.2. Creació d'un fitxer de presembrat
Un fitxer de presembrat és un fitxer de text pla, on cada línia conté la resposta a una pregunta de Debconf. Una línia es divideix entre quatre camps separats per espais en blanc (espais o tabuladors), com a, per exemple, d-i mirror/suite string stable
:
el primer camp és el "propietari" de la pregunta; "d-i" s'utilitza per a les preguntes rellevants per a l'instal·lador, però també pot ser un nom de paquet per a les preguntes procedents dels paquets de Debian;
the second field is an identifier for the question (the template name);
tercer, el tipus de pregunta;
el quart i l'últim camp conté el valor de la resposta. Cal tenir en compte que s'ha de separar del tercer camp amb un sol espai; si hi ha més d'un, els següents caràcters d'espai es consideren part del valor.
La manera més simple d'escriure un fitxer de presembrat és instal·lar un sistema a mà. Llavors debconf-get-selections --installer
proporcionarà les respostes relatives a l'instal·lador. Es poden obtenir respostes sobre altres paquets amb debconf-get-selections
. No obstant això, una solució més neta és escriure el fitxer de presembrat a mà, començant per un exemple i la documentació de referència: amb aquest enfocament, només es poden plantejar preguntes on la resposta per defecte ha de ser canviada; utilitzant el paràmetre d'arrencada priority=critical
s'indica a Debconf de fer només preguntes crítiques, i utilitzar la resposta per defecte per a la resta.
Pre-setting a value in a preseed file automatically instructs the Debian installer to not ask that question. This happens, because loading the preseed file does not just set the given value(s), but also marks each of the affected dialogs as “seen“ by the user. Thus it is possible to pre-set a question's value and still present the dialog to the user by resetting the “seen“ flag. Beware that order in this case matters and that the value has to be preseeded before setting the dialog to “unseen“ as shown in the following example:
d-i netcfg/hostname string worker
d-i netcfg/hostname seen false
12.3.2.3. Creació un suport d'arrencada personalitzat
Saber on emmagatzemar el fitxer de presembrat està molt bé, però la ubicació no ho és tot: cal, d'una manera o una altra, alterar el mitjà d'arrencada d'instal·lació per canviar els paràmetres d'arrencada i afegir el fitxer de presembrat.
12.3.2.3.1. Arrencada des de la xarxa
Quan un ordinador s'inicia des de la xarxa, el servidor que envia els elements d'iniciació també defineix els paràmetres d'arrencada. Per tant, el canvi s'ha de fer en la configuració de PXE del servidor d'arrencada; més específicament, al fitxer de configuració
/tftpboot/pxelinux.cfg/default
. La configuració de l'arrencada de xarxa és un requisit previ; vegeu la Guia d'Instal·lació per als detalls.
12.3.2.3.2. Preparació d'un llapis USB d'arrencada
Once a bootable key has been prepared (see
Secció 4.1.2, «Arrencada des d'un llapis USB»), a few extra operations are needed. Assuming the key contents are available under
/media/usbdisk/
, copy the preseed file to
/media/usbdisk/preseed.cfg
.
If you have been using a hybrid ISO image to create the bootable USB stick, then you have to edit /media/usbdisk/boot/grub/grub.cfg
(for the EFI boot screen):
Exemple 12.2. boot/grub/grub.cfg file and preseeding parameters
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
}
And you have to edit /media/usbdisk/isolinux/isolinux.cfg
(for BIOS boot) or one of the files it utilizes - e.g. /media/usbdisk/isolinux/txt.cfg
- to add required boot parameters:
Exemple 12.3. isolinux/txt.cfg file and preseeding parameters
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
If you have been using the hd-media
installer image for a custom USB stick, edit /media/usbdisk/syslinux.cfg
and add the required boot parameters as shown in the example below:
Exemple 12.4. fitxer syslinux.cfg i paràmetres de presembrat
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. Creació d'una imatge de CD-ROM
Un llapis USB és un mitjà de lectura-escriptura, per la qual cosa és fàcil afegir un fitxer i canviar alguns paràmetres. En el cas d'un CD-ROM l'operació és més complexa ja que hem de regenerar una imatge ISO completa. Aquesta tasca és resolta per debian-cd, però aquesta eina és força difícil d'utilitzar: necessita un mirall local, i requereix una comprensió de totes les opcions proporcionades per /usr/share/debian-cd/CONF.sh
; fins i tot llavors, make
ha de ser invocat diverses vegades. /usr/share/debian-cd/README
és per tant una lectura molt recomanada.
Having said that, debian-cd always operates in a similar way: an “image” directory with the exact contents of the CD-ROM is generated, then converted to an ISO file with a tool such as genisoimage
, mkisofs
or xorriso
. The image directory is finalized after debian-cd's make image-trees
step. At that point, we insert the preseed file into the appropriate directory (usually $TDIR/$CODENAME/CD1/
, $TDIR and $CODENAME being parameters defined by the CONF.sh
configuration file). The CD-ROM uses isolinux
as its bootloader, and its configuration file must be adapted from what debian-cd generated, in order to insert the required boot parameters (the specific files are $TDIR/$CODENAME/CD1/isolinux/isolinux.cfg
and $TDIR/$CODENAME/CD1/boot/grub/grub.cfg
as shown above). Then the “normal” process can be resumed, and we can go on to generating the ISO image with make image CD=1
(or make images
if several CD-ROMs are generated).
12.3.3. Simple-CDD: la solució tot-en-un
Només utilitzar un fitxer de presembrat no és suficient per complir tots els requisits que poden aparèixer per a grans desplegaments. Tot i que és possible executar alguns scripts al final del procés d'instal·lació normal, la selecció del conjunt de paquets a instal·lar encara no és prou flexible (bàsicament, només es poden seleccionar “tasques”); i més important, això només permet instal·lar paquets oficials de Debian, i exclou els generats localment.
On the other hand, debian-cd is able to integrate external packages, and debian-installer can be extended by inserting new steps in the installation process. By combining these capabilities, it should be possible to create a customized installer that fulfills our needs; it should even be able to configure some services after unpacking the required packages. Fortunately, this is not a mere hypothesis, since this is exactly what simple-cdd does.
The purpose of this tool is to allow anyone to easily create a distribution derived from Debian, by selecting a subset of the available packages, preconfiguring them with Debconf, adding specific software, and executing custom scripts at the end of the installation process. This matches the “universal operating system” philosophy, since anyone can adapt it to their own needs.
12.3.3.1. Creació de perfils
Simple-CDD defineix “perfils” que coincideixen amb el concepte de “classes” de FAI, i una màquina pot tenir diversos perfils (determinats en el moment de la instal·lació). Un perfil es defineix per un conjunt de fitxers profiles/perfil.*
:
el fitxer .description
conté una descripció d'una línia per al perfil;
el fitxer .packages
llista els paquets que s'instal·laran automàticament si el perfil està seleccionat;
el fitxer .downloads
llista els paquets que s'emmagatzemaran als mitjans d'instal·lació, però no necessàriament instal·lats;
el fitxer .preseed
conté informació de presembrat per a les preguntes Debconf (per a l'instal·lador i/o per als paquets);
el fitxer .postinst
conté un script que s'executarà al final del procés d'instal·lació;
lastly, the .conf
file allows changing some parameters based on the profiles to be included in an image.
El perfil default
té un paper particular, ja que sempre està seleccionat; conté el mínim necessari perquè el Simple-CDD pugui funcionar. L'única cosa que normalment es personalitza en aquest perfil és el paràmetre preseed de simple-cdd/profiles
: això permet evitar la pregunta, introduïda per Simple-CDD, sobre quins perfils s'han d'instal·lar.
Adoneu-vos-en que les ordres s'hauran d'invocar des del directori pare del directori profiles
.
12.3.3.2. Configuració i ús de build-simple-cdd
El Simpe-CDD requereix molts paràmetres per operar completament. Sovint es recolliran en un fitxer de configuració, que es pot indicar a build-simple-cdd
amb l'opció --conf
, però també es poden especificar mitjançant paràmetres dedicats passats a build-simple-cdd
. Aquí hi ha una vista general de com es comporta aquesta ordre i com s'utilitzen els seus paràmetres:
el paràmetre profiles
llista els perfils que s'inclouran a la imatge CD-ROM generada;
Basant-se en la llista de paquets requerits, Simple-CDD descarrega els fitxers apropiats del servidor esmentat a server
, i els recull en un mirall parcial (que més tard es passarà a debian-cd);
els paquets personalitzats esmentats a local_packages
també seran inclosos en aquest mirall local;
debian-cd s'executa llavors (des d'una ubicació predeterminada que es pot configurar amb la variable debian_cd_dir
), amb la llista de paquets a incloure;
Una vegada que debian-cd ha preparat el seu directori, Simple-CDD aplica alguns canvis a aquest directori:
els fitxers que contenen els perfils s'afegeixen en un subdirectori simple-cdd
(que apareixerà al CD-ROM);
també s'hi afegeixen altres fitxers llistats al paràmetre all_extras
;
els paràmetres d'arrencada s'ajusten per habilitar el presembrat. Les preguntes relatives a la llengua i el país es poden evitar si la informació requerida s'emmagatzema a les variables language
i country
.
llavors debian-cd genera la imatge ISO final.
12.3.3.3. Generació d'una imatge ISO
Once we have written a configuration file and defined our profiles, the remaining step is to invoke build-simple-cdd --conf simple-cdd.conf
. After a few minutes, we get the required image in images/debian-11-amd64-CD-1.iso
.