Synchronisation Synology/pCloud

Salut à tous,

Je vois que ça parle en bien de pCloud ici, je me permets de poster ce petit tuto qui permet de mettre en place des tâches de synchronisation entre un NAS Synology et cet espace de stockage en ligne. Le besoin m’est venu car j’aime bien avoir une copie de mes dossiers important sur un cloud et que pCloud n’est pas compatible avec les solutions fournies par Synology (Cloud Sync et Hyperbackup). La solution que j’ai trouvée est donc d’utiliser rclone, qui a en plus l’immense avantage de fonctionner même si la 2FA de pCloud est activée.

Préambule : J’utilise DSM7 sur mon Syno, certaines options peuvent bouger selon les versions.

Prérequis : Installer WSL (Windows Subsystem for Linux) sur Windows (solution utilisée dans le tuto) ou utiliser Linux, cela permet de récupérer le token de pCloud. Je n’ai pas testé avec un Mac)

Z’est bartiiii !

Donc on va commencer par activer le SSH sur le NAS (temporairement pour les ayatollahs de la sécurité qui nous lisent :stuck_out_tongue: )

Donc dans DSM7, il faut aller dans Panneau de configuration > Terminal & SNMP et cocher « Activer le service SSH » :

Ensuite, depuis un terminal (Powershell ou Windows Terminal) se connecter au NAS en SSH :

ssh user@adresse_ip_du_nas

et rentrer le mot de passe du compte

On va passer en root pour installer rclone :

sudo -i

Et on rentre à nouveau le mot de passe du compte connecté

Maintenant qu’on est root, on va pouvoir installer rclone, en récupérant simplement le script d’install depuis le site officiel :

wget https://rclone.org/install.sh

Il faut ajouter les droits d’exécution :

chmod +x install.sh

Et lancer le script d’installation :

./install.sh

Si vous avez une erreur sur l’installation du paquet man pages, vous pouvez l’ignorer, ce ne sera pas utile ici.

rclone est maintenant installé sur le NAS, gardez la connexion ouverte et ouvrez un second terminal, WSL celui-ci.

On va installer rclone également sur cet espace pour pouvoir récupérer le token pCloud dans la config, il faut en effet un accès internet avec navigateur pour ce faire, ce que le synology en SSH ne propose pas.

Dans le terminal WSL, on entre la commande suivante :

curl https://rclone.org/install.sh | sudo bash

Comme précédemment, on fait un sudo donc il faut entrer le mot de passe du compte WSL pour pouvoir terminer l’exécution de la commande

A partir de là, on va pouvoir créer une config rclone, et récupérer le token. On copiera ensuite le contenu du fichier de config présent dans WSL dans le fichier de config de rclone sur le NAS.

Mais on va commencer par ouvrir un navigateur internet et se logger sur pCloud, cela permettra de simplifier la validation de l’accès plus tard.

Une fois cela fait, on lance la commande suivante pour créer le fichier de configuration de rclone dans WSL :

rclone config

On sélectionne ensuite les options suivantes :

-Remote : New remote (n)
-Name : pcloud
-Il faut ensuite indiquer le type de stockage. Ca change un peu selon les versions de rclone, pour moi pCloud était au numéro 35 mais je vous encourage à vérifier dans la liste.
-Client_id : ne rien mettre
-Client_secret : ne rien mettre
-Edit advanced config : No (n)
-Use auto config : Yes (y)

A ce moment là, votre navigateur devrait automatiquement ouvrir la page d’autorisation de pCloud. Dans le cas contraire, un lien vous est fourni dans le terminal que vous devez copier/coller dans la barre d’adresse du navigateur ouvert précédemment.

Le terminal va récupérer automatiquement le code et vous pouvez répondre « Yes this is OK » (y) à la dernière question.

On quitte la configuration de rclone avec la réponse (q) puis on va récupérer le contenu du fichier de config :

cat .config/rclone/rclone.conf

[pcloud]
type = pcloud
hostname = eapi.pcloud.com
token = {"access_token":"UNE_LONGUE_SUITE_DE_CARACTERES","token_type":"bearer","expiry":"0001-01-01T00:00:00Z"}

Retour sur le NAS en SSH, on va s’assurer que rclone a créé sa config (vide) et la créér si ce n’est pas le cas avec la commande touch :

rclone config touch

On va ensuite éditer cette config à l’aide de l’utilitaire VI pour y copier la configuration effectuée sur l’environnement WSL :

vi .config/rclone/rclone.conf

Appuyer sur la touche INSER du clavier pour passer en modification

Clic-droit avec la souris pour coller la configuration

ECHAP sur le clavier pour quitter le mode insertion

Taper ensuite la commande suivante pour sauvegarder et quitter :

:wq

On va pouvoir tester que tout fonctionne avec la commande suivante (qui va lister les répertoires de pCloud, indiquant donc une connexion fonctionnelle)

rclone lsd pcloud:

NB : rclone interroge l’espace distant avec le chemin pcloud:dossier (avec des guillemets en cas de présence d’espace)

(exemple : pcloud:"Automatic Upload/iPhone/" correspond au répertoire dans lequel le client pCloud sur mon téléphone pousse automatiquement les photos et vidéos de l’appareil)

A partir de là, et c’est le défaut de la solution, il semble que le Synology supprime ces changements lors des mises à jour, il faut donc sauvegarder la configuration de rclone dans un autre dossier (qu’on pourra appeler ensuite lors de la synchronisation). L’installation de rclone sera peut-être également à refaire (voir l’exécution du script install.sh en début de tuto)

Je n’ai pas eu de mise à jour de mon Syno depuis que j’ai mis en place cette solution donc je ne peux confirmer ni infirmer cette information trouvée sur le net pour l’instant, je mettrai ce post à jour lorsque j’y aurai été confronté.

Nous allons copier la configuration dans un dossier du NAS (je vous laisserai modifier les chemins selon votre installation), toujours sur le NAS en SSH :

cp .config/rclone/rclone.conf /volume1/nas/rclone/rclone.conf

On va ensuite commencer à mettre en place la synchronisation. J’utilise la commande « rclone sync » qui permet de répercuter les changements effectués en local sur le NAS sur pCloud (seule la destination est modifiée, pas la source, afin d’éviter les pertes de données). Ce n’est pas à proprement parler une sauvegarde, l’idée est d’avoir un miroir en cas de problème (vol ou incendie par exemple)

Pour ce tuto, on va vouloir synchroniser le dossier du NAS /volume1/nas/important vers le dossier pCloud Backups/Nas/Important

Comme on va utiliser une planification, on veut avoir un suivi via des logs, qu’on enregistrera sur le NAS dans /volume1/nas/rclone/journal.log

Tous ces chemins sont évidemment à adapter à votre environnement.

On va donc utiliser la commande suivante :

rclone --config /volume1/nas/rclone/rclone.conf sync /volume1/nas/important pcloud:Backups/Nas/Important -v --log-file=/volume1/nas/rclone/journal.log --exclude @eaDir -P --dry-run

Explication des flags:

--config : Permet d’aller chercher la config (qui a été déplacée précédemment au cas où le NAS efface le fichier lors d’une mise à jour)
-v permet de logger les entrées INFOS, WARNING, ERROR (il manque que le DEBUG qui se récupère avec -vv si besoin)
--log-file : indique le chemin du fichier de log
--exclude @eaDir : Ca c’est pour moi, je n’ai pas besoin d’avoir ces dossiers cachés créés automatiquement par DSM dans mon miroir ^^
-P permet d’afficher la progression, très utile lors de la mise en place des commandes pour vérifier que tout se passe comme prévu
--dry-run : Permet de ne pas faire de changement « pour de vrai » (encore une fois c’est une sécurité le temps de mise en place de la synchro)

Une fois satisfait du déroulement de la commande, on peut enlever le --dry-run et la relancer, qui permettra de faire un premier upload et de vérifier grâce au flag -P que tout s’est bien passé.

Ensuite on va pouvoir planifier cette synchro (enfin !) grâce au planificateur de tâche du NAS (C’est simple et ça fonctionne ^^)

Sur l’interface de DSM, on va dans Panneau de configuration > Planificateur de tâches

Créer > Tâche planifiée > Script défini par l’utilisateur

image

On va ensuite lui donner un nom et définir l’utilisateur qui va lancer la tâche de façon automatique.

Dans l’onglet programmer, on définit la période de synchronisation (j’ai défini celle-ci sur tous les jours à 2h du matin)

Et enfin dans Paramètres de tâche on va coller la commande en enlevant les flags -P et --dry-run qui ne servent à rien. J’ai pour ma part défini un envoi de mail lorsque la tâche plante, mais c’est à l’appréciation de chacun :

Il restera à exécuter la tâche manuellement (ou attendre la prochaine exécution automatique) pour s’assurer en vérifiant le fichier de log que tout se passe comme prévu, et voilà :slight_smile:

Pensez à désactiver l’accès SSH au NAS, pour plus de sécurité !

Pour réaliser ce tuto, je me suis appuyé sur les liens suivants :
https://github.com/ravem/synology-pcloud-and-rclone (Qui a fait la majeure partie du travail on ne va pas se mentir ^^)
rclone sync (la doc de rclone)

