All Projects → astrada → ocamlfuse

astrada / ocamlfuse

Licence: GPL-2.0 license
OCamlFuse mirror with dune support

Programming Languages

ocaml
1615 projects
c
50402 projects - #5 most used programming language
Makefile
30231 projects

Labels

Projects that are alternatives of or similar to ocamlfuse

Ninfs
FUSE filesystem Python scripts for Nintendo console files
Stars: ✭ 241 (+947.83%)
Mutual labels:  fuse
ipfs-api-mount
Mount IPFS directory as local FS.
Stars: ✭ 16 (-30.43%)
Mutual labels:  fuse
UserFileSystemSamples
IT Hit User File System Engine samples in .NET/C#. Samples implement Virtual File System for Windows and Mac with synchronization support, on-demand loading, offline files, and Windows File Manager integration.
Stars: ✭ 60 (+160.87%)
Mutual labels:  fuse
fusera
A FUSE interface to the NCBI Sequence Read Archive (SRA)
Stars: ✭ 28 (+21.74%)
Mutual labels:  fuse
cxfuse
Crossmeta FUSE Windows Port
Stars: ✭ 55 (+139.13%)
Mutual labels:  fuse
tgmount
Mount Telegram dialogs and channels as a Virtual File System.
Stars: ✭ 52 (+126.09%)
Mutual labels:  fuse
Darling Dmg
FUSE module for .dmg files (containing an HFS+ filesystem)
Stars: ✭ 214 (+830.43%)
Mutual labels:  fuse
rust-fuse
A FUSE server implementation for Rust.
Stars: ✭ 26 (+13.04%)
Mutual labels:  fuse
squashmount
Init and management script for mounting rewritable squashfs-compressed data
Stars: ✭ 40 (+73.91%)
Mutual labels:  fuse
blahajfs
No description or website provided.
Stars: ✭ 19 (-17.39%)
Mutual labels:  fuse
elfuse
FUSE filesystems in Emacs Lisp
Stars: ✭ 61 (+165.22%)
Mutual labels:  fuse
GitFS
A FUSE filesystem that stores data on Git
Stars: ✭ 26 (+13.04%)
Mutual labels:  fuse
profuse
An OCaml implementation of the FUSE protocol versions 7.8 and 7.23
Stars: ✭ 29 (+26.09%)
Mutual labels:  fuse
Cgofuse
Cross-platform FUSE library for Go - Works on Windows, macOS, Linux, FreeBSD, NetBSD, OpenBSD
Stars: ✭ 245 (+965.22%)
Mutual labels:  fuse
hatexmpp
fuse xmpp client (xmppfs). The development stopped, you may like https://github.com/l29ah/hatexmpp3
Stars: ✭ 26 (+13.04%)
Mutual labels:  fuse
Sparsebundlefs
FUSE filesystem for reading macOS sparse-bundle disk images
Stars: ✭ 238 (+934.78%)
Mutual labels:  fuse
dedupsqlfs
Deduplicating filesystem via Python3, FUSE and SQLite
Stars: ✭ 24 (+4.35%)
Mutual labels:  fuse
clamfs
ClamFS is a FUSE-based user-space file system for Linux and BSD with on-access anti-virus file scanning
Stars: ✭ 29 (+26.09%)
Mutual labels:  fuse
fs-fuse
Export any Node.js `fs`-like object as a FUSE filesystem
Stars: ✭ 32 (+39.13%)
Mutual labels:  fuse
fuse-device
Use the basic Device functions such as UUID and current localization from Fuse
Stars: ✭ 13 (-43.48%)
Mutual labels:  fuse

ocamlfuse

This repository is cloned from the last CVS snapshot of OCamlFuse, with:

  • Patches (see #1 and #3) to make it compile on Mac OS X.
  • Fix for a race condition in multi-threaded mode (see #4).
  • dune support (see #12).

INTRODUCTION

This is a binding to fuse for the ocaml programming language, enabling you to write multithreaded filesystems in the ocaml language. It has been designed with simplicity as a goal, as you can see by looking at example/fusexmp.ml. Efficiency has also been a separate goal. The Bigarray library is used for read and writes, allowing the library to do zero-copy in ocaml land.

REQUIREMENTS

You need fuse (version 2.7 or greater)

http://www.sourceforge.net/projects/fuse

You also need ocaml >= 4.02.3 and camlidl >= 1.05.

GETTING STARTED

The reccomended way to install this library is using OPAM.

opam install ocamlfuse

INSTALLATION

If you don't want to install OPAM, you need to manually install this prerequisites:

  1. Prerequisites
  1. Installing OCamlFuse

unpack the tarball, then

make
make install

This will install ocamlfuse in your ocaml library directory. To uninstall it you can use "make uninstall"

TESTING

make example
cd _build/default/example
mkdir tmp
./fusexmp.exe tmp
cd tmp #you'll find a copy of your "/" directory here

NOTE: if you access the "clone" of the mountpoint of the filesystem, the fs will hang (kill it and then use fusermount -u to umount it). This is a known bug/limitation.

BEFORE YOU WRITE YOUR OWN FILESYSTEM

KNOWN PROBLEMS (if you can help, please do)

  • The stateful interface for readdir is not implemented

  • There is a stub in Fuse_util.c regarding st_blocks - if one implements statfs with a block size different than 512 "du" will not work on the filesystem.

  • many ocaml exceptions are reported as 127

  • we should add non-blocking lstat64 and statfs,*xattr implementations for ocaml in Unix_util

  • translation between ocaml unix errors and C unix error is dependent on the order of constructor names in ocaml. There should be a way to get error names from caml and create a translation table.

  • the Unix_util library uses unsafe coercions between unix file handles (which are defined as ints) and ints. Even if this works, in the future it might stop working.

  • IMPORTANT: Unix_util.read and write operations have not been tested in case of errors. Error code conversion might be incorrect but I don't have test cases (maybe the easy way is to modify fusexmp to return various errors).

  • Unix errors which are unknown to ocaml should be reported as EUNKNOWNERR

  • Test statfs (never used until now)

  • Some errors are missing in the unix module (e.g. ENOTSUP,ENOATTR, see man lsxattr). We could solve all these problems with errors using a custom error type instead of unix_error but this would create troubles.

  • deadlock (and consequent necessity to kill -KILL the program) if accessing the mountpoint mirrored inside the mountpoint in fusexmp. I remember it was easy to understand why, but right now I have no idea.

HELPING THE PROJECT

The best help you can give to the project is to test everything, including, but not limited to:

  • large file operations (files >= 4gb)

  • multithreaded operations: the filesystem should always be responsive, no matter if reading a certain file blocks

  • robustness: the filesystem should NEVER exit from its mainloop if not explicitly requested from the user.

Please report if you do serious tests! We need to know which programs did you use, if you found any bug, and how to reproduce the tests.

Also, we need packaging, I don't have the necessary time and don't know ocamlfindlib or GODI. Please if you have the time and the necessary knowledge help with packaging. Autoconf support would be highly appreciated, too.

A mailing list has been set up on sourceforge, you are strongly encouraged to post feedback there and in general to subscribe if you use ocamlfuse.

The sourceforge page for ocamlfuse is

http://sourceforge.net/projects/ocamlfuse

Bye and have fun

Vincenzo Ciancia

vincenzo_ml at yahoo dot it ciancia at di dot unipi dot it applejack at users dot sourceforge dot net

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].