opsi-Docker auf ARM64: Kosteneffiziente Lösungen für kleine Unternehmen

opsi-Docker auf ARM64: Kosteneffiziente Lösungen für kleine Unternehmen

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.

Die Ausgabe bestätigt, dass Docker erfolgreich installiert und eingerichtet ist.

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

Passen Sie die Konfigurationsdatei docker-compose.yml im Texteditor an.

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.

Der Build-Prozess 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.

Öffnen Sie die Admin-Seite 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.

Läuft der Container-Stack?

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.

Passen Sie die URL des Depotservers an.

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.

Installieren Sie opsi-Pakete auf dem neuen Depot.

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.

Zum opsi-Forum

Verwandte Beiträge

Neue opsi Client-Agents für Windows, Linux und macOS

Neue opsi Client-Agents für Windows, Linux und macOS

Erfahren Sie mehr über die neueste Version des opsi Client-Agent, die wir im Branch Testing veröffentlicht haben. Entdecken Sie die neuen Features, Änderungen in Struktur und Handhabung. Lesen Sie weiter, um zu erfahren, wie diese neue Client-Agent-Generation von Client das Arbeiten mit opsi erleichtert.

Mehr lesen
Die opsiconf 2022 in Mainz: opsiconf ahoi!

Die opsiconf 2022 in Mainz: opsiconf ahoi!

Am 2. und 3. Juni 2022 fand die dritte opsiconf in Mainz statt. Ein Bericht von Heike Jurzik.

Mehr lesen