Compare commits

..

3 commits

Author SHA1 Message Date
Dieter Lang
ea8913fb69 Deploy-Prozess für Linux und Windows ergänzen 2026-08-26 11:47:07 +02:00
Dieter Lang
27b97316fc Build-Prozess für Linux und Windows automatisieren 2026-08-26 11:41:31 +02:00
Dieter Lang
8b7d081960 README und Testkonfiguration für lokalen Simulationsaufbau aktualisieren 2026-08-25 18:13:42 +02:00
8 changed files with 631 additions and 82 deletions

7
.gitignore vendored
View file

@ -1,7 +1,14 @@
Notizen.txt
# Build-Verzeichnis
/build/
# Distributions-Verzeichnis
/dist/
# Temporäre Arbeitsdateien von fyne-cross
/fyne-cross/
# Lokale Build-Binaries
/rs2322tcp-client
/rs2322tcp-server

BIN
Icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

243
README.md
View file

@ -159,11 +159,13 @@ Die gemeinsame Client-Architektur ist bereits auf eine
plattformabhängige Implementierung der virtuellen seriellen
Schnittstelle vorbereitet.
Die Windows-Implementierung der virtuellen seriellen Schnittstelle ist
noch nicht vollständig implementiert.
Unter Windows wird dieselbe gemeinsame Client- und Konfigurationslogik
verwendet. Für Tests können vorhandene virtuelle COM-Port-Verbindungen
verwendet werden.
Der spätere Windows-Client soll dieselbe gemeinsame Client- und
Konfigurationslogik verwenden.
Mit Version `v0.0.11` wurde der Windows-Client mit funktionierender
Fyne-GUI sowie der automatischen Übertragung der konfigurierten Rotor-
Startbytes praktisch getestet.
## Server
@ -414,6 +416,227 @@ vollständigen Bytebereich von `0x00` bis `0xFF` geprüft.
Dabei wurde die bidirektionale Übertragung aller 256 möglichen Bytewerte
erfolgreich getestet.
## Vollständiger Simulationsaufbau auf einem Ubuntu-PC
Der komplette Datenweg kann für Entwicklung und Tests auf einem einzigen
Ubuntu-PC ausgeführt werden. Dazu laufen gleichzeitig drei Programme:
1. `rs2322tcp-pty-test` als simuliertes Rotorgerät
2. `rs2322tcp-server` mit `configs/server-test.json`
3. `rs2322tcp-client`
Der Datenweg ist:
```text
Testprogramm oder Hersteller-Software
/dev/ttyUSB100
rs2322tcp-client
│ TCP
rs2322tcp-server
/dev/pts/N
rs2322tcp-pty-test
simuliertes Rotorgerät
```
### 1. PTY-Simulator starten
In einem ersten Terminal:
```bash
cd ~/rs2322tcp
go run ./cmd/rs2322tcp-pty-test
```
Beispiel:
```text
rs2322tcp-pty-test
Port: /dev/pts/1
Modus: Rotor-Simulation mit Echo-Fallback
Warte auf Daten ...
```
Der ausgegebene PTY-Pfad wird im nächsten Schritt benötigt.
Der Simulator hält Master und Slave während seiner gesamten Laufzeit geöffnet.
Bei der bekannten Rotor-Anfrage wird automatisch die konfigurierte Rotor-Antwort
gesendet. Alle anderen Daten werden als Echo zurückgegeben.
### 2. Testkonfiguration des Servers anpassen
In `configs/server-test.json` wird der Rotor auf den aktuell vom Simulator
ausgegebenen PTY-Slave gesetzt.
Beispiel:
```json
{
"id": "rotor",
"name": "Antennenrotor",
"serial_port": "/dev/pts/1",
"baud_rate": 600,
"data_bits": 8,
"parity": "none",
"stop_bits": 1
}
```
Die PTY-Nummer ist nicht dauerhaft fest. Nach jedem neuen Start des
PTY-Simulators muss der tatsächlich ausgegebene `/dev/pts/N`-Pfad geprüft und
gegebenenfalls manuell in `server-test.json` eingetragen werden.
Im Echtbetrieb wird hier wieder ein fester Hardware-Port verwendet, zum Beispiel:
```text
/dev/ttyUSB0
```
Die serverseitige Zuordnung bleibt bewusst manuell und fest konfiguriert, weil
mehrere unterschiedliche Hardwaregeräte gleichzeitig am Server angeschlossen
sein können.
### 3. Server starten
In einem zweiten Terminal:
```bash
cd ~/rs2322tcp
go run ./cmd/rs2322tcp-server -config ./configs/server-test.json
```
Beispiel:
```text
rs2322tcp-server dev
Control-Server gestartet auf [::]:5000
Geräte: 3
```
### 4. Server-Monitor als Sniffer
Ist in der Server-Konfiguration
```json
"serial_monitor": true
```
gesetzt, protokolliert der Server den übertragenen Datenverkehr. Im
Simulationsaufbau werden dadurch unter anderem die Richtungen
```text
TCP RX
SERIAL TX
SERIAL RX
TCP TX
```
sichtbar.
Ein typischer Ablauf ist:
```text
TCP RX 57 00 00 00 00 00 00 00 00 00 00 1F 20
SERIAL TX 57 00 00 00 00 00 00 00 00 00 00 1F 20
SERIAL RX 57 07 01 06 00 01 03 06 02 00 01 20
TCP TX 57 07 01 06 00 01 03 06 02 00 01 20
```
Der Server arbeitet damit gleichzeitig als Monitor beziehungsweise Sniffer für
den übertragenen seriellen Datenverkehr.
### 5. Client-Konfiguration für den lokalen Test
Für den lokalen Test kann `configs/client.json` beispielsweise so aussehen:
```json
{
"server": {
"address": "127.0.0.1",
"port": 5000
},
"virtual_port_range": {
"first": 100,
"last": 199
},
"virtual_ports": [
{
"port": "/dev/ttyUSB100",
"remote_device": "rotor",
"startup_bytes": "57 00 00 00 00 00 00 00 00 00 00 1F 20"
}
]
}
```
Der öffentliche virtuelle Port `/dev/ttyUSB100` muss vorher wie im Abschnitt
zur manuellen Einrichtung der virtuellen Ports einmalig angelegt worden sein.
### 6. Client starten
In einem dritten Terminal:
```bash
cd ~/rs2322tcp
go run ./cmd/rs2322tcp-client
```
Nach erfolgreichem Verbindungsaufbau werden die konfigurierten `startup_bytes`
automatisch zum zugeordneten Rotor übertragen.
Der Server-Monitor muss dann den vollständigen Ablauf
```text
TCP RX -> SERIAL TX -> SERIAL RX -> TCP TX
```
zeigen.
Damit ist der gesamte Datenweg vom virtuellen Client-Port über TCP zum
simulierten Rotor und wieder zurück geprüft.
### 7. Virtuellen Port direkt testen
Eine Antwort kann beispielsweise mit
```bash
cat /dev/ttyUSB100 | xxd -g 1
```
beobachtet werden.
In einem zweiten Terminal kann eine Rotor-Anfrage gesendet werden:
```bash
printf '\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x20' > /dev/ttyUSB100
```
Der Rückweg erfolgt über denselben vollständigen Datenpfad zurück zu
`/dev/ttyUSB100`.
### Hinweis zu `/dev/pts/N`
`/dev/pts/N` wird in diesem Aufbau ausschließlich als temporärer Test-Port
für den PTY-Simulator verwendet. Die Nummer ist nicht dauerhaft und kann sich
nach einem Neustart des Simulators ändern.
Im produktiven Betrieb sind die serverseitigen Geräte dagegen echte,
fest angeschlossene Hardware-Schnittstellen, beispielsweise:
```text
/dev/ttyUSB0
/dev/ttyUSB1
/dev/ttyUSB3
```
## Diagnose und Logging
Für Debugging und Diagnose soll eine Protokollierung des übertragenen
@ -423,8 +646,9 @@ Insbesondere soll eine Darstellung der übertragenen Bytes möglich sein,
um Probleme bei der Kommunikation zwischen Hersteller-Software und Gerät
analysieren zu können.
Während der Entwicklung kann `socat` als zusätzliches Werkzeug für Tests
und Diagnose eingesetzt werden.
Für die Linux-PTY-Funktion und den beschriebenen Simulationsaufbau wird
`rs2322tcp` ohne `socat` betrieben. Die benötigten PTYs werden direkt aus Go
erzeugt.
## Hardwaretest mit SPID Rot2Prog
@ -659,8 +883,8 @@ Für die Entwicklung existiert zusätzlich das separate Testprogramm:
~/rs2322tcp-pty-test
```
Es erzeugt unter Linux ein PTY, setzt den Slave in den Raw Mode und zeigt
den Namen des Slave-Gerätes an.
Es erzeugt unter Linux ein PTY, setzt den Slave in den Raw Mode und stellt
eine simulierte serielle Gegenstelle bereit.
Beispiel:
@ -782,8 +1006,11 @@ git status
```text
rs2322tcp/
├── cmd/
│ ├── com0com-test/
│ ├── rs2322tcp-client/
│ ├── rs2322tcp-client-test/
│ ├── rs2322tcp-device-sim/
│ ├── rs2322tcp-pty-test/
│ └── rs2322tcp-server/
├── configs/
├── docs/

View file

@ -137,4 +137,4 @@ func main() {
// Den Fyne-Eventloop starten.
application.Run()
}
}

View file

@ -1,6 +1,6 @@
{
"server": {
"address": "192.168.178.229",
"address": "127.0.0.1",
"port": 5000
},
"virtual_port_range": {

View file

@ -6,7 +6,7 @@
"hardware_error_response": "ERROR - HARDWARE NOT AVAILABLE",
"serial_monitor": true,
"serial_monitor": false,
"devices": [
{
@ -21,7 +21,7 @@
{
"id": "rotor",
"name": "Antennenrotor",
"serial_port": "/dev/pts/0",
"serial_port": "/dev/pts/1",
"baud_rate": 600,
"data_bits": 8,
"parity": "none",

View file

@ -2,30 +2,86 @@
#
# ============================================================================
# Projekt.....: rs2322tcp
# Datei.......: build.sh
# Datei.......: scripts/build.sh
#
# Copyright (C) 2026 Dieter Lang
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
# Beschreibung:
# Erstellt die Linux- und Windows-Builds des Projektes.
# Erstellt die Release-Builds des Projekts rs2322tcp.
#
# Die Versionsinformationen werden aus Git ermittelt und beim Build
# über den Go-Linker in die Binärdateien eingebettet.
# Server:
# - Linux amd64
# - Linux arm64
# - Linux 386
# - Linux arm
#
# Gebaut werden:
# - Linux amd64: Client und Server
# - Linux arm64: Server
# - Windows amd64: Client
# Client:
# - Linux amd64
# - Linux arm64
# - Windows amd64
# - Windows 386
#
# Der Server wird CGO-frei direkt mit Go gebaut.
#
# Der Fyne-basierte Client wird für Linux amd64 direkt gebaut.
# Die Cross-Builds für Linux arm64 und Windows werden mit fyne-cross
# in Docker erzeugt.
#
# Voraussetzungen:
# - Go
# - Git
# - Docker
# - fyne-cross
#
# Installation von fyne-cross:
#
# go install github.com/fyne-io/fyne-cross@latest
#
# Windows XP wird derzeit nicht unterstützt.
# ============================================================================
#
set -e
PROJECT=$(basename "$(pwd)")
BUILDDIR="build"
MODULE=$(go list -m)
##############################################################################
# Projektverzeichnis
##############################################################################
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
cd "${PROJECT_DIR}"
PROJECT="$(basename "${PROJECT_DIR}")"
BUILD_DIR="build"
FYNE_CROSS_DIR="fyne-cross"
##############################################################################
# fyne-cross
##############################################################################
FYNE_CROSS="${HOME}/go/bin/fyne-cross"
if [ ! -x "${FYNE_CROSS}" ]; then
echo
echo "FEHLER: fyne-cross wurde nicht gefunden:"
echo " ${FYNE_CROSS}"
echo
echo "Installation:"
echo " go install github.com/fyne-io/fyne-cross@latest"
echo
exit 1
fi
FYNE_APP_ID="de.lang-dieter.rs2322tcp"
##############################################################################
# Modul
##############################################################################
MODULE="$(go list -m)"
##############################################################################
# Farben
@ -41,20 +97,22 @@ RESET="\033[0m"
# Zeitmessung
##############################################################################
START=$(date +%s)
START="$(date +%s)"
##############################################################################
# Projektinformationen
##############################################################################
VERSION=$(git describe --tags --always 2>/dev/null || echo "dev")
BUILD=$(git rev-list --count HEAD 2>/dev/null || echo "0")
BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")
COMMIT=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")
GO_VERSION=$(go version | awk '{print $3}')
HOST=$(hostname)
DATE=$(date "+%Y-%m-%dT%H:%M:%S")
VERSION="$(git describe --tags --always 2>/dev/null || echo "dev")"
BUILD="$(git rev-list --count HEAD 2>/dev/null || echo "0")"
BRANCH="$(git branch --show-current 2>/dev/null || echo "unknown")"
COMMIT="$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")"
GO_VERSION="$(go version | awk '{print $3}')"
HOST="$(hostname)"
DATE="$(date "+%Y-%m-%dT%H:%M:%S")"
##############################################################################
# Kopf
##############################################################################
echo
@ -64,14 +122,14 @@ echo " ${PROJECT} Build Script"
echo "============================================================"
echo -e "${RESET}"
printf "%-12s %s\n" "Projekt:" "$PROJECT"
printf "%-12s %s\n" "Version:" "$VERSION"
printf "%-12s %s\n" "Build:" "$BUILD"
printf "%-12s %s\n" "Branch:" "$BRANCH"
printf "%-12s %s\n" "Commit:" "$COMMIT"
printf "%-12s %s\n" "Go:" "$GO_VERSION"
printf "%-12s %s\n" "Host:" "$HOST"
printf "%-12s %s\n" "Datum:" "$DATE"
printf "%-12s %s\n" "Projekt:" "${PROJECT}"
printf "%-12s %s\n" "Version:" "${VERSION}"
printf "%-12s %s\n" "Build:" "${BUILD}"
printf "%-12s %s\n" "Branch:" "${BRANCH}"
printf "%-12s %s\n" "Commit:" "${COMMIT}"
printf "%-12s %s\n" "Go:" "${GO_VERSION}"
printf "%-12s %s\n" "Host:" "${HOST}"
printf "%-12s %s\n" "Datum:" "${DATE}"
echo
@ -97,119 +155,192 @@ echo -e "${YELLOW}Bereinige Module ...${RESET}"
go mod tidy
##############################################################################
# Build-Verzeichnis
# Build-Verzeichnisse
##############################################################################
echo -e "${YELLOW}Erzeuge Build-Verzeichnis ...${RESET}"
rm -rf "${BUILDDIR}"
mkdir -p "${BUILDDIR}"
rm -rf "${BUILD_DIR}"
mkdir -p "${BUILD_DIR}"
##############################################################################
# Linker-Optionen
##############################################################################
LDFLAGS="-s -w \
-X '${MODULE}/internal/version.Version=${VERSION}' \
-X '${MODULE}/internal/version.Build=${BUILD}' \
-X '${MODULE}/internal/version.Commit=${COMMIT}' \
-X '${MODULE}/internal/version.Date=${DATE}'"
-X ${MODULE}/internal/version.Version=${VERSION} \
-X ${MODULE}/internal/version.Build=${BUILD} \
-X ${MODULE}/internal/version.Commit=${COMMIT} \
-X ${MODULE}/internal/version.Date=${DATE}"
##############################################################################
# Buildfunktion
# Direkter Go-Build
##############################################################################
build_target() {
GOOS=$1
GOARCH=$2
TARGET=$3
PROGRAM=$4
OUTPUT=$5
local GOOS="$1"
local GOARCH="$2"
local TARGET="$3"
local PROGRAM="$4"
local OUTPUT="$5"
local CGO="$6"
echo
echo -e "${BLUE}Baue ${PROGRAM} für ${TARGET}${RESET}"
mkdir -p "${BUILDDIR}/${TARGET}"
mkdir -p "${BUILD_DIR}/${TARGET}"
GOOS="${GOOS}" \
GOARCH="${GOARCH}" \
CGO_ENABLED=0 \
CGO_ENABLED="${CGO}" \
go build \
-trimpath \
-ldflags="${LDFLAGS}" \
-o "${BUILDDIR}/${TARGET}/${OUTPUT}" \
-o "${BUILD_DIR}/${TARGET}/${OUTPUT}" \
"./cmd/${PROGRAM}"
(
cd "${BUILDDIR}/${TARGET}"
cd "${BUILD_DIR}/${TARGET}"
sha256sum "${OUTPUT}" > "${OUTPUT}.sha256"
)
SIZE=$(stat -c%s "${BUILDDIR}/${TARGET}/${OUTPUT}")
SIZE_MB=$(awk "BEGIN {printf \"%.2f\", ${SIZE}/1024/1024}")
local SIZE
local SIZE_MB
SIZE="$(stat -c%s "${BUILD_DIR}/${TARGET}/${OUTPUT}")"
SIZE_MB="$(awk "BEGIN {printf \"%.2f\", ${SIZE}/1024/1024}")"
echo -e "${GREEN}OK${RESET}"
echo "Größe : ${SIZE_MB} MB"
}
##############################################################################
# Linux amd64
# Fyne-Cross-Build
##############################################################################
build_fyne_target() {
local PLATFORM="$1"
local ARCH="$2"
local TARGET="$3"
local OUTPUT="$4"
local SOURCE
local TARGET_DIR
echo
echo -e "${BLUE}Baue rs2322tcp-client für ${TARGET} mit fyne-cross${RESET}"
"${FYNE_CROSS}" "${PLATFORM}" \
-arch="${ARCH}" \
-app-id="${FYNE_APP_ID}" \
-output="rs2322tcp-client" \
"./cmd/rs2322tcp-client"
if [ "${PLATFORM}" = "windows" ]; then
SOURCE="${FYNE_CROSS_DIR}/bin/${PLATFORM}-${ARCH}/rs2322tcp-client.exe"
else
SOURCE="${FYNE_CROSS_DIR}/bin/${PLATFORM}-${ARCH}/rs2322tcp-client"
fi
TARGET_DIR="${BUILD_DIR}/${TARGET}"
if [ ! -f "${SOURCE}" ]; then
echo
echo -e "${RED}FEHLER: fyne-cross-Builddatei wurde nicht gefunden:${RESET}"
echo " ${SOURCE}"
echo
exit 1
fi
mkdir -p "${TARGET_DIR}"
cp "${SOURCE}" "${TARGET_DIR}/${OUTPUT}"
(
cd "${TARGET_DIR}"
sha256sum "${OUTPUT}" > "${OUTPUT}.sha256"
)
local SIZE
local SIZE_MB
SIZE="$(stat -c%s "${TARGET_DIR}/${OUTPUT}")"
SIZE_MB="$(awk "BEGIN {printf \"%.2f\", ${SIZE}/1024/1024}")"
echo -e "${GREEN}OK${RESET}"
echo "Größe : ${SIZE_MB} MB"
}
##############################################################################
# Server-Builds
#
# Der Server ist CGO-frei und kann direkt cross-kompiliert werden.
##############################################################################
build_target linux amd64 linux-amd64 \
rs2322tcp-client rs2322tcp-client
build_target linux amd64 linux-amd64 \
rs2322tcp-server rs2322tcp-server
##############################################################################
# Linux arm64
##############################################################################
rs2322tcp-server rs2322tcp-server 0
build_target linux arm64 linux-arm64 \
rs2322tcp-server rs2322tcp-server
rs2322tcp-server rs2322tcp-server 0
build_target linux 386 linux-386 \
rs2322tcp-server rs2322tcp-server 0
build_target linux arm linux-arm \
rs2322tcp-server rs2322tcp-server 0
##############################################################################
# Client-Builds
##############################################################################
# Linux amd64
build_target linux amd64 linux-amd64 \
rs2322tcp-client rs2322tcp-client 1
# Linux arm64
build_fyne_target linux arm64 linux-arm64 \
rs2322tcp-client
# Windows amd64
##############################################################################
build_fyne_target windows amd64 windows-amd64 \
rs2322tcp-client.exe
build_target windows amd64 windows-amd64 \
rs2322tcp-client rs2322tcp-client.exe
# Windows 386
build_fyne_target windows 386 windows-386 \
rs2322tcp-client.exe
##############################################################################
# Abschluss
##############################################################################
END=$(date +%s)
RUNTIME=$((END-START))
END="$(date +%s)"
RUNTIME="$((END - START))"
TARGETS=4
FILES=$(find "${BUILDDIR}" -type f | wc -l)
FILES="$(find "${BUILD_DIR}" -type f | wc -l)"
echo
echo -e "${BLUE}"
echo "============================================================"
echo "Zusammenfassung"
echo " Zusammenfassung"
echo "============================================================"
echo -e "${RESET}"
printf "%-12s %s\n" "Targets:" "$TARGETS"
printf "%-12s %s\n" "Dateien:" "$FILES"
printf "%-12s %s\n" "Builddauer:" "${RUNTIME} Sekunden"
printf "%-12s %s\n" "Dateien:" "${FILES}"
printf "%-12s %s\n" "Builddauer:" "${RUNTIME} Sekunden"
echo
echo -e "${BLUE}"
echo "============================================================"
echo "Erzeugte Build-Dateien"
echo " Erzeugte Build-Dateien"
echo "============================================================"
echo -e "${RESET}"
find "${BUILDDIR}" -type f | sort
find "${BUILD_DIR}" -type f | sort
echo
echo -e "${GREEN}"
echo "============================================================"
echo "Alle Builds erfolgreich abgeschlossen."
echo " Alle Builds erfolgreich abgeschlossen."
echo "============================================================"
echo -e "${RESET}"

184
scripts/deploy.sh Executable file
View file

@ -0,0 +1,184 @@
#!/usr/bin/env bash
set -euo pipefail
PROJECT_NAME="rs2322tcp"
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
BUILD_DIR="${PROJECT_ROOT}/build"
DIST_DIR="${PROJECT_ROOT}/dist"
CONFIG_DIR="${PROJECT_ROOT}/configs"
VERSION="$(git -C "${PROJECT_ROOT}" describe --tags --always --dirty 2>/dev/null || echo "unknown")"
BUILD_DATE="$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
echo
echo "============================================================"
echo " rs2322tcp Deploy Script"
echo "============================================================"
echo
echo "Projekt: ${PROJECT_NAME}"
echo "Version: ${VERSION}"
echo "Datum: ${BUILD_DATE}"
echo
if [[ ! -d "${BUILD_DIR}" ]]; then
echo "FEHLER: Build-Verzeichnis nicht gefunden:"
echo " ${BUILD_DIR}"
echo
echo "Bitte zuerst ./scripts/build.sh ausführen."
exit 1
fi
if [[ ! -f "${CONFIG_DIR}/server.json" ]]; then
echo "FEHLER: Konfigurationsdatei nicht gefunden:"
echo " ${CONFIG_DIR}/server.json"
exit 1
fi
if [[ ! -f "${CONFIG_DIR}/client.json" ]]; then
echo "FEHLER: Konfigurationsdatei nicht gefunden:"
echo " ${CONFIG_DIR}/client.json"
exit 1
fi
echo "Bereinige Distributions-Verzeichnis ..."
rm -rf "${DIST_DIR}"
mkdir -p "${DIST_DIR}"
create_linux_package() {
local architecture="$1"
local program="$2"
local config_file="$3"
local package_name="$4"
local source_dir="${BUILD_DIR}/${architecture}"
local package_dir="${DIST_DIR}/${architecture}/${package_name}"
if [[ ! -f "${source_dir}/${program}" ]]; then
echo "Überspringe ${package_name} für ${architecture}"
echo "Build-Datei nicht gefunden: ${source_dir}/${program}"
echo
return
fi
echo "Erzeuge ${package_name} für ${architecture}"
rm -rf "${package_dir}"
mkdir -p "${package_dir}"
cp "${source_dir}/${program}" "${package_dir}/"
cp "${CONFIG_DIR}/${config_file}" "${package_dir}/"
tar -C "${DIST_DIR}/${architecture}" \
-czf "${DIST_DIR}/${architecture}/${package_name}-${VERSION}.tar.gz" \
"${package_name}"
(
cd "${DIST_DIR}/${architecture}"
sha256sum "${package_name}-${VERSION}.tar.gz" \
> "${package_name}-${VERSION}.tar.gz.sha256"
)
echo "OK"
echo
}
echo "Erzeuge Linux-Server-Pakete ..."
echo
create_linux_package \
"linux-amd64" \
"rs2322tcp-server" \
"server.json" \
"rs2322tcp-server"
create_linux_package \
"linux-arm64" \
"rs2322tcp-server" \
"server.json" \
"rs2322tcp-server"
create_linux_package \
"linux-386" \
"rs2322tcp-server" \
"server.json" \
"rs2322tcp-server"
create_linux_package \
"linux-arm" \
"rs2322tcp-server" \
"server.json" \
"rs2322tcp-server"
echo "Erzeuge Linux-Client-Pakete ..."
echo
create_linux_package \
"linux-amd64" \
"rs2322tcp-client" \
"client.json" \
"rs2322tcp-client"
create_linux_package \
"linux-arm64" \
"rs2322tcp-client" \
"client.json" \
"rs2322tcp-client"
echo "Erzeuge Windows-Client-Pakete ..."
echo
create_windows_package() {
local architecture="$1"
local package_name="$2"
local source_dir="${BUILD_DIR}/${architecture}"
local package_dir="${DIST_DIR}/${architecture}/${package_name}"
if [[ ! -f "${source_dir}/rs2322tcp-client.exe" ]]; then
echo "Überspringe ${package_name} für ${architecture}"
echo "Build-Datei nicht gefunden: ${source_dir}/rs2322tcp-client.exe"
echo
return
fi
echo "Erzeuge ${package_name} für ${architecture}"
rm -rf "${package_dir}"
mkdir -p "${package_dir}"
cp "${source_dir}/rs2322tcp-client.exe" "${package_dir}/"
cp "${CONFIG_DIR}/client.json" \
"${package_dir}/client-config.json"
(
cd "${DIST_DIR}/${architecture}"
zip -qr "${package_name}-${VERSION}.zip" "${package_name}"
sha256sum "${package_name}-${VERSION}.zip" \
> "${package_name}-${VERSION}.zip.sha256"
)
echo "OK"
echo
}
create_windows_package \
"windows-amd64" \
"rs2322tcp-client"
create_windows_package \
"windows-386" \
"rs2322tcp-client"
echo "============================================================"
echo " Erzeugte Distributions-Dateien"
echo "============================================================"
echo
find "${DIST_DIR}" -type f | sort | sed "s|${PROJECT_ROOT}/||"
echo
echo "============================================================"
echo " Deploy erfolgreich abgeschlossen."
echo "============================================================"