linux-ubuntu-debian debian automation preseed deployment

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.dat an. 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.