Instalare Svxlink
Ghidul ăsta l-am făcut mai mult pentru mine, ca să nu uit. Dar poate fi util și altora.
Condiții inițiale necesare — IMPORTANT !!!
ATENȚIE!!! Pentru realizarea pașilor din acest ghid sunt necesare cunoștințe de operare Linux. Un minim cuprinde:
- Să știi să faci o conexiune printr-un terminal (SSH) și să execuți comenzi în sudo
- Să știi să instalezi pachete
- Să știi să configurezi o conexiune la rețea WiFi
- Să cunoști comenzile de bază (ls, grep, rm etc)
- Să știi să lucrezi cu un editor de tip nano sau vim
Acest ghid pornește de la presupunerea că:
- Ești în posesia unui board Raspberry Pi 4 sau Raspberry Pi Zero W 2.0
- Ai realizat cu succes imaginea sistemului de operare Raspberry Pi OS (64-bit) pe un microSD card; folosește versiunea "Lite", cea care nu are desktop.
- ATENȚIE !!! Sistemul pe 64 biți NU poate fi instalat pe un Raspberry Pi Zero W prima ganerație !!!
- ATENȚIE !!! În orice caz, recomand utilizarea sistemului pe 32 de biți la instalarea pe un Raspberry pi Zero, indiferent de generație !!!
- Plăcuța Raspberry Pi s-a conectat la internet, deci ai configurat conexiunea WiFi
- Ai reușit să te conectezi prin SSH cu un utilizator creat în prelabil când ai construit imaginea software
- ATENȚIE: nu încerca instalarea prin desktop; utilizarea unui terminal e mult mai simplă deoarece permite să faci copy-paste comenzilor de mai jos
- Ai montat nodul RoLink pe care dorești să-l utilizezi (GPIOD sau HIDRAW)
- Ai configurat modulul SA818. ATENȚIE !!! acest pas nu este întotdeauna posibil, poate fi realizat la final, după ce te asiguri că funcționează comunicarea serială cu SA818.
Aceste sunt condiții hardware absolut necesare !!!
SFAT: Nu folosi o imagine cu desktop, este recomandată o imagine "lite" care are doar pachetele strict necesare pentru funcționarea Raspberry. Toți pașii de mai jos se fac în consolă (terminal) realizând copy-paste tuturor comenzilor din ghid. Dacă nu stăpânești bine aceste noțiuni, mai bine roagă un amic să te ajute.
Instalare din surse
Update și upgrade
tom@raspberrypi:~ $ sudo apt-get update
tom@raspberrypi:~ $ sudo apt-get upgrade
Este de indicat să se dezactiveze orice interfață audio în afară de cea utilizată pentru comunicarea RoLink. Pentru inactivarea interfețelor audio HDMI trebuie editat fișierul config.txt din /boot/firmware:
# Enable audio (loads snd_bcm2835)
dtparam=audio=off
și
# Enable DRM VC4 V3D driver
dtoverlay=vc4-kms-v3d,noaudio
max_framebuffers=2
unde noaudio este parametrul important
Descarcă și instalează pachetele
Dependențe:
- libsigc++ 2
- gsm
- popt
- libgcrypt
Pachete recomandate:
- libasound — Pentru suport ALSA
- speex — Îmbunătățirea calității audio pentru Echolink și transceivere remote
- opus — Îmbunătățirea calității audio pentru transceivere remote și SvxReflector
Pachete opționale:
- rtl-sdr — Suport nativ pentru dongle USB RTL2832U DVB-T
- Doxygen — Pentru generarea documentației dezvoltator
- Groff — Pentru generarea paginilor man
Lista completă de pachete necesare
ATENȚIE ! Nu e necesară instalarea separată, se poate face dintr-o singură linie (vezi mai jos). Tabelul e dat spre informare.
| Denumire pachet | Comandă instalare | Ce face |
|---|---|---|
| g++ | sudo apt install g++ |
This is the GNU C++ compiler, a fairly portable optimizing compiler for C++. |
| cmake | sudo apt install cmake |
Cross-platform, open-source make system. |
| make | sudo apt install make |
GNU Make is a utility which controls the generation of executables and other target files. |
| libsigc++-2.0-dev | sudo apt install libsigc++-2.0-dev |
Type-safe Signal Framework for C++ - development files |
| libgsm1-dev | sudo apt install libgsm1-dev |
Development libraries for a GSM speech compressor |
| libpopt-dev | sudo apt install libpopt-dev |
lib for parsing cmdline parameters - development files; more support for arguments |
| tcl8.6-dev | sudo apt install tcl8.6-dev |
Tcl (the Tool Command Language) v8.6 - development files |
| libgcrypt20-dev | sudo apt install libgcrypt20-dev |
libgcrypt contains cryptographic functions |
| libspeex-dev | sudo apt install libspeex-dev |
Speex is an audio codec especially designed for compressing voice at low bit-rates for applications such as voice over IP (VoIP) |
| libasound2-dev | sudo apt install libasound2-dev |
This package contains files required for developing software that makes use of libasound2, the ALSA library |
| libopus-dev | sudo apt install libopus-dev |
The Opus codec is designed for interactive speech and audio transmission over the Internet |
| librtlsdr-dev | sudo apt install librtlsdr-dev |
rtl-sdr is a software defined radio (SDR) receiver software for certain low-cost DVB-T/DAB(+) USB dongles based on the Realtek RTL2832U chip |
| doxygen | sudo apt install doxygen |
Doxygen is a documentation system for C++, C, Objective-C, C#, PHP, Java, Python, IDL, Fortran, VHDL and to some extent D |
| groff | sudo apt install groff |
This package contains optional components of the GNU troff text-formatting system |
| alsa-utils | sudo apt install alsa-utils |
Utilities for configuring and using ALSA |
| vorbis-tools | sudo apt install vorbis-tools |
Several Ogg Vorbis tools. Vezi documentatie. |
| curl | sudo apt install curl |
curl is a command line tool for transferring data with URL syntax |
| libcurl4-openssl-dev | sudo apt install libcurl4-openssl-dev |
Development files and documentation for libcurl (OpenSSL flavour) |
| git | sudo apt install git |
Git is popular version control system designed to handle very large projects with speed and efficiency |
| rtl-sdr | sudo apt install rtl-sdr |
Software defined radio receiver for Realtek RTL2832U (tools) |
| libjsoncpp-dev | sudo apt install libjsoncpp-dev |
Library for reading and writing JSON for C++ (devel files) |
| ladspa-sdk | sudo apt install ladspa-sdk |
LADSPA is a free standard specification for audio effect plugins |
| libogg0 | sudo apt install libogg0 |
Libogg is a library for manipulating ogg bitstreams |
| libogg-dev | sudo apt install libogg-dev |
The libogg-dev package contains the header files and documentation needed to develop applications with libogg |
| libgpiod-dev | sudo apt install libgpiod-dev |
C library for interacting with Linux GPIO device |
| gpiod | sudo apt install gpiod |
Tools for interacting with Linux GPIO character device - binary |
informații suplimentare pentru formatarea tabelelor
Comanda pentru actualizare pachete
ATENȚIE ! tcl8.5-dev a fost înlocuit cu versiunea 8.6, deci comanda de pe site-ul svxlink.org nu mai e actuală. Mai jos am dat comanda actualizată și cu pachetele necesare pentru 1.9.99 (ladspa-sdk libogg0 libogg-dev libgpiod-dev):
tom@raspberrypi:~ $ sudo apt install g++ cmake make libsigc++-2.0-dev libgsm1-dev libpopt-dev tcl8.6-dev libgcrypt20-dev libspeex-dev libasound2-dev libopus-dev librtlsdr-dev doxygen groff alsa-utils vorbis-tools curl libcurl4-openssl-dev git rtl-sdr libcurl4-openssl-dev cmake libjsoncpp-dev ladspa-sdk libogg0 libogg-dev libgpiod-dev
Uneori, este necesară instalarea libssl-dev (vezi mai jos):
tom@raspberrypi:~ $ sudo apt-get install libssl-dev
Crează utilizator svxlink și adaugă la grupuri
tom@raspberrypi:~ $ sudo useradd -rG audio,plugdev,gpio,dialout svxlink
Descarcă soft-ul de pe Github
Eu folosesc /opt ca folder (director) implicit pentru compilare, build, instalare etc:
tom@rpi-yo3iti:~ $ cd /opt
Descarcă de pe GitHub:
tom@raspberrypi:~ $ sudo git clone http://github.com/sm0svx/svxlink.git
tom@raspberrypi:~ $ sudo mkdir svxlink/src/build
tom@raspberrypi:~ $ cd svxlink/src/build
Compilează și instalează
Este foarte important ca instrucțiunile de mai jos să fie date sub sudo:
tom@raspberrypi:~ $ sudo cmake -DUSE_QT=OFF -DCMAKE_INSTALL_PREFIX=/opt/rolink -DSYSCONF_INSTALL_DIR=/opt/rolink -DLOCAL_STATE_DIR=/opt/rolink/var -DWITH_SYSTEMD=ON ..
tom@raspberrypi:~ $ sudo make -j4
Parametrul j4 indică utilizarea a patru core-uri pentru procesul de build (RPi 4 B e quad-core). ATENȚIE ! E posibil ca compilarea să dea erori de openssl, mai precis:
fatal error: 'openssl/bio.h' file not found
În acest caz trebuie instalat separat libssl-core:
tom@raspberrypi:~ $ sudo apt-get install libssl-dev
ATENȚIE ! Pe Raspberry Pi Zero W2/W compilarea dă frecvent erori. Asigură-te că ai o sursă de alimentare suficient de puternică și folosești un sistem de operare pe 32 biți !!!
Se continuă cu:
tom@raspberrypi:~ $ sudo make doc
tom@raspberrypi:~ $ sudo make install
Configurare
Adăugarea căii către executabil
Implicit, sistemul nu recunoaște comanda svxlink.
Ca atare, comanda svxlink trebuie adăugată la PATH:
tom@raspberrypi:~ $ svxlink
-bash: svxlink: command not found
Comanda trebuia adăugată la variabila de mediu PATH în /etc/profile:
if [ "$(id -u)" -eq 0 ]; then
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/rolink/bin"
else
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/opt/rolink/bin"
fi
export PATH
Configurează calea către bibliotecile dinamice
Exemplul de instalare de mai sus arată instalarea adaptată (customized install). În acest caz apar erori la apelarea bibliotecilor dinamice:
tom@raspberrypi:~ $ svxlink
svxlink: error while loading shared libraries: libasynccpp.so.1.6: cannot open shared object file: No such file or directory
Pentru a rula aplicația trebuie adăugată calea către bibliotecile dinamice specifice Svxlink la nivel de sistem, în /etc/ld.so.conf.d. Procedură:
- Se crează un fișier care conține calea către bibliotecile dinamice specifice;
- Se adaugă acest fișier în
/etc/ld.so.conf.d - Se adaugă în fișier calea către directorul care conține bibliotecile specifice Svxlink, în acest caz:
/opt/rolink/lib - Se dă comanda
sudo ldconfig -v
Exemplu:
tom@raspberrypi:~ $ cd /etc/ld.so.conf.d
tom@raspberrypi:~ $ sudo nano svxlink.libs.conf
tom@raspberrypi:~ $ sudo ldconfig -v
Se rulează comanda de actualizare a bibliotecilor de sistem:sudo ldconfig -v
Adăugare fișiere audio
tom@raspberrypi:~ $ cd /opt/rolink/share/svxlink/sounds
tom@raspberrypi:~ $ sudo wget https://github.com/sm0svx/svxlink-sounds-en_US-heather/releases/download/14.08/svxlink-sounds-en_US-heather-16k-13.12.tar.bz2
tom@raspberrypi:~ $ sudo tar xvjf svxlink-sounds-en_US-heather-16k-13.12.tar.bz2
tom@raspberrypi:~ $ sudo ln -s en_US-heather-16k en_US
tom@raspberrypi:~ $ sudo rm -rf svxlink-sounds-en_US-heather-16k-13.12.tar.bz2
Atenție ! Fișierul talk_group.wav nu se regăsește în en_US-heather-16k/Core. Verifică https://github.com/sm0svx/svxlink-sounds-en_US-heather sau copiază-l de pe imaginea nodului YO3ITI implicit !
Configurare svxlink.service
tom@raspberrypi:~ $ cd /lib/systemd/system
tom@raspberrypi:~ $ sudo nano svxlink.service
Mare atenție la parametrii de pornire:
[Service]
EnvironmentFile=/opt/rolink/default/svxlink
PIDFile=${PIDFILE}
ExecStartPre=-/bin/touch ${LOGFILE}
ExecStartPre=-/bin/chown ${RUNASUSER} ${LOGFILE}
ExecStart=/opt/rolink/bin/svxlink --logfile=${LOGFILE} --config=${CFGFILE} --pidfile=${PIDFILE} --runasuser=${RUNASUSER}
ExecReload=/bin/kill -s HUP $MAINPID
Restart=on-failure
TimeoutStartSec=60
TimeoutStopSec=10
#WatchdogSec=
#NotifyAccess=main
LimitCORE=infinity
WorkingDirectory=/opt/rolink/svxlink
Configurare log
Mare atenție la configurarea log-ului; serviciul nu poate porni fără o cale către un log valid. Cum fișierul nu există implicit (la instalarea svxlink), trebuie creat atât directorul log cât și fișierul svxlink.log în /opt/rolink/var/log/svxlink.log:
tom@rpi-yo3iti:~ $ sudo mkdir /opt/rolink/var/log/
tom@rpi-yo3iti:~ $ cd /opt/rolink/var/log/
tom@rpi-yo3iti:~ $ sudo nano svxlink.log
Apoi se configurează SvxLink Systemd unit file prin adăugarea (sau modificarea) liniei care conține informațiile legate de svxlink.log, astfel încât calea să fie cea corectă:
sudo nano /opt/rolink/default/svxlink
#############################################################################
#
# Configuration file for the SvxLink Systemd unit file
#
#############################################################################
# The user to run the SvxLink server as
RUNASUSER=svxlink
# Specify which configuration file to use
CFGFILE=/opt/rolink/svxlink/svxlink.conf
# Where to place the log file
LOGFILE=/opt/rolink/var/log/svxlink.log
# Where to place the PID file
PIDFILE=/run/svxlink.pid
# Disable Alsa zerofill if set to 0 (see manual page)
#ASYNC_AUDIO_ALSA_ZEROFILL=1
Configurarea pentru pornirea automată
După ce au fost parcurși cu success toți pașii de mai sus, se activează pornirea automată a serviciului odată cu pornirea sistemului:
tom@raspberrypi:~ $ sudo systemctl enable svxlink.service
În cazul în care totul este ok, sistemul răspunde cu:
Created symlink /etc/systemd/system/multi-user.target.wants/svxlink.service → /lib/systemd/system/svxlink.service.
Verificarea cu sudo systemctl status svxlink generează următorul mesaj de succes:
tom@raspberrypi:~ $ svxstatus
● svxlink.service - SvxLink repeater control software
Loaded: loaded (/lib/systemd/system/svxlink.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2020-07-19 11:47:22 EEST; 1min 22s ago
Docs: man:svxlink(1)
Process: 471 ExecStartPre=/bin/touch ${LOGFILE} (code=exited, status=0/SUCCESS)
Process: 484 ExecStartPre=/bin/chown ${RUNASUSER} ${LOGFILE} (code=exited, status=0/SUCCESS)
Main PID: 488 (svxlink)
Tasks: 1 (limit: 4915)
Memory: 12.8M
CGroup: /system.slice/svxlink.service
└─488 /opt/rolink/bin/svxlink --logfile=/opt/rolink/var/log/svxlink.log --config=/opt/rolink/svxlink/svxlink.conf --pidfile=/ru
Jul 19 11:47:22 raspberrypi systemd[1]: Starting SvxLink repeater control software...
Jul 19 11:47:22 raspberrypi systemd[1]: Started SvxLink repeater control software.
SUCCES !
Odată cu această verificare se poate considera că instalarea și configurarea svxlink au fost încununate de success. Pasul următor este modificarea fișierului de configurare svxlink.conf. Configurarea svxlink este diferită în funcție de tipul de nod:
- Configurare svxlink.conf pentru GPIOD
- Configurare svxlink.conf pentru HIDRAW
Pentru gestiunea mai ușoară, recomand crearea unor comenzi-alias în .bash_aliases. Eu folosesc:
alias svxlog="tail -f /opt/rolink/var/log/svxlink.log"
alias svxconf="sudo nano /opt/rolink/svxlink/svxlink.conf"
alias svxstart="sudo systemctl start svxlink"
alias svxstop="sudo systemctl stop svxlink"
alias svxstatus="sudo systemctl status svxlink"
alias svxrestart="sudo systemctl restart svxlink"
Configurare svxlink.conf pentru GPIOD
Informațiile necesare se găsesc la acest link.
Configurare svxlink.conf pentru HIDRAW
Această secțiune se referă la nodurile construite cu sistem audio bazat pe CM108. Informațiile necesare se găsesc la acest link.
Erori
Erori în log-uri
Eroarea de mai jos nu este critică.
Apr 17 14:09:13 raspberrypi svxlink[970]: Libgcrypt warning: missing initialization - please fix the application
Alte erori necritice
*** ERROR[SimplexLogic, module EchoLink]: Unable to handle event "EchoLink::remote_timeout"
/opt/rolink/share/svxlink/events.tcl in logic SimplexLogic failed setting variable "EchoLink::num_connected_stations=0": can't set "EchoLink::num_connected_stations": parent namespace doesn't exist
2025-07-05 20:48:19: *** ERROR[SimplexLogic, module EchoLink]: Failed to load event script
2025-07-05 20:48:19: can't read "::logic_type": no such variable
2025-07-05 20:48:19: while executing
2025-07-05 20:48:19: "sourceTclWithOverrides "${::logic_type}LogicType.tcl""
2025-07-05 20:48:19: (file "/opt/rolink/share/svxlink/events.tcl" line 234)
Link-uri externe
- How To Use Systemctl to Manage Systemd Services and Units
- Systemd service debugging tips
- How to set the environmental variable LD_LIBRARY_PATH in linux
- Changing linked library for a given executable
- Shared Libraries
- Site-ul proiectului svxlink
- informații suplimentare pentru formatarea tabelelor
- Installation instruction for Raspbian