Openmediavault : installation de Qbittorrent avec OpenVPN

Après avoir installé Nextcloud et Plex, le dernier truc important à installer était un client qBittorrent pour l’utiliser avec une connexion OpenVPN.

Après avoir regardé quelques vidéos, des containers Docker existent, combinant à la fois le client qBittorrent et la connexion OpenVPN, tout semblait parfait.

Hélas, après une première tentative, je me rendais compte que ce qui était proposé ne l’était pas pour une architecture armv7l de mon odroid-hc2 . 🙁

Heureusement, la situation s’est vite débloquée, grâce à la souplesse de l’Open source.

J’avais répéré la solution MarkusMcNugen/docker-qBittorrentvpn sur dockerhub., hélas uniquement disponible sur une base Debian (Ubuntu 18.04). À tout hasard, je postais sur le projet Github correspondant un petit commentaire sur une issue déjà existante concernant le support ARM7 :

J’ai même tapé trop vite, et oublié un mot : « cannot find any »…

Deux jours plus tard, je recevais un mail d’un certain chrisjohnson00 me proposant de tester son container, un fork compilé en mode « multi-architecture ». 😎

J’essayais tout d’abord avec Portainer, mais le démarrage échouait avec ce message : Cannot open TUN/TAP dev /dev/net/tun: No such file or directory (errno=2)

Après quelques recherches, il semble que certains paramètres nécessaires pour ce container ne peuvent être passés via Portainer. Je faisais donc un nouvel essai en utilisant la ligne de commande docker comme suit :

docker run --privileged -d \
		-v /your/download/path/:/downloads \
		-v /your/config/path/:/config  \
		-e "VPN_ENABLED=yes"  \
		-e "LAN_NETWORK=192.168.1.0/24"  \
		-e "NAME_SERVERS=8.8.8.8,8.8.4.4"  \
		-e "VPN_USERNAME=nom_utilisateur_VPN"  \
		-e "VPN_PASSWORD=mot_de_passe"  \
		-e "PUID=XXX"  \
		-e "PGID=XXX"  \
		-e "INCOMING_PORT_ENV=8999"  \
		-p 8080:8080  \
		-p 8999:8999  \
		-p 8999:8999/udp  \
		--sysctl net.ipv6.conf.all.disable_ipv6=0  \
		--name qbittorrent-openvpn  \
		chrisjohnson00/qbittorrent-openvpn:latest

Notes :

  1. On renseigne bien sûr VPN_USERNAME et VPN_PASSWORD avec ceux de votre fournisseur.
  2. La valeur de LAN_NETWORK dépend bien sûr de votre réseau local.
  3. la valeur de PUID et PGID dépend de l’utilisateur qui lance le container.
  4. La commande « privileged -d » est celle que l’on ne peut passer avec Portainer.
  5. Le paramètre « –sysctl net.ipv6.conf.all.disable_ipv6=0 » est à priori nécessaire pour MULLVAD, mon fournisseur VPN. Et même chose, impossible avec Portainer.
  6. Pour changer le port de la WebUI de qBittorrent, il faut par exemple changer « -p 8080:8080 » en « -p 9090:8080 ».

Dernière remarque : lors du premier démarrage, un message d’erreur nous signale que le fichier .ovpn est manquant (VPN_ENABLED=yes). Il faut alors récupérer ce fichier auprès du fournisseur VPN, et le copier dans le répertoire /your/config/path/Qbittorrent/openvpn existant (créé lors du premier démarrage).

Le container démarre enfin, il ne reste plus qu’à se logguer via l’interface à partir de votre navigateur (utilisateur: admin / mot de passe : adminadmin) :

Première connexion à la WebUI du container qBittorrent.

