Instalare Svxlink

De la YO3ITI
Sari la navigare Sari la căutare

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
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ă:

  1. Se crează un fișier care conține calea către bibliotecile dinamice specifice;
  2. Se adaugă acest fișier în /etc/ld.so.conf.d
  3. Se adaugă în fișier calea către directorul care conține bibliotecile specifice Svxlink, în acest caz: /opt/rolink/lib
  4. 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:

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)