SVXlink klient - instalacja PORADNIK wg MARCIN M0IQF

ŁukaszSP7ALM
Posty: 21
Rejestracja: 10 gru 2025, 18:16

SVXlink klient - instalacja PORADNIK wg MARCIN M0IQF

Post autor: ŁukaszSP7ALM »

svxlink-logo.png
svxlink-logo.png (19.1 KiB) Przejrzano 797 razy
SVXLink od podstaw – to moja próba wyjaśnienia krok po kroku procesu przygotowania systemu oraz instalacji programu SVXLink. Materiał skierowany jest do osób początkujących, które chcą samodzielnie zbudować i skonfigurować własny system.

Warto pamiętać, że większość sieci oferuje gotowe obrazy systemu – i jak najbardziej polecam skorzystanie z takiego rozwiązania, zwłaszcza na początek.

Niemniej jednak uważam, że samodzielne przejście przez cały proces instalacji i konfiguracji pozwala lepiej zrozumieć zasadę działania SVXLinka, a przy tym daje dużą satysfakcję z faktu, że udało się wszystko zbudować własnymi siłami.

Na tej stronie znajdziesz wiele opisów różnych konfiguracji sprzętowych, ale jest jeden wspólny mianownik — Raspberry Pi Zero lub Raspberry Pi Zero W 2. Czy to oznacza, że tylko te modele są wspierane?
Nie! To po prostu najtańsza i najbardziej dostępna opcja.

Osobiście moim ulubionym modelem jest Raspberry Pi 3A+ — ma ten sam procesor co wersja 3B+, połowę pamięci RAM (co w tym zastosowaniu nie przeszkadza), a co najważniejsze — można je zasilać podobnie jak Raspberry Pi Zero W, np. bezpośrednio z gniazda zapalniczki 5 V. Dlaczego to takie ważne? Bo wersje 3B+ i nowsze często „marudzą”, gdy napięcie spadnie poniżej 5.1 V.

Ostatecznie wybór modelu Raspberry Pi to indywidualna sprawa i zależy głównie od tego, ile chcemy w ten projekt zainwestować. Ja sam używam Raspberry Pi 1 i Raspberry Pi Zero W — więc naprawdę da się to uruchomić praktycznie na wszystkim.
A że jestem wyznawcą religii BIEDA-EDYSZON, to wiadomo – im taniej, tym lepiej. 😄

Warto też wspomnieć, że Raspberry Pi to nie jedyna platforma, na której można zbudować hotspot. Coraz większą popularność zyskują Orange Pi, głównie dzięki wbudowanej karcie dźwiękowej, co pozwala stworzyć bardziej kompaktowe rozwiązanie.



Opisywany tutaj przykład będzie oparty na Raspberry Pi Zero W 2 z nakładkową kartą dźwiękową ReSpeaker. Jest to ciekawa alternatywa dla popularnego układu CM108, a przy tym nie wymaga lutowania ani stosowania adapterów z microUSB na USB-A, co w przypadku Raspberry Pi Zero znacząco upraszcza montaż.
Dodatkowo ReSpeaker oferuje kilka interesujących możliwości — ale o tym opowiem w dalszej części.

Cały opis postaram się podzielić na sekcje tematyczne: przygotowanie systemu, instalacja, konfiguracja, podłączenie radia, instalacja dashboardu, instalacja pluginów i kilka innych.
Mam nadzieję, że taki podział ułatwi zrozumienie całości i że ten materiał okaże się dla kogoś przydatny.



Należy na wstępie wyjaśnić że instalacja svxlink niesię za soba automatyczne posiadanie svxreflector. Svxlink to aplikacja klient która służy do połączenia naszego hotspot, gateway, przemiennik z svxreflektorem który instaluje się automatycznie i jest integralną częścią całego pakietu SVX.

Zadaniem SVXreflektora jest umożliwienie klientom SVXlinkom połączenie się w sieć i tymsamym umożliwia komunikację pomiędzy sobą. A nie zawsze tak było ponieważ svxlink przez wiele lat bym głównie kontrolerem przemiennika umożliwiającym połaczenie tylko z siecią EchoLink, potem doszła obsługa sieci FreeRadioNetwork i obsługa SVXreflektor. Dlatego przypominam że svxlink i svxreflektor to jedno i każdy z tych elementów składowych ma własny plik konfiguracyjny, w przypadku svxlink jest to plik svxlink.conf a w przypadku svxreflektor ma plik svxreflector.conf



