Compliqué de gérer deux mois de vacances scolaires alors qu’on travaille ! Qui plus est, il vaut parfois mieux rester chez soi, plutôt que d’aller affronter les hordes de foules écumantes aux lèvres, les feux de forêts ou diverses restrictions, ou pire, les crêpes industrielles noyées à la bombe chantilly à dix euros !
Dans ce tutoriel, nous allons dire NON au tourisme frénétique et OUI à l’abandon des activités instagrammable et qui polluent. Pour cela, je vais tenter d’expliquer comment économiser des semaines de vacances stressantes ainsi qu’une facture salée de centre aéré à vous et vos enfants.
Certains l’auront compris, nous allons automatiser la recherche et téléchargement de torrents vidéos concernant Linux afin d’éduquer les enfants aux bienfaits du monde open-source et de combler les manquements de l’éducation nationale en la matière. Inutile de le dire, nous allons éviter par pure éthique de leur télécharger la dernière mouture de Barbie, pour les préserver d’un ramollissement précoce du lobe frontal.
Si tout le monde connait les clients torrent, peu utilisent les seedbox disponibles sur le web. Une seedbox a l’intérêt d’être un service tournant directement sur les serveurs d’un centre de données, profitant d’un fort niveau de service et disponible 24/7. Vous y connectez avec votre PC ou téléphone, lancez un torrent, éteignez tout chez vous, et revenez plus tard afin de récupérer le fichier. Grâce à la vitesse et la disponibilité élevée du torrent, le téléchargement est généralement très rapide et vous pouvez respecter facilement votre ratio. Aucun torrent n’est partagé de votre réseau domestique et l’utilisation d’un VPN n’est plus justifié.
Le hic provient des étapes de veille, de lancement et de rapatriement des fichiers. Prenons une série de tutos concernant le Raspberry pi en dix épisodes, avec un épisode diffusé par semaine. Il faudra se rappeler des dates de sortie des tutos, et venir scrupuleusement lancer son torrent toutes les semaines pour rapatrier le fichier sur votre serveur ou disque dur local. Pas très sexy comme approche, et surtout, très chronophage.
La suite de services Servarr incluant Sonarr, Radarr, Lidarr, Prowlarr (ainsi que d’autres) a pour but d’automatiser le processus quasi totalement :
- Vous recherchez votre série favorite et l’enregistrez sur Sonarr,
- Sonarr contacte Prowlarr qui est une base de données des trackers torrent,
- La recherche de la série s’effectue et les épisodes disponibles envoyés au client bittorrent pour téléchargement sur la seedbox,
- Dès le fichier disponible, il est récupéré par Sonarr qui lui adjoint des posters et autres méta-données, et lui donne un nom digeste, avant d’en informer votre serveur média. D’autres modes de notifications sont aussi possibles,
- La série continue d’être monitorée et dès le prochain épisode disponible, Sonarr va effectuer les mêmes opérations de téléchargement et de rapatriement,
- Vous vous installez, lancez votre lecteur média et consultez les vidéos disponibles à la lecture. Si vous prenez une série en cours, vous pouvez monitorer uniquement la dernière saison.
- Au fil du temps, Sonarr ou Radaar mettent à jour les fichiers suivis si une meilleure version est disponible, ex. une version en 1080p viendra remplacer une version 720p si c’est ainsi paramétré.
Radarr effectue les mêmes opérations, mais est dédiée aux longs-métrages.
Idem pour Lidarr qui est cependant dédié à la musique.
Prowlarr gère simplement une liste de serveurs torrent qui pourra être synchronisé automatiquement avec Radarr, Sonarr et Lidarr, entre autres. Cela évitera la tâche rébarbative de devoir renseigner les trackers à chaque fois qu’ils tombent en rade.
Afin de compléter cette suite, nous ne pouvons que suggérer l’excellent serveur de médias Jellyfin, entièrement gratuit, performant et customisable à souhait.
Alors que l’installation de la suite Servarr sur Linux (ou autre) est simple, les problèmes démarrent quand le client torrent est distant, sur une seedbox, par exemple. Deux éléments sont clés :
- Le mapping des répertoires distants aux répertoires locaux, et
- La configuration d’un mode de rapatriement des fichiers vers soi.
Nous allons étayer ces deux éléments et passer rapidement sur les autres, car le wiki https://wiki.servarr.com/de Servarr est plutôt bien fourni. Procédons par étapes sur Proxmox :
Etape #1 : Créer un conteneur et installer Debian
Nous allons créer un CT (container) sur Proxmox afin de minimiser l’utilisation des ressources.
Clic droit sur le noeux proxmox et créer une nouvelle CT.
Il est important de décocher "Unprivileged container" si vous souhaitez rattacher des partages réseau à ce container (ex. si votre répertoire média est sur un serveur samba/SMB/NFS dédié).
Pour ce qui est de l’image Debian utilisée, le dernier Template en date pour votre système devrait faire l’affaire.
Dans les options, activez fuse, cifs et nesting.
Pour ce qui est des ressources, j’ai choisi 3 Go et 2 cœurs, le temps de l’installation et du rodage des services. Si l’utilisation est bien en dessous de ce qui a été provisionné, nous pouvons facilement revoir ces valeurs à la baisse.
Je conseille vivement d’installer la suite Servarr sur un SSD et les médias sur un disque classique, plus gros.
Pour finir, nous laissons le réseau IPV4 en dynamique car nous allons fixer l’adresse IP à partir du routeur/box.
On termine le setup et le CT se lance pour la première fois.
Si vous avez configuré Proxmox Backup Server, c’est le bon moment de rajouter ce CT à votre liste de sauvegardes, sous :
Datacenter > Backup > Job
Etape #2 : Montage des répertoires réseau
Nous allons rajouter nos répertoires réseau (SMB dans notre cas) au CT, car nous ne souhaitons pas stocker de gros fichiers vidéos sur le même disque que le serveur, en utilisant le protocole smb. Pour cela, nous utilisons le service autofs qui a l’avantage d’effectuer le montage/démontage de façon dynamique et transparente.
sudo apt install autofs -y
sudo nano /etc/auto.master
Nous rajoutons une simple ligne dans /etc/auto-master : le premier chemin indique la racine du point de montage sur la machine locale. Le second chemin indique le fichier qui contient les cibles de montage. Donc, si on rajoute une ligne « movies » dans le fichier auto.cifs, autofs va créer le répertoire /mnt/cifs/movies et y mapper le serveur correspondant.
Ensuite, nous définissions un fichier /etc/auto.cifs qui permettra de mapper automatiquement un répertoire local au répertoire partagé par smb. Nous créons ici trois entrées, la première pour les séries, la seconde pour les longs-métrages et la dernière, pour le répertoire temporaire de téléchargement.
shows -fstype=cifs,gid=1000,uid=nobody,rw,guest,iocharset=utf8,vers=3.02,noperm ://192.168.xxx.xxx/shows
movies -fstype=cifs,gid=1000,uid=nobody,noperm,rw,guest,iocharset=utf8,vers=3.02 ://192.168.xxx.xxx/movies
downloads -fstype=cifs,gid=1000,uid=nobody,noperm,rw,guest,iocharset=utf8,vers=3.02 ://192.168.xxx.xxx/downloads
Et on lance le service autofs en vérifiant si c’est green !
sudo service autofs enable
sudo service autofs start
sudo service autofs status
Si tout est vert, nous vérifions que les répertoires réseau sont bien montés (modifiez le chemin de cet exemple par le vôtre) :
ls /mnt/cifs/
Les répertoires montés (/shows, /movies, /downloads) devraient s’afficher comme par magie.
Gardons ces répertoires en tête afin de les utiliser dans Sonarr et Radarr un peu plus tard.
Etape #3 : Installation de Sonarr, Radarr, Prowlarr, (Jellyfin, Webmin)
Nous suivons les étapes d’installation comme indiquées sur le wiki :
Sonarr :
https://wiki.servarr.com/sonarr/installation/linux
Radarr :
https://wiki.servarr.com/radarr/installation/linux
Prowlarr :
https://wiki.servarr.com/prowlarr/installation/linux
Optionnellement, Jellyfin/Plex/Kodi sur le même serveur ou ailleurs :
https://jellyfin.org/docs/general/installation/linux
Optionnellement, Webmin pour gérer le CT, si vous souhaitez vous économiser des lignes de commande :
https://webmin.com/download/
Optionnellement, Glances pour monitorer les ressources, et si « top » vous fait mal aux yeux :
https://nicolargo.github.io/glances/
Etape #4 : Configurer les répertoires distants de la seedbox avec lftp
Avant de lancer les services Prowlarr, Sonarr, Radarr, nous allons leur donner accès au répertoire distant de la seedbox. Un petit bémol s’impose, car cette étape est cruciale.
Il y a plusieurs façons de rapatrier des fichiers automatiquement chez soi (en ignorant les méthodes manuelles) :
- Nous pouvons utiliser sshfs, qui permet de monter un répertoire distant via ssh et fuse,
- ftpfs est une autre possibilité qui permet de monter un répertoire distant via ftp et fuse,
- lftp qui est un client ftp très performant et efficace, mais ne sera pas monté comme un système de fichier,
- Applications de synchronisation comme Sycthing, Resilio, etc.
sshfs et ftpfs peuvent être utilisés pour monter des répertoires distants directement dans votre système de fichier local, mais peuvent être très lents et fonctionnent fichier après fichier. Syncthing et Resilio impliquent qu’il y a un service additionnel qui tourne localement afin de synchroniser les fichiers et que les ports ouverts pendant la synchro soient sécurisés.
A contrario, lftp fonctionne comme un bon client FTP (ex. Filezilla) automatique, avec plusieurs fichiers et segments du même fichier, en parallèle. C’est de loin le client le plus efficace afin de rapatrier de gros fichiers chez soi. Par contre, il sera lancé via un script et déclenché par cron pour automatiser la tâche.
Nous l’installons simplement des sources Debian :
sudo apt install lftp -y
Ensuite, nous créons un petit script qui :
- Se connectera au serveur ftp du seedbox,
- Copiera automatiquement tous les fichiers localement, et en parallèle,
- Renommera ces fichiers le temps du téléchargement afin que Sonarr et Radarr ne les détectent pas comme des vidéos complètes, ce qui risquerait de démarrer leur importation, et produirait des vidéos corrompues,
- Terminera le téléchargement en parallèle, avant de réassembler les morceaux de fichier et les renommera comme le fichier d’origine, et
- Effacera les fichiers sources sur la seedbox afin de libérer l’espace.
Du point de vue de Sonarr ou Radarr, c’est comme s’ils avaient lancé un téléchargement et que les fichiers devenaient disponibles localement quelque temps après la fin du téléchargement, annoncé par le client torrent, donc, tout à fait transparent.
Note : Il faudra comprendre que la seedbox sera configuré pour avoir une copie des fichiers toujours en seed afin d’atteindre le ratio requis par les trackers. La copie supprimée automatiquement par le script n’est qu’un lien dur (hardlink).
Créons un fichier pour le script :
nano /home/lftp.auto.sh
Dans ce fichier, nous allons copier ceci :
!/bin/bash
# Mettez à jour votre nom d'utilisateur seedbox
login="votre nom d'utilisateur"
# Mettez à jour votre mot de passe seedbox
pass="votre mdp"
# Mettez à jour l'adresse de votre seedbox
host="serveur seedbox en question"
# Mettez à jour le répertoire distant de votre ftp seedbox où se trouvent les fichiers terminés
remote_dir="/files/_terminado/"
# Mettez à jour le répertoire local sur votre machine/réseau où vont être rapatriés les fichiers terminés
local_dir="/mnt/cifs/downloads/_terminado"
# Ça c'est la partie qui vérouille un fichier en cours de téléchargement - pas de peine de modifier.
base_name="$(basename "$0")"
lock_file='/tmp/'"$base_name"'.lock'
trap 'rm -f '"$lock_file"'' SIGINT SIGTERM
if [[ -e "$lock_file" ]]
then
echo "$base_name is running already."
exit 1
else
touch "$lock_file"
lftp -u $login,$pass $host << EOF
# Ça c'est les options lftp - pas la peine de modifier
set ftp:list-options -a
set sftp:auto-confirm yes
set ftp:ssl-allow no
set mirror:parallel-directories yes
set xfer:use-temp-file yes
set xfer:temp-file-name *.lftp
set mirror:use-pget-n 3
mirror -v -c --loop -P5 --Remove-source-dirs --log='/var/log/'"$base_name"'.log' "$remote_dir" "$local_dir"
quit
EOF
rm -f "$lock_file"
trap - SIGINT SIGTERM
exit 0
fi
Les champs en gras indiquent les valeurs à mettre à jour :
- Le champ « set mirror:use-pget-n 3 » indique le nombre maximal de segments pour qu’un fichier puisse être découpé et téléchargé en parallèle. Cela dépend des capacités de votre seedbox et sont à réajuster si les connexions sont refusées,
- L’option « P5 » indique le nombre de fichiers à télécharger en parallèle. Cela dépend des possibilités de votre seedbox et sont à réajuster si les connexions sont refusées.
On sauvegarde le script et on le passe en exécutable :
sudo chmod u+x lftp.auto.sh
Afin de tester le script, nous pouvons uploader un fichier bidon sur la seedbox manuellement avec Filezilla et ensuite lancer le script à partir de son ordinateur :
./lftp.auto.sh
Si tout a fonctionné, le script aura lancé lftp qui nous aura rapatrié le fichier de notre seedbox, vers le répertoire local configuré. Le fichier de la seedbox aura disparu suite à cette importation. La boucle est bouclée, passons à l’automatisation de lancement de ce script.
Pour que ce script soit exécuté automatiquement toutes les 5 minutes, nous rajoutons une ligne à la table de configuration de cron ainsi :
crontab -e
# A rajouter au bout du fichier pour lancher automatiquement le script toutes les 5 minutes
*/5 * * * * /home/lftp.auto.sh
Bravo pour cette étape, car c’est la clé d’une importation efficace et automatisée.
Etape #5 : Configurer Prowlarr
On peut lancer les services Prowlarr, Sonarr et Radarr si tel n’est pas déjà le cas :
sudo sevice prowlarr start
Vérifiez que tout fonctionne :
sudo service prowlarr status
On se connecte à l’interface du service Prowlarr et on configure un utilisateur et un mot de passe :
http://addresse_du_serveur:9696
Pour rajouter des indexeurs, il suffit de cliquer sur Add Indexer et d’effectuer ses choix.
Nous n’allons pas synchroniser avec App Indexers pour le moment, car Sonarr et Radarr ne sont pas encore configurés.
Etape #7 : Configurer Sonarr
On se connecte à l’interface Sonarr :
http://addresse_du_serveur:8989
Dans Settings > Download Client, nous allons spécifier les détails de notre seedbox. Après avoir renseigné les infos, le test doit être conclusif avant de continuer. Souvent, le chemin du RPC de son client torrent est compliqué à trouver. Il faudra vérifier les pages d’aide de son service seedbox afin de s’en munir. Dans mon cas, c’est :
RPC/identifiant.utilisateur.seedbox
En bas de la même page, nous pouvons configurer les mapping à distance des répertoires. Cela est utile, car même si le client bittorrent arrivait à télécharger un fichier, notre Sonarr ne le trouverait pas dans ses répertoires locaux. Le fichier serait indiqué comme « téléchargé » mais Sonarr produirait une erreur indiquant que le fichier en question est introuvable.
Nous effectuons donc un nouveau mapping :
Host : addresses du seedbox
Remote Path : chemin où se trouvent les fichiers téléchargés
Local Path : chemin local où Sonarr ira chercher les fichiers téléchargés.
Nouveau bémol : L’emplacement par défaut de téléchargement sur la seedbox est souvent :
/home/utilisateur/files
Il faudra noter que ce n’est pas le même emplacement que le répertoire dans lequel lftp (étape 4) va récupérer ses fichiers, qui pour rappel était : « /files/_terminado/ ». Cela est fait exprès. Si lftp récupérait directement les fichiers dans « /files », non seulement il le ferait avec des fichiers (incomplets) en cours de téléchargement par le client torrent, mais il tenterait aussi de les supprimer suite à leur rapatriement. Cela causerait une extinction de toute vie intelligente dans l’univers.
Trève de sornettes, nous allons indiquer à notre seedbox de copier les fichiers terminés dans un répertoire séparé avec la fonction automove sur RuTorrent :
Il faudra bien indiquer la fonction « Hard Link » qui fonctionne comme ci le fichier était effectivement copié, mais qui crée simplement une référence au fichier existant. Cela économise de la place et se fait quasi instantanément. Pour créer un répertoire sur sa seedbox, il faudra passer par le « File Manager ».
Résumons les faits dans le bon ordre :
- Nous avons créé un répertoire pour les fichiers terminés sur la seedbox,
- Ce répertoire est lu toutes les 5 minutes par lftp sur notre machine,
- lftp copiera tous les fichiers localement dans /mnt/cifs/downloads/_terminado,
- lftp supprimera sur la seedbox, les liens des fichiers rapatriés se trouvant dans /home/utilisateur/files/_terminado
- la « vraie » copie des fichiers restera en seed, sur la seedbox, dans le répertoire racine : /home/utilisateur/files
- Sonarr cherchera les fichiers terminés sur /mnt/cifs/downloads/_terminado,
- Suite à cela, une importation des fichiers se fera par Sonarr, à son emplacement final, dans /mnt/cifs/shows
Il nous reste à indiquer à Prowlarr qu’il existe une instance de Sonarr fonctionnel afin de pouvoir synchroniser les indexeurs de façon automatique et globale :
À l’emplacement de la clé API demandée par Prowlarr, il suffira de copier la clé API de Sonarr qui se trouve dans :
Settings > General
Etape #8 : Configurer Radarr
Les mêmes étapes s’appliquent à Radarr et Lidarr. Tous les fichiers (séries, longs-métrages, musiques) peuvent se trouver dans le même répertoire « /home/utilisateur/files/_terminado » sur la seedbox. Ils seront copiés localement à « /mnt/cifs/downlods/_terminado ». Radarr cherchera dans le fouillis et rapportera que les fichiers qu’il reconnait, c’est-à-dire, ceux lancés à partir de son interface.
Il ne faudra pas oublier de renseigner les clés API de Radarr et Lidarr dans Prowlarr si vous souhaitez que les indexeurs se mettent à jour automatiquement.
Conclusion
L’étape finale consistera à supprimer manuellement les fichiers déjà importés par Sonarr, Radarr et Lidarr qui se trouvent dans /mnt/cifs/downloads/_terminado. Concernant les fichiers distants sur la seedbox, ruTorrent les supprime quand le ratio cible d’une seed est atteint. Parfois cela doit se faire manuellement, mais c’est un moindre mal, car l’essentiel du boulot est désormais automatisé.
Afin d’éviter les changements d’adresses intempestives du serveur, il faudra aussi de rappeler de lui donner un bail permanent dans son routeur/box.
La suite Servarr est gavée de fonctionnalités qui permettent de peaufiner le comportement du système. À vous d’explorer les profiles customisés, sous-titres automatiques, notifications diverses, listes de vidéos sur Trakt, sans oublier la notification automatique à Jellyfin ou Plex pour une mise à jour de leurs bases de données.
Et pour le conseil de la fin, n’exposez pas ces applications sur internet au risque d’ouvrir des brèches dans la sécurité de votre serveur maison. Le mieux encore est d’installer un VPN afin d’accéder uniquement au contenu du serveur média, et en limitant les ports des services Servarr au sous-réseau local.
Et dans le doute, rebootez !