Zum Hauptinhalt springen

Installation im Air-Gap-Netzwerk

Überblick​

In Netzwerken ohne Internetzugang erfolgt die Installation über ein einziges Bundle. Das Verfahren umfasst drei Schritte:

  1. Bundle erstellen auf einem Gerät mit Internetverbindung (oder ein von KOPENS bereitgestelltes Bundle herunterladen).
  2. Übertragen auf den Server im Air-Gap-Netzwerk mittels zugelassener Medien.
  3. Laden und Installieren auf dem Server im Air-Gap-Netzwerk.

Das Bundle enthält auch das Installationspaket für die Docker Engine. Eine vorherige Installation von Docker auf dem Zielserver ist nicht erforderlich.

Inhalt des Bundles​

Das Ergebnis ist eine plantpulse-platform-images-<version>.tar.gz Datei.

PfadInhalt
images/Pro Image eine tar-Datei docker save
docker-rpms/Docker Engine rpm für RHEL · Rocky
docker-debs/Docker Engine deb für Ubuntu (Auswahl via OS_TARGET)
repo/Installations- und Betriebs-Skripte sowie das gesamte compose/ (einschließlich bin/env.sh)
NOTICEIntegrierte Drittkomponenten und jeweilige Lizenzstandorte
EULA.txtNutzungsbedingungen für PlantPulse

NOTICE und EULA.txt sind zwar auch in den Images enthalten, werden aber an der obersten Ebene des Bundles bereitgestellt, da das Entpacken einer 10 GB großen tar-Datei via docker load nur um den Inhalt zu prüfen, zu aufwendig wäre.

Schritt 1 — Bundle erstellen​

Der empfohlene Weg ist der Bezug eines von KOPENS veröffentlichten Bundles.

https://product.kopens.io/plantpulse-platform/plantpulse-platform-images-<version>.tar.gz

Falls eine manuelle Erstellung erforderlich ist, führen Sie auf einem Gerät mit Internetverbindung Folgendes aus:

cd /opt/kopens/plantpulse-platform-docker/bin
./airgap-bundle.sh
UmgebungsvariableStandardwertBedeutung
INCLUDE_DATALAKE1Data Lake Images ebenfalls einbetten
OS_TARGETrhelrhel · ubuntu · both — Festlegung der zu bettenden OS-Pakete
VERSIONMonat (yyyy.mm)Version im Bundle-Dateinamen
OUT_TGZUnter RepositoryDirekte Angabe des Ausgabepfads
AIRGAP_KEEP3Beibehalten der letzten N Bundles, ältere werden gelöscht
Nicht mit INCLUDE_DATALAKE=0 erstellen

Sowohl der Master als auch alle fünf Worker des Clusters starten mit dem plantpulse-datalake Image (seit 2026-08-31 wurde compose/docker-compose.worker.yml durch dieses Image ersetzt). Ein mit dem Wert 0 erstelltes Bundle kann weder Master noch Worker booten. Dies ist der Grund, warum der Standardwert 1 ist.

Imageliste nicht manuell führen

airgap-bundle.sh extrahiert die zu bettenden Images via docker compose config --images. Früher waren die Listen in den Skripten festgeschrieben, doch bei einer Messung am 2026-09-01 benötigte der Stack tatsächlich neun Images, während plantpulse-platform nicht enthalten war — kein Dienst in compose/docker-compose.yml verwendet es. Das Bundle enthielt somit ein «nicht benötigtes Image» und ließ «acht erforderliche» fehlen, wodurch die Installation im Air-Gap-Netzwerk scheiterte. Führen Sie die Liste nicht doppelt.

Auf dem Gerät zum Erstellen des Bundles müssen zuvor die Plattform-Anmeldedaten vorliegen. Da die Datei compose diese Werte als :? deklariert, werden ohne diese keine Images erfasst und das Skript endet mit einem Fehler statt eines leeren Bundles.

Schritt 2 — Übertragung auf den Server im Air-Gap-Netzwerk​

Übertragen Sie .tar.gz über zugelassene Medien wie USB, interne Dateiserver oder scp auf den Zielserver.

Schritt 3 — Laden und Installation​

sudo -i
mkdir -p /opt/kopens/plantpulse-platform-docker
tar -xzf plantpulse-platform-images-*.tar.gz -C /opt/kopens/plantpulse-platform-docker

# 자격증명 사이드카는 폐쇄망 서버에도 있어야 한다
vi /etc/kopens/plantpulse-platform.env

cd /opt/kopens/plantpulse-platform-docker/repo/bin
./airgap-load.sh

airgap-load.sh verarbeitet die Schritte in folgender Reihenfolge:

  1. Bundle-Validierung — Überprüfung von Signatur und Checksumme mittels Seitendatei-Set (siehe unten).
  2. Offline-Installation der Docker Engine — rpm -ivh oder dpkg -i. Wird übersprungen, falls bereits installiert.
  3. Images laden — Alle tar-Dateien in images/ werden via docker load geladen.
  4. Abdeckungsprüfung — Abgleich der geladenen Images mit compose config --images.
  5. Aufruf von install.sh — SKIP_LOGIN=1. Da die Images bereits lokal vorhanden sind, erfolgt keine Registry-Anmeldung.

