Freeway 5 – Hardcore Technik

dnsmasq

Was muss man dem dnsmasq mitteilen, damit er funktioniert? Erstaunlich wenig, wenn man die vielen hundert Möglichkeiten betrachtet, die dnsmasq erlaubt…

Die meisten Standardeinstellungen sind gut, und die wenigen Zeilen, die man anpassen muss, kann man in eine eigene Konfigurationsdatei in /etc/dnsmasq.d/ ablegen; alles, was diese Datei wirklich braucht, ist die Endung .conf. Hier ein Listing meiner ddt.conf:

interface=enp57s0f1
address=/training.loc/127.0.0.1
domain=training.loc
dhcp-range=172.25.100.50,172.25.100.150,255.255.255.0,12h
dhcp-boot=pxelinux.0
enable-tftp
tftp-root=/srv/tftp
log-dhcp
# kein Prompt…
pxe-prompt=“Press F8 for menu.“,5
# unterschiedliche Rechner:
# hier ist ein Bios-Rechner
dhcp-match=set:bios64,60,PXEClient:Arch:00000
dhcp-option-force=tag:bios64,option:root-path,“klaatu:/srv/fai/nfsroot“
pxe-service=x86PC,“Install Linux“,pxelinux
dhcp-boot=tag:bios64,pxelinux.0,klaatu,172.25.100.250

# das ist ein UEFI-Rechner
dhcp-match=set:efibc,60,PXEClient:Arch:00007
dhcp-option-force=tag:efi64,option:root-path,“klaatu:/srv/fai/nfsroot“
pxe-service=efi64,X86-64_EFI,“PXE Boot – efi64″,bootx64.efi,172.25.100.250
dhcp-boot=tag:efibc,bootx64.efi,klaatu,172.25.100.25

PXE

Damit der Client-Rechner PXE bootet, braucht er einerseits eine Netzwerk-Bootumgebung und ein paar Dateien von syslinx. Syslinux ist eines von einer Reihe von Paketen, die HP Anwin und andere maßgeblich entwickeln. Sie stehen bei Debian als normale Installationsdateien zur Verfügung.

Die Netzwerk-Bootumgebung holt man sich von Debian. Es ist nicht die Netboot-DVD von den Installationsmedien, sondern ein tar.gz von

Eine ganz brauchbare erste Anleitung findet sich auf dem Debian-Wiki https://wiki.debian.org/PXEBootInstall .
Wie viele solche Anleitungen sind sie aber mit Kanonen auf Spatzen geschossen, oder aber ganz generell zu kompliziert.
Am besten gefällt mir die Zeile:
Download netboot/netboot.tar.gz from a Debian mirror (see http://www.debian.org/distrib/netinst#netboot).

Die netboot.tar.gz Datei entpackt man im tftp-Verzeichnis, das dnsmasq in der Konfigurationsdatei genannt hatte. Praktisch alles, was man braucht, um per PXE von dieser Maschine aus eine normale Installation zu vollführen, steht da bereits zur Verfügung. Was fehlt, ist ein Dialog, der einen einzelne Maschinen anwählen und bauen lässt. Diesen Dialog erstellt man von Hand. Dabei ersetzt man einen Symlink mit dem Namen default (im Fall von freeway) /srv/tftp/debian-installer/pxelinux.cfg/default gegen eine richtige Datei und füllt sie mit den gewünschten Inhalten. Ein Teil der default Datei:

…oben gibt es viele MENU Zeilen…

LABEL Debian rechner1
kernel debian-installer/amd64/linux
append initrd=debian-installer/amd64/initrd.gz keymap=de netcfg/get_hostname=rechner1 netcfg/get_ipaddress=172.25.100.51/24 netcfg/get_domain=training.loc interface=auto console-setup/layoutcode=de netcfg/disable_autoconfig=true netcfg/get_gateway=172.25.100.250 netcfg/get_nameservers=172.25.100.250 netcfg/confirm_static=true auto=true preseed/url=“http://172.25.100.250/preseed/debian.cfg“
#
LABEL Debian rechner2
kernel debian-installer/amd64/linux
append initrd=debian-installer/amd64/initrd.gz keymap=de netcfg/get_hostname=rechner2 netcfg/get_ipaddress=172.25.100.52/24 netcfg/get_domain=training.loc interface=auto console-setup/layoutcode=de netcfg/disable_autoconfig=true netcfg/get_gateway=172.25.100.250 netcfg/get_nameservers=172.25.100.250 netcfg/confirm_static=true auto=true preseed/url=“http://172.25.100.250/preseed/debian.cfg“
#

Es gibt eine Datei menu.32, die man aus dem syslinux-common-Paket (im Verzeichnis /usr/lib/syslinux/modules/bios/menu.c32) nach /srv/tftp/debian-installer/amd64/boot-screens/menu.c32 kopieren muss, damit die MENU Kommandos funktionieren

UEFI

UEFI-Rechner brauchen eine anderen Bootloader, Dies war in der dnsmasq-Datei bereits zu sehen. Die Datei heißt bootx64.efi. Und es gibt eine andere „default“-Datei. Sie heißt grub.cfg und liegt in /srv/tftp/debian-installer/amd64/grub/grub.cfg


menuentry ‚Rechner1‘ {
set background_color=black
linux /debian-installer/amd64/linux keymap=de netcfg/get_hostname=rechner1 netcfg/get_ipaddress=172.25.100.51/24 netcfg/get_domain=training.loc interface=auto console-setup/layoutcode=de netcfg/disable_autoconfig=true netcfg/get_gateway=172.25.100.250 netcfg/get_nameservers=172.25.100.250 netcfg/confirm_static=true auto=true preseed/url=“http://172.25.100.250/preseed/debian_uefi.cfg“
initrd /debian-installer/amd64/initrd.gz
}
menuentry ‚Rechner2‘ {
set background_color=black
linux /debian-installer/amd64/linux keymap=de netcfg/get_hostname=rechner2 netcfg/get_ipaddress=172.25.100.52/24 netcfg/get_domain=training.loc interface=auto console-setup/layoutcode=de netcfg/disable_autoconfig=true netcfg/get_gateway=172.25.100.250 netcfg/get_nameservers=172.25.100.250 netcfg/confirm_static=true auto=true preseed/url=“http://172.25.100.250/preseed/debian_uefi.cfg“
initrd /debian-installer/amd64/initrd.gz
}

Die preseed-Datei

Jeder Eintrag der default-Datei verweist an einer Stelle auf die preseed-Datei. Sie ist eine Textdatei, die alle Antworten enthält, die man als Installierer während des Installationsvorgangs gegeben hätte. Jede Distribution hat so einen Mechanismus. Bei Centos/Redhat ist es die Kickstart-Datei, bei SUSE heißt sie Autoyast-Datei.

preseed-Datei im Download-Bereich

Der Name der Datei ist praktisch unerheblich. Allerdings sind die Statements zwingend: Jede Zeile, die nicht auskommentiert ist, entspricht einem bestimmten Punkt auf der Installations-Agenda. Was in der default-Datei schon zu sehen war: d-i steht für Debian Installer, was nach dem / kommt, ist die Abteilung des Konfigurationsvorgangs.
Im Internet gibt es viele Beispiele einer solchen Datei, mit wechselnder Qualität.
https://wiki.debian.org/DebianInstaller/Preseed
https://www.debian.org/releases/stable/example-preseed.txt
So hochherzig sie sein mögen, perfekt, vollständig oder gar fehlerfrei sind sie alle nicht

freeway-Adminstration

Der Anfang des freeway-Webservers beginnt im Verzeichnis
/srv/www/freeway; dort finden sich vor allem das admin-Verzeichnis, das alle Daten enthält. Um vereinfacht auf bestimmte Unterverzeichnisse direkt mit kurzen Pfaden zugreifen zu können, gibt es Symlinks von diesem Verzeichnis in die tatsächlichen Unterverzeichnisse, die alle unterhalb von admin liegen

  • images
  • postinst
  • preseed
  • isos

preseed ist recht selbsterklärend; dort liegt bzw. liegen die Preseed-Datei(en), auf die der PXE-Boot vorgang verweist.

In den iso-Verzeichnissen sind wie zu erwarten .iso-Dateien abgelegt, die man sich im Laufe des Kurses evtl herunterladen kann, um eine Installation durchzuführen. freeway benutzt sie eigentlich nicht normalerweise.

Images und postinst haben jeweils Unterverzeichnisse, die so heißen wie die Profile, die sie darstellen. Weil Centos bisweilen in verschiedenen Versionen aktuell ist, bzw. bestimmte Softwarepakete nicht in allen Versionen unterstützt werden, kann man auch mit Symlinks arbeiten, um die installierte Version besser zu verdeutlichen.

Nach mehreren Wochen Tests sind von den Images in den Verzeichnissen praktisch nur noch einzelne, hochkomprimierte .xz-Dateien übrig geblieben. Alle anderen Ansätze (Overlay Files, xml-Konfigurationsdateien) konnten ersetzt werden. Alles, was die Installation der virtuellen Maschine ausmacht, wurde in die postinst.sh Skriptdatei hineingepackt, die nicht übermäßig komplizierter wurde, aber sehr flexibles Vorgehen ermöglichte.

postinst

Dinge komplizierter zu machen ist immer einfacher. Dieser Warnung folgend, gibt es im postinst-Verzeichnis vowiegend vier Dinge:

  • die postinst.sh Datei. Sie ist heute generisch, d.h. sie wird bei jedem Setup auf die Basismaschine kopiert und füttert sich mit den speziellen Angaben, die aus der jeweiligen, kursspezifischen postrc gelesen wird.
  • Kurs-Unterverzeichnisse. In ihnen befindet sich normalerweise nicht mehr als die kursspezifische post_rc Datei, die spezielle Angaben (Variablen) enthält, die den Kurs definieren:
    • Kursname
    • Angabe, wie viele virtuelle Maschinen gebaut werden sollen
    • spezielle Software, die installiert werden soll
    • Dateien, die auf die Zielmaschine kopiert werden sollen
  • das all_clients Verzeichnis. Darin liegt alles, was an alle Rechner geschickt wird. Das ist z.B. die sources.list, aber auch die Anteile der Client-Software, sshd_configs, und bashrc-Dateien.