Failed to mount FUSE fs : FreeBSD

Hi,

I’m trying to mount a O365 OneDrive using a non-root user on FreeBSD 12 RC1. I can do this successfully with the following command:
rclone mount --dir-cache-time 5s --vfs-cache-mode full onedrive: /tank/onedrive

However, if I try with “–allow-other” (full command below):
rclone mount --allow-other --dir-cache-time 5s --vfs-cache-mode full onedrive: /tank/onedrive

I get these errors:
mount helper error: mount_fusefs: /dev/fuse on /tank/onedrive: Operation not permitted
Fatal error: failed to mount FUSE fs: mount_fusefs: exit status 71

Does anyone know what might be causing this or how to fix it? As far as I can tell, on FreeBSD, FUSE doesn’t use /etc/fuse.conf file to add the “allow_other” setting - that I know of.

Thanks!

Doubleddav

That is what I was going to suggest :frowning: Did you try it?

Hmm…

It could be a bug in the underlying library: https://github.com/bazil/fuse

Not really sure… Are there any kernel messages?

In the end, I did add “allow_other” - I found that FreeBSD does use \etc\fuse.conf after all. Unfortunately it didn’t make a difference.

There are no kernel messages. I have also tested this on FreeBSD 11.2, just in case it was a bug in version 12 RC1 - but I got the same error.

Is there anything else you can suggest? I can run a trace if that’s helpful, if it helps you debug. I wonder if anyone else might be seeing this as well?

Thanks

I suspect this is a bug in the upstream library: https://github.com/bazil/fuse

I had a quick trace through the code and all it seems to be doing is adding the allow_other as an option.

What I’d do if I were you is try to reproduce the problem with the upstream library directly, using one of the examples and if you can report an issue there. So for example try hellofs but add the extra option fuse.AllowOther() in the call to fuse.Mount.

Using the helloworld example, I was able to successfully compile and “mount” the example as expected.

By adding fuse.AllowOther(), compiling and running again I got exactly the same error as mentioned previously:
mount helper error: mount_fusefs: /dev/fuse on /tank/onedrive: Operation not permitted Fatal error: failed to mount FUSE fs: mount_fusefs: exit status 71

Below is a snippet from hello.go that I edited, just want to confirm the changes I made are what you were suggesting:

func main() {
        flag.Usage = usage
        flag.Parse()

        if flag.NArg() != 1 {
                usage()
                os.Exit(2)
        }
        mountpoint := flag.Arg(0)

        c, err := fuse.Mount(
                mountpoint,
                fuse.FSName("helloworld"),
                fuse.Subtype("hellofs"),
                fuse.LocalVolume(),
                fuse.VolumeName("Hello world!"),
                fuse.AllowOther(),
        )

Well done :slight_smile: That shows quite nicely that it is a problem with the library

You just added the one fuse.AllowOther() line? That looks correct.

In your bug report, I’d present that as a diff.

If you make a bug report then it would probably be a good idea to make a matching rclone issue on github and link the two together.

Thanks for that, done!

Bug logged here: https://github.com/bazil/fuse/issues/206
and here: https://github.com/ncw/rclone/issues/2828
I’ll fill out some of the missing details shortly

Super - well done!

If you were feeling adventurous you could try to find the problem in the bazil library and submit a pull request.

So I got it working on FreeBSD 12.

I had to run one command and my user to a group:

as root:

root@gemini:~ # sysctl vfs.usermount=1

I added my user to the operator group:

root@gemini:~ # ls -al /dev/fuse
crw-rw----  1 root  operator  0x3c Feb  8 15:37 /dev/fuse

here

root@gemini:~ # grep operator /etc/group
operator:*:5:root,felix

and here is my example mount:

$ cd Test
$ ls
Movies		Radarr_Movies	TV		TV_Ended	mounted
$ ps aux | grep rclone
felix 1917   0.4  0.1 127972  35008  3  S+   15:40     0:00.26 rclone mount gcrypt: /usr/home/felix/Test

Oops. Sorry I misread the allow_other bit that was the problem…Cancel my post!

1 Like

Thanks for that, unfortunately I have already done this but it made no difference. I can only mount as root

Cheers

You can mount as another user, but you can’t use allow-other. I can mount as non root without a problem.

Yes I can mount it without the --allow-other switch as a non-root user, but as far as I know --allow-other is necessary if you want to share the mount point with samba - which is what I’m trying to do.

I can get this working no problem on linux, but so far not on FreeBSD.

Thanks

Yeah, doesn’t seem like the fuse kernel in FreeBSD is that great unfortunately.

I was hoping to make a flip, but with so many things not working, not sure it’s worth the effort.