Installer OpenWRT sur une borne unifi

Les bornes unifi sont des super produits pour les pros. Mais pour ceux qui en veulent toujours plus et se retrouvent limité par le système (sic…) il est possible d’aller encore plus loin. En effet, ces bornes sont toutes basés sur une version du système d’exploitation OpenWRT. Donc forcément compatible avec le système.

Bon, en vrai, la LED je la désactive

On a la confirmation en se connectant en ssh à la borne.


cat /etc/openwrt_release
DISTRIB_ID='LEDE'
DISTRIB_RELEASE='17.01.6'
DISTRIB_REVISION='r3979-2252731af4'
DISTRIB_CODENAME='reboot'
DISTRIB_TARGET='ar71xx/ubnt'
DISTRIB_ARCH='mips_24kc'
DISTRIB_DESCRIPTION='LEDE Reboot 17.01.6 r3979-2252731af4'
DISTRIB_TAINTS='no-all mklibs busybox'
UnifiAP-AC-LR-BZ.v4.0.80# cat /etc/openwrt_version
r3979-2252731af4

Jusqu’à il y a peu, il était possible d’installer des paquets supplémentaires via opkg… Mais voilà, depuis, ubiquiti l’a interdit 🙁

Mais on peut installer OpenWRT, en perdant par contre la partie « gestion » via le logiciel unifi controller. A vous de voir ce qui vous intéresse.

Dans le cas ou vous souhaitez installer OpenWRT, c’est possible via le tutorial suivant :

https://openwrt.org/toh/ubiquiti/unifiac

ATTENTION pour le package mtd, j’ai du utilisé celui-ci https://downloads.openwrt.org/releases/17.01.6/packages/mips_24kc/base/mtd_23_mips_24kc.ipk

Pour l’installation, j’ai du le décompresser via 7-Zip sur mon poste de travail et j’ai du ensuite recopier l’exécutable dans le dossier /sbin de la borne.

Ensuite : redémarrage, et tout fonctionne du premier coup.

L’inconvénient, c’est que si on a plusieurs routeurs, ou plusieurs bornes, on risque de se retrouver en réseau local avec plusieurs DHCP (bof) et plusieurs DNS (rebof)

Heureusement, on peut facilement configurer les routeurs OpenWRT en mode « Dump AP » (Ce qu’on peut traduire par « point d’accès déversoir »…)

https://openwrt.org/docs/guide-user/network/wifi/dumbap

Zou, je retourne à ma configuration 🙂

Best method ever from Saturday Night

Monitorer XTeVe via monit

XteVe est un « proxy » vers des serveurs IPTV via des listes M3U. Je l’utilise avec mon FAI (Free) pour interfacer les chaînes multipostes avec plex. On peut également l’utiliser pour regrouper des multiples playlist d’IPTV gratuites (par exemple : https://github.com/iptv-org/iptv)

Consulter le site officiel pour plus d’informations : https://xteve.de/

Oui mais voilà, parfois lors de l’enregistrement, XteVe plante (grrr…). Donc, j’ai souhaité rapidement ajouter un monitoring automatique à xteve pour permettre de le relancer sans intervention manuelle.

La première étape consiste à « transformer » xteve en démon. Ensuite, il faut utiliser un logiciel de monitoring type monit pour le surveiller. C’est simple donc 🙂

Création d’un démon de service

Créer le fichier de service :

cd /etc/systemd/system/
sudo vi xteve.service

Copier le contenu suivant

[Unit]
Description=xTeVe Service
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
ExecStart=/dossier_installation/xteve -config dossier_configuration
ExecReload=/usr/bin/killall xteve
ExecStop=/usr/bin/killall xteve
KillMode=process
Restart=always
RestartSec=15

User=running_user
Group=running_group
[Install]
WantedBy=multi-user.target

Attention à bien remplir les éléments manquants : dossier_installation,dossier_configuration, running_user et running_group.

On sauvegarde le fichier, puis on active le nouveau service :

sudo systemctl enable xteve
sudo systemctl start xteve

Création du fichier de monitoring pour monit

On crée un nouveau fichier pour ce monitoring ;

sudo vi /etc/monit/conf.d/xteve
check process xteve matching "xteve"
    start program = "systemctl start xteve"
    stop program = "systemctl stop xteve"
    if failed host 127.0.0.1 port 33400 with timeout 30 seconds for 3 cycles then restart

Attention à adapter le numéro de port du monitoring.

Ensuite, il ne reste plus qu’à relancer monit :

sudo /etc/init.d/monit restart

Et voilà, xteve fonctionne désormais tout seul.

… Et les mises à jour ?

Ah… oui… le défaut, c’est que xteve se met à jour uniquement au démarrage de l’application.

Donc, il faut également penser à le relancer de temps à autre pour qu’il puisse faire ces mises à jour. Pour cela, le plus simple reste à rajouter une ligne dans le crontab pour le redémarrer par exemple une fois par semaine le mardi vers 4h du matin (peu de chances d’enregistrer quelque chose…)

Ce qui donne dans crontab :

0 4 * * 1 systemctl restart xteve

Monitoring via monit et letsencrypt

Après avoir perdu une soirée à résoudre le souci … Je pense que cela mérite un petit article.

L’installation de monit sur un serveur peut s’avérer complexe si on doit la relier à un serveur signé par letsencrypt ;

En effet, monit ne supporte pas le format des certificats du certbot de letsencrypt ET ne permet d’avoir que des droits 600 sur le fichier (grrr).

Il faut donc rajouter un hook de déploiement. Un exemple de hook est disponible ici :

https://www.ringingliberty.com/2017/12/30/monit-lets-encrypt-and-file-permissions/

#!/bin/bash

for domain in $RENEWED_DOMAINS
do
    case $domain in
    example.com)
        cat $RENEWED_LINEAGE/privkey.pem $RENEWED_LINEAGE/fullchain.pem > /etc/monit/pemfile-$domain.pem
        chmod 600 /etc/monit/pemfile-$domain.pem
        ;;
