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 von Floppy oder USB-Stick nutzen möchten. Falls Sie aber die Datei auf einer CD oder DVD 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 http://www.debian.org/releases/squeeze/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:
  preseed/url=http://host/path/to/preseed.cfg
  preseed/url/checksum=5da499872becccfeda2c4872f9171c3d

- wenn Sie von einer neu erstellten (remastered) CD 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 und preseed/file mit file, 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 vom debian-installer verwendet werden soll, geben Sie einfach Pfad/zur/Variable=Wert für jede Voreinstellungsvariable, die in den Beispielen dieses Abschnitts 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[21]) 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 dahinter 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

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

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. 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/squeeze/./preseed.cfg empfangen wird.

Der letzte Teil der URL (d-i/squeeze/./preseed.cfg) stammt von auto-install/defaultroot. Standardmässig ist dabei das Verzeichnis squeeze 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/squeeze/./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 auch eine explizite URL angeben, und wenn Sie dabei nicht das Element /./ im Pfad benutzen, wird sie passend zum 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 Hostnamens keinen Punkt enthält, wird die Domäne, die vom DHCP abgeleitet wird, angehängt und

  • falls nach dem Hostnamen 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-Namespace 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 Sie dies benötigen, erwähnen Sie es doch auf der Mailingliste , so dass wir Namespace-Konflikte vermeiden können und vielleicht einen Alias dafür hinzufügen.

Das auto-Boot-Label ist noch nicht überall definiert. Der gleiche Effekt kann auch erreicht werden, indem die beiden Parameter auto=true priority=critical zur Kernel-Kommandozeile hinzugefügt werden. Der Parameter auto ist ein Alias für auto-install/enable und wenn er auf true gesetzt ist, werden die Fragen über Locale 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 bis zur Antwort auf eine DHCP-Anfrage gegeben wird.

Tipp

Ein ausführliches Beispiel, wie Sie dies Framework nutzen, inklusive Beispielskripte und -klassen finden Sie auf der Webseite des Entwicklers. Die dort verfügbaren Beispiele zeigen auch viele andere tolle Effekte, die bei kreativer 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-Namen für Fragen-Namen sind und dass Sie immer auch einen Wert angeben müssen, zum Beispiel auto=true oder interface=eth0.

auto auto-install/enable
classes auto-install/classes
fb debian-installer/framebuffer
language debian-installer/language
country debian-installer/country
locale debian-installer/locale
priority debconf/priority
file preseed/file
url preseed/url
interface netcfg/choose_interface
hostname    netcfg/get_hostname
domain netcfg/get_domain
protocol mirror/protocol
suite mirror/suite

B.2.5. 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 (das Debian-Paket dhcp3-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-Klienten beschränkt, die sich selbst als »d-i« identifizieren; es wird also keine regulären DHCP-Klienten 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 Host 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.



[21] 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.