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
> cd cgofuse
> set CPATH=C:\Program Files (x86)\WinFsp\inc\fuse
> go install -v ./fuse ./examples/memfs
Windows !cgo
> cd cgofuse
> set CGO_ENABLED=0
> go install -v ./fuse ./examples/memfs
macOS
$ cd cgofuse
$ go install -v ./fuse ./examples/memfs ./examples/passthrough
Linux
$ cd cgofuse
$ go install -v ./fuse ./examples/memfs ./examples/passthrough
FreeBSD
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
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
$ cd cgofuse
$ go install -v ./fuse ./examples/memfs ./examples/passthrough
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:
The following software is being used to test cgofuse.
Windows (cgo and !cgo)
macOS
Linux
FreeBSD