rclone/xgo-cgofuse
Part of the rclone build process Built from https://github.com/billziss-gh/cgofuse
1.3K
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.
macOS | FreeBSD | NetBSD | OpenBSD | Linux | Windows | |
---|---|---|---|---|---|---|
cgo | :heavy_check_mark: | :heavy_check_mark:1 | :heavy_check_mark:2 | :heavy_check_mark:2 | :heavy_check_mark: | :heavy_check_mark: |
!cgo | :heavy_check_mark:1 |
fuse_opt_parse
function is not fully compatible with the one in libfuse.fuse_set_signal_handlers
.macOS
$ cd cgofuse$ go install -v ./fuse ./examples/memfs ./examples/passthrough
FreeBSD
$ 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
$ 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.Linux
$ cd cgofuse$ go install -v ./fuse ./examples/memfs ./examples/passthrough
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
You can easily cross-compile your project using xgo and the billziss/xgo-cgofuse docker image.
$ docker pull billziss/xgo-cgofuse$ go get -u github.com/karalabe/xgo$ cd YOUR-PROJECT-THAT-USES-CGOFUSE$ xgo --image=billziss/xgo-cgofuse \ --targets=darwin/386,darwin/amd64,linux/386,linux/amd64,windows/386,windows/amd64 .
Cross-compilation only works for macOS, Linux and Windows.
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:
Cgofuse is regularly built and tested on Travis CI, Poor Man's CI and AppVeyor. The following software is being used to test cgofuse.
macOS
FreeBSD
Linux
Windows (cgo and !cgo)
docker pull rclone/xgo-cgofuse