@hackage libfuse30.1.0.0

A Haskell binding for libfuse-3.x

libfuse3: A Haskell binding to libfuse-3.x

GitHub Actions

Important notes

  • Executables using libfuse3 should be compiled with the threaded runtime (-threaded).
  • Developed and tested on Linux only. Not tested on other UNIXes such as BSD and MacOS because I don't own them / machines to run them on.

Building from HEAD

This packages uses the ./configure script, but it is not checked into the git repository. To build the source checked out from git, you must generate it from configure.ac before invoking any of the cabal commands:

autoreconf -fiv
# cabal v2-build, etc.

You may have to install autotools or something like that with your system package manager.

Examples

There are two examples, null and passthrough in the example directory. These are the ports of the examples in the official libfuse. They should be good start points for writing your filesystems.

Enable the cabal flag to build them:

cabal v2-configure --flags=examples

Known issues and limitations

  • Can't stop the process and unmount with signals. You have to use fusermount -u to unmount.
  • Not all Haskell-friendly bindings to the FUSE operations are implemented yet, including but not limited to:
    • struct fuse_conn_info. The availability of filesystem capabilities such as FUSE_CAP_HANDLE_KILLPRIV can't be checked.
    • Setting the fields of struct fuse_file_info from the certain fuse operations.
  • Look for the TODO comments in the source tree for more specific topics.

If you are able to implement any of these, that would be very appreciated! Please open a PR to contribute.

  • libfuse: The reference implementation, to which this package binds
  • HFuse: The bindings to libfuse-2.x
    • libfuse3 is based on HFuse (with massive rewrites).
    • libfuse3 has more complete API and exposes internal (and unstable) API to allow workarounds.
  • fuse-rs: The Rust implementation of FUSE. Unlike this package, fuse-rs implements the FUSE protocol itself (i.e. replaces libfuse). See its README for overview.
  • Installation

  • Dependencies (6)

  • Dependents (0)

  • Package Flags

      examples
       (off by default)