done

Je remercie grandement l’auteur. Mais, l’article d’origine ne le précise pas, ce script de hook de déploiement est à installer (via root) dans l’emplacement:

/etc/letsencrypt/renewal-hooks/deploy

Ensuite, rulez!

Organisation des services web sur une page unique

Si vous avez plusieurs services web d’installer sur votre / vos serveurs tel que sabnzbd, sickbeard, transmission, jeedom, webmin, ce n’est pas toujours évident de se repérer dans toutes les adresses numéro de ports etc.

Heureusement, il existe plusieurs projets open source pour vous permettre d’organiser tout cela ! Il en existe surement d’autres que ces deux projets mais ce sont les deux que j’ai personnellement testé.

organizr

Site : https://organizr.app/

Les points intéressants d’organizr selon moi (en V2) sont la grande intégration des services web au sein d’une page unifiée. Plus besoin d’ouvrir les autres services webs, tout se gère au maximum via cette page. Par contre, cela se fait au détriment de la simplicité de configuration (forcément).

Capture d’écran d’organizr

Heimdall

Site: https://heimdall.site

On m’appelle?

Alors histoire de défoncer les portes ouvertes, non Heimdall, ce n’est pas le légendaire ouvreur de porte 😉

Heimdall, c’est quasi l’inverse d’organizr. La configuration est simplifiée au maximum et se fait par un mécanisme « d’apps ». Il existe trois niveaux d’applications selon son intégration à heimdall : generic (icône +lien à définir soi même), les foundations (des apps toutes prêtes) et enhanced, qui sont le truc le plus intéressant car intégrent directement des fonctionnalités au site web.

Les principals reproches pour heimdall, c’est justement son manque de configuration. Si le format des liens ne vous plait pas, et bien passez votre chemin.

Vidéo de Heimdall

Autres possibilités

Un petit mot pour vous parler de Muximux (site: https://github.com/mescon/Muximux ) qui consiste en l’ajout d’un menu en haut des différents services webs. A l’heure actuelle le développement semble stoppé / abandonné, donc bien que complétement fonctionnel, je ne peux vous le conseiller.

Enfin, il reste toujours possible d’utiliser un CMS pour se créer son propre site web.

Quelques outils pour l’infrastructure web

Dans le cadre de mes développements, j’utilise quelques logiciels divers qui méritent d’être plus connu.

Un logiciel pour router le trafic des clusters / conteneurs depuis une URL. Pratique pour, par exemple, avoir plusieurs blogs dans des sous domaines, si ceux-ci tournent dans des docker WordPress.

https://traefik.io/

Ce logiciel / siteweb permet de réaliser des tests vers les API web. Il possède l’avantage d’être très ouvert et de pouvoir importer des données au format divers, et de permettre de générer des codes dans divers format (curl, json, appel http direct etc.)

https://www.getpostman.com/