afuse

Il y a un truc qu’on peut regretter quand on quitte Windows, c’est la possibilité d’utiliser directement les partages réseau pour écouter de la musique ou regarder un film. Il existe des tas de trucs pour faire à peu près la même chose sous Linux, notamment quand on utilise Nautilus/Gnome et le système gvfs. Mais sous KDE, je n’ai rien trouvé de vraiment pratique, direct, qui marche avec n’importe quel soft. Jusqu’à ce que je croise afuse qui est ultra-simple, qui marche partout, avec à peu près n’importe quel protocole et au niveau utilisateur.

C’est quoi afuse ?

afuse est un système de fichier auto-montable mis en place au niveau utilisateur.

Le principe de fonctionnement est le suivant : dans votre dossier /home/moncompte vous créez un dossier qui servira à héberger vos points de montage (par exemple montages) et, quand vous accéderez à montages/toto@serveur.com ça établira la connexion (en ssh par exemple) à votre compte toto sur serveur.com et “montera” automatiquement le répertoire racine de ce serveur distant dans un dossier virtuel montages/toto@serveur.com où vous pourrez alors naviguer comme si c’était un dossier local (vous pourrez, par exemple, copier depuis votre gestionnaire de fichiers préféré, des fichiers vers montages/toto@serveur.com/var/www/monsite/css). Dans le cas de montages ssh, vous bénéficiez de votre ssh-agent, de la connexion par clé privée, de l’utilisation de .ssh/config, etc.

Configuration

En soi, afuse ne fait pas grand chose : il surveille un répertoire et, s’il détecte une tentative d’accès à un sous-répertoire, appelle une commande.

Pour ma part, j’ai créé un script nommé afuse.sh que je démarre au lancement de la session. Il contient une seule ligne :

afuse -o mount_template="sshfs %r:/ %m" -o unmount_template="fusermount -u -z %m" ~/montages

Attention, vu que le script ne commence par par #!/bin/sh je le démarre explicitement avec /bin/sh afuse.sh. N’oubliez pas de créer le dossier ~/montages.

Si vous n’avez pas envie de comprendre comment ça marche et que vous ne voulez monter que du ssh, vous pouvez vous arrêter là.

Décortiquons

La ligne de commande de afuse est en 3 parties :

  • -o mount_template="sshfs %r:/ %m"
  • -o unmount_template="fusermount -u -z %m"
  • ~/montages

Vous l’avez compris, il y a une commande pour monter le partage, une autre pour le démonter et un point de montage. Vous notez aussi que cette invocation ne gère que ssh mais, comme le terme en gras le laissait entendre, c’est une commande ; donc potentiellement un script.

La commande de montage reçoit en paramètre %r (le nom du sous-dossier qu’on cherche à atteindre) et les deux commandes reçoivent %m (le point de montage réel).

Expérimentons

Ouvrez un terminal, créez un dossier test dans votre home et entrez :

afuse -f -o mount_template='echo "%r ::: %m"' -o unmount_template="" ~/test

Le -f garde la tâche en avant-plan pour qu’on voie ce qui se passe.

Ouvrez un autre terminal et tapez :

ls test/toto@serveur

afuse vous montre ce qu’il essaye de faire et vous allez voir passer la commande de “montage” (qui n’en est pas une, vous aviez compris) :

toto@serveur ::: /tmp/afuse-ctQrL9/toto@serveur

Le script a donc reçu “toto@serveur” dans %r et “/tmp/afuse-ctQrL9/toto@serveur” dans %m.

Recollons les morceaux

Quand j’exécute mon script “normal”, afuse appelle sshfs avec 2 paramètres :

  • toto@serveur:/ (vous vous souvenez que la commande de montage est sshfs %r:/ %m : c’est elle qui ajoute :/)
  • /tmp/afuse-ctQrL9/toto@serveur

Et :

$ sshfs --help                                                               
usage: sshfs [user@]host:[dir] mountpoint [options]

afuse appelle donc sshfs avec les paramètres qui vont bien et crée un lien entre /tmp/afuse-xxxxx/partage et votre dossier “montages”.

Pourquoi tous ces détails ?

Parce-que je ne voudrais pas que vous passiez à côté d’afuse pour une mauvaise raison : pour ma part, toutes mes machines sont accessibles en ssh donc je n’ai pas besoin d’autre chose que du support de ssh. Mais si vous avez besoin d’accéder à des partages samba par exemple, il va falloir bosser un peu (ou utiliser plutôt fusesmbfs en fait).

Et je voudrais insister sur le fait que vous devrez :

  • soit définir des points de montage différents en fonction des protocoles (montages-ssh / montages-ftp par exemple) et démarrer plusieurs instances de afuse, une par protocole,
  • soit, au lieu d’appeler directement sshfs, appeler un script qui va 1) déterminer quel moteur fuse utiliser et 2) appeler la commande de montage.

Je vous recommande à ce sujet, l’excellent article de Ben Martin sur linux.com où il indique une méthode très élégante :

  • création d’un fichier afuse-fstab où il décrit comment monter chaque sous-système
  • création d’un script perl assez simple qui, en fonction de la ressource demandée, recherche dans afuse-fstab comment monter le dossier et exécute la commande.

Si vous êtes joueur…

Voilà quelques outils fuse qui peuvent être utilisés pour faire des trucs rigolos, débiles voire utiles :

  • curlftpfs pour accéder à un ftp
  • fuse-mysqlfs pour stocker des fichiers dans une base MySQL
  • fuse-gmailfs pour stocker des fichiers dans votre boite gmail
  • fuse-zip pour vous promener dans les fichiers ZIP
  • ifuse pour monter des téléphones Apple
  • obexfs pour accéder à de vieux téléphones mobiles (non-smart) ou des PDA

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *