Notice: this is an archived website / Note: ceci est une ancienne page du site archivé

LftpFS, le mirroir facile avec FUSE

LftpFS est un système de fichier utilisant FUSE (FUSE est implémenté nativement dans les noyaux 2.6.x de GNU/Linux), permettant de monter en lecture seule un serveur distant dans le système de fichier local.

Les atouts de LftpFS sont d’une part qu’il utilise le client LFTP en backend et permet donc d’utiliser les protocoles FTP, HTTP, FISH, SFTP, HTTPS et FTPS et de pouvoir fonctionner au travers de proxies (donc plus flexible que CurlFtpFS).
Et d’autre part il implémente un système de mise en cache automatique afin de pouvoir faire un miroir « intelligent » qui stocke temporairement (durée à définir) en local la structure et les fichiers, uniquement selon la demande.
Des règles de filtrage basées sur REGEX pour inclure ou exclure d’éventuels fichiers et/ou dossiers peuvent être également utilisées.

Bref, c’est une solution pratique et simple pour faire un miroir sur votre réseau d’un serveur ftp et de le rendre disponible à votre guise via FTP, Web, Samba, etc… puisque accessible via le système de fichier.

Installation

LftpFS n’étant pas encore dans les dépôts Debian, il faudra l’installer manuellement.
A ce jour la dernière version est la 0.4.2 mais vérifiez sur SourceForge si une version plus récente existe.

Installer les dépendances nécessaires:
libipc-run3-perl
libipc-run-perl
libfuse-perl

Récupérer et décompresser l’archive:

wget http://dfn.dl.sourceforge.net/sourceforge/lftpfs/lftpfs-0.4.2.tar.gz
tar -xzf lftpfs-0.4.2.tar.gz
cd lftpfs-0.4.2/

Installation:
perl Makefile.PL
make

Puis avec les droits root:
make install
ou bien si vous préférez chekinstall:
checkinstall

Avant de faire votre montage du serveur distant dans le filesystem, assurez-vous que l’utilisateur avec lequel vous ferez le montage fait parti du groupe fuse.

Monter le ftp distant

La commande se présente sous la forme suivante:
lftpfs [options] point_de_montage dossier_cache script_de_connexion [répertoire_distant]
(les options et le répertoire distant sont optionnels)

Donc il faut d’abord se préparer un fichier texte « script_de_connexion » (que vous nommerez à votre guise) pour y mettre les infos de connexion au serveur distant qu’utilisera Lftp, exemple:

open ftp://login:password@ftp.monserveur.com

ou bien un autre exemple pour le serveur de fedora via un proxy:

set ftp:proxy ftp://user:pass@proxy-host:2121
set cache:expire 60m
open ftp://download.fedora.redhat.com

Exemple concret d’une commande de montage:
lftpfs --fs-cache-timeout=3600 /home/moi/fedoramirror/ /media/backup/ftpcache/ ~/.lftp/fedora.txt

Pour démonter votre point de montage lftpfs, cela se passe comme avec tout système de fichier utilisant FUSE, avec la commande fusermount:

fusermount -u /chemin/vers/point_de_montage/

Les options disponibles pour LftpFS sont les suivantes:

–debug: Active les messages de débugage de FUSE
(implique l’option –foreground)

–foreground: Ne pas mettre le processus en tâche de fond

–options=opt[,opt]: Passer des options à FUSE
ex: allow_other: autoriser l’accès aux autres utilisateurs

–use-mdtm=yes|no: No par défaut. Lftp utilise la commande LIST pour determiner la date de modification des fichiers, c’est plus rapide. Si « yes », alors Lftp utilise la commande MDTM sur chaque fichier, plus exact mais très lent.

–use-cache=yes|no: Yes (par défaut), utilisera le cache persistant dans le dossier défini à cet effet. Sinon après la lecture, les fichiers seront effacés.

–fs-cache-timeout=: Durée de la mise en cache de la structure du système de fichier, en secondes. Par défaut 1800s (60m). (Similaire au paramètre de Lftp cache:expire)

–include=PATTERN: Inclure les fichiers/dossiers correspondants, où PATTERN est une expression rationnelle étendue, comme avec egrep.

–exclude=PATTERN: Inclure les fichiers/dossiers correspondants, où PATTERN est une expression rationnelle étendue, comme avec egrep.

–download-limit= Limite de téléchargement (en bytes). Par défaut 0 = aucune limite. Après avoir excédé cette limite, LftpFS bloque la lecture des fichiers.

–ignore-mtime: Ignore la date de modification des fichiers locaux dans le cache lors du téléchargement. Par défaut, sans cette option il télécharge les fichiers plus récent que ceux du cache et les remplace automatiquement.

–threaded=yes|no: Yes par défaut, LftpFS fonctionne en mode in multithread.

Conclusion

LftpFS est plutôt simple à mettre en place et pratique pour faire du mirroring versatile (dans le sens anglais du terme) avec un caching dynamique et sans maintenance. Il peut permettre beaucoup d’applications pratiques comme se faire un miroir local d’un repository pour la mise à jour d’un parc de machine Linux.

Il ne répond pas exactement à ce que je cherchais initialement, car sa fonction de cache est un inconvénient de poids pour ce que je voulais faire: permettre d’accéder à un serveur ftp depuis le mediacenter de la box NeufTV via le serveur Apache.

Mais sans nul doute, le jour où j’aurai besoin de mettre en place un miroir simplement c’est vers lui que je me tournerai.

Note: LftpFS est un fork de FuseFTP, projet maintenant abandonné.
Lien: LftpFS