rClone : utiliser unionfs-fuse pour permettre à Couchpotato et Sickrage de lire/écrire sur un Cloud Amazon

acd 19 janv. 2017

EDIT 20.03.17 : depuis la sortie de rClone 1.36 qui supporte le rw, ceci n’est plus utile.

 

Utilisateur et fan de rClone j’en suis très content “mais” il ne supporte pas encore le read/write, c’est l’un ou l’autre, et ça ne changera sans doute pas (tout de suite ?).

Concrètement ça veut dire qu’on peut lire/copier/déplacer depuis un montage via rClone, chiffré ou non. Ça veut aussi dire qu’on peut copier/déplacer directement soit via les commandes rClone move ou rClone copy ou via les commandes Linux move et cp. Mais on ne peut ouvrir un fichier sur un montage rClone pour le modifier, donc en read/write. Alors que c’est typiquement comme ça que fonctionnent SickRage et CouchPotato pour renommer et déplacer les fichiers dans les bons dossiers. Jusqu’alors je me débrouillais via des scripts (rclone move fichier depuis le serveur sur le montage rClone) mais ça ne fonctionnait bien que pour les films. En effet tous les films vont dans le même dossier /racine. En revanche les séries doivent aller dans /Series/SerieA/saisonX et SickRage a besoin de créer ces dossiers. J’avais un truc fonctionnel mais plutôt bancale et basé sur je ne sais combien de scripts… En voulant réinstaller ça sur une nouvelle VM j’en ai bavé, pour pas dire plus, et pas qu’un peu.

Du coup je cherchais un moyen de faciliter tout ça et ma “solution” m’a été confirmée par divers forums : utiliser Unionfs-Fuse. FUSE est un système de fichier utilisé par rClone pour monter un dossier distant sur une machine. Et Unionfs(-Fuse) permet de fusionner 2 dossiers. C’est donc un workaround pratique qui permet de créer un dossier virtuel supportant le read/write, en assemblant mon dossier /local (sur lequel je peux lire et écrire) et mon /montage chiffré rClone, lui en lecture seule. De cette manière SickRage ne verra que le /dossier unifié, dans lequel il pourra lire et écrire alors qu’en fait il ne fera que lire le /montage rClone et écrire dans mon /dossier local. C’est la magie de Linux ça :p

Il suffit ensuite de simplement mettre en place un unique script qui va déplacer tout le contenu du dossier /local vers le /montage rClone et le tour est joué : tout sera bien stocké sur Amazon et portant SR et CP pourront lire et écrire comme ils veulent.

 

  1. Arborescence Amazon Cloud
  2. Arborescence serveur
  3. Unionfs-Fuse
  4. Script de déplacement des fichiers sur ACD
  5. Configuration de CouchPotato : exemple avec Usenet/SABnzb
  6. Configuration de SickRage : exemple avec BitTorrent/ruTorrent

 

 

 

Arborescence Amazon

Je passe sur l’installation et la configuration de rClone qui se trouvent dans mon tutoriel à ce sujet mais mon contenu chiffré est stocké dans le dossier /Enc sur Amazon. Et dans ce dossier /Enc j’ai ajouté ceux-ci, afin d’organiser au mieux tout ce petit monde :

  • Animes
  • Comics
  • Concerts
  • Docs
  • Ebooks
  • Films
  • Flac
  • Jeux
  • Series
  • Softs
  • Spectacles
  • Stuff pour le fourre-tout

Mon Amazon chiffré est monté via rClone sur mon serveur dans /home/dan/Enc_ACD. Vous avez ici mes paramètres de montage.

 

 

 

Arborescence locale

C’est bien de vouloir fusionner mais pour que ça marche il faut que les dossiers de part et d’autres correspondent. Du coup j’ai mis en place la même arbo sur mon serveur (le dossier /temp est un test), dans le dossier /home/dan/Pre. 

dan@ACD_One_2:/home/dan# ls /home/dan/Pre/
Animes Comics Concerts Docs Ebooks Films Flac Jeux Series Softs Spectacles Stuff temp

Comme ça je n’aurai qu’à fusionner /home/dan/Pre et /home/dan/Enc_ACD plutôt que /home/dan/Pre/Films avec /home/dan/Enc_ACD/Films, /home/dan/Pre/Series avec /home/dan/Enc_ACD/Series etc. Et qui dit “fusionner” dit “dossier “global”, j’ai donc créé, avec mon esprit hyper créatif encore une fois, /home/dan/Union  \o/  

