B.2. Vooraf configureren in de praktijk

Eerst zult u een zogenaamd antwoordbestand of preconfiguratiebestand moeten creëren en dat moeten plaatsen daar waar u het wenst te gebruiken. Het creëren van het antwoordbestand wordt later in deze bijlage behandeld. Het op de juiste plaats zetten is behoorlijk eenvoudig bij preconfiguratie via het netwerk of wanneer u het bestand wilt inlezen vanaf een usb-stick. Indien u het bestand in een installatie-ISO-image wilt opnemen, zult u het image opnieuw moeten genereren. Hoe u het antwoordbestand kunt opnemen in het initrd valt buiten het bestek van dit document. Raadpleeg in dit verband de documentatie ten behoeve van de ontwikkelaars van debian-installer.

Een voorbeeld van een antwoordbestand dat u als basis kunt gebruiken voor uw eigen preconfiguratiebestand is te vinden op https://www.debian.org/releases/bullseye/example-preseed.txt. Dit bestand is gebaseerd op de configuratiefragmenten die in deze bijlage gebruikt worden.

B.2.1. Het antwoordbestand laden

Indien u de preconfiguratiemethode met initrd gebruikt, moet u er alleen voor zorgen dat u een bestand met de naam preseed.cfg in de basismap van initrd heeft staan. Het installatiesysteem zal automatisch nagaan of zich daar een dergelijk bestand bevindt en het dan laden.

Voor de andere preconfiguratiemethodes moet u het installatiesysteem bij het opstarten zeggen welk bestand het moet gebruiken. Dit wordt gewoonlijk gedaan door de kernel een opstartparameter mee te geven, ofwel handmatig bij het opstarten ofwel via het bewerken van het configuratiebestand van de opstartlader (bijv. syslinux.cfg) en de parameter toe te voegen aan het einde van de 'append'-regel(s) voor de kernel.

Indien u het preconfiguratiebestand vermeldt in de configuratie van de opstartlader, zou u de configuratie zo kunnen aanpassen dat u niet op de enter-toets moet drukken om het installatiesysteem op te starten. Voor syslinux betekent dit in syslinux.cfg de pauzetijd (timeout) instellen op 1.

Om er zeker van te zijn dat het installatiesysteem het juiste antwoordbestand gebruikt, kunt u facultatief de checksum van het bestand vermelden. Momenteel moet dat een md5sum zijn en als u dit vermeldt moet de checksum wel passen bij het antwoordbestand, anders zal het installatiesysteem weigeren het bestand te gebruiken.

Opstartparameters die u moet opgeven:
- indien u over het netwerk opstart:
  preseed/url=http://computernaam/pad/naar/preseed.cfg
  preseed/url/checksum=5da499872becccfeda2c4872f9171c3d
- of
  preseed/url=tftp://computernaam/pad/naar/preseed.cfg
  preseed/url/checksum=5da499872becccfeda2c4872f9171c3d

- indien u opstart van een opnieuw gegenereerd installatie-image:
  preseed/file=/cdrom/preseed.cfg
  preseed/file/checksum=5da499872becccfeda2c4872f9171c3d

- indien u de installatie met USB-media uitvoert
  (plaats het antwoordbestand in de basismap van de USB-stick):
  preseed/file=/hd-media/preseed.cfg
  preseed/file/checksum=5da499872becccfeda2c4872f9171c3d

Merk op dat preseed/url ingekort kan worden tot url, preseed/file tot file en preseed/file/checksum tot preseed-md5 wanneer ze opgegeven worden als opstartparameters.

B.2.2. Met opstartparameters vooraf installatievragen beantwoorden

Als er geen gebruik gemaakt kan worden van een antwoordbestand om voor sommige stappen de antwoorden vooraf te geven, kan de installatie nog steeds volledig geautomatiseerd worden, aangezien u preconfiguratiewaarden aan de commandoregel kunt opgeven bij het opstarten van het installatiesysteem.

Opstartparameters kunnen ook gebruikt worden als u niet echt vooraf wilt configureren, maar enkel een antwoord op een specifieke vraag wilt meegeven. Elders in deze handleiding worden enkele voorbeelden gegeven van situaties waarin dit zinvol kan zijn.

Om een waarde in te stellen die binnenin debian-installer gebruikt moet worden, kunt u voor elke preconfiguratievariabele die in de voorbeelden in deze bijlage vermeld wordt, gewoon het volgende opgeven: pad/naar/variabele=waarde. Indien het een waarde betreft die gebruikt moet worden om een pakket voor het doelsysteem te configureren, moet u de eigenaar[19] van de variabele voorvoegen, zoals in dit voorbeeld: eigenaar:pad/naar/variabele=waarde. Indien u geen eigenaar vermeldt, zal de waarde van de variabele niet gekopieerd worden naar de databank van debconf op het doelsysteem en dus niet gebruikt worden tijdens de configuratie van het betreffende pakket.

Als u een vraag op deze manier vooraf beantwoordt, heeft dat tot gevolg dat ze normaal gezien niet zal gesteld worden. Wilt u voor een bepaalde vraag een specifieke waarde als standaard instellen, maar wilt u ook dat de vraag toch nog gesteld wordt, gebruik dan ?= in plaats van = als operator. Zie ook Paragraaf B.5.2, “Gebruik maken van preconfiguratie om standaardwaarden aan te passen”.

Merk op dat sommige variabelen die frequent aan de opstartprompt ingesteld worden, een verkorte alias hebben. Indien er een alias bestaat, wordt die in de voorbeelden in deze bijlage gebruikt in plaats van de volledige variabele. Voor de variabele preseed/url bijvoorbeeld, wordt de alias url gebruikt. Een ander voorbeeld is de alias tasks, die staat voor tasksel:tasksel/first.

Een --- in de opstartopties heeft een bijzondere betekenis. Kernelparameters die na de laatste --- staan, zullen gekopieerd worden naar de configuratie van de opstartlader van het geïnstalleerde systeem (als het installatiesysteem dit voor die opstartlader ondersteunt). Het installatiesysteem zal automatisch elke optie die het herkent (zoals preconfiguratieopties), uitfilteren.

[Opmerking] Opmerking

De huidige linux kernels (2.6.9 en recenter) accepteren maximaal 32 commandoregelopties en 32 omgevingsopties, inclusief die opties die standaard gebruikt worden voor het installatiesysteem. Indien deze aantallen overschreden worden, zal de kernel panikeren (crashen). (Bij oudere kernels lagen deze aantallen lager.)

Bij de meeste installaties mogen sommige van de standaardopties in het configuratiebestand van de opstartlader, zoals vga=normal, probleemloos verwijderd worden, waardoor u meer preconfiguratieopties kunt gebruiken.

[Opmerking] Opmerking

Het is niet altijd mogelijk om voor opstartparameters waarden op te geven die een spatie bevatten, zelfs niet als u ze met spaties afbakent.

B.2.3. Automatische modus

Er kunnen verschillende eigenschappen van het installatiesysteem van Debian gecombineerd worden, waardoor met een redelijk eenvoudig commando aan de opstartprompt een vrij gekozen aangepaste complexe automatische installatie gerealiseerd kan worden.

Dit is mogelijk als u bij het opstarten kiest voor Geautomatiseerde installatie. Bij sommige architecturen of opstartmethodes wordt die ook auto genoemd. In dit onderdeel staat auto dus niet voor een parameter, maar wel voor het selecteren van die opstartkeuze, waarbij de erop volgende opstartparameters toegevoegd worden aan de opstartprompt.

Ter illustratie geven we hier enkele voorbeelden die aan de opstartprompt gebruikt kunnen worden:

auto url=autoserver

Dit rekent erop dat er een DHCP-server beschikbaar is die de machine tot op het punt kan krijgen waarop autoserver door DNS opgezocht kan worden, nadat er eventueel het lokale domein aan toegevoegd werd als dat door DHCP vermeld wordt. Indien dit toegepast wordt op een site waarvan het domein example.com is, en waarvan de DHCP-configuratie op een verstandige manier aangepakt is, heeft dit tot gevolg dat het volgende antwoordbestand opgehaald wordt: http://autoserver.example.com/d-i/bullseye/./preseed.cfg.

