Open Source im professionellen Einsatz

© pixelio.de, Mari Mansikka

Webservice-Dateisystem mit Fuse - eine Probe aufs

Aber bitte mit Seife

, ,

Das Fuse-Kernelmodul erlaubt es, Dateisysteme im Userspace zu schreiben. Die Autoren dieses Artikels nutzen Fuse, um NFS auf die Höhe der Zeit zu bringen - für die Client-Server-Kommunikation setzen sie auf Webservices mit SOAP. In einem Aufwasch entwickeln sie Client und Server ihres WSFS.

Komplexe Client-Server-Applikationen sind ohne Hilfsmittel schwer zu entwickeln. Seit langem lindern RPCs (Remote Procedure Calls) diese Qual: Der Entwickler nutzt Funktionsaufrufe, egal ob sich deren Implementierung im Client oder im Server befindet. RPCs begegnen Linux-Anwendern heute noch in Form des Network File System (NFS, [1]). Als moderne Form der RPC-Idee boomen Webservices. Sie arbeiten objektorientiert und verwenden offene Standards wie XML und HTTP. Es liegt also nahe, eine NFS-Alternative auf Webservice-Basis zu entwerfen, kurz ein WSFS (Webservice-Filesystem).

Das in diesem Artikel vorgestellte Dateisystem ist als Beweis der Machbarkeit und nicht für den produktiven Einsatz gedacht. Viel versprechend ist der Ansatz vor allem, wenn eine Applikation bereits Webservices nutzt. So könnten eine Web-Groupware oder ein CMS ihre Inhalte per WSFS feilbieten. In diesem Fall würde WSFS als virtuelles Dateisystem fungieren. Im Folgenden arbeitet die Server-Komponente aber nach NFS-Vorbild mit lokalen Dateien.

Dateisysteme können im Kernel- oder im Userspace angesiedelt sein; deutlich einfacher zu programmieren ist das zweite. Mit Fuse (Filesystem in Userspace, [2]) existiert die passende Schnittstelle, die für das WSFS ebenfalls zum Einsatz kommt. Der Artikel verfolgt damit zwei Ziele: Er zeigt die Verwendung von Webservice-Technologien unter Linux an einem konkreten Beispiel und er erläutert die Grundlagen von Fuse.

So funktioniert Fuse

Abbildung 1 zeigt den Aufbau eines Dateisystems bei Verwendung von Fuse. Letzteres bringt zwei wesentliche Bestandteile mit: die Fuse-Bibliothek Libfuse sowie das Kernelmodul »fuse.ko«. Das Modul sorgt dafür, dass die Schicht des Virtual-File-Systems (VFS) Fuse als eigenen Dateisystemtyp erkennt und Anfragen, die dieses Dateisystem betreffen, an »fuse.ko« weitergibt.

Abbildung 1: Mit Fuse stehen Programmierern weitreichende Möglichkeiten offen, ein Dateisystem im Userspace zu implementieren. Die Fuse-Architektur dient als Grundlage für das Webservice-basierte Dateisystem aus diesem Artikel.

Abbildung 1: Mit Fuse stehen Programmierern weitreichende Möglichkeiten offen, ein Dateisystem im Userspace zu implementieren. Die Fuse-Architektur dient als Grundlage für das Webservice-basierte Dateisystem aus diesem Artikel.

Bei einem Dateisystem wie Ext 3, das vollständig im Kernel residiert, genügt ein einziges Kernelmodul. Bei Fuse kommt noch die Kommunikation mit der Implementierung hinzu, die im Userspace läuft. Für diese Kommunikation sorgt Libfuse zusammen mit der Gerätedatei »/dev/fuse«. Libfuse agiert dabei als Zwischenschicht, die unter anderem den direkten Kontakt der Dateisystem-Implementierung mit der Gerätedatei unnötig macht.

Mittelsmann

Die Userspace-Implementierung wird mit der Libfuse gelinkt und ruft aus ihr eine Einstiegsmethode auf. In einer C-Umgebung lautet deren Funktionsname »fuse_main()«, in Java kümmert sich die Methode »FuseMount.mount()« um die Initialisierung. Im Hintergrund führen beide Aufrufe dazu, dass Fuse den bekannten Linux-Systemcall »mount()« ausführt. Als Typ des einzuhängenden Dateisystems setzt die Bibliothek »fuse« in das Mount-Kommando ein.

Anschließend pollt die Dateisystem-Anwendung über die Fuse-Bibliothek die Datei »/dev/fuse«, um aus ihr Befehle zu erhalten. Jede Operation auf dem gemounteten Dateisystem - etwa von »ls« oder »mkdir« - reicht die Glibc an den Kernel weiter, der sie via VFS an das Fuse-Kernelmodul übergibt. Dieses legt die Anfragen in der Datei »/dev/fuse« ab, von wo sie via Libfuse zur Implementierung gelangen, die sie bearbeitet. Deren Ergebnisse, etwa eine Verzeichnisliste, gelangen auf dem umgekehrten Weg zurück zum Ausgangspunkt.

Für WSFS greift die Userspace-Komponente via Webservice auf einen passenden Server zu. Ähnlich wie RPCs sollen Webservices eine einfache Kommunikation zwischen verteilten Anwendungen ermöglichen. Dabei gehen Webservice-Technologien über RPCs in vielen Bereichen hinaus und adressieren explizit auch Anwendungen, die über das Internet kommunizieren. Dafür benötigen sie einerseits ein offenes und plattformübergreifendes Datenformat, andererseits eine ebenso offene Form der Datenübertragung.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 5 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook