Ansible playbook and role for provisioning a FAI server for HW4F.
Go to file
Alexander Böhm b7a43229c0 Some customization for vagrant 2021-03-20 18:17:49 +01:00
roles/fai Refactoring 2021-03-20 18:13:12 +01:00
tools Feature/ipxe customization 2020-11-07 20:40:14 +01:00
.gitignore WIP 2020-10-15 00:20:05 +02:00
README.md Flage for usage of apt-cacher for server, use ansible detected default NICs as default interface values 2021-03-18 12:10:50 +01:00
Vagrantfile Some customization for vagrant 2021-03-20 18:17:49 +01:00
playbook-vagrant.yml Some customization for vagrant 2021-03-20 18:17:49 +01:00

README.md

HW4F Netboot Installer

Server die automatische Installation über das Netzwerks von Ubuntu 20.04 im Rahmen des https://hardwareforfuture.de(Hardware for Future) Projekts des https://dezentrale.space(dezentrale e.V).

Für den Betrieb wird einmalig eine Internetverbindung benötigt. Der Server wird über Ansible aufgesetzt. Hierfür werden verschiedene Komponenten installiert, u.a. FAI (Fully Automatic Installtion). Mit dem Server wird ein Netz aufgespannt, welches für den Anschluß des zu installierenden Rechner verwendet wird. Wenn die Rechner mit dem Netzwerk verbunden sind, können sie über einen Netzwerkboot (F-Testen beim Start des Rechners) über PXE gebootet werden. PXE lädt die erforderliche Dateien vom Server und der FAI-Installer installiert dann Ubuntu auf den Rechner.

Es wird ein Nutzer demo angelegt. Das Passwort ist fai. Dieser Nutzer kann Administrationsrechte erlang und es sollte nach der Anmeldung das Passwort dringenst geändert werden.

Voraussetzungen

Server:

  • Debian Buster

Zu installierende Clients:

  • CPU mit x86-64 Unterstützung
  • 512 MB RAM empfohlen
  • mehr als 20 GB Festsplatte oder SSD
  • PXE-fähig oder USB-Stick mit bootfähigen iPXE oder iPXE-CD zum Booten des Rechern

Verwendung

Zunächst ansible für die automatische Installation und Konfiguration aller Komponeten herunterladen:

apt install ansible

Danach ein Playbook (z.B. fai.yml) anlegen und die grundlegende Parameter festlegen:

- hosts: localhost
  become: true
  vars:
    dhcp_interface: eth1 # NIC für die Installer Netz
    wan_interface: eth0  # NIC zum Internet
  roles:
    - fai

Danach das Playbook ausführen:

ansible-playbook fai.yml

Konfiguration

Über Ansible-Variablen kann die Installation noch weiter angepasst werden.

Variable Bedeutung Standard
dhcp_interface NIC des Installtionnetzs eth1
wan_interface NIC zum Internet eth0
server_name Server-Name faiserver
domain_name Domain-Name des Netzes local
server_ip IP des Servers 192.168.33.1
server_netbits Bits der Netzmaske 24
server_netmask Netzmaske 255.255.255.0
apt_cacher_offline_mode true, um nur den vorhanden Packet-Cache als Repository zu nutzen false
debian_release Debian Release, was für FAI genutzt werden soll. buster
pxe_preselected_entry Vorausgewählte iPXE-Eintag __exit (von lokale Datenträge start)
pxe_menu_timeout Timeout für iPXE-Menu in Milisekunden 5000
ipxe_additional_entries Zusätzliche Einträge für iPXE-Menu keine
use_apt_cache_for_server Apt Cache für den Server selbst verwenden false

Beispielsweise kann der Server mit obigen Playbook aufgesetzt werden, eine Rechner mit Ubuntu installiert werden und danach der Server wie folgt in den Offline-Installationsmodus versetzt werden:

- hosts: localhost
  become: true
  vars:
    dhcp_interface: eth1 # NIC für die Installer Netz
    wan_interface: eth0  # NIC zum Internet
    apt_cacher_offline_mode: true
  roles:
    - fai

Danach das Playbook noch einmal ausführen, um die Konfigration zu aktualisieren:

ansible-playbook fai.yml

Zusätzliche Menü-Einträge im iPXE-Menü

Das vordefinierte Playbook für playbook-vagrant.yml(Vagrant) erhält bereits einen zusätzlichen Eintrag für Memtest.

ipxe_additional_entries:
  memtest:
    name: Memtest86+
    files: tools/memtest
    kernel: memtest86+-5.31b.bin
# other:
#  name: Anzeigetext des Eintrags
#  files: path/to/files/to/copy
#  kernel: Kernel
#  args: Argumente für den Kernel
#  initrd:
#    - initrd0.img
#    - initrd1.img
#    - ...
#  multiboot: 
#    - module0.img
#    - module1.img
#    - ...

pxe_preselected_entry: memtest

Dabei werden alle Dateien unter, die im files ausgewiesen sind, in das PXE-Verzeichnis kopiert. Es wird ein zusätzlichen Menüeintrag angelegt mit dem Label memtest (Name des Eintrags) und als Anzeigetext aus name. Es sind folgende Felder für jeden Boot-Eintrag möglich:

Feld Beschreibung iPXE-Argument
files Dateien für den Eintrag
kernel Zu ladenden Kernel kernel
args Argumente des Kernel an Kernel angehängt
initrd InitRD-Images initrd
multiboot Images für Multiboot-Kernel multiboot

Der vorausgewählt Eintrag kann über pxe_preselected_entry mit dem Label ausgewählt werden. Um FAI auszuwählen muss __fai gesetzt werden.

Details

TBD

Komponenten

  • DHCP: isc-dhcp-server
  • TFTP: tftpd-hpa
  • DNS: unbound
  • ntp: ntp
  • time: inetd
  • HTTP: nginx

Verweise