User Tools

Site Tools


services:svxreflector

This is an old revision of the document!


Mise en place d'un réflecteur public SVXLink

Au moment où ce guide a été fait, le code de svxlink était en version 17.12.1. Si la version a changé depuis, vous pouvez tenter d'appliquer les patches, tout en faisant attention à corriger sur les noms des dossiers.

Patchage et construction du paquet

La dernière version fournie de Svxreflector ne permet pas l'utilisation d'un mot de passe commun pour tous les clients qui veulent se connecter. D'autre part, la connexion de relais avec l'utilisateur par défaut dans la configuration (5P07N1K) n'est pas souhaitable. Pour pallier à ces problèmes, il faut reconstruire le paquet svxreflector après avoir appliqué des patchs.

Pour ce faire, en tant que root, se mettre dans le dossier /usr/local/src/, télécharger les dépendances nécessaires à la construction de svxlink, les sources du paquet et les outils nécessaires à la construction du paquet:

sudo su -
apt-get update
apt-get install quilt debhelper build-essential
apt-get build-dep svxreflector
apt-get source svxreflector

Ajouter les fichiers suivants dans le dossier /usr/local/src/:

f4hof-add-svxreflector-default-pwd-group.patch

Index: svxlink-17.12.1/src/svxlink/reflector/ReflectorClient.cpp
===================================================================
--- svxlink-17.12.1.orig/src/svxlink/reflector/ReflectorClient.cpp
+++ svxlink-17.12.1/src/svxlink/reflector/ReflectorClient.cpp
@@ -520,9 +520,8 @@ std::string ReflectorClient::lookupUserK
   string auth_group;
   if (!m_cfg->getValue("USERS", callsign, auth_group) || auth_group.empty())
   {
-    cout << "*** WARNING: Unknown user \"" << callsign << "\""
-         << endl;
-    return "";
+    /* Unknown user, silently hinting to group DefaultPassword. */
+    auth_group = "DefaultPassword";
   }
   string auth_key;
   if (!m_cfg->getValue("PASSWORDS", auth_group, auth_key) || auth_key.empty())

f4hof-reject-anon.patch

Index: svxlink-17.12.1/src/svxlink/reflector/ReflectorClient.cpp
===================================================================
--- svxlink-17.12.1.orig/src/svxlink/reflector/ReflectorClient.cpp
+++ svxlink-17.12.1/src/svxlink/reflector/ReflectorClient.cpp
@@ -518,6 +518,12 @@ void ReflectorClient::handleHeartbeat(As
 std::string ReflectorClient::lookupUserKey(const std::string& callsign)
 {
   string auth_group;
+  if (strcasestr( callsign.c_str(), "5P07N1K") != NULL)
+  {
+    /* Deny connection to anons */
+    cout << "Attempt to connect as \"" << callsign << "\" denied." << endl;
+    return "";
+  }
   if (!m_cfg->getValue("USERS", callsign, auth_group) || auth_group.empty())
   {
     /* Unknown user, silently hinting to group DefaultPassword. */

Une fois cette étape réalisée, on passe à l'application des patches et à la compilation des paquets:

cd svxlink-17.12.1
quilt import ../f4hof-add-svxreflector-default-pwd-group.patch
quilt import ../f4hof-reject-anon.patch
quilt push f4hof-add-svxreflector-default-pwd-group.patch
quilt push f4hof-reject-anon.patch
dpkg-buildpackage -us -uc -b

Votre paquet prêt à être installé est dans le dossier /usr/local/src.

Installation du paquet

Installer, puis figer le paquet, pour éviter que la version du dépôt vienne écraser votre version, lorsque faites une mise à jour. Attention, le nom du fichier du paquet va dépendre de l'architecture matérielle de votre machine.

Votre paquet devrait avoir un nom structuré de la manière suivante: svxreflector_<version>_<archi>.deb

cd /usr/local/src
dpkg -i svxreflector_17.12.1-2_amd64.deb
apt-mark hold svxreflector

Paramétrage environnement

Si vous n'avez pas d'utilisateur et de groupe svxlink, il faut le créer, ainsi qu'un répertoire dédié pour les logs. Le script suivant permet de le faire pour vous.

#!/bin/bash
grep svxlink /etc/passwd &> /dev/null
if [[ "$?" != "0" ]]; then
  adduser --system --group --disabled-password svxlink
  useradd -rG audio,plugdev,gpio svxlink
fi

if [ ! -d /var/log/svxlink ]; then
  mkdir /var/log/svxlink
  chown svxlink:adm /var/log/svxlink
fi

Fichier de configuration et unité systemd

Pour héberger une seule instance

Si vous ne souhaitez mettre en place qu'un seul réflecteur (aussi appelé salon par certains outils francophones), la configuration suivante vous permettra de disposer d'un réflecteur sur le port 5300. Remplacer “VotreMotDePasseDeGroupe” par un mot de passe de votre choix pour le salon.

Si votre serveur est situé derrière une box, ou un NAT, n'oubliez pas d'ajouter une règle de redirection de port, et une règle firewall pour autoriser les connexions entrantes.

Créer le fichier /etc/svxlink/svxreflector.conf

###################################################################
#
# Configuration file for the SvxReflector SvxLink conference node
#
###################################################################

[GLOBAL]
#CFG_DIR=svxreflector.d
TIMESTAMP_FORMAT="%Y-%m-%dT%H:%M:%S%z"
LISTEN_PORT=5300
#SQL_TIMEOUT=600
#SQL_TIMEOUT_BLOCKTIME=60
CODECS=OPUS

[USERS]

[PASSWORDS]
DefaultPassword="VotreMotDePasseDeGroupe"

Créer le fichier /etc/systemd/system/svxreflector.service

[Unit]
Description=SvxLink Reflector
Documentation=man:svxreflector(1)
After=network.target remote-fs.target time.target

[Service]
Type=simple
User=svxlink
Group=daemon
EnvironmentFile=-/etc/default/svxreflector
Environment=CFGFILE=/etc/svxlink/svxreflector.conf
Environment=LOGFILE=/var/log/svxlink/svxreflector.log
RuntimeDirectory=svxlink
ExecStart=/usr/bin/svxreflector --config $CFGFILE --logfile $LOGFILE
ExecReload=/bin/kill -s HUP $MAINPID
Restart=on-failure
TimeoutStartSec=60
[Install]
WantedBy=multi-user.target

Pour héberger plusieurs instances

Reproduire la procédure ci-dessus en modifiant le nom du fichier de conf par un nom comprenant le nom de votre réflecteur.

Par exemple, si vous voulez faire 3 réflecteurs: un général, un technique et un urgence, faites 3 fichiers de configuration nommés /etc/svxlink/svxreflector-general.conf, /etc/svxlink/svxreflector-tech.conf, et /etc/svxlink/svxreflector-urgence.conf, où vous prendrez soin à choisir un numéro de port unique (par exemple, 5300, 5301 et 5302). L'utilisation d'un même mot de passe entre 2 salons n'est pas gênante.

Pour les unités systemd, même principe: créer des noms d'unités qui comprennent le nom de votre réflecteur, collez le template ci-dessus et modifiez les lignes suivantes:

Description=SvxLink Reflector serving <nom-reflecteur> room
EnvironmentFile=-/etc/default/svxreflector-<nom-reflecteur>
Environment=CFGFILE=/etc/svxlink/svxreflector-<nom-reflecteur>.conf
Environment=LOGFILE=/var/log/svxlink/svxreflector-<nom-reflecteur>.log

Par exemple, pour le réflecteur tech, créer le fichier /etc/systemd/system/svxreflector-tech.service qui contient:

[Unit]
Description=SvxLink Reflector serving tech room
Documentation=man:svxreflector(1)
After=network.target remote-fs.target time.target

[Service]
Type=simple
User=svxlink
Group=daemon
EnvironmentFile=-/etc/default/svxreflector-tech
Environment=CFGFILE=/etc/svxlink/svxreflector-tech.conf
Environment=LOGFILE=/var/log/svxlink/svxreflector-tech.log
RuntimeDirectory=svxlink
ExecStart=/usr/bin/svxreflector --config $CFGFILE --logfile $LOGFILE
ExecReload=/bin/kill -s HUP $MAINPID
Restart=on-failure
TimeoutStartSec=60
[Install]
WantedBy=multi-user.target

Activation des services

Pour que les changements soient pris en compte, puis activer au démarrage et démarrer votre unité:

systemctl daemon-reload
systemctl enable svxreflector.service
systemctl start svxreflector.service

Pour contrôler si le service tourne:

systemctl status svxreflector.service

Pour consulter le journal systemd du service:

journalctl -u svxreflector.service

Paramétrage relais

Pour commencer, vous devez choisir un nom abrégé pour votre réflecteur, à trois lettres.

Fichier audio de nom de salon

Ce fichier permet d'annoncer le nom de votre réflecteur lorsqu'un relai va basculer dessus.

Le format de fichier validé pour les annonces de nom de conférence est le suivant: WAVE PCM 16 bits signé, échantillonnage à 16kHz, mono.

Si vous voulez convertir un fichier dans ce format à l'aide de ffmpeg, voici la commande:

ffmpeg -i <fichier_source> -c 1 -ar 16000 -acodec pcm_s16le Sxmp.wav

Le nom du fichier doit respecter la forme S<nom_abrege_reflecteur>.wav (par ex: Sxmp.wav ).

Paramétrage de votre relais

services/svxreflector.1587196534.txt.gz · Last modified: 2020/04/18 07:55 by f4hof