跳到主要内容

离线 / 隔离网络安装 (Air-gap)

本流程适用于在无法访问互联网的站点(军事设施 / 高安全等级设施 / 部分工厂)部署网关。 标准快速安装需要能够访问 product.kopens.io,而隔离网络中无法做到,因此必须 在外部获取产物并通过 USB / NAS 转运后再进行安装。

容器模式 (2026.05+,推荐)

需要转运 install 包和容器镜像 tar.zst 两个文件。install.sh 检测到同级目录下的 image/*.tar.zst 后,会自动以 docker load 导入(绕过 registry pull)。

准备 PC(可联网)

外发包不要手工制作,请使用 airgap-bundle.sh 生成。它会将仓库文件与容器镜像打包为一个整体, 不会出现版本不一致的问题。在 GitLab 上也可以运行 airgap:export 手动作业后,通过 artifacts 下载。

# 1) 저장소 받기
curl -fsSLO https://product.kopens.io/plantpulse-edge/plantpulse-edge-docker.tar.gz
mkdir -p plantpulse-edge-docker
tar xzf plantpulse-edge-docker.tar.gz -C plantpulse-edge-docker --strip-components=1

# 2) 반출 번들 굽기 — 저장소 + 이미지가 함께 들어간다
sudo bash plantpulse-edge-docker/bin/airgap-bundle.sh

# 3) USB / NAS 로 옮김 (파일명 예: plantpulse-edge-images-2026.07.tar.gz)
cp plantpulse-edge-images-*.tar.gz /media/usb/

隔离网络主机(无互联网)

sudo -i
mkdir -p /opt/kopens/plantpulse-edge-docker
tar xzf /media/usb/plantpulse-edge-images-*.tar.gz \
-C /opt/kopens/plantpulse-edge-docker --strip-components=1
cd /opt/kopens/plantpulse-edge-docker/repo/bin
# 필요하면 env.sh 에서 EDGE_ID / SITE_ID 를 박스별로 조정한 뒤 실행
sudo bash airgap-load.sh
# airgap-load.sh: 오프라인 Docker 설치 → 이미지 docker load → install.sh(SKIP_PULL=1)

安装后以容器模式进行验证:

sudo bash /opt/kopens/install/bin/status.sh
sudo bash /opt/kopens/install/bin/health.sh
curl -ks https://127.0.0.1/api/v1/system/version | python3 -m json.tool
curl -ks https://127.0.0.1/api/v1/system/health | python3 -m json.tool

隔离网络的安装完成判定标准相同。投入运行前,请按照生产验收标准 留存备份文件、acceptance log、image tag 以及凭据交接记录。


(legacy) Native 模式 air-gap 流程

以下流程仅适用于 2026.05 以下版本的 native 主机。新部署请使用上面的容器模式。


1. 准备物品

项目备注
可联网的准备 PC用于下载产物(办公室 PC 即可)
USB 磁盘(推荐 32GB+)用于搬运产物 + 依赖包 RPM
PlantPulse 产物KOPENS_EDGE_V<version>.tar.zstd (~1GB)
install.sh 副本需做部分修改以便在隔离网络中运行(URL → 本地路径)
OS RPM 包预先下载,以便 dnf 在无互联网环境中完成安装

2. 在准备 PC 上(可联网)

2.1 下载产物 + install.sh

# USB 마운트 위치
USB=/mnt/usb

# 산출물 (가장 최신 버전 — 약 1GB)
curl --proto =https --tlsv1.2 --fail \
-o $USB/KOPENS_EDGE_V2026.tar.zstd \
https://product.kopens.io/plantpulse-edge/KOPENS_EDGE_V2026.tar.zstd

# install.sh 도 같이 (참고용 — 폐쇄망에선 수정 후 사용)
curl --proto =https --tlsv1.2 --fail \
-o $USB/install.sh \
https://product.kopens.io/plantpulse-edge/install.sh

# (옵션) sha256 검증 파일
curl --proto =https --tlsv1.2 --fail \
-o $USB/install.sh.sha256 \
https://product.kopens.io/plantpulse-edge/install.sh.sha256 || true

2.2 下载 OS 依赖 RPM(以 Fedora 38 为准)

将 setup.sh 通过 dnf 安装的包预先下载并放入 USB:

# 빈 디렉토리
mkdir -p $USB/rpms
cd $USB/rpms

# setup.sh 의 dnf install 라인의 패키지 목록
PKGS="tar htop fping pv firefox java-17-openjdk-devel jna jemalloc \
jemalloc-devel zstd curl-devel expat-devel uuid wget sysstat \
chrony tuned net-tools numactl nodejs npm python3 fail2ban \
gcc glibc-devel zlib-devel libstdc++-static NetworkManager-tui \
docker-ce docker-ce-cli containerd.io \
java-17-amazon-corretto-devel"

# 의존성 포함 다운로드 (--downloadonly + --resolve)
sudo dnf install --downloadonly --resolve --downloaddir=$USB/rpms $PKGS

2.3 修改 install.sh(URL → 本地路径)

# install.sh 의 다운로드 부분을 USB 경로로
sed -i 's|https://download\.kopens\.[a-z]*\.com|file:///mnt/usb|g' $USB/install.sh
sed -i 's|https://download\.kopens\.[a-z]*\.io|file:///mnt/usb|g' $USB/install.sh
# (혹은 install.sh 내부의 `curl ... KOPENS_EDGE_*.tar.zstd` 라인을 직접 편집해 USB 경로 사용)

安全弹出 USB。


3. 在隔离网络网关上

3.1 挂载 USB + 批量安装 RPM

# USB 인식
sudo mount /dev/sdb1 /mnt/usb # 디바이스 명은 환경마다 다름

# RPM 일괄 설치 (의존성 자동 해결)
sudo rpm -Uvh --force --replacepkgs /mnt/usb/rpms/*.rpm

# (옵션) tar 보관소가 있으면 dnf 로도 가능:
# sudo dnf install --disablerepo=* --nogpgcheck /mnt/usb/rpms/*.rpm

3.2 解压产物

sudo mkdir -p /opt
cd /opt
sudo tar -I 'zstd -d' -xvf /mnt/usb/KOPENS_EDGE_V2026.tar.zstd
# /opt/kopens 에 풀림

3.3 H/W 初始化(可选)——跳过 tools/setup.sh 的依赖安装步骤

dnf install 步骤已通过 RPM 处理完毕,因此只需手动执行 setup.sh 的部分步骤:

sudo -i
cd /opt/kopens/tools

# 호스트명
hostnamectl set-hostname EDGE_<number>

# env.sh 생성
cat > /opt/kopens/plantpulse-edge/conf/env.sh << EOF
export KOPENS_HOME=/opt/kopens
export PE_HOME=/opt/kopens/plantpulse-edge
export PE_DATA_DIR=/data1
export JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto
export CLEAN_ON_STARTUP=true
EOF
mkdir -p /data1

# 네트워크 (대화형)
./net/set-1.sh
./net/set-2.sh
systemctl restart NetworkManager.service

# 로케일 + 타임존
localectl set-locale LANG=ko_KR.utf8
timedatectl set-timezone Asia/Seoul

# tuned + 방화벽 + sysctl + chrony + ssl + vpn
systemctl enable --now tuned
tuned-adm profile throughput-performance
./firewall/open.sh
./file/run.sh
./ssl/gen.sh
# ./vpn/setup.sh # 폐쇄망에선 보통 미사용

# CPU governor + hugepages
for f in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo performance > $f; done
echo 9216 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

# systemd 서비스 등록
cp /opt/kopens/tools/service/plantpulse.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable plantpulse

3.4 启动

sudo systemctl start plantpulse
sleep 60 # 풀스택 부팅 대기
/opt/kopens/plantpulse-edge/bin/ps.sh
curl -s http://127.0.0.1/api/v1/system/health | jq

4. 升级(隔离网络)

upgrade.sh 的自动下载需要互联网,无法使用。手动流程如下:

# 1. 준비 PC 에서 새 산출물 USB 로 옮김 (위 2.1 동일)
# 2. 폐쇄망 게이트웨이에서:
sudo /opt/kopens/plantpulse-edge/bin/backup.sh

sudo /opt/kopens/plantpulse-edge/bin/stop.sh
cd /opt
sudo mv kopens kopens.old.$(date +%Y%m%d-%H%M%S)
sudo tar -I 'zstd -d' -xvf /mnt/usb/KOPENS_EDGE_V<new-version>.tar.zstd
sudo /opt/kopens/plantpulse-edge/bin/start.sh

验证后保留 kopens.old.* 目录(或在磁盘空间不足时删除)。


5. 常见陷阱

现象原因 / 解决方法
dnf install 找不到互联网而卡住漏掉了 --disablerepo=* 选项。请照抄上面 3.1 中的选项
tar: Error opening archiveUSB 中的产物只复制了部分文件。在准备 PC 上比对 sha256 后重新复制
systemctl status plantpulse → activating卡在 bin/start.sh 的某个步骤。用 journalctl -u plantpulse -f 实时查看
时间不正确(1970 年)隔离网络无法访问 NTP。将公司内部 NTP 服务器 IP 添加到 /etc/chrony.conf
docker 装不上下载 RPM 时遗漏了 docker-ce。添加 Fedora 的 docker repo 后重新下载
install.sh 仍在调用 download URL漏改了 sed —— 将 install.sh 中所有 URL 改为 file:///mnt/usb/...

6. 延伸阅读