Pour tous ceux qui possèdent une seedbox, vous avez sans doute déjà pensé à vouloir synchroniser les fichiers de votre seedbox avec votre NAS ou votre ordinateur.
Pour cela il existe plusieurs solutions et nous allons ici en aborder deux.
- ftp-sync
- rsync et curlftpfs
Chacun de ces solutions a été testée sur un environnement sous Linux.
Si vous êtes sur Windows, vous pouvez le faire très facilement avec CobianBackup.
Avec ftp-sync, vous pourrez synchroniser facilement votre seedbox avec votre NAS ou votre ordinateur sous Linux via un simple script shell.
Pour pouvoir utiliser ce script, vous aurez besoin de wget et md5sum qui sont normalement déjà installés sur votre environnement.
Il est donc à la portée de la majorité des distributions Linux et fonctionne avec BusyBox qui est embarqué sur pas mal de NAS (Synology et D-Link par exemple). Jetez un oeil aux commandes disponibles avec BusyBox.
Pour installer ce script, entrez les commandes suivantes :
$ cd /etc/init.d/ $ wget https://raw.github.com/crazy-max/ftp-sync/master/ftp-sync.sh -O ftp-sync $ chmod +x ftp-sync $ update-rc.d ftp-sync defaults
Vous devrez changer certaines variables dans le script pour rendre celui-ci fonctionnel.
Tout d'abord les informations de connexion FTP :
- FTP_HOST : Le nom d'hôte ou l'adresse IP de votre serveur FTP.
- FTP_PORT : Le port de votre serveur FTP (par défaut 21).
- FTP_USER : Le nom d'utilisateur FTP.
- FTP_PASSWORD : Le mot de passe FTP.
- FTP_SRC : Le chemin vers le répertoire que vous souhaitez synchroniser.
Ensuite il y a des variables concernant des spécificités lors du téléchargement :
- DL_USER : Le nom d'utilisateur Linux qui sera affecté au fichier lors du téléchargement. Optionnel.
- DL_USER : Le nom du groupe Linux qui sera affecté lors du téléchargement. Optionnel.
- DL_CHMOD : La permission à affecter au fichier téléchargé. Optionnel. (par exemple 644)
- DL_REGEX : Appliquer un filtre pour rechercher des fichiers avec une expression régulière. Séparez chaque expression régulière par une virgule. Optionnel. (par exemple Game.Of.Thrones*.avi;Burn.Notice.*.avi)
- DL_RETRY : Nombre de tentatives en cas d'échec du téléchargement. (3 par défaut)
- DL_HIDE_SKIPPED : Ne pas afficher les téléchargements déjà effectués ou valident dans les logs. (0 par défaut)
- DL_HIDE_PROGRESS : Ne pas afficher la progression des téléchargements. (1 par défaut)
- MD5_ENABLED : Activer la vérification des fichiers déjà téléchargés. Peut-être utile si lors du téléchargement d'un fichier vous déplacez celui-ci mais que vous ne souhaitez pas le télécharger à nouveau. Activé par défaut.
- MD5_FILE : Le chemin vers le fichier contenant le hash du nom de chaque fichier téléchargé. Par défaut /etc/ftp-sync/ftp-sync.md5
- DIR_LOGS : Chemin d'enregistrement des logs. Par défaut /etc/ftp-sync/logs
- EMAIL_LOG : Adresse e-mail où seront envoyés les logs. Laissez vide si vous ne souhaitez pas recevoir de mail.
Une fois que vous avez entré toutes les options adéquates, il ne vous reste plus qu'à l'exécuter :
$ /etc/init.d/ftp-sync {DIR_DEST}
Remplacez {DIR_DEST} par le répertoire de destination. Par exemple "/seedbox/". Vous devriez avoir des logs de ce type :
FTP Sync v1.3 (2013/06/02 19:00:16) Script PID: 32017 Source: ftp://10.0.0.1:21/complete/ Destination: /tmp/seedbox/ Log file: /etc/ftp-sync/logs/ftp-sync-20130602190016.log MD5 file: /etc/ftp-sync/ftp-sync.md5 -------------- Finding files... Regex: ^.*$ -------------- Process file : Burn.Notice.S06E16.VOSTFR.HDTV.XviD.avi Hash: 5cc4931d64bd5579e46041b7139bde9f Size: 351 Mb Status : Already downloaded and valid. Skip download... Time spent: 00:00:00 -------------- Process file : Burn.Notice.S06E17E18.VOSTFR.HDTV.XviD.avi Hash: 5cc4931d64bd5579e46041b7139bde9f Size: 703 Mb Status : Already downloaded and valid. Skip download... Time spent: 00:00:00 --------------
Le fichier contenant les hashs devrait ressembler à ceci :
baf87b6719e9f5499627fc8691efbd3c Burn.Notice.S06E16.VOSTFR.HDTV.XviD.avi 92d1d13049bd148f89ffa1d501f153f5 Burn.Notice.S06E17E18.VOSTFR.HDTV.XviD.avi
Pour générer le hash en question, je ne me base pas sur l'intégrité du fichier mais sur son chemin. Car vérifier l'intégrité implique automatiquement le téléchargement de celui-ci. Une solution serait par exemple à partir de votre seedbox de générer automatiquement le hash d'un fichier téléchargé dans un fichier plat.
Vous pouvez si vous le souhaitez mettre en place un cron en appelant le script dans le crontab. Par exemple :
0 4 * * * cd /etc/init.d/ && ./ftp-sync /seedbox/ >/dev/null 2>&1
Cela synchronisera votre FTP avec le répertoire /seedbox/ chaque jour à 4h.
Si vous souhaitez plus d'infos, je vous invite à consulter le README.
Vous pouvez télécharger gratuitement ftp-sync sur GitHub. Si vous rencontrez des problèmes ou si avez des idées d'améliorations, merci de poster une issue sur GitHub.
rsync est un bon logiciel pour la synchronisation de fichiers à distance. Couplé à curlftpfs, il vous permettra de synchroniser votre seedbox avec votre NAS.
L'inconvénient de cette méthode est que vous devrez avoir rsync et curlftpfs d'installé sur votre distrib. Sur certains NAS ce n'est hélas pas possible, il faudra donc vous tourner vers ftp-sync qui fait de toute façon le même travail.
De plus, curlftpfs n'est pas très bien maintenu et contient certains bugs qui pourraient être ennuyeux. Je pense notamment à celui-ci qui ne vous permettra pas synchroniser des fichiers contenant certains caractères spéciaux dans leur nom.
Pour procéder à l'installation tapez la commande suivante :
$ apt-get install curlftpfs rsync
Créez ensuite un répertoire pour le point de montage du FTP :
$ mkdir /mnt/seedbox/
Ajoutez ensuite le point de montage curlftpfs dans fstab afin qu'il soit monté à chaque démarrage du système :
$ vi /etc/fstab
Et mettez-y :
curlftpfs#{user}:{password}@{host}:{port} /mnt/seedbox fuse rw,allow_other,uid={userid},gid={groupid},umask={umask} 0 0
Remplacez :
- {user} par le nom d'utilisateur FTP
- {password} par le mot de passe FTP
- {host} par le nom d'hôte ou l'adresse IP du serveur FTP
- {port} par le port du serveur FTP (21 par défaut)
- {userid} par l'ID d'un utilisateur local. Ces IDs sont spécifiés dans le fichier /etc/passwd (par exemple 1001)
- {groupid} par l'ID d'un groupe local. Ces IDs sont spécifiés dans le fichier /etc/group
- {umask} par le masque de création de fichier (par exemple 002). Voir la page wikipedia de umask pour plus d'explications.
Sauvegardez et maintenant montez le FTP :
$ mount /mnt/seedbox/
Vous pouvez ensuite créer un script de ce style pour mettre en place la synchronisation via rsync.
$ vi /etc/init.d/seedbox
#! /bin/bash SRC="/mnt/seedbox/" DEST="/seedbox/" LOG_FILE="/var/log/seedbox/rsync_`date +%Y%m%d`.log" LOG_EMAIL="foo@example.com" if ! grep -qs '/mnt/seedbox' /proc/mounts then mount /mnt/seedbox echo 'Seedbox mounted on' `hostname` | mail -s "Seedbox mounted" $LOG_EMAIL sleep 3 fi rsync -avuz $SRC $DEST --progress --log-file=$LOG_FILE cat $LOG_FILE | mail -s "Seedbox download" $LOG_EMAIL exit 0
Rendez le script exécutable :
$ chmod +x /etc/init.d/seedbox
Voilà et comme pour ftp-sync, vous pouvez mettre en place un cron et vous recevrez quotidiennement un e-mail avec les logs de synchronisation.
MISES A JOUR DE L'ARTICLE |
pas mal pas mal
a quand la version .pkg pour un syno ?
Pour les syno je pense que ce serait un .ipk ?
Il suffirait simplement d'installer curlftpfs depuis ses sources : http://sourceforge.net/projects/curlftpfs/files/cu... Et d'exécuter ensuite le script ftp-sync.
Mais vu que je n'ai pas de syno j'aurai du mal à tester
J'ai mis à jour les sources et dorénavant vous n'aurez plus besoin de curlftpfs mais de wget. Ce sera nettement mieux étant donné que wget est installé sur la majorité des distributions (notamment les Synology).
Pas mal de pouvoir synchroniser en FTP mais niveau performance, ce n'est pas terrible.
Rien ne faut un bon vieux rsync via ssh, la vérification par hash sera faite automatiquement.
J'ai fais deux articles à ce sujet.
Le premier en décembre 2011 (script très simple):
http://www.legeektechno.fr/serveurs/recuperer-auto...
Le deuxième début mars 2013 (permet la gestion de plusieurs NAS):
http://www.legeektechno.fr/serveurs/script-de-sync...
J'espère que mes liens pourront aider à améliorer ta version !
Alors pour ma part niveau performances, c'est plus rapide par rapport à l'utilisation de rsync que j'ai utilisé pendant un bon moment. Tu as testé le script ?
Ensuite pour ceux qui n'ont qu'un serveur FTP pour accéder à leur seedbox, rsync est inutile.
Enfin, la vérification du hash (checksum du fichier tu voulais dire je pense) ralentit considérablement le process de téléchargement. C'est d'ailleurs dit dans le man de rsync.
Sur mon script je ne fais pas de checksum de fichier car cela revient à le télécharger... Je préfère faire un hash md5 du chemin vers le fichier et comparer la taille du fichier source et de destination. Je rajouterai le mod-time plus tard.
Non je n'ai pas testé ton script, mais par contre le transfère FTP oui et avec mes tests, ce n'est vraiment pas assez efficace.
Sur ce point on est d'accord. Cependant, quand on a un NAS (type Synology) ou bien un ordinateur, installer un serveur FTP ou un serveur SSH, c'est la même chose. Le SSH est d'ailleurs beaucoup plus sécurisé et par des temps où le gouvernement et les majors essayent de tout faire pour arrêter le piratage, ce n'est pas un luxe de chiffrer ses transferts s'ils ne sont pas légaux...
Effectivement, ça ralentit le transfert... Ou plutôt ça ralentit le début du transfert.
Quand on regarde bien, le démarrage du téléchargement prend plus de temps et le rsync demande 50ko/s en moyenne en upload pour faire le checksum.
Pour ma part, en rsync + ssh je télécharge mes fichiers à la vitesse de 2Mo/s sans problème.
Avoir des fichiers de tailles identiques ne signifie pas que le contenue est identique.
Ah bon ? Elle est où la différence de taux de transfert et "d'optimisation" comme tu dis entre du SFTP (SSH) et FTP ?
Non je parlais de la seedbox (Internet). Beaucoup n'ont pas un serveur dédié mais des offres leur permettant seulement d'accéder à une webUI (ruTorrent par ex) pour gérer leur seedbox et un serveur FTP point barre. Comme un serveur mutualisé pour le web si tu veux. Donc impossible d'installer quoi que ce soit d'où le fait de rester sur des protocoles qui peuvent impacter un maximum de personnes.
Oui 50Ko/s mais pour combien de temps ?
Si ce n'est pas aussi long que le téléchargement même du fichier alors ce n'est pas un réel "fingerprint" qui est fait mais un workaround du côté de rsync englobant plusieurs paramètres pour générer un "hash du fichier".
Oui en effet ce n'est pas un réel fingerprint comme je te l'ai expliqué, je me base sur le chemin + la taille + le mod-time. Ce sont pour moi des paramètres pour l'instant suffisants. Mais je prévois d'ajouter un plugin à rTorrent pour générer le fingerprint de chaque fichier téléchargé et de le mettre dans un fichier que j'appellerai pour vérifier les fingerprints en local.
Merci, merci et merci!
J'utilisais BitTorrent Sync depuis les premières version en alpha et même aujourd'hui avec une version dite "stable", je passe plus de temps à vérifier mes téléchargements que si je devais le faire manuellement, ce qui en devient un comble...
Merci donc de m'avoir fait découvrir ce script simple et efficace. J'étais parti pour l'écrire moi-même donc ça me fait quelques heures de gagné!
Même avec les quelques problématiques des NAS Synology j'ai réussi à l'installer rapidement (faut quand même aller voir le readme).
Une petite remarque cependant: il aurait été sympa d'ajouter le téléchargement du fichier de configuration pour avoir une base:
wget https://raw.github.com/crazy-max/ftp-sync/master/ftp-sync.conf -O ftp-sync.conf --no-check-certificate
Merci encore
++
@Jx7 C'est noté dans le README, dans la partie Installation, le téléchargement du fichier de config
Si tu constates des bugs, n'hésites pas à les remonter via GitHub!
Oui je sais puisque j'en parle de ce fichier. Je parlais de ton mini tuto à toi.
Tout compte fait j'ai peut etre été un peu trop optimiste... Les débits sont très mauvais. Je vais essayé la solution avec rsync proposée par legeektechno.
Ah étrange les débits sont identiques pour moi. Tu es à combien en moyenne ?
Salut,
Je suis complètement débutant dans le domaine, mais après m'être renseigné un peu sur le net sur le sujet j'ai réussi à réaliser toutes ces manipulations, sauf que j'ai dû merdouaillé quelque part puisque lorsque je lance le script j'ai l'erreur : "-ash: /etc/init.d/ftp-sync: not found"
Je suis quasi certain que c'est un truc super bête mais j'ai beau cherché sur le net ou le readme, je sèche...
Auriez-vous s.v.p. un conseil ?
(La méthode qui m'intéresse est celle avec ftp-sync)
D'avance merci
Xav
hello,
j'ai moi aussi la même erreur que xav...
help
@Xav @sorcer1
Avec quelle commande exécutez-vous le script ?
$ /etc/init.d/ftp-sync /tmp/seedbox
ou
$ cd /etc/init.d/
$ ./ftp-sync /tmp/seedbox
J'ai mis à jour ftp-sync, essayez avec la nouvelle version en exécutant le script en debug :
$ bash -x /etc/init.d/ftp-sync /tmp/seedbox
Merci de relire le README avant de continuer.
Salut,
J'avais une solution similaire avec un rsync et screen mais j'en avais marre de pas savoir ou en étaient mes downloads sans me mettre en terminal.
J'ai donc fais un script en bash pour faire du generer du rss et j'utilise download station
Bonjour,
C'est ok pour moi concernant l'exécution avec bash -x /etc/init.d/ftp-sync .
Par contre j'ai un autre problème : pour chaque création de dossier ça ajoute la destination que l'on passe en paramètre.
Extrait de log sachant que ma est /volume1/seedbox :
--------------
Process file : 9.Mois.Ferme.2013.FRENCH.720p.BluRay.x264-LOSTlost-9moisferme.720p.jpg
Hash: 685a3da54bc5eea1d119eb6f9d896477
Size: 15.70 Kb
Status : Never downloaded...
Start download to /volume1/seedbox/9.Mois.Ferme.2013.FRENCH.720p.BluRay.x264-LOST/volume1/seedbox/lost-9moisferme.720p.jpg... Please wait...
File successfully downloaded!
Time spent: 00:00:02
--------------
Peux-tu créer une issue sur Github stp et me dire sur quelle distribution Linux tu es ?
Je regarderai ce problème asap.
C'est fait, toutes les informations y sont.
Merci.
Bonjour,
Est-il possible de configurer une connexion FTPES ou SFTP via ton script ?
Bonjour,
Je n'arrive pas à faire fonctionner la procédure. Quand je lance le script, il semble se bloquer sur le premier fichier à télécharger.
J'obtiens:
....
+ local srcfiletr=CMG00001.INI
++ awk 'BEGIN{srand();print srand()}'
+ local starttime=1444211323
++ echo /Pt5/CMG00001.INI
++ sed -e s#/Pt5/#/volume1/Surveillances/#
+ local destfile=/volume1/Surveillances/CMG00001.INI
+ '[' I == / ']'
+ ftpsyncAddLog 'Process file : CMG00001.INI'
+ local 'text=Process file : CMG00001.INI'
+ '[' '!' -z '' ']'
+ LOG='Process file : CMG00001.INI'
++ cut -d ' ' -f 1
++ md5sum -
++ echo -n CMG00001.INI
+ local srchash=5fd02b4c3ebc6685012b0ae22e61683c
+ ftpsyncAddLog 'Hash: 5fd02b4c3ebc6685012b0ae22e61683c'
+ local 'text=Hash: 5fd02b4c3ebc6685012b0ae22e61683c'
+ '[' '!' -z 'Process file : CMG00001.INI' ']'
+ LOG='Process file : CMG00001.INI\n'
+ LOG='Process file : CMG00001.INI\nHash: 5fd02b4c3ebc6685012b0ae22e61683c'
++ ftpsyncGetHumanSize /Pt5/CMG00001.INI
++ awk '{ sum=$1 ; hum[1024**3]="Gb";hum[1024**2]="Mb";hum[1024]="Kb"; for (x=10 24**3; x>=1024; x/=1024){ if (sum>=x) { printf "%.2f %s\n",sum/x,hum[x];break } }}'
+++ ftpsyncGetSize /Pt5/CMG00001.INI
++++ grep '^213'
++++ wget -S --spider --ftp-user=XXXXX --ftp-password=XXXXXX -O - ftp://webmon itoring-ftp.01db.com:21/Pt5/CMG00001.INI
++++ awk '{print $2}'
Le log est le suivant:
FTP Sync v2.03 (2015/10/07 11:48:42)
--------------
Checking connection to ftp://webmonitoring-ftp.01db.com:21/Pt5/...
Successfully connected!
--------------
Script PID: 26499
Source: ftp://webmonitoring-ftp.01db.com:21/Pt5/
Destination: /volume1/Surveillances/
Log file: /var/log/ftp-sync/20151007114842.log
Download method: wget
MD5 method: text
--------------
Je suis plus que débutant et bloqué à 2 doigts du but...
Merci de votre aide
First of all, thanks a lot for your ftp-sync script. it's very well done.
is it possible to extend it also for recursive downloads ?
I need to download a directory and also its sub-directories.
any help ? it would be much appreciated
bye
costef
Vraiment sympa ce script !! Merci beaucoup !
Si je peux me permettre une suggestion, j'aimerais bien avoir une " barre " dans la console pour savoir ou en est le fichier qui se télécharge
Peux-tu créer une issue sur Github stp et me dire sur quelle distribution Linux tu es ?
Je regarderai ce problème asap.
Hi,
Can you create an issue on Github for this feature ?
Peux-tu créer une issue sur Github stp pour que je puisse tracer cette nouvelle fonctionnalité ?
Bonjour,
Je galère depuis plusieurs jour pour faire marcher ce ftp-sync !
Quand j'exécute
/etc/init.d/ftp-sync /home/pierre/torrents
J'ai le le message erreur :
Checking connection to ftp://ip publique:21/volume1/video/incoming/
ERROR : Server issued an error response...
Une aide serait la bienvenue !
Bonjour,
Merci de poster une issue sur Github et de donner des précisions sur votre système où est hébergé votre serveur FTP (OS, type de serveur FTP, etc...)
Bonjour,
Fonctionne parfaitement. par contre comment configurer le regex pour ne pas récuperer les fichiers en cours de download sur la seedbox (*.part)?
Par avance merci
Hum en effet il n'y a pour le moment pas de filtre d'exclusion intégré dans le script.
Peux-tu faire une demande en postant une issue sur Github ? Ça te permettra d'être notifié quand une mise à jour sortira.