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 ! 😎

9 réflexions sur « Openmediavault : installation de Qbittorrent avec OpenVPN »

  1. Bonjour Pascal. D’abord meilleurs voeux pour la nouvelle année.
    Je poursuis mon installation en suivant tes tutos. J’ai pu installer PLEX sans trop de problème et là j’en suis à qBittorrent. J’utilise MullVad. J’ai bien le message ‘Started qBittorrent daemon successfully…’ mais lorsque je veux me logguer via l’interface web ça plante. Du coup j’ai plusieurs questions, stp:
    – Dans ton tuto il y a deux adresses ip différentes LAN_NETWORK=192.168.1.0/24 mais http://192.168.1.30:8080. L’adresse IP est bien celle de la machine ou est ce l’adresse via le réseau bridge propre à qBittorrent ?
    – je pensais à un pb de conflit dans la définition des ports (j’utilisais déjà le port 8080 pour accéder à OMV système). J’ai essayé de définir un port 9090 pour WebUI. Faut il définir une redirection de port sur la freebox?
    – dans ma config actuelle j’ai modifié le port d’accès pour OMV système afin d’utiliser le port 8080 pour qBittoreent et coller au tuto. Mais , donc, ça plante: délai d’attente dépassé.
    – sur internet, certains vante les mérites de Wireguard plus performant que OpenVPN. As tu un avis là dessus?
    – Tu n’utilises qbittorent qu’à la maison, donc pas besoin de s’inquiéter de certificats de sécurité? C’est bien ça?
    Merci pour ton aide. Amicalement. Didier

  2. Bonjour Didier,
    Meilleurs vœux également pour cette nouvelle année. Réponses à tes questions :
    – LAN_NETWORK=192.168.1.0/24 n’est pas une adresse réseau, mais la définition d’un réseau (notation CIDR). 192.168.1.0/24 représente un réseau dont les 24 premiers bits sont réservés à l’ID du réseau et les 8 bits restants aux adresses des hôtes. Il définit donc le réseau sur lequel est la machine et son masque de sous-réseau. Et http://192.168.1.30:8080 est l’URL de l’interface web de Qbittorrent sur la machine dont l’adresse IP est 192.168.1.30.
    – Tu ne peux effectivement pas utiliser le même port 8080 pour deux services différents. Les ports servent à différencier les services. Comme je le mentionne, tu peux utiliser « -p 9090:8080 » pour qbittorrent et y accéder par http://adresse-ip-machine:9090.
    – Si tu veux y accéder depuis l’extérieur de la maison, alors tu rediriges le 9090 interne vers celui ton choix en externe, mais le plus simple est de faire 9090 sur 9090, comme ça tu as la même adresse en internet et en externe.
    – Wireguard est plus récent que OpenVPN, et sans doute plus efficace ; mais plus récent, ça veut aussi dire moins d’expérience dessus. Après, c’est à toi de voir, tu peux lire cet article. Il faudra ensuite trouver un container qui combine qb et wireguard, mais cela doit exister j’imagine.
    – La connexion VPN est chiffrée, c’est le principe : tu crées un tunnel entre Mullvad et ta machine, par lequel tout le trafic va passer. Les certificats, c’est pour le protocole HTTPS (web). Et effectivement, je n’y accède pas de l’extérieur, je n’ai donc pas besoin de certificat pour accéder à la WebUI.

    Pour revenir à ton problème d’accès à l’interface de QBittorrent, tu peux aller voir les logs de qbittorrent : chez moi, le fichier qbittorrent.log est dans /srv/dev-disk-by-label-DATA/AppData/Qbittorrent/qBittorrent/data/logs. Et tu y verra typiquement ceci si tout est bon : Web UI: Now listening on IP: *, port: 8080

    1. Bonsoir Pascal.
      Merci pour ta réponse (que je n’avais pas vu de suite). Mon pb est résolu: j’ai juste modifié (un peu au pif!) le paramètre LAN_NETWORK et ça a marché direct! Je n’ai pas encore compris le codage CRID. Il a fallu que je mette 192.168.0.0/24.
      Je retrouve bien l’équivalent dans mon fichier log de ton message à toi.

      Autre chose: dans ton tuto tu dis d’importer le fichier config du fournisseur VPN (extension .ovpn). J’ai cherché un bout de temps pour en final changer juste l’extension du fichier conf que j’avais reçu de Mullvad.
      Il me reste plus qu’à apprendre à manier qbittorent!

      Encore un grand merci. Tes réponses sont bien claires!!!
      Bonne soirée. Didier

      1. Ça veut dire que ton (sous-)réseau est 192.168.0.x (et le mien 192.168.1.x).

        – Une adresse IP est composée sur 4 octets (1 octet = 8 bits), soit : xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx où chaque valeur peut être 1 ou 0. Et donc des adresses IP qui vont de 0.0.0.0 à 255.255.255.255 en binaire. Certaines sont réservées.
        – 192.168.0.0/24 signifie que les 3 premiers octets (24 premiers bits) sont réservés pour identifier le réseau, ici 192.168.0) le dernier octet servant à identifier les machines sur ce réseau, de 1 à 254 (en général, à la maison, ça suffit !).

        Toutes les machines avec une adresse de type 192.168.0.x (donc sur le même réseau) pourront se voir et donc être accessibles directement. Si tu essaies d’accéder à machine avec une adresse 192.168.1.x à partir d’une machine avec une adresse 192.168.0.x, cela ne fonctionnera pas (hors routage) car elles ne sont pas sur le même réseau.

        1. Merci Pascal.
          J’ai encore un petit souci ou plutôt 3:
          – lorsque je quitte qbittorrent, je suis obligé de le relancer à partir d’OMV (en faisant down and up), sinon ça plante …?
          – lorsque je fais une recherche sur qbittorrent (je ne suis pas familier) j’ai un message (classique apparemment) d’erreur concernant Jackett (connection error getting indexer list). Lorsque je vais voir le fichier jackett.json, il faut apparemment donner son ‘API key’. Je ne sais pas où le trouver…
          – je suis retourné sur le site de Mullvad pour essayer de trouver une info. Sur le site il me dit que je ne suis pas connecté. Il propose de définir ses appareils :?? Je doute qu’il s’agisse de mon serveur NAS, puisque les fichiers de config ont déjà été déclarés…. Leur support technique ne me parle que de WIguard..
          STP, aurais tu quelques idées (encore !)
          Bonne soirée. Didier

  3. Je reviens sur mon message précédent. J’ai installé finalement Jackett qui était proposé sur OMV. Dans les fichiers de config j’ai pu trouver le paramètre API-KEY.
    Le pb de MullVad non connecté est une incompréhension de ma part.
    Il me reste le pb de lancements de Qbittorrent consécutifs….

    1. Didier,
      J’ai l’impression que ça part un peu dans tous les sens, donc je vais te faire une réponse pour ce qui concerne cet article, mais pour le reste c’est à toi de chercher et surtout d’apprendre. Tu ne connais pas Qbittorrent ? lis la doc, va sur les forums, etc…

      Tu fais (j’ai l’impression) beaucoup de choses sans les comprendre, comme ton réseau IP en 192.168.1 ou en 192.168.0. Je le signale pourtant clairement dans ce tuto : « La valeur de LAN_NETWORK dépend bien sûr de votre réseau local. ». Donc si tu ne sais pas quel ton réseau (attribué par la freebox), on ne mets pas des valeurs au hasard, on essaie de comprendre (et d’apprendre).

      Idem pour ton fichier .ovpn : renommer un .conf en .ovpn, c’est du grand n’importe quoi, l’informatique ne fonctionne pas comme ça. Les infos à l’intérieur du fichier sont différentes, notamment la clef de chiffrement (certificat).
      Comme ça concerne le tuto, la réponse est qu’il faut choisir « android » comme système pour que Mullvad te propose un fichier .ovpn à télécharger. J’ai trouvé ça en cherchant un peu.

      Il est possible que ton container démarre, mais que la connection VPN ne se soit pas faite. Dans les logs du container tu dois voir des choses comme ça au démarrage [info] Tunnel is not up, retrying puis au bout d’un moment TUN/TAP device tun0 opened. Là c’est bon, le tunnel est créé. Le reste doit suivre avec des infos sur le réseau créé. Comme d’hab, il faut regarder les logs.

      Pour Mullvad et ses « appareils », pose leur la question, ils ont un service de support par mail. De ce que je vois, cela concerne Wireguard, mais je n’ai jamais utilisé ça.

      Enfin, pour le problème « Lorsque je quitte bittorrent », je ne sais pas : je suppose que tu fais un Fichier-Quitter à partir de la web interface de qb ?? quelle est l’idée ??
      Moi je démarre un container ou je l’arrête, c’est comme ça que je l’utilise, ça me parait logique.

  4. Bonsoir Pascal,
    Merci pour tes réponses. C’est évident que je tâtonne, mais je passe beaucoup de temps sur les tutos. Mon pb est qu’il faut apprendre tout en même temps! mea culpa pour le Lan-NETWORK j’aurais du le trouver de façon plus raisonnée, je suis d’accord.
    Pour le fichier .ovpn le fait que ça marche juste en changeant l’extension m’a laissé perplexe, mais ça a marché! J’ai bien le message que tu cites dans le fichier logs du container ‘TUN/TAP device tun0 opened’. Pour MullVad j’avais chargé les fichiers pour la plate forme LINUX, ça me semblait logique. Je fais encore un contresens ?? J’avais cherché les fichiers .ovpn sans rien trouver et effectivement Mullvad propose un fichier .ovpn pour la plateforme Android. Et c’est bien un fichier .ovpn qui était réclamé dans le fichier logs. Je vais faire un essai avec ce fichier voir ce que ça va changer.

    Pour quitter qBittorent proprement à partir de la web interface, sans apparemment de pb mainteant, je me déconnecte puis je quitte. Avant je quittais directement.

    Bonne soirée. Didier

    1. Mon pb est qu’il faut apprendre tout en même temps

      => où est l’urgence ? prends ton temps… c’est l’impatience qui te pousse à aller vite probablement.

      Pour le fichier .ovpn, on peut dire que tu as eu de la chance que cela fonctionne. Mais l’approche est très mauvaise. Il n’y a pas de contre-sens, mais si on te demande un fichier ovpn, il faut chercher et ne pas bidouiller ! ;-).

Laisser un commentaire

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