rClone, GDrive et PlexDrive : exemples de configuration

gdrive 7 mai 2019

Salut, voici ma configuration de rClone pour GoogleDrive avec PlexDrive. Y’a plusieurs solutions, y’a sans doute mieux mais c’est 100% fonctionnel. Cet article fait suite à la création de ce sujet sur MDD.

Je ne rentre pas dans les détails, je pars du principe que vous avez les bases Linux, que vous avez lu au sujet de/utilisez rClone/PlexDrive etc. Je me contente de partager mon setup (complet).

  • OS : Debian/Ubuntu
  • rClone permet d’envoyer/lire des fichiers sur GoogleDrive, tout en chiffrant. Google scanne ses stockages à la recherche de pédopornographie notamment. De mon point de vue “c’est bien” mais Google scanne, c’est ce qu’il faut retenir.
  • PlexDrive : permet de générer un cache de son espace de stockage pour ne pas se faire bannir 24 par Google avec trop de requêtes
  • Il faut installer rClone & le configurer comme je l’avais fait avec Amazon (là il faut prendre GDrive). Vous pouvez aussi utiliser votre rclone.conf
  • Il faut installer PlexDrive et le configurer. Ensuite il va indexer le contenu de votre GDrive (s’il est vide c’est pas grave, vous gagnez du temps)
  • Il faut installer fuse (sudo apt install fuse -y) et décommenter “user_allow_other” dans /etc/fuse.conf

Ça fonctionne avec un GDrive déjà rempli mais s’il n’est pas chiffré et que vous voulez le faire il faudra tout télécharger, configurer rClone avec un GDrive chiffré et renvoyer votre contenu.

Arborescence des dossiers (là encore c’est mon setup, vous pouvez faire autrement) :

  • Tout se passe dans /home/aerya (par simplicité pour mes sauvegardes)
  • Dossier /scripts : les scripts
  • Dossier /System : les services, qui sont à mettre dans /etc/systemd/system
  • Dossier /mnt : les montages

Dossier /mnt :

  • /completed : -accessoire- dossier des fichiers complétés des clients BitTorrent/Usenet
  • /encrypt : montage rClone déchiffré de GDrive (oui je sais, le nom veut dire exactement le contraire…)
  • /gdrive : montage rClone chiffré de GDrive
  • /incoming : -accessoire- dossier de DL en cours des client BT/NG
  • /move : dossier monté via fuse dans /unionfs/. rClone aura pour mission d’envoyer tout son contenu du GDrive
  • /plexdrive : dossier -cache- de Plexdrive
  • /unionfs : dossier des montages via fuse de GDrive/Plexdrive/move. Plex, Radarr, Medusa etc lisent tout là-dedans. Le montage global permet d’avoir accès aux fichiers qu’ils soient stockés localement ou sur GDrive (de manière chiffrée.
  • /watched : -accessoire- dossier des .torrent/.nzb qui sont chargés automatiquement dans les clients

rClone.conf

[gdrive]
type = drive
client_id = 
client_secret = 
token = {"access_token":"xxx"}

[gcrypt]
type = crypt
remote = gdrive:/Enc
filename_encryption = standard
password = aaa
password2 = bbb

[crypt]
type = crypt
remote = /home/aerya/mnt/plexdrive/
filename_encryption = standard
directory_name_encryption = true
password = ccc
password2 = ddd

Les scripts. A mettre dans /home/aerya/scripts & chmod a+x

rclone-encrypt.sh

#!/bin/bash
rclone --uid=1000 --gid=1000 --allow-non-empty --allow-other mount crypt: /home/aerya/mnt/encrypt --size-only

rclone-en.sh

#!/bin/bash
rclone --uid=1000 --gid=1000 --allow-non-empty --allow-other mount gcrypt: /home/aerya/mnt/.gcrypt --size-only

rclone.sh

#!/bin/bash
rclone --uid=1000 --gid=1000 --allow-non-empty --allow-other mount gdrive: /home/aerya/mnt/gdrive --size-only

move.sh

#!/bin/bash
LOG="/home/aerya/logs/rclone-en.log"
#EXC1="/SD/**"
EXC2="/Ratio/**"
EXC3="/PreSeries/**"
EXC4="/PreFilms/**"
EXC5="/Repost/**"
EXC6="/BACKUP/**"

sleep 30
while true
do
  echo "$(date "+%d.%m.%Y %T") RCLONE UPLOAD STARTED" | tee -a "$LOG"
rclone move -c -v --copy-links --exclude='**partial~' --exclude="**_HIDDEN~" --exclude=".unionfs/**" --exclude=".unionfs-fuse/**" --exclude="$EXC2" --exclude="$EXC3" --exclude="$EXC4" --exclude="$EXC5" --exclude="$EXC6" --min-age 5m --drive-chunk-size 2G --bwlimit 8M --delete-after --delete-empty-src-dirs --transfers=4 --stats 5s --log-file="$LOG" /home/aerya/mnt/move gcrypt:/
sleep 480
find "/home/aerya/mnt/move/" -mindepth 2 -type d -empty -delete
  echo "$(date "+%d.%m.%Y %T") RCLONE UPLOAD ENDED" | tee -a "$LOG"
done

Les services. A mettre dans /etc/systemd/system. Pour l’activer “sudo systemctl enable xxx” (sans le .service). Pour le lancer “sudo systemctl start xxx” (sans le .service)

move-en.service

[Unit]
Description=Move Service Daemon
After=multi-user.target

[Service]
Type=simple
User=0
Group=0
ExecStart=/bin/bash /home/aerya/scripts/move-en.sh
TimeoutStopSec=20
KillMode=process
RemainAfterExit=yes
Restart=always

[Install]
WantedBy=multi-user.target

plexdrive.service

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

[Service]
Type=simple
ExecStart=/usr/local/bin/plexdrive mount --uid=1000 --gid=1000 -v 5 --fuse-options=allow_other,read_only,allow_non_empty_mount --config=/root/.plexdrive --cache-file=/root/.plexdrive/cache.bolt /home/aerya/mnt/plexdrive
ExecStop=/bin/fusermount -uz /home/aerya/mnt/plexdrive
RemainAfterExit=yes
Restart=always
RestartSec=5

[Install]
WantedBy=default.target

rclone-encrypt.service

[Unit]
Description=RClone Daemon
After=multi-user.target

[Service]
Type=simple
User=0
Group=0
ExecStart=/bin/bash /home/aerya/scripts/rclone-encrypt.sh
ExecStop=/bin/fusermount -uz /home/aerya/mnt/encrypt
TimeoutStopSec=20
KillMode=process
RemainAfterExit=yes
Restart=always

[Install]
WantedBy=multi-user.target

rclone-en.service

[Unit]
Description=RClone Daemon
After=multi-user.target

[Service]
Type=simple
User=0
Group=0
ExecStart=/bin/bash /home/aerya/scripts/rclone-en.sh
ExecStop=/bin/fusermount -uz /home/aerya/mnt/.gcrypt
TimeoutStopSec=20
KillMode=process
RemainAfterExit=yes
Restart=always

[Install]
WantedBy=multi-user.target

rclone.service

[Unit]
Description=RClone Daemon
After=multi-user.target

[Service]
Type=simple
User=0
Group=0
ExecStart=/bin/bash /home/aerya/scripts/rclone.sh
ExecStop=/bin/fusermount -uz /home/aerya/mnt/gdrive
TimeoutStopSec=20
KillMode=process
RemainAfterExit=yes
Restart=always

[Install]
WantedBy=multi-user.target

unionfs-encrypt.service

[Unit]
Description=UnionFS Daemon
Requires=plexdrive.service
After=multi-user.target plexdrive.service

[Service]
Type=simple
User=0
Group=0
ExecStartPre=/bin/sleep 10
ExecStart=/usr/bin/unionfs -o cow,allow_other,nonempty /home/aerya/mnt/move=RW:/home/aerya/mnt/encrypt=RO /home/aerya/mnt/unionfs
ExecStop=/bin/fusermount -uz /home/aerya/mnt/unionfs
TimeoutStopSec=20
KillMode=process
RemainAfterExit=yes
Restart=always

[Install]
WantedBy=multi-user.target

unionfs.service

[Unit]
Description=UnionFS Daemon
Requires=plexdrive.service
After=multi-user.target plexdrive.service
RequiresMountsFor=/home/aerya/mnt/plexdrive

[Service]
Type=simple
User=0
Group=0
ExecStartPre=/bin/sleep 10
ExecStart=/usr/bin/unionfs -o cow,allow_other,nonempty /home/aerya/mnt/move=RW:/home/aerya/mnt/plexdrive=RO /home/aerya/mnt/unionfs
ExecStop=/bin/fusermount -uz /home/aerya/mnt/unionfs
TimeoutStopSec=20
KillMode=process
RemainAfterExit=yes
Restart=always

[Install]
WantedBy=multi-user.target

Enjoy :)

Mots clés