Zum Hauptinhalt springen

(legacy) Vollständige H/W-Installation — native tools/setup.sh

Diese Seite beschreibt das Legacy-Verfahren, das bei der Wartung von native ausgelieferten Boxen vor 2026.05 heranzuziehen ist. Für neue H/W, Serienauslieferung und Neuinstallationen Vor-Ort verwenden Sie Schnellinstallation (install.sh).

Nicht für Neuinstallationen verwenden

tools/setup.sh setzt native plantpulse.service und die direkte Ausführung auf dem Host voraus. Beim Containerstandard ab 2026.05 verwaltet ein einziges plantpulse-edge.service die Runtime. Werden beide Modi auf derselben Box gemischt, kollidieren Ports und Datenpfade.

Wann dieses Dokument dennoch gilt

Nur dann, wenn eine bereits native betriebene Altbox neu installiert bzw. wiederhergestellt werden muss oder alte Abnahmedokumente Vor-Ort abzugleichen sind. Bei einer neuen Box kehren Sie zu Installation — Überblick zurück.


1. Voraussetzungen (legacy native)

PunktWert
OSFedora 38 (damaliger Verifizierungsstand — andere RHEL-Derivate möglich, Verifizierung separat)
Rechteroot (sudo -i oder direkter root-Login)
NetzwerkInternetverbindung (dnf Pakete + Download des legacy native bundle)
Festplatte~3GB unter /opt, 100GB+ für Daten unter /data1 (separate Partition empfohlen)
Speichermindestens 8GB (Cassandra 4GB heap + Tomcat 4GB)
Anzahl NICs2 (Nr. 1 = WAN/extern, Nr. 2 = PLC/intern) — Standard für Industrie-Appliances
ZeitInternet-NTP erreichbar (chrony installiert)

1.1 Empfohlene H/W-Spezifikation

KlasseCPURAMSSDNICPreisklasse
Klein (≤ 1k Tags)4 Kerne / 2.0GHz+8GB256GB2x 1GbpsIndustrie-Mini-PC
Mittel (1k–10k Tags)8 Kerne / 2.5GHz+16GB512GB SSD + 1TB HDD2x 1GbpsIndustrie-Appliance
Groß (10k+ Tags)16 Kerne / 3.0GHz+32GB+1TB NVMe2x 10Gbps1U-Server

2. Speicherort

/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. Ausführung — legacy native Einzeilerbefehl

# 1) root 권한
sudo -i

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

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

Gesamtdauer: 15–30 Minuten (Internetgeschwindigkeit + dnf-Paketdownload + tuned-Boot). Danach erfolgt nach 10 Sekunden ein automatischer Reboot — nach dem Neustart startet legacy plantpulse.service automatisch.


4. Schrittweise Eingabehilfe (interaktive Prompts)

Während der Installation erscheinen nacheinander folgende Eingaben.

4.1 Hostname

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

Zur Identifikation des Gateways. Eingabe gemäß EDGE_<4-digits> oder Standortkonvention. Beispiel: EDGE_00303.

4.2 NIC Nr. 1 (WAN / externes Netz) — enp1s0

[?] ETHERNET [enp1s0] MODE [DHCP|STATIC] :
ModusEingabeDanach
DHCPIP wird automatisch bezogenkeine weitere Eingabe
STATICfeste IP verwendenIP/Maske, Gateway, DNS zusätzlich eingeben

Zusätzliche Prompts bei STATIC:

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

Diese NIC dient der Erreichbarkeit des Standard-Gateways (externes Internet / Cloud / Platform API). DNS ist der interne oder ein öffentlicher DNS.

4.3 NIC Nr. 2 (PLC / internes Netz) — enp2s0

Noch einmal im gleichen Format. Da sie ausschließlich dem PLC-Netz dient, üblicherweise sauber getrennt als 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

Diese NIC wird nicht als Standard-Gateway verwendet (ipv4.never-default yes) — ausschließlich für die private Netzkommunikation mit der PLC. Vom WAN-Routing getrennt.

4.4 Netzwerkprüfung + Zeitsynchronisation

setup.sh prüft nach nmcli con up automatisch die externe Erreichbarkeit mit ping und synchronisiert per chronyc makestep via NTP. Erscheinen in der Ausgabe OK oder IP / RTT, ist alles in Ordnung.


5. Alle 22 Schritte von setup.sh — im Detail

