ansible-install-server/README.md

311 lines
10 KiB
Markdown
Raw Permalink Normal View History

2020-10-15 00:20:05 +02:00
# HW4F Netboot Installer
2022-12-07 14:52:06 +01:00
Server die automatische Installation über das Netzwerks von Ubuntu 22.04
im Rahmen des Projekts [**Hardware for Future**](https://hardwareforfuture.de)
des [dezentrale e.V](https://dezentrale.space/).
2022-05-01 22:31:31 +02:00
Für den Betrieb wird einmalig eine Internetverbindung benötigt.
Der Server wird über Ansible aufgesetzt.
Hierfür werden verschiedene Komponenten installiert,
2022-05-01 22:41:46 +02:00
u.a. FAI (Fully Automatic Installation).
2022-05-01 22:31:31 +02:00
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,
2022-12-07 14:52:06 +01:00
können sie über einen Netzwerkboot
(zumeist F12-Taste für das Bootmenü beim Start des Rechners) über PXE gebootet werden.
2022-05-01 22:31:31 +02:00
PXE lädt die erforderliche Dateien vom Server
und der FAI-Installer installiert dann Ubuntu auf den Rechner.
2022-05-01 22:41:46 +02:00
Es wird ein Nutzer `demo` angelegt.
Das Passwort ist `fai`.
Dieser Nutzer kann Administrationsrechte erlangen.
Das Passwort muss im Anschluss geändert werden.
2020-10-15 00:20:05 +02:00
2022-12-07 14:52:06 +01:00
## Verweise
* [FAI Project](https://fai-project.org)
* [FAI Project - Available distributions](https://fai-project.org/download/dists/)
* [FAI Project - FAI-Guide](https://fai-project.org/fai-guide/)
* [FAI Project - Variables](https://wiki.fai-project.org/index.php/Variables)
* [github.com faiproject/fai](https://github.com/faiproject/fai)
* [github.com faiproject/fai-config](https://github.com/faiproject/fai-config)
* [iPXE](https://ipxe.org)
* [Ansible](https://www.ansible.com)
## Komponenten
* DHCP: isc-dhcp-server
* TFTP: tftpd-hpa
* DNS: unbound
* ntp: ntp
* time: inetd
* HTTP: nginx
* rtime: inetd
* Apt Cache: apt-cacher-ng
2020-10-15 00:20:05 +02:00
## Voraussetzungen
Server:
2022-12-07 14:52:06 +01:00
* Debian Bullseye
* Zwei Netzwerkports oder zwei Netzwerkkarten (1x für WAN, 1x für LAN und FAI)
2020-10-15 00:20:05 +02:00
Zu installierende Clients:
2022-12-07 14:52:06 +01:00
* CPU amd64 mit Unterstützung für Hardwarevirtualisierung
* 1GiB empfohlen (min. 512MB RAM)
* mehr als 20 GB SSD oder Festplatte
* PXE-fähig oder USB-Stick mit bootfähigen iPXE oder
iPXE-CD zum Booten der Rechner
2020-10-15 00:20:05 +02:00
## Verwendung
2022-05-01 22:41:46 +02:00
Zunächst Ansible für die automatische Installation
2022-05-01 22:31:31 +02:00
und Konfiguration aller Komponeten herunterladen:
2020-10-15 00:20:05 +02:00
```console
apt install python3-pip
pip3 install ansible
2020-10-15 00:20:05 +02:00
```
2022-05-01 22:41:46 +02:00
Danach ein Playbook (z.B. `fai.yml`) anlegen
2022-05-01 22:31:31 +02:00
und die grundlegende Parameter festlegen:
2020-10-15 00:20:05 +02:00
```yml
- hosts: localhost
become: true
vars:
dhcp_interface: eth1 # NIC für die Installer Netz
wan_interface: eth0 # NIC zum Internet
roles:
- fai
```
2022-12-07 14:52:06 +01:00
Einen Eintrag hinzufügen in
2022-05-01 22:31:31 +02:00
`~/.ssh/config`
```
2022-12-11 21:35:58 +01:00
host hw4f-fai hw4f-fai.server.dezentrale.space
2022-05-01 22:31:31 +02:00
user username
2022-12-11 21:35:58 +01:00
#hostname 10.137.0.8
2022-05-01 22:31:31 +02:00
```
2020-10-15 00:20:05 +02:00
Danach das Playbook ausführen:
```
ansible-playbook fai.yml
2022-05-01 22:31:31 +02:00
2022-12-11 21:35:58 +01:00
ansible-playbook -i inventory/dezentrale.yml \
-K --check --diff -v fai.yml
2020-10-15 00:20:05 +02:00
```
2022-12-11 21:35:58 +01:00
Nur FAI rekonfigurieren und das NFSROOT erzwungen neu bauen.
```
ansible-playbook -i inventory/dezentrale.yml -l hw4f-fai \
-v --diff -t fai \
-e 'fai_nfsroot_force_rebuild=true' fai.yml
```
### Virtuale Testinstanz
2022-05-01 22:31:31 +02:00
Für eine testweise Installation kann
2022-12-07 14:52:06 +01:00
[Vagrant](https://www.vagrantup.com/) verwendet werden.
Es richtet anhand des *Vagrantfile* eine virtuelle Maschine ein
und provisioniert sie anschließend automatisch mittels Ansible.
2022-05-01 22:31:31 +02:00
Vagrant unterstützt verschiedene Provider für Virtualisierungslösungen
bspw. VirtualBox oder libvirt/KVM.
2022-05-01 22:31:31 +02:00
Zur Verwendung muss Vagrant zunächst installiert werden.
Hier beispielsweise zusammen mit VirtualBox:
```
2022-12-07 14:52:06 +01:00
### VIRTUALBOX
apt install vagrant virtualbox
2022-12-07 14:52:06 +01:00
### Libvirt/KVM
apt install vagrant qemu-system-x86
```
2022-05-01 22:31:31 +02:00
Danach kann die virtuelle Umgebung erstellt
und automatisch eingerichtet werden:
```
2022-12-07 14:52:06 +01:00
### INITIAL PROVISIONING
vagrant up --color
### FULL REPROVISIONING
vagrant destroy; vagrant up --color
```
2022-05-01 22:31:31 +02:00
Die Vagrantfile definiert eine Maschinen mit zwei Ethernet-Ports.
Der erste Port ist für Verwaltung von Vagrant
und der zweite Port (IP: `192.168.33.1`)
um die notwendige FAI Services über ein virtuelles Netzwerk anzubieten.
Mit diesen Netzwerk können dann weitere virtuelle Maschine verbunden werden,
um sie mit FAI automatisch zu installieren.
2022-05-01 22:31:31 +02:00
*Hinweis:* Die Verwendung von VirtualBox wird empfohlen.
Bei libvirt/KVM gab es Probleme
mit dem Starten von Clients für Testinstallationen im virtuellen Netzwerk.
Hier kann es helfen das Netzwerk über *Virt-Manager* neuzustarten oder
ein weiteres isoliertes Netzwerk zu erstellen
und es mit dem zweiten Netzwerkport des FAI-Servers zu verbinden.
2022-12-07 14:52:06 +01:00
#### Zugriff auf die vagrant VM
Zugriff auf die vagrant VM wird gewährt über:
```
vagrant ssh
```
Mit Benutzername und Passwort:
```
### CREDENTIALS
Username: `vagrant`
Password: `vagrant`
### COMMAND
ssh vagrant@machine-ip
```
Mit PubKey Auth
```
ssh -i .vagrant/machines/hw4f-fai-vagrant/libvirt/private_key \
vagrant@machine-ip
```
#### Zugriff auf die zu installierende Maschine nehmen (Live System)
Dies ist recht nützlich zur Analyse des Livesystems.
Auf dem FAI-Server wird zunächst die IP-Adresse des Clients herausgesucht.
Diese findet sich unter `/var/lib/dhcp/dhcpd.leases`.
Dann kann per ssh Zugriff genommen werden
```
### CREDENTIALS
Username: `root`
Password: `fai`
ssh root@192.168.33.10
```
Das Installations log findet sich unter
`tail -f /tmp/fai/fai.log`
#### Secrets
In der folgenden Konfigurationsdatei
wird u.A. auch das Root-Passwort
des Live-Systems festgelegt.
Die NFS-root configuration findet sich hier
`/etc/fai/nfsroot.conf`
Das Secret wird definiert in
`/srv/fai/config/class/FAIBASE.var`
2022-12-11 21:35:58 +01:00
2022-12-07 14:52:06 +01:00
2020-10-15 00:20:05 +02:00
### Konfiguration
Über Ansible-Variablen kann die Installation noch weiter angepasst werden.
2022-05-01 22:41:46 +02:00
2022-12-07 14:52:06 +01:00
|**Variable** |**Beschreibung** |**Standard** |
|--- |--- |---------------------------------------- |
|`dhcp_interface` |NIC des Installationnetzes (muss gesetzt sein) |`eth1` |
|`wan_interface` |NIC zum Internet |`eth0` |
|`server_name` |Server-Name |`hw4f-fai` |
|`domain_name` |Domain-Name des Netzes |`local` |
|`server_ip` |IP des Servers in CIDR-Notation |`192.168.33.9/24` |
|`gateway_ip` |IP des Default-Gateways in CIDR-Notation |`192.168.33.1/24` |
|`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. |`bullseye` |
|`pxe_preselected_entry` |Vorausgewählte iPXE-Eintag |`exit` (von lokalem Datenträger starten) |
|`pxe_menu_timeout` |Timeout für iPXE-Menu in Millisekunden |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 |`true` |
2022-12-07 14:52:06 +01:00
|`fai_hw4f_profile_username` |Desktop Benutzername |`user` |
|`fai_hw4f_profile_username` |Desktop Benutzername |`user` |
|`fai_hw4f_profile_password` |Passwort der Benutzers |`dezentrale` |
Alle relevanten Netzwerk-Informationen werden
aus der IP-Adresse des Servers abgeleitet.
2020-10-15 00:20:05 +02:00
2022-05-01 22:31:31 +02:00
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:
2020-10-15 00:20:05 +02:00
```yml
- 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
```
2022-05-01 22:31:31 +02:00
Danach das Playbook noch einmal ausführen,
um die Konfigration zu aktualisieren:
2020-10-15 00:20:05 +02:00
```
2022-12-07 14:52:06 +01:00
ansible-playbook -i inventory/dezentrale.yml \
-l hw4f-fai --diff --ask-become-pass fai.yml
### WHEN "sudo_nopasswd: true"
ansible-playbook -i inventory/dezentrale.yml \
-l hw4f-fai --diff fai.yml
2020-10-15 00:20:05 +02:00
```
2021-03-14 10:31:10 +01:00
#### Zusätzliche Menü-Einträge im iPXE-Menü
2022-05-01 22:41:46 +02:00
Das vordefinierte Playbook für `playbook-vagrant.yml` (Vagrant)
enthält bereits einen zusätzlichen Eintrag für Memtest.
2021-03-14 10:31:10 +01:00
```
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
# - ...
2022-05-01 22:41:46 +02:00
# multiboot:
2021-03-14 10:31:10 +01:00
# - module0.img
# - module1.img
# - ...
pxe_preselected_entry: memtest
```
2022-05-01 22:31:31 +02:00
Dabei werden alle Dateien unter,
die im `files` ausgewiesen sind,
in das PXE-Verzeichnis kopiert.
Es wird ein zusätzlichen Menüeintrag
mit dem Label `memtest` (Name des Eintrags) und
dem Anzeigetext aus `name` angelegt.
Es sind folgende Felder für jeden Boot-Eintrag möglich:
2021-03-14 10:31:10 +01:00
|**Feld** |**Beschreibung** |**iPXE-Argument** |
|--- |--- |--- |
|files |Dateien für den Eintrag | |
2022-05-01 22:41:46 +02:00
|kernel |Zu ladenden Kernel |`kernel` |
2021-03-14 10:31:10 +01:00
|args |Argumente des Kernel |an Kernel angehängt |
2022-05-01 22:41:46 +02:00
|initrd |InitRD-Images |`initrd` |
|multiboot |Images für Multiboot-Kernel |`multiboot` |
2021-03-14 10:31:10 +01:00
2022-05-01 22:31:31 +02:00
Der vorausgewählt Eintrag kann über `pxe_preselected_entry` mit dem Label ausgewählt werden.
Um FAI auszuwählen muss `__fai` gesetzt werden.
2021-03-14 10:31:10 +01:00