# Server - Installation mit Distributionspaketen (*:deb, *.rpm)

Mit Hilfe fertiger Installationspakete ersparen wir dem Anwender das Installieren von Kompilierungswerkzeugen und Bibliotheken und reduzieren dadurch erheblich den Ressourcen- und Zeitverbrauch. Alternativ zu den Installationspaketen gibt es auch Beschreibungen für das [Selbstkompilieren](https://docs.fab-access.org/books/fabaccess-installation/page/server-anleitung-zum-selber-kompilieren "Server - Anleitung zum selber kompilieren") sowie das [Deployment mit Containern](https://docs.fab-access.org/books/fabaccess-installation/page/server-installation-mit-docker-podman "Server - Installation mit Docker / Podman").

Im Paket `fabaccess-bffh` enthalten sind der BFFH Server, sowie das [FabFire Provisioning Tool](https://docs.fab-access.org/books/plugins-aktoren-initiatoren/page/fabfire-tools#bkmrk-fabfire-provisioning "FabFire Tools"). Die zwei Binaries, die installiert werden, sind damit:

- `/usr/bin/bffhd`
- `/usr/bin/fabfire_provision`

Im optionalen Paket `fabaccess-bffh-dbgsym` finden sich außerdem Debug Symbols für das [Fehleraufspüren](https://docs.fab-access.org/books/fabaccess-konfiguration/page/server-logs-konfigurieren-und-debugging "Server Logs konfigurieren und Debugging"), z.B. durch `gdb`, `valgrind` oder `strace`. Beim Installieren werden hierbei kryptische binäre Dateien in `/usr/lib/debug/.build-id/` abgelegt.

## Anforderungen und Kompabilität

Mindestanforderungen und kompatible Hardware finden sich [hier](https://docs.fab-access.org/books/fabaccess-installation/page/server-anforderungen-und-kompabilitat).

## Downloads

Fertige Pakete für Debian / Ubuntu / Kubuntu (\*.deb) und Fedora / CentOS / RHEL / Rocky Linux (\*.rpm) finden sich in unter folgenden Quellen.

### Direkter Download

[https://downloads.fab-access.org/?dir=bffh-packages](https://downloads.fab-access.org/?dir=bffh-packages) - auch direkt über CLI auflist- und abrufbar:

```bash
cd /tmp/ && wget --spider -r -np https://downloads.fab-access.org/bffh-packages/development/ 2>&1 | grep "\--" | grep fabaccess-bffh | awk -F ' ' '{print $3}' && cd -
```

Wir suchen das passende Paket aus (kann mit dem Kommando `arch` oder `uname -a` überprüft werden) und laden es ins Verzeichnis `/tmp/` herunter (im Bespiel `_amd64.deb`):

```bash
wget https://downloads.fab-access.org/bffh-packages/development/fabaccess-bffh_0.4.4_amd64.deb -P /tmp/
```

Und optional:

```bash
wget https://downloads.fab-access.org/bffh-packages/development/fabaccess-bffh-dbgsym_0.4.4_amd64.deb -P /tmp/
```

### GitLab Releases

[https://gitlab.com/fabinfra/fabaccess/bffh/-/releases](https://gitlab.com/fabinfra/fabaccess/bffh/-/releases) (**Achtung**: es gibt hier **noch** keine fertigen Pakete. Dies ändert sich mit den nächsten Versionen!)

### Signaturen prüfen

Der öffentliche Teil des **PGP-Schlüssels**, der für die Paketerzeugung verwendet wird, findet sich hier: [https://gitlab.com/fabinfra/fabaccess/bffh/-/blob/feature/deb+rpm/debian/public.pgp](https://gitlab.com/fabinfra/fabaccess/bffh/-/blob/feature/deb+rpm/debian/public.pgp) bzw. unter [https://keys.openpgp.org/search?q=D793B5E8A754285F9F776D22C4505B2062532D6E](https://keys.openpgp.org/search?q=D793B5E8A754285F9F776D22C4505B2062532D6E). Dieser kann verwendet werden, um die Signaturen vor dem Installieren zu überprüfen.

```bash
gpg --keyserver keys.openpgp.org --recv-keys D793B5E8A754285F9F776D22C4505B2062532D6E
```

Debian / Ubuntu / Kubuntu:

<p class="callout info">Für das Verifizieren mit gpg benötigen wir noch die die \*.sig oder *\**.sig.asc Datei (nur für \*.deb notwendig):</p>

```bash
gpg --verify /tmp/fabaccess-bffh_0.4.4_amd64.sig.asc /tmp/fabaccess-bffh_0.4.4_amd64.deb
gpg --verify /tmp/fabaccess-bffh_0.4.4_amd64.sig.asc /tmp/fabaccess-bffh-dbgsym_0.4.4_amd64.deb #optional

# Ergebnisse:
gpg: Signatur vom Mi 19 Mär 2025 01:33:43 CET
gpg:                mittels EDDSA-Schlüssel D793B5E8A754285F9F776D22C4505B2062532D6E
gpg: Korrekte Signatur von "FabInfra <info@fab-access.org>" [ultimativ]
gpg: Signatur vom Mi 19 Mär 2025 01:33:45 CET
gpg:                mittels EDDSA-Schlüssel D793B5E8A754285F9F776D22C4505B2062532D6E
gpg: Korrekte Signatur von "FabInfra <info@fab-access.org>" [ultimativ]
```

Fedora / CentOS / RHEL / Rocky Linux:

```bash
KEY=$(gpg --export --armor D793B5E8A754285F9F776D22C4505B2062532D6E) && echo $KEY > rpm --import -

rpm --verbose --checksig /tmp/fabaccess-bffh-0.4.4-1.x86_64.rpm
rpm --verbose --checksig /tmp/fabaccess-bffh-dbgsym-0.4.4-1.x86_64.rpm #optional

# Ergebnisse:
/tmp/fabaccess-bffh-0.4.4-1.x86_64.rpm:
    Header SHA256 digest: OK
    Header SHA1 digest: OK
    Payload SHA256 digest: OK
    MD5 digest: OK
/tmp/fabaccess-bffh-dbgsym-0.4.4-1.x86_64.rpm:
    Header SHA256 digest: OK
    Header SHA1 digest: OK
    Payload SHA256 digest: OK
    MD5 digest: OK
```


### Paket per Dry-run testen

#### Debian / Ubuntu / Kubuntu


Wer nicht gleich installieren will, kann vorher testen und Infos vom Paket abrufen:

```bash
dpkg-deb --info /tmp/fabaccess-bffh_0.4.4_amd64.deb

sudo apt install --simulate /tmp/fabaccess-bffh_0.4.4_amd64.deb
```


## Installation

<p class="callout warning">**Achtung**: BFFH benötigt zwingend einen laufenden Eclipse Mosquitto Server. Dieser kann sich entweder auf dem gleichen Server befinden wie BFFH, oder auf einer anderen Maschine. Deshalb wird `mosquitto` standardmäßig nicht installiert!</p>

### Debian / Ubuntu / Kubuntu

<p class="callout info">Das Paket schlägt beim Installieren die Installation weiterer optional empohlener (recommended) und abhängiger (dependent) Pakete vor. Diese Infos lassen über `dpkg-deb --info fabaccess-bffh_0.4.4_amd64.deb | grep "Depends:\|Recommends:"` abrufen oder sie werden angezeigt, wenn nicht mit `dpkg`, sondern mit `apt` installiert wird. Ein empfehlenswertes Paket ist z.B. `dhall`.</p>

Variante 1: Installation über apt (bevorzugt):

```213594
sudo apt install --no-install-recommends /tmp/fabaccess-bffh_0.4.4_amd64.deb
sudo apt install /tmp/fabaccess-bffh-dbgsym_0.4.4_amd64.deb #optional
```

Wer die empfohlenen Zusatzpakete installieren will, bekommt diese über `apt` angezeigt und kann auch wie folgt installieren, indem der Parameter `--no-install-recommends` weggelassen wird:

```213594
sudo apt install /tmp/fabaccess-bffh_0.4.4_amd64.deb
sudo apt install /tmp/fabaccess-bffh-dbgsym_0.4.4_amd64.deb #optional
```

Variante 2: Installation über `dpkg`:

```213594
sudo dpkg -i /tmp/fabaccess-bffh-0.4.4_amd64.deb
sudo dpkg -i /tmp/fabaccess-bffh-dbgsym-0.4.4_amd64.deb #optional
```

### Fedora / CentOS / RHEL / Rocky Linux

```bash
sudo rpm -i /tmp/fabaccess-bffh-0.4.4-1.x86_64.rpm
sudo rpm -i /tmp/fabaccess-bffh-dbgsym-0.4.4-1.x86_64.rpm #optional
```

Installation prüfen:

```bash
sudo dpkg -l | grep fabaccess-bffh
```

### BFFH als Service aktivieren und Logs prüfen

```bash
sudo systemctl enable bffh --now
sudo journalctl -f -u bffh.service
```

<p class="callout info">BFFH startet standardmäßig auf dem TCP-Port `59661`, wenn nicht geändert. Außerdem wird im Hintergrund auf dem TCP-Port `49289` eine [Debugger Console](https://github.com/tokio-rs/console) gestartet.</p>

## BFFH Hilfe anzeigen

Es gibt eine minimale [Manpage](https://de.wikipedia.org/wiki/Manpage) für BFFH. Diese kann angezeigt werden:

```583287
man bffhd
man fabfire_provision
```

## BFFH Konfiguration

Nach der Installation muss der Server passend konfiguriert werden. Das ist kein Bestandteil des Installers und ist komplett individuell, je nach Gebrauchszweck. Alle wichtige Infos finden sich im Kapitel [FabAccess Konfiguration](https://docs.fab-access.org/books/fabaccess-konfiguration "FabAccess Konfiguration").

## Metainformationen anzeigen

<p class="callout info">Das ist rein informativ und nicht notwendig!</p>

Ein paar Kommandos für verschiedene Zwecke (z.B. nach Tags suchen, Infos zu Paket anzeigen):

```bash
sudo apt install debtags

debtags update
debtags show fabaccess-bffh

apt-cache search fabaccess
apt-cache search bffh
apt search fabaccess
apt search bffh
apt search difluoroborane

aptitude search '?tag(network::server)'
aptitude search fabaccess
aptitude search bffh
aptitude search difluoroborane
```


## Deinstallation

Die Deinstallation von BFFH ist relativ rückstandsfrei, bis auf Konfigurationsdateien, Datenbanken und Logs. Bitte ggf. die Verzeichnisse manuell danach überprüfen:

- `/var/log/bffh/`
- `/etc/bffh/`
- `/var/lib/bffh/`

**Debian / Ubuntu / Kubuntu**

```bash
sudo apt remove fabaccess-bffh
sudo apt remove fabaccess-bffh-dbgsym
```

oder:

```bash
sudo apt purge fabaccess-bffh
sudo apt purge fabaccess-bffh-dbgsym
```

**Fedora / CentOS / RHEL / Rocky Linux**

<p class="callout info">`dnf` hat **keinen** `purge` Befehl (bei apt kann man deinstallieren oder deinstallieren + restlos bereinigen = purge). Bei `dnf` gibt nur remove!</p>

```bash
sudo dnf remove fabaccess-bffh
```

## Benennung von Debian Paketen

Diese Entscheidungen sind grundlegend, deshalb finden sie hier Ewähnung.

### `fabaccess-bffh` - BFFH Server

Der Server hat mehrere Namen: FabAccess Server, BFFH, bffh, bffhd, Diflouroborane - welcher ist der beste? Wir entscheiden uns für den Paketname `fabaccess-bffh`, weil

- der Paketname relativ klar ist und erlaubt, später weitere Pakete im Zusammenhang `fabaccess-*` zu publizieren
- mit dem Nachteil, dass es etwas länger ist als einfach `bffh` und der systemd Service `bffh` heißt. Das müssen wir im Setup also klar heraus stellen!