====== SERVEUR OPENWEBRX ======
🚧 Cette page est un WIP (Work In Progress). Tout ne fonctionne pas (encore) à 100% ! 🚧
\\
Ne vous fiez pas à cette page tant que ce panneau sera présent.
==== 📒 Table des matières ====
===== Intro =====
=== Objectif ===
Transformer un vieux laptop de récupération en serveur OpenWebRX.
Monter un serveur OpenWebRX à partir d'un client léger d'occasion et bon marché et d'un clone de SDRPlay RSP1.
=== Pourquoi ? ===
Le plus souvent, OpenWebRX+ est utilisé avec un Raspberry Pi, mais depuis la crise du COVID entre 2019 et 2021, et la pénurie de composants, puis l'inflation qui a suivi, le prix des Pi s'est envolé. Alors pourquoi ne pas utiliser une vieille bécane qui traînait dans les placards une machine très abordable (32,00€, port compris) pour faire un serveur OpenWebRX* ?
\\
\\
//*et pourquoi pas rtl_tcp pour une ou plusieurs clef USB RTL-SDR//
===== OpenWebRX+ =====
OpenWebRX+ est un logiciel de SDR (Software Defined Radio) adossé à un serveur web, forké depuis le projet "OpenWebRX". Il permet d'utiliser un récepteur SDR (clef RTL-SDR, SDRPlay RSP1A, etc.) avec un navigateur web depuis n'importe où sur la planète.
OpenWebRX+ supporte nativement beaucoup de mode de modulations et modes de transmissions (voix, images, données) que l'on peut trouver sur les bandes HF, VHF et UHF.
Il est bourré de fonctionnalités intéressantes comme :
* Décodage AIS, SSTV, FAX, FLEX, POCSAG, HFDL, VDL2, ISM, SAM, RTTY, and CW decoders
* Décodage DTMF, EEA, EIA, CCIR, ZVEI SELCALL
* Décodage SSTV et FAX en arrière plan avec explorateur d'images
* Enregistreur intégré pour l'audio reçue
* Scanner intégré
* Filtre de bruits ajustables
* Signets automatiques pour le broadcast en HF
* Signets automatiques pour les relais radioamateurs à proximité
* ... et beaucoup d'autres...
**URL du projet :** https://github.com/luarvique/openwebrx
**OpenWebRX+ ppa pour Ubuntu :** https://luarvique.github.io/ppa/
===== 🪛 Hardware =====
==== ⛔️ Le vieux laptop ====
Le vieux laptop que je recycle pour ce projet est un Medion Belinea O.book 3.1.
* Screen Size : 15.4"
* Resolution : 1280 x 800 (WXGA)
* CPU : Intel® Core™2 Duo CPU ― T5250 @ 1.50GHz
* GPU : Intel® Mobile GM965/GL960
* RAM : 3GB
* Core Qty : Dual-Core
* Storage : 80 GB HDD SATA 1.5Gb/s
* Battery Capacity : H.S. (4400 mAh à l'orgine)
* Année de fabrication : 2008
{{:pojets:openwebrx:belinea_obook31_01.jpg|}}
Ce laptop ne disposant pas, au vu de son grand âge, d'un port USB 3, il est impossible de l'utiliser avec le clone de RSP1. Il fera sa vie dans un autre projet... 😉
==== ✅ Client Léger Hewlett-Packard T520 ====
=== Aperçu ===
* CPU + GPU : APU AMD GX-212JC Dual Core 1,2 GHz SOC APU avec carte graphique AMD Radeon HD*
* Mémoire : 2 Go SODIMM SDRAM DDR3L-1600
* Disque : 16Go SSD M.2
* USB
* USB3 : 2 ports (en façade)
* USB2 : 4 ports (à l'arrière)
* Vidéo
* 1 × VGA
* 2 × DisplayPort
* Audio
* 1 mini-jack stéréo 1/8 pouce sur le panneau avant avec la mention casque
* 1 mini-jack stéréo 1/8 pouce sur le panneau avant avec la mention microphone
* Réseau : Gigabit Ethernet
* Accès au BIOS : F10
* Accès au bootmenu : F9
* Année de lancement : Juin 2014
=== Plus d'infos ===
* https://www.parkytowers.me.uk/thin/hp/t520/
=== Documentation ===
* {{ :projets:openwebrx:hp_t520_fiche_techique.pdf |Fiche produit Client léger flexible HP t520 🇫🇷}}
* {{ :projets:openwebrx:hp_t520_troubleshooting.pdf |Troubleshooting Guide HP t520 Flexible Thin Client 🇬🇧}}
* {{ :projets:openwebrx:hp_t520_manuel_reference_materiel.pdf |Manuel de référence du matériel Clients légers HP 🇫🇷}}
\\
{{:projets:openwebrx:t520_01.jpg|}}
==== ✔️ Le récepteur SDR ====
Le récepteur SDR choisi est le "RSP1S" un clone Simplifié du "RSP1" de SRDPlay. On trouve ce récepteur SDR sur les sites asiatiques pour un prix entre 30 et 40€. Ses performances ne sont pas celles du matériel qu'il copie, mais suffisent dans un premier temps pour ce projet. Le modèle dont je dispose a 5 entrées distinctes suivies de filtres de bande.
\\
{{:pojets:openwebrx:rsp1_clone_01.png?350&nolink}}
\\
{{:pojets:openwebrx:rsp1_clone_02.png?350&nolink}}
Plus d'infos ici :
* https://github.com/EndlessEden/msiSDR/tree/RSP1-S
* https://www.hackster.io/mircemk/short-review-of-chinese-clone-version-of-sdrplay-rsp1-4a8e93
===== 💾 Installation du serveur linux =====
L'OS utilisé est un Ubuntu 22.04.3 Server (sans interface graphique).
==== 🔧 Configuration de l'OS ====
=== 🟢 Ignorer la fermeture de l'écran ===
=== 🟢 On commence par mettre tout à jour ===
sudo apt update
sudo apt dist-upgrade -y
Pour pouvoir utiliser le laptop avec l'écran refermé (et ainsi gagner de la place) sans que la machine ne soit plongée en veille, il faut modifier, en tant que ''root'', une directive de configuration dans le fichier
''/etc/systemd/logind.conf'' :
[Login]
#HandleLidSwitch=suspend
HandleLidSwitch=ignore
Puis il faut relancer le service
sudo systemctl restart systemd-logind
=== 🟢 Ajouter quelques outils utiles ===
sudo apt install -y htop glances unzip git build-essential cmake
==== 🔧 Sécuriser la machine ====
Dans le cas d'une utilisation à travers internet, la machine sera exposée, c'est donc une bonne idée de la protéger.
=== 🟢 Firewall ===
== ⏵ Installation ==
sudo apt install -y ufw
== ⏵ Configuration ==
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
== ⏵ Ajouter le port 8073 pour OpenWebRX ==
sudo ufw allow 8073
== ⏵ Mise-en-route ==
sudo ufw enable
== ⏵ Vérifier les services autorisés ==
sudo ufw status
=== 🟢 Fail2Ban ===
Fail2Ban bannit les adresses IP qui tentent de manière répétitive et échouent à se connecter. Il contient et ralentit les tentatives d'attaque par brute-force sur la machine.
== ⏵ Installation ==
sudo apt install -y fail2ban
== ⏵ Fichier de conf local ==
Si on veut pouvoir modifier la conf, il ne faut pas le faire dans le fichier ''jail.conf'' mais il faut disposer d'un fichier ''jail.local''.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
== ⏵ Ajouter vos IPs en whitelist ==
Éditer ''/etc/fail2ban/jail.local'' en tant que ''root'' et ajouter vos adresses IP à la directive ''ignoreip'' (IPv4 ou IPv6, séparés par des espace) :
ignoreself = true
ignoreip = 127.0.0.1/8 ::1 192.168.0.0/16
== ⏵ Redémarrer Fail2Ban ==
sudo service fail2ban restart
==== Outils SDR supplémentaires ====
Puisqu'on dispose d'un serveur dédié à la réception SDR, c'est un terrain de jeu idéal pour plusieurs autres expérimentations.
sudo apt install -y rtl-sdr
===== 💿 Installation d'OpenWebRX+ =====
==== Dépôts ====
Installer les dépôts dans une console en tant que ''root'' :
wget -O - https://luarvique.github.io/ppa/openwebrx-plus.gpg | gpg --dearmor -o /etc/apt/trusted.gpg.d/openwebrx-plus.gpg
echo "deb [signed-by=/etc/apt/trusted.gpg.d/openwebrx-plus.gpg] https://luarvique.github.io/ppa/ubuntu ./" > /etc/apt/sources.list.d/openwebrx-plus.list
apt update
Ne pas oublier d'ajouter le dépot orginal d'OpenWebRX (nécessaire pour certains paquets). Toujours dans une console en tant que ''root'' :
wget -O - https://repo.openwebrx.de/debian/key.gpg.txt | gpg --dearmor -o /usr/share/keyrings/openwebrx.gpg
echo "deb [signed-by=/usr/share/keyrings/openwebrx.gpg] https://repo.openwebrx.de/ubuntu/ jammy main" > /etc/apt/sources.list.d/openwebrx.list
apt update
==== OpenWebRX itself ====
sudo apt install -y openwebrx
==== Installations manuelles supplémentaires ====
=== 🟢 Création d'un espace dédié ===
On va créer un espace dédié pour y mettre tous les logiciels et bibliothèques qu'on va compiler "à la main" pour OpenWebRX+.
mkdir "$HOME/sdr"
# on va avoir besoin de compiler du code externe, donc...
sudo apt install -y git build-essential cmake
=== 🟢 Installation de SoapySDR ===
sudo apt install -y libsoapysdr0.8 libsoapysdr-dev soapysdr-tools
sudo apt install -y soapysdr-module-all
➊ Après testé avec un RaspberryPi, OpenWebRX du 2023-10-11 fonctionne "out of the box" avec le clone de RSP1. En regardant en détail, la version de SoapySDR utilisée sur le Pi est 0.7 et non 0.8.
\\
➋ Sur le même RapsberryPi, l'image OpenWebRX+ du 2023-10-22 __ne fonctionne pas__ avec le clone de RSP1. La version de SoapySDR utilisée est aussi la 0.7. Est-ce que la version des drivers a son importance ?
\\
➌ Autre détail amusant : malgré le driver SDRplay installé, ''lsusb'' reste muet et n'affiche pas ''SDRPlay RSP1'' sur le port USB concerné, alors que tout fonctionne parfaitement...
=== 🟢 Les drivers SDRPlay ===
* Se rendre sur cet URL : https://www.sdrplay.com/api/
* Choisir Linux x86
* Cliquer sur "Download API Linux 3.07"
* Et se faire suer à essayer de le transférer sur le serveur, puisque le captcha du site de SDRPlay empêche d'accéder à l'URL de téléchargement pour pouvoir l'utiliser avec ''wget'' directement depuis le serveur
* Donc voilà le fichier en question : {{ :projets:openwebrx:sdrplay_rsp_api-linux-3.07.1.run.zip |}}
* Extraire le .ZIP et donner les droits d'exécution au fichier : chmod +x ./SDRplay_RSP_API-Linux-3.07.1.run
* Exécuter le binaire : ./SDRplay_RSP_API-Linux-3.07.1.run
* Répondre aux questions
* Brancher le (clone de) RSP1 et faire un ''lsusb'' pour constater que Bus 001 Device 002: ID 1df7:2500 SDRplay RSP1
* 🙌
=== 🟢 Les (anciens) drivers SDRPlay ===
Puisque manifestement le clone de RSP1 fonctionne sans encombre avec les anciennes versions d'OpenWebRX mais pas avec les plus récentes, il y a un souci avec les pilotes récents.\\
J'ai donc compilé tous les pilotes ("API") et scripts de l'ancienne version (2.13.1) pour Linux x64 et ARM32 / ARM64 dans un zip : {{ :projets:openwebrx:sdrplay_linux_pi_api_2.13.1.zip |}}
=== 🟢 Librairie SoapySDR ====
cd "$HOME/sdr"
git clone https://github.com/pothosware/SoapySDRPlay.git
cd "$HOME/sdr/SoapySDRPlay"
mkdir "$HOME/sdr/SoapySDRPlay/build"
cd "$HOME/sdr/SoapySDRPlay/build"
cmake ..
make
sudo make install
cd "$HOME/sdr"
Après plusieurs tests, le clone de RSP1 ne semble fonctionner qu'avec une ancienne version de SoapySDR, la 0.7.\\
Les sources sont trouvables ici : https://github.com/pothosware/SoapySDR/releases/tag/soapy-sdr-0.7.2