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 estsshfs %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