Debian Installer Preseed Automation (Artikel 004)
Detaillierte Anleitung zur Automatisierung des Debian-Installationsprozesses mittels Preseeding. Ideal für Massen-Deployments und PXE-Boot-Szenarien.
# Debian Installer Preseed: Automatisierung bis zum Bare-Metal
TL;DR / Management Summary Preseeding ist die Methode, um dem Debian-Installer (
d-i) Antworten auf Fragen vorzugeben, die er normalerweise interaktiv stellt (Sprache, Partitionierung, Spiegelserver). Durch eine einfache Textdatei (preseed.cfg) lässt sich eine Debian-Installation von “Zero to Hero” vollautomatisieren. Dies ist das Debian-Pendant zu Ubuntus Autoinstall oder RedHats Kickstart.
# 1. Einführung & Konzepte
Weg von der manuellen Arbeit.
# Wie Preseeding funktioniert
Der Debian-Installer basiert auf einer modularen Datenbank namens debconf. Jede Einstellung (z.B. der Hostname) ist ein Key-Value-Paar in dieser Datenbank. Preseeding füllt diese Datenbank vorab.
# Bereitstellungs-Methoden
Man kann die preseed.cfg auf verschiedene Arten übergeben:
- Initrd: Die Datei wird direkt in das Installations-Image gepackt (ideal für USB-Sticks/ISOs).
- File: Übergabe via Dateipfad beim Booten.
- Network (DHCP/TFTP): Der Installer lädt die Datei via HTTP oder TFTP (Standard für PXE-Boot).
graph TD
A[PXE Boot / ISO] --> B[Bootloader: Append Preseed URL]
B --> C[Debian Installer starts]
C --> D[Fetch preseed.cfg]
D --> E[Automated: Partitioning, Mirror, Users]
E --> F[Finish: Reboot into OS]
# 2. Die Anatomie der preseed.cfg
Struktur und Syntax.
Eine Preseed-Zeile hat immer das Format:
<Besitzer> <Frage> <Typ> <Wert>
# Beispiel: Lokalisierung & Mirror
# Sprache und Land
d-i debian-installer/locale string de_DE
d-i keyboard-configuration/xkb-keymap select de
# Spiegelserver (Mirror)
d-i mirror/country string manual
d-i mirror/http/hostname string deb.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string
# Beispiel: Benutzer & Passwörter
# Root-Account (deaktiviert, wir nutzen sudo)
d-i passwd/root-login boolean false
# Normaler User
d-i passwd/user-fullname string Admin
d-i passwd/username string admin
# Passwort 'secret' (klartext nur zum Testen, sonst krypted!)
d-i passwd/user-password password secret
d-i passwd/user-password-again password secret
d-i user-setup/allow-password-weak boolean true
d-i user-setup/encrypt-home boolean false
# 3. Die Königsdisziplin: Partitionierung
Hier entstehen die meisten Fehler.
Die Partitionierung wird über das Modul partman gesteuert. Es ist mächtig, aber die Syntax ist gewöhnungsbedürftig.
# Beispiel: LVM mit einer großen Partition
d-i partman-auto/method string lvm
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-lvm/confirm boolean true
d-i partman-lvm/confirm_nooverwrite boolean true
d-i partman-auto-lvm/guided_size string max
d-i partman-auto/choose_recipe select atomic
d-i partman/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
# 4. Post-Installation: Der Feinschliff
Was passiert nach dem Kopieren der Dateien?
Mit preseed/late_command können beliebige Shell-Befehle am Ende der Installation ausgeführt werden (z.B. SSH-Keys kopieren, Skripte laden).
d-i preseed/late_command string \
in-target apt-get update; \
in-target apt-get install -y openssh-server qemu-guest-agent; \
in-target sed -i 's/#PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
# 5. Deployment in der Praxis
Wie starte ich die Installation?
# via Boot-Prompt (PXE/ISO)
Drücken Sie im Boot-Menü TAB oder E und hängen Sie folgendes an die linux-Zeile an:
auto=true priority=critical url=http://192.168.1.10/preseed.cfg
auto=true: Startet die Automatisierung sofort.priority=critical: Verhindert alle Fragen, außer es gibt einen fatalen Fehler.
# 6. Troubleshooting & “War Stories”
Vermeiden Sie die klassischen Stolperfallen.
# Story 1: “Hängt bei der Spiegelserver-Suche”
Symptom: Der Installer bleibt stehen und fragt nach dem Mirror.
Ursache: Das Netzwerk ist zu diesem Zeitpunkt noch nicht bereit (DHCP-Delay).
Lösung: Nutzen Sie netcfg/get_hostname und netcfg/get_domain im Preseed und stellen Sie sicher, dass mirror/http/proxy explizit leer gesetzt ist (string), wenn kein Proxy existiert.
# Story 2: “Festplatte wird nicht gefunden”
Symptom: Der Installer fragt, auf welches Device er installieren soll.
Ursache: Mehrere Disks im System (z.B. USB-Stick und SSD).
Lösung: Pinnen Sie die Disk via Device-Pfad:
d-i partman-auto/disk string /dev/sda
(Aber Vorsicht: Auf NVMe heißt es /dev/nvme0n1).
# 7. Fazit & Empfehlung
Preseeding ist extrem stabil, aber die Erstellung der Datei ist mühsam.
- Tipp: Installieren Sie ein System manuell und schauen Sie sich danach die Datei
/var/lib/debconf/questions.datan. Dort finden Sie alle Antworten, die Sie in Ihr Preseed übernehmen können. - Alternative: Für modernere Workflows und Ubuntu nutzen Sie Autoinstall (YAML). Preseed bleibt jedoch für Debian-Puristen und Bare-Metal PXE-Szenarien unverzichtbar.