Schritt 0 — Bundle-Validierung (Seitendatei-Set seit 2026-09-18)​

Ein Dateiset wird zusammen mit dem Bundle geliefert.

DateiInhalt
<번들>.tar.gz.sha256sha256sum -c Eingabe
<번들>.tar.gz.sha256.sigcosign-Signatur für die Checksummendatei
<번들>.tar.gz.pubKopie des Validierungsschlüssels

airgap-load.sh führt zwei Schritte nacheinander aus — zuerst wird die Signatur geprüft, dann die Checksumme geschrieben. Eine nicht authentifizierte Checksumme ist kein gültiger Beleg.

# 1) 이 체크섬이 «우리» 것인가
cosign verify-blob --key <번들>.tar.gz.pub \
--signature <번들>.tar.gz.sha256.sig <번들>.tar.gz.sha256

# 2) 번들의 바이트가 그 체크섬과 맞는가
sha256sum -c <번들>.tar.gz.sha256
Signaturobjekt ist die «Checksummendatei», nicht das «Bundle»

Da Bundles 8 GB überschreiten können und cosign sign-blob das Ziel komplett in den Speicher lädt, wird die Signatur an der Checksummen-Seitendatei angebracht; das Bundle selbst wird über diese Checksumme validiert. Alte <번들>.tar.gz.sig werden nicht mehr erstellt — bitte aktualisieren Sie entsprechende Verfahrensanweisungen.

Installation «ohne Validierung» bei fehlenden Seitendateien

airgap-load.sh protokolliert das Fehlen der Seitendateien und setzt die Installation fort. Bundles, die nur den alten Namen (.tar.gz.sig) tragen, werden unter Umgehung der Validierung installiert. Lesen Sie die Zeile für Schritt 0 auf dem Bildschirm aufmerksam.

Diese Validierung erkennt Übertragungsfehler und Teilmanipulationen. Ein Angreifer, der das gesamte Bundle ersetzen kann, könnte auch die Seitendateien manipulieren. In Umgebungen mit hohen Sicherheitsanforderungen sollten Schlüssel über einen anderen Pfad als das Bundle bezogen werden.

Schritt 3 ist der Kernwert dieses Skripts. Falls Images fehlen, wird dies vor Beginn der Installation ausgegeben und der Vorgang gestoppt. Ohne diesen Schritt würde die Installation weit fortschreiten und erst bei einem Registry-Pull-Timeout abbrechen, wobei die Registry im Air-Gap-Netzwerk ohnehin unerreichbar ist.

Falls images/ leer ist oder das Laden einer einzigen tar-Datei fehlschlägt, bricht der Vorgang sofort ab — eine unvollständige Installation wird nicht gestartet.

Die Boot-Validierung (./up.sh, ./stack-verify-boot.sh) und Betriebsinspektion (./ops-check.sh) nach der Installation entsprechen der Docker Installation.

Update im Air-Gap-Netzwerk​

Erstellen Sie ein neues Bundle mit der aktuellen Version, übertragen Sie es nach dem gleichen Verfahren und führen Sie bin/airgap-load.sh innerhalb des neuen Bundles erneut aus. Ist ein Stack bereits installiert, wird dies als Upgrade erkannt, gesichert ([2.9] An installed stack was found … this is an UPGRADE), Images werden geladen und der Installer gestartet. Bei Fehlern erfolgt ein automatischer Rollback auf die vorherige Version — Details zu Supportumfang, Backup und Rollback finden Sie unter Upgrade.

  • Für einen Rollback müssen die Images der Vorversion auf dem Server verbleiben. Falls gelöscht, müssen diese über das alte Bundle erneut docker load werden.
  • Die reine Neuerstellung von Containern via ./update.sh ist kein Upgrade — Betriebs-Skripte und Compose-Dateien blieben auf dem alten Stand.

Häufige Fehlerquellen​

SymptomUrsacheMaßnahme
Bundle-Erstellung endet mit «Keine Images gefunden»Keine Plattform-Anmeldedaten auf dem ErstellungsgerätSidecar zuerst einrichten und erneut ausführen
Worker startet nichtBundle mit INCLUDE_DATALAKE=0 erstelltErneut mit Standardwert (1) erstellen
Registry-Pull-Timeout während InstallationStack fordert Images an, die nicht im Bundle sindErneut gemäß der von airgap-load.sh ausgegebenen Liste «fehlender Images» erstellen
Docker wird auf Ubuntu-Zielserver nicht installiertBundle enthält nur rpmErneut mit OS_TARGET=ubuntu oder both erstellen

Weitere Informationen​