调整 Debian 以使用 coreutils 的 Rust 实现

Sylvestre Ledru 因其使用 Clang 编译器构建 Debian GNU/Linux 的工作而闻名,他报告了使用另一组实用程序 coreutils(用 Rust 语言重写)的成功实验。 Coreutils 包括 sort、cat、chmod、chown、chroot、cp、date、dd、echo、hostname、id、ln 和 ls 等实用程序。 对于 Rust 版本 coreutils 集成到 Debian 的第一阶段,设定了以下目标:

  • 为 Debian 和 Ubuntu 打包 coreutils 的 Rust 替代品。
  • 使用 rust-coreutils 启动带有 GNOME 桌面的 Debian。
  • 从存储库安装 1000 个最流行的软件包。
  • 在具有 rust-coreutils 的环境中从 Firefox、LLVM/Clang 和 Linux 内核源代码进行构建。

在为 Rust/coreutils 创建了 100 多个补丁后,我们成功实现了所有预期目标。 正在进行的工作包括实现缺失的实用程序和选项、提高代码的质量和一致性、开发测试套件以及消除从 GNU Coreutils 运行测试套件时发生的崩溃(到目前为止,141 个测试中有 613 个测试已成功运行) )。

在创建 rust-coreutils 包时,决定不替换 coreutils 包,而是提供它们并行工作的能力。 Rust 语言中的实用程序选项安装在 /usr/lib/cargo/bin/ 中,并通过将此目录添加到 PATH 环境变量来激活。 创建 rust-coreutils 包很复杂,因为需要将所有构建依赖项下载到存储库中,包括 Rust 和各种小板条箱包。

创建启动映像不是问题,但调整软件包以适应具有 rust-coreutils 的环境需要大量工作,因为许多安装后脚本从 coreutils 集中调用实用程序。 最大数量的问题是由于缺乏必要的选项引起的,例如,“cp”实用程序没有“--archive”和“--no-dereference”选项,“ln”不支持“-相对”选项,mktemp 不支持“-t”、同步“-fs”、安装中“--owner”和“-group”。 由于行为差异而出现了其他问题,例如,安装实用程序不支持指定 /dev/null 作为输入文件,mkdir 有“--parents”选项而不是“-parent”等。

在测试大型代码库的组装时,没有出现重大问题。 构建 Firefox 和 LLVM/Clang 时,使用了 python 脚本和 cmake,因此替换 coreutils 不会影响它们。 构建 Linux 内核的过程相对顺利,只出现了两个问题:使用带有符号链接的 chown 时出现错误输出以及 ln 实用程序中缺少“-n”选项。

来源: opennet.ru

添加评论