メインコンテンツまでスキップ

閉域網インストール

概要​

インターネットに接続できないネットワークには、1つのバンドルでインストールします。手順は3つのステップに分かれています。

  1. インターネットに接続可能な端末でバンドルを作成する(またはKOPENSが発行したバンドルをダウンロードする)。
  2. 許可された媒体を使用して閉域網サーバーに転送する。
  3. 閉域網サーバーでロードしてインストールする。

バンドルにはDockerエンジンインストールパッケージまで含まれています。対象サーバーにDockerがインストールされていなくても問題ありません。

バンドルの構成内容​

成果物は plantpulse-platform-images-<version>.tar.gz 1つのファイルです。

パス内容
images/イメージごとに docker save なtarを1つずつ
docker-rpms/RHEL・Rocky用Dockerエンジンrpm
docker-debs/Ubuntu用Dockerエンジンdeb (OS_TARGET で選択)
repo/インストール・運用スクリプトと compose/ 全体 (bin/env.sh を含む)
NOTICE内蔵サードパーティ構成要素と各ライセンスの位置
EULA.txtPlantPulse自体の使用条件

NOTICE と EULA.txt はイメージ内にも存在しますが、バンドルのルート直下に配置します。 何が含まれているかを確認するために、10GBのtarを docker load することは現実的ではないためです。

ステップ1 — バンドルの作成​

KOPENSが発行したバンドルを利用することを推奨します。

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

直接作成する必要がある場合は、インターネットに接続可能な端末で以下を実行します。

cd /opt/kopens/plantpulse-platform-docker/bin
./airgap-bundle.sh
環境変数デフォルト値意味
INCLUDE_DATALAKE1データレイクイメージを同時に含める
OS_TARGETrhelrhel · ubuntu · both — どのOSパッケージを含めるか
VERSION当月(yyyy.mm)バンドルファイル名に固定されるバージョン
OUT_TGZリポジトリ以下成果物パスを直接指定
AIRGAP_KEEP3最新のN個だけ残し、古いバンドルを削除する
INCLUDE_DATALAKE=0 で作成しないこと

クラスターのマスターとワーカー5台すべてが plantpulse-datalake イメージで起動します(2026-08-31 から compose/docker-compose.worker.yml がこのイメージに変更されました)。この値を 0 に設定して作成したバンドルでは、マスターもワーカーも起動できません。デフォルト値が 1 であるのはこのためです。

イメージリストを手動で記述しないこと

airgap-bundle.sh は含めるイメージを docker compose config --images で抽出します。 以前はリストをスクリプト内に記述していましたが、2026-09-01の実測において、スタックが実際に要求するイメージは9個であり、その中に plantpulse-platform は含まれていませんでした — compose/docker-compose.yml のどのサービスもそれを起動しません。つまり、当時のバンドルは「使用しないイメージ1個」を含み、「必要な8個」を欠いた状態で、閉域網インストールが不可能な状態でした。リストを二重に管理しないでください。

バンドルを作成する端末では、プラットフォーム資格情報が事前に設定されている必要があります。 compose ファイルでそれらの値を :? として宣言しているため、設定がない場合はイメージが一つも取得できず、スクリプトは空のバンドルを作成せずにエラーで終了します。

ステップ2 — 閉域網サーバーへの転送​

USB、内部ファイルサーバー、scpなど、許可された媒体を使用して .tar.gz を対象サーバーに転送します。

ステップ3 — ロードとインストール​

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 が順次処理を行います。

  1. バンドル検証 — サイドファイルセットで署名とチェックサムを確認します(後述)。
  2. Dockerエンジンオフラインインストール — rpm -ivh または dpkg -i。インストール済みの場合はスキップします。
  3. イメージロード — images/ 内のtarをすべて docker load します。
  4. カバテグ検査 — ロードされたイメージを compose config --images と照合します。
  5. install.sh 呼び出し — SKIP_LOGIN=1。イメージが既にローカルに存在するため、レジストリログインは行いません。

0ステップ — バンドル検証 (2026-09-18 からサイドファイルセット)​

バンドルと共にファイルセットが提供されます。

ファイル内容
<번들>.tar.gz.sha256sha256sum -c 入力
<번들>.tar.gz.sha256.sigそのチェックサムファイルに対する cosign署名
<번들>.tar.gz.pub検証キーのコピー

airgap-load.sh が2つのステップを順に実行します — まず署名を確認し、その次にチェックサムを適用します。 認証されていないチェックサムは証拠にならないためです。

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

# 2) 번들의 바이트가 그 체크섬과 맞는가
sha256sum -c <번들>.tar.gz.sha256
署名対象は「バンドル」ではなく「チェックサムファイル」です

バンドルが 8 GB を超える一方、cosign sign-blob は対象を丸ごとメモリにロードします。そのため、署名はチェックサムサイドファイルに付与し、バンドル自体はそのチェックサムで確認します。旧 <번들>.tar.gz.sig は今後作成されません — その名前を記載した手順書がある場合は修正してください。

サイドファイルがない場合は「検証なし」で進行します

airgap-load.sh はサイドファイルがない場合にその旨をログに出力し、インストールを継続します。旧名(.tar.gz.sig)のみを持つバンドルは、検証をスキップしてインストールされます。 画面に表示される0ステップの行を必ず確認してください。

また、この検証は転送中の破損や一部の差し替えを検知します。バンドル全体を差し替え可能な相手であれば、サイドファイルも同時に差し替え可能です。そのため、セキュリティレビューが必要な現場では、キーをバンドルとは別の経路で個別に受け取り検証してください。

ステップ3がこのスクリプトの核心です。不足しているイメージがある場合、インストールを開始する前にその名前を表示して停止します。これがない場合、インストールが大幅に進んだ後にレジストリプールのタイムアウトで停止しますが、閉域網においてレジストリはそもそも到達不可能な場所です。

images/ が空であるか、tar一つでもロードに失敗した場合、その場で停止します — 不完全な状態でインストールを開始することはありません。

インストール後の起動検証(./up.sh, ./stack-verify-boot.sh)および運用点検(./ops-check.sh)は、Dockerインストールと同様です。

閉域網アップデート​

新しいバージョンでバンドルを再作成し、同様の手順で転送した後、新しいバンドルを展開してその中の bin/airgap-load.sh を再実行します。インストール済みスタックがある場合はアップグレードと判断し、まずバックアップを行い([2.9] An installed stack was found … this is an UPGRADE)、イメージをロードした後にインストーラーを実行します。失敗した場合は自動的に以前のバージョンにロールバックします — サポート範囲およびバックアップ・ロールバックについては アップグレード を参照してください。

  • ロールバックには、以前のバージョンのイメージがサーバーに残っている必要があります。 削除した場合は以前のバンドルを再度 docker load してください。
  • ./update.sh でコンテナのみを再生成することはアップグレードではありません — 運用スクリプト・composeが旧バージョンのまま残ります。

よくある注意点​

症状原因対策
バンドル作成時に「イメージが見つからない」として終了する作成端末にプラットフォーム資格情報がないサイドカーを先に設定して再実行
ワーカーが起動しないINCLUDE_DATALAKE=0 で作成したバンドルデフォルト値(1)で再作成する
インストール中にレジストリプルタイムアウトが発生バンドルにないイメージをスタックが要求airgap-load.sh が出力した「不足イメージ」リストに従い再作成する
対象サーバーがUbuntuだがDockerがインストールされないrpmのみが含まれるバンドルOS_TARGET=ubuntu または both で再作成する

詳細情報​