#chroot #sandbox #gentoo #bubblewrap #testing-tools #ebuild

app genpac

使用 bubblewrap 的 Gentoo ebuild 开发沙箱

1 个不稳定版本

0.1.0 2023年12月29日

#508开发工具

GPL-3.0-or-later

90KB
2K SLoC

Rust 1.5K SLoC // 0.1% comments AsciiDoc 341 SLoC

gentoo 打包环境 (genpac)

Genpac 是一个用于管理 Gentoo chroots 的开发工具,用于测试无特权和沙箱化的 Ebuild 软件包。

用例: Gentoo ebuild 需要在干净、最小的 Gentoo chroot 中进行测试,以确保任何必需的依赖项没有被系统已安装的包屏蔽或隐藏。这需要一个 干净的测试环境。虽然有很多种方法可以实现这一点,但大多数推荐的方法都需要完整的容器/VM 管理器或具有超级用户权限的 chroot。

Genpac 采用了一种方法,利用一个普通的 chroot(与 VM 或容器工具不同),但具有普通非管理员用户账户的限制权限。Genpac 使用 bubblewrap(一个沙箱工具)和 Linux 用户命名空间(UID/GID 映射)来实现这一点。更多详细信息请参阅配置文档。

功能、特性 & 优势

Genpac 能够做到以下内容

  1. 在预定义的 工作区 目录中管理多个 chroot
  2. 从以下之一创建新的 chroot
  • Gentoo stage3 存档(甚至其他发行版的根存档)
  • 另一个 chroot
  • 指定为默认模板的 chroot
  1. 在 chroot 内启动沙箱应用程序
  • 只读挂载仓库和配置文件(需要系统配置)
  • chroot 内的 root 权限(对于 Portage 工具是必要的)
  • chroot 外没有 root 权限或文件系统访问
  1. 当不再需要时删除 chroot(需要系统配置)
  2. (可选,默认禁用)使用 UIDs/GIDs 映射转换 stage3 存档

Genpac 支持以下 chroot 后端

  • 无(不执行任何操作)
  • Btrfs(完整)
  • 普通目录(计划中)
  • Bcachefs(计划中)

这比传统方法有几个优势

  • 易于管理具有单个单词名称的 chroot 和简单的命令
  • 无需记住或编写必要的挂载或 bubblewrap 参数
  • 只读挂载使得无法在沙箱内损坏仓库或配置文件
    • 这些文件仍然可以从主机命名空间中进行编辑
    • 外部更改会立即反映在沙箱内部
    • 提供了一个用于显示活动chroot的prompt的/etc/profile补丁
  • chroot内容属于普通用户
    • 普通用户可以使用熟悉的工具编辑chroot内容,无需额外的权限
    • 提取stage3存档不需要超级用户权限,即使存档包含具有不同UID/GID的文件
  • 即使应用程序设法绕过沙箱,其权限也仅限于普通用户权限

安装

最终将提供ebuild来安装应用程序。可能需要设置useflags来安装文档和可选功能。本节其余部分将说明如何从源代码安装genpac。

依赖关系

构建时依赖关系

  1. 最新的稳定Rust稳定工具链

较老的工具链(>=1.56)可能可行。但这尚未得到验证。安装工具链的推荐方式是使用rustup。有关更多详细信息,请参阅rustup文档

运行时依赖关系

  1. Bubblewrap用于沙箱化
  2. Tar用于提取stage3存档

构建

可以在源代码树中运行以下命令来构建应用程序

cargo build --release

如果您需要重新映射功能,请添加--features=rempap标志。对于常规使用,可以避免此功能。

然后可以将应用程序从target/release/genpac复制到任何包含在PATH变量中的目录。或者,运行以下命令构建并将genpac安装到cargo二进制文件目录

cargo install --locked --path .

确保cargo二进制文件目录(通常是~/.cargo/bin/)包含在PATH变量中。

设置

Genpac需要两种简单的配置类型

  • 系统级别的subuid & subgid分配(在/etc/subuid/etc/subgid文件中)
  • 用户级别应用程序配置(在~/.config/genpac/config.toml中)

有关更多详细信息,请参阅配置文档。

文档

以下文档可在doc目录中找到

  • 配置
  • 使用说明

这些说明作为AsciiDoc文件提供。可以将它们转换为HTML、PDF或man页面进行查看。

状态 & 贡献

应用程序已准备好供常规使用,并可能被视为Beta质量。然而,1.0版本发布已被推迟,以便进行进一步测试和收集任何有意义的特性请求。

欢迎贡献。修改可以发送到我的sourcehut项目邮件列表,方式如下

您需要对您的提交签注 - 这意味着您在开发者证书起源下认证您的贡献。您的贡献将以与项目其余部分相同的许可证添加,除非明确指定。如果您需要更多信息,请参阅详细的贡献指南

许可证

版权所有 (C) 2023 Gokul Das B

存储库的内容受 GNU 通用公共许可证第 3 版或更高版本(GNU GPLv3 或更高版本)的保护。您可以在本许可证的条款下使用、修改或分发代码。有关更多详细信息,请参阅 LICENSE 或访问 FSF 网站

依赖关系

~7–17MB
~240K SLoC