Jump to content

Hamradio/svxlink node

From MediaWiki For Hamradio Analog/Digital and Debian v13 software/Raspberry PI v3/4/5 howto

A complete, hand-held walkthrough: from a blank microSD card to a working SvxLink node on a Raspberry Pi — download the OS, flash it with Wi-Fi and SSH already set, find the Pi on your network, log in, build SvxLink, drop in a config, and add a web dashboard. No prior Linux experience needed. Copy-paste friendly.

💡 What you'll end up with: a Raspberry Pi running SvxLink, connected to a SVXReflector, with Swedish and English voice prompts, that you can see and control from a browser. Allow about an hour (most of it is the Pi compiling by itself).
Eight steps: download Raspberry Pi OS, flash with Pi Imager (hostname/SSH/Wi-Fi), boot, find IP, connect over SSH/PuTTY, install SvxLink, edit svxlink.conf, start it and add the dashboard.

What you need

  • A Raspberry Pi 3, 4 or 5 (a Pi Zero 2 W works but is slow to compile).
  • A microSD card, 16 GB or larger, and a card reader on your PC.
  • A sound interface for the radio side (USB sound card, a hat like the WM8960, or a DRA/repeater board) — not needed just to get the software running.
  • Your callsign and a reflector login (host + AUTH_KEY) for the SVXReflector you want to join.

Part 1 — Download Raspberry Pi OS

Get the 64-bit Lite image of Raspberry Pi OS 13 (Trixie) — "Lite" has no desktop, which is what you want for a node.

Part 2 — Flash the SD card (with SSH + Wi-Fi pre-set)

This is the step that saves you a keyboard and monitor. In Raspberry Pi Imager:

  1. Choose Device: your Pi model.
  2. Choose OS: Raspberry Pi OS (other) → Raspberry Pi OS Lite (64-bit).
  3. Choose Storage: your SD card.
  4. Click Next → Edit Settings (the gear / "would you like to apply OS customisation?"). Set:
Setting What to put
Hostname e.g. svxnode — you'll reach the Pi as svxnode.local.
Enable SSH Yes → "Use password authentication" (simplest).
Username / password pick your own, e.g. user pi. Write it down.
Configure wireless LAN your Wi-Fi SSID + password, and your Wi-Fi country (important or Wi-Fi stays off).
Locale / timezone / keyboard your country.

Save, then Write. When it finishes, eject the card.

⚠ If you skip the Wi-Fi/SSH customisation, the Pi boots with no way in. Either redo this step, or plug in an Ethernet cable (SSH is still enabled only if you ticked it).

Part 3 — Boot the Pi

Put the card in the Pi, connect the radio/sound hardware if you have it, and power it on. The first boot takes a minute or two (it expands the filesystem and joins Wi-Fi). Give it time before looking for it.

Part 4 — Find the Pi's IP address

You need the Pi's IP (or its .local name) to log in. Pick whichever works:

  • Hostname (easiest): just use svxnode.local (the hostname you set + .local). Works on most home networks.
  • Your router: open your router's admin page → the DHCP client / connected devices list → find svxnode and note its IP (e.g. 192.168.1.42).
  • Scan the network from your PC:
ping svxnode.local
# or scan the subnet (Linux/Mac):   nmap -sn 192.168.1.0/24

Part 5 — Connect over SSH

Windows: download and run PuTTY — https://www.putty.org/ . In Host Name type svxnode.local (or the IP), Port 22, Open. Accept the key warning the first time, then log in with the username/password you set.

macOS / Linux: just use a terminal:

ssh pi@svxnode.local

Once you're in, bring the system up to date:

sudo apt update && sudo apt full-upgrade -y

SvxLink isn't in the Pi's default repos as a current build, so you compile it (the Pi does the work). This one script installs the build tools, fetches the source from GitHub, builds and installs it, and downloads the Swedish (sv_SE) and English (en_US) voice prompts. Paste it into the SSH session:

#!/bin/bash
set -e
cd ~
mkdir -p ./projects/svxlink
cd ./projects/svxlink

sudo apt update
sudo apt dist-upgrade -y
sudo apt autoremove -y

sudo apt install -y \
  build-essential cmake git wget \
  libgpiod3 libgpiod-dev \
  alsa-utils \
  libsigc++-2.0-dev libgsm1-dev libpopt-dev \
  tcl8.6-dev \
  libgcrypt20-dev libspeex-dev libasound2-dev libopus-dev librtlsdr-dev \
  doxygen groff vorbis-tools curl \
  qtbase5-dev qttools5-dev-tools qttools5-dev \
  libjsoncpp-dev libcurl4-gnutls-dev libogg-dev \
  sox

# system user for svxlink (ignored if it already exists)
if ! id -u svxlink >/dev/null 2>&1; then
  sudo useradd -r -G audio,plugdev,dialout svxlink
fi

# fetch the source
if [ ! -d svxlink ]; then
  git clone https://github.com/sm0svx/svxlink.git
fi

mkdir -p svxlink/src/build
cd svxlink/src/build
cmake -DCMAKE_INSTALL_PREFIX=/usr -DSYSCONF_INSTALL_DIR=/etc \
      -DLOCAL_STATE_DIR=/var -DWITH_SYSTEMD=yes ..
