B.2. Voreinstellung nutzen

Zunächst müssen Sie natürlich eine Voreinstellungsdatei erstellen und dort ablegen, wo Sie sie benutzen wollen. Die Erstellung der Datei wird später in diesem Kapitel behandelt. Sie am richtigen Ort zu platzieren, ist recht unkompliziert, wenn Sie die Voreinstellung per Netzwerk oder USB-Stick nutzen möchten. Falls Sie aber die Datei in einem Installations-Image integrieren möchten, müssen Sie das ISO-Image remastern (neu erstellen). Und schließlich: wie Sie die Voreinstellungsdatei in die initrd integrieren können, ist nicht Thema dieses Dokuments; konsultieren Sie die Entwicklerdokumentation des debian-installer.

Eine Beispiel-Voreinstellungsdatei, die Sie als Basis für Ihre Datei verwenden können, ist unter https://www.debian.org/releases/bookworm/example-preseed.txt verfügbar. Sie basiert auf den Konfigurationsfragmenten, die in diesem Kapitel enthalten sind.

B.2.1. Die Voreinstellungsdatei laden

Falls Sie Voreinstellung per initrd benutzen, müssen Sie lediglich sicherstellen, dass die Datei als preseed.cfg im Root-Verzeichnis der initrd existiert. Der Installer wird automatisch überprüfen, ob solch eine Datei existiert und sie laden.

Für alle anderen Voreinstellungsmethoden müssen Sie dem Installer beim Start mitteilen, welche Datei er nutzen soll. Dies wird normalerweise mit einem Boot-Parameter gemacht, den Sie dem Kernel beim Start angeben, entweder manuell zum Boot-Zeitpunkt oder indem Sie die Konfigurationsdatei des Bootloaders editieren (fügen Sie z.B. in syslinux.cfg den Parameter an das Ende der append-Zeile für den Kernel an).

Wenn Sie die Voreinstellungsdatei in der Bootloader-Konfiguration festlegen, möchten Sie vielleicht diese Konfiguration so verändern, dass Sie nicht mehr die Enter-Taste drücken müssen, um den Installer zu booten. In syslinux.cfg müssen Sie dazu den Timeout auf 1 setzen.

Um sicherzustellen, dass der Installer die richtige Voreinstellungsdatei bekommt, können Sie optional eine Prüfsumme für die Datei angeben. Dies muss derzeit eine md5sum-Prüfsumme sein, und wenn sie angegeben ist, muss sie auch passen, ansonsten wird der Installer sich weigern, die Datei zu benutzen.

Boot-Parameter, die Sie angeben müssen
- wenn Sie per Netzwerk booten (netboot):
  preseed/url=http://host/path/to/preseed.cfg
  preseed/url/checksum=5da499872becccfeda2c4872f9171c3d
- oder
  preseed/url=tftp://host/path/to/preseed.cfg
  preseed/url/checksum=5da499872becccfeda2c4872f9171c3d

- wenn Sie von einem angepassten (remastered) Installations-Image
  booten:
  preseed/file=/cdrom/preseed.cfg
  preseed/file/checksum=5da499872becccfeda2c4872f9171c3d

- wenn Sie von einem USB-Medium installieren (legen Sie die
  Voreinstellungsdatei im Toplevel-(Haupt)-Verzeichnis des USB-Sticks ab):
  preseed/file=/hd-media/preseed.cfg
  preseed/file/checksum=5da499872becccfeda2c4872f9171c3d

Beachten Sie, dass preseed/url auch einfach mit url abgekürzt werden kann, preseed/file mit file und preseed/file/checksum mit preseed-md5, wenn diese Argumente als Boot-Parameter an den Kernel übergeben werden.

B.2.2. Boot-Parameter nutzen, um Fragen automatisiert zu beantworten

Falls eine Voreinstellungsdatei für einige Schritte nicht verwendet werden kann, kann die Installation trotzdem voll automatisiert werden, da Sie auch Voreinstellungswerte per Kommandozeile an den Kernel übergeben können.

Boot-Parameter können auch verwendet werden, wenn zwar Voreinstellung generell nicht verwendet, aber eine Antwort für eine spezielle Frage vorgegeben werden soll. Einige Beispiele, wofür das sinnvoll sein kann, sind an anderer Stelle in diesem Handbuch dokumentiert.

Um einen Wert festzulegen, der innerhalb des debian-installers verwendet werden soll, geben Sie einfach Pfad/zur/Variable=Wert für jede Voreinstellungsvariable, die in den Beispielen dieses Kapitels aufgelistet ist, am Boot-Prompt an. Falls ein Wert verwendet werden soll, um Pakete für das Zielsystem zu konfigurieren, müssen Sie den Eigentümer (owner[19]) der Variable voranstellen wie hier: Eigentümer:Pfad/zur/Variable=Wert. Geben Sie den Eigentümer nicht an, wird der Wert der Variable nicht in die debconf-Datenbank des Zielsystems kopiert und bleibt deshalb bei der Konfiguration des entsprechenden Pakets ungenutzt.

Eine Frage auf diese Art voreinzustellen führt normalerweise dazu, dass die Frage überhaupt nicht gestellt wird. Um lediglich eine andere Vorauswahl (Standardantwort) einzustellen, aber die Frage trotzdem stellen zu lassen, verwenden Sie als Operator ?= statt =. Siehe auch Abschnitt B.5.2, „Voreinstellung nutzen, um Standardantworten auf Fragen zu ändern“.

Hinweis: einige Variablen, die oft am Boot-Prompt verwendet werden, haben einen kurzen Alias (Abkürzung). Wenn ein Alias vorhanden ist, wird er in den Beispielen in diesem Kapitel auch verwendet (statt der langen Fassung). Die preseed/url-Variable zum Beispiel hat den Alias url. Ein anderes Beispiel ist der Alias tasks, der in tasksel:tasksel/first übersetzt wird.

Ein --- in den Boot-Optionen hat eine spezielle Bedeutung. Alle Kernelparameter, die hinter dem letzten --- stehen, werden in die Bootloader-Konfiguration des installierten Systems kopiert (wenn der Installer des Bootloaders dies unterstützt). Der Installer wird automatisch alle Optionen (z.B. Voreinstellungsoptionen) ausfiltern, die er erkennt.

[Anmerkung] Anmerkung

Aktuelle Linux-Kernel (2.6.9 oder später) akzeptieren ein Maximum von 32 Kommandozeilenoptionen und 32 Umgebungsoptionen, inklusive einiger Optionen, die standardmäßig für den Installer hinzugefügt werden. Wird diese Zahl überschritten, wird der Kernel eine Panic melden (abstürzen). (Bei älteren Kernels lagen diese Zahlen niedriger.)

Einige der Standardoptionen, wie vga=normal, können bei den meisten Installationen getrost entfernt werden, was es erlaubt, mehr Optionen für Voreinstellungen zu verwenden.

[Anmerkung] Anmerkung

Es könnte teilweise unmöglich sein, Boot-Parameter mit Werten zu verwenden, die Leerzeichen enthalten, sogar wenn Sie sie mit Anführungszeichen einfassen.

B.2.3. Auto-Modus

Es gibt etliche Features des Debian Installers, die es erlauben, mit ziemlich einfachen Kommandozeilen am Boot-Prompt zu komplexen angepassten automatisierten Installationen zu kommen.

Dies wird über die Auswahl Automated install im Boot-Menü aktiviert, für einige Architekturen oder Boot-Methoden auch auto genannt. In diesem Kapitel ist auto daher kein Parameter, sondern bedeutet die Auswahl des genannten Boot-Menü-Eintrags und das Hinzufügen der folgenden Boot-Parameter am Boot-Prompt. In Abschnitt 5.1.5, „Der Start-Bildschirm (Boot-Screen)“ finden Sie Informationen darüber, wie Sie einen Boot-Parameter hinzufügen.

Um dies zu demonstrieren, hier einige Beispiele, die Sie am Boot-Prompt verwenden können:

auto url=autoserver

Bedingung hierfür ist, dass ein DHCP-Server existiert, der den Rechner an den Punkt bringt, wo autoserver per DNS aufgelöst werden kann, eventuell indem die lokale Domäne hinzugefügt wird, falls sie per DHCP mitgeliefert wird. Wenn das auf einer Site passiert, auf der die Domäne example.com lautet und es existiert ein gesundes DHCP-Setup, führt das dazu, dass die Voreinstellungsdatei von http://autoserver.example.com/d-i/bookworm/./preseed.cfg empfangen wird.

Der letzte Teil der URL (d-i/bookworm/./preseed.cfg) stammt von auto-install/defaultroot. Standardmässig ist dabei das Verzeichnis bookworm enthalten, damit zukünftige Versionen einen eigenen Codenamen festlegen können, um den Leuten eine kontrollierte Migration zu ermöglichen. Der Teil /./ des Pfades wird genutzt, um das Root-Verzeichnis relativ zu den späteren Pfaden, die verankert werden können, zu bezeichnen. Hierdurch können Dateien durch eine komplette URL angegeben werden (mit Pfaden, die mit / beginnen und entsprechend verankert sind oder sogar mit Pfaden relativ zu dem Verzeichnis, in dem die letzte Voreinstellungsdatei gefunden wurde). Dies kann genutzt werden, um Skripte zu entwerfen, die in höherem Maße portierbar sind, so dass eine komplette Hierachie von Skripten an einen neuen Ort verschoben werden kann, ohne sie total zu zerstören (z.B. Skripte auf einen USB-Stick verschieben, während sie auf einem Webserver entwickelt wurden). Ein Beispiel: die Voreinstellungsdatei setzt preseed/run auf /scripts/late_command.sh, dann wird die Datei von http://autoserver.example.com/d-i/bookworm/./scripts/late_command.sh heruntergeladen.

Falls keine lokale DHCP- oder DNS-Infrastruktur existiert oder falls Sie nicht den Standardpfad zu der Datei preseed.cfg nutzen möchten, können Sie trotzdem eine explizite URL angeben, und wenn Sie dabei nicht das Element /./ im Pfad benutzen, wird sie passend am Anfang des Pfades verankert (z.B. das dritte / in der URL). Hier ein Beispiel, das nur minimale Unterstützung von der lokalen Netzwerkinfrastruktur erfordert:

auto url=http://192.168.1.2/path/to/mypreseed.file

Das funktioniert so:

  • falls in der URL das Protokoll fehlt, wird http angenommen,

  • falls der Teil des Rechnernamens keinen Punkt enthält, wird die Domäne, die vom DHCP abgeleitet wird, angehängt und

  • falls nach dem Rechnernamen kein / folgt, wird der Standardpfad hinzugefügt.

Zusätzlich zur Angabe der URL können Sie auch Einstellungen angeben, die nicht direkt das Verhalten des debian-installer selbst beeinflussen, sondern an Skripte weitergeleitet werden, die mit preseed/run in der geladenen Voreinstellungsdatei festgelegt sind. Derzeit ist das einzige solche Beispiel auto-install/classes, was den Alias classes hat. Dies kann entsprechend so genutzt werden:

auto url=example.com classes=class_A;class_B

Die Klassen können zum Beispiel den Systemtyp, der installiert werden soll, festlegen oder die Lokalisierung, die Sie nutzen möchten.

Natürlich ist es möglich, dieses Konzept zu erweitern und dabei ist es sinnig, den auto-install-Namensraum dafür zu nutzen. Sie könnten z.B. etwas wie auto-install/style verwenden, was dann in Ihren Skripten genutzt wird. Falls Sie meinen, dass so etwas benötigt wird, erwähnen Sie es doch auf der Mailingliste , so dass wir Namenskonflikte vermeiden und vielleicht einen Alias dafür hinzufügen können.

Die Auswahl auto im Boot-Menü ist noch nicht auf allen Architekturen definiert. Der gleiche Effekt kann jedoch auch erreicht werden, indem die beiden Parameter auto=true priority=critical zur Kernel-Kommandozeile hinzugefügt werden. Der Kernel-Parameter auto ist ein Alias für auto-install/enable und wenn er auf true gesetzt ist, werden die Fragen über Gebietsschema und Tastatur so weit zurückgestellt, bis eine Chance besteht, sie per Voreinstellung zu setzen. priority ist ein Alias für debconf/priority, und wenn er auf critical gesetzt wird, unterdrückt das alle Fragen mit einer niedrigeren Priorität.

Zusätzliche Optionen, die eventuell interessant sein könnten für eine automatisierte Installation mittels DHCP: interface=auto netcfg/dhcp_timeout=60. Das sorgt dafür, dass die erste funktionsfähige Netzwerkkarte genutzt wird und dass etwas mehr Zeit für die Antwort auf eine DHCP-Anfrage gegeben wird.

[Tipp] Tipp

Ein ausführliches Beispiel, wie Sie dieses Framework nutzen können, inklusive Beispielskripte und -klassen finden Sie auf der Webseite des Entwicklers. Die dort verfügbaren Beispiele zeigen auch viele andere tolle Effekte, die durch kreative Nutzung von Voreinstellung erreicht werden können.

B.2.4. Für Voreinstellung nützliche Aliase

Die folgenden Aliase könnten nützlich sein, wenn Sie Voreinstellung (im Auto-Modus) benutzen. Beachten Sie, dass dies einfach nur kurze Alias für Fragen-Namen sind und dass Sie immer auch einen Wert angeben müssen, zum Beispiel auto=true oder interface=eth0.

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

B.2.5. Beispiele für Voreinstellung via Boot-Prompt-Zeile

Hier einige Beispiele, wie Zeilen am Boot-Prompt aussehen könnten (Sie müssen sie natürlich an Ihre Bedürfnisse anpassen; schauen Sie sich auch Abschnitt 5.1.5, „Der Start-Bildschirm (Boot-Screen)“ an).

# Um Französisch als Sprache zu setzen und Frankreich als Land:
/install.amd/vmlinuz vga=788 initrd=/install.amd/gtk/initrd.gz language=fr country=FR --- quiet
# Um Englisch als Sprache zu setzen und Deutschland als Land, sowie ein
# deutsches Tastaturlayout zu verwenden:
/install.amd/vmlinuz vga=788 initrd=/install.amd/gtk/initrd.gz language=en country=DE locale=en_US.UTF-8 keymap=de --- quiet
# Um die MATE-Desktop-Umgebung zu installieren:
/install.amd/vmlinuz vga=788 initrd=/install.amd/gtk/initrd.gz desktop=mate-desktop --- quiet
# Um die Programmgruppe web-server zu installieren:
/install.amd/vmlinuz initrd=/install.amd/initrd.gz tasksel:tasksel/first=web-server ---

B.2.6. Voreinstellungsdateien mittels eines DHCP-Servers festlegen

Es ist auch möglich, DHCP zu benutzen, um eine Voreinstellungsdatei anzugeben, die vom Netzwerk heruntergeladen werden soll. DHCP erlaubt es, einen Dateinamen anzugeben. Normalerweise ist dies eine Datei für das Booten per Netzwerk; wenn sie jedoch als URL angegeben wird, wird das Installationsmedium (dies muss Voreinstellung per Netzwerk unterstützen) die Datei von der URL herunterladen und als Voreinstellungsdatei benutzen. Hier ein Beispiel, wie Sie die dhcpd.conf für den ISC-DHCP-Server Version 3 (aus dem Debian-Paket isc-dhcp-server) einstellen müssen:

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

Beachten Sie, dass das obige Beispiel die Angabe des Dateinamens auf DHCP-Clients beschränkt, die sich selbst als d-i identifizieren; es wird also keine regulären DHCP-Clients beeinflussen, sondern nur Rechner, auf denen der Installer läuft. Sie können den Text auch in einen Absatz der Datei einfügen, der nur für einen bestimmten Rechner gilt, um zu vermeiden, dass ALLE Installationen im Netzwerk voreingestellt werden.

Eine gute Sache für die Voreinstellung per DHCP ist es, nur Werte vorzugeben, die netzwerkspezifisch sind, wie der zu nutzende Debian-Spiegel-Server. Auf diese Weise wird bei allen Installationen im Netzwerk automatisch ein passender Spiegel-Server gewählt, aber der Rest der Installation kann interaktiv vonstatten gehen. Eine voll automatisierte Debian-Installation per DHCP-Voreinstellung sollte nur mit Vorsicht durchgeführt werden.



[19] Der Eigentümer (owner) einer debconf-Variable (oder eines Templates) ist normalerweise der Name des Pakets, das die entsprechende debconf-Vorlage enthält. Bei Variablen, die im Installer selbst verwendet werden, ist der Eigentümer d-i. Vorlagen und Variablen können auch mehr als einen Eigentümer haben, was dabei hilfreich sein kann, herauszufinden, ob sie aus der debconf-Datenbank entfernt werden können, wenn das Paket komplett vom System entfernt wird.