Version 0.0.1 - Projektgrundlage und Buildsystem
This commit is contained in:
parent
941e4be3c8
commit
63b6ca42c8
8 changed files with 437 additions and 1 deletions
40
.gitignore
vendored
Normal file
40
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
# Build-Verzeichnis
|
||||||
|
/build/
|
||||||
|
|
||||||
|
# Lokale Build-Binaries
|
||||||
|
/rs2322tcp-client
|
||||||
|
/rs2322tcp-server
|
||||||
|
|
||||||
|
# Go build artifacts
|
||||||
|
*.exe
|
||||||
|
*.exe~
|
||||||
|
*.test
|
||||||
|
*.out
|
||||||
|
|
||||||
|
# Coverage
|
||||||
|
coverage.out
|
||||||
|
coverage.html
|
||||||
|
|
||||||
|
# Go workspace
|
||||||
|
go.work
|
||||||
|
go.work.sum
|
||||||
|
|
||||||
|
# IDE / editor files
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*~
|
||||||
|
|
||||||
|
# OS files
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Local configuration
|
||||||
|
config.local.json
|
||||||
|
|
||||||
|
# Certificates and private keys
|
||||||
|
*.key
|
||||||
|
*.pem
|
||||||
|
*.crt
|
||||||
|
*.p12
|
||||||
30
CHANGELOG.md
Normal file
30
CHANGELOG.md
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
# Changelog
|
||||||
|
|
||||||
|
Alle wesentlichen Änderungen am Projekt werden in dieser Datei
|
||||||
|
dokumentiert.
|
||||||
|
|
||||||
|
## [0.0.1] - Entwicklung
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Grundstruktur des Projekts `rs2322tcp`
|
||||||
|
- Go-Modul `git.lang-dieter.de/rs2322tcp`
|
||||||
|
- Client-Anwendung als separates Programm vorgesehen
|
||||||
|
- Server-Anwendung als separates Programm vorgesehen
|
||||||
|
- Gemeinsame interne Pakete für Konfiguration, Transport, serielle
|
||||||
|
Schnittstellen, Client, Server und Versionierung
|
||||||
|
- Unterstützung von Windows und Linux als gleichberechtigte
|
||||||
|
Client-Plattformen vorgesehen
|
||||||
|
- Raspberry Pi 5 als Server-Plattform vorgesehen
|
||||||
|
- TCP als Transport für RS232-Daten festgelegt
|
||||||
|
- Tailscale als vertrauenswürdiges Netzwerk vorgesehen
|
||||||
|
- TLS zunächst nicht vorgesehen
|
||||||
|
- UDP als möglicher zukünftiger Transport für Audio-Daten vorgesehen
|
||||||
|
- Logging/Sniffer-Funktion für Diagnose vorgesehen
|
||||||
|
- Einsatz von `socat` als Entwicklungs- und Diagnosewerkzeug vorgesehen
|
||||||
|
|
||||||
|
### Status
|
||||||
|
|
||||||
|
Die Version 0.0.1 enthält zunächst nur die Projektgrundlage.
|
||||||
|
Eine funktionierende RS232- oder Netzwerkübertragung ist noch
|
||||||
|
nicht implementiert.
|
||||||
81
README.md
81
README.md
|
|
@ -1,3 +1,82 @@
|
||||||
# rs2322tcp
|
# rs2322tcp
|
||||||
|
|
||||||
RS232-Verbindungen (serielle Schnittstelle) mittels Software-Konverter auf TCP (Internet) übertragen
|
## Zweck
|
||||||
|
|
||||||
|
`rs2322tcp` überträgt Daten zwischen seriellen RS232-Schnittstellen
|
||||||
|
und einem TCP/IP-Netzwerk.
|
||||||
|
|
||||||
|
Das Projekt besteht aus einem Client und einem Server:
|
||||||
|
|
||||||
|
- Der Client stellt auf einem lokalen Rechner eine virtuelle serielle
|
||||||
|
Schnittstelle für vorhandene Software bereit.
|
||||||
|
- Der Server läuft auf einem Raspberry Pi und stellt die dort
|
||||||
|
angeschlossenen echten RS232-Schnittstellen bereit.
|
||||||
|
- Die serielle Kommunikation wird transparent über TCP übertragen.
|
||||||
|
|
||||||
|
Die vorhandene Software auf dem Client sowie die angeschlossenen
|
||||||
|
Geräte auf der Serverseite sollen dabei möglichst keinen Unterschied
|
||||||
|
zu einer direkten seriellen Verbindung feststellen.
|
||||||
|
|
||||||
|
## Plattformen
|
||||||
|
|
||||||
|
### Client
|
||||||
|
|
||||||
|
Der Client soll gleichberechtigt auf folgenden Plattformen betrieben
|
||||||
|
werden können:
|
||||||
|
|
||||||
|
- Windows
|
||||||
|
- Linux
|
||||||
|
|
||||||
|
Die plattformspezifische Bereitstellung der virtuellen seriellen
|
||||||
|
Schnittstelle wird vom gemeinsamen Client-Kern getrennt.
|
||||||
|
|
||||||
|
### Server
|
||||||
|
|
||||||
|
Der Server ist zunächst für den Betrieb auf einem Raspberry Pi 5
|
||||||
|
vorgesehen.
|
||||||
|
|
||||||
|
Mehrere USB-to-RS232-Adapter können angeschlossen und über die
|
||||||
|
Konfiguration einzelnen Geräten zugeordnet werden.
|
||||||
|
|
||||||
|
## Netzwerk
|
||||||
|
|
||||||
|
Für die RS232-Datenübertragung wird TCP verwendet.
|
||||||
|
|
||||||
|
Das Projekt geht zunächst davon aus, dass die beteiligten Rechner
|
||||||
|
über ein vertrauenswürdiges Tailscale-Netz miteinander verbunden sind.
|
||||||
|
|
||||||
|
Eine zusätzliche TLS-Verschlüsselung ist deshalb zunächst nicht
|
||||||
|
vorgesehen.
|
||||||
|
|
||||||
|
Für eine spätere Übertragung von Audio-Daten ist ein separates
|
||||||
|
Transportkonzept vorgesehen. Dafür soll UDP untersucht werden.
|
||||||
|
|
||||||
|
## Konfiguration
|
||||||
|
|
||||||
|
Client und Server erhalten jeweils eine eigene `config.json`.
|
||||||
|
|
||||||
|
Darin werden unter anderem serielle Schnittstellen, Parameter,
|
||||||
|
Gerätebezeichnungen und Netzwerkparameter konfiguriert.
|
||||||
|
|
||||||
|
## Diagnose und Logging
|
||||||
|
|
||||||
|
Für Debugging und Diagnose soll eine Protokollierung des übertragenen
|
||||||
|
Datenverkehrs möglich sein.
|
||||||
|
|
||||||
|
Dabei soll insbesondere eine Darstellung der übertragenen Bytes
|
||||||
|
möglich sein.
|
||||||
|
|
||||||
|
`socat` kann während der Entwicklung und für Diagnosezwecke als
|
||||||
|
zusätzliches Werkzeug eingesetzt werden.
|
||||||
|
|
||||||
|
## Versionierung
|
||||||
|
|
||||||
|
Die Version des Programms wird über Git verwaltet und beim Build in
|
||||||
|
das Programm eingebunden.
|
||||||
|
|
||||||
|
Die Entwicklung erfolgt schrittweise über versionierte Entwicklungs-
|
||||||
|
stände.
|
||||||
|
|
||||||
|
## Lizenz
|
||||||
|
|
||||||
|
GPLv3
|
||||||
|
|
|
||||||
23
cmd/rs2322tcp-client/main.go
Normal file
23
cmd/rs2322tcp-client/main.go
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
/*
|
||||||
|
Package main implements the rs2322tcp client application.
|
||||||
|
|
||||||
|
The client will provide a local virtual serial interface and
|
||||||
|
transparently transport serial data over TCP to the rs2322tcp server.
|
||||||
|
|
||||||
|
At this stage the application only provides the basic program
|
||||||
|
structure and version information.
|
||||||
|
|
||||||
|
Project: rs2322tcp
|
||||||
|
Module: git.lang-dieter.de/rs2322tcp
|
||||||
|
*/
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"git.lang-dieter.de/rs2322tcp/internal/version"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
fmt.Printf("rs2322tcp-client %s\n", version.Version)
|
||||||
|
}
|
||||||
24
cmd/rs2322tcp-server/main.go
Normal file
24
cmd/rs2322tcp-server/main.go
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
/*
|
||||||
|
Package main implements the rs2322tcp server application.
|
||||||
|
|
||||||
|
The server will provide the network endpoint for rs2322tcp clients
|
||||||
|
and connect incoming connections to configured physical RS232
|
||||||
|
interfaces.
|
||||||
|
|
||||||
|
At this stage the application only provides the basic program
|
||||||
|
structure and version information.
|
||||||
|
|
||||||
|
Project: rs2322tcp
|
||||||
|
Module: git.lang-dieter.de/rs2322tcp
|
||||||
|
*/
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"git.lang-dieter.de/rs2322tcp/internal/version"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
fmt.Printf("rs2322tcp-server %s\n", version.Version)
|
||||||
|
}
|
||||||
3
go.mod
Normal file
3
go.mod
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
module git.lang-dieter.de/rs2322tcp
|
||||||
|
|
||||||
|
go 1.22.2
|
||||||
22
internal/version/version.go
Normal file
22
internal/version/version.go
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
/*
|
||||||
|
Package version provides build-time version information for rs2322tcp.
|
||||||
|
|
||||||
|
The variables are normally overwritten during the build using the
|
||||||
|
Go linker (-ldflags). Development builds use default values.
|
||||||
|
|
||||||
|
Project: rs2322tcp
|
||||||
|
Module: git.lang-dieter.de/rs2322tcp
|
||||||
|
*/
|
||||||
|
package version
|
||||||
|
|
||||||
|
// Version contains the application version.
|
||||||
|
var Version = "dev"
|
||||||
|
|
||||||
|
// Build contains the Git build number.
|
||||||
|
var Build = "0"
|
||||||
|
|
||||||
|
// Commit contains the short Git commit ID.
|
||||||
|
var Commit = "unknown"
|
||||||
|
|
||||||
|
// Date contains the build date and time.
|
||||||
|
var Date = "unknown"
|
||||||
215
scripts/build.sh
Executable file
215
scripts/build.sh
Executable file
|
|
@ -0,0 +1,215 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# ============================================================================
|
||||||
|
# Projekt.....: rs2322tcp
|
||||||
|
# Datei.......: build.sh
|
||||||
|
#
|
||||||
|
# Copyright (C) 2026 Dieter Lang
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
#
|
||||||
|
# Beschreibung:
|
||||||
|
# Erstellt die Linux- und Windows-Builds des Projektes.
|
||||||
|
#
|
||||||
|
# Die Versionsinformationen werden aus Git ermittelt und beim Build
|
||||||
|
# über den Go-Linker in die Binärdateien eingebettet.
|
||||||
|
#
|
||||||
|
# Gebaut werden:
|
||||||
|
# - Linux amd64: Client und Server
|
||||||
|
# - Linux arm64: Server
|
||||||
|
# - Windows amd64: Client
|
||||||
|
# ============================================================================
|
||||||
|
#
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
PROJECT=$(basename "$(pwd)")
|
||||||
|
BUILDDIR="build"
|
||||||
|
MODULE=$(go list -m)
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# Farben
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
RED="\033[1;31m"
|
||||||
|
GREEN="\033[1;32m"
|
||||||
|
BLUE="\033[1;34m"
|
||||||
|
YELLOW="\033[1;33m"
|
||||||
|
RESET="\033[0m"
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# Zeitmessung
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
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")
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo -e "${BLUE}"
|
||||||
|
echo "============================================================"
|
||||||
|
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"
|
||||||
|
|
||||||
|
echo
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# Formatieren
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
echo -e "${YELLOW}Formatiere Quellcode ...${RESET}"
|
||||||
|
gofmt -w .
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# Tests
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
echo -e "${YELLOW}Starte Tests ...${RESET}"
|
||||||
|
go test ./...
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# Module bereinigen
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
echo -e "${YELLOW}Bereinige Module ...${RESET}"
|
||||||
|
go mod tidy
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# Build-Verzeichnis
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
echo -e "${YELLOW}Erzeuge Build-Verzeichnis ...${RESET}"
|
||||||
|
|
||||||
|
rm -rf "${BUILDDIR}"
|
||||||
|
mkdir -p "${BUILDDIR}"
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# 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}'"
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# Buildfunktion
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
build_target() {
|
||||||
|
|
||||||
|
GOOS=$1
|
||||||
|
GOARCH=$2
|
||||||
|
TARGET=$3
|
||||||
|
PROGRAM=$4
|
||||||
|
OUTPUT=$5
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo -e "${BLUE}Baue ${PROGRAM} für ${TARGET}${RESET}"
|
||||||
|
|
||||||
|
mkdir -p "${BUILDDIR}/${TARGET}"
|
||||||
|
|
||||||
|
GOOS="${GOOS}" \
|
||||||
|
GOARCH="${GOARCH}" \
|
||||||
|
CGO_ENABLED=0 \
|
||||||
|
go build \
|
||||||
|
-trimpath \
|
||||||
|
-ldflags="${LDFLAGS}" \
|
||||||
|
-o "${BUILDDIR}/${TARGET}/${OUTPUT}" \
|
||||||
|
"./cmd/${PROGRAM}"
|
||||||
|
|
||||||
|
(
|
||||||
|
cd "${BUILDDIR}/${TARGET}"
|
||||||
|
sha256sum "${OUTPUT}" > "${OUTPUT}.sha256"
|
||||||
|
)
|
||||||
|
|
||||||
|
SIZE=$(stat -c%s "${BUILDDIR}/${TARGET}/${OUTPUT}")
|
||||||
|
SIZE_MB=$(awk "BEGIN {printf \"%.2f\", ${SIZE}/1024/1024}")
|
||||||
|
|
||||||
|
echo -e "${GREEN}OK${RESET}"
|
||||||
|
echo "Größe : ${SIZE_MB} MB"
|
||||||
|
}
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# Linux amd64
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
build_target linux amd64 linux-amd64 \
|
||||||
|
rs2322tcp-client rs2322tcp-client
|
||||||
|
|
||||||
|
build_target linux amd64 linux-amd64 \
|
||||||
|
rs2322tcp-server rs2322tcp-server
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# Linux arm64
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
build_target linux arm64 linux-arm64 \
|
||||||
|
rs2322tcp-server rs2322tcp-server
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# Windows amd64
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
build_target windows amd64 windows-amd64 \
|
||||||
|
rs2322tcp-client rs2322tcp-client.exe
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# Abschluss
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
END=$(date +%s)
|
||||||
|
RUNTIME=$((END-START))
|
||||||
|
|
||||||
|
TARGETS=4
|
||||||
|
FILES=$(find "${BUILDDIR}" -type f | wc -l)
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo -e "${BLUE}"
|
||||||
|
echo "============================================================"
|
||||||
|
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"
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo -e "${BLUE}"
|
||||||
|
echo "============================================================"
|
||||||
|
echo "Erzeugte Build-Dateien"
|
||||||
|
echo "============================================================"
|
||||||
|
echo -e "${RESET}"
|
||||||
|
|
||||||
|
find "${BUILDDIR}" -type f | sort
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo -e "${GREEN}"
|
||||||
|
echo "============================================================"
|
||||||
|
echo "Alle Builds erfolgreich abgeschlossen."
|
||||||
|
echo "============================================================"
|
||||||
|
echo -e "${RESET}"
|
||||||
Loading…
Reference in a new issue