Eine ganzen Flotte von Rechnern lässt sich vollständig automatisch instalieren. Dazu aktivieren wir im Setup jedes einzelnen Rechners das PXE, welches per DHCP die Adresse eines TFTP-Servers erfährt und von dort das Installationssystem herunterlädt. Dieses wiederum lädt Voreinstellungen via HTTP und installiert Pakete aus einem lokalen Depot.
Wir installieren Dnsmasq, den Apache Webserver, den Avahi Daemon, der die Dienste per mDNS und DNS-SD anpreist, sowie den Apt-Cacher als Proxy für das Debian Depot und eine paketierte Version des Debian Installers.
apt install dnsmasq apache2 avahi-daemon apt-cacher-ng \ debian-installer-10-netboot-amd64
Wir deaktivieren den eingebauten DNS-Server und konfigurieren den DHCP-Server als Proxy, so dass alle Rechner weiterhin ihre Adressen vom Router beziehen. Der TFTP-Server stellt das Installationssystem auf Port 69 bereit.
/etc/dnsmasq.conf# DNS disable port=0 # DHCP Proxy log-dhcp dhcp-no-override dhcp-range=192.168.23.2,proxy # TFTP enable-tftp tftp-secure tftp-root=/usr/lib/debian-installer/images/10/amd64/text # PXE pxe-service=x86PC, "Install Debian GNU/Linux", pxelinux 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 |
/etc/apache2/sites-enabled/000-default.conf<VirtualHost *:80> ServerName nas DocumentRoot /var/www/html <Location /> Require all granted </Location> </VirtualHost>
Bevor der Debian-Installer die Voreinstellungsdatei lädt, fragt Land, Sprache, Tastaturbelegung, Hostname und diverse Netzwerkeinstellungen ab. Um das zu verhindern, übergibt man diese Daten auf der Kommandozeile des Kernels.
/usr/lib/debian-installer/images/10/amd64/text/pxelinux.cfg/MacAddressdefault auto label auto kernel debian-installer/amd64/linux append initrd=debian-installer/amd64/initrd.gz auto=true url=http://nas/preseed.cfg hostname=Host domain= DEBCONF_DEBUG=5
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 | nas | 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 |
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
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"