make -j"$(nproc)"
make doc
sudo make install
sudo ldconfig

# voice prompts: Swedish + English
cd ~/projects/svxlink
cp svxlink/src/svxlink/scripts/filter_sounds.sh ./
cp svxlink/src/svxlink/scripts/play_sound.sh   ./
[ -d svxlink-sounds-en_US-heather ] || git clone https://github.com/sm0svx/svxlink-sounds-en_US-heather.git
[ -d svxlink-sounds-sv_SE-elin ]    || git clone https://github.com/sm0svx/svxlink-sounds-sv_SE-elin.git
sudo ./filter_sounds.sh svxlink-sounds-en_US-heather en_US
sudo ./filter_sounds.sh svxlink-sounds-sv_SE-elin   sv_SE
cd /usr/share/svxlink/sounds
sudo tar xvjf ~/projects/svxlink/svxlink-sounds-en_US.tar.bz2
sudo tar xvjf ~/projects/svxlink/svxlink-sounds-sv_SE.tar.bz2
💡 make -j"$(nproc)" builds on all CPU cores. On a Pi 3 the compile can take 20–40 minutes — that's normal. Go get a coffee; it's working.

Part 7 — Configure svxlink.conf

The config lives in /etc/svxlink/svxlink.conf. Edit it:

sudoedit /etc/svxlink/svxlink.conf

The parts you must set are the logic sections. The most important is the reflector connection — here is a working [ReflectorLogic] (secrets replaced with CHANGE_ME):

[ReflectorLogic]
TYPE=Reflector
ID=9
HOSTS=svx.sa7aux.se          ; your reflector's hostname
CALLSIGN="MYCALL"            ; your callsign
AUTH_KEY="CHANGE_ME_long_random_secret"   ; the key your reflector expects
CERT_EMAIL=you@example.org   ; for the auto TLS certificate
DEFAULT_TG=0
MONITOR_TGS=9,240,24016,24020,24021   ; talkgroups you want to hear
UDP_HEARTBEAT_INTERVAL=5
NODE_INFO_FILE=/etc/svxlink/node_info.json
EVENT_HANDLER=/usr/share/svxlink/events.tcl
📥 Want the whole thing? Download a complete, sanitised set of example configs — svxlink.conf, node_info.json, gpio.conf and the module files, all secrets blanked: svxlink-config-example.zip. Unzip into /etc/svxlink/ and change the callsign, reflector host, AUTH_KEY and position to your own.

Other sections to glance at:

Section What it's for
[GLOBAL] Which logics load (LOGICS=SimplexLogic,ReflectorLogic), and the sound-prompt language — set LANG=sv_SE or LANG=en_US.
[SimplexLogic] Your node's own callsign ID, DTMF commands, and which reflector logic it links to.
[Rx1] / [Tx1] The audio devices and PTT/COS for your radio interface (ALSA device, squelch, CTCSS).
[LocationInfo] Optional APRS beacon (position, frequency) — all commented out by default.
⚠ Never publish your real AUTH_KEY, passwords or e-mail. The example above is deliberately blanked. Put your own values in, keep the file readable only by root, and don't paste the real file into forums or chats.

Part 8 — Start it and verify

Enable and start the node, then watch the log:

sudo systemctl enable --now svxlink
sudo systemctl status svxlink
sudo journalctl -u svxlink -f

In the log you should see it connect to the reflector and announce in your chosen language. If someone talks on a monitored talkgroup, you'll hear it (and see it in the log). Ctrl-C stops following the log (the service keeps running).

💡 Setting up a reflector instead of a node? The same build also installed svxreflector — enable that service (sudo systemctl enable --now svxreflector) and configure /etc/svxlink/svxreflector.conf.

Add the web dashboard

Once the node runs, give yourself a browser page to see status and switch talkgroups — install the SvxSpot Dashboard on the same Pi. It reads this same svxlink.conf and controls the node for you.

Troubleshooting

Symptom Check
Can't reach svxnode.local Use the IP from your router instead. On some networks .local (mDNS) is blocked.
SSH "connection refused" SSH wasn't enabled in Imager, or the Pi isn't booted yet — wait, or re-flash with SSH ticked.
No Wi-Fi Wrong Wi-Fi country in Imager, or wrong SSID/password. Re-flash, or use Ethernet.
make fails Usually a missing build package — re-run the apt install line from Part 6, then make again.
Won't connect to the reflector Wrong HOSTS, CALLSIGN or AUTH_KEY — check with the reflector operator. Watch journalctl -u svxlink -f.
No audio / no voice prompts Check LANG in [GLOBAL], and that the sound tarballs unpacked into /usr/share/svxlink/sounds.

See also

  • SvxSpot Dashboard — the browser control panel for this node.
  • chan_svx / chan_svx_sat — bridge an AllStarLink node to a SVXReflector instead.
  • Hamradio — the rest of the digital-voice how-tos.
  • Author: SA7AUX <bjorne@sa7aux.se>. SvxLink © SM0SVX, GNU GPL.