Cgofuse is a cross-platform FUSE library for Go. It is supported on multiple platforms and can be ported to any platform that has a FUSE implementation. It has cgo and !cgo ("nocgo") variants depending on the platform.
Windows |
macOS |
Linux |
FreeBSD |
NetBSD* |
OpenBSD* |
|
---|---|---|---|---|---|---|
cgo | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
!cgo | ✓ |
* NetBSD and OpenBSD support is experimental. There are known issues that stem from the differences in the NetBSD librefuse and OpenBSD libfuse implementations from the reference libfuse implementation
Windows cgo
- Prerequisites: WinFsp, gcc (e.g. from Mingw-builds)
- Build:
> cd cgofuse > set CPATH=C:\Program Files (x86)\WinFsp\inc\fuse > go install -v ./fuse ./examples/memfs
Windows !cgo
- Prerequisites: WinFsp
- Build:
> cd cgofuse > set CGO_ENABLED=0 > go install -v ./fuse ./examples/memfs
macOS
- Prerequisites: FUSE for macOS, command line tools
- Build:
$ cd cgofuse $ go install -v ./fuse ./examples/memfs ./examples/passthrough
Linux
- Prerequisites: libfuse-dev, gcc
- Build:
$ cd cgofuse $ go install -v ./fuse ./examples/memfs ./examples/passthrough
FreeBSD
- Prerequisites: fusefs-libs
- Build:
$ cd cgofuse $ go install -v ./fuse ./examples/memfs ./examples/passthrough # You may also need the following in order to run FUSE file systems. # Commands must be run as root. $ vi /boot/loader.conf # add: fuse_load="YES" $ sysctl vfs.usermount=1 # allow user mounts $ pw usermod USERNAME -G operator # allow user to open /dev/fuse
NetBSD
- Prerequisites: NONE
- Build:
$ cd cgofuse $ go install -v ./fuse ./examples/memfs ./examples/passthrough # You may also need the following in order to run FUSE file systems. # Commands must be run as root. $ chmod go rw /dev/puffs $ sysctl -w vfs.generic.usermount=1
OpenBSD
- Prerequisites: NONE
- Build:
$ cd cgofuse $ go install -v ./fuse ./examples/memfs ./examples/passthrough
- NOTE: OpenBSD 6 removed the
kern.usermount
option, which allowed non-root users to mount file systems [link]. Therefore you must be root in order to use FUSE and cgofuse.
User mode file systems are expected to implement fuse.FileSystemInterface
. To make implementation simpler a file system can embed ("inherit") a fuse.FileSystemBase
which provides default implementations for all operations. To mount a file system one must instantiate a fuse.FileSystemHost
using fuse.NewFileSystemHost
.
The full documentation is available at GoDoc.org: package fuse
There are currently three example file systems:
- Hellofs is an extremely simple file system. Runs on all OS'es.
- Memfs is an in memory file system. Runs on all OS'es.
- Passthrough is a file system that passes all operations to the underlying file system. Runs on all OS'es except Windows.
- Notifyfs is a file system that can issue file change notifications. Runs on Windows only.
The following software is being used to test cgofuse.
Windows (cgo and !cgo)
macOS
Linux
FreeBSD
- Bill Zissimopoulos <billziss at navimatics.com>
- Nick Craig-Wood <nick at craig-wood.com>
- Fredrik Medley <fredrik.medley at veoneer.com>