This guide is for sysops who already have a working SvxReflector installation and want to replace it with GeuReflector. The binary name, config format, and systemd service are all compatible — the transition is a drop-in replacement plus a few config additions.
- A working SvxReflector installation (any recent version)
- Build tools:
git,cmake(≥ 3.7),g++with C++11 support - Development libraries:
# Debian/Ubuntu — required sudo apt install build-essential cmake libsigc++-2.0-dev libssl-dev \ libjsoncpp-dev libpopt-dev # Required for MQTT publishing (skip if building with -DWITH_MQTT=OFF) sudo apt install libmosquitto-dev # Required for Redis-backed config store (skip if building with -DWITH_REDIS=OFF) sudo apt install libhiredis-dev # Optional codec support sudo apt install libopus-dev libgsm1-dev libspeex-dev
The MQTT and Redis backends are enabled by default. If your deployment doesn't
need them, see step 2 below for the opt-out CMake flags — that lets you skip
the matching *-dev packages entirely.
git clone https://github.com/IW1GEU/geureflector.git
cd geureflectorcmake -S src -B build -DLOCAL_STATE_DIR=/var
cmake --build buildThe compiled binary is at build/bin/svxreflector.
The MQTT publisher and Redis-backed config store are enabled by default. To
build without them — for example, on a host where you don't want to install
libmosquitto-dev or libhiredis-dev — pass the matching CMake flags:
# build without MQTT support
cmake -S src -B build -DLOCAL_STATE_DIR=/var -DWITH_MQTT=OFF
# build without Redis support
cmake -S src -B build -DLOCAL_STATE_DIR=/var -DWITH_REDIS=OFF
# build without either
cmake -S src -B build -DLOCAL_STATE_DIR=/var -DWITH_MQTT=OFF -DWITH_REDIS=OFFCMake prints which mode it picked (-- WITH_MQTT=ON: building with libmosquitto support) at configure time.
Behavior with the feature disabled:
WITH_MQTT=OFF+[MQTT]section in your conf → reflector logs a warning and continues without publishing. Safe to leave[MQTT]in place.WITH_REDIS=OFF+[REDIS]section in your conf → reflector aborts startup (since Redis-mode auth would not work). Remove the[REDIS]section before starting.
sudo systemctl stop svxreflectorFind where your current binary lives:
which svxreflector
# typically /usr/bin/svxreflector or /usr/local/bin/svxreflectorBack it up:
sudo cp /usr/bin/svxreflector /usr/bin/svxreflector.origsudo cp build/bin/svxreflector /usr/bin/svxreflectorUse the same destination path you found in step 4.
Your existing /etc/svxlink/svxreflector.conf works as-is — GeuReflector is
fully backwards compatible. The trunk features are opt-in: if you add nothing,
the reflector behaves exactly like the original.
To enable trunking, add two things:
In the [GLOBAL] section:
[GLOBAL]
# ... existing settings ...
LOCAL_PREFIX=1 # this reflector owns TGs starting with "1"A comma-separated list is accepted if this reflector covers multiple prefix groups:
LOCAL_PREFIX=11,12,13At the end of the config file, add one [TRUNK_x] section per peer reflector:
[TRUNK_1_2]
HOST=reflector-b.example.com
PORT=5302
SECRET=a_strong_shared_secret
REMOTE_PREFIX=2- The section name must be identical on both sides. Both sysops must agree
on a shared name (e.g.
TRUNK_1_2for the link between prefix 1 and 2). PORTdefaults to5302if omitted.- Both sides must use the same
SECRET. REMOTE_PREFIXalso accepts a comma-separated list.
[GLOBAL]
# ... existing settings ...
HTTP_SRV_PORT=8080The /status endpoint will include a trunks object showing connection state
and active talkers per link.
The trunk uses TCP port 5302 (separate from the client port 5300).
# firewalld
sudo firewall-cmd --permanent --add-port=5302/tcp
sudo firewall-cmd --reload
# ufw
sudo ufw allow 5302/tcp
# iptables
sudo iptables -A INPUT -p tcp --dport 5302 -j ACCEPTsudo systemctl start svxreflector
sudo systemctl status svxreflectorCheck the logs for the handshake message:
journalctl -u svxreflector -fA successful trunk connection looks like:
TRUNK_1_2: Connected to reflector-b.example.com:5302
TRUNK_1_2: Trunk hello from peer 'TRUNK_1_2' local_prefix=2 priority=3847291042
If HTTP_SRV_PORT is set, query the status endpoint:
curl -s http://localhost:8080/status | python3 -m json.toolThe trunks object will show "connected": true for each active link.
If anything goes wrong, restore the original binary and restart:
sudo systemctl stop svxreflector
sudo cp /usr/bin/svxreflector.orig /usr/bin/svxreflector
sudo systemctl start svxreflectorNo config changes are needed to roll back — the original binary simply ignores
the LOCAL_PREFIX and [TRUNK_x] entries.
docs/PEER_PROTOCOL.md— wire protocol specificationdocs/DEPLOYMENT_ITALY.md— full national deployment example with configuration for all regions