En espérant qu’il vous serve comme il m’a servi, pour sécuriser un peu plus vos données importantes avec pCloud en 2FA :slight_smile:

11 « J'aime »

Merci pour le tuto.
On en parlait hier en plus, ça devrait intéresser @AnA-l

1 « J'aime »

Tout le plaisir est pour moi :slight_smile: J’ai passé quelques heures à peaufiner les commandes de synchro le weekend dernier, autant que ça serve à d’autres ^^

@AnA-l s’en fout, il l’a déjà mis en place.
Mais moi qui ai procrastiné, ça va me servir ; j’ai un 2To lifetime qui roupille à cause de leur gestion de webdav.
En revanche, mon projet c’est que ça tourne sous docker, tu saurais faire l’extrapolation @SaKx3 ?

1 « J'aime »

Si on ne veut pas s’embêter avec vi(m) ou nano entre les machines (parceque vi c’est assez obscure quand on débute ^_^) il suffit de répondre « no » ici… rclone se met en attente et dit de taper sur un ordi qui a accès à un browser (notre WSL en l’occurrence) rclone authorize "pcloud"
On fini la conf sur le WSL et ça affiche la chaîne à copier directement dans l’invite de commande rclone qui est en attente sur le NAS.

Petit tip, si vous voulez exclure plusieurs dossier la syntaxe est:
--exclude '{Dossier1,Dossier2,Dossier3,Dossier4}'

Pour exclure des extensions, presque la même chose:
--exclude '*{mkv,mp4}'

Pour ne sauvegarder que des photos par exemple:
--include '*{JPG,DNG,CR2,ARW}'

A noter qu’on ne peut pas avoir à la fois un --include et un --exclude… Dans ce cas là il faut utiliser --filter

3 « J'aime »

C’est mon prochain objectif, parce que si effectivement les màj du Nas obligent à reinstall rclone (même si c’est 3 commandes) ça va me gonfler rapidement ^^ Mais pour l’instant ça marche donc la criticité a baissé pour moi :wink:
J’ai quand même regardé vite fait pour une version Docker mais la doc officielle est pas spécifique pour la version Synology et comme je débute sur cette solution (et en bon noob je me sers beaucoup de la GUI), je galère un peu à la transposer : Install

C’est peut-être mieux sur hub.docker.com, je regarderai quand j’aurai un peu plus de temps (j’ai 15j plutôt chargés là)

@SkullyFM Merci beaucoup pour le « pour aller plus loin » qui pourra effectivement servir :slight_smile: Le tuto était déjà assez long je n’ai pas voulu rentrer plus dans les détails des flags ^^

Moi j’avais prévu d’utiliser cette image

1 « J'aime »

Je note, merci pour l’idée, elle a l’air plus simple/mieux documentée :slight_smile:

Le tuto marche très bien sur Mac aussi sans installation supplémentaire :wink: (ou alors c’est parce que j’avais déjà installé XCode pour les outils Unix qui vont avec :sweat_smile:)

2 « J'aime »

Ouais, moi je l’ai fait dans un docker.
C’etait relou parce qu’il faut recuperer le token sur une autre machine.
C’etait relou parce que le support de docker chez syno, c’est minimaliste.
C’etait relou parce que l’image rclone ne contient pas bash, ce qui limite pas mal les scripts qu’on peut claquer dedans.
C’etait relou, mais ca marche au poil maintenant.

Et mes notes, ca donnait ca :

**Tutorial Pcloud avec Rclone dans un container docker via portainer sur un NAS Synology** SEO BITCH

**Disclaimer**: Je ne suis ni devop, ni sysadmin, ni IT, ni aucun de ces métiers du réseau.
Je n'y connais rien a docker, ni a l'admin Linux a part un stage fait ya 20ans,
sous Slackware, et j'ai pas tellement envie de m'y plonger plus que ça. 
Donc il y a sûrement des dizaines de choses mal faites, en dépit des bonnes pratiques et qui vont faire hurler les gens qui savent.
N’hésitez pas a commenter et a ajouter les bonnes façons de faire, l'idée, c'est que pour l'instant, c'est ptet crade, mais pour/chez moi, ça marche.

Donc, le but, c'est d'automatiser la sauvegarde d'une partie de mon NAS (Synology DS918+) sur pCloud. 
Il existe des moyens (enfin, un), qui n'est pas fiable du tout, via webdav.
L'autre solution, c'est avec un utilitaire nommé rclone.

* Iinstaller Docker sur le NAS
    * Installer le Package Docker de Synology, assez straight forward
        --> aller dans les packages et demerdez vous.

