# FUSE et/ou autre VFS (Virtual File system)



## kenobee (28 Janvier 2007)

Je suis chef de projet pour la cr&#233;ation d&#8217;une interface Web (content Management) de gestion de fichiers.
Je cherche une solution pour contruire dynamiquement dans une base de donn&#233;e ou fichier xml ou autre, la repr&#233;sentation (hi&#233;rarchie, dossiers et fichiers) d&#8217;un file system et ceci en temps r&#233;el.
Sur internet mes recherches me ram&#232;ne souvant sur les solution de Virtual files systems
Pour autant je ne suis pas s&#251;r que cela correspond &#224; mon besoin?

Mon besoin :
Une base de donn&#233;e qui ne stockerait que les url (chemin d&#8217;acc&#232;s) et metadonn&#233;es vers les fichiers et dossiers ainsi que la structure hi&#233;rarchie (parent id)
Ceci a partir d&#8217;un point de montage (folder) pr&#233;cis.
Pour cela je souhaite faire r&#233;f&#233;rence au node id (inode) pour update de la base de donn&#233;e en cas de &#8220;move&#8221; ou &#8220;rename&#8221;... Nous devons aussi filtrer les fichiers &#224; prendre en compte.

Environnement MacOSX UNIX, LINUX et secondairement Windows
(c'est une application client serveur pour g&#233;rer des centaines de millier de fichiers)

Mon soucis est que l&#8217;ajout et la modification des fichiers et de la structure n&#8217;est pas uniquement possible via l&#8217;interface web (o&#249; nous avons la maitrise des modifications) 
mais aussi et principalement via FTP, Webdav et particulierement le partage de fichiers sur le reseau local via Samba CIFS, Apple AFP, ou autres application professionnel tierce Helios, fulpress, etc...

La solution devra donc observer les &#233;v&#233;nement tel que cr&#233;ation (newfile or new folder), d&#233;placement (newparent id), effacement (delete) et renommage (rename)
sur le file system et les reporter (insert or update) dans la base de donn&#233;e pour que nous puissions ensuite les g&#233;rer via l&#8217;interface web de notre application et concerver
l&#8217;int&#233;grit&#233; des liens et relations que notre application web permet de faire.

Pour updater une entr&#233;e de la base de donn&#233;e on ne peux pas s&#8217;appuiyer sur le nom du fichier car si il a &#233;t&#233; renomm&#233; ou si d&#8217;autres fichiers porte le m&#234;me nom
il y a un danger d&#8217;incoh&#233;rence, rupture d&#8217;int&#233;grit&#233;...

Si vous connaissez un projet commercial ou open source existant pour g&#233;rer cette probl&#233;matique merci de me la signaler

Je regarde de pr&#234;t le projet macfuse et ses d&#233;riv&#233;s tel que MySQLfs
Je ne sais pas encore si ce projet est tr&#232;s robuste ou si il n&#8217;est pas trop lourd pous g&#233;rer ma probl&#233;matique et l'int&#233;grer dans notre projet ?

Merci pour votre aide.


----------



## bompi (28 Janvier 2007)

MacFuse, pour la robustesse, tu peux oublier : c'est tout jeune et tout frais. Mais c'est appel&#233; &#224; devenir efficace, on dirait.

Il va te falloir g&#233;rer des historiques pour pouvoir identifier les fichiers. Un fichier X s'appelle d'un certain nom &#224; un instant donn&#233; : nom_de_fichier est une fonction avec le lieu et le temps en param&#232;tre.

J'ai install&#233; depuis quelques jours (suite &#224; une couillonnade dont MS Word a le triste privil&#232;ge) Versomatic, lequel pr&#233;sente un lot de fonctionnalit&#233;s assez proches de certaines de tes requ&#234;tes. Pour l'instant, cela semble fonctionner, &#224; ma mesure (je ne tripote pas des centaines de milliers de fichiers tous les jours )

Ce genre de solution pr&#233;sente l'ennui d'&#234;tre d&#233;pendant de la plate-forme [l'extension au noyau] mais la partie gestion de donn&#233;e, elle, peut s'adapter plus facilement &#224; d'autres syst&#232;mes.


----------



## Anonyme (28 Janvier 2007)

Pour l'interface, il y a filemanager (en xul, licence LGPL), il suffit d'avoir firefox (ou clone) installé et tout le monde peut y accéder. Il y a un système d'extension disponible, je ne sais pas si cela correspond à ton besoin. 

Lien direct sur l'application à copier-coller :


```
jar:http://www.anisolution.com/members/~monkeya/misc/fm/filemanager.jar!/filemanager.xul
```


----------



## kenobee (29 Janvier 2007)

En fait j'ai ma propre interface WEB et déjà une base de donnée MySQL qui fait référence à des fichiers placés sur le file system. Mais je cherche un moyen de maintenir la base de donnée avec des fichiers qui serait ajoutés directement ou modifier / renommer/ deplacer dans le file system.
La solution est un monitoring des événement sur le file system du type :
Si newfile ==> Envoie une commande SQL pour insert
Si MoveFile ==> Envoie une commande SQL pour update path
Si RenameFile ==> Envoie une commande SQL pour update name
Ect...

Sachant que le seul moyen d'être sûr de faire le bon update n'est pas sur le nom du fichier mais son inode ou la chaine complète du path+Filename car il ne peut y avoir qu'un seul fichier "toto.txt" dans un dossier.

Voilà 
la solution est peut être simplement dans des lignes de commande?
Mais doit fonctionner tout seul et en temps réel!!

A+


----------



## bompi (29 Janvier 2007)

Tu devrais te pencher sur la documentation de _launchd_, qui est une sorte de lanceur universel sous Mac OS X.
Il est capable de d&#233;clencher des actions sur des &#233;v&#233;nements du type qui t'int&#233;ressent. Mais je ne sais pas s'il est capable de traiter d'un coup toute une arborescence.


----------



## p4bl0 (29 Janvier 2007)

kenobee a dit:


> En fait j'ai ma propre interface WEB et déjà une base de donnée MySQL qui fait référence à des fichiers placés sur le file system. Mais je cherche un moyen de maintenir la base de donnée avec des fichiers qui serait ajoutés directement ou modifier / renommer/ deplacer dans le file system.
> La solution est un monitoring des événement sur le file system du type :
> Si newfile ==> Envoie une commande SQL pour insert
> Si MoveFile ==> Envoie une commande SQL pour update path
> ...


Je voit bien ce que tu veux faire, personnelement je n'en ai pas besoin mais &#231;a m'int&#233;resse beaucoup juste par curiosit&#233;.

Cependant j'ai une autre question :

Plut&#244;t que d'utiliser une base de donn&#233;es MySQL, pourquoi ne pas utiliser directement le syst&#232;me de fichier en utilisant ce que t'as fil&#233; gloup gloup ou en cr&#233;ant ta propre interface ??

Parce que si l'interface que tu cr&#233;es lis simplement les fichier au fur et &#224; mesure que tu te ballades dans les r&#233;pertoires tu n'a pas a te compliquer la vie avec ces histoires non ??


----------



## kenobee (30 Janvier 2007)

Cette solution est très interressante mais ne correspond pas à mon réel besoin.
ce pourrais être un complément pour selectionner les fichiers a intégrer dans la base???

Mon application est en fait une solution permettant de gérer différent type d'objets (asset)
de les organiser differemment que sur le filesystem et surtout de créer des liens entre eux.

La liaison entre ces asset ce fait dans une database et nécessite comme toute base de donnée relationnelle d'avoir des id pour chaque asset et donc aussi pour les références aux fichiers. Si les utilisateurs Insert/move ou modifie à partir de l'interface pas de problème je maitrise chaque action.

Mais le soucis (contrainte) c'est que d'autres utlisateurs peuvent intervenir directement sur le file system du serveur via le partage de fichier. 
Donc si le fichier est déplacer ou renommé je suis très embêté car je n'ai plus de lien entre la database id_asset et le fichier asset_url / path ? 

Voilà pourquoi je cherche une solution pour reporter chaque modif du file système dans la database et tant qu'à faire ajouter les nouveaux fichiers automatiquement...
Surtout que pour les format d'images non supportées (EPS, PDF, Illustrator...) et ou trop grande je génère plusieurs vignette jpg (List50x50px; preview200x200, zoom500x500) et dont je dois aussi connaitre le chemin pour les prévilsualiser.(Surtout pas de blob)!!

Le tous sur MacOSX ou LINUX le developpeur qui travaille avec moi est surtout windows PHP MySQL soit on fait et on galère soit on laisse faire à d'autre, soit ça existe déjà ou bien c'est natif dans OSX/LINUX et juste une bidouille et hop... ?

Merci


----------



## bompi (30 Janvier 2007)

Il va falloir pr&#233;ciser le mode op&#233;ratoire :
1) soit vous n'autorisez les acc&#232;s qu'au travers de votre propre interface et votre probl&#232;me est simple (du moins : simplifi&#233; )
2) soit les acc&#232;s au syst&#232;me de fichiers sont libres et alors il vous faut utiliser un syst&#232;me de monitoring forc&#233;ment sophistiqu&#233; ; vous pouvez toujours vous inspirez des options _WatchPath_ et _QueueDirectories_ de _launchd_, dont on peut r&#233;cup&#233;rer les sources ici.


----------



## kenobee (30 Janvier 2007)

bompi a dit:


> Il va falloir préciser le mode opératoire :
> 1) soit vous n'autorisez les accès qu'au travers de votre propre interface et votre problème est simple (du moins : simplifié )
> 2) soit les accès au système de fichiers sont libres et alors il vous faut utiliser un système de monitoring forcément sophistiqué ; vous pouvez toujours vous inspirez des options _WatchPath_ et _QueueDirectories_ de _launchd_, dont on peut récupérer les sources ici.



Effectivement et mes recherches sur le sujet m'amene vers ce produit aussi et en autre
*File Alteration Monitor developper par SGI en son temp et open source voir

On me parle aussi des commandes :
*kqueue(9) kernel API available in modern BSD derivatives

Je vais regarder tout cela et vous tenir informé si ça vous interresse ?

Merci


----------

