puffs et FUSE sous NetBSD

Tags: , ,
Add comments

NetBSD 4.0 a vu apparaitre un nouveau filesystem, plus ou moins équivalent au FUSE de GNU/Linux. Il s’agit de proposer un framework qui permettra de manipuler sous forme de filesystem (via les opérations associées open, close, read, write…) des outils userland. Parmi les plus pratiques de ces utilisations, citons par exemple SSHfs ou CurlFtpFS. Et c’est précisemment de cette dernière abstraction dont j’ai recemment eu besoin.

Un rapide tour dans pkgsrc nous montre l’existence du package filesystems/fuse-curlftpfs, ce qui signifie que ce que nous envisageons semble à portée. On note cependant dans le Makefile de ce package la dépendance suivante :

.include "../../mk/fuse.buildlink3.mk"

fichier dans lequel on peut lire :

.  elif ${OPSYS} == "NetBSD"
.     if !exists(/usr/include/fuse.h)
PKG_FAIL_REASON+=       "Couldn't find fuse headers, please install librefuse."
.     endif

Munis de ces quelques informations, une recherche bien placée nous dirige evidemment sur NetBSD.org, et en particulier à la section dédiée à puffs. Là, nous pouvons lire la chose suivante :

Using FUSE file systems on NetBSD 4.0 is possible, but in addition to adding puffs support support to the kernel, it requires fetching and manually installing a backport of the ReFUSE library. The library is available here and further instructions are available here.

Bien. Résumons :

Pour utiliser FUSE et ses nombreux backends, nous avons besoin :

  • Du support puffs dans le noyau
  • Du backport de la librairie ReFUSE

Execution.

Le support puffs s’active de deux façons differentes, directement dans la configuration du noyau via la directive

file-system PUFFS

ou plus simplement en chargeant un module noyau. C’est cette derniere methode, bien moins contraignante, pour laquelle nous allons opter.

Pour mon plus grand malheur, dans une installation de base, pas trace d’un /usr/lkm/puffs.o, il est donc nécessaire de compiler ce dernier puis l’installer. D’abord, la documentation officielle explique qu’il fau placer la variable MKPUFFS=yes dans le fichier /etc/mk.conf. Ensuite, puisque cette machine comporte bien les sources du système mais n’a jamais reconstruit quoi que ce soit concernant la base, construisons les tools :

# mkdir /usr/obj
# cd /usr/src && ./build.sh -m i386 tools

Operation à l’issue de laquelle un repertoire /usr/src/tooldir.NetBSD-`uname -r`-i386 devrait avoir fait son apparition.
Il est maintenant possible de construire notre module en se rendant dans son repertoire source :

# cd /usr/src/sys/fs/puffs
# make install

Un module noyau est maintenant disponible dans /usr/lkm, reste à le charger :

# modload /usr/lkm/puffs.o

Puis à créer son device dans /dev :

# cd /dev && ./MAKEDEV puffs

Et afin d’automatiser cette opération à chaque reboot, de placer dans le fichier /etc/lkm/conf la ligne suivante :

puffs.o -s - - - BEFOREMOUNT

Maintenant que notre système est puffs-ready, il est temps d’installer la couche d’emulation FUSE pour puffs, ReFUSE.

On trouve le lien vers le backport NetBSD 4.0 de la libReFUSE dans la page de puffs chez NetBSD.org. À l’heure ou j’écris ces lignes, ce backport se trouve ici et la documentation associée, ici.

L’installation est “à peu près” complète :

# tar zxvf librefuse_nb4-20080115.tar.gz
# cd librefuse
# make install

Mais l’auteur a oublié de mentionner qu’il fallait copier les fichiers fuse.h et fuse_opt.h dans /usr/include pour satisfaire buildlink. Donc :

# cp fuse.h /usr/include
# cp fuse_opt.h /usr/include

Voila ! il est maintenant possible d’installer un backend FUSE issu de pkgsrc :

# cd /usr/pkgsrc/filesystems/fuse-curlftpfs/ && make install clean

De le démarrer (attention cette commande ne rend pas la main):

# curlftpfs -v -o disable_epsv ftp.lip6.fr /mnt

Et de tester

~/src/librefuse$ ls -l /mnt/
total 782080
dr-xr-xr-x   2 root  wheel       512 Sep  8  2006 etc
drwxr-xr-x   9 root  wheel       512 Feb 16  2001 ibp
drwxr-xr-x  10 root  wheel       512 Jun 22  2000 jussieu
drwxr-xr-x   2 root  wheel       512 Feb 16  2001 liafa
drwxr-xr-x   5 root  wheel       512 Jul 23  2003 lip6
-rw-r--r--   1 root  wheel  50020898 Nov  2 09:50 ls-lR.gz
drwx------   3 root  wheel       512 Feb 16  2001 private
drwxr-xr-x  43 root  wheel      1024 Jan 22  2008 pub

Magnifique.

Leave a Reply

WP Theme & Icons based on GlossyBlue by N.Design Studio
Banner from www.trynthlas.com
Entries RSS Comments RSS Log in
Performance Optimization WordPress Plugins by W3 EDGE