Tak więc jest to już takie ukierunkowanie że każdy z Was posiadający hotspot, przemiennik może być budowniczym własnej sieci bo ma już wbudowany SvxReflektor i jedyne co Was przed tym broni to potrzeba i możliwości zintegrowania się z pewną grupą ludzi. Wielu ludzi myśli że to jakaś kosmiczna technologia która wymaga jakiś wybitnych informatycznych umiejętności - otóż tak nie jest, i jedyne co odróżnia serwer od serwera jest jego DASHBOARD i pewne nazwijmy to modyfikacje i dodatki bez których można bez problemu pracować, a ich istnienie jest podyktowane unowoczesnieniem lub wzbogaceniem SvxReflektor o funkcje których on nie posiada w oryginale. Kończąc wątek serwera SVXreflektor to należ ywspomnieć że może być cieżko z dashboard do reflektor poniewaź istniejące publicznie albo sa toporne w instalacji , albo trochę już przedawnione , ale i na to znajdzie się rozwiązanie.



PROSZĘ NIE TRAKTOWAĆ TEGO OPISU JAKO JEDYNEGO WŁAŚCIWEGO - To moja mniej lub bardziej udana próba wyjaśnienia co i jak MOŻNA i to często wbrew elementarnej logice i jakimkolwiek zasadom elektroniki.

Traktujcie to bardziej jak DROGOWSKAZ

Cały ten opis powstał podczas budowania PiHOT 2.0 - svxlink hotspot za mniej niż 150PLN - i zaznaczam że wszelkie testy wykonywałem na Naszym testowym serwerze HUBlink ( http://portal.d4a.uk/ )





" Podczas realizacji tego materiału nie ucierpiał żaden administrator."



Wprowadzenie
Jak już zostało wspomniane, opis ten będzie oparty na Raspberry Pi Zero W 2



Oczywiście jest to bazowe rozwiązanie dlatego skupimy się na samej instalacji i konfiguracji i celowo nie bede wspominał o takich dodatkach jak moduły GPS, ekrany OLED czy dodatkowe moduły radiowe jak LoRa czy MMDVM.

Tu poprzestanę tylko na warstwie podstawowej aby nie zrobić tego opisu zbyt zawiłym.



Dlaczego RaspberryPi ? Bo to mój wybór ale może być dosłownie cokolwiek co pozwoli na instalację systemu Linux. Platformy takie jak RaspberryPi czy OrangePi lub inne zdobyły popularność dzięki posiadaniu złącza GPIO które pozwala nam na wysterowanie nadawania w radiu PTT i zwrotnie danie systemowi informacji kiedy radio coś odbiera. W tym celu potrzebny będzie nam jakiś interfejs pośredniczący dedykowany pod konkretne radia. W zalezności jakimi sygnałami dysponuje radio taki albo kupujemy lub budujemy. Nalezy pamietać że niektóre radia staruje się poprzez zwarcie do masy lub podają jakieś napięcie i nie zawsze jest to napięcie pozwalające na podłaczenie bezpośrednio pod RaspberryPi - co z resztą nie jest polecane praktycznie nigdy nie nalezy robić. Zawsze warto użyć albo tranzystorów do wysterowania GPIO lub w najprostrzej wersji przekaźnika jednokanałowego - wszystk ojest podyktowane jakie radio podłączamy.






Przygotowanie systemu to procedura samodzielnej instalacji systemu operacyjnego, i programu svxlink. Jest ona skierowana dla ludzi chcących samemu przejśc proces instalacji, kompilacji i konfiguracji



Na naszym komputerze instalujemy sobie program RaspberryPi Imager który mozna pobrać w tej strony - https://www.raspberrypi.com/software/

Wkładamy nasza kartę SD do komputera i po uruchmieniu programu pierwsze pole jakie mamy do wyboru rodzaj urządzenia, w moim przypadku RaspberryPi Zero 2W
SVXlink-od-podstaw_01.png
SVXlink-od-podstaw_01.png (71.1 KiB) Przejrzano 748 razy


Kolejnym krokiem jest wybór systemu operacyjnego. I tu pierwsze ostrzeżenie - NIE WYBIERAMY NAJNOWSZEJ WERSJI TRIXI, idziemy do OTHER

SVXlink-od-podstaw_02.png
SVXlink-od-podstaw_02.png (97.51 KiB) Przejrzano 748 razy


i wybieramy RaspberryPi OS ( Legacy, 32bit) LITE BOOKWORM - wersja LITE nie posiada pulpitu i jest idealna i sprawdzona do tego rozwiązania
SVXlink-od-podstaw_03.png
SVXlink-od-podstaw_03.png (102.22 KiB) Przejrzano 748 razy
Po wybraniu systemu i nastepnie karty na jakiem mamy zapisać nasz system możemy przejsc do NEXT w celu zapisu.
Wyskoczy nam okno z zapytaniem czy chcemy dokonac personalizacji naszego obrazu. Klikamy Edit Settings
SVXlink-od-podstaw_04.png
SVXlink-od-podstaw_04.png (57.19 KiB) Przejrzano 748 razy







W tym oknie możemy wybrac nazwę host, podać username i password które będzie używane do logowania poprzez SSH, dodatkowo wypełniamy pole naszej sieci WIFI - nazwe i hasło. Ponadto w zakładce SERVICE warto sprawdzić czy jest tam aktywna opcja SSH server.
SVXlink-od-podstaw_05.png
SVXlink-od-podstaw_05.png (113.51 KiB) Przejrzano 746 razy



Po dokonaniu wszystkich ustawnień możemu przejsc do "wypalenia" naszego obrazu na karcie SD
SVXlink-od-podstaw_06.png
SVXlink-od-podstaw_06.png (47.54 KiB) Przejrzano 746 razy





Po wgraniu systemu na karte i uruchomieniu RaspberryPi, jakimś czasie w naszej sieci pojawi się nasz fmnode. Pierwsze uruchomienie może troche trwać dlatego prosze się uzbroic w cierpliwość i jak to powiada pewien klasyk " Daj temu poleżeć"





W celu odnalezienia naszego RaspberryPi w naszej sieci lokalnej albo użyjmy skanerów sieci lokalnej albo zalogować się trzeba do routera czy innego kontrolera sieci. Znając adres IP możemy podjąc próbe połaczenia sie z nim poprzez ssh - w przypadku posiadaczy systemu Windows może być przydatny program Putty a potem WinSCP w celu wgrywania plików.




Instalacja SVXlink


Zanim przechodzimy do samej instalacji, to pierwszą aplikacją jaką instaluje jest Midnight Commander , pokolenie pamietające Norton Commander poczuje delikatną nostalgię :)

