Compare commits
3 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ea8913fb69 | ||
|
|
27b97316fc | ||
|
|
8b7d081960 |
8 changed files with 631 additions and 82 deletions
7
.gitignore
vendored
7
.gitignore
vendored
|
|
@ -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
BIN
Icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.3 KiB |
243
README.md
243
README.md
|
|
@ -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/
|
||||
|
|
|
|||
|
|
@ -137,4 +137,4 @@ func main() {
|
|||
|
||||
// Den Fyne-Eventloop starten.
|
||||
application.Run()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"server": {
|
||||
"address": "192.168.178.229",
|
||||
"address": "127.0.0.1",
|
||||
"port": 5000
|
||||
},
|
||||
"virtual_port_range": {
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
271
scripts/build.sh
271
scripts/build.sh
|
|
@ -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
184
scripts/deploy.sh
Executable 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 "============================================================"
|
||||
Loading…
Reference in a new issue