Hamradio/svxlink node
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 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.
- Easiest: install Raspberry Pi Imager (it downloads the OS for you): https://www.raspberrypi.com/software/
- Imager runs on Windows, macOS and Linux.
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:
- Choose Device: your Pi model.
- Choose OS: Raspberry Pi OS (other) → Raspberry Pi OS Lite (64-bit).
- Choose Storage: your SD card.
- 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.
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
svxnodeand 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
Part 6 — Install SvxLink
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
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. |
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).
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.