Installation im Air-Gap-Netzwerk
Überblick
In Netzwerken ohne Internetzugang erfolgt die Installation über ein einziges Bundle. Das Verfahren umfasst drei Schritte:
- Bundle erstellen auf einem Gerät mit Internetverbindung (oder ein von KOPENS bereitgestelltes Bundle herunterladen).
- Übertragen auf den Server im Air-Gap-Netzwerk mittels zugelassener Medien.
- 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.
| Pfad | Inhalt |
|---|---|
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) |
NOTICE | Integrierte Drittkomponenten und jeweilige Lizenzstandorte |
EULA.txt | Nutzungsbedingungen 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
| Umgebungsvariable | Standardwert | Bedeutung |
|---|---|---|
INCLUDE_DATALAKE | 1 | Data Lake Images ebenfalls einbetten |
OS_TARGET | rhel | rhel · ubuntu · both — Festlegung der zu bettenden OS-Pakete |
VERSION | Monat (yyyy.mm) | Version im Bundle-Dateinamen |
OUT_TGZ | Unter Repository | Direkte Angabe des Ausgabepfads |
AIRGAP_KEEP | 3 | Beibehalten der letzten N Bundles, ältere werden gelöscht |
INCLUDE_DATALAKE=0 erstellenSowohl 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.
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:
- Bundle-Validierung — Überprüfung von Signatur und Checksumme mittels Seitendatei-Set (siehe unten).
- Offline-Installation der Docker Engine —
rpm -ivhoderdpkg -i. Wird übersprungen, falls bereits installiert. - Images laden — Alle tar-Dateien in
images/werden viadocker loadgeladen. - Abdeckungsprüfung — Abgleich der geladenen Images mit
compose config --images. - 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.
| Datei | Inhalt |
|---|---|
<번들>.tar.gz.sha256 | sha256sum -c Eingabe |
<번들>.tar.gz.sha256.sig | cosign-Signatur für die Checksummendatei |
<번들>.tar.gz.pub | Kopie 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
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.
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 loadwerden. - Die reine Neuerstellung von Containern via
./update.shist kein Upgrade — Betriebs-Skripte und Compose-Dateien blieben auf dem alten Stand.
Häufige Fehlerquellen
| Symptom | Ursache | Maßnahme |
|---|---|---|
| Bundle-Erstellung endet mit «Keine Images gefunden» | Keine Plattform-Anmeldedaten auf dem Erstellungsgerät | Sidecar zuerst einrichten und erneut ausführen |
| Worker startet nicht | Bundle mit INCLUDE_DATALAKE=0 erstellt | Erneut mit Standardwert (1) erstellen |
| Registry-Pull-Timeout während Installation | Stack fordert Images an, die nicht im Bundle sind | Erneut gemäß der von airgap-load.sh ausgegebenen Liste «fehlender Images» erstellen |
| Docker wird auf Ubuntu-Zielserver nicht installiert | Bundle enthält nur rpm | Erneut mit OS_TARGET=ubuntu oder both erstellen |
Weitere Informationen
- Docker Installation — Konfiguration der neun Container und manuelle Installationsschritte
- Einzeilen-Installation — Empfohlener Weg für Umgebungen mit Internetzugang
- Änderung des Initialpassworts — Zwingend unmittelbar nach der Installation