bugnano / archivefs

A read-only FUSE filesystem for mounting compressed archives, inspired by archivemount.
GNU General Public License v3.0
26 stars 1 forks source link

Function not implemented in Debian 10 #2

Closed joresgete closed 2 years ago

joresgete commented 2 years ago

First of all, great work. In Ubuntu 20 it worked like a charm, but in Debian 10 when I try to access the mounted path always got "Function not implemented".

I tried both cargo install and building from source with the same results. No warnings or error reported in build or installation process, and the mount command (sudo ./archivemount /path/to/zipfile /tmp/mountpath) runs without problem. Running with the -d switch it shows the content of the zip file without warnings or errors, but ls /tmp/mountpath returns "cannot open directory '.' : Function not implemented".

Environment (fresh install): Linux debian 4.19.0-18-amd64 #1 SMP Debian 4.19.208-1 (2021-09-29) x86_64 GNU/Linux cargo 1.56.0 (4ed5d137b 2021-10-04) rustc 1.56.0 (09c42c458 2021-10-18) libarchive-dev 3.3.3.4

bugnano commented 2 years ago

This looks like a problem in the FUSE part. According to the ployfuse crate that archivefs uses to implement the FUSE filesystem, you need to have the fusermount binary installed and in your PATH (this is provided by installing the fuse package). If you already installed the fuse package, then I'm suspecting that polyfuse uses some kernel APIs that the kernel found in Debian 10 is too old to understand. Unfortunately I don't have a Debian 10 system at hand, so I can't reproduce the bug at the moment.

joresgete commented 2 years ago

You are right, although fuse versions are the same in the working Ubuntu and the Debian, I tested to upgrade the Debian kernel to 5.10 and it worked fine.

Unfortunately it is not possible to update the kernel on some computers, so do you think that it would be a work-around to make the software run in kernel versions 4.x? I know it's not related to your code but to one of the dependencies but I would like to get your opinion

bugnano commented 2 years ago

Like you said, these kernel calls are done by the polyfuse crate, and not my code, so it's not feasible to apply a workaround for older kernels on my part, as that would imply re-implementing the FUSE functionality myself. If support for older kernels is crucial for you, consider filing a bug report on polyfuse itself: https://github.com/ubnt-intrepid/polyfuse/issues