Product SiteDocumentation Site

12.3. Automatisert installasjon

Falcot Corp-administratorene trenger, som mange administratorer av store IT-tjenester, verktøy for å installere sine nye maskiner (eller installere på nytt) raskt, og automatisk hvis mulig.
Disse kravene kan bli møtt av et bredt spekter av løsninger. På den ene siden, generiske verktøy som SystemImager, håndterer dette ved å skape et bilde med en maskin som mal, deretter distribuere bildet dit det skal hos systemene. I den andre enden av spekteret, kan standard Debian-installeren bli forhåndsutfylt med en oppsettsfil som gir svarene på spørsmålene under installasjonsprosessen. Som en slags middelvei, installerer et hybridverktøy som FAI (Fully Automatic Installer) maskiner ved hjelp av pakkesystemet, men det bruker også sin egen infrastruktur for oppgaver som er mer spesifikke for massive distribusjoner (som å starte, partisjonering, oppsett og så videre).
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 er trolig det eldste automatiserte utrullingssystemet for Debian, noe som forklarer dets status som en referanse, men den svært fleksible naturen kompenserer bare akkurat for den kompleksiteten det innebærer.
FAI krever et tjenersystem for å lagre utrullingsinformasjon, og tillate maskinene det gjelder å starte opp fra nettverket. Denne tjeneren krever fai-server-pakken (eller fai-quickstart, som også bringer med seg de nødvendige elementer for et standard oppsett).
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.
Å opprette alle disse oppsettsfilene krever en viss forståelse for hvordan FAI fungerer. En typisk installasjonen gjøres i følgende trinn:
  • å hente en kjerne fra nettverket, og starte den;
  • å montere rotfilssystemet fra NFS;
  • å kjøre /usr/sbin/fai, som kontrollerer resten av prosessen (de neste trinnene er derfor initiert av dette skriptet);
  • å kopiere oppsettsplassen fra tjeneren til /fai/;
  • å kjøre fai-class. Skriptene /fai/class/[0-9][0-9]* blir så utført, og returnerer navnene på «klasser» som gjelder for maskinen som blir installert. Denne informasjonen vil tjene som et utgangspunkt for de neste trinnene. Dette åpner for en viss fleksibilitet i å definere hvilke tjenester som skal installeres og settes opp.
  • å hente et antall oppsettsvariabler, avhengig av de aktuelle klasser;
  • å partisjonere diskene, og formatere partisjonene, ut fra informasjon i /fai/disk_config/klasse;
  • montere disse partisjonene;
  • å installere basesystemet;
  • å forhåndsutfylle Debconf-databasen med fai-debconf;
  • å hente listen over tilgjengelige pakker for APT;
  • å installere pakkene listet i /fai/package_config/klasse;
  • å kjøre etteroppsettskriptene, /fai/scripts/klasse/[0-9][0-9]*;
  • å registrere installasjonsloggene, avmontere partisjonene, og omstart.

12.3.2. Forhåndsutfylt 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. Å bruke en forhåndsutfyllingsfil

