跳到主要内容

(legacy) H/W 完整安装 — native tools/setup.sh

本页面是维护 2026.05 以下 native 部署机箱 时参考的 legacy 流程。 新 H/W、量产出货、新建现场安装请使用 快速安装 (install.sh)

请勿用于新建安装

tools/setup.sh 以 native plantpulse.service 与 host 直接运行结构为前提。 2026.05+ 的容器标准由 plantpulse-edge.service 单独管理运行时。 在同一台机箱上混用两种模式会导致端口/数据路径冲突。

仍需使用本文档的情况

仅在需要对已以 native 方式运行的旧机箱进行重装/恢复,或需要比对以往现场验收文档时使用。 如果是新机箱,请返回 安装 — 一览


1. 前置要求 (legacy native)

项目
OSFedora 38 (当时的验证基准 — 其他 RHEL 系可能可用,需另行验证)
权限root (sudo -i 或直接 root 登录)
网络互联网连接 (dnf 软件包 + legacy native bundle 下载)
磁盘/opt 约 3GB,/data1 (建议单独分区) 数据用 100GB+
内存最低 8GB (Cassandra 4GB heap + Tomcat 4GB)
NIC 数量2 个 (1号 = WAN/外部,2号 = PLC/内部) — 工业设备标准
时间可访问互联网 NTP (已安装 chrony)

1.1 推荐 H/W 规格

等级CPURAMSSDNIC价格区间
(≤ 1k 标签)4 核 / 2.0GHz+8GB256GB2x 1Gbps工业迷你 PC
(1k–10k 标签)8 核 / 2.5GHz+16GB512GB SSD + 1TB HDD2x 1Gbps工业设备
(10k+ 标签)16 核 / 3.0GHz+32GB+1TB NVMe2x 10Gbps1U 服务器

2. 位置

/opt/kopens/tools/setup.sh ← 메인 setup 스크립트
/opt/kopens/tools/net/ ← 네트워크 set-1.sh / set-2.sh / status.sh / ping.sh
/opt/kopens/tools/firewall/open.sh ← firewalld 포트 오픈
/opt/kopens/tools/file/run.sh ← TCP / file limit / sysctl 튜닝
/opt/kopens/tools/file/sysctl.conf ← 커널 튜닝
/opt/kopens/tools/file/limits.conf ← 프로세스 리소스 한도
/opt/kopens/tools/file/chrony.conf ← NTP
/opt/kopens/tools/docker/setup.sh ← Docker CE 설치
/opt/kopens/tools/java/setup.sh ← Amazon Corretto 17
/opt/kopens/tools/python/setup.sh ← Python 3 + pip
/opt/kopens/tools/nodejs/setup.sh ← Node.js + npm
/opt/kopens/tools/ssl/gen.sh ← 자체 서명 인증서 발급 (CA + 서버)
/opt/kopens/tools/vpn/setup.sh ← VPN 클라이언트
/opt/kopens/tools/service/plantpulse.service ← systemd unit
/opt/kopens/tools/service/service-start.sh ← systemd ExecStart → bin/start.sh
/opt/kopens/tools/service/service-stop.sh ← systemd ExecStop → bin/stop.sh

3. 执行 — legacy native 单行命令

# 1) root 권한
sudo -i

# 2) 작업 디렉토리
cd /opt/kopens/tools

# 3) 실행 (대화형 — 호스트명 + 네트워크 설정을 묻습니다)
./setup.sh

总耗时:15–30 分钟 (取决于网速 + dnf 软件包下载 + tuned 启动)。 完成后 10 秒后自动 reboot — 重启后 legacy plantpulse.service 会自动启动。


4. 分步输入指南 (交互式 prompt)

安装过程中会依次出现以下输入项。

4.1 主机名

[?] INPUT THIS EDGE GATEAY HOSTNAME :
=> EDGE_00303

用于标识网关。按 EDGE_<4-digits> 或站点命名规范输入。例如:EDGE_00303

4.2 1号 NIC (WAN / 外部网) — enp1s0

[?] ETHERNET [enp1s0] MODE [DHCP|STATIC] :
模式输入之后
DHCP自动获取 IP无需额外输入
STATIC使用固定 IP需追加输入 IP/掩码、网关、DNS

选择 STATIC 时的追加 prompt:

[?] ETHERNET [enp1s0] IP/SUBNETMASK : 192.168.0.50/24
[?] ETHERNET [enp1s0] GATEWAY : 192.168.0.1
[?] ETHERNET [enp1s0] DNS : 8.8.8.8

该 NIC 用于 默认网关 (外部互联网 / 云 / Platform API) 的访问。DNS 使用企业内部 DNS 或公共 DNS。

4.3 2号 NIC (PLC / 内部网) — enp2s0

以相同格式再配置一次。由于是 PLC 网专用,通常设为 STATIC 以清晰隔离:

[?] ETHERNET [enp2s0] MODE [DHCP|STATIC] : STATIC
[?] ETHERNET [enp2s0] IP/SUBNETMASK : 192.168.100.10/24
[?] ETHERNET [enp2s0] GATEWAY : 192.168.100.1
[?] ETHERNET [enp2s0] DNS : 192.168.100.1

该 NIC 不作为默认网关使用 (ipv4.never-default yes) — 仅用于与 PLC 的专用网通信,与 WAN 路由隔离。

4.4 网络验证 + 时间同步

setup.sh 会自动执行 nmcli con up 后,用 ping 验证外部可达性,并用 chronyc makestep 进行 NTP 同步。输出中出现 OK 或 IP / RTT 即为正常。


5. setup.sh 全部 22 个步骤 — 详解

#步骤动作预期输出
1KOPENS_HOME 环境变量注册追加到 /etc/bashrc(无输出)
2主机名设置hostnamectl set-hostname(无输出)
3${PE_HOME}/conf/env.sh 生成PE_HOME / PE_DATA_DIR / JAVA_HOME / CLEAN_ON_STARTUPenv.sh 输出
4${PE_DATA_DIR} (/data1) 目录创建mkdir -p/data1
5网络设置net/set-1.sh (1号 WAN)、net/set-2.sh (2号 PLC)、重启 NetworkManagernmcli 输出
6net/status.sh + net/ping.sh 验证接口状态 + 外部 pingRTT 输出
7区域设置 / 时区ko_KR.utf8 + Asia/Seouldate
8OS 更新dnf -y updatednf 进度显示
9必需软件包安装tar / htop / fping / pv / firefox / java-17-openjdk-devel / jna / jemalloc / zstd / curl-devel / chrony / tuned / net-tools / numactl / nodejs / npm / python3 / fail2ban / gcc / glibc-devel / NetworkManager-tuidnf 进度
10调优tuned-adm profile throughput-performance + 禁用 GNOME 节能Active profile: throughput-performance
11防火墙tools/firewall/open.sh (见下方 5.1 表)firewall-cmd --list-all
12NTP (chrony)应用 chrony.conf + 服务 enable + hwclock -w 同步chronyc ntpdata
13TCP / file limit / sysctltools/file/run.sh (见下方 5.2 表)(无输出)
14CPU governor所有 CPU 设为 performance 模式(无输出)
15NUMA + Hugepagesvm.zone_reclaim_mode=0 + 禁用 transparent hugepage + 预留 9216 hugepagenumactl --show
16Dockertools/docker/setup.sh (Docker CE)docker version
17Java 17Amazon Correttojava -version
18Python 3 / NodeJSdnf installpython3 --version
19SSL 证书签发tools/ssl/gen.sh — 自签名 CA + 服务器 cert (/var/security/plantpulse/)openssl 输出
20VPNtools/vpn/setup.shVPN 客户端安装
21dnf clean all清理缓存(无输出)
22systemd 注册复制 /etc/systemd/system/plantpulse.service + systemctl enable plantpulseservice 注册
23自动 reboot10 秒倒计时后*** NOW REBOOT AFTER 10 SEC! ***

由于启用了 set -e任一步骤失败都会立即中断

5.1 防火墙 — 自动开放的端口列表

tools/firewall/open.sh 会将以下 TCP 端口永久添加到 public zone

端口用途
22 (TCP/UDP)SSH
80, 443 (TCP)Web UI (/ui/main)
123 (TCP/UDP)NTP
1880 (TCP)Node-RED (/ui/flow 的后端)
3000 (TCP)Grafana (时序仪表板)
4000 (TCP)APM / 监控
7000, 7001, 9042 (TCP)Cassandra (gossip / SSL gossip / 客户端)
7799 (TCP)JMX (Tomcat 监控)
7800, 7801 (TCP)timeseries-engine
9090 (TCP)Cockpit (服务器管理)
12000, 12443 (TCP)OPC-UA (TCP / TLS)
19999 (TCP)NetData

此外会启用 --add-masquerade,使 Docker 容器 NAT 到主机网络。

5.2 sysctl 调优 (/etc/sysctl.conf 部分)

net.ipv4.tcp_keepalive_time = 60 # PLC TCP keepalive 빠르게
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 10
net.core.rmem_max = 16777216 # 16MB 수신 버퍼
net.core.wmem_max = 16777216 # 16MB 송신 버퍼
net.core.somaxconn = 1024
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
vm.max_map_count = 1048575 # Cassandra mmap
vm.overcommit_memory = 1 # Cassandra hint
vm.swappiness = 1 # 최소 스왑

6. 重启后 — native 正常运行确认 (1 分钟)

# 1) systemd 서비스 살아있는지
systemctl status plantpulse
# 예: active (running) since ...

# 2) 모든 컴포넌트 프로세스
/opt/kopens/plantpulse-edge/bin/ps.sh

# 3) 시스템 헬스 (200 OK 면 게이트웨이 정상)
curl -s http://127.0.0.1/api/v1/system/health | jq

# 4) OPC-UA 트리 (등록된 OPC 가 0 이어도 OK — 빈 배열)
curl -s http://127.0.0.1/ui/opcua/tree | jq '.data.tree | length'

# 5) 웹 UI
# 브라우저 → https://<gateway>/ui/main
# 좌상단 로고 + 30개 카드가 보이면 정상

7. systemd 集成运维 (legacy native)

安装后由 systemd 自动管理网关:

sudo systemctl start plantpulse # 시작 (start.sh 호출)
sudo systemctl stop plantpulse # 정지 (stop.sh 호출)
sudo systemctl status plantpulse # 상태
sudo systemctl restart plantpulse # 풀스택 재시작 (60초+ 다운타임)
sudo journalctl -u plantpulse -n 100 # systemd 로그 마지막 100줄

仅重启 Tomcat (应用代码 / app.properties 变更) 请使用 bin/restart.sh (约 6 秒)。systemd restart 为全栈重启 (stop.shstart.sh)。

内部 wiring:

  • plantpulse.serviceExecStart=service-start.shbin/start.sh
  • plantpulse.serviceExecStop=service-stop.shbin/stop.sh

8. 常见陷阱

步骤症状原因 / 解决
5 (网络)set-1.sh 之后 SSH 断开网络接口 / 网关配置错误。通过控制台 (KVM/IPMI) 进入并用 nmcli con modify enp1s0 ipv4.address ... 手动恢复
5 (网络)NIC 名称不是 enp1s0 (例如 eth0eno1)确认 OS 的 NIC 名称 (nmcli dev)。将 tools/net/set-1.sh 中的 IF=enp1s0 行改为实际名称后重新执行 setup.sh
8 (dnf)dnf 更新卡住检查线路 / 企业内网 dnf mirror。内网环境请在 /etc/yum.repos.d/ 中添加内部 mirror
9 (软件包)部分软件包缺失 (例如无 firefox)minimal 安装 ISO 所致。缺少该包对网关本身无影响 — 忽略并继续
10 (tuned)tuned-adm not found缺少 dnf install tuned。手动安装后从 setup.sh 的第 11 步继续
11 (防火墙)firewall-cmd --reload 失败firewalld 未运行。手动执行 systemctl start firewalld。同时检查 SELinux enforcing
15 (hugepages)重启后 hugepage 失效/etc/sysctl.d/99-plantpulse.conf 中永久添加 vm.nr_hugepages = 9216
22 (systemd)重启后网关未启动journalctl -u plantpulse --no-pager 确认 unit 失败原因。直接执行 bin/start.sh 观察卡在何处
set -e中途 abort查看消息正文中的 上一步骤。仅手动执行该步骤后,从 setup.sh 的 下一步骤 继续
一般脚本执行权限chmod +x /opt/kopens/tools/setup.sh (极少数情况下需要)

9. 安装后建议的首批操作

  1. 访问 Web UI + 修改密码/ui/main → 右上角用户菜单 → 修改密码
  2. 确认站点 / 边缘 ID环境设置site.idedge.id
  3. Sparkplug B 对接Sparkplug B (如有需要)
  4. 添加第一个 PLC 连接添加新 PLC 连接
  5. 注册 定期备份 cron备份 (backup.sh)

10. 了解更多