Et voilà, c’était quelque chose que je voulais faire depuis longtemps, et que je pouvais faire avec la baie Synology (en tout cas, je n’avais pas trouvé comment installer un client openvpn standard, celui de Synology n’étant pas à jour (et modifié il me semble). Typiquement le genre de problème que l’on a avec les solutions « propriétaires ».

Il ne me reste qu’à modifier mon container Plex pour y ajouter une nouvelle bibliothèque pointant sur le répertoire de « download » défini pour qBittorrent, et je peux retrouver directement le contenu multimedia téléchargé sur la TV ! 😎

Enfin, pour en faciliter l’usage dans Firefox, on peut installer l’extension Add Link to qBittorrent WebUI. Il suffira de lui indiquer l’adresse du serveur :

On retrouve ensuite le menu contextuel avec un click droit sur un lien torrent :

Voilà, j’ai à peu près tout ce dont j’avais besoin pour mon NAS Openmediavault.

Il va falloir maintenant penser aux solutions de sauvegarde, ce serait dommage de perdre tout ça : ce sera l’objet d’un prochain article.

Problème au redémarrage

J’ai eu depuis un problème après un redémarrage du container (via Portainer), ou un redémarrage d’OMV : plus moyen d’accéder via l’interface de qBittorrent (WebUI) alors que le container est bien affiché comme démarré. Il me fallait effacer puis recréer le container pour que cela fonctionne à nouveau… 🙁

En comparant les logs, voilà ce que l’on voyait sur un redémarrage correct :

sudo docker logs -f qbittorrent-openvpn
...
Adding 100 group
groupadd: GID '100' already exists
Adding 997 user
2021-02-06 09:37:44.489980 [warn] UMASK not defined (via -e UMASK), defaulting to '002'
2021-02-06 09:37:44.571608 [info] Starting qBittorrent daemon...
Log file /config/qBittorrent/data/logs/qbittorrent-daemon.log doesn't exist. Creating it...
Logfile created. Logging to /config/qBittorrent/data/logs/qbittorrent-daemon.log
2021-02-06 09:37:45.685073 [info] qBittorrent PID: 189
2021-02-06 09:37:45.710933 [info] Started qBittorrent daemon successfully...

On voit le PID du process qBittorrent, et le message de confirmation…

Et maintenant les logs quand il est impossible de se connecter à la WebUI de qBittorrent :

sudo docker logs -f qbittorrent-openvpn
...
Adding 100 group
groupadd: GID '100' already exists
Adding 997 user
useradd: user 'qbittorent' already exists
2021-02-06 10:21:20.548073 [warn] UMASK not defined (via -e UMASK), defaulting to '002'
2021-02-06 10:21:20.644612 [info] Starting qBittorrent daemon...
Logging to /config/qBittorrent/data/logs/qbittorrent-daemon.log.
start-stop-daemon: matching on world-writable pidfile /var/run/qbittorrent-nox.pid is insecure
2021-02-06 10:21:21.768415 [info] qBittorrent PID: 

Le log s’arrête à cet endroit, manifestement le process n’est pas créé. La ligne précédente en donne la raison : il y a un fichier /var/run/qbittorrent-nox.pid qui provoque un problème de sécurité et empêche le lancement du process… Je n’en sais pas plus pour l’instant.

Toujours est-il qu’il suffit de se logguer via la console du container qbittorrent-openvpn (via portainer), et d’effacer le fichier en question :

On efface le fichier en question, qui ne contient qu’un numéro de process.

On remarque d’ailleurs que le PID du fichier est égal au PID du process lancé -2 (198-2=187).

Et voilà, le container peut être redémarré proprement, le process est bien lancé, et l’interface WebUI à nouveau accessible.

On peut aussi effacer ce fichier en ligne de commande. On recherche d’abord le container ID de Nextcloud (commande docker ls), puis on lance un terminal à l’intérieur du container (commande docker exec). Il ne reste alors plus qu’à aller supprimer le fichier souhaité :

Lancer un prompt bash à l’intérieur du container pour pouvoir y exécuter des commandes.

Il ne reste plus qu’à relancer le container :

sudo docker restart qbittorrent-openvpn

Voir cette page pour plus d’exemples de commandes docker : on peut même tout enchaîner en une seule commande :

sudo docker exec 6a54133fa769 bash -c "cd /var/run ; ls ; rm qbittorrent-nox.pid"

De là à préparer un script pour automatiser tout ça, y compris le redémarrage du container, il n’y a qu’un pas ! 😎

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *