# Server - Anforderungen und Kompabilität

BFFH kann auf einer ganzen Reihe von Systemen zu Laufen gebracht werden.

## Kompatible Architekturen

Wir bieten die fertige `bffhd` und `fabfire_provision` binaries in GitLab und im [FabAccess Server Paket (\*.deb*, \**.rpm)](https://docs.fab-access.org/books/fabaccess-installation/page/server-installation-mit-distributionspaketen-deb-rpm) für folgende Architekturen an:

<table border="1" id="bkmrk-aarch64-unknown-linu" style="border-collapse: collapse; width: 75%; height: 152.217px; border-width: 1px;"><colgroup><col style="width: 35.5037%;"></col><col style="width: 10.2647%;"></col><col style="width: 34.7791%;"></col><col style="width: 19.4425%;"></col></colgroup><thead><tr style="height: 38.0333px;"><td style="height: 38.0333px;">Rust Target</td><td style="height: 38.0333px;">Debian</td><td style="height: 38.0333px;">Auch bekannt als</td><td>Adressierung</td></tr></thead><tbody><tr style="height: 38.0333px;"><td style="height: 38.0333px;">`x86_64-unknown-linux-gnu`</td><td style="height: 38.0333px;">amd64</td><td style="height: 38.0333px;">x86-64, x86\_64, AMD64 oder x64</td><td>64 Bit</td></tr><tr style="height: 38.1167px;"><td style="height: 38.1167px;">`aarch64-unknown-linux-gnu`</td><td style="height: 38.1167px;">arm64</td><td style="height: 38.1167px;">ARMv8</td><td>64 Bit</td></tr><tr style="height: 38.0333px;"><td style="height: 38.0333px;">`armv7-unknown-linux-gnueabihf`</td><td style="height: 38.0333px;">armhf</td><td style="height: 38.0333px;">ARMv7</td><td>32 Bit</td></tr></tbody></table>

<p class="callout success">**Konkrete Beispielhardware:** kompatibel sind beispielweise Raspberry Pi Zero 2 W, Pi 2, Pi 3, Pi 4 und Pi 5, sowie diverse Synology NAS und natürliche alle gewöhnlichen Computer und Server. Nicht kompatibel sind jedoch Raspberry Pi 1, Raspberry Pi Zero und Raspberry Pi Zero 2. Die nachfolgende Tabelle zeigt ein paar weitere Details.</p>

**Übersicht gängiger Geräte (Raspberry Pi, Synology) und deren Architekturen (<span style="color: rgb(45, 194, 107);">grün</span> = unterstützt, <span style="color: rgb(230, 126, 35);">orange</span> = nicht unterstützt).**

<table border="1" id="bkmrk-modell-cpu-architekt" style="border-collapse: collapse; width: 100%; height: 1044.45px; border-width: 1px; background-color: rgb(230, 126, 35);"><colgroup><col style="width: 23.2643%;"></col><col style="width: 15.0886%;"></col><col style="width: 13.4268%;"></col><col style="width: 10.5022%;"></col><col style="width: 18.8773%;"></col><col style="width: 18.8773%;"></col></colgroup><thead><tr style="height: 38.1167px;"><td style="height: 38.1167px;">Modell</td><td style="height: 38.1167px;">CPU</td><td style="height: 38.1167px;">Architektur</td><td style="height: 38.1167px;">Erschienen</td><td style="height: 38.1167px;">Rust Compiler Target</td><td style="height: 38.1167px;">Kommentar</td></tr><tr style="height: 84.8667px; background-color: rgb(230, 126, 35);"><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">Raspberry Pi Zero</td><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">ARM11</td><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">ARMv6 (32 Bit)</td><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">11/2015</td><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">`arm-unknown-linux-gnueabi` `arm-unknown-linux-gnueabihf`</td><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">Betrachten wir als deprecated, weil über 10 Jahre alt und weil 32 Bit  
</td></tr><tr style="height: 84.8667px; background-color: rgb(230, 126, 35);"><td style="height: 84.8667px;">Raspberry Pi Zero W</td><td style="height: 84.8667px;">ARM11</td><td style="height: 84.8667px;">ARMv6 (32 Bit)</td><td style="height: 84.8667px;">02/2017</td><td style="height: 84.8667px;">`arm-unknown-linux-gnueabi` `arm-unknown-linux-gnueabihf`</td><td style="height: 84.8667px;">Betrachten wir als deprecated, weil über 10 Jahre alt und weil 32 Bit  
</td></tr><tr style="height: 39.5667px;"><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">Raspberry Pi Zero 2 W</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">ARM Cortex-A</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">ARMv8 (64 Bit)</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">10/2021</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">`aarch64-unknown-linux-gnu`</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">  
</td></tr><tr style="height: 84.8667px;"><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">Raspberry Pi 1 Model A</td><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">ARM1176JZF-S </td><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">ARMv6 (32 Bit)</td><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">02/2013</td><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">`arm-unknown-linux-gnueabi` `arm-unknown-linux-gnueabihf`</td><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">Betrachten wir als deprecated, weil über 10 Jahre alt und weil 32 Bit  
</td></tr><tr style="height: 84.8667px;"><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">Raspberry Pi 1 Model A+</td><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">ARM1176JZF-S </td><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">ARMv6 (32 Bit)</td><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">11/2014</td><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">`arm-unknown-linux-gnueabi` `arm-unknown-linux-gnueabihf`</td><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">Betrachten wir als deprecated, weil über 10 Jahre alt und weil 32 Bit  
</td></tr><tr style="height: 84.8667px;"><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">Raspberry Pi 1 Model B+</td><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">ARM1176JZF-S </td><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">ARMv6 (32 Bit)</td><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">04/2012</td><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">`arm-unknown-linux-gnueabi` `arm-unknown-linux-gnueabihf`</td><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">Betrachten wir als deprecated, weil über 10 Jahre alt und weil 32 Bit  
</td></tr><tr style="height: 84.8667px;"><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">Raspberry Pi 1 Model B+</td><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">ARM1176JZF-S </td><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">ARMv6 (32 Bit)</td><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">07/2014</td><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">`arm-unknown-linux-gnueabi` `arm-unknown-linux-gnueabihf`</td><td style="height: 84.8667px; background-color: rgb(230, 126, 35);">Betrachten wir als deprecated, weil über 10 Jahre alt und weil 32 Bit  
</td></tr><tr style="height: 80.35px;"><td style="height: 80.35px; background-color: rgb(191, 237, 210);">Raspberry Pi 2 Model B</td><td style="height: 80.35px; background-color: rgb(191, 237, 210);">Cortex-A7</td><td style="height: 80.35px; background-color: rgb(191, 237, 210);">ARMv7 (32 Bit)</td><td style="height: 80.35px; background-color: rgb(191, 237, 210);">02/2015</td><td style="height: 80.35px; background-color: rgb(191, 237, 210);">`armv7-unknown-linux-gnueabihf`</td><td style="height: 80.35px; background-color: rgb(191, 237, 210);">  
</td></tr><tr style="height: 39.5667px;"><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">Raspberry Pi 2 Model B v1.2</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">Cortex-A53</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">ARMv8 (64 Bit)</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">09/2016</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">`aarch64-unknown-linux-gnu`</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">  
</td></tr><tr style="height: 39.5667px;"><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">Raspberry Pi 3 Model A+</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">Cortex-A53</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">ARMv8 (64 Bit)</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">11/2018</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">`aarch64-unknown-linux-gnu`</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">  
</td></tr><tr style="height: 39.5667px;"><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">Raspberry Pi 3 Model B</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">Cortex-A53</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">ARMv8 (64 Bit)</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">02/2016</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">`aarch64-unknown-linux-gnu`</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">  
</td></tr><tr style="height: 39.5667px;"><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">Raspberry Pi 3 Model B+</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">Cortex-A53</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">ARMv8 (64 Bit)</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">03/2018</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">`aarch64-unknown-linux-gnu`</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">  
</td></tr><tr style="height: 39.5667px;"><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">Raspberry Pi 4 Model B</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">Cortex-A72</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">ARMv8 (64 Bit)</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">07/2019</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">`aarch64-unknown-linux-gnu`</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">  
</td></tr><tr style="height: 39.5667px;"><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">Raspberry Pi 5</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">Cortex-A76</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">ARMv8 (64 Bit)</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">10/2023</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">`aarch64-unknown-linux-gnu`</td><td style="height: 39.5667px; background-color: rgb(191, 237, 210);">  
</td></tr><tr style="height: 62.2167px;"><td style="background-color: rgb(191, 237, 210); height: 62.2167px;">Synology Ds218j</td><td style="background-color: rgb(191, 237, 210); height: 62.2167px;">Armada38x</td><td style="background-color: rgb(191, 237, 210); height: 62.2167px;">ARMv7 (32 Bit)</td><td style="background-color: rgb(191, 237, 210); height: 62.2167px;">10/2017</td><td style="background-color: rgb(191, 237, 210); height: 62.2167px;">`armv7-unknown-linux-gnueabihf`</td><td style="background-color: rgb(191, 237, 210); height: 62.2167px;">  
</td></tr><tr style="height: 39.5667px;"><td style="background-color: rgb(191, 237, 210); height: 39.5667px;">Synology RS819  
</td><td style="background-color: rgb(191, 237, 210); height: 39.5667px;">rtd1296</td><td style="background-color: rgb(191, 237, 210); height: 39.5667px;">ARMv8 (64 Bit)</td><td style="background-color: rgb(191, 237, 210); height: 39.5667px;">04/2019</td><td style="background-color: rgb(191, 237, 210); height: 39.5667px;">`aarch64-unknown-linux-gnu`</td><td style="background-color: rgb(191, 237, 210); height: 39.5667px;">  
</td></tr><tr style="height: 38.0333px;"><td style="background-color: rgb(191, 237, 210); height: 38.0333px;">Synology DS718+</td><td style="background-color: rgb(191, 237, 210); height: 38.0333px;">Intel Celeron J3455

</td><td style="background-color: rgb(191, 237, 210); height: 38.0333px;">amd64 (64 Bit)</td><td style="background-color: rgb(191, 237, 210); height: 38.0333px;">09/2017</td><td style="background-color: rgb(191, 237, 210); height: 38.0333px;">`x86_64-unknown-linux-gnu`</td><td style="background-color: rgb(191, 237, 210); height: 38.0333px;">  
</td></tr><tr><td style="background-color: rgb(191, 237, 210);">A20-OLinuXino-LIME2

</td><td style="background-color: rgb(191, 237, 210);">Allwinner A20/T2 (Cortex-A7)

</td><td style="background-color: rgb(191, 237, 210);">ARMv7 (32 Bit)</td><td style="background-color: rgb(191, 237, 210);">03/2015</td><td style="background-color: rgb(191, 237, 210);">`armv7-unknown-linux-gnueabihf`</td><td style="background-color: rgb(191, 237, 210);">  
</td></tr></thead></table>

**Architekturreferenzen**

- Raspberry Pi 
    - [https://de.wikipedia.org/wiki/Raspberry\_Pi#Raspberry-Pi-Modelle](https://de.wikipedia.org/wiki/Raspberry_Pi#Raspberry-Pi-Modelle)
- Synology 
    - [https://kb.synology.com/de-de/DSM/tutorial/What\_kind\_of\_CPU\_does\_my\_NAS\_have](https://kb.synology.com/de-de/DSM/tutorial/What_kind_of_CPU_does_my_NAS_have)
    - [https://github.com/SynoCommunity/spksrc/wiki/Architecture-per-Synology-model#rtd1296-armv8](https://github.com/SynoCommunity/spksrc/wiki/Architecture-per-Synology-model#rtd1296-armv8)
- Debian Pakete 
    - [https://wiki.debian.org/SupportedArchitectures](https://wiki.debian.org/SupportedArchitectures)
- Rust 
    - [https://doc.rust-lang.org/nightly/rustc/platform-support.html](https://doc.rust-lang.org/nightly/rustc/platform-support.html)


## Kompatible Betriebssysteme

- auf Linux/Unix-Basis, zum Beispiel ... 
    - Ubuntu/Kubuntu
    - Arch Linux
    - Raspberry OS
    - Fedora
    - CentOS
    - NixOS → Luca Lutz vom Hackwerk e.V. fragen
    - Synology
    - WSL (Windows Subsystem for Linux)
- FreeBSD
- MacOS (**aktuell ungetestet!**)

<p class="callout info">**Hinweis:** BFFH kann **nicht** auf Windows nativ kompiliert werden. Das liegt an der `winapi`. Dazu gibt es auch einen [Kommentar](https://gitlab.com/fabinfra/fabaccess/bffh/-/issues/120#note_2352425411).</p>

## Geeignete Container/Virtualisierungswerkzeuge

Wer BFFH nicht nativ installieren möchte, kann auch eine Containerumgebung [und enstprechend damit aufsetzen](https://docs.fab-access.org/books/fabaccess-installation/page/server-installation-mit-docker-podman "Server - Installation mit Docker"), zum Beispiel:

- [Docker](https://www.docker.com/)
- [Portainer](https://www.portainer.io/)
- [Kubernetes](https://kubernetes.io/) → Luca Lutz vom Hackwerk e.V. fragen
- [Moby](https://mobyproject.org/)
- [Podman](https://podman.io/)
- [Proxmox](https://www.proxmox.com/en/)
- [LXC](https://linuxcontainers.org/)
- [runC](https://github.com/opencontainers/runc)
- [Containerd](https://containerd.io/)
- [VirtualBox](https://www.virtualbox.org/)
- [Boxes](https://apps.gnome.org/de/Boxes/)
- ...

## Empfehlungen für Hardware

Allgemeine Empfehlungen sind immer relativ schwer zu treffen. Je nach Größe der Institution und der vorhandenen Software- und Personallandschaft gibt es unterschiedlichste Auffassungen davon, was benötigt wird und wie es mit anderen Systemkomponenten zusammenspielen soll bzw. muss.Grundsätzlich versuchen wir, FabAccess Server mit möglichst wenig Ressourcenverbrauch zu installieren. Grundsätzlich benötigt:

- **Festplatte:**
    - BFFH benötigt prinzipiell kaum Speicherplatz. Die Binary ist ca. 200 MB groß. Dazu kommen noch winzige Konfigurationsdateien. Allerdings sollten Auslagerungsdatei, Systemdateien und Platz für Umgebungen wie python3-venv gelassen werden.
    - BFFH schreibt u.U. fleißig Log-Files (Audit). Außerdem werden ggf. weitere Systeme installiert, wie z.B. Scripts oder Monitoring-Services.
    - Wir empfehlen deshalb pauschal 16 GB oder mehr (für Betriebssystem, BFFH, Services, Log Files und Sonstige + Puffer)
    - idealerweise eine schnelle SSD oder Industrial Grade SD-Karte (mit erhöhter Lebensdauer)
- **Arbeitsspeicher**: ≥ 1,5 GB (nur zum Kompilieren der Binary - trifft nicht für die fertig ausführbare `bffhd` Binary zu!)
- **CPU Kerne**: ≥ 1
- **Netzwerkkarte** (idealerweise LAN, nicht nur Wifi)

## Sonstige Empfehlungen in der Werkstatt

- u.U. sinnvoll: USV (unterbrechungsfreie Stromversorgung)
- **stabiles** Wifi-Netzwerk (viele Aktoren werden u.U. lediglich per WLAN angebunden!)

<p class="callout success">Weiterführende Informationen zu Empfehlungen sind im Guide [Getting Started / Onboarding](https://docs.fab-access.org/books/fabaccess-installation/page/getting-started-onboarding "Getting Started / Onboarding") beschrieben.</p>