sudo apt install mc
SVXlink-od-podstaw_08.png
SVXlink-od-podstaw_08.png (79.08 KiB) Przejrzano 746 razy

Sam proces instalacji svxlink można przejść na dwa sposoby, i dlaczego zawsze wybiera się ten trudniejszy ?

Otóz można zainstalować svxlink z repozytoriu komenda :

sudo apt install svxlink-server
SVXlink-od-podstaw_09.png
SVXlink-od-podstaw_09.png (119.72 KiB) Przejrzano 746 razy


W dalszej czesci widzimy jakie pliki zalezności będą się instalować
SVXlink-od-podstaw_10.png
SVXlink-od-podstaw_10.png (109.77 KiB) Przejrzano 746 razy
Pomijając fakt że w repozytorium jest starsza wersja SvxLink ( co może być plusem ) to brakuje w niej ważnego elementu w postaci wsparcia dla biblioteki GPIOD, a to zmuszać nas będzie to starszej i moim zdaniem mniej elastycznej metody zarządzania GPIO. To jest chyba główny powód dlaczego przechodzimy proces instalacji SvxLink instalując go ze źródła co jest bardziej czasochłonne.







UWAGA !!! - opis nie jest optymalny i zautomatyzowany i jest to celowy zabieg aby wykazać jakie sa pliki współpracujące z samym svxlink, mam nadzieję że pozwoli to zrozumieć pewne zależności i kierunek gdzie można coś zmodyfikować lub zrozumieć co gdzie trzeba zmienić jeśli coś nie działa.


W terminalu najpierw wydajemy komendy aktualizacji systemu

Kod: Zaznacz cały

sudo apt update 
sudo apt upgrade -y
Następnie instalujemy niezbędne "zależności" programy niezbędne do prawidłowej kompilacji svxlink.

Kod: Zaznacz cały

sudo apt install -y build-essential git alsa-utils mc
sudo apt install -y libasound2-dev g++ gcc make cmake groff gzip doxygen tar tcl
sudo apt install -y libspeex-dev libspeexdsp-dev libopus-dev libvorbis-dev
sudo apt install -y libpopt-dev libsigc++-2.0-dev python3-dev python3-pip
sudo apt install -y libgcrypt20-dev libgsm1-dev swh-plugins tap-plugins ladspa-sdk
sudo apt install -y librtlsdr-dev libjsoncpp-dev nodejs node-ws dos2unix
sudo apt install -y bc tcl-dev libgpiod2 libgpiod-dev gpiod gawk lynx curl rtl-sdr
sudo apt install -y libcurl4-openssl-dev curl libjson-perl libwww-perl net-tools sqlite3
sudo apt install -y sox libsox-dev curl python3 python3-dev python3-numpy python3-pip python3-suds
sudo apt install -y libssl-dev
 
Jeśli chcemy na tym urządzeniu zainstalować także dashboard to musimy przygotować dla niego środowisko pracy

Kod: Zaznacz cały

sudo apt install -y apache2 php libapache2-mod-php php-mbstring php-cgi php-common php-curl php-sqlite3 apache2-utils
 
Kolejnym krokiem jest utworzenie użytkownika svxlink ponieważ jest on wymagany do instalacji. W późniejszym etapie możecie sobie sami zmienić ustawienia, lecz na etapie instalacji taki użytkownik powinien być istniejący.

W przypadku RaspberryPi komenda jest taka:

Kod: Zaznacz cały

sudo /usr/sbin/useradd -c "svxlink user" -G audio,dialout,daemon,plugdev,gpio -d /home/svxlink -m -s /sbin/nologin svxlink
  
Można powiedzieć że jeśli wszystkie wymienione kroki zakończyły się sukcesem i nie wystąpiły jakieś problemy z ich instalacją to możemy przejść do instalacji samego svxlink.



Oto spis komend prowadzących nas przez proces pobrania, kompilacji i instalacji svxlink / svxreflector

Kod: Zaznacz cały

sudo -s
cd /opt
mkdir src
cd src
git clone http://github.com/sm0svx/svxlink.git
mkdir svxlink/src/build
cd svxlink/src/build
cmake -DUSE_QT=OFF -DCMAKE_INSTALL_PREFIX=/usr -DSYSCONF_INSTALL_DIR=/etc -DLOCAL_STATE_DIR=/var -DCMAKE_BUILD_TYPE=Release ..
   


Ważne aby na tym etapie obserwować czy przypadkiem nie mamy komunkatu o błedzie lub że brakuje jakiegoś elementu

Kod: Zaznacz cały

make
make install
/usr/sbin/ldconfig
   


Musimy jeszcze utworzyć dwa pliki :

1. plik autostartu

Kod: Zaznacz cały

sudo nano /lib/systemd/system/svxlink.service
   
i wklejamy :

Kod: Zaznacz cały

[Unit]
Description=SvxLink repeater control software
Documentation=man:svxlink(1)
After=network.target remote-fs.target syslog.target time.target
After=rc-local.service sound.target

[Service]
EnvironmentFile=/etc/default/svxlink
PIDFile=${PIDFILE}
ExecStartPre=/bin/mkdir -p /var/run/svxlink
ExecStartPre=/bin/chown ${RUNASUSER}:${RUNASUSER} /var/run/svxlink
ExecStartPre=/bin/chmod 775 /var/run/svxlink
ExecStartPre=-/bin/touch ${LOGFILE}
ExecStartPre=-/bin/chown ${RUNASUSER} ${LOGFILE}
ExecStart=/usr/bin/svxlink --logfile=${LOGFILE} --config=${CFGFILE} --pidfile=${PIDFILE} --runasuser=${RUNASUSER}
ExecReload=/bin/kill -s HUP $MAINPID
Restart=on-failure
TimeoutStartSec=60
TimeoutStopSec=10
#WatchdogSec=@SVX_WatchdogSec@
#NotifyAccess=main
LimitCORE=infinity
WorkingDirectory=/etc/svxlink

