Direkt zum Hauptinhalt

Server - Anleitung zum selber kompilieren (build from source)

FabAccess kann auf einer ganzen Reihe von Systemen zu Laufen gebracht werden, zum Beispiel:

Betriebssysteme

  • auf Linux/Unix-Basis
    • Ubuntu/Kubuntu
    • Arch Linux
    • Raspberry OS
    • Fedora
    • CentOS
    • Synology
    • WSL (Windows Subsystem for Linux)
  • Windows
  • MacOS

Container/Virtualisierung

  • Docker
  • Portainer
  • Moby
  • Proxmox
  • LXC
  • runc
  • Containerd
  • VirtualBox
  • 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:

  • Festplattenspeicher: ≥16 GB
    • 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)
  • Arbeitsspeicher: ≥ 1 GB
  • CPU Kerne: ≥ 1
  • OS Architektur: 64 Bit
  • u.U. sinnvoll: USV (unterbrechungsfreie Stromversorgung)
  • stabiles Wifi-Netzwerk (viele Aktoren werden u.U. lediglich per WLAN angebunden!)

Setup auf Raspberry Pi 3 mit Raspberry Pi OS (64 Bit)

Wir flashen auf einem beliebigen Rechner eine neue SD-Karte mit Hilfe von  rpi-imager. Siehe https://www.raspberrypi.com/software. Unser Raspberry Pi 3 Model B+ ist vergleichsweise ziemlich alt und hat folgende Specs:

  • Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-Bit-SoC @ 1,4GHz
  • 1GB LPDDR2 SDRAM
  • 2,4GHz und 5GHz IEEE 802.11.b/g/n/ac Wireless LAN, Bluetooth 4.2, BLE
  • Gigabit Ethernet über USB 2.0 (maximaler Durchsatz 300 Mbps)
  • Erweiterte 40-polige GPIO-Stiftleiste
  • HDMI® in voller Größe
  • 4 USB 2.0-Anschlüsse
  • CSI-Kamera-Port für den Anschluss einer Raspberry Pi-Kamera
  • DSI-Display-Port für den Anschluss eines Raspberry Pi-Touchscreen-Displays
  • 4-poliger Stereoausgang und Composite-Video-Anschluss
  • Micro-SD-Anschluss zum Laden Ihres Betriebssystems und Speichern von Daten
  • 5V/2.5A DC Stromeingang
  • Power-over-Ethernet (PoE)-Unterstützung (separater PoE-HAT erforderlich)

Imaging / Provisioning

sudo apt install rpi-imager
Setup-Schritte anzeigen (aufklappen)

grafik.png

grafik.png

Wir vergeben als Benutzername fabinfra-root und das Passwort vulca

grafik.png

grafik.png

grafik.png

Unser Image: Debian Bookworm Linux MP PREEMPT Debian 1:6.6.51-1+rpt3 (2024-10-08) aarch64

Standardpakete installieren

sudo apt update && sudo apt upgrade
sudo apt install vim libgsasl7-dev libssl-dev cmake clang capnproto cargo mosquitto mosquitto-clients

Die richtige Rust Version installieren (1.25.0)

rustc --version
cargo --version

rustc 1.63.0
cargo 1.65.0

# Da wir mit rust 1.63.0 Fehler beim Kompilieren von bffh bekommen, downgraden wir es!
apt purge rustc libstd-rust-1.63 libstd-rust-dev

# Wir installieren das aktuelle Rust (als normaler Nutzer). Jedoch mit dem Unterschied, dass dieses das Tool den Befehl "rustup" mitbringt, womit wir letztlich die korrekte, alte Zielversion 1.25 installieren können
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rust.sh
chmod +x rust.sh
./rust.sh -v #install rust - dauert ca. 10 Minuten - wir installieren die Standardvariante 1)
rm rust.sh

#cargo in .bashrc einfügen
echo 'source "$HOME/.cargo/env"' >> ~/.bashrc
source ~/.bashrc

#zu alter Version downgraden:
rustup install 1.25.0
rustup default 1.25.0

#Version erneut checken
rustc --version
cargo --version
 
rustc 1.25.0 (84203cac6 2018-03-25)
cargo 0.26.0 (41480f5cc 2018-02-26)

Folgenden Fehler erhalten wir,wir soäter beim Kompilieren von bffh, wenn rust zu neu ist:ist, sodass wir gleich vorbeugen:

(signal: 11, SIGSEGV: invalid memory reference)

Mosquitto vorbereiten

sudo vim /etc/mosquitto/mosquitto.conf
# Place your local configuration in /etc/mosquitto/conf.d/
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example
 
#per_listener_settings true
#per_listener_settings false
listener 1883 fabaccess.local
#allow_anonymous true
allow_anonymous false
password_file /etc/mosquitto/pw.file
pid_file /run/mosquitto/mosquitto.pid
persistence true
persistence_location /var/lib/mosquitto/
#log_dest file /var/log/mosquitto/mosquitto.log
#log to journald
log_dest syslog
include_dir /etc/mosquitto/conf.d

Passwort Datei anlegen

Wir erzeugen einen Standardnutzer und nennen ihn fabaccess-defaultuser (kann beliebig genannt werden) und vergeben ein Passwort. Wir verwenden als Passwort den Wert  default

sudo mosquitto_passwd -c /etc/mosquitto/pw.file fabaccess-defaultuser

Es können beliebig viele Nutzer in die Passwortdatei geschrieben werden. Das hängt vom gewünschten Setup ab!

Mosquitto Dienst starten

sudo systemctl restart mosquitto.service
sudo journalctl -f -u mosquitto.service

BFFH Installation (Version "interfacer" - entspricht v0.4.3 Alpha - vom 17.03.2023)

Nach dem Installieren von Mosquitto können wir uns unserem BFFH Server widmen. Wir arbeiten nachfolgend im Verzeichnis /opt/fabinfra/. Es kann aber jedes andere Verzeichnis verwendet werden

mkdir -p /opt/fabinfra/
cd  /opt/fabinfra/
git clone https://gitlab.com/fabinfra/fabaccess/bffh.git --recursive 
cd /opt/fabinfra/bffh/

#wir wechseln den Branch auf die aktuellste Entwicklerversion. Siehe https://gitlab.com/fabinfra/fabaccess/bffh/-/commits/feature%2Fclaims_api -> das lassen wir, denn es klappt nicht mit "cargo build --release"
#git checkout feature/claims_api

#wir wechseln zum Branch "development"
git checkout development

# Submodules updaten
git submodule update --remote

# BFFH kompilieren
cargo build --release #dauert ca. 25 Minuten

# Standard-Dateien kopieren
cp -R /opt/fabinfra/bffh/examples/ /opt/fabinfra/bffh/target/release/

Arch Linux

  1. sudo pacman -Syu
  2. sudo pacman -S make cmake clang gsasl
  3. sudo pacman -S git rust capnproto

CentOS

  1. sudo yum update
  2. sudo yum install curl && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  3. sudo yum install epel-release && sudo yum install capnproto
  4. sudo yum install https://packages.endpointdev.com/rhel/7/os/x86_64/endpoint-repo.x86_64.rpm && sudo yum install git
  5. sudo yum install centos-release-scl && yum install llvm-toolset-7 && scl enable llvm-toolset-7 bash (Change bash to youre shell)
  6. sudo yum install gcc-c++ libgsasl-devel openssl-devel cmake

FreeBSD

TODO

Build BFFH

Start new terminal - Rustup will not update path while install

  1. git clone https://gitlab.com/fabinfra/fabaccess/bffh.git --recursive
  2. cd bffh
  3. (Optional) git checkout development && git submodule update --remote (Change development to wanted branch)
  4. cargo build --release