#fuse #bindings #api-bindings #system

已删除 悬浮式-fuser

我的Userspace Filesystem (FUSE) for Rust的分支

0.11.1 2022年11月18日

#87 in #fuse

MIT 许可证

325KB
7.5K SLoC

FUSE (用户空间文件系统) for Rust

CI Crates.io Documentation MIT License dependency status

关于

FUSE-Rust 是一个 Rust 库Crate,用于简化在用户空间实现 FUSE 文件系统

FUSE-Rust 不仅提供绑定,它是对原始 FUSE C 库的重写,以充分利用 Rust 的架构。

此库最初是从 fuse crate 分支出来的,目的是继续开发。特别是添加了7.19之后的 ABIs 功能。

文档

FUSE-Rust 参考

详细信息

一个工作的FUSE文件系统由三部分组成

  1. 作为文件系统注册并向前传递操作到处理它们的用户空间进程的通信通道的 内核驱动程序
  2. 帮助用户空间进程建立和运行与内核驱动程序的通信的 用户空间库 (libfuse)。
  3. 实际处理文件系统操作的 用户空间实现

内核驱动程序由FUSE项目提供,用户空间实现需要由开发者提供。FUSE-Rust在这两者之间提供了一个替代libfuse用户空间库。这样,开发者在用Rust构建FUSE文件系统时,可以充分利用Rust的类型接口和运行时特性。

除了对libfuse的单个设置(挂载)函数调用和一个最终的拆除(卸载)函数调用外,所有操作都在Rust中运行,在Linux上,这些对libfuse的调用是可选的。可以通过不构建带有"libfuse"功能标志来删除它们。

依赖关系

必须安装FUSE才能构建或运行使用FUSE-Rust的程序(即内核驱动程序和库。某些平台可能还需要用户空间工具,如 fusermount)。FUSE的默认安装通常足够。

要构建FUSE-Rust或任何依赖于它的程序,还需要安装 pkg-config

Linux

Linux上的FUSE 在大多数Linux发行版中可用,通常称为 fusefuse3(此crate与两者兼容)。在基于Debian的系统上安装

sudo apt-get install fuse

在CentOS上安装

sudo yum install fuse

构建时,需要FUSE库和头文件。该软件包通常称为 libfuse-devfuse-devel。还需要 pkg-config 来定位库和头文件。

sudo apt-get install libfuse-dev pkg-config
sudo yum install fuse-devel pkgconfig

macOS

安装包可以从FUSE for macOS官网下载。这是需要始终安装的内核部分。

使用Homebrew安装

brew install macfuse

使用Nix安装

nix-env -iA nixos.osxfuse

以及pkg-config(用于构建)

nix-env -iA nixos.pkg-config

使用nix时,需要指定PKG_CONFIG_PATH环境变量,指向osxfuse的安装位置

export PKG_CONFIG_PATH=${HOME}/.nix-profile/lib/pkgconfig

FreeBSD

安装fusefs-libspkgconf包。

pkg install fusefs-libs pkgconf

用法

将以下内容放入您的Cargo.toml

[dependencies]
fuser = "0.7"

要创建新的文件系统,实现fuser::Filesystem特质。详细信息请参阅文档,或查看examples目录中的基本示例。

待办事项

libfuse 3.10.3之前的所有功能都已实现。欢迎贡献。请参阅GitHub上的问题列表,并在源文件中搜索包含"TODO"或"FIXME"注释的部分,以了解仍需添加的内容。

兼容性

在Linux上开发和测试。在Linux、macOS(至ABI 7.19)和FreeBSD上使用稳定版的Rust进行测试(详细信息请参阅CI)。

贡献

进行分叉、修改、提交拉取请求。确保使其对目标受众有用,并牢记项目的哲学和Rust编码标准。对于较大的或必要的更改,您可能首先想要打开一个问题进行讨论。此外,如果您所做的更改对用户相关,请记得更新变更日志

依赖关系

~1.4–2.4MB
~39K SLoC