SVXLINK Compilation et installation sur Raspberry PI

Introduction

Guy ON4MS, en cherchant une source de comparaison pour calibrer son baromètre s’est orienté vers le système METAR (https://www.aviationweather.gov/metar). Ce système permet de connaître l’info météo pour l’aviation et ce de différents aéroports. Il en existe bien un suffisamment proche de son QTH pour répondre au besoin. En bon radioamateur, il s’intéresse également aux modes numériques. Au croisement de ces deux pôles d'intérêts, le programme SVXLINK avec notamment son module MetarInfo, présente des possibilités intéressantes pour consulter ces infos météo via la radio.

SVXLINK est un système de services vocaux à usage général qui, lorsqu'il est connecté à un émetteur-récepteur, peut agir comme un relais EchoLink et peut également fonctionner sur un canal simplex. On pourrait l'appeler un système d'exploitation radio. SVXLINK est très extensible et modulaire. Les services vocaux sont mis en œuvre sous forme de modules isolés. Ainsi il y a un système d'aide, un « perroquet », EchoLink, un relais Dtmf, VoiceMail, un PropagationMonitor qui annonce les avertissements de propagation de dxmaps.com, etc.

Comme l’interface de programmation permettant d’obtenir l’info METAR a changé il y a quelques temps, l’ancienne version de SVXLINK n’arrive plus à lire et transmettre ces données. Il a donc fallu procéder à une mise-à-jour. Ce qui n’est pas forcément évident… En effet, les différentes distributions de Linux pour Raspberry n’ont pas encore été mises à jour avec la dernière mouture de ces modules.

Dans une tentative d’aider Guy, je me suis attelé à compiler le programme à partir du code source disponible sur Github.

Documentation de la procédure de compilation et d’installation

Sur le site officiel de SVXLINK il y a deux pages décrivant la procédure de compilation et d’installation, dont une spécifiquement pour Raspberry PI. Seulement, cette fiche-cuisine mentionne quelques commandes qui font que cela ne fonctionne pas. Sans doute parce que la recette date d’il y a déjà quelques années. Cependant, elle mentionne bien quelques astuces utiles.

Cet article

Dans cet article, je décrirai la procédure que j’ai suivie et qui est une compilation de commandes trouvées dans les deux pages susmentionnées. Notez cependant qu’il s’agit ici d’une procédure partant d’un système d’exploitation Raspbian vierge sans que le logiciel SVXLINK y ait été installé au préalable. Si vous disposez déjà d’une installation SVXLINK, il s’agit de faire une sauvegarde de tous vos fichiers de configuration existants. En effet, bien que la procédure de compilation et d’installation soit sensé de ne pas modifier votre configuration, je ne peux vous le garantir. Un accident est vite arrivé…

Outillage

Avant d’entamer la compilation, il s’agit de mettre à jour son Raspberry PI et d’y installer les outils nécessaires au bon déroulement de la procédure de compilation et d’installation.

J’utilise Raspbian Jessie et comme d’habitude avant d’entamer un projet je mets à jour le système (conseil que vous retrouverez dans presque chaque article sur le Raspberry PI…) :

SVXLINK Compileren en installeren op Raspberry PI

Inleiding

Guy ON4MS was op zoek naar een vergelijkingsbasis voor het kalibreren van zijn barometer en heeft daarvoor het METAR (https://www.aviationweather.gov/metar) systeem gebruikt. Dit systeem publiceert weersinformatie van verscheidene luchthavens ten behoeve van de luchtvaart. Er is altijd wel één luchthaven dicht genoeg bij zijn QTH om geschikt te voor vergelijking. Als goede radioamateur, interesseert Guy zich ook aan de digitale modes. Op de kruising van die twee interesses biedt het programma SVXLINK met zijn MetarInfo module interessante mogelijkheden om weersinformatie via radio op te vragen.

SVXLINK is een systeem voor algemene spraakdiensten die, aangesloten op een zendontvanger, kan fungeren als een EchoLink relais en ook kan werken op een simplexkanaal. We kunnen het een radiobesturingssysteem noemen. SVXLINK is zeer schaalbaar en modulair. De spraakdiensten worden geïmplementeerd in de vorm van geïsoleerde modules. Zo is er een hulpsysteem, een "papegaai", EchoLink, een Dtmf relais, VoiceMail, een PropagationMonitor die de propagatiewaarschuwingen van dxmaps.com aankondigt, etc.

Nu is de programmatie-interface om METAR informatie op te vragen een tijdje geleden gewijzigd en de oude versie van SVXLINK kan deze gegevens niet meer lezen of doorzenden. Een update is dus noodzakelijk. Maar dat is niet altijd evident… De verschillende distributies van Linux voor Raspberry zijn inderdaad nog niet bijgewerkt met de laatste versie van deze modules.

Om Guy proberen te helpen, ben ik het programma gaan compileren, vertrekkende van de source code op Github.

Documentatie van de procedure voor het compileren en installeren

Op de officiële website van SVXLINK zijn er twee pagina’s die de procedure voor het compileren en installeren beschrijven. Daarvan is er één specifiek voor Raspberry PI. Maar dit recept vermeldt enkele opdrachtregels die maken dat het niet werkt. Waarschijnlijk omdat het recept dateert van enkele jaren geleden. Er worden echter wel enkele nuttige tips gegeven.

Dit artikel

In dit artikel zal ik de procedure beschrijven die ik heb gevolgd. Het is een compilatie van opdrachtregels die ik op hogervermelde pagina’s heb gevonden. Noteer wel dat het hier gaat om een procedure die vertrekt van een nieuw geïnstalleerde versie van Raspbian zonder dat het SVXLINK programma er tevoren werd op geïnstalleerd. Als u al een installatie van SVXLINK heeft, moet u eerst een back-up nemen van al uw bestaande configuratiebestanden. Want hoewel de compilatie- en installatieprocedure geacht wordt uw configuratie niet te wijzigen, kan ik u dat niet garanderen. En een ongeluk is gauw gebeurd…

Gereedschap

Vooraleer aan de compilatie te beginnen is het aangewezen om uw Raspberry PI up-to-date te brengen. U moet er ook de tools nodig voor de compilatie- en installatieprocedure op installeren.

Ik gebruik Raspbian Jessie en zoals gewoonlijk vooraleer aan een project te beginnen, werk ik het systeem bij met de laatste updates (goede raad die u in ongeveer elk artikel over Raspberry PI zal vinden…):

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo reboot

Ensuite, il faut installer les outils manquant. J’ai compilé la liste de tout ce qui est nécessaire en tâtant. En effet, la documentation mentionne bien les outils nécessaires, mais ne nomme pas de manière explicite les packages tels que apt-get les connait. Vous pouvez installer en vrac l’ensemble des outils par la commande suivante :

Vervolgens moeten de ontbrekende tools worden geïnstalleerd. Ik heb met vallen en opstaan een lijst gemaakt met alles wat nodig is. Het is inderdaad zo dat de documentatie wel alle nodige tools vermeld, maar niet expliciet de naam van de packages zoals apt-get die kent. U kunt alles in één keer installeren met de volgende opdrachtregel:

sudo apt-get install alsa-utils cmake doxygen groff libasound-dev libasound2 libcurl4-gnutls-dev libgcrypt-dev libgcrypt20 libgsm1-dev libopus-dev libpopt-dev libpopt0 libqt4-dev librtlsdr-dev libsigc++ libsigc++-dev libspeex-dev opus-tools rtl-sdr speex tcl tcl-dev

Si jamais vous n’auriez pas installé le compilateur C (peu probable car il vient par défaut avec le système), il suffit de rajouter le package gcc à la commande précédente.

Notez que certains de ces packages, sans doute, sont déjà installés. Ce n’est pas grave, vous verrez un message d’avertissement pour chaque package déjà installé indiquant la version déjà installée (qui sera la plus récente du fait que l’upgrade qui a été fait au tout début de cette explication les aura mis à jour) :

Mocht u geen C compiler hebben geïnstalleerd (niet erg waarschijnlijk, want die komt per default met het systeem), dan volstaat het het gcc package toe te voegen in de bovenstaande opdrachtregel.

Noteer dat sommige van deze packages waarschijnlijk al geïnstalleerd zijn. Dat is niet erg, u zult een waarschuwing krijgen voor elk al geïnstalleerd package met de versie ervan (de meest recente, vanwege de update die u aan het begin van deze uitleg heeft gedaan):

speex is already the newest version (1.2~rc1.2-1).

Autres pré requis

Afin de pouvoir tourner le serveur SVXLINK en tant que serveur, il lui faut un compte utilisateur propre avec les droits nécessaires pour accéder aux GPIO et aux entrées-sorties audio. En outre ce compte doit être autorisé à tourner en arrière-plan (daemon). Pour lui attribuer ces droits, il suffit de l’inscrire dans les groupes correspondant.

Andere vereisten

Om de SVXLINK server als server te kunnen draaien heeft die een eigen user account nodig met de rechten om de GPIO en de audio in- en uitgangen te mogen benaderen. Bovendien moet dit account het recht hebben om als achtergrondproces (daemon) te mogen draaien. Om al die rechten toe te kennen volstaat het om het account aan de juiste groepen te koppelen.

sudo useradd -c "Echolink user" -r -m -G daemon,gpio,audio -s /sbin/nologin svxlink

L’option –c met un commentaire (un nom, si vous voulez).

L’option –r spécifie que c’est un compte système, donc qui n’expire pas après autant de temps, etc.

L’option –m force la création d’un répertoire « home » bien qu’il s’agisse d’un compte système.

L’option –G énumère les groupes supplémentaires auxquels le compte doit être inscrit.

Finalement, l’option –s fait que le compte ne peut être utilisé pour se loguer à partir d’un terminal. En effet, le programme nologin n’existe pas. Conventionnellement, les administrateurs de systèmes Unix utilise ce nom de programme pour indiquer que le compte ne peut pas être utilisé pour se loguer. Evidemment, cela n’empêche pas l’utilisation du compte à d’autres fins.

Notez qu’il faut laisser le système créer le groupe correspondant au compte parce que la procédure d’installation requière la présence de ce groupe. Aucune option ne doit être spécifiée pour cela, car par défaut un groupe de même nom que le compte utilisateur est créé comme groupe principal pour le compte en question.

Le code source

Le site officiel permet de télécharger un fichier compressé contenant le code source. Seulement, il n’est pas garanti que ce fichier contienne bien la toute dernière version. C’est pourquoi j’ai choisi de télécharger le code source à partir du site Github, où le projet est maintenu.

Git permet de copier tout un référentiel à partir d’un serveur vers son disque dur local. Il maintient l’information sur ce référentiel et permet de participer dans le développement d’un logiciel en échangeant des mises-à-jour entre différents développeurs, chacun travaillant sur son propre poste de travail sur sa partie du projet. La liste des sous-commandes git est longue et cela peut devenir très compliqué, mais pour nos besoins simplement obtenir une copie de l’arborescence des répertoires contenant le code source suffit. Et pour cela la commande git est très simple :

De optie –c zet een commentaar (een naam, als u wil).

De optie –r geeft aan dat het om een systeemaccount gaat, dus één dat niet verloopt na zoveel tijd, etc.

De optie –m forceert het aanmaken van een “home” directory ondanks dat het een systeemaccount is.

De optie –G lijst alle bijkomende groepen waar het account aan moet worden gelinkt op.

Ten slotte geeft de optie –s aan dat het account niet kan worden gebruikt om aan te loggen vanaf een terminal. Inderdaad, het programma nologin bestaat niet. Het is een conventie onder Unix systeemadministrators om deze programmanaam te gebruiken om aan te geven dat een account niet mag worden gebruikt om aan te loggen. Uiteraard belet dat niet dat het account voor andere doeleinden wordt gebruikt.

Noteer dat u het systeem de groep die overeenstemt met het account moet laten aanmaken, de installatieprocedure vereist dat die groep bestaat. Daar hoeft geen andere optie voor te worden gespecifieerd omdat per default een nieuwe groep met dezelfde naam als het account wordt aangemaakt als primaire groep voor het account in kwestie.

De source code

Men kan vanaf de officiële website een gecomprimeerd bestand met de source code downloaden. Het is echter niet gegarandeerd dat dit bestand ook echt de allerlaatste versie bevat. Daarom het ik er voor gekozen om de source code te downloaden vanaf de Github site, waar het project wordt onderhouden.

Git maakt het mogelijk gans een repository van een server naar zijn lokale harde schijf te kopiëren. Er wordt informatie bijgehouden over dit repository en git maakt het mogelijk om deel te nemen aan de ontwikkeling van een programma door wijzigingen aan de code uit te wisselen tussen verschillende ontwikkelaars die elk op hun eigen werkstation aan een deel van het project werken. De lijst van sub-commando’s van git is lang en het kan erg ingewikkeld worden, maar voor onze noden volstaat het simpelweg een kopie van de directoryboom te maken. En daarvoor is de git opdrachtregel heel eenvoudig:

git clone https://github.com/sm0svx/svxlink/

Ceci crée un répertoire svxlink dans le répertoire courant et y met une copie conforme de l’arborescence référencée.

La procédure de compilation

Notez qu’il est indispensable de maintenir la connexion à Internet pendant toute la durée de la procédure de compilation. En effet, certaines ressources nécessaires à la compilation du code et de la documentation ne seront téléchargées qu’au moment où la procédure les met en œuvre.

La documentation sur le site prescrit de mettre quelques options spécifiques pour la compilation sur Raspberry PI, mais finalement j’ai décidé de ne pas les utiliser. En effet, il s’agit d’options d’optimisation du code exécutable produit afin de réduire la charge du CPU.

Ce qui est sans doute nécessaire pour tourner le programme sur les premiers modèles du Raspberry PI ne l’est vraisemblablement plus sur les modèles 3. En effet, j’ai pu vérifier que le résultat, en ne spécifiant aucune option à la commande cmake, tourne parfaitement bien et ne sollicite que quelques pourcents de CPU (certes avec de courts pics momentanés allant jusqu’à 60 % pendant l’analyse de l’information lue du serveur METAR).

Il s’agit donc de suivre la procédure générale en tapant les commandes suivantes :

Dit creëert een svxlink directory in het huidige directory en plaatst er een conforme kopie van de vermelde directoryboom in.

De compilatieprocedure

Noteer dat het noodzakelijk is om de internetconnectie in stand te houden gedurende gans de compilatieprocedure. Er zijn inderdaad bepaalde ressources nodig om de code en de documentatie te kunnen compileren die pas worden gedownload op het moment dat de procedure ze nodig heeft.

De documentatie op de website schrijft voor om bepaalde opties, specifiek voor compilatie op Raspberry PI, te gebruiken, maar uiteindelijk heb ik beslist om dat niet te doen. Het gaat om opties voor optimalisatie van de geproduceerde uitvoerbare code om de belasting van de CPU te verminderen.

Dat was wellicht nodig om het programma op de eerste modellen van de Raspberry PI te kunnen draaien, maar klaarblijkelijk niet meer voor een model 3. Ik inderdaad kunnen vaststellen dat het resultaat, zonder enige optie te specifiëren op de cmake opdrachtregel, perfect draait en slechts enkele procenten CPU vraagt (zij het met korte pieken tot 60% gedurende de analyse van de informatie die van de METAR server wordt gelezen).

Het volstaat dus de algemene procedure te volgen en de volgende opdrachtregels in te tikken:

cd svxlink/
cd src
mkdir build
cd build/

Avant de continuer, il faut maintenant faire un choix quant aux répertoires où seront installés les différents composants du logiciel. Personnellement, je préfère toujours installer un programme dans son répertoire par défaut. Aussi, n’ai-je spécifié aucun paramètre à la commande cmake :

Vooraleer verder te gaan moet u nu een keuze maken over de directories waar de verschillende componenten van het programma zullen worden geïnstalleerd. Persoonlijk verkies ik altijd om een programma in de default directories te installeren. Daarom heb ik geen enkele parameter opgegeven op de cmake opdrachtregel:

cmake ..

Ainsi l’installation se fera dans les répertoires par défaut comme documentés. On trouve alors les fichiers de configuration plus facilement. Cependant, la localisation notamment du répertoire de configuration a changée par rapport à de plus anciennes versions. Si vous voulez suivre à la lettre la recette de configuration que Guy ON4MS a écrite, alors préférez plutôt la commande cmake avec les options suivantes :

Op die manier wordt het programma in de gedocumenteerde default directories geïnstalleerd. Dat maakt het gemakkelijker om de configuratiebestanden te vinden. Het is wel zo dat de locatie van het configuratiedirectory gewijzigd is tegenover oudere versies. Als u het configuratierecept dat Guy ON4MS heeft geschreven naar de letter wil volgen, dan kan u beter de volgende opdrachtregel gebruiken:

cmake -DCMAKE_INSTALL_PREFIX=/usr -DSYSCONF_INSTALL_DIR=/etc -DLOCAL_STATE_DIR=/var ..

Patientez maintenant. Cmake valide tout d’abord si tous les outils nécessaires sont bien disponibles et ensuite crée les fichiers « make » nécessaires à la suite des opérations.

Quand cette étape s’est déroulée sans message d’erreur, saisissez la commande :

Geduld nu. Cmake valideert eerst of alle nodige tools wel beschikbaar zijn en creëert vervolgens de “make” bestanden die nodig zijn voor het vervolg van de bewerkingen.

Nadat deze etappe zonder foutberichten is afgelopen tikt u de volgende opdrachtregel in:

make

Patientez encore bien davantage. C’est maintenant que le gros de la procédure de compilation se déroule. Tous les modules source sont compilés et linkés pour créer les exécutables. Cela prend du temps…

Ensuite, c’est le tour à la documentation :

Nog meer geduld nu. Nu gebeurt het leeuwendeel van de compilatieprocedure. Alle sourcemodules worden gecompileerd en gelinkt om de uitvoerbare code te produceren. Dat kost tijd…

Vervolgens is het de beurt aan de documentatie:

make doc

Patientez encore un peu.

Ceci termine la compilation.

L’installation

Les commandes :

Wacht nog even.

Dit beëindigt de compilatie.

De installatie

De opdrachtregels:

sudo make install
sudo ldconfig

installent les différents composants dans les répertoires suivants :

installeren de verschillende componenten in de volgende directories:

/usr/local/bin/
/usr/local/etc/svxlink/
/usr/local/include/svxlink/
/usr/local/lib/
/usr/local/sbin/
/usr/local/share/applications/
/usr/local/share/doc/svxlink/
/usr/local/share/icons/
/usr/local/share/man/
/usr/local/share/qtel/
/usr/local/share/svxlink/
/usr/local/var/spool/svxlink/

Ce sont les répertoires utilisés sur Raspbian Jessie, sur une autre distribution Linux ils peuvent différer.

Notez que, quand vous avez spécifié le préfix des répertoires à la commande cmake comme indiqué plus haut, les répertoires utilisés seront évidemment différents :

Dit zijn de directories die op Raspbian Jessie worden gebruikt, op een andere Linux distributie kunnen deze verschillen.

Noteer dat als u het directoryprefix heeft opgegeven op de cmake opdrachtregel zoals hierboven aangegeven, de gebruikte directories uiteraard anders zullen zijn:

/usr/bin/
/etc/svxlink/
/usr/include/svxlink/
/usr/lib/
/usr/sbin/
/usr/share/applications/
/usr/share/doc/svxlink/
/usr/share/icons/
/usr/share/man/
/usr/share/qtel/
/usr/share/svxlink/
/usr/var/spool/svxlink/

Ce qui correspond alors aux instructions de configuration du paragraphe suivant.

Ne reste plus qu’à configurer SVXLINK

Sur son site web, Guy ON4MS a bien documenté la configuration qu’il a faite pour SVXLINK. Vous trouverez sa description à cette page.

Conclusion

De nos jours, le radioamateur a parfois besoin de programmer son ordinateur afin de pouvoir expérimenter pleinement les outils de communication que l’informatique nous met à disposition. Il va falloir s’y mettre… Mais comme vous le voyez, cela n’est finalement pas si difficile que ça.

Voici encore un exemple qui associe l’informatique et la radio et qui nous permet de jouir de notre beau hobby de radioamateur.

Wat dan overeenstemt met de configuratie-instructies in de volgende paragraaf.

Blijft nog: SVXLINK te configureren

Op zijn website heeft Guy ON4MS de configuratie die hij voor SVXLINK heeft gemaakt goed gedocumenteerd. U vindt zijn beschrijving op deze pagina.

Besluit

Tegenwoordig moet een radioamateur soms zijn computer programmeren om voluit te kunnen experimenteren met de communicatiegereedschappen die de informatica ons ter beschikking stelt. We zullen ons er moeten aan zetten… Maar zoals u kunt zien is het eigenlijk allemaal niet zo moeilijk.

Dit is nog maar eens een voorbeeld dat de informatica aan de radio koppelt en ons in staat stelt te genieten van onze mooie radioamateurhobby.