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.

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

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 Utility for directing compilation
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
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 face ceva
vorbis-tools sudo apt install vorbis-tools face ceva
curl sudo apt install curl face ceva
libcurl4-openssl-dev sudo apt install libcurl4-openssl-dev face ceva
git sudo apt install git face ceva
rtl-sdr sudo apt install rtl-sdr face ceva
libcurl4-openssl-dev sudo apt install libcurl4-openssl-dev face ceva
libjsoncpp-dev sudo apt install libjsoncpp-dev face ceva
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

tom@raspberrypi:~ $ sudo apt install g++ cmake make libsigc++-2.0-dev libgsm1-dev libpopt-dev tcl8.5-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

Atenție ! tcl8.5-dev a fost înlocuit cu versiunea 8.6, deci comanda de mai sus se va da:

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
tom@raspberrypi:~ $ sudo useradd -rG audio,plugdev,gpio,dialout svxlink

Descarcă soft-ul de pe Github

Eu folosesc /opt pentru toate activitățile:

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

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:

sudo apt-get install libssl-dev

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

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:

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.

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