Det er flere steder hvor installasjonsprogrammet kan få en forhåndsutfyllingsfil:
  • I initrd som brukes til å starte maskinen; i dette tilfellet skjer forhåndsutfyllingen helt i begynnelsen av installeringen, og alle spørsmålene kan unngås. Filen trenger bare å bli kalt preseed.cfg, og bli lagret i initrd-roten.
  • På oppstartmedia (CD eller USB-nøkkel); forhåndutfylling skjer så snart media er montert, noe som betyr rett etter spørsmålene om språk og tastaturoppsett. Oppstartsparameteren preseed/file kan brukes til å indikere plasseringen av filen for forhåndsutfylling (f.eks. /cdrom/preseed.cfg når installasjonen har blitt utført fra en CD-ROM, eller /hd-media/preseed.cfg hvis fra en USB-minnepinne.
  • Fra nettverket; forhåndsutfylling skjer da bare etter at nettverket er (automatisk) satt opp; relevant oppstartsparameter er preseed/url=http://server/preseed.cfg (HTTPS, FTPS, SFTP, etc, er ikke støttet).
Med et raskt øyekast, inkludert filen for forhåndsutfylling i initrd, ser den ut som den mest interessante løsningen; men den er imidlertid sjelden brukt i praksis, fordi å generere et installasjons-initrd er ganske komplisert. De to andre løsninger er mye mer vanlige, spesielt siden oppstartsparametere gir en annen måte til å forhåndsutfylle de første spørsmålene på i installasjonsprosessen. Den vanlige måten å spare bryet med å skrive disse oppstartsparametere for hånd på hver installasjon, er å lagre dem inn i oppsettet for isolinux (i CD-ROM tilfellet eller syslinux (ved USB-pinne).

12.3.2.2. Å lage en forhåndsutfyllingsfil

En forhåndsutfyllingsfil, preseed.cfg, er en ren tekstfil, der hver linje inneholder svaret på et Debconf-spørsmål. En linje er delt i fire felt, atskilt med blanke tegn (mellomrom eller tabulatorer), som i, for eksempel,d-i mirror/suite string stable:
  • det første feltet er «eieren» av spørsmålet; «d-i» brukes for spørsmål som er relevante for installasjonsprogrammet, men det kan også være et pakkenavn for spørsmål som kommer fra Debian-pakker;
  • the second field is an identifier for the question (the template name);
  • tredje type spørsmål;
  • det fjerde og siste feltet inneholder verdien for svaret. Legg merke til at det må være atskilt fra det tredje felt med et mellomrom; hvis det er mer enn ett, regnes følgende mellomrom som en del av verdien.
Den enkleste måten å skrive en forhåndsutfyllingsfil på, er å installere et system for hånd. Deretter vil debconf-get-selections --installer gi svar om installasjonsprogrammet. Svar om andre pakker kan oppnås med debconf-get-selections. Men det er en renere løsning å skrive forhåndsutfyllingsfilen for hånd, med start fra et eksempel og referansedokumentasjonen. Med en slik tilnærming trenger bare spørsmål der standardsvaret trenger å bli overstyrt, å bli forhåndsutfylt; å bruke priority=critical-oppstartsparameter vil instruere Debconf om å bare stille kritiske spørsmål, og bruke standardsvarene for andre.
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. Å lage et skreddersydd oppstartsmedium

Å vite hvor den forhåndsutfylte filen skal lagres er vel og bra, men plasseringen er ikke alt. På en eller annen måte må man få installasjonens oppstartsmedie til å endre oppstartsparametere, og legge til den forhåndsutfylte filen.
12.3.2.3.1. Å starte opp fra nettverket
Når en datamaskin startes fra nettverket, vil tjeneren som sender oppstartselementene også definere oppstartsparametere. Dermed må endringene som skal gjøres, legges inn i oppstartstjenerens PXE-oppsett; mer spesifikt, i dens /tftpboot/pxelinux.cfg/default-oppsettsfil. Å sette opp nettverksoppstart er en forutsetning, se installasjonsveiledningen for mer informasjon.
12.3.2.3.2. Å forberede en oppstartbar USB-pinne (Bootable USB Key)
Så snart en oppstartbar minnepenn er klargjort (se Seksjon 4.1.2, «Oppstart fra en USB-minnepenn») så trengs det noen ekstra operasjoner. Hvis vi antar at inneholdet er tilgjengelig under /media/usbdisk/, kopier forhåndsutfyllingsfilen til /media/usbdisk/preseed.cfg.
Hvis du har brukt et hybrid-ISO-avtrykk for å opprette USB-minnepinnen man kan starte opp fra må du redigere /media/usbdisk/boot/grub/grub.cfg (for EFI-oppstartsskjermen):

Eksempel 12.2. boot/grub/grub.cfg-filen og forhåndsutfyllingsparametere

menuentry --hotkey=i 'Install' {
    set background_color=black
    linux    /install.amd/vmlinuz preseed/file=/cdrom/preseed.cfg locale=nb_NO.UTF-8 keymap=no language=nb country=NO vga=788 --- quiet 
    initrd   /install.amd/initrd.gz
}
Og du må redigerer /media/usbdisk/isolinux/isolinux.cfg (for BIOS-oppstart) eller én eller flere filer den bruker, f.eks. /media/usbdisk/isolinux/txt.cfg for å legge til oppstartsparameterne som kreves:

Eksempel 12.3. isolinux/txt.cfg-fil og forhåndsutfyllingsparametre

label install
        menu label ^Installer
        kernel [...]
        append preseed/file=/cdrom/preseed.cfg locale=nb_NO.UTF-8 keymap=no language=nb country=NO vga=788 initrd=/install.amd/initrd.gz --- quiet
Hvis du har brukt installasjonsavtrykket hd-media til å lage en tilpasset USB-minnepinne rediger /media/usbdisk/syslinux.cfg, og legg til de nødvendige oppstartsparameterene (se eksempel nedenfor):

Eksempel 12.4. syslinux.cfg-fil og forhåndsutfyllingsparametere

default vmlinuz
append preseed/file=/hd-media/preseed.cfg locale=nb_NO.UTF-8 keymap=no language=nb country=NO vga=788 initrd=initrd.gz  --
12.3.2.3.3. Å lage et CD-ROM-bilde
En USB-minnepenn er et lese-skrive-medium, så det var lett for oss å legge til en fil der, og endre noen parametere. I CD-ROM-tilfellet er operasjonen mer komplisert, siden vi trenger å fornye et fullt ISO-bilde. Denne oppgaven er håndtert av debian-cd, men dette verktøyet er ganske vanskelig å bruke. Det er behov for et lokalt speil, og det krever en forståelse av alle valgene som tilbys av /usr/share/debian-cd/CONF.sh; selv da må make tas i bruk i flere omganger. /usr/share/debian-cd/README er derfor svært anbefalt å lese.
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: Alt i ett løsningen

Å bare bruke en forhåndsklargjort fil er ikke nok til å oppfylle alle krav som kan komme i store distribusjoner. Selv om det er mulig å utføre noen få skript ved slutten av den normale installasjonsprosessen, er valget av settet av pakkene til installasjon likevel ikke helt fleksibelt (i utgangspunktet kan bare «tasks» (oppgaver) velges); og viktigere, det er bare dette som tillater å installere offisielle Debian-pakker, og utelukker de lokalt genererte.
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. Å lage profiler

Simple-CDD definerer «profiler» som tilsvarer begrepet «klasser» i FAI, og en maskin kan ha flere profiler (bestemt ved installasjonstidpunktet). En profil er definert ved et sett av profiles/profil.* filer:
  • .descriptionfilen inneholder en énlinjes beskrivelse av profilen;
  • .packages-filen lister pakker som automatisk vil bli installert hvis profilen er valgt;
  • .downloads-filen lister pakker som skal lagres på installasjonsmediet, men ikke nødvendigvis installeres;
  • .preseed-filen inneholder forhåndsutfylt informasjon til Debconf-spørsmål (for installereren og/eller for pakker);
  • .postinst-filen inneholder et skript som blir kjørt ved slutten av installasjonen;
  • lastly, the .conf file allows changing some parameters based on the profiles to be included in an image.
Profilen default har en spesiell rolle, da den alltid er valgt; den inneholder det rene minimum som kreves for at Simple-CDD skal fungere. Det eneste som vanligvis blir tilpasset i denne profilen, er det forhåndsutfylte simple-cdd/profiles-parameteret: Dette gjør at du unngår spørsmålet, introdusert av Simple-CDD, om hvilke profiler som skal installeres.
Merk også at kommandoene må startes fra den overordnede katalogen til profiles-mappen.

12.3.3.2. Oppsett og bruk av build-simple-cdd

Simple-CDD krever mange parametere for å operere fullt ut. De vil som oftest bli samlet i en oppsettsfil, som build-simple-cdd kan få oppgitt med --conf-valget. Men de kan også spesifiseres via øremerkede parametere gitt til build-simple-cdd. Her er en oversikt over hvordan denne kommandoen oppfører seg, og hvordan dens parametere brukes:
  • profiles-parameteret lister profiler som vil bli inkludert i det genererte CD-ROM-bildet;
  • basert på listen over nødvendige pakker, laster Simple-CDD ned de nødvendige filene fra tjeneren nevnt i server, og samler dem i et del-speil (som senere blir gitt til Debian-CD);
  • de tilpassede pakkene som er nevnt i local_packages er også integrert i dette lokale speilet;
  • så kjøres Debian-CD (innenfor standardplasseringen som kan settes opp med debian_cd_dir-variabelen), med listen med pakker til integrering;
  • med en gang Debian-CD-en har forberedt sin katalog, bruker Simple-CDD noen endringer i denne katalogen:
    • filer som inneholder profilene er lagt til i en simple-cdd-undermappe (som vil ende opp på CD-ROM-en);
    • andre filer som er listet i all_extras-parameteret blir også lagt til;
    • oppstartsparameterne er justert slik at det er mulig å aktivere forhåndsutfyllingen. Spørsmål om språk og land kan unngås hvis den aktuelle informasjonen er lagret i language og country-variablene.
  • deretter genererer debian-cd det endelige ISO-bildet.

12.3.3.3. Å generere et ISO-bilde

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.