Website-Suche

Wie man unbeaufsichtigte Debian-Installationen mit Preseed durchführt


Preseed ist das Äquivalent zu Kickstart für die RedHat-Distributionsfamilie und "autoinstall" für Ubuntu. Indem wir eine "Preseed"-Datei vorbereiten und sie mit Antworten auf die Fragen füllen, die der Debian-Installer stellt, können wir unbeaufsichtigte und replizierbare Debian-Installationen durchführen. In diesem Tutorial lernen wir, wie man eine Preseed-Datei erstellt oder sie aus einer bestehenden Installation generiert und wie man sie an den Debian-Installer weitergibt.

In diesem Tutorial lernen Sie:

  • Wie man eine Preseed-Datei erstellt oder sie aus einer bestehenden Debian-Installation generiert
  • Wie man eine Preseed-Datei an den Debian-Installer übergibt

Einfügen einer Preseed-Datei aus einer bestehenden Debian-Installation

Beginnen wir mit dem einfachsten Weg, um eine gültige Preseed-Datei zu erhalten. Angenommen, wir haben bereits eine Debian-Installation durchgeführt, um die Preseed-Datei mit den Antworten zu erhalten, die wir dem Installer gegeben haben, können wir einfach das Dienstprogramm debconf-get-selections verwenden, das Teil des Pakets debconf-utils ist. Um sicherzustellen, dass letzteres installiert ist, können wir Folgendes ausführen:

sudo apt-get update && sudo apt-get install debconf-utils

Sobald das Dienstprogramm installiert ist, führen wir den folgenden Befehl aus, um die Preseed-Datei zu erhalten:

sudo debconf-get-selections --installer > preseed.cfg

Im obigen Beispiel haben wir die Ausgabe des Befehls in eine Datei namens preseed.cfg umgeleitet. Dies kann verwendet werden, um die Installation zu replizieren, und wiederholt die Auswahl, die wir manuell im Debian-Installer getroffen haben. Zugegebenermaßen ist die Datei zwar effizient, kann aber ziemlich ausführlich sein. Sehen wir uns an, wie Sie eine mit dem absoluten Minimum an Inhalt erstellen.

Erstellen einer Preseed-Datei von Grund auf neu

Sehen wir uns an, wie Sie eine Preseed-Datei von Grund auf neu erstellen. Als Ansatz werden wir die wichtigsten Schritte des Debian-Installers durchgehen und versuchen, die Fragen über Anweisungen in der Preseed-Konfigurationsdatei zu beantworten.

Wenn wir Debian installieren und die Option "Grafische Installation" auswählen, ist die erste Frage, die uns der Installer stellt, welche Sprache für das System verwendet werden soll (Englisch ist die Standardwahl), unser Standort und das gewünschte Tastaturlayout. In unserer Preseed-Datei können wir mit den folgenden Anweisungen Antworten auf diese Fragen geben:

d-i debian-installer/language string en
d-i debian-installer/country string US
d-i keyboard-configuration/xkb-keymap select us

Die Syntax, die wir verwenden müssen, wenn wir Antworten auf den Installer geben, ist diejenige, die vom Dienstprogramm debconf-set-selections verwendet wird:

<owner> <question-name> <question-type> <value>

Im ersten Feld geben wir den "Eigentümer" der Frage an, der die Antwort bearbeiten wird. In den allermeisten Fällen wird dies in der Preseed-Datei "d-i" sein, was für Debian-Installer steht. Das zweite Feld enthält den Namen der Frage, das dritte den Fragetyp. Das vierte Feld schließlich enthält den Wert, die Antwort auf die Frage selbst.

Konfigurieren des Netzwerks

Gehen wir weiter. Der nächste Schritt in einer Standard-Debian-Installation ist die Netzwerkkonfiguration. Der Installer bittet uns, einen Hostnamen und eine optionale Domain für unser System anzugeben, und konfiguriert das Netzwerk zumindest im "nicht-erweiterten" Installationsmodus automatisch über einen DHCP-Server, falls einer im LAN verfügbar ist. Hier verwenden wir nur als Beispiel "linuxconfig" als Hostnamen und lassen das Feld domain leer. In unserer Preseed-Datei übersetzen wir diese Auswahlmöglichkeiten, indem wir die folgenden Anweisungen hinzufügen:

d-i netcfg/get_hostname string linuxconfig
d-i netcfg/get_domain string

In bestimmten Situationen möchten wir das Netzwerk möglicherweise statisch konfigurieren, ohne auf einen DHCP-Server angewiesen zu sein. Wenn die Anweisungen im folgenden Beispiel zu einer Preseed-Datei hinzugefügt werden, deaktivieren Sie die automatische Netzwerkkonfiguration, wählen Sie explizit eine Netzwerkschnittstelle aus (in diesem Fall "eth0") und weisen Sie ihr eine IP-Adresse zu. Der Netzmaskenwert wird zusammen mit den Gateway- und Nameserver-Adressen ebenfalls statisch zugewiesen. Die letzte Anweisung wird benötigt, um diese Auswahl ohne Aufforderung zu bestätigen:

d-i netcfg/disable_autoconfig boolean true
d-i netcfg/choose_interface select eth0
d-i netcfg/get_ipaddress string 192.168.122.150
d-i netcfg/get_netmask string 255.255.255.0
d-i netcfg/get_gateway string 192.168.122.1
d-i netcfg/get_nameservers string 192.168.122.1
d-i netcfg/confirm_static boolean true

Es ist wichtig zu beachten, dass Netzwerkanweisungen, die in der Preseed-Datei gemeldet werden, nur dann wirksam sind, wenn die Preseed-Datei selbst nicht aus dem Netzwerk abgerufen wird (z. B. von einem Webserver). Dies ist ein typisches Henne-Ei-Problem: Um die Preseed-Datei mit den Anweisungen zur Konfiguration des Netzwerks abzurufen, muss das Netzwerk selbst bereits konfiguriert sein. Wir können dieses Problem mit einem DHCP-Server umgehen oder, wie wir sehen werden, indem wir Netzwerkkonfigurationsanweisungen als Boot-Argumente bereitstellen.

Konfigurieren von Systembenutzern

Der nächste Schritt bei der Installation des Betriebssystems besteht darin, Benutzer und Passwörter einzurichten. Normalerweise möchten wir das root-Passwort leer lassen und die Standardbenutzerinformationen angeben: den "vollständigen Namen" (den "echten" Namen), den Benutzernamen und das Passwort. Dadurch wird das Root-Konto gesperrt und wir können administrative Aufgaben mit sudo ausführen. In der Preseed-Datei übersetzen wir es, indem wir schreiben:

d-i passwd/root-login boolean false
d-i passwd/user-fullname string egidio
d-i passwd/username string egidio
d-i passwd/user-password-crypted password $6$GjYHPm0qkEd/Ijea$msrqFWfBzuVsVtlTbD.8mbRTq3I5lBegbv1ZtNMse5YyTohQIrMoz.m37lMzVwEm75Klp9bCVU12ySg.7twFj0

Beachten Sie, dass wir das Passwort im Installationsprogramm im Klartext angeben, während wir es in der Preseed-Datei im Hash-Format mit dem sha512-Algorithmus bereitstellen müssen. Eine der schnellsten Methoden, um einen Hash + Salt eines Passworts zu erhalten, ist die Verwendung des Dienstprogramms mkpasswd:

mkpasswd -m sha512crypt

Sobald wir den obigen Befehl starten, fordert uns das Dienstprogramm auf, unser Passwort einzugeben, und gibt die gehashte und gesalzene Version aus. Wir könnten das Passwort auch direkt als Argument angeben, aber das kann es in den Prozesslisten sichtbar machen, und es kann auch in unserer Shell-Historie gespeichert werden. Wenn wir das Passwort in der Preseed-Datei nicht angeben, fragt das Installationsprogramm interaktiv danach, wie bei allen anderen fehlenden Informationen.

Angeben einer Zeitzone

Im nächsten Schritt fordert uns das Installationsprogramm auf, die Systemzeitzone auszuwählen. Um beispielsweise die "östliche" Zeitzone der USA auszuwählen, würden wir schreiben:

d-i time/zone string US/Eastern

Partitionieren des Datenträgers

Das Partitionieren des Datenträgers ist wahrscheinlich der wichtigste Teil des Installationsprozesses und kann auch einer der komplexesten sein, der in der Preseed-Datei gemeldet werden muss. Der Debian-Installer lässt uns standardmäßig zwischen drei geführten Partitionierungs-"Methoden" wählen:

  1. Geführt – gesamte Festplatte verwenden
  2. Geführt – gesamte Festplatte verwenden und LVM einrichten
  3. Geführt – verwenden Sie die gesamte Festplatte und richten Sie verschlüsselte LVM ein

