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).
Hver av disse løsningene har sine fordeler og ulemper: SystemImager fungerer uavhengig av et bestemt pakkesystem, som gjør det mulig å håndtere store sett med maskiner ved hjelp av flere forskjellige Linux-distribusjoner. Det inkluderer også et oppdateringssystem som ikke krever en reinstallasjon, men dette oppdateringssystemet kan bare være pålitelig hvis maskinene ikke endres hver for seg; med andre ord, brukeren må ikke oppdatere programvare på egen hånd, eller installere noen annen programvare. Tilsvarende sikkerhetsoppdateringer må ikke være automatisert, fordi de må gå gjennom det sentraliserte referansebildet som vedlikeholdes av SystemImager. Denne løsningen krever også at maskinene det gjelder er homogene, ellers må mange forskjellige bilder tas vare på og håndteres (et AMD64-avtrykk vil ikke passe på en PowerPC-maskin, og så videre).
På den annen side kan en automatisert installasjon som bruker Debian-installasjonsprogrammet tilpasse seg de nærmere spesifikasjoner for hver maskin: Installasjonsprogrammet henter den riktige kjernen og programvarepakker fra de aktuelle pakkebrønnene, oppdage tilgjengelig maskinvare, partisjonere hele harddisken for å dra nytte av all tilgjengelig plass, installere det tilsvarende Debian-systemet, og sette opp en passende oppstartslaster. Imidlertid vil standard-installasjonsprogrammet bare installere standard Debian-versjoner, med basesystem og et sett forhåndsvalgte «oppgaver»; dette utelukker å installere et bestemt system med ikke-pakkede programmer. Å oppfylle dette behovet krever tilpassing av installasjonsprogrammet ... Heldigvis er installatøren veldig modulær, og det er verktøy for å automatisere det meste av arbeidet som kreves for denne tilpasningen, viktigst er simple-cdd (CDD er en forkortelse av Custom Debian Derivative). Selv denne løsningen håndterer imidlertid bare innledende installasjoner; dette er vanligvis ikke et problem siden APT-verktøyene gir effektiv utrulling av oppdateringer senere.
Vi vil bare gi en grov oversikt over FAI, og helt hoppe over SystemImager (som ikke lenger er i Debian, men tilgjengelig som en tredjepartspakke) for å fokusere sterkere på Debian-installlasjonsprogrammet og simple-cdd (enkel-CDD), som er mer interessant for Debian alene.

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 bruker en bestemt metode for å definere de ulike installerbare profilene. I stedet for ganske enkelt å bare kopiere en referanseinstallasjon, er FAI et fullverdig installasjonsprogram, fullt oppsettbart via et sett filer og skript lagret på tjeneren; forvalgsplasseringen /srv/fai/config/ i henhold til /etc/fai/nfsroot.conf opprettes ikke automatisk, så administratoren må lage den sammen med de aktuelle filene. Som oftest vil disse filene tilpasset fra eksempelfiler tilgjengelig i dokumentasjonen til fai-doc-pakken, mer spesifikt i /usr/share/doc/fai-doc/examples/simple/-mappen.
Så snart profilene er definert, genererer fai-setup-kommandoen de elementene som kreves for å starte en FAI-installasjon; Dette betyr stort sett å forberede eller å oppdatere et minimalt system (NFS-root) som brukes under installasjonen. Et alternativ er å generere en dedikert oppstarts-CD med 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

Alt i alt skulle det logisk beste verktøyet til å installere Debian-systemer være den offisielle Debian-installereren. Dette er årsaken, helt fra begynnelsen, til at Debian-installatøren er konstruert for automatisert bruk, og drar nytte av infrastrukturen levert av debconf. Sistnevnte gjør det mulig, på den ene siden - å redusere antall spørsmål (skjulte spørsmål vil bruke de medfølgende forvalgte svar), og - på den anden siden - tilby forvalgte svar separat, slik at installasjonen kan være ikke-interaktiv. Sistnevnte egenskap er kjent som forhåndsutfylling (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 (for eksempel /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, adskilt 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;
  • det andre feltet er en identifikator for spørsmålet (malnavnet);
  • tredje type spørsmål;
  • det fjerde og siste feltet inneholder verdien for svaret. Legg merke til at det må være adskilt 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.
Forhåndsinnstilling av en verdi i en forhåndsutfyllingsfil instruerer installasjonsprogrammet i Debian slik at det ikke stiller dette spørsmålet. Dette skjer fordi innlasting av forhåndsutfyllingsfilen ikke bare setter de(n) gitte verdi(ene), men også markerer hver av de aktuelle dialogene som «sett» av brukeren. Dermed er det mulig å forhåndsinnstille spørsmålets verdi og fremdeles presentere dialogen til brukeren ved å tilbakestille «seen»-flagget. Husk at rekkefølgen i sådant fall er viktig, og at verdien må forhåndsutfylles før dialogen settes til «unseen» som vist i følgende eksempel:
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, for eksempel /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. For CD-ROM er operasjonen mer komplisert, siden vi trenger å fornye et fullstendig ISO-avtrykk. Denne oppgaven håndteres av debian-cd, men dette verktøyet er ganske vanskelig å bruke. Det trenger et lokalt speil, og det krever 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 lesning.
Når det er sagt, fungererdebian-cd alltid på en lignende måte: en «bilde»-katalog med det eksakte innholdet på CD-ROM blir generert, og deretter konvertert til en ISO-fil med et verktøy som genisoimage, mkisofs eller xorriso. Bildekatalogen er ferdig etter Debian-CD-ens make image-trees skritt. På dette tidspunktet setter vi inn den forhåndsutfylte filen i den aktuelle mappen (vanligvis $TDIR/$CODENAME/CD1/, $TDIR og $CODENAME er parametere definert av oppsettsfilen CONF.sh). CD-ROM-en bruker isolinux som sin oppstartslaster, og oppsett dens må tilpasses fra hva Debian-CD-en genererte, for å sette inn de nødvendige oppstartsparametere (de spesifikke filene er $TDIR/$CODENAME/CD1/isolinux/isolinux.cfg og $TDIR/$CODENAME/CD1/boot/grub/grub.cfg som vist ovenfor). Så kan «normal»-prosessen fortsette, og vi kan gå videre med å generere ISO-avtrykket med make image CD=1 (eller make images hvis flere CD-ROM-er blitt generert)..

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.
På den annen side er Debian-CD i stand til å integrere eksterne pakker, og Debian-installereren kan utvides ved å sette inn nye trinn i installasjonsprosessen. Ved å kombinere disse evnene bør det være mulig å lage et tilpasset installasjonsprogram som oppfyller våre behov; det bør også kunne sette opp enkelte tjenester etter utpakking av de nødvendige pakkene. Heldigvis er dette ikke bare en hypotese, siden dette er nøyaktig det simple-cdd gjør.
Hensikten med dette verktøyet er å gjøre det mulig for alle, på en enkel måte, å lage en distribusjon som stammer fra Debian, ved å velge et delsett av tilgjengelige pakker, forhåndsoppsette dem med Debconf, og legge til spesiell programvare, og kjøre tilpassede skript på slutten av installasjonen. Dette samsvarer med filosofien om «universelt operativsystem», siden alle kan tilpasse den til sine egne behov.

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;
  • til slutt lar .conf-filen deg endre noen parametere basert på profilene som skal inngå i et avtrykk.
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-avtrykket.

12.3.3.3. Generering av et ISO-avtrykk

Når vi har skrevet en oppsettsfil og definert våre profiler, er det resterende skritt å påkalle build-simple-cdd --conf simple-cdd.conf. Etter et par minutter, får vi det ønskede avtrykket i images/debian-11-amd64-CD-1.iso.