opsi-Docker auf ARM64: Kosteneffiziente Lösungen für kleine Unternehmen
- Thomas Fritzsche, Heike Jurzik
- Essentials
- 11. Juli 2024
Mit opsi-Version 4.3 gibt es jetzt eine Lösung für kleine Büros: ein opsi-Depotserver als Docker-Container auf ARM64-Geräten wie dem Raspberry Pi 4 oder dem Orange Pi 5 Plus.
Kleine Büros, große Lösungen: opsi-Depotserver leicht gemacht
Häufig kommen die besten Ideen von unseren Kunden selbst. So werden wir recht oft gefragt, ob es eine einfache und effiziente Lösung für einen opsi-Depotserver in kleinen Büros oder Filialen mit bis zu 10 Clients gibt. Die kurze Antwort lautet: Ja, sicher!
Die lange Antwort gibt dieser Artikel. Er zeigt, wie Sie opsi als Docker-Container nutzen – und zwar nicht auf herkömmlicher Hardware, sondern auf einem Single Board Computer (SBC) unter ARM64. Erfolgreich getestet haben wir das auf dem Raspberry Pi 4 und dem OrangePi 5 Plus. Diese kleinen, aber leistungsfähigen Geräte bieten eine kostengünstige und platzsparende Alternative zu traditionellen Servern.
Los geht’s mit der Auswahl der Hardware und der Testumgebung.
Hardwareanforderungen für opsi auf ARM64-Einplatinenrechnern
Um einen opsi-Depotserver auf einem Single Board Computer (SBC) unter ARM64 laufen zu lassen, benötigen Sie folgende Hardware:
- Einplatinenrechner mit mindestens 4 Kernen und 4 GByte Hauptspeicher
- Externer Massenspeicher (SSD/SATA/NvME) mit 256 GByte oder mehr
- LAN-Anschluss mit mindestens 100 MBit, besser 1 GByte
Die Größe der externen Festplatte hängt hauptsächlich von der Größe des Depots und der Anzahl der dort bereitgestellten Pakete ab.
Thomas nutzt in seiner Testumgebung zwei Einplatinenrechner: einen Raspberry Pi 4B und einen OrangePi 5 Plus. Seine beiden Minirechner haben die folgende Ausstattung:
Raspberry Pi 4B
- 8 Gigabyte RAM: Das ist für die meisten Anwendungen ausreichend und gewährleistet eine reibungslose Performance.
- SSD-HAT: Ein Hardware Attached on Top ist eine speziell für den Raspberry Pi entwickelte Erweiterungsplatine. SSD-HAT ermöglicht es, eine SSD direkt an den Raspberry Pi anzuschließen, was die Speicher- und Datenübertragungsgeschwindigkeit erheblich verbessert.
- 128 GByte SATA SSD: Die SSD (Solid State Drive) verbessert die Systemleistung und Zuverlässigkeit gegenüber einer herkömmlichen SD-Karte erheblich.
OrangePi 5 Plus
- 16 GByte RAM: Das macht den Minirechner besonders leistungsfähig.
- 256 GByte eMMC: eMMC (embedded MultiMediaCard) ist ein interner Speicher, der direkt auf dem Board montiert ist und schnelle Lese- und Schreibgeschwindigkeiten bietet.
- 1 TByte NVMe-SSD: NVMe (Non-Volatile Memory Express) ist eine Schnittstelle für SSDs, die extrem hohe Datenübertragungsgeschwindigkeiten ermöglicht. Mit 1 Terabyte Speicherplatz bietet diese SSD erheblich mehr Kapazität und Geschwindigkeit als herkömmliche SATA-SSDs.
Tip
Wenn Ihre Hardware über mehrere Massenspeicher verfügt (zum Beispiel hat der OrangePi eine eMMC für Betriebssystem-Pakete und eine NVMe-SSD für Daten), können Sie Depot- und Repository-Speicher darauf ablegen.
SBC-Betriebssysteme: Raspberry Pi OS und Debian GNU/Linux
Zuerst statten Sie den Einplatinenrechner mit einem 64-Bit-Betriebssystem aus. Raspberry Pi OS für den Raspberry Pi basiert auf Debian GNU/Linux. Das System ist daher bestens für opsi geeignet.
Auf dem Orange Pi kommt Debian GNU/Linux zum Einsatz. Die offizielle Download-Seite listet mehrere Images auf; auf seinem SBC hat Thomas Orangepi5plus_1.0.6_debian_bullseye_desktop_xfce_linux5.10.110.7z
installiert.
Note
Am besten passen Sie nach der Betriebssystem-Installation die Liste der Paketquellen an. Tragen Sie dort geografisch günstig gelegene Repositorys ein.
Netzwerk konfigurieren und testen
Als Nächstes passen Sie die Netzwerkkonfiguration auf dem Einplatinenrechner an. Der Computer erhält eine feste IP-Adresse und einen zur Umgebung passenden Host- und Domainnamen. Überprüfen Sie, dass die Namensauflösung (DNS) funktioniert.
Testen Sie ebenfalls, ob Sie vom Einplatinenrechner aus den opsi-Configserver per HTTPS und auf Port 4447 erreichen können. Port 4447/TCP ist der Standardport für den zentralen opsi-Service opsiconfd
und dient zum Zugriff des opsi-Configservers auf die Pakete des opsi-Depotservers. Ob die Verbindung funktioniert, können Sie schnell im Terminal mit dem curl
-Kommando testen. In der Voreinstellung ist das Paket nicht installiert; rüsten Sie es gegebenenfalls nach:
sudo apt update
sudo apt install curl ca-certificates
curl --insecure https://<fqdn>:4447/public
Ersetzen Sie <fqdn>
durch den FQDN oder die IP-Adresse des opsi-Configservers. Das Verzeichnis public
ist in der Regel ohne Authentifizierung auf dem Configserver erreichbar. Als Rückmeldung erhalten Sie eine XML-Datei.
Raspberry Pi 4B/OrangePi 5 Plus: Docker installieren
Installieren Sie Docker auf dem Minirechner. Dazu importieren Sie als Erstes den Docker-GnuPG-Schlüssel:
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
Anschließend tragen Sie das Docker-Repository in einer Datei unterhalb des Verzeichnisses /etc/apt/sources.list.d/
ein:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Aktualisieren Sie dann die Liste der verfügbaren Pakete und bringen Sie das System auf den neusten Stand:
sudo apt update
sudo apt upgrade
Danach installieren Sie die folgenden Pakete mitsamt allen Abhängigkeiten:
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Überprüfen Sie, dass Docker erfolgreich installiert und eingerichtet ist. Dazu rufen Sie den Befehl docker run --rm hello-world
aus; er lädt das Image von Docker Hub herunter (falls es noch nicht lokal vorhanden ist), erstellt einen Container aus dem hello-world
-Image und startet ihn und führt das darin enthaltene Programm aus. Im Terminal sehen Sie dann eine Nachricht als Bestätigung, dass alles korrekt funktioniert. Zum Schluss wird der Container automatisch gestoppt und beendet.
opsi-Docker-Repository klonen und Konfiguration anpassen
Klonen Sie das opsi-GitHub-Repository und wechseln Sie ins Verzeichnis opsi-docker/opsi-server
:
git clone https://github.com/opsi-org/opsi-docker.git
cd opsi-docker/opsi-server
Dort liegt die Konfigurationsdatei docker-compose.yml
, die Sie in einem Texteditor bearbeiten. Blättern Sie bis zur Zeile volumes
; dort können Sie die folgenden Zeilen mit einem vorangestellten Rautezeichen (#
) auskommentieren:
volumes:
mysql_data:
driver: local
grafana_data:
driver: local
Da Sie einen Depotserver aufsetzen, können Sie auch die Einträge für MySQL und Grafana im Bereich services
auskommentieren.
Note
Achten Sie darauf, mysql
dann auch im Abschnitt opsi-server
für das Attribut depends_on
zu deaktivieren.
Im Abschnitt redis
ersetzen Sie das dort gelistete Image (redislabs/redistimeseries:latest
), da es nicht auf der ARM-Architektur funktioniert. Tragen Sie stattdessen Folgendes ein:
redis:
image: redisfab/redistimeseries:1.10.12-arm64v8-jammy
Unter environment
gibt es einige Umgebungsvariablen für die Container. Die dort gesetzten Kennwörter sollten denen des opsi-Configservers entsprechen. Dazu gehören die Einträge hinter OPSI_ADMIN_PASSWORD
und OPSI_ROOT_PASSWORD
. Definieren Sie ebenfalls OPSI_HOST_ROLE
:
OPSI_HOST_ROLE: depotserver
Eigenes opsi-Image auf ARM64 erstellen
Da das uib-Repository auf Docker Hub nur Images für die x86-64-Plattform zur Verfügung stellt, der Einplatinenrechner aber ein ARMv8-64-System ist, bauen Sie das Image jetzt selbst. Sofern beim Build-Prozess kein anderes Zielsystem angegeben wird, erstellt Docker solche Images passend zur Host-Plattform:
sudo docker build -t opsi-armv8:4.3
Warten Sie, bis der Build-Prozess durchgelaufen ist – das kann bis zu 30 Minuten dauern.
Neues Depot mit Configserver verbinden
Um den neuen Depotserver mit dem Configserver zu verbinden, erstellen Sie zunächst ein Host-Objekt auf dem Configserver. Am schnellsten gelingt das über die Admin-Seite. Öffnen Sie die Adresse https://<fqdn>:4447/admin
im Browser; <fqdn>
ersetzen Sie durch den FQDN oder die IP-Adresse des opsi-Configservers. Melden Sie sich an und wechseln Sie zum Reiter Depots.
Unter der Liste mit vorhandenen Depots können Sie ein neues anlegen. Ins Feld New depot ID tragen Sie den FQDN des Depotservers ein. Erfassen Sie optional eine Beschreibung und klicken Sie auf Create depot. So erhalten Sie den Host Key, den Sie zusammen mit der Service-URL des Configservers in die Datei docker-compose.yml
eintragen:
OPSI_SERVICE_ADDRESS:
OPSI_HOST_KEY:
Speicherorte (volumes
) für Redis und opsi konfigurieren
In der Datei docker-compose.yml
können Sie ebenfalls die Speicherorte der Volumes für Redis und das opsi-Depot eintragen. Dazu hängen Sie den externen Massenspeicher an den Einplatinenrechner und partitionieren die Festplatte; als Dateisystem empfehlen wir Ext4. Nach dem Mounten des Datenträgers (etwa unter /mnt/data
) passen Sie die volumes
-Einträge in docker-compose.yml
entsprechend an:
services:
[...]
redis:
[...]
volumes:
- redis_data:/data
[...]
opsi-server:
[...]
volumes:
- opsi_data:/data
Container-Stack starten und testen
Jetzt können Sie den Stack starten (docker-compose -f docker-compose.yml up
). Im Terminal sehen Sie viele Meldungen, etwa Informationen zum Start der beiden definierten Services opsi-server
und redis
. Sobald Sie eine Meldung wie diese hier sehen, hat der Depotserver erfolgreich seinen Dienst aufgenommen:
opsi-server_1 | [1] [2024-05-22 06:41:38.002] [] Switching to user opsiconfd (opsiconfd.py:106)
Beenden Sie den Testlauf mit [Strg]+[C] und starten Sie den Dienst im Hintergrund (Parameter -d
):
docker-compose -f docker-compose.yml up -d
Nach kurzer Wartezeit erscheint wieder der Prompt, und Sie können jetzt mit dem Kommando docker container ps
prüfen, ob der Stack komplett läuft.
Schauen Sie ebenfalls nach, ob der Depotserver seine Admin-Seite ausliefert. Öffnen Sie dazu im Webbrowser die Adresse https://<docker-host>:4447/admin
. Sie sollten jetzt den Login-Dialog sehen und können sich mit dem Benutzernamen adminuser
und dem in der docker-compose.yml
eingetragenen Passwort anmelden.
Feinschliff und letzte Anpassungen
Falls Sie den neuen Depotserver nur über die IP-Adresse und nicht über den FQDN erreichen können, passen Sie gegebenenfalls die Netzwerkeinstellungen an und fügen die notwendigen Einträge zum DNS-Server hinzu. Außerdem sollten Sie die Depoteigenschaften kontrollieren; am leichtesten gelingt das über die Management-Oberfläche opsi-configed
. Schauen Sie auf dem Reiter Depot-Konfiguration nach, ob der Eintrag für die repositoryRemoteUrl korrekt ist. Steht dort eine Adresse, die mit smb://
beginnt, ändern Sie diese auf webdavs://
. Da das Docker-Image ohne Samba läuft, funktioniert auch der Zugriff per SMB-Protokoll nicht.
Testen Sie danach das neue Depot und installieren Sie ein opsi-Paket. Öffnen Sie ein Terminal auf dem opsi-Configserver, wechseln Sie ins Verzeichnis /var/lib/opsi/repository
und rufen Sie opsi-package-manager
auf; hinter -d
geben Sie den neuen Depotserver an und -vv
sorgt für eine sehr ausführliche Rückmeldung.
Wechseln Sie zurück zu opsi-configed
, wählen Sie den neuen Depotserver aus und öffnen den Reiter Standard-Propertys. Im Hauptfenster sehen Sie die opsi-Produkte, die auf diesem Depot zum Verteilen bereitstehen. Sie können nun wie gewohnt fortfahren, dem Depot Clients zuweisen und Produkte installieren.
Wichtige Hinweise für den Betrieb
Wie erwähnt, unterstützt der Depotserver als Docker-Container keine Samba-Freigaben. Stattdessen kommt WebDAV zum Einsatz, um Dateien zu teilen. Das gilt auch für den Client-Agent – stellen Sie daher sicher, dass der opsi-Client-Agent während der Installation zwingend das Server-Zertifikat mit einspielt.
Wenn Sie bestehende opsi-Clients dem neuen Depot zuordnen möchten, müssen Sie den Client-Agent eventuell neu installieren. Überprüfen Sie im opsi-configed
den Host-Parameter opsiclientd.global.install_opsi_ca_into_os_store
für die entsprechenden Clients. Steht dieser auf false
, dann ändern Sie den Wert auf true
. So wird das Server-Zertifikat des neuen Depots im Zertifikatsspeicher des Betriebssystems des Clients installiert.
Fazit: Neue Depots in 2 bis 3 Stunden
Ein solides Grundwissen über Single Board Computer (SBC) vorausgesetzt, ist die Einrichtung des neuen Depots in wenigen Stunden erledigt. Kostengünstige Einplatinenrechner mit externen Speichermedien eignen sich ideal als opsi-Depotserver – sie verbrauchen wenig Energie und sind dennoch leistungsstark.
Natürlich gibt es noch Möglichkeiten, das Setup und die Prozesse zu optimieren. Falls Sie Anmerkungen oder Fragen haben, diskutieren Sie gerne mit uns im opsi-Forum über diesen Artikel.