Het laatste deel van die url (d-i/bullseye/./preseed.cfg) is afkomstig van auto-install/defaultroot. Standaard bevat die de map bullseye om toe te laten dat toekomstige versies een eigen codenaam gebruiken en om een dergelijke verwijzing op een gecontroleerde manier te kunnen aanpassen. Het element /./ wordt gebruikt om een basismap aan te geven. Erop volgende paden worden daaraan relatief verankerd (om in preseed/include en preseed/run gebruikt te worden). Dit maakt het mogelijk om bestanden op te geven aan de hand van een volledige URL, of met een pad dat begint met een / en dat dus verankerd is, of zelfs met een pad dat relatief is ten opzichte van de plaats waar het laatste antwoordbestand gevonden werd. Men kan hiervan gebruik maken om scripts te maken die beter transponeerbaar zijn, waardoor een samenhangend geheel van scripts verplaatst kan worden naar een andere locatie zonder dat ze onklaar worden. Een voorbeeld zou kunnen zijn ze naar een USB-stick kopiëren terwijl ze oorspronkelijk op een webserver dienst deden. Als het antwoordbestand uit dit voorbeeld preseed/run instelt op /scripts/late_command.sh, dan zal het bestand opgehaald worden van http://autoserver.example.com/d-i/bullseye/./scripts/late_command.sh.

Als er geen lokale infrastructuur voor DHCP of DNS aanwezig is, of als u het standaardpad naar preseed.cfg niet wilt gebruiken, kunt u nog steeds een expliciete URL gebruiken en als u het element /./ niet gebruikt, zal de verankering aan het begin van het pad (d.w.z. de derde / in de URL) gebeuren. Hierna volgt een voorbeeld dat minimale ondersteuning vraagt van de lokale netwerkinfrastructuur:

auto url=http://192.168.1.2/pad/naar/mijnantwoord.bestand

Dit werkt als volgt:

  • als de URL geen protocol vermeldt, wordt http verondersteld,

  • als het element computernaam geen punt bevat, wordt de van DHCP afkomstige domeinnaam eraan toegevoegd, en

  • als er na de computernaam geen /'s staan, dan wordt het standaardpad eraan toegevoegd.

Naast de URL, kunt u ook nog instellingen opgeven die niet onmiddellijk het gedrag van debian-installer zelf beïnvloeden, maar die doorgegeven kunnen worden aan scripts die in het geladen antwoordbestand vermeld worden met behulp van preseed/run. Momenteel is het enige voorbeeld hiervan auto-install/classes, waarvoor classes een alias is. Dit kan als volgt gebruikt worden:

auto url=example.com classes=klasse_A;klasse_B

De klassen zouden bijvoorbeeld het type systeem kunnen vermelden dat geïnstalleerd moet worden of de te gebruiken lokalisatie.

Het is uiteraard mogelijk om dit concept uit te breiden en als u dit doet, is het redelijk om daarvoor de naamruimte auto-install te gebruiken. Zo zou men iets kunnen hebben als auto-install/style, hetgeen dan in uw scripts gebruikt wordt. Indien u de behoefte voelt om dit te doen, gelieve het dan te vermelden op de mailinglijst , zodat we naamruimteconflicten kunnen vermijden en eventueel ten behoeve van u een alias voor de parameter kunnen toevoegen.

De opstartoptie auto is nog niet op alle architecturen gedefinieerd. U kunt hetzelfde effect bekomen door gewoon de twee parameters auto=true priority=critical toe te voegen aan de commandoregel van de kernel. De kernelparameter auto is een alias voor auto-install/enable en die op true instellen stelt de vragen over taalgebied en toetsenbordindeling uit tot na het moment waarop er een mogelijkheid was om ze via een antwoordbestand te beantwoorden. De parameter priority is een alias voor debconf/priority en als die op critical ingesteld wordt, worden geen vragen meer gesteld die een lagere prioriteit hebben.

Andere opties die interessant kunnen zijn in het geval u een installatie tracht te automatiseren waarin van DHCP gebruik gemaakt wordt zijn: interface=auto netcfg/dhcp_timeout=60. Deze opties zorgen ervoor dat de machine kiest voor de eerste bruikbare netwerkkaart (NIC) en meer geduld heeft bij het wachten op een antwoord op zijn DHCP-aanvraag.

[Tip] Tip

Een uitgebreid voorbeeld van het gebruik van dit raamwerk, met inbegrip van voorbeeldscripts en klassen, kunt u vinden op de website van de ontwikkelaar. De voorbeelden die u daar aantreft tonen ook veel andere leuke effecten die u met een creatief gebruik van preconfiguratie kunt bekomen.

B.2.4. Nuttige aliassen bij het vooraf configureren

De volgende aliassen kunnen nuttig zijn als u gebruik maakt van preconfiguratie (eventueel in automatische modus). Merk op dat dit gewoon korte aliassen zijn voor de namen van de vragen en dat u ook steeds een waarde moet opgeven: bijvoorbeeld auto=true of interface=eth0.

priority debconf/priority
fb debian-installer/framebuffer
language debian-installer/language
country debian-installer/country
locale debian-installer/locale
theme debian-installer/theme
auto auto-install/enable
classes auto-install/classes
bestand preseed/file
url preseed/url
domain netcfg/get_domain
hostname    netcfg/get_hostname
interface netcfg/choose_interface
protocol mirror/protocol
suite mirror/suite
modules anna/choose_modules
recommends base-installer/install-recommends
tasks tasksel:tasksel/first
desktop tasksel:tasksel/desktop
dmraid disk-detect/dmraid/enable
keymap keyboard-configuration/xkb-keymap
preseed-md5 preseed/file/checksum

B.2.5. Preconfiguratievoorbeelden voor de opstart-prompt

Hier volgen enkele voorbeelden van hoe de opstart-prompt er kan uitzien (u zal dit aan uw behoeften moeten aanpassen).

# Om Frans als taal in te stellen en Frankrijk als land:
/install.amd/vmlinuz vga=788 initrd=/install.amd/gtk/initrd.gz language=fr country=FR --- quiet
# Om Engels als taal in te stellen en Duitsland als land, en om een Duitse toetsenbordindeling te gebruiken:
/install.amd/vmlinuz vga=788 initrd=/install.amd/gtk/initrd.gz language=en country=DE locale=en_US.UTF-8 keymap=de --- quiet
# Om de grafische werkomgeving MATE te installeren:
/install.amd/vmlinuz vga=788 initrd=/install.amd/gtk/initrd.gz desktop=mate-desktop --- quiet
# Om de taak web-server te installeren:
/install.amd/vmlinuz initrd=/install.amd/initrd.gz tasksel:tasksel/first=web-server ---

B.2.6. Een DHCP-server gebruiken om antwoordbestanden op te geven

Het is ook mogelijk om DHCP te gebruiken om een antwoordbestand op te geven dat van het netwerk opgehaald moet worden. DHCP laat toe om een bestandsnaam op te geven. Gewoonlijk is dat een bestand dat gebruikt wordt bij het opstarten over het netwerk, maar als blijkt dat het een URL is, dan zullen installatiemedia die preconfiguratie over het netwerk ondersteunen, het bestand ophalen op die URL en het gebruiken als antwoordbestand. Hierna volgt een voorbeeld van de manier waarop dit voor versie 3 van de ISC DHCP-server (het Debian pakket isc-dhcp-server) opgezet kan worden in het bestand dhcpd.conf.

if substring (option vendor-class-identifier, 0, 3) = "d-i" {
    filename "http://host/preseed.cfg";
}

Merk op dat het bovenstaande voorbeeld dit bestand voorbehoudt voor de DHCP-cliënten die zichzelf als d-i identificeren, zodat het geen invloed heeft op gewone DHCP-cliënten, maar enkel gebruikt wordt voor het installatiesysteem. U kunt de tekst ook in een informatieblok plaatsen dat geldt voor één enkele computer, zodat u kunt vermijden dat preconfiguratie gebruikt wordt voor alle installaties die op uw netwerk uitgevoerd worden.

Een goede manier om gebruik te maken van preconfiguratie via DHCP is om dit te reserveren voor het vooraf configureren van waarden (antwoorden) die specifiek zijn voor uw netwerk, zoals de te gebruiken Debian spiegelserver. Op die manier zullen installaties op uw netwerk automatisch een goede spiegelserver selecteren, terwijl de rest van de installatie interactief uitgevoerd kan worden. Preconfiguratie via DHCP gebruiken om installaties van Debian volledig te automatiseren, zou enkel met de nodige voorzichtigheid mogen gebeuren.



[19] De eigenaar van een debconf-variabele (of sjabloon) is normaal gezien de naam van het pakket dat het overeenkomstige debconf-sjabloon bevat. Voor variabelen die in het installatiesysteem zelf gebruikt worden, is de eigenaard-i. Sjablonen en variabelen kunnen meer dan één eigenaar hebben en dit gegeven kan helpen bij het bepalen of een bepaalde variabele uit de databank van debconf verwijderd mag worden als een pakket op het systeem gewist wordt (d.w.z. als apt met het commando purge gebruikt wordt).