{"id":10374,"date":"2023-04-28T18:08:30","date_gmt":"2023-04-28T16:08:30","guid":{"rendered":"https:\/\/u-labs.de\/portal\/?p=10374"},"modified":"2023-06-25T10:33:15","modified_gmt":"2023-06-25T08:33:15","slug":"debian-automatisiert-installieren-einrichten-so-funktioniert-preseed-voreinstellung-einstieg-fuer-anfaenger","status":"publish","type":"post","link":"https:\/\/u-labs.de\/portal\/debian-automatisiert-installieren-einrichten-so-funktioniert-preseed-voreinstellung-einstieg-fuer-anfaenger\/","title":{"rendered":"Debian automatisiert installieren &#038; einrichten: So funktioniert Preseed (Voreinstellung) &#8211; Einstieg f\u00fcr Anf\u00e4nger"},"content":{"rendered":"<p>Eine h\u00e4ndische GNU\/Linux-Installation ist zwar nicht ganz so m\u00fchsam, wie es bei Windows mittlerweile der Fall ist. Auch dort nimmt die h\u00e4ndische Navigation durch den Installations-Assistenten Zeit in Anspruch und nervt. Vor allem dann, wenn dies h\u00e4ufiger durchgef\u00fchrt wird, weil man etwa neue Testsysteme aufsetzt oder (in Unternehmen) eine gr\u00f6\u00dfere Anzahl an Ger\u00e4ten einrichtet. Konsistenz ist ebenfalls ein Punkt. Dieser Beitrag zeigt, wie Debian mittels Preseed teilweise oder auf Wunsch auch komplett automatisch installiert werden kann.<\/p>\n<h2 class=\"wp-block-heading\">Warum sollte man die Installation automatisieren?<\/h2>\n<p>W\u00e4hrend die h\u00e4ndische Installation f\u00fcr Einsteiger sicher lehrreich ist, bringt sie f\u00fcr erfahrenere Anwender keinen Mehrwert mehr &#8211; eher im Gegenteil: Zum 101sten Mal durch bekannte Dialoge zu navigieren, ist langweilig, kostet Zeit und es erh\u00f6ht die Fehleranf\u00e4lligkeit. Letzteres ist gerade dann wichtig, wenn man mehrere produktive Ger\u00e4te einrichten m\u00f6chte. Bei monotonen T\u00e4tigkeiten hat man sich schnell mal vertippt oder macht andere Fehler. Au\u00dferdem f\u00fchrt Automatisierung zu mehr Flexibilit\u00e4t, weil die Hemmschwelle einer frischen Installation f\u00e4llt. Und wir haben die Einrichtung in Form von Konfigurationsdateien vorliegen. Das macht sie reproduzierbar sowie bietet die M\u00f6glichkeit zur Versionierung. \u00c4nderungen lassen sich nachvollziehen, bei Problemen kann zu einem funktionierenden Stand zur\u00fcckgesprungen werden.<\/p>\n<p>Es gibt also eine Reihe an Vorteilen. In wie weit sich dies lohnt, ist nat\u00fcrlich vom konkreten Einsatz in der Praxis abh\u00e4ngig. Wer mehrere Systeme besitzt und auch \u00f6fter mal eine frische Testinstallation ben\u00f6tigt, wird davon mehr profitieren, als ein durchschnittlicher Nutzer mit einem einzigen GNU\/Linux-Notebook. Dies sollte man f\u00fcr sich selbst abw\u00e4gen, wie bei vielen anderen Dingen auch.<\/p>\n<h2 class=\"wp-block-heading\">Wie funktioniert die Automatisierung mittels Voreinstellung\/Preseeding?<\/h2>\n<p>Die Vorgehensweise liegt darin, eine Preseed-Konfigurationsdatei zu erstellen. Ihr k\u00f6nnt hierf\u00fcr meine vorbereitete weiter unten anpassen. Sie ist als <em>Antwortdatei<\/em> zu verstehen: S\u00e4mtliche Dinge, die dort definiert sind, fragt der Assistent w\u00e4hrend der Installation nicht mehr ab. Es ist daher m\u00f6glich, sowohl die komplette Installation, als auch nur einen Teil davon zu automatisieren. Das <a href=\"https:\/\/preseed.debian.net\/debian-preseed\/bullseye\/amd64-main-full.txt\" data-type=\"URL\" data-id=\"https:\/\/preseed.debian.net\/debian-preseed\/bullseye\/amd64-main-full.txt\" target=\"_blank\" rel=\"nofollow\">offizielle Beispiel f\u00fcr Debian 11 Bullseye<\/a> zeigt die umfangreichen M\u00f6glichkeiten, welche die des Assistenten teilweise sogar \u00fcbersteigen.<\/p>\n<p>Es gibt drei Wege, diese Preseed-Konfigurationsdatei zu laden:<\/p>\n<ol class=\"wp-block-list\">\n<li>In das ISO-Abbild per <strong>Initrd<\/strong> integrieren. Nach dem Booten w\u00e4hlt man die automatische Installation aus und die Datei wird sofort geladen. Dies ben\u00f6tigt am wenigsten Infrastruktur, allerdings mehr Vorbereitung. Mehrere Varianten lassen sich nur mit unterschiedlichen ISOs erstellen, weswegen diese Variante f\u00fcr umfangreichere Umgebungen mit verschiedenen Konfigurationen weniger geeignet ist.<\/li>\n<li>Manuell \u00fcber eine <strong>Datei<\/strong> vor dem Booten, in dem man sie als Kernel-Parameter angibt. Dies erlaubt es, aus mehreren Dateien zu w\u00e4hlen, ohne f\u00fcr jede ein eigenes ISO-Abbild erstellen zu m\u00fcssen. Im Gegensatz zur ersten Variante wird die Preseed-Datei nicht fest in das Abbild eingebunden und daher auch nicht automatisch geladen. Daf\u00fcr lassen sich einfacher mehrere Dateien ablegen.<\/li>\n<li>Per <strong>Netzwerk<\/strong>. Auch dies wird als Kernel-Parameter spezifiziert, allerdings liegt die Preseed-Datei hierbei nicht auf dem Installationsmedium wie z.B. einem USB-Stick, sondern wird von einem Webserver im Netzwerk ausgeliefert. Die Datei kann somit zentral verwaltet werden, ohne dass bei jeder \u00c4nderung der USB-Stick angepasst werden muss.<\/li>\n<\/ol>\n<p><strong>Initrd<\/strong> ist in der Einrichtung und Pflege am aufw\u00e4ndigsten, ich empfehle Datei oder Netzwerk.<\/p>\n<h2 class=\"wp-block-heading\">Vorbereitung: Das brauchst du<\/h2>\n<ul class=\"wp-block-list\">\n<li>Das gew\u00fcnschte <a href=\"https:\/\/www.debian.org\/distrib\/\" target=\"_blank\" rel=\"nofollow\">Debian Installationsabbild <\/a>(ich verwende hier Debian 11.6.0) &#8211; wahlweise die kompakte Netzwerk-Installation, oder auch ein vollst\u00e4ndiges DVD-Abbild.<\/li>\n<li>F\u00fcr <strong>Initrd<\/strong> und <strong>Datei<\/strong> wird ein laufendes GNU\/Linux-System ben\u00f6tigt, da beide Varianten es erforderlich machen, das ISO-Abbild anzupassen. Ich verwende Manjaro, ebenfalls erfolgreich getestet wurde Debian 11 selbst. Auch Debian-Derivate wie Ubuntu sollten funktionieren. Unter anderen Distributionen m\u00fcsst ihr ggf. Anpassungen vornehmen, etwa hinsichtlich Paketmanager und Namen der Pakete.<\/li>\n<li>Entscheidest du dich f\u00fcr die Variante <strong>Netzwerk<\/strong>, muss ein vom Zielsystem erreichbarer Webserver vorhanden sein, auf den du die Preseed-Datei ablegst.<\/li>\n<\/ul>\n<p>Da der ISO9660 Treiber keine Schreibvorg\u00e4nge in ISO-Abbildern unterst\u00fctzt, m\u00fcssen wir in jedem Fall ein neues ISO erstellen. Das hei\u00dft: Vorhandenes ISO mounten, den Inhalt kopieren und daraus ein neues anlegen. Das Werkzeug <strong>genisoimage<\/strong> erzeugt uns aus dem kopierten Ordner ein bootf\u00e4higes Abbild. W\u00e4hrend das f\u00fcr VMs ausreicht, ist zum Booten von USB-Sticks zus\u00e4tzlich ein sogenanntes hybrides Abbild notwendig &#8211; daf\u00fcr gibt es <strong>isohybrid<\/strong>. Unter Manjaro\/Arch befinden sich beide im gleichen Paket, wer Debian und seine Derivate nutzt, ben\u00f6tigt folgende beiden:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\"># Manjaro\/Arch Linux\npamac install syslinux\n\n# Debian &amp; Derivate\napt install genisoimage syslinux-utils<\/code><\/pre>\n<h2 class=\"wp-block-heading\">Erstellen der preseed.cfg: <em>Herzst\u00fcck<\/em> zur Automatisierung<\/h2>\n<p>In jedem Falle m\u00fcssen wir zun\u00e4chst eine Preseed-Konfigurationsdatei erstellen &#8211; die drei Varianten unterscheiden sich nur darin, zu welchem Zeitpunkt und auf welche Art diese Datei geladen wird. Die <a href=\"https:\/\/www.debian.org\/releases\/stable\/amd64\/apbs01.de.html\" data-type=\"URL\" data-id=\"https:\/\/www.debian.org\/releases\/stable\/amd64\/apbs01.de.html\" target=\"_blank\" rel=\"nofollow\">Debian-Dokumentation<\/a> erkl\u00e4rt, welche M\u00f6glichkeiten es gibt. Dazu existiert f\u00fcr jede Major-Version eine Beispiel-Datei, wie etwa <a href=\"https:\/\/preseed.debian.net\/debian-preseed\/bullseye\/amd64-main-full.txt\" data-type=\"URL\" data-id=\"https:\/\/preseed.debian.net\/debian-preseed\/bullseye\/amd64-main-full.txt\" target=\"_blank\" rel=\"nofollow\">diese hier f\u00fcr Debian 11<\/a>. Sie listet alle verf\u00fcgbaren Optionen mit Erkl\u00e4rung auf. Von den m\u00e4chtigen rund 24.000 Zeilen wird man schnell erschlagen. Ich habe daher die aus meiner Sicht wichtigsten herausgesucht, um ein Vanilla Testsystem zu erstellen.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-ini\" data-line=\"\">### Allgemeines\n# Verhindert weniger wichtige Nachfragen\n# https:\/\/www.debian.org\/releases\/sarge\/s390\/ch05s02.html.en\n# https:\/\/preseed.debian.net\/debian-preseed\/bullseye\/amd64-main-full.txt\nd-i debconf\/priority string critical\n# Deaktiviert die Meldung am Ende, dass die Installation abgeschlossen wurde und man neu starten kann\nd-i finish-install\/reboot_in_progress note\n\n# Gibt an, ob Infos zum Nutzungsverhalten (installierte\/verwendete Software) an Debian gesendet werden\npopularity-contest popularity-contest\/participate boolean false\n# Proprietaere Firmware laden (falls es zu Hardwareproblemen kommt)\n#d-i hw-detect\/load_firmware boolean true\n\n### Lokalisierung\nd-i debian-installer\/locale string de_DE\n# Keymap setzen reicht nicht, layout\/variantcode hilft ebenfalls nicht: https:\/\/groups.google.com\/g\/linux.debian.bugs.dist\/c\/XYcrRjLwpQM\nd-i keyboard-configuration\/variant select Deutschland\nd-i keyboard-configuration\/xkb-keymap select de\n\nd-i clock-setup\/utc boolean true\nd-i tzdata\/Areas select Europe\ntzdata\/Zones\/Europe select Berlin\nd-i time\/zone string Europe\/Berlin\n\n### Partitionierung\n# Grub wird automatisch auf den MBR installiert, wenn kein anderes OS vorhanden ist (sicher)\nd-i grub-installer\/only_debian boolean true\n# MBR installation ebenfalls wenn andere OS vorhanden sind (koennte dazu fuehren, dass diese nicht mehr booten)\n#d-i grub-installer\/with_other_os boolean true\n# Verhindert, dass grub alternativ fragt, wo er installiert werden soll\n#d-i grub-installer\/bootdev string \/dev\/sda\n# Fuer die vollautomatische Partitionierung (falls unten aktiv) - Beispiel Lenovo Tiny mit NVMe-SSD\n# VirtualBox -&gt; \/dev\/sda, KVM -&gt; \/dev\/vda\n#d-i partman-auto\/disk string \/dev\/nvme0n1\n\n# Fuer lvm &#039;lvmcfg\/vgdelete_confirm&#039;, &#039;partman-lvm\/confirm&#039; und &#039;partman-lvm\/confirm_nooverwrite&#039; setzen\n# Siehe https:\/\/www.debian.org\/releases\/stable\/s390x\/apbs04.de.html Abschnitt B.4.7.1.\nd-i partman-auto\/method string regular\n# Alle Daten auf einer Partition (mit &#039;home&#039; wird das Home-Verzeichnis auf eine eigene Partition gelegt)\nd-i partman-auto\/choose_recipe select atomic\n\n# Komplett automatisiert ohne Bestaetigung fuer alle Partitionierungsmethoden (Mit Vorsicht verwenden!)\n# d-i partman\/choose_partition select finish\n# d-i partman\/confirm boolean true\n# d-i partman\/confirm_nooverwrite boolean true\n# d-i partman-partitioning\/confirm_write_new_label boolean true\n# d-i partman-md\/confirm boolean true\n# d-i partman-md\/deleteverify boolean true\n# d-i lvmcfg\/vgdelete_confirm boolean true\n# d-i partman-lvm\/vgdelete_confirm boolean true\n# d-i partman-lvm\/device_remove_lvm boolean true\n# d-i partman-lvm\/confirm boolean true\n# d-i partman-lvm\/confirm_nooverwrite boolean true\n\n### Software\nd-i mirror\/country string manual\nd-i mirror\/http\/hostname string ftp2.de.debian.org\nd-i mirror\/http\/directory string \/debian\nd-i mirror\/http\/proxy string\n\n# Aktiviert Spiegelserver abseits der Sicherheitsupdates per Netzwerk statt Image\nd-i apt-setup\/use_mirror boolean true\nd-i apt-setup\/disable-cdrom-entries boolean true\n# Aktiviert offizielle, aber unfreie Repositorys: https:\/\/wiki.debian.org\/SourcesList\n#d-i apt-setup\/non-free boolean true\n#d-i apt-setup\/contrib boolean true\n\n# Vorinstallierte Software\n# Programmgruppe kann festlegen, ob z.B. Headless oder eine bestimmte Desktopumgebung (xfce-desktop, kde-desktop usw) vorinstalliert werden soll (siehe B.4.10)\ntasksel tasksel\/first multiselect standard, ssh-server\n#tasksel tasksel\/first multiselect standard, gnome-desktop\n\nd-i pkgsel\/install-language-support boolean true\nd-i pkgsel\/update-policy select Install security updates automatically\n# Alle Pakete automatisch aktualisieren\nd-i pkgsel\/upgrade select full-upgrade\nd-i pkgsel\/include string openssh-server git vim htop\n\n# Stdout Weiterleitungen funktionieren in in-target nicht ohne --pass-stdout\n# Siehe https:\/\/askubuntu.com\/a\/1248987\/650986 und https:\/\/serverfault.com\/questions\/390122\/how-do-i-pipe-commands-together-in-a-debian-preseed-file\nd-i preseed\/late_command string \\\n    in-target sudo -u u-labs bash -c &quot;cd \/home\/u-labs\/; mkdir .fzf; cd .fzf; git clone https:\/\/github.com\/junegunn\/fzf.git .; bash .\/install --all&quot;; \\\n    in-target --pass-stdout bash -c &quot;echo &#039;u-labs ALL=NOPASSWD:ALL&#039; &gt; \/etc\/sudoers.d\/u-labs&quot;; \\\n    in-target update-alternatives --set editor \/usr\/bin\/vim.basic\n\n### Benutzerkonten\nd-i passwd\/username string u-labs\nd-i passwd\/user-fullname string u-labs\nd-i passwd\/user-uid string 1000\nd-i passwd\/user-password password u-labs\nd-i passwd\/user-password-again password u-labs\n# root\nd-i passwd\/root-password password u-labs\nd-i passwd\/root-password-again password u-labs\n\n# Fuer Testsysteme kann die Policy strikter PWs abgeschaltet werden\nd-i user-setup\/allow-password-weak boolean true\nd-i user-setup\/encrypt-home boolean false\n\n### Netzwerk\nd-i netcfg\/enable boolean true\nd-i netcfg\/choose_interface select auto\nd-i netcfg\/hostname string vdebian01<\/code><\/pre>\n<p>Beim Partitionieren habe ich die destruktiven Einstellungen mit einer vorangestellten Raute # auskommentiert und somit deaktiviert &#8211; dadurch fragt euch der Assistent danach. Sie w\u00fcrden Debian automatisch ohne jegliche Nachfrage auf dem angegebenen Laufwerk installieren und l\u00f6schen s\u00e4mtliche vorhandenen Partitionen. Gerade f\u00fcr Testinstallationen kann das hilfreich sein, da die Partitionierung dort meist ohnehin unwichtig ist. Allerdings w\u00fcrde ich dies entsprechend kennzeichnen und <strong>niemals<\/strong> <strong>in Initrd integrieren<\/strong>: Ein so pr\u00e4parierter USB-Stick liegt sp\u00e4ter ein paar Monate herum, ihr m\u00f6chtet ihn nutzen, wisst aber evtl. nicht mehr genau, was ver\u00e4ndert wurde. Oder gebt den Stick an jemand anderen weiter. Das kann ins Auge gehen, wenn er auf einem wichtigen System eingesetzt wird! Dazu sp\u00e4ter mehr.<\/p>\n<p>Ihr k\u00f6nnt die Datei als Grundlage verwenden und ggf. ver\u00e4ndern. Zum Anpassen sind f\u00fcr die meisten wahrscheinlich in erster Linie folgende Einstellungen interessant:<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>d-i pkgsel\/include<\/strong> installiert APT-Pakete automatisch, mehrere mit Leerzeichen getrennt. In meinem Beispiel wird der OpenSSH-Server installiert, wodurch das System per SSH im Netzwerk erreichbar ist. Dazu die Werkzeuge git, vim und top.<\/li>\n<li>F\u00fcr komplexere oder zus\u00e4tzliche Dinge, die ihr anpassen m\u00f6chtet, erlaubt <strong>d-i preseed\/late_command<\/strong> die Ausf\u00fchrung von beliebigen Shell-Befehlen. Sollte als letztes Mittel genutzt werden, in diesem Beispiel etwa um das <a href=\"https:\/\/u-labs.de\/portal\/besser-auf-der-konsole-mit-fzf-suchen-suchverlauf-schnelle-ordnerwechsel-dateivorschau-mehr\/\" data-type=\"post\" data-id=\"8260\">n\u00fctzliche Tool fzf <\/a>einzurichten.<\/li>\n<li>In <strong>d-i passwd\/<\/strong> sind verschieden Eigenschaften enthalten, die sowohl das Root-Passwort festlegen, als auch ein zus\u00e4tzliches Konto ohne besondere Privilegien anlegen.<\/li>\n<li><strong>d-i netcfg\/hostname <\/strong>legt den Hostname fest, unter dem das System im Netzwerk erreichbar ist. F\u00fcr den integrierten SSH-Server n\u00fctzlich, da man so dynamische IPs per DHCL vergeben lassen kann.<\/li>\n<\/ul>\n<p>Je nachdem, was ihr konkret machen m\u00f6chtet, gibt es noch weit mehr, spezifischere Dinge. Wer etwa auf jedem System Docker ben\u00f6tigt, der k\u00f6nnte beispielsweise deren Paketquelle hinzuf\u00fcgen &#8211; auch so etwas ist m\u00f6glich, ohne Bash-Befehle \u00fcber <strong>late-command<\/strong> ausf\u00fchren zu m\u00fcssen. Auf einem Server soll m\u00f6glicherweise ein RAID konfiguriert werden. So etwas w\u00fcrde den Rahmen des Beitrages bei weitem sprengen und kann bei Bedarf in den oben verlinkten Dokus nachgelesen werden. Hier liegt der Fokus auf eine h\u00e4ufig ben\u00f6tigte grundlegende Installation als Einstieg in die Thematik, ohne all zu viele speziellere Anforderungen.<\/p>\n<p>Wie ihr die Datei benennt, bleibt bei den meisten Methoden euch \u00fcberlassen. Initrd verlangt per Konvention nach <strong>preseed.cfg<\/strong>. Dieser Name macht Sinn und ist zu empfehlen, so lange es keine anderen Gr\u00fcnde (z.B. mehrere Dateien) gibt.<\/p>\n<h2 class=\"wp-block-heading\">Die <em>Datei<\/em> und <em>Netzwerk<\/em>-Methode: preseed.cfg ohne Initrd auf dem USB-Stick oder Webserver<\/h2>\n<p>Dieser Weg entspricht der oben genannten Variante 2. Die Preseed-Datei wird auf dem USB-Stick platziert, am besten direkt im Wurzelverzeichnis &#8211; je nach Einbindung m\u00fcsst ihr sonst sp\u00e4ter l\u00e4ngere Pfade tippen. Der erste Schritt besteht darin, das ISO-Abbild zu entpacken, unsere Preseed-Datei (<strong>preseed.cfg<\/strong> genannt) dort hinein zu kopieren und aus dem gesamten Ordner ein neues Abbild zu erstellen. Au\u00dferdem lege ich zugleich ein hybrides ISO an, damit es von USB-Sticks genutzt werden kann &#8211; dies ist f\u00fcr die reine Nutzung in VMs wie zuvor erw\u00e4hnt nicht n\u00f6tig.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">mkdir vanilla-iso new-iso\n\nmount -o loop debian-11.6.0-amd64-netinst.iso vanilla-iso\ncp -rT vanilla-iso\/ new-iso\/\numount vanilla-iso\n\ncp preseed.cfg new-iso\ngenisoimage -r -J -b isolinux\/isolinux.bin -c isolinux\/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o preseed-debian-11.6.iso new-iso\n\n# Optional, falls das Image nur fuer VMs genutzt wird\nisohybrid preseed-debian-11.6.iso\n\nrm -rf vanilla-iso new-iso<\/code><\/pre>\n<h3 class=\"wp-block-heading\">Der h\u00e4ndische Weg zur Automatisierung<\/h3>\n<p>Im gleichen Verzeichnis liegt nun die entstandene Datei <strong>preseed-debian-11.6.iso<\/strong>, von der wir nun booten. Zum Verst\u00e4ndnis schauen wir uns zun\u00e4chst den manuellen Weg an. Dazu \u00f6ffnet man die erweiterten Optionen (<strong>Advanced Options<\/strong>) und w\u00e4hlt dort <strong>Automated install<\/strong>. Die Navigation erfolgt mit den Pfeiltasten, zur Auswahl wird <strong>[ENTER]<\/strong> gedr\u00fcckt.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/debian11-install-advanced.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"482\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/debian11-install-advanced-1024x482.jpg\" alt=\"\" class=\"wp-image-10380\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/debian11-install-advanced-1024x482.jpg 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/debian11-install-advanced-300x141.jpg 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/debian11-install-advanced-768x362.jpg 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/debian11-install-advanced.jpg 1317w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<p>Da bei dieser Variante nichts automatisch geladen wird, m\u00fcssen wir dem Assistenten mitteilen, wo er die Datei erwarten kann. Wie man an den Beispielen erkennt, sind hier sowohl lokale Pfade (mit <strong>file:\/\/\/<\/strong> Pr\u00e4fix) m\u00f6glich, als auch HTTP-URLs auf einem Webserver. Unsere Preseed-Datei liegt im Wurzelverzeichnis des Sticks, dieser ist in der Umgebung unter <strong>\/cdrom<\/strong> gemountet. <\/p>\n<p>Ohne eine automatisch geladene Vorkonfiguration, die das \u00e4ndert, haben wir allerdings das US-Amerikanische Tastaturlayout &#8211; das Eingeben von Sonderzeichen wie Doppelpunkt oder Slash ist daher weniger komfortabel. Abhilfe schafft <a href=\"https:\/\/de.wikipedia.org\/wiki\/Tastaturbelegung_US-International#\/media\/Datei:KB_US-International.svg\" target=\"_blank\" rel=\"nofollow\">ein Blick auf eine solche Tastatur<\/a>, die sich bei den Sonderzeichen erheblich von der Deutschen unterscheidet. Zur Fehlersuche ist es \u00fcbrigens hilfreich, sich zumindest die wichtigsten Tasten zu merken:<\/p>\n<ul class=\"wp-block-list\">\n<li>Das Minus &#8211; liegt auf \u00df<\/li>\n<li>Slash \/ auf &#8211;<\/li>\n<li>Doppelpunkt : auf \u00e4 (mit Shift)<\/li>\n<\/ul>\n<p>Damit l\u00e4sst sich der Pfad <strong>file:\/\/\/cdrom\/preseed.cfg<\/strong> eingeben. Nach dem Best\u00e4tigen mit <strong>[ENTER]<\/strong> wird die Installation gestartet &#8211; je nachdem, was ihr in der Datei konfiguriert habt, erfolgt die weitere Installation vollautomatisch oder teilautomatisch.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/autoconf-file.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"960\" height=\"540\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/autoconf-file.jpg\" alt=\"\" class=\"wp-image-10381\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/autoconf-file.jpg 960w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/autoconf-file-300x169.jpg 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/autoconf-file-768x432.jpg 768w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/figure>\n<\/div>\n<h3 class=\"wp-block-heading\">Komfortabler: Eigene Eintr\u00e4ge im Installations-Men\u00fc<\/h3>\n<p>W\u00e4hrend der vorherige Weg zum Verst\u00e4ndnis der Funktionsweise n\u00fctzlich ist, finde ich ihn in der Anwendung unsch\u00f6n: Man muss mit US-Layout den Pfad angeben und diesen genau kennen. Hat man mehrere Dateien, also erst mal eine Konsole \u00f6ffnen, um nachzuschauen. Meine Empfehlung ist daher, das Men\u00fc anzupassen. Wie dies funktioniert, h\u00e4ngt von der Architektur ab. Bei Intel X86 kommt Isolinux als Bootloader zum Einsatz. Das erweiterte Men\u00fc, in das die Eintr\u00e4ge am besten passen, ist in <strong>isolinux\/adtxt.cfg<\/strong> konfiguriert. Der Aufbau wird schnell klar, wenn man sich etwa die <strong>Automatische Installation<\/strong> anschaut:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">label auto\n\tmenu label ^Automated install\n\tkernel \/install.amd\/vmlinuz\n\tappend auto=true priority=critical vga=788 initrd=\/install.amd\/initrd.gz --- quiet <\/code><\/pre>\n<p>Es gibt ein internes Label und ein zweites zur Anzeige im Men\u00fc. Darunter folgt der zu ladende Kernel mit dessen Parametern. Solch einen Eintrag k\u00f6nnen wir duplizieren, die Kernel-Parameter erg\u00e4nzen sowie eine treffende Bezeichnung erg\u00e4nzen. Unser eigener Eintrag erscheint dadurch unter dem von Debian standardm\u00e4\u00dfig vorhandenem <strong>Automated Install<\/strong> und hei\u00dft stattdessen <strong>Automatic &#8211; DESTRUCTIVE<\/strong>. Dies kann mit weiteren Preseed-Datei wiederholt werden, um mehrere Umgebungen\/Varianten abzubilden.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">cat &gt;&gt; new-iso\/isolinux\/adtxt.cfg &lt;&lt;EOF\nlabel auto-wipe\n\tmenu label ^Automatic - DESTRUCTIVE\n\tkernel \/install.amd\/vmlinuz\n\tappend auto=true priority=critical vga=788 file=\/cdrom\/preseed.cfg initrd=\/install.amd\/initrd.gz --- quiet \nEOF<\/code><\/pre>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/custom-option_destructive.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"494\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/custom-option_destructive-1024x494.jpg\" alt=\"\" class=\"wp-image-10383\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/custom-option_destructive-1024x494.jpg 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/custom-option_destructive-300x145.jpg 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/custom-option_destructive-768x370.jpg 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/custom-option_destructive.jpg 1309w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<p>Zum praktischen Einsatz bietet es sich an, die Befehle in einem Skript mit entsprechenden Variablen zu b\u00fcndeln. Dies kann zudem Aufr\u00e4umarbeiten vornehmen, wie etwa das tempor\u00e4re Arbeitsverzeichnis entfernen.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">#!\/bin\/bash\nisoIn=debian-11.6.0-amd64-netinst.iso\nisoOut=preseed-${isoIn}\n\nmkdir vanilla-iso new-iso\nsudo mount -o loop $isoIn vanilla-iso\nsudo cp -rT vanilla-iso\/ new-iso\/\nsudo umount vanilla-iso\n\ncp preseed.cfg new-iso\ncat &gt;&gt; new-iso\/isolinux\/adtxt.cfg &lt;&lt;EOF\nlabel auto-wipe\n\tmenu label ^Automatic - DESTRUCTIVE\n\tkernel \/install.amd\/vmlinuz\n\tappend auto=true priority=critical vga=788 file=\/cdrom\/preseed.cfg initrd=\/install.amd\/initrd.gz --- quiet\nEOF\n\nsudo genisoimage -r -J -b isolinux\/isolinux.bin -c isolinux\/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o $isoOut new-iso\n\n# Optional, falls das Image nur fuer VMs genutzt wird\nsudo isohybrid $isoOut\n\nsudo rm -rf new-iso vanilla-iso<\/code><\/pre>\n<h2 class=\"wp-block-heading\">Einf\u00fcgen der Preseed-Datei in Initrd (Variante 1)<\/h2>\n<p>Die zuerst genannte Methode behandeln wir zum Schluss, da sie aus meiner Sicht die Schlechteste ist. Werfen wir vor der Umsetzung einen Blick auf die Funktion: Initrd ist das Abbild eines kompletten Dateisystems, welches beim Booten in den Arbeitsspeicher geladen wird. Es enth\u00e4lt Dateien, die w\u00e4hrend des Starts vom Linux-Kernel ben\u00f6tigt werden. Im ISO-Abbild ist es als Archiv in <strong>install.amd\/initrd.gz<\/strong> zu finden. Darin wird die Datei <strong>preseed.cfg<\/strong> automatisch beim Booten geladen, sofern sie existiert &#8211; und zwar noch vor dem Assistenten. Schlussendlich ist der Installations-Assistent von Debian ein kleines GNU\/Linux-System.<\/p>\n<p>Zus\u00e4tzlich zu den Schritten der vorherigen Varianten (ISO entpacken, neu erstellen usw) muss hierbei die <strong>preseed.cfg<\/strong> nicht nur in das Wurzelverzeichnis (bzw. streng genommen in einen frei w\u00e4hlbaren Pfad darin) kopiert werden. Sondern die Datei wird zu <strong>initrd.gz<\/strong> hinzugef\u00fcgt. Da sich im Abbild eine Datei <strong>md5sum.txt<\/strong> mit den Pr\u00fcfsummen aller Dateien befindet, sollten wir diese zudem aktualisieren. Sonst wird das Archiv ggf. f\u00e4lschlicherweise als korrupt erkannt, obwohl dies letztendlich auf unsere bewussten Ver\u00e4nderungen zur\u00fcckzuf\u00fchren ist.<\/p>\n<p>Das vorherige Skript kann als Grundlage genutzt werden. Den Block, der die Preseed-Datei in <strong>new-iso<\/strong> kopiert und anschlie\u00dfend noch den Men\u00fceintrag anlegt, ersetzen wir:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">gunzip new-iso\/install.amd\/initrd.gz\necho preseed.cfg | cpio -H newc -o -A -F new-iso\/install.amd\/initrd\ngzip new-iso\/install.amd\/initrd\ncd new-iso\nfind -follow -type f ! -name md5sum.txt -print0 | xargs -0 md5sum &gt; md5sum.txt\ncd ..\nchmod a-w new-iso\/md5sum.txt<\/code><\/pre>\n<p>Ruft man in den erweiterten Optionen nun <strong>Automatic Install<\/strong> auf, l\u00e4dt Initrd unsere Anweisungen automatisch und ohne weiteres Zutun &#8211; der oben gezeigte Dialog zur Dateiauswahl entf\u00e4llt. Das Problem, was ich dabei allerdings sehe: Es gibt keine Transparenz dar\u00fcber. Wir sehen nicht, dass \u00fcberhaupt etwas automatisiert wurde &#8211; au\u00dfer, die Installation l\u00e4uft komplett ohne Interaktion durch oder es fallen fehlende Schritte auf. Noch schlimmer wird es, wenn dort destruktive Dinge (z.B. f\u00fcr ein Testsystem) eingerichtet sind, die versehentlich in einer produktiven Umgebung laufen. Dass etwas vorkonfiguriert wurde, sieht man nur, wenn die Initrd zuvor gepr\u00fcft wird &#8211; was vor allem dann nicht geschieht, wenn man das nicht (mehr) wei\u00df. F\u00fcr diesen Zweck ist das also mindestens fehleranf\u00e4llig bis gef\u00e4hrlich.<\/p>\n<p>Dar\u00fcber hinaus gibt es noch einen weiteren praktischen Nachteil: Das Initrd-Archiv befindet sich im ISO. Mehrere Konfigurationen sind somit nur \u00fcber einen Multi-Boot Stick m\u00f6glich, auf dem Debian dadurch unn\u00f6tigerweise mehrfach liegt. Mit der vorherigen Variante lassen sich Installations-Abbild und Preseed-Datei viel besser trennen. Wahlweise liegen diese unabh\u00e4ngig voneinander auf dem Stick, oder gleich auf einem Webserver.<\/p>\n<h2 class=\"wp-block-heading\">Tipps zur Fehlersuche<\/h2>\n<p>Generell ist es eine gute Idee, zumindest f\u00fcr die Tests das Netzwerk-Abbild zu nehmen. Es ist kleiner, wodurch ihr schneller mit dem Testen anfangen k\u00f6nnt. Lediglich, wenn der Fehler nach dem Herunterladen der Pakete auftritt sowie ihr ggf. noch dazu eine langsame Internetverbindung verwendet, kann das vollst\u00e4ndige Abbild schneller sein.<\/p>\n<p>Sollte ein Fehler auftreten, k\u00f6nnt ihr mit der Tastenkombination <strong>[ALT] + [F4]<\/strong> zur Konsolenausgabe wechseln, die oft weitere Informationen enth\u00e4lt.<\/p>\n<p>Teils hilft auch <strong>[ALT]<\/strong> und Pfeiltaste nach links. Mit <strong>[ALT]<\/strong> + Pfeiltaste rechts gelangt man wieder zur\u00fcck zur Fehlerseite. Sollte das nicht funktionieren, <strong>[ALT]<\/strong> und die F-Tasten <strong>[F1]<\/strong> bis <strong>[F7]<\/strong> ausprobieren. Das komplette Protokoll wird in <strong>\/var\/log\/syslog<\/strong> geschrieben, das man \u00fcber den Eintrag zum \u00f6ffnen einer Shell im Installations-Men\u00fc einsehen kann. Die Werkzeuge sind dort allerdings beschr\u00e4nkt, da in der minimalen Umgebung n\u00fctzliche Werkzeuge wie z.B. <strong>less<\/strong> Fehlen und der Platz durch die geringe Aufl\u00f6sung begrenzt ist.<\/p>\n<p>Die wichtigsten Tastenkombinationen, welche in meinem Test funktioniert haben:<\/p>\n<ul class=\"wp-block-list\">\n<li>ALT + F4 -&gt; Logs \u00f6ffnen<\/li>\n<li>ALT + F2 -&gt; Konsole<\/li>\n<li>ALT + F1 -&gt; Zur\u00fcck zum Installations-Assistenten<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n<p>Der Weg \u00fcber Initrd konnte mich nicht \u00fcberzeugen &#8211; das ist aber auch gar nicht n\u00f6tig, da Preseed flexibel genug ist, insgesamt drei Bereitstellungsm\u00f6glichkeiten anzubieten. So kann man sich den f\u00fcr die eigene Situation bestm\u00f6glich passenden aussuchen. Die zur Verf\u00fcgung stehenden Konfigurationseigenschaften sind umfangreich. Nicht nur der Installations-Assistent l\u00e4sst sich damit auf Wunsch komplett automatisieren. Sondern auch weitere Aufgaben, wie etwa die Konfiguration zus\u00e4tzlicher Software. Unabh\u00e4ngig davon, aus welchen Gr\u00fcnden man Debian \u00f6fters installiert: Dies ist definitiv eine Erleichterung, die sowohl viel Arbeit und Zeit spart, als auch die Konsistenz durch Reproduzierbarkeit sicherstellt. Mit der Dokumentation tut man sich zudem leichter, ein gro\u00dfer Teil davon entsteht automatisch. <\/p>\n<h2 class=\"wp-block-heading\">Weiterf\u00fchrende Inhalte<\/h2>\n<ul class=\"wp-block-list\">\n<li>Offizielle Beispiel-Preseed Datei f\u00fcr <a href=\"https:\/\/preseed.debian.net\/debian-preseed\/bullseye\/amd64-main-full.txt\" data-type=\"URL\" data-id=\"https:\/\/preseed.debian.net\/debian-preseed\/bullseye\/amd64-main-full.txt\" target=\"_blank\" rel=\"nofollow\">Debian Bullseye<\/a> und die <a href=\"https:\/\/preseed.debian.net\/debian-preseed\/stable\/amd64-main-full.txt\" data-type=\"URL\" data-id=\"https:\/\/preseed.debian.net\/debian-preseed\/stable\/amd64-main-full.txt\" target=\"_blank\" rel=\"nofollow\">jeweils aktuellste stabile Version<\/a><\/li>\n<li><a href=\"https:\/\/www.debian.org\/releases\/bullseye\/example-preseed.txt\" data-type=\"URL\" data-id=\"https:\/\/www.debian.org\/releases\/bullseye\/example-preseed.txt\" target=\"_blank\" rel=\"nofollow\">Kompaktere offizielle Beispiel-Preseed f\u00fcr Debian Bullseye<\/a><\/li>\n<li><a href=\"https:\/\/www.debian.org\/releases\/stable\/amd64\/apbs01.de.html\" data-type=\"URL\" data-id=\"https:\/\/www.debian.org\/releases\/stable\/amd64\/apbs01.de.html\" target=\"_blank\" rel=\"nofollow\">Debian Dokumentation zu den Voreinstellungen (deutsch, jeweils stabilste Version)<\/a><\/li>\n<li><a href=\"https:\/\/unix.stackexchange.com\/questions\/219994\/how-to-edit-debian-installer-boot-paramaters\" data-type=\"URL\" data-id=\"https:\/\/unix.stackexchange.com\/questions\/219994\/how-to-edit-debian-installer-boot-paramaters\" target=\"_blank\" rel=\"nofollow\">Anpassung der Boot-Parameter<\/a> im Installations-Men\u00fc<\/li>\n<li><a href=\"https:\/\/wiki.debianforum.de\/Debian-Installation_%C3%BCber_PXE,_TFTP_und_Preseed\" data-type=\"URL\" data-id=\"https:\/\/wiki.debianforum.de\/Debian-Installation_%C3%BCber_PXE,_TFTP_und_Preseed\" target=\"_blank\" rel=\"nofollow\">Debianforum-Wiki zu PXE\/TFTP und Preseed<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Eine h\u00e4ndische GNU\/Linux-Installation ist zwar nicht ganz so m\u00fchsam, wie es bei Windows mittlerweile der Fall ist. Auch dort nimmt die h\u00e4ndische Navigation durch den Installations-Assistenten Zeit in Anspruch und nervt. Vor allem dann, wenn dies h\u00e4ufiger durchgef\u00fchrt wird, weil man etwa neue Testsysteme aufsetzt oder (in Unternehmen) eine gr\u00f6\u00dfere Anzahl an Ger\u00e4ten einrichtet. Konsistenz &#8230;<\/p>\n","protected":false},"author":5,"featured_media":10396,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[74],"tags":[777,288,1009],"class_list":["post-10374","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux","tag-automatisierung","tag-debian","tag-devops"],"_links":{"self":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/10374","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/comments?post=10374"}],"version-history":[{"count":30,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/10374\/revisions"}],"predecessor-version":[{"id":10701,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/10374\/revisions\/10701"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media\/10396"}],"wp:attachment":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media?parent=10374"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/categories?post=10374"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/tags?post=10374"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}