* installer portainer
    * via l'ui docker ? Impossible car il faut une ref sur le docker.sock, et l'ui syno ne le permet pas
    * Suivre ca https://mariushosting.com/how-to-install-portainer-on-your-synology-nas/ (en gros)
        * ou ptet ca : https://www.wundertech.net/how-to-install-portainer-on-a-synology-nas/
    
* installer rclone image
    * Via l'ui docker syno : chercher rclone, download/get, done.

* creer le container (pas maintenant en fait, on va d'abord modifier l'image)

* setup toute l'image
* ajouter bash (car sinon, c'est sh tout cours, et pas de script potentiel) mais c'est optional
    * Ajouter RUN apk add --no-cache bash
    * via portainer ? - Faire une autre image, basé sur celle de rclone. TODO/

* rclone config sur une autre machine (genre un WSL) : cf doc rclone  ( https://rclone.org/pcloud/ )
    * recup le token sur la machine WSL (ou autre linux avec une UI hein, je suis pas sectaire)

* rclone config sur le docker qui tourne (avec en CMD 'rclone config', suivre les etapes du wizard)
    * rentrer le token

* rclone shell script
    * bash ou c'est mort :D

* rclone mount le pcould drive et copy a la mano ou avec un autre soft finalement
    * rclone mount, cf doc ou ask skully les bons params

* profit
2 « J'aime »

Top les notes, merci ! Je vais voir si je peux mettre ça en place bientôt (même si la méthode via l’installation de rclone en root fonctionne toujours chez moi :slight_smile: )

Merci @SaKx3 pour ce tuto !

Je ne suis pas super calé en informatique m’ai j’ai réussi à aller jusqu’à l’étape où je dois copier le fichier config vers un dossier du nas avec cette commande

"Nous allons copier la configuration dans un dossier du NAS (je vous laisserai modifier les chemins selon votre installation), toujours sur le NAS en SSH :

** cp .config/rclone/rclone.conf /volume1/nas/rclone/rclone.conf**
"

Et c’est là où mes compétences sont limitées.
je présume que ton Nas à toi, dans l’exemple il s’appelle NAS c’est bien ça ? moi par exemple c’est « TOTO » on va dire, donc je mets TOTO à la place de NAS ?

Idem pour Volume 1 je ne comprends pas trop !

1 « J'aime »

Salut ! De rien pour le tuto et content qu’il soit utile :slight_smile:

Dans mon cas /volume1/ est en quelque sorte la « racine » du NAS et NAS/ le nom du dossier partagé parent en effet.
Alors je pense que ça change pour chaque installation mais chez toi tu peux tenter /volume1/TOTO

Pour t’aider, tu peux vérifier avec la commande ll (2 fois L minuscule) qui te donne le contenu du dossier dans lequel tu te situes, avec cd pour changer de répertoire, a utiliser dans l’invite de commande connectée au NAS en SSH
(désolé pour la mise en page hasardeuse, je suis sur téléphone)

Merci de ta très rapide réponse !

Je vais gratter un peu et me débrouiller !
car lorsque je veux copier le fichier dans un dossier de mon NAS , j’ai ce message d’erreur
C’est un truc tout con je suis certain…

cannot create regular file ‹ /volume1/toto/rclone/rclone.conf ›: No such file or directory

C’est la racine de tous les NAS Syno pour le 1er volume.
Le meilleure création de dossier se fait avec File station (sur un Syno toujours) @taximauve n’ayant pas daigné nous renseigner sur la marque et le modèle - présentation, tout ça… (pour la marque le titre du post mentionnant Synology j’espère que c’est bon)

j’ai bien un Synology oui désolé ! DS215j

@Lelolo j’ai eu un Qnap il y a quelques années et il me semble que c’était /volume1 aussi (mais plus trop sur)
En tout cas merci de ta précision, j’essayais de vulgariser mais c’est pas forcément mon point fort ^^

@taximauve tu as créé le dossier auparavant ? Comme le dit Lelolo le mieux est de créer le dossier avec l’interface graphique (ou d’utiliser un dossier dont tu es sûr de l’existence)

Génial @SaKx3 !!!
Merci c’est bon j’ai réussi !
En fait je me trompais dans mon dossier de destination, il y avait bien volume1/ mais derrière j’ai homes/toto …

là c’est bon je vais pouvoir continuer ton superbe tuto !

Désolé d’avoir dérangé tout le monde pour un truc aussi bête…

MERCI MERCI et bonne soirée

et surtout je pensais naïvement que la fameuse commande SSH pouvait créer le dossier toute seule dans le nas. En effet, je ne l’avais pas fait auparavant.

Pas de souci et ravi d’avoir pu t’aider ! Effectivement ce n’est peut-être pas assez clair dans le tuto, il faut que je pense à apporter cette précision (quand je rentrerai et que j’aurai un PC, ce sera plus pratique ^^)