/Union sera donc LE dossier qui servira pour tout : SickRage, CouchPotato, HeadPhones, Emby, Plex (oui, je compte l’installer et le tester, un jour), SubSonic…

 

 

 

Unionfs-fuse

L’installation est on ne peut plus simple, ici sur Debian.

sudo apt-get update
sudo apt-get install unionfs-fuse

La configuration l’est tout autant et passe, dans mon cas, par un script. Comme j’en ai marre d’avoir 15.000 scripts, j’ai ajouté le montage unionfs-fuse à mon script de montage rClone. Et ça donne

#!/bin/bash

# Montage remote ACD chiffré
/usr/sbin/rclone mount \
--allow-non-empty \
--allow-other \
--max-read-ahead 2G \
--acd-upload-wait-per-gb=3m0s \
--acd-templink-threshold 9 \
--checkers 2 \
--transfers 2 \
--bwlimit 100M \
--timeout 10m0s \
--ignore-existing \
--no-check-certificate \
--retries 5 \
--stats 0 \
--log-file /root/ACD.log \
ACD_Enc: /home/dan/Enc_ACD/ &
exit

# Montage remote ACD
/usr/sbin/rclone mount \
--allow-non-empty \
--allow-other \
--max-read-ahead 2G \
--acd-upload-wait-per-gb=3m0s \
--acd-templink-threshold 9 \
--checkers 2 \
--transfers 2 \
--bwlimit 100M \
--timeout 10m0s \
--ignore-existing \
--no-check-certificate \
--retries 5 \
--stats 0 \
--log-file /root/ACD.log \
ACD_Emby: /home/dan/ACD/ &
exit

#Montage Unionfs-Fuse
unionfs-fuse -o cow -o allow_other /home/dan/Pre=RW:/home/dan/Enc_ACD=RO /home/dan/Union/
exit

