B.5. Erweiterte Optionen

B.5.1. Während der Installation eigene Kommandos ausführen

Eine sehr kraftvolle und flexible Funktion, die das Voreinstellungswerkzeug bietet, ist die Möglichkeit, Kommandos oder Skripte an bestimmten Stellen während der Installation auszuführen.

Wenn das Dateisystem des Zielsystems eingebunden ist, ist es unter /target verfügbar. Falls eine Installations-CD benutzt wird und diese eingebunden ist, finden Sie sie unter /cdrom.

# Den d-i voreinzustellen, ist von Natur aus nicht sicher! Nichts im
# Installer prüft auf Versuche eines Pufferüberlaufs oder anderweitiger
# Ausnutzung der Werte einer Voreinstellungsdatei wie dieser. Benutzen Sie
# nur Voreinstellungsdateien aus vertrauenswürdigen Quellen! Um diese
# Aussage zu untermauern und weil es auch generell nützlich ist, zeigen wir
# hier eine Möglichkeit, jegliche Shell-Befehle, die Sie gerne im Installer
# hätten, automatisch auszuführen.

# Dieser erste Befehl wird so früh wie möglich ausgeführt, direkt nachdem
# das Lesen der Voreinstellungsdatei abgeschlossen ist:
#d-i preseed/early_command string anna-install some-udeb
# Der folgende Befehl wird ausgeführt direkt bevor das Partitionierungsprogramm
# startet. Er kann nützlich sein, um dynamische Voreinstellungen für die 
# Partitionierung festzulegen, die vom Zustand der Festplatten abhängig sind
# (die möglicherweise noch nicht sichtbar sind, wenn preseed/early_command
# ausgeführt wird):
#d-i partman/early_command \
#       string debconf-set partman-auto/disk "$(list-devices disk | head -n1)"
# Dieses Kommando wird ausgeführt, kurz bevor die Installation beendet ist,
# wenn aber noch ein nutzbares /target-Verzeichnis verfügbar ist.
# Sie können nach /target »chroot«-en und es direkt benutzen, oder benutzen
# Sie apt-install und in-target-Kommandos, um einfach Pakete zu
# installieren oder Kommandos im Zielsystem auszuführen:
#d-i preseed/late_command string apt-install zsh; in-target chsh -s /bin/zsh

B.5.2. Voreinstellung nutzen, um Standardantworten auf Fragen zu ändern

Es ist ebenfalls möglich, die Standardantwort für eine Frage zu ändern, die Frage aber trotzdem stellen zu lassen. Dabei muss das seen-Flag auf false zurückgesetzt werden, nachdem die gewünschte Einstellung für den Wert gesetzt wurde:

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

Der gleiche Effekt kann erreicht werden, indem Sie am Boot-Prompt den Parameter preseed/interactive=true setzen. Dies kann auch zum Testen oder zur Fehlersuche in Ihrer Voreinstellungsdatei nützlich sein.

Beachten Sie, dass der Eigentümer d-i nur für Variablen verwendet werden sollte, die im Installer selbst genutzt werden. Für Variablen, welche zu Paketen gehören, die auf dem Zielsystem installiert werden, sollten Sie stattdessen den Namen des Pakets als Eigentümer verwenden. Siehe auch die Fußnote zum Abschnitt B.2.2, „Boot-Parameter nutzen, um Fragen automatisiert zu beantworten“.

Wenn Sie Voreinstellung mittels Boot-Parametern nutzen, können Sie den Installer anweisen, eine bestimmte Frage zu stellen, indem Sie den Operator ?= verwenden, z.B. foo/bar?=value (oder owner:foo/bar?=value). Dies wird natürlich nur Auswirkungen auf Parameter haben, die zu Fragen gehören, die während der Installation auch wirklich gestellt/angezeigt werden, und nicht auf interne Parameter.

Benötigen Sie mehr Debugging-Informationen, z.B. zur Fehlersuche, so verwenden Sie den Boot-Parameter DEBCONF_DEBUG=5. Dies veranlaßt debconf, erheblich mehr Details über die aktuelle Einstellung jeglicher Variablen auszugeben sowie über die Bearbeitung der Installationsskripte jedes einzelnen Pakets.

B.5.3. Mehrere Voreinstellungsdateien nacheinander laden

Wenn Sie mögen, können Sie hier weitere Voreinstellungsdateien in diese Datei integrieren. Jegliche Einstellungen in den integrierten Dateien werden die Werte aus dieser Datei überschreiben. Dies ermöglicht es z.B., allgemeine Netzwerkeinstellungen in einer Datei festzulegen und speziellere Einstellungen für andere Zwecke/Netze/Orte in anderen Dateien.

# Es kann mehr als eine Datei angegeben werden, getrennt durch Leerzeichen;
# alle werden geladen. Die integrierten Dateien können ebenfalls
# wieder "preseed/include"-Regeln enthalten.
# Bedenken Sie: wenn Sie relative Dateipfade angeben, gehen diese von dem
# gleichen Verzeichnis aus, das auch die Voreinstellungsdatei enthält, in
# der sie integriert sind.
#d-i preseed/include string x.cfg

# Der Installer kann optional die Prüfsummen von Voreinstellungsdateien
# kontrollieren, bevor er diese benutzt. Derzeit werden nur
# md5sum-Prüfsummen unterstützt. Geben Sie die md5sum-Prüfsummen in der
# gleichen Reihenfolge an wie die Dateien, die integriert werden sollen:
#d-i preseed/include/checksum string 5da499872becccfeda2c4872f9171c3d

# Der flexiblere Weg: dies startet ein Shell-Kommando und wenn dies die
# Namen von Voreinstellungsdateien zurückgibt, werden diese integriert:
#d-i preseed/include_command \
#      string if [ "`hostname`" = bob ]; then echo bob.cfg; fi

# Flexibler als alles andere: ein Programm wird heruntergeladen und
# gestartet. Das Programm kann Kommandos wie debconf-set nutzen, um die
# debconf-Datenbank zu manipulieren. Es können auch mehrere Skripte
# angegeben werden, getrennt durch Leerzeichen. Beachten Sie: falls die
# Dateinamen relativ sind, gehen sie vom gleichen Verzeichnis aus wie
# die Voreinstellungsdatei, von der sie gestartet werden.
#d-i preseed/run string foo.sh

Es ist auch möglich, mehrere Voreinstellungsdateien hintereinander zu laden und dabei mit initrd- oder file-Voreinstellung zu beginnnen, danach jedoch mit network-Voreinstellung fortzufahren, indem Sie in den früh geladenen Dateien preseed/url verwenden. Dies führt dazu, dass network-Voreinstellung durchgeführt wird, wenn das Netzwerk aktiv wird. Sie müssen damit vorsichtig sein, da dabei zwei separate Voreinstellungsläufe durchgeführt werden, das bedeutet z.B., es gibt eine weitere Möglichkeit, den Befehl preseed/early zu nutzen (diese zweite Ausführung findet statt, nachdem das Netzwerk aktiviert wurde).