#SchrittAktionErwartete Ausgabe
1KOPENS_HOME Umgebungsvariablen registrierenErgänzung in /etc/bashrc(still)
2Hostname setzenhostnamectl set-hostname(still)
3${PE_HOME}/conf/env.sh erzeugenPE_HOME / PE_DATA_DIR / JAVA_HOME / CLEAN_ON_STARTUPAusgabe von env.sh
4Verzeichnisse ${PE_DATA_DIR} (/data1) anlegenmkdir -p/data1
5Netzwerkkonfigurationnet/set-1.sh (Nr. 1 WAN), net/set-2.sh (Nr. 2 PLC), Neustart des NetworkManagernmcli-Ausgabe
6net/status.sh + net/ping.sh PrüfungSchnittstellenstatus + externer PingRTT-Ausgabe
7Locale / Zeitzoneko_KR.utf8 + Asia/Seouldate
8OS-Updatednf -y updatednf-Fortschrittsanzeige
9Installation der Pflichtpaketetar / 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-Fortschritt
10Tuningtuned-adm profile throughput-performance + Deaktivierung der GNOME-EnergiesparfunktionenActive profile: throughput-performance
11Firewalltools/firewall/open.sh (Tabelle 5.1 unten)firewall-cmd --list-all
12NTP (chrony)chrony.conf anwenden + Dienst enable + hwclock -w synchronisierenchronyc ntpdata
13TCP / file limit / sysctltools/file/run.sh (Tabelle 5.2 unten)(still)
14CPU governoralle CPUs im Modus performance(still)
15NUMA + Hugepagesvm.zone_reclaim_mode=0 + transparent hugepage deaktivieren + 9216 hugepages reservierennumactl --show
16Dockertools/docker/setup.sh (Docker CE)docker version
17Java 17Amazon Correttojava -version
18Python 3 / NodeJSdnf installpython3 --version
19SSL-Zertifikat ausstellentools/ssl/gen.sh — selbstsignierte CA + Serverzertifikat (/var/security/plantpulse/)openssl-Ausgabe
20VPNtools/vpn/setup.shVPN-Client-Installation
21dnf clean allCache bereinigen(still)
22systemd registrieren/etc/systemd/system/plantpulse.service kopieren + systemctl enable plantpulseDienstregistrierung
23Automatischer Rebootnach 10-Sekunden-Countdown*** NOW REBOOT AFTER 10 SEC! ***

set -e ist aktiv, sodass bei einem Fehler in einem beliebigen Schritt sofort abgebrochen wird.

5.1 Firewall — automatisch geöffnete Ports

tools/firewall/open.sh fügt folgende TCP-Ports dauerhaft der public zone hinzu:

PortVerwendung
22 (TCP/UDP)SSH
80, 443 (TCP)Web-UI (/ui/main)
123 (TCP/UDP)NTP
1880 (TCP)Node-RED (Backend von /ui/flow)
3000 (TCP)Grafana (Zeitreihen-Dashboard)
4000 (TCP)APM / Monitoring
7000, 7001, 9042 (TCP)Cassandra (gossip / SSL gossip / Client)
7799 (TCP)JMX (Tomcat-Monitor)
7800, 7801 (TCP)timeseries-engine
9090 (TCP)Cockpit (Serververwaltung)
12000, 12443 (TCP)OPC-UA (TCP / TLS)
19999 (TCP)NetData

Zusätzlich wird --add-masquerade aktiviert, sodass Docker-Container per NAT ins Hostnetz gelangen.

5.2 sysctl-Tuning (Auszug aus /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. Nach dem Neustart — native Funktionsprüfung (1 Minute)

# 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. Integrierter Betrieb über systemd (legacy native)

Nach der Installation verwaltet systemd das Gateway automatisch:

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줄

Nur Tomcat neu starten (Übernahme von Code / app.properties) über bin/restart.sh (~6 Sekunden). systemd restart betrifft den vollen Stack (stop.shstart.sh).

Internes Wiring:

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

8. Häufige Stolperfallen

SchrittSymptomUrsache / Abhilfe
5 (Netzwerk)SSH bricht nach set-1.sh abNetzwerkschnittstelle / Gateway falsch konfiguriert. Über Konsole (KVM/IPMI) einsteigen und nmcli con modify enp1s0 ipv4.address ... manuell wiederherstellen
5 (Netzwerk)NIC heißt nicht enp1s0 (z. B. eth0, eno1)NIC-Namen des OS prüfen (nmcli dev). Zeile IF=enp1s0 in tools/net/set-1.sh auf den tatsächlichen Namen ändern und setup.sh erneut ausführen
8 (dnf)dnf-Update bleibt hängenLeitung / internen dnf-Mirror prüfen. Im Firmennetz internen Mirror in /etc/yum.repos.d/ eintragen
9 (Pakete)einzelne Pakete fehlen (z. B. firefox nicht vorhanden)Minimal-Installations-ISO. Fehlt dieses Paket, ist das Gateway selbst nicht betroffen — ignorieren und fortfahren
10 (tuned)tuned-adm not founddnf install tuned fehlt. Manuell installieren und setup.sh ab Schritt 11 fortsetzen
11 (Firewall)firewall-cmd --reload schlägt fehlfirewalld läuft nicht. systemctl start firewalld manuell ausführen. Auch SELinux enforcing prüfen
15 (hugepages)hugepages nach dem Boot wieder wegvm.nr_hugepages = 9216 dauerhaft in /etc/sysctl.d/99-plantpulse.conf eintragen
22 (systemd)Gateway startet nach Reboot nichtUrsache des Unit-Fehlers mit journalctl -u plantpulse --no-pager ermitteln. bin/start.sh direkt ausführen und feststellen, wo es hängt
set -eAbbruch mittendrinVorhergehenden Schritt im Meldungstext prüfen. Nur diesen Schritt manuell ausführen und setup.sh ab dem nächsten Schritt fortsetzen
AllgemeinAusführungsrechte des Skriptschmod +x /opt/kopens/tools/setup.sh (selten erforderlich)

9. Empfohlene erste Schritte nach der Installation

  1. Web-UI aufrufen + Passwort ändern/ui/main → Benutzermenü oben rechts → Passwort ändern
  2. Site- / Edge-ID prüfensite.id, edge.id unter Systemkonfiguration
  3. Sparkplug B anbindenSparkplug B (falls erforderlich)
  4. Erste PLC-Verbindung anlegenNeue PLC-Verbindung hinzufügen
  5. Cron für regelmäßige Backups einrichten — Backup (backup.sh)

10. Weiterführend