# 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 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:

```console
apt install ansible
```

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

```yml
- 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        |

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:

```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
```

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

```
ansible-playbook fai.yml
```

## Details

*TBD*

### Komponenten

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

## Verweise

* https://fai-project.org(FAI Project)
* https://ipxe.org(iPXE)
* https://www.ansible.com(Ansible)
