B.5. Opties voor gevorderden

B.5.1. Aangepaste commando's uitvoeren tijdens de installatie

Een erg krachtige en flexibele optie die geboden wordt door de preconfiguratiegereedschappen is de mogelijkheid om op bepaalde punten in de installatie commando's of scripts uit te voeren.

Als het bestandssysteem van het doelsysteem aangekoppeld is, is het beschikbaar in /target. Wanneer een installatie-CD/DVD gebruikt wordt, is die beschikbaar in /cdrom als die aangekoppeld is.

# Het toepassen van preconfiguratie met d-i is inherent onveilig.
# Het installatiesysteem bevat geen enkele controle op eventuele pogingen
# om via een buffer overflow of op een andere manier de waarden uit een
# antwoordbestand, zoals dit hier, te compromitteren. Gebruik enkel
# antwoordbestanden die afkomstig zijn van locaties die u vertrouwt!
# Om dit te beklemtonen en omdat het ook een algemeen nut heeft,
# tonen we u hier een manier om elk gewenst shell-commando automatisch
# uit te voeren binnen het installatiesysteem.

# Dit eerste commando wordt zo vroeg mogelijk uitgevoerd,
# net nadat de preconfiguratie ingelezen werd.
#d-i preseed/early_command string anna-install some-udeb
# Dit commando wordt uitgevoerd vlak voordat de schijfindeling begint.
# Het kan nuttig zijn om voor het schijfindelingsprogramma een dynamische
# preconfiguratie te gebruiken die rekening houdt met de toestand van de
# schijven (die mogelijk niet bekend is op het ogenblik dat de commando's van
# preseed/early_command uitgevoerd worden).
#d-i partman/early_command \
#       string debconf-set partman-auto/disk "$(list-devices disk | head -n1)"
# Dit commando wordt uitgevoerd vlak voor de installatie beëindigd wordt, maar
# de map /target nog gebruikt kan worden. U kunt chrooten naar /target
# en het rechtstreeks gebruiken of de commando's apt-install en in-target
# gebruiken om op een eenvoudige manier pakketten te installeren en
# commando's uit te voeren op het doelsysteem.
#d-i preseed/late_command string apt-install zsh; in-target chsh -s /bin/zsh

B.5.2. Gebruik maken van preconfiguratie om standaardwaarden aan te passen

Het is mogelijk om preconfiguratie te gebruiken om het standaardantwoord op een vraag aan te passen, terwijl de vraag nog steeds gesteld wordt. Om dit te doen moet de seen-vlag (de gezien-vlag) teruggezet worden op false nadat de waarde voor een antwoord ingesteld werd.

d-i foo/bar string waarde
d-i foo/bar seen false

Hetzelfde effect kunt u bereiken voor alle vragen door aan de opstartprompt de parameter preseed/interactive=true in te stellen. Dit kan ook nuttig zijn om uw antwoordbestand te testen of te debuggen.

Merk op dat u d-i als eigenaar enkel mag gebruiken voor variabelen die in het installatiesysteem zelf gebruikt worden. Voor variabelen die behoren tot pakketten die op het doelsysteem geïnstalleerd worden, moet u de naam van dat pakket gebruiken als eigenaar. Zie de voetnoot bij Paragraaf B.2.2, “Met opstartparameters vooraf installatievragen beantwoorden”.

Indien u vooraf configureert met behulp van opstartparameters, kunt u het installatiesysteem de betreffende vraag laten stellen door de operator ?= te gebruiken, d.w.z. foo/bar?=waarde (of eigenaar:foo/bar?=waarde). Dit zal natuurlijk enkel effect hebben voor parameters die betrekking hebben op vragen die werkelijk gesteld worden tijdens een installatie en niet voor interne parameters.

Om meer debug-informatie te krijgen, moet u de opstartparameter DEBCONF_DEBUG=5 gebruiken. Daardoor zal debconf veel meer gedetailleerde informatie geven over de huidige instellingen van elke variabele en over zijn voortgang in de installatiescripts van elk pakket.

B.5.3. Een aaneenschakeling van antwoordbestanden laden

Het is mogelijk om in een antwoordbestand andere antwoordbestanden te laten opnemen. Alle instellingen uit deze bestanden zullen eerder gemaakte instellingen uit eerder geladen bestanden vervangen. Dit maakt het mogelijk om bijvoorbeeld de voor uw locatie algemeen geldende netwerkinstellingen in een bestand te plaatsen en meer specifieke instellingen voor bepaalde configuraties in andere bestanden.

# Meer dan één bestand kan vermeld worden, onderling gescheiden door een spatie;
# ze zullen allemaal opgenomen worden. De opgenomen bestanden kunnen op hun
# beurt ook zelf opdrachten van het type preseed/include bevatten.
# Merk op dat als de bestanden een relatieve naam hebben, die bestanden
# uit dezelfde map geladen worden als het antwoordbestand dat ze opneemt.
#d-i preseed/include string x.cfg

# Het installatiesysteem kan eventueel checksums van antwoordbestanden
# controleren vooraleer deze te gebruiken. Momenteel worden enkel md5sums
# ondersteund. Vermeld de md5sums in dezelfde volgorde als die welke
# gehanteerd wordt voor de lijst van de op te nemen bestanden.
#d-i preseed/include/checksum string 5da499872becccfeda2c4872f9171c3d

# Deze meer flexibele methode voert een shell-commando uit en als de uitvoer
# ervan de namen geeft van antwoordbestanden, worden deze bestanden opgenomen. 
#d-i preseed/include_command \
#      string if [ "`hostname`" = bob ]; then echo bob.cfg; fi

# Deze meest flexibele methode van allemaal downloadt een programma en voert
# het uit. Het programma kan commando's gebruiken zoals debconf-set om de
# debconf-databank te bewerken. Meerdere scripts kunnen vermeld worden,
# onderling gescheiden door spaties. Merk op dat als de bestanden een relatieve
# naam hebben, die bestanden uit dezelfde map geladen worden als het
# antwoordbestand dat ze uitvoert.
#d-i preseed/run string foo.sh

Het is eveneens mogelijk om vanuit de initrd-preconfiguratiefase of vanuit de preconfiguratiefase die met een antwoordbestand werkt, de koppeling te maken naar de fase van preconfiguratie die via het netwerk verloopt, door in de eerdere bestanden preseed/url in te stellen. Hierdoor zal het preconfigureren via het netwerk uitgevoerd worden bij de activatie van het netwerk. Als u dit toepast moet u dit met zorg doen, vermits er tweemaal een preconfiguratiefase zal zijn. Dit betekent bijvoorbeeld dat u nog een kans heeft om het commando preseed/early uit te voeren. De tweede maal vindt dan plaats na de activatie van het netwerk.