[Install]
WantedBy=multi-user.target
 

 

    
następnie

Kod: Zaznacz cały

  
  sudo nano /etc/default/svxlink 
   
i wklejamy

Kod: Zaznacz cały

# This file copy to /etc/defualt/

#
# Enable Alsa zerofill if set to 1 (see manual page)
#ASYNC_AUDIO_ALSA_ZEROFILL=0

############################################################################
#
# 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=/etc/svxlink/svxlink.conf

# Where to place the log file
LOGFILE=/var/log/svxlink.log

# Where to place the PID file
PIDFILE=/run/svxlink.pid

# Enable Alsa zerofill if set to 1 (see manual page)
#ASYNC_AUDIO_ALSA_ZEROFILL=0


   
Teraz możemy wydawać komendy :

sudo systemctl status svxlink
sudo systemctl stop svxlink
sudo systemctl start svxlink
sudo systemctl restart svxlink




Zanim zakończymy warto dla ułatwienia sobie życia pobrać prawie gotowy plik konfiguracyjny przygotowany pod RaspberryPi i sterowanie za pomoca GPIO - pozwoli mieć to punkt wyjściowy na start i do porównania z oryginałem na przyszłość.

Najpierw wykonajmy kopię zapasowa oryginalnego pliku konfiguracyjnego komendą :

Kod: Zaznacz cały

sudo cp /etc/svxlink/svxlink.conf /etc/svxlink/svxlink.conf.bak
  
a następnie moge zasugerowac pobranie prostego pliku konfiguracyjnego pod simplex hotspot

Kod: Zaznacz cały

sudo wget -O /etc/svxlink/svxlink.conf https://d4a.uk/git/svx/svxlink.conf
  
Edycję i konfigurację opisze w dalszej cześci.







Dlatego już w tym momencie polecam każdemu po przejściu procesu kompilacji zrobić sobie kopie karty SD - aby kolejny raz już tego nie robić i nie tracić kolejnych godzin.




Dashboard


Dashboard (panel sterowania) jest wizualną nakładką graficzną (GUI), która znacząco ułatwia zarządzanie i obsługę naszego hotspotu SVXLink. W przeciwieństwie do podstawowej konfiguracji tekstowej, dashboard umożliwia intuicyjną kontrolę nad systemem.

Chociaż niewiele tego typu paneli jest publicznie dostępnych, w tym przewodniku skupimy się na procesie instalacji rozwiązania dostępnego na platformie GitHub:

Adres URL projektu: https://github.com/f5vmr/SVXLink-Dash-V2


Należy podkreślić, że prezentowana wersja jest propozycją startową, która nie jest związana z żadną konkretną siecią radiową. Oznacza to pełną swobodę w jej używaniu, testowaniu i dowolnym modyfikowaniu pod własne potrzeby.

Dashboard jest elementem wymiennym i dynamicznie rozwijanym. Społeczność krótkofalowców, zwłaszcza użytkownicy Linuxa, aktywnie wspiera ideę Open Source Software (oprogramowania otwartoźródłowego). Dzięki temu, inni entuzjaści dzielą się własnymi modyfikacjami i wariacjami, które powstają z pasji do technologii i chęci dzielenia się wiedzą, a nie dla zysków komercyjnych.



Zanim rozpoczniemy instalacje musze wspomnieć że prawie każdy dashboard wymaga dostępu do pewnych plików aby mógł działać poprawnie.



/var/log/svxlink.log - to plik log programu svxlink będacy podstawowym źródłem informacji o tym co się dzieje aby móc nam to pokazać na dashboard. Czasami niektóre projekty ogarniają plik /var/log/svxlink a nie /var/log/svxlink.log ale to wynika chyba z pewnych praktyk deweloperów.

/etc/svxlink/svxlink.conf - plik konfiguracyjny programu svxlink w którym są podane pewne dane zmienne jak nasz znak, ustawienie audio czy uruchomione moduły. Dane te są wyświetlane na dashboard.

/tmp/dtmf_svx - ten plik głównie występował w dashboard autorstwa Waldka SP2ONG i służy to wymiany informacji dashboard <-> svxlink, jaki DTMF ma być wstrzykniety do programu svxlink w ramach wybieranego za pomoca wirtualnej klawiatury DTMF czy przycisków pamięci

