1. Index
  2. Debian
  3. Desktop
  4. Heimserver
  5. Webserver

Installation automatisieren

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.

Komponenten bei der Installation über das Netzwerk

Pakete installieren

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

Dnsmasq konfigurieren

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

Apache konfigurieren

/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80> ServerName nas DocumentRoot /var/www/html <Location /> Require all granted </Location> </VirtualHost>

Debian automatisch installieren

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/MacAddress
default 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

Voreinstellungen festlegen

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.cfg
d-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:

  1. Minimale Größe in Megabyte
  2. Priorität für Gewichtung
  3. Maximale Größe in Megabyte
  4. Typ des Dateisystems
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"

Literatur

  1. Debian Wiki: Installing Debian using network booting
  2. Debian Installationsanleitung Anhang B: Automatisieren der Installation mittels Voreinstellung