Prepare FreeDMR v1.5.0 release

master v1.5.0
Simon 2 weeks ago
parent e4ccb5dde3
commit 7f6ddddf54

@ -10,3 +10,6 @@ For the single-client SQL importer and dashboard reporting relay, see
For the CPU-sized one-to-five-worker HDStack container deployment and reporting
MUX, including the default separate Data Gateway service, see
[docs/hdstack.md](docs/hdstack.md).
See the [FreeDMR v1.5.0 release notes](docs/release-notes-v1.5.0.md) before
upgrading an existing container deployment.

@ -68,7 +68,7 @@ services:
container_name: freedmr-data-gateway
depends_on:
- freedmr
image: 'gitlab.hacknix.net:5050/freedmr/freedmr-data-gateway:development-latest'
image: 'gitlab.hacknix.net:5050/freedmr/freedmr-data-gateway:latest'
restart: "unless-stopped"
read_only: true
tmpfs:

@ -311,7 +311,7 @@ net.netfilter.nf_conntrack_udp_timeout_stream=35
EOF
/usr/sbin/sysctl -p
echo 'Starting the FreeDMR release-candidate container...'
echo 'Starting the FreeDMR container...'
cd /etc/freedmr
docker compose up -d

@ -0,0 +1,81 @@
# FreeDMR v1.5.0 release notes
FreeDMR v1.5.0 introduces HDStack, a multi-process deployment for the standard
container. It raises aggregate HBP capacity by distributing active hotspot and
repeater sessions across up to five FreeDMR workers while retaining the
existing 100-connection boundary for each worker.
## Before upgrading
- The standard container now chooses the number of HDStack workers from the
available CPU count minus one, clamped to one through five. Set `HDSTACK=1`
explicitly to retain the established single-process layout.
- Set `HDSTACK_BASEID` to the aggregator server ID. Workers use successive IDs
beginning at `HDSTACK_BASEID + 1`.
- The read-only FreeDMR container requires a writable `/tmp`. The shipped
Compose file provides this with `tmpfs: /tmp`; retain that setting in custom
deployments.
- Existing deployments must update their Compose configuration to receive new
services and mounts; pulling the FreeDMR image alone does not rewrite an
existing `docker-compose.yml`.
## HDStack
- New HBP sessions are assigned round-robin across workers. A DMR ID remains
pinned to its exact worker port for the active session, preserving its login,
bridge and `OPTIONS` state.
- A no-HBP aggregator owns external FBP and OBP relationships. Workers connect
to it over private FBP v5/FBCP links.
- Each worker has an isolated Loro playback process and private ECHO link when
ECHO is enabled.
- The reporting MUX presents worker reports through the existing reporting
socket. It prefixes system names with the stable worker number, for example
`1:SYSTEM-001`, to avoid collisions.
- The optional separate `bridge.py` process is disabled by default. Set
`HDSTACK_BRIDGE=1`, assign it a distinct server ID and configure its skeleton
config and rules files when bridge routing is required.
- HDStack does not provide active worker failover, live migration or persistent
session affinity. A failed worker's active sessions are not moved.
See [HDStack multi-process deployment](hdstack.md) for configuration, generated
ports, reporting and operational limitations.
## Data Gateway
New installations include the stable FreeDMR Data Gateway container. Each
worker has a direct FBP v5/FBCP relationship to the gateway for locally
originated DMR traffic. Existing installations retain the legacy D-APRS path
unless the native `DATA_GATEWAY` setting and relationship are enabled.
The installer requests the APRS-IS login and passcode and writes the matching
worker relationships. The gateway remains a separate container and is not a
fallback when its native links are unavailable.
## Other operator-visible changes
- Network direct dial is available and defaults to local TG9 on TS1. Set
`NETWORK_DIRECT_DIAL_SLOT: 0`, or session option `NDD_SLOT=0`, to disable it.
- Dial-a-TG control, defaults and timers can be configured independently for
TS1 and TS2. Existing TS2 option aliases remain supported.
- `DIAL_A_TG` and `DYNAMIC_TG_ROUTING` can disable their respective dynamic
routing behaviours.
- HBP `OPTIONS` input is bounded to 255 bytes. Oversized values are
acknowledged but ignored.
- Optional DMR data observability is available through `DATA_PACKET_LOGGING`.
It is disabled by default because decoded logs may contain message or
location content.
- Reporting includes source server and repeater metadata without changing the
existing leading report fields.
- The shipped `ALLOW_UNREG_ID` default is now `True` for established FreeDMR
access compatibility.
- The installer uses the current Docker repository setup on Debian 12.
## Compatibility
FBP v5 and OBP v1 remain distinct supported peer protocols. The HDStack
internal topology uses FBP v5/FBCP and consumes one additional FBP hop; the
accepted maximum is therefore 11 hops for all FBP relationships.
The tagged container build publishes `latest`, the tag-specific
`v1.5.0-with-proxy` image and `development-latest` through the existing release
pipeline.

@ -499,7 +499,8 @@ class HDStackContainerTests(unittest.TestCase):
)
self.assertIn("62041-62045:62041-62045/udp", compose)
self.assertIn("container_name: freedmr-data-gateway", compose)
self.assertIn("freedmr-data-gateway:development-latest", compose)
self.assertIn("freedmr-data-gateway:latest", compose)
self.assertNotIn("freedmr-data-gateway:development-latest", compose)
self.assertIn("FREEDMR_GATEWAY_INGRESS_MODE: fbp", compose)
self.assertIn("FREEDMR_GATEWAY_FBP_RELATIONSHIPS:", compose)
self.assertIn("/etc/freedmr/json/:/data/:ro", compose)
@ -548,6 +549,8 @@ class HDStackContainerTests(unittest.TestCase):
installer,
)
self.assertIn('docker compose up -d', installer)
self.assertIn('Starting the FreeDMR container...', installer)
self.assertNotIn('release-candidate container', installer)
self.assertNotIn('apt-key', installer)
self.assertNotIn('add-apt-repository', installer)

Loading…
Cancel
Save

Powered by TurnKey Linux.