/var/run/svxlink/dtmf_svx - ten plik w zastępstwie za /tmp/dtmf_svx został wprowadzony przy okazji modyfikacji "Svxlink Dashboard by SP2ONG" - i tego pliku się teraz będziemy się go trzymać.









Proces instalacji
Rozpoczynamy od wykasowania zawartości katalogu html. A to że coś mamy można łatwo stwierdzić odwiedzając adres ip naszej maliny. Jest to standardowy plik pozostały po instalacji naszego serwera www.



Aby on nie kolidował z nowym dashboard trzeba wykasować zawartość katalogu /var/www/html/ - choć autor podaje aby wykasować cały katalog.

Kod: Zaznacz cały

sudo rm -r /var/www/html
Teraz zgodnie z opisem na stronie pobieramy dashboard

Kod: Zaznacz cały

sudo git clone https://github.com/f5vmr/SVXLink-Dash-V2 /var/www/html
 
Po wydaniu tej komendy naszym oczom ukazać się powinien taki widok.
SVXlink-od-podstaw_22.png
SVXlink-od-podstaw_22.png (105.98 KiB) Przejrzano 740 razy


Niestety to nie koniec , ponieważ teraz trzeba nadać uprawnienia aby wszystkie elementy panelu sterowania działały. Zgodnie z opisem na github musimy edytować plik konfiguracyjny apache2

Kod: Zaznacz cały

sudo nano /etc/apache2/envvars
Szukamy fragmentu zaznaczonego
SVXlink-od-podstaw_23.png
SVXlink-od-podstaw_23.png (94.83 KiB) Przejrzano 740 razy


i podmieniamy www-data na svxlink w obu linijkach
SVXlink-od-podstaw_24.png
SVXlink-od-podstaw_24.png (94.79 KiB) Przejrzano 740 razy


Teraz zapisyjemy CTRL+X a nastepnie Y.



Następnie musimu edytować plik /usr/lib/systemd/system/apache2.service

Kod: Zaznacz cały

sudo nano /usr/lib/systemd/system/apache2.service
SVXlink-od-podstaw_26.png
SVXlink-od-podstaw_26.png (79.19 KiB) Przejrzano 739 razy
Po edycji odszukujemy linijkę "PrivateTmp=true" i podmieniamy na "PrivateTmp=false"
SVXlink-od-podstaw_25.png
SVXlink-od-podstaw_25.png (77.3 KiB) Przejrzano 739 razy
Następnie zapisujemy CTRL+X oraz Y dla potwierdzenia.



teraz już finalnie możemy przeładować usługe serwera www komendą

Kod: Zaznacz cały

sudo systemctl daemon-reload && sudo systemctl restart apache2
 


Tu należy wykonać jeszcze komendę sudo ./upgrade.sh - lecz ja pozostawiam to dla potencjalnego posiadacza tego obrazu - TAK poniżej bedzie link do pobrania obrazu z na RaspberryPi dokładnie z tego punktu . Ponieważ podczas wykonywania tej komendy trzeba podać login i hasło jakim bedzie zabezpieczony nasz dashboard przed nieautoryzowanym dostępem.



Przestrzagam !!! - aby nikt nie wpadł na pomysł że skoro dashboard ma login hasło to moge go wystawić na publiczny widok - możecie się bardzo zdziwić jak słabe jest to zabezpieczenie i ktoś zacznie Wam mieszac w konfiguracji. Nigdy, przenigdy , nigdy nie wystawiamy takich rozwiązań na publiczny dostęp - a jak chcemy mieć sami dostep z zewnątrz to polecam VPN ( zero-tier, tailscale )





Ja osobiście polecam teraz wykonać restart RaspberryPi a po poprawnym ruchomieniu wykonac kopie zapasową naszego obrazu.

Teraz zanim cokolwiek dalej zrobisz prosze wyjmij kartę z RaspberryPi i zrób kopię zapasową, oczywiście najpierw warto zamknąc system komendą sudo shutdown now




Alternatywny Dashboard
Do pobrania w sekcji Obrazy.
W najbliższym czasie pojawi się opis dashboardu Marcina M0IQF :)
ODPOWIEDZ