Gilt es doch, den relativ leistungsstarken Rasperry 4 Model B, den man aus einer unüberschaubaren Elektronikhalde im Keller gezogen hat, einer sinnvollen Verwendung zuzuführen. Damit alles hübsch aussieht und auch schnell und stabil ist, greift der Bastler auf ein Argon One Case mit M2 NVMe Erweiterungkassette zurück.

Denn, nicht nur sind die normalerweise verwendeten SD-Karten ein Glücksspiel; eine Testinstallation auf einer solchen beweist, dass andere Speicherhardware wohl zu ruckelfreieren Ergebnissen im Vollbetrieb führen sollte. Bevor also in noch eine, vielleicht schnellere oder doch nicht defekte, SD-Karte investiert wird, ersteht man gleich ein NVMe Modul, um den Server darauf zu betreiben.

Die Hardware

Auf dem Bild ist links das Argon One Case mit dem Lüfter in der Mitte zu erkennen. Unterhalb des Lüfters sind zwei Kühlkörper, auf dem linken ist ein mitgeliefertes Wärmeleitpad angebracht, deshalb das schwammige Aussehen.

Der 40-polige Buchse führt die die Leitungen unter einen Deckel an der Oberseite, was weitere elektronische Basteleien ermöglichen soll. Hier wird das allerdings nicht benutzt.

Rechts der Rasperry Pi mit der gesteckten Argon Erweiterungsplatte für Audio und HDMI, welche die Anschlüsse an eine gemeinsame Rückseite des Argon One Gehäuses führt. Auch hier kann man ein graues Wärmeleitpad erkennen. Wird alles zusammengesteckt, dann hilft dieses Material, die Wärme nach oben zu den Kühlkörpern abzüführen.

Was jetzt auch getan wird, die Hochzeit von Platine und Gehäuseoberteil findet nun statt, was unschwer rechterhand zu erkennen ist. Raspi- und Erweiterunsplatine werden mit vier kleinen Schrauben befestigt und damit ist dieser Teil eigentlich auch schon erledigt.

Links die Bodenplatte mit eingebautem NVMe Speichermodul; und unten ist die USB3 Schleife, welche die Platine in der Bodenplatte extern mit dem Raspi verbindet, wie hier zu sehen ist.

Voilà! Nach der Befestigung der letzten Schrauben an der Bodenplatte steht es nun fertig da, das Argon Gehäuse mit dem Raspi darin und es geht mit der Software los.

Erste Schritte

Die grundsätzliche Installation von Raspberri PI OS auf eine NVMe Disk ist mittlerweile eigentlich genauso leicht wie eine solche auf eine SD-Karte. Was allerdings vorab mit einer Boot-SD-Karte erledigt wird, ist ein Firmware-Upgrade, um ganz sicher zu sein, dass es mit der NVMe keine Probleme gibt.

Hier wird der Raspi im Übrigen noch über externen Bildsichirm und Tastatur betrieben.

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo rpi-update

Dann passiert ein bisschen etwas und mit Glück, oder nicht zu viel Pech, wird der Versuch von Erfolg gekrönt.

Wie man das Raspberry Pi OS ganz einfach auf die NVMe bekommt

In diesem Fall verbindet man die Unterseite des Cases, also jenem Teil, in dem sich die NVMe Disk befindet, per USB3 Kabel mit einer Windows oder Linux Workstation, flasht das OS mit den üblichen Tools auf die als externes USB Laufwerk erkannte Disk und lässt nach erfolgreicher Beendigung des Vorgangs die Raspi-Hardware hochfahren.
Hochziehen der Software

Jetzt wird es ernst. Nach der Installation und Aktivierung des SSH Services und eventueller Netzwerkkonfiguration - eine statische IP-Adresse, lokal konfiguriert oder auch per DHCP quasi-statisch vergeben, ist beim Serverbetrieb auch im lokalen Netzwerk durchaus von Vorteil - kann man den Raspi schon ins lokale Netz hängen und darauf per SSH, z.B. PuTTY, zugreifen.

SSH und Locales

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo systemctl start ssh
$ sudo systemctl enable ssh
$ sudo dpkg-reconfigure locales

  en_US.UTF8

Das letzte Kommando dient dazu, Zabbix in der Standardinstallation von Fehlermeldungen abzuhalten. Ist man weniger faul, und konfiguriert das im Zabbix ordentlich, kann man auch mit den en_GB oder de_DE Locales weitermachen.

NGINX installieren

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get remove apache2
$ sudo apt-get install nginx
$ sudo systemctl start nginx

Ab jetzt könnte man den Server auf der lokalen IP-Adresse erreichen, und zwar unter http://192.168.1.67/index.html, wenn die IP-Adresse auch wirklich 192.168.1.67 lauten sollte.

PHP 8.2 installieren

$ sudo apt-get update
$ curl https://packages.sury.org/php/apt.gpg | sudo tee /usr/share/keyrings/suryphp-archive-keyring.gpg >/dev/null
$ echo "deb [signed-by=/usr/share/keyrings/suryphp-archive-keyring.gpg] https://packages.sury.org/php/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/sury-php.list
$ sudo apt-get update
$ sudo apt-get install php8.2-fpm php8.2-mbstring php8.2-mysql php8.2-curl php8.2-gd php8.2-curl php8.2-zip php8.2-xml

NGINX für PHP konfigurieren

$ sudo nano /etc/nginx/sites-enabled/default

index index.php index.html index.htm;

location ~ .php$ {
   include snippets/fastcgi-php.conf;
   fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
}
$ sudo systemctl reload nginx
$ sudo nano /var/www/html/index.php
<?php phpinfo(); ?>

MySQL/MariaDB Server installieren

$ sudo apt-get install mariadb-server
$ sudo mysql_secure_installation

Zabbix installieren

Aktuell ist die Version 6.5.1 zum Herunterladen, die ist allerdings nicht stable, in der Zukunft wird sich der Pfad wohl ändern.

$ wget https://repo.zabbix.com/zabbix/6.5/raspbian/pool/main/z/zabbix-release/zabbix-release_6.5-1%2Bdebian11_all.deb
$ sudo dpkg -i zabbix-release_6.5-1+debian11_all.deb
$ sudo apt-get update
$ sudo apt-get install zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent

Die eigentlich aktuelle Version 6.4 könnte mit dem Befehl

$ wget https://repo.zabbix.com/zabbix/6.4/raspbian/pool/main/z/zabbix-release/zabbix-release_6.4-1%2Bdebian11_all.deb

heruntergeladen werden.

MySQL/MariaDB konfigurieren

$ sudo mysql -uroot -p

CREATE DATABASE zabbix CHARACTER SET utf8 collate utf8_bin;
CREATE USER zabbix@localhost IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES on zabbix.* to zabbix@localhost;
quit;

Natürlich sollte man das Passwort "password" entsprechend ändern. Mit dem nächsten Befehl wird die Datenbankstruktur erstellt.

$ zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 zabbix -uzabbix -p

Jetzt wird der Server konfiguriert. In einer ausschließlichen IPv4 Umgebung empfiehlt es sich, mit der zweiten Zeite IPv6-Pings zu unterdrücken, um entsprechende Fehlermeldungen in Zabbix zu verhindern.

$ sudo nano /etc/zabbix/zabbix_server.conf

DBPassword=password
Fping6Location=

Aufgetreten ist das Problem mit den Fehlern bei IPv6-Pings beim SNMPv3 Template für das Synology NAS.

Jetzt muss NGINX konfiguriert werden. Im Wesentlichen wird die Zabbix Frontpage hinzugefügt und die Defaultseite  entfernt.

$ sudo nano /etc/nginx/nginx.conf

include /etc/nginx/sites-enabled/*;
include /etc/zabbix/nginx.conf;

$ sudo nano /etc/nginx/nginx.conf

include /etc/nginx/sites-enabled/*;
include /etc/zabbix/nginx.conf;

$ sudo nano /etc/zabbix/nginx.conf

listen          80;
server_name     192.68.1.67;
$ sudo rm /etc/nginx/sites-enabled/default
$ sudo systemctl enable zabbix-server
$ sudo systemctl restart zabbix-server zabbix-agent nginx php8.2-fpm

$ sudo nano /etc/zabbix/nginx.conf

listen          80;
server_name     192.68.1.67;
$ sudo rm /etc/nginx/sites-enabled/default
$ sudo systemctl enable zabbix-server
$ sudo systemctl restart zabbix-server zabbix-agent nginx php8.2-fpm

Jetzt ist Zabbix erstmals unter http://192.168.1.67 erreichbar. Username ist "Admin" und Passwort "zabbix". Es empfiehlt sich, auch dieses nach der Erstkonfiguration entsprechend anzupassen.

Nach dem Einloggen wurde die Sprache auf en_US belassen (siehe Locales weiter oben). Nach Konfiguration des Datenbankzugriffes (MySQL Database, localhost:0, Database "zabbix", MySQL User "zabbix" und Passwort "password") ist man nach erneutem Einloggen auch schon in der Lage, die Oberfläche zu konfigurieren.

Wärmstens nahegelegt wird die zusätzliche Installation von Diensten wie ufw und fail2ban. Auch mittels des Befehls und der Ergänzung:

$ sudo nano /boot/cmdline.txt

... ipv6.disable=1

lässt sich IPv6 abschalten.