Point the local lab at GeuReflector and document the Config window.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -5,7 +5,7 @@ TZ=Europe/Berlin
|
||||
LISTEN_PORT=5300
|
||||
|
||||
# 0 = local lab only (default). 1 = append config/svxreflector.link.conf
|
||||
# (Satellite/Trunk from DJ1JAY). Satellite dials out — no public DNS needed.
|
||||
# (GeuReflector Satellite/Trunk). Satellite dials out — no public DNS needed.
|
||||
ENABLE_FM_LINK=0
|
||||
|
||||
SVXREFLECTOR_CONF=/etc/svxlink/svxreflector.conf
|
||||
|
||||
+13
-11
@@ -1,6 +1,7 @@
|
||||
# Build jayReflector (DJ1JAY / FM-Funknetz) for the Funknetz local lab.
|
||||
# Build GeuReflector (IW1GEU) for the Funknetz local lab.
|
||||
# Binary name remains svxreflector; Trunk/Satellite are opt-in via config.
|
||||
# Upstream pattern: dj1jay/jayReflector Dockerfile (clone + cmake, not stock sm0svx).
|
||||
# Pin: audric/GeuReflector dbad88e8c3e0f1adb8342db190bb0b3ad00106f4
|
||||
# (master, 2026-07-16; release line v1.3.17).
|
||||
|
||||
# =========================================================
|
||||
# STAGE 1 — BUILD
|
||||
@@ -13,27 +14,27 @@ RUN apt-get update && apt-get -y install --no-install-recommends \
|
||||
build-essential cmake \
|
||||
libsigc++-2.0-dev libssl-dev libjsoncpp-dev libpopt-dev \
|
||||
libopus-dev libgsm1-dev \
|
||||
libmosquitto-dev libhiredis-dev \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ARG GIT_URL=https://github.com/dj1jay/jayReflector.git
|
||||
ARG GIT_BRANCH=main
|
||||
ARG GIT_URL=https://github.com/audric/GeuReflector.git
|
||||
ARG GIT_BRANCH=master
|
||||
ARG GIT_REF=
|
||||
ARG NUM_CORES=4
|
||||
|
||||
WORKDIR /build
|
||||
RUN set -eux; \
|
||||
if [ -n "${GIT_REF}" ]; then \
|
||||
git clone --recursive "${GIT_URL}" jayReflector; \
|
||||
cd jayReflector && git checkout "${GIT_REF}"; \
|
||||
git clone --recursive "${GIT_URL}" GeuReflector; \
|
||||
cd GeuReflector && git checkout "${GIT_REF}"; \
|
||||
else \
|
||||
git clone --recursive --depth 1 --branch "${GIT_BRANCH}" "${GIT_URL}" jayReflector; \
|
||||
git clone --recursive --depth 1 --branch "${GIT_BRANCH}" "${GIT_URL}" GeuReflector; \
|
||||
fi
|
||||
|
||||
WORKDIR /build/jayReflector
|
||||
WORKDIR /build/GeuReflector
|
||||
RUN set -eux; \
|
||||
cmake -S src -B build \
|
||||
-DLOCAL_STATE_DIR=/var \
|
||||
-DUSE_QT=OFF \
|
||||
-DUSE_ALSA=OFF \
|
||||
-DCMAKE_BUILD_TYPE=Release; \
|
||||
cmake --build build --target svxreflector -j"${NUM_CORES}"
|
||||
@@ -48,10 +49,11 @@ RUN apt-get update && apt-get -y install --no-install-recommends \
|
||||
ca-certificates openssl \
|
||||
libsigc++-2.0-0v5 libssl3 libjsoncpp25 libpopt0 \
|
||||
libopus0 libgsm1 \
|
||||
libmosquitto1 libhiredis0.14 \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY --from=builder /build/jayReflector/build/bin/svxreflector /usr/bin/svxreflector
|
||||
COPY --from=builder /build/jayReflector/build/lib/lib*.so* /usr/lib/
|
||||
COPY --from=builder /build/GeuReflector/build/bin/svxreflector /usr/bin/svxreflector
|
||||
COPY --from=builder /build/GeuReflector/build/lib/lib*.so* /usr/lib/
|
||||
|
||||
RUN mkdir -p /etc/svxlink /etc/svxlink/pki /var/log/svxlink /var/lib/svxlink && \
|
||||
ldconfig && \
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
###################################################################
|
||||
# Local lab jayReflector for Funknetz (protocol 2.0 / ReflectorV2)
|
||||
# Local lab GeuReflector for Funknetz (protocol 2.0 / ReflectorV2)
|
||||
# Secrets here are placeholders — do not reuse production keys.
|
||||
#
|
||||
# Standalone by default: local clients only. FM-Funknetz Satellite/Trunk
|
||||
@@ -17,8 +17,8 @@ CERT_PKI_DIR=/etc/svxlink/pki/
|
||||
# Optional status JSON (publish 8080 in compose if you enable this):
|
||||
# HTTP_SRV_PORT=8080
|
||||
|
||||
# jayReflector / modern SvxReflector bootstraps a local PKI even for
|
||||
# protocol 2.0 AUTH_KEY clients. COMMON_NAME is required on first start.
|
||||
# GeuReflector bootstraps a local PKI even for protocol 2.0 AUTH_KEY
|
||||
# clients. COMMON_NAME is required on first start.
|
||||
[SERVER_CERT]
|
||||
COMMON_NAME=funknetz-lab.local
|
||||
SUBJECT_ALT_NAME=DNS:funknetz-lab.local,DNS:localhost,IP:127.0.0.1
|
||||
|
||||
@@ -1,33 +1,43 @@
|
||||
###################################################################
|
||||
# Optional FM-Funknetz link stub (jayReflector)
|
||||
# Optional FM-Funknetz link stub (GeuReflector)
|
||||
#
|
||||
# Default: leave ENABLE_FM_LINK=0 in .env — this file is ignored.
|
||||
# When DJ1JAY provides values:
|
||||
# 1. Fill ONE of the blocks below (prefer Satellite for home/NAT labs).
|
||||
# When the parent operator provides values:
|
||||
# 1. Uncomment ONE of the blocks below (prefer Satellite for home/NAT labs).
|
||||
# 2. Set ENABLE_FM_LINK=1 in .env
|
||||
# 3. docker compose up -d
|
||||
#
|
||||
# The entrypoint appends this file after the base lab conf, which already
|
||||
# ends in [PASSWORDS]. Satellite keys belong in [GLOBAL]; the section
|
||||
# header below merges with the base [GLOBAL] section.
|
||||
#
|
||||
# Satellite (recommended): this reflector dials OUT to the parent on
|
||||
# TCP 5303. No public DNS, no inbound peer port, no port-forward required
|
||||
# for the link. Local Funknetz clients still use host :5300 only.
|
||||
# SATELLITE_ID may contain only letters, digits, and dashes.
|
||||
# Do not set LOCAL_PREFIX or a [TRUNK_x] section on a satellite.
|
||||
#
|
||||
# Trunk: equal mesh peer; needs mutual reachability on TCP 5302 and a
|
||||
# matching [TRUNK_x] section name + SECRET on both sides.
|
||||
# Do not enable Satellite and Trunk in the same file.
|
||||
#
|
||||
# Do not commit real secrets. Prefer a local override or keep secrets
|
||||
# only in your private .env workflow if you copy this file.
|
||||
# Docs: docs/research/2026-10-07-jayreflector-fm-funknetz.md
|
||||
# README: https://github.com/dj1jay/jayReflector
|
||||
# Do not commit real secrets.
|
||||
# Docs: docs/research/2026-10-11-geureflector-lab-baseline.md
|
||||
# README: https://github.com/audric/GeuReflector#satellite-reflectors
|
||||
###################################################################
|
||||
|
||||
# --- Satellite (fill from DJ1JAY; uncomment to use) ---
|
||||
# SATELLITE_OF=parent.example.org:5303
|
||||
# --- Satellite (uncomment the section and keys to use) ---
|
||||
# [GLOBAL]
|
||||
# SATELLITE_OF=parent.example.org
|
||||
# SATELLITE_PORT=5303
|
||||
# SATELLITE_ID=lab-yourcall
|
||||
# SATELLITE_SECRET="replace-with-secret-from-dj1jay"
|
||||
# SATELLITE_SECRET="replace-with-secret-from-operator"
|
||||
# Only these TGs cross to/from the parent (bidirectional). Omit for all TGs.
|
||||
# Syntax: exact "26200", prefix "24*", range "2427-2438", comma-separated.
|
||||
# SATELLITE_FILTER=2621,2629,20
|
||||
|
||||
# --- Trunk peer alternative (fill from DJ1JAY; usually leave commented) ---
|
||||
# --- Trunk peer alternative (uncomment to use; leave Satellite commented) ---
|
||||
# [GLOBAL]
|
||||
# LOCAL_PREFIX=9
|
||||
# TRUNK_LISTEN_PORT=5302
|
||||
#
|
||||
@@ -38,4 +48,5 @@
|
||||
# REMOTE_PREFIX=262
|
||||
# ALLOW_TGS=2621,2629,20
|
||||
# # TG_MAP=1:2624100
|
||||
# MQTT_NAME=Lab-YourCall
|
||||
# MQTT stays off. If enabled later, MQTT_NAME belongs in a [MQTT] section,
|
||||
# not under [TRUNK_x].
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# Local jayReflector lab for Funknetz.
|
||||
# Local GeuReflector lab for Funknetz.
|
||||
# Build once, then: docker compose up -d --build
|
||||
# Connect the app with host/port/callsign/authKey from .env (see FUNKNETZ_*).
|
||||
#
|
||||
# FM-Funknetz link (optional): fill config/svxreflector.link.conf from DJ1JAY,
|
||||
# FM-Funknetz link (optional): fill config/svxreflector.link.conf,
|
||||
# set ENABLE_FM_LINK=1, recreate. Satellite mode is outbound-only (no DNS/inbound).
|
||||
|
||||
services:
|
||||
@@ -11,11 +11,11 @@ services:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
args:
|
||||
GIT_URL: https://github.com/dj1jay/jayReflector.git
|
||||
GIT_BRANCH: main
|
||||
# Optional pin (overrides branch clone when set), e.g.:
|
||||
# GIT_REF: 50997ed21a37c7c05c132eca5ebb07bab4b80fc7
|
||||
image: funknetz-jayreflector:local
|
||||
GIT_URL: https://github.com/audric/GeuReflector.git
|
||||
GIT_BRANCH: master
|
||||
# Pin (overrides the branch clone). master on 2026-10-11; release line v1.3.17.
|
||||
GIT_REF: dbad88e8c3e0f1adb8342db190bb0b3ad00106f4
|
||||
image: funknetz-geureflector:local
|
||||
container_name: funknetz-svxreflector
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
|
||||
@@ -55,11 +55,11 @@ stop_all() {
|
||||
|
||||
trap 'stop_all; exit 0' INT TERM
|
||||
|
||||
command -v svxreflector >/dev/null 2>&1 || die "svxreflector binary not found (jayReflector build)"
|
||||
command -v svxreflector >/dev/null 2>&1 || die "svxreflector binary not found (GeuReflector build)"
|
||||
[ -f "$SVXREFLECTOR_CONF" ] || die "Config not found: $SVXREFLECTOR_CONF (expected volume mount)"
|
||||
|
||||
# Local-only by default. When ENABLE_FM_LINK=1, append the link stub
|
||||
# (Satellite or Trunk keys from DJ1JAY) after the base lab conf.
|
||||
# (GeuReflector Satellite or Trunk keys) after the base lab conf.
|
||||
if [ "$ENABLE_FM_LINK" = "1" ]; then
|
||||
[ -f "$SVXREFLECTOR_LINK_CONF" ] || die "ENABLE_FM_LINK=1 but link config missing: $SVXREFLECTOR_LINK_CONF"
|
||||
{
|
||||
@@ -82,7 +82,7 @@ mkdir -p /etc/svxlink/pki /var/lib/svxlink/pki
|
||||
|
||||
start_bg "svxreflector" svxreflector --config "$conf_path" $SVXREFLECTOR_ARGS
|
||||
|
||||
log "jayReflector (svxreflector) is running. Waiting…"
|
||||
log "GeuReflector (svxreflector) is running. Waiting…"
|
||||
|
||||
exit_code=0
|
||||
for pid in $pids; do
|
||||
|
||||
Reference in New Issue
Block a user