Le allow-other permet d’en donner l’accès aux autres utilisateurs de la machine. Utile si vous installez/lancez des logiciels avec leur propre user, comme c’est souvent le cas. Cette option nécessite cependant de décommenter le (retirer le #) user_allow_other dans /etc/fuse.conf

Voici ce que donne /Union une fois monté :

root@ACD_One_2:/home/dan/scripts# ls /home/dan/Union/
Animes Comics Concerts Docs Ebooks Films Flac Jeux Series Softs Spectacles Stuff temp

 

 

 

Déplacement des fichiers sur Amazon

Si Unionfs-fuse permet de ne voir qu’un seul et même dossier il ne faut pas oublier que derrière /Union ce cachent en fait mon dossier local /Pre, qui est en lecture/écriture, et /Enc_ACD, mon montage Amazon via rClone, qui lui n’est qu’en lecture. Il faut donc évidemment déplacer le contenu de /Pre vers Amazon. Ça ne changera rien pour CouchPotato ou SickRage qui ne voient que /Union en revanche ça permettra de stocker le contenu sur Amazon et non mon serveur.

Pour se faire je suis toujours en train de tester 2 solutions pour lancer un script de type “rclone move” :

  • via inotify-wait, script déclenché X minutes après le dernier accès en écriture sur un fichier,
  • via CRON tout simplement, le script étant lancé toutes les 30 ou 60 minutes. Le plus simple, pour le moment du moins.

Voici mon script qui déplace les fichiers vers le Cloud Amazon. Je précise que ça n’a aucun lien avec les fichiers éventuellement en seed dans ruTorrent etc.

#!/bin/bash


# Nom du script .. : rclonemove.sh
# Date ........... : 01.2017
# Auteur ......... : Aerya | upandclear.org
# Description .... : Script de déplacement du contenu d'un répertoire vers un Amazon Cloud Drive chiffré
# Prérequis ...... : Tutoriel rClone Amazon Drive Cloud chiffré | http://bit.ly/2fgTAZE
# Spécificités ... : Options Amazon Cloud Drive | http://rclone.org/amazonclouddrive/#specific-options


# Variables ...... : A définir ici et ne pas modifier la suite du script
# TYPE ........... : Copie ou déplacement du contenu du dossier source
# SDIR ........... : Dossier source
# rACD ........... : Remote Amazon Cloud Drive chiffré cible
# RDIR ........... : Dossier cible 
# CONF ........... : Fichier de configuration rClone
# LOG ............ : Fichier de log
TYPE='move'
SDIR='/home/dan/Pre/'
rACD='ACD_Enc:'
TDIR='/'
CONF='/home/dan/.rclone.conf'
LOG='/home/dan/logs/rclonemove.logs'


# Script ......... : NE PAS MODIFIER

/usr/sbin/rclone "$TYPE" "$SDIR" "$rACD$TDIR" --config="$CONF" -c --no-traverse --min-age 20m --delete-after --log-file="$LOG"

–no-traverse : pas de scanne du dossier cible, permet de gagner un peu de temps

–min-age 20m : ne traite que les fichiers de plus de 20 minutes, ce qui évite qu’il traite un fichier en cours de renommage/déplacement en cas de mauvais timing entre CP/SR et le script

–delete-after : effacement des fichiers source après leur déplacement

 

 

 

Configuration de CouchPotato (Usenet/SABnzbd)

Le principe de CP étant de télécharger tout seul mais aussi de renommer, je fonctionne en 2 étapes. Il va demander à l’outil de DL, SABnzbd ici, de télécharger le film dans /home/dan/Films. CP va ensuite venir prendre le film dans ce dossier, le renommer et le déplacer (Usenet) ou le copier (BitTorrent) dans /home/dan/Union/Films.

C’est vraiment accessoire mais si vous voulez votre bibliothèque de films dans CP

Avec ruTorrent, par exemple, CP peut directement lui dire dans quel dossier télécharger un film. Avec Usenet il faut passer par la catégorie adéquate créée dans SABnzbd/NZBget.

Et la création de la catégorie dans SABnzbd

Une fois que CP trouve le film sur Usenet il charge le .nzb dans SABnzbd, dans la catégorie “Films”

Mon film téléchargé est donc dans /home/dan/Films. CP vient ensuite le traiter (renommer) et le déplace dans /home/dan/Union/Films. On peut dors et déjà rafraîchir Plex/Emby/whatever et le film sera alors listé dans votre vidéothèque. Pour autant, il est techniquement toujours sur le serveur (dans /home/dan/Pre/Films).

root@ACD_One_2:/home/dan/Pre/Films# ls
Regression.2015.DTS.1080p.Blu-ray.H264.lost.mkv

C’est là qu’entre en jeu le script “rclonemove.sh” qui va, toutes les 30 minutes, déplacer les fichiers sur le Cloud Amazon chiffré. On voit ici le transfert vers Amazon

Et voici le log (/home/dan/logs/rclonemove.log)

2017/01/19 18:31:03
Transferred:   865.625 MBytes (14.000 MBytes/s)
Errors:                 0
Checks:                 0
Transferred:            0
Elapsed time:      1m1.8s
Transferring:
 * ...ssion.2015.DTS.1080p.Blu-ray.H264.lost.mkv:  9% done, 14.389 MBytes/s, ETA: 9m22s

...

2017/01/19 18:39:03
Transferred:   8.747 GBytes (16.531 MBytes/s)
Errors:                 0
Checks:                 0
Transferred:            0
Elapsed time:      9m1.8s
Transferring:
 * ...ssion.2015.DTS.1080p.Blu-ray.H264.lost.mkv: 100% done, 6.536 MBytes/s, ETA: 0s

Et voilà, le film est bien dans /home/dan/Enc_ACD/Films, le Cloud Amazon chiffré

root@ACD_One_2:/home/dan/Enc_ACD/Films# ls
Regression.2015.DTS.1080p.Blu-ray.H264.lost.mkv

Et bien entendu toujours disponible dans Emby, par exemple.

 

 

 

Configuration de SickRage (BitTorrent/ruTorrent)

Même principe qu’avec CP, ça fonctionne en 2 étapes. On indique à SR qu’on stocke nos séries dans /home/dan/Union/Series, il demande à ruTorrent de les télécharger dans /home/dan/Series. Ainsi SR vient les traiter (renommer) et les déplace dans leur dossier final /home/dan/Union/Series. Où, encore une fois, elles ne sont réellement que dans /home/dan/Pre/Series, le script “rclonemove.sh” vient alors les copier sur le Cloud Amazon chiffré.

Et j’ai bien mes séries sur mon Cloud, j’y accède ici après l’avoir monté sur mon PC perso et via Emby

 

 

Mots clés