Wenn man eine ganzen Flotte von Rechnern betreut, lässt sich die Installation vollständig automatisieren. Dazu aktivieren wir im Setup jedes einzelnen Rechners das PXE, welches per DHCP die Adresse eines TFTP-Servers ermittelt. Von dort lädt er das Installationssystem herunter, welches wiederum Voreinstellungen via HTTP lädt und Pakete aus einem lokalen Depot installiert.
Wir installieren die einzlenen Puzzleteile und eine paketierte Version des Debian Installers.
apt install apt-cacher-ng apache2 dnsmasq debian-installer-12-netboot-amd64 chown apt-cacher-ng /var/log/apt-cacher-ng
Apt-Cacher NG dient als Zwischenlager für das Debian Depot, so dass Pakete nur einmal aus dem Internet heruntergeladen werden müssen. Um den Zwischenspeicher zu füllen, nutzen wir ihn auch für lokal installierte Pakete.
/etc/apt/apt.conf.d/02proxyAcquire::http::Proxy "http://localhost:3142";
Der Apache Webserver wiederum stellt die Voreinstellungsdatei zur Verfügung.
/etc/apache2/sites-enabled/000-default.conf<VirtualHost *:80> ServerName nuc10 DocumentRoot /var/www/html <Location /> Require all granted </Location> </VirtualHost>
Dnsmasq stellt den Bootloader per TFTP auf Kanalnummer 69 bereit.
/etc/dnsmasq.conf# DHCP log-dhcp dhcp-no-override dhcp-range=192.168.56.2,192.168.56.20 # TFTP enable-tftp tftp-root=/usr/lib/debian-installer/images/12/amd64/text # PXE pxe-service=x86PC, "Install Debian GNU/Linux", pxelinux.0 pxe-service=x86PC, "Boot from local hard disk", 0
# | Name | Architektur |
0 | x86PC | Intel x86PC |
1 | PC98 | NEC/PC98 |
2 | IA64_EFI | EFI Itanium |
3 | Alpha | DEC Alpha |
4 | Arc_x86 | Arc x86 |
5 | Intel_Lean_Client | Intel Lean Client |
6 | IA32_EFI | EFI IA32 |
7 | BC_EFI | EFI BC |
8 | Xscale_EFI | EFI Xscale |
9 | X86-64_EFI | EFI x86-64 |
ARM32_EFI | ||
ARM64_EFI |
PXELINUX
ist eine Variante des SYSLINUX Bootloaders für den Start des Rechners über ein Netzwerk.
Die Initiale Ramdisk des Pakets debian-installer-12-netboot-amd64
enthält das Debian Installationssystem.
Der Bootloader unterstützt ein komplexes Menüsystem,
über das wir unterschiedliche Varianten der Voreinstellungsdatei anbieten.
/usr/lib/debian-installer/images/12/amd64/text/pxelinux.cfg/defaultpath debian-installer/amd64/boot-screens/ prompt 0 timeout 0 menu hshift 4 menu width 70 menu title Debian GNU/Linux Installation include debian-installer/amd64/boot-screens/stdmenu.cfg label install menu label ^Manual Installation kernel debian-installer/amd64/linux append initrd=debian-installer/amd64/initrd.gz vga=788 --- quiet label autominimal menu label ^Automatic Minimal kernel debian-installer/amd64/linux append initrd=debian-installer/amd64/initrd.gz \ vga=788 auto=true url=http://192.168.56.1/preseed.cfg hostname=minimal domain= label autognome menu label ^Automatic GNOME Workstation kernel debian-installer/amd64/linux append initrd=debian-installer/amd64/initrd.gz \ vga=788 auto=true url=http://192.168.56.1/preseed-gnome.cfg hostname=gnome domain= default debian-installer/amd64/boot-screens/vesamenu.c32
Parameter | Langer Name | Beispiel | Beschreibung | ||
Farbtiefe | 800x600 | 1024x768 | 1152x864 | 1280x1024 | 1600x1200 |
8 bit | vga=771 | vga=773 | vga=353 | vga=775 | vga=796 |
16 bit | vga=788 | vga=791 | vga=355 | vga=794 | vga=798 |
24 bit | vga=789 | vga=792 | vga=795 | vga=799 |
Parameter | Langer Name | Beispiel | Beschreibung |
auto | auto-install/enable | true | Fragen verzögern, bis die Voreinstellungsdatei geladen wurde |
priority | debconf/priority | critical | Fragen unterbinden (critical | high | medium | low ) |
fb | debian-installer/framebuffer | false | Bildspeicher des Kernels verwenden |
language | debian-installer/language | de | Sprache |
country | debian-installer/country | DE | Ländercode |
locale | debian-installer/locale | de_DE.UTF-8 | Sprache, Land und Zeichensatz |
theme | debian-installer/theme | dark | Farbschema für den GTK-Oberbau |
classes | auto-install/classes | ||
file | preseed/file | Pfad für Antwort-Datei | |
url | preseed/url | nuc10 | Hostname und optionaler Pfad für Antwort-Datei |
domain | netcfg/get_domain | Domäne | |
hostname | netcfg/get_hostname | debian | Eigener Hostname |
interface | netcfg/choose_interface | auto | Netzwerk-Schnittstelle |
protocol | mirror/protocol | http | Protokoll beim laden der Pakete |
suite | mirror/suite | stable | Debian-Version |
modules | anna/choose_modules | Installer-Module (udeb ) laden | |
recommends | base-installer/install-recommends | true | Empfohlene Pakete installieren |
tasks | tasksel:tasksel/first | gnome | Pakete aus Task installieren |
desktop | tasksel:tasksel/desktop | gnome | |
dmraid | disk-detect/dmraid/enable | false | ATA RAID |
keymap | keyboard-configuration/xkb-keymap | de | Tastaturbelegung |
preseed-md5 | preseed/file/checksum |
Bevor der Debian-Installer die Voreinstellungsdatei lädt, fragt er Land, Sprache, Tastaturbelegung, Hostname und diverse Netzwerkeinstellungen ab. Um das zu verhindern, übergibt man diese Daten auf der Kommandozeile des Kernels.
Der Debian-Installer kann Antworten auf alle Fragen aus einer Voreinstellungsdatei lesen und so die Installation teilweise oder vollständig automatiseren. Es beginnt mit der Lokalisierung.
/var/www/html/preseed.cfgd-i debian-installer/language string de d-i debian-installer/country string DE d-i debian-installer/locale string de_DE.UTF-8 d-i console-keymaps-at/keymap select de d-i keyboard-configuration/xkb-keymap select de
Die Netzwerkeinstellungen werden via DHCP ermittelt. Die folgenden Angaben verhindern lediglich lästige Rückfragen.
d-i netcfg/choose_interface select auto d-i netcfg/get_hostname string Host d-i netcfg/get_domain string d-i netcfg/wireless_wep string d-i hw-detect/load_firmware boolean false
Als Paketquelle dient der nächstgelegene Spiegelserver.
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 http://192.168.56.1:3142
Der Administrator darf sich nicht direkt anmelden. Stattdessen erhält der erste Benutzer Sudo-Rechte.
d-i passwd/root-login boolean false d-i passwd/user-fullname string DisplayName d-i passwd/username string User d-i passwd/user-password password Password d-i passwd/user-password-again password Password
Als nächstes wird die Zeitzone eingestellt.
d-i clock-setup/utc boolean true d-i clock-setup/ntp boolean true d-i time/zone string Europe/Berlin
Für die Partitionierung gibt es Rezepts
mit folgendem Inhalt:
d-i partman-auto/disk string /dev/sda d-i partman-auto/method string regular d-i partman-auto/choose_recipe select uefi d-i partman-auto/expert_recipe string uefi :: \ 1 1 1 free \ $bios_boot{ } \ method{ biosgrub } \ . \ 256 1 256 vfat \ $primary{ } \ $lvmignore{ } \ method{ efi } \ format{ } \ mountpoint{ /boot/efi } \ . \ 4096 80 100% ext4 \ $primary{ } \ label{ root } \ method{ format } \ format{ } \ use_filesystem{ } \ filesystem{ ext4 } \ mountpoint{ / } \ . \ 4096 20 8192 linux-swap \ $primary{ } method{ swap } format{ } \ .
Alle weiteren Abfragen werden unterdrückt.
d-i partman-basicfilesystems/no_swap boolean false 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 d-i partman-md/device_remove_md boolean true d-i partman-md/confirm boolean true d-i partman-lvm/device_remove_lvm boolean true d-i partman-lvm/confirm boolean true 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 d-i partman/mount_style select label
Schließlich werden die gewünschten Pakete installiert.
d-i apt-setup/non-free boolean true d-i apt-setup/contrib boolean true d-i pkgsel/include string joe less tree psmisc d-i pkgsel/upgrade select full-upgrade popularity-contest popularity-contest/participate boolean false d-i finish-install/reboot_in_progress note d-i preseed/late_command string in-target \ echo "Welcome"