remotefs-fuse
About remotefs-fuse ☁️
remotefs-fuse mounts any remotefs RemoteFs
implementation (SFTP/SCP, FTP, AWS S3, Google Cloud Storage, SMB, WebDAV, Kube, in-memory, ...) as
a local filesystem, via FUSE on Linux/macOS and Dokany on Windows. It ships as two crates:
- remotefs-fuse: the library (
Mount,MountOption,Driver), to embed in your own project. - remotefs-fuse-cli: a ready-to-use CLI that wires a chosen
remotefsbackend intoremotefs-fusefor you.
Get started 🚀
First of all you need to add remotefs-fuse to your project dependencies:
= "0.1"
these features are supported:
no-log: disable logging. By default, this library will log via thelogcrate.
Example
use Mount;
let options = vec!;
let remote = new;
let mount_path = from;
let mut mount = mount.expect;
let mut umount = mount.unmounter;
// setup signal handler
set_handler?;
mount.run.expect;
Requirements
-
Linux: you need to have
fuse3installed on your system.Of course, you also need to have the
FUSEkernel module installed. To buildremotefs-fuseon Linux, you need to have thelibfuse3development package installed.In Ubuntu, you can install it with:
In CentOS, you can install it with:
-
macOS: you need to have the
macfuseservice installed on your system.You can install it with:
-
Windows: you need to have the
dokanyservice installed on your system.You can install it from https://github.com/dokan-dev/dokany?tab=readme-ov-file#installation
CLI Tool
remotefs-fuse comes with a CLI tool remotefs-fuse-cli to mount remote file systems with FUSE or Dokany.
Features
remotefs-fuse-cli can be built with the features below; each feature enables a different file transfer protocol
aws-s3ftpgcskubesmb: requireslibsmbclienton MacOS and GNU/Linux systemsssh(enables both sftp and scp); requireslibssh2on MacOS and GNU/Linux systemswebdav
All the features are enabled by default; so if you want to build it with only certain features, pass the --no-default-features option.
Usage
|||||||
On Windows the mountpoint can be specified simply using the drive letter --to M will mount the FS to M:\
where protocol options are
- aws-s3
--bucket <name>--region <region>(optional)--endpoint <endpoint_url>(optional)--profile <profile_name>(optional)--access-key <access_key>(optional)--security-token <security_access_token>(optional)--new-path-styleuse new path style
- ftp
--hostname <host>--port <port>(default 21)--username <username>(default:anonymous)--password <password>(optional)--securespecify it if you want to use FTPS--activespecify it if you want to use ACTIVE mode
- gcs
--bucket <name>--endpoint <endpoint_url>(optional; default:https://storage.googleapis.com)--service-account-key <path>path to a service-account JSON file (optional; defaults to application-default credentials)
- kube
--namespace <namespace>(default:default)--cluster-url <url>
- memory: runs a virtual file system in memory
- smb
--address <address>--port <port>(default:139; Linux/Mac only)--share <share_name>--username <username>(optional)--password <password>(optional)--workgroup <workgroup>(optional; Linux/Mac only)--dialect <dialect>(optional; Linux/Mac only; possible values:Auto,Nt1,Smb2,Smb3; default:Auto)
- scp / sftp
--hostname <hostname>--port <port>(default22)--username <username>--password <password>--config-file <path>(optional; default:~/.ssh/config)
- webdav
--url <url>--username <username>--password <password>
Other options are:
--uid <uid>: specify the UID to overwrite when mounting the remote fs. See UID and GID override.--gid <gid>: specify the GID to overwrite when mounting the remote fs. See UID and GID override.--default-mode <mode>: set the default file mode to use when the remote fs doesn't support it.
Mount options can be viewed in the docs at https://docs.rs/remotefs-fuse/latest/remotefs-fuse/enum.MountOption.html.
UID and GID override
❗ This doesn't apply to Windows.
The possibility to override UID and GID is used because sometimes this scenario can happen:
- my UID is
1000 - I'm mounting for instance a SFTP file system and the remote user I used to sign in has UID
1002 - I'm unable to operate on the file system because UID
1000can't operate to files owned by1002
But of course this doesn't make sense: I signed in with user who owns those files, so I should be able to operate on them.
That's why I've added Uid and Gid into the MountOption variant.
Setting the Uid option to 1002 you'll be able to operate on the File system as it should.
Project stability
Please consider this is an early-stage project and I haven't heavily tested it, in particular the Windows version.
I suggest you to first test it on test filesystems to see whether the library behaves correctly with your system.
Development 🛠️
Every task runs through a just recipe. Run just to list them all.
just check chains fmt_check, Clippy with warnings denied, doc, deny, and test, and is
the required gate before opening a pull request.
Integration tests actually mount a filesystem, so they're gated behind the integration-tests
feature and need the platform FUSE/Dokany service installed (see Requirements):
Support the developer ☕
If you like remotefs-fuse and you're grateful for the work I've done, please consider a little donation 🥳
You can make a donation with one of these platforms:
Contributing and issues 🤝🏻
Contributions, bug reports, new features, and questions are welcome! 😉 If you have any questions or concerns, or you want to suggest a new feature, or you just want to improve remotefs-fuse, feel free to open an issue or a PR.
Before contributing with AI-assisted tools, please read the AI Policy.
Changelog ⏳
View the remotefs-fuse changelog.
License 📃
remotefs-fuse is licensed under the MIT license.
You can read the entire MIT license.