Der Installer verfügt über eine vierte Option, "Manuell", mit der wir ein individuelleres Partitionierungsschema erstellen können. An dieser Stelle des Tutorials werden wir sehen, wie das vorkonfigurierte Rezept "LVM" übersetzt wird. Später werden wir auch sehen, wie man ein benutzerdefiniertes Rezept verwendet. Hier gehe ich davon aus, dass wir mit einer modernen UEFI-Firmware laufen, und die Festplatte, die wir für die Debian-Installation verwenden möchten, ist /dev/vda.

Als erstes teilen wir dem Installer explizit mit, dass wir eine GPT-Partitionstabelle verwenden und die vda-Festplatte für die Installation verwenden möchten:

d-i partman-partitioning/choose_label string gpt
d-i partman-auto/disk string /dev/vda

Wenn auf der Festplatte bereits lvm- oder raid-Partitionen vorhanden sind, gibt das Installationsprogramm eine Warnung aus. Um dies zu vermeiden, können wir die folgenden Anweisungen in die Preseed-Datei aufnehmen:

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

Als Nächstes wählen wir die LVM-Installationsmethode aus und geben an, dass wir den gesamten verfügbaren Speicherplatz für die LVM-Volume-Gruppe verwenden möchten:

d-i partman-auto/method string lvm
d-i partman-auto-lvm/guided_size string max

An dieser Stelle können wir zwischen den drei verfügbaren Partitionierungsschemata wählen: Das erste installiert das gesamte System in einer Partition ("atomare" Wahl), das zweite erstellt eine separate Partition für /home ("home"-Wahl) und das dritte erstellt separate Partitionen (logische Volumes, um genau zu sein) für /home, /var und /tmp ("Mehrfach"-Wahl). Hier wählen wir die zweite Option:

d-i partman-auto/choose_recipe select home

Schließlich teilen wir dem Installer mit, dass wir die Partitionen fertig eingerichtet haben, wir bestätigen unsere Auswahl und schreiben sie auf die Festplatte:

d-i partman-partitioning/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

Konfigurieren des Paketmanagers

Der Installer lässt uns wählen, ob wir einen Repository-Spiegel für apt verwenden möchten, welchen wir verwenden möchten und ob wir einen HTTP-Proxy verwenden möchten/müssen. In diesem Beispiel teilen wir dem Installationsprogramm explizit mit, dass wir einen Spiegel in den USA (deb.debian.org) verwenden möchten, und lassen das Proxy-Feld leer:

d-i apt-setup/use_mirror boolean true
d-i mirror/country string US
d-i mirror/http/mirror select deb.debian.org
d-i mirror/http/proxy string

Um die Eingabeaufforderung zu überspringen, in der wir gefragt werden, ob wir zusätzliche Installationsmedien scannen möchten, verwenden wir die folgende Anweisung:

d-i apt-setup/cdrom/set-first boolean false

Wenn wir das System von einem Nicht-Netinstall-Image installieren, wird standardmäßig der Eintrag "cdrom" als Softwarequelle in der Datei /etc/apt/source.list gespeichert. Um dies zu vermeiden, fügen wir die folgende Zeile zu unserer Preseed-Datei hinzu:

d-i apt-setup/disable-cdrom-entries boolean true

Wir können auch wählen, ob wir an der Umfrage zur Paketnutzung teilnehmen möchten. Hier sagen wir "nein" (was sowieso die Standardeinstellung ist):

popularity-contest popularity-contest/participate boolean false

Auswählen, welche Pakete installiert werden sollen

Der Debian-Installer verwendet tasksel, um uns auswählen zu lassen, welche Pakete im System installiert werden sollen. Die verfügbaren Optionen (zumindest auf Debian Bookworm) sind:

  • Debian-Desktop-Umgebung
  • ...GNOM
  • ...Xfce
  • ...GNOME Rückblende
  • ...KDE-Plasma
  • ...Zimt
  • ...PARTNER
  • ...LXDE
  • ...LXQt
  • Webserver
  • SSH-Server
  • Standard-Systemdienstprogramme
  • Laptop

Hier haben wir uns entschieden, die GNOME-Desktop-Umgebung, die Standard-Systemdienstprogramme und die ssh-Server-Metapakete zu installieren:

tasksel tasksel/first multiselect gnome-desktop,standard,ssh

Um einzelne Pakete zu installieren, können wir stattdessen die Option pkgsel/include verwenden und eine durch Leerzeichen getrennte Liste von Paketnamen nachweisen. Nur als Beispiel, um vim und git zu installieren, würden wir schreiben:

d-i pkgsel/include string vim git

Abschließen der Installation und Neustart

Um die Installation und den Neustart abzuschließen, fügen wir der Datei die folgenden Zeilen hinzu:

d-i finish-install/reboot_in_progress note
d-i cdrom-detect/eject boolean false

Wir verwenden die erste Anweisung, um die Eingabeaufforderung zu überspringen, in der wir gefragt werden, ob wir das System neu starten möchten, sobald die Installation abgeschlossen ist. Wir verwenden stattdessen letzteres, um die Warnung vor dem Auswerfen der CD-ROM vor dem Neustart zu vermeiden.

Übergabe der Preseed-Datei an den Debian-Installer

Um die Preseed-Datei an den Debian-Installer zu übergeben, haben wir grundsätzlich zwei Möglichkeiten. Die erste besteht darin, den Eintrag "Erweiterte Optionen" im Startmenü des Installationsprogramms auszuwählen und dann entweder "Grafische automatisierte Installation" oder "Automatisierte Installation" auszuwählen. Wenn wir dies tun, lädt der Installer die benötigten Module, versucht, das Netzwerk zu konfigurieren, und fordert uns auf, die URL der gewünschten Datei anzugeben:

Die andere Möglichkeit besteht darin, einen bestehenden Menüeintrag zu ändern. Hier ist ein Beispiel: Angenommen, unsere Preseed-Datei ist bei http://192.168.0.35/preseed.cfg verfügbar. Wir könnten den ersten Eintrag, "Graphical install", ändern, indem wir die folgende Zeichenkette an die Zeile "linux" anhängen, so dass sie wie folgt lautet:

linux    /install.amd/vmlinuz vga=788 --- quiet auto=true url=http://192.168.0.35/preseed.cfg

Die Option auto (auf true gesetzt, nur "auto" funktioniert meiner Erfahrung nach nicht) wird benötigt, um die Installation im automatisierten Modus zu starten, in dem das Netzwerk automatisch über DHCP konfiguriert wird, bevor die Preseed-Datei abgerufen wird, und Fragen zu Locale und Keymap verschoben werden, damit sie über die Preseed-Datei konfiguriert werden.

Die Installation wird jedoch nicht vollständig automatisiert sein, da der Installer weiterhin nach einem Hostnamen und einer optionalen Domain fragt. Erst wenn wir diese Informationen bereitstellen, wird die Preseed-Datei abgerufen und zur Beantwortung der anderen Fragen zum Installationsprogramm verwendet. Für eine vollautomatische Installation können wir beim Abrufen der Preseed-Datei aus dem Netzwerk den Hostnamen und den Domainnamen frühzeitig als Boot-Argumente angeben. Zum Beispiel:

linux    /install.amd/vmlinuz vga=788 --- quiet auto=true url=http://192.168.0.35/preseed.cfg netcfg/get_hostname=linuxconfig netcfg/get_domain=""

Wenn wir möchten, können wir diese Methode verwenden, um das Netzwerk statisch zu konfigurieren, so dass ein DHCP-Server nicht erforderlich ist:

linux    /install.amd/vmlinuz vga=788 --- quiet \
  auto=true \
  url=http://192.168.0.35/preseed.cfg \ 
  netcfg/get_hostname=linuxconfig \
  netcfg/get_domain="" \
  netcfg/disable_autoconfig=true \
  netcfg/choose_interface=eth0 \
  netcfg/get_ipaddress=192.168.122.150 \
  netcfg/get_netmask=255.255.255.0 \
  netcfg/get_gateway=192.168.122.1 \
  netcfg/get_nameservers=192.168.122.1 \
  netcfg/confirm_static=true

Als Alternative können Preseed-Dateien in das Debian-ISO-Dateisystem oder in das initramfs eingebunden werden. Diese Optionen haben den Vorteil, dass keine funktionierende Netzwerkkonfiguration erforderlich ist, um die Datei abzurufen, sind aber weniger praktisch, da das Distributionsabbild jedes Mal neu erstellt werden sollte, wenn wir die Datei ändern.

Abschließende Gedanken

In diesem Tutorial lernen wir, wie man unbeaufsichtigte (oder halb unbeaufsichtigte) und replizierbare Debian-Installationen mit Hilfe einer Preseed-Datei durchführt. Preseed-Dateien enthalten Antworten auf die Fragen, die der Debian-Installer stellt, ähnlich wie Kickstart-Konfigurationen für Distributionen, die den Anaconda-Installer verwenden, und "autoinstall" in neueren Versionen von Ubuntu. Wir haben gesehen, wie man eine Preseed-Datei von einem bereits installierten Debian-System erhält und wie man eine Konfiguration von Grund auf neu erstellt. Schließlich haben wir gesehen, wie man die Preseed-Datei an den Debian-Installer weitergibt.

Verwandte Artikel: