閉域網インストール
概要
インターネットに接続できないネットワークには、1つのバンドルでインストールします。手順は3つのステップに分かれています。
- インターネットに接続可能な端末でバンドルを作成する(またはKOPENSが発行したバンドルをダウンロードする)。
- 許可された媒体を使用して閉域網サーバーに転送する。
- 閉域網サーバーでロードしてインストールする。
バンドルには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.txt | PlantPulse自体の使用条件 |
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_DATALAKE | 1 | データレイクイメージを同時に含める |
OS_TARGET | rhel | rhel · ubuntu · both — どのOSパッケージを含めるか |
VERSION | 当月(yyyy.mm) | バンドルファイル名に固定されるバージョン |
OUT_TGZ | リポジトリ以下 | 成果物パスを直接指定 |
AIRGAP_KEEP | 3 | 最新の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 が順次処理を行います。
- バンドル検証 — サイドファイルセットで署名とチェックサムを確認します(後述)。
- Dockerエンジンオフラインインストール —
rpm -ivhまたはdpkg -i。インストール済みの場合はスキップします。 - イメージロード —
images/内のtarをすべてdocker loadします。 - カバテグ検査 — ロードされたイメージを
compose config --imagesと照合します。 install.sh呼び出し —SKIP_LOGIN=1。イメージが既にローカルに存在するため、レジストリログインは行いません。
0ステップ — バンドル検証 (2026-09-18 からサイドファイルセット)
バンドルと共にファイルセットが提供されます。
| ファイル | 内容 |
|---|---|
<번들>.tar.gz.sha256 | sha256sum -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 で再作成する |
詳細情報
- Dockerインストール — コンテナ9個の構成と手動インストール手順
- ワンラインインストール — インターネット接続環境での推奨手順
- 初期パスワード変更 — インストール直後に必ず実施