1 个不稳定版本
0.1.0 | 2023年12月29日 |
---|
#508 在 开发工具 中
90KB
2K SLoC
gentoo 打包环境 (genpac)
Genpac 是一个用于管理 Gentoo chroots 的开发工具,用于测试无特权和沙箱化的 Ebuild 软件包。
用例: Gentoo ebuild 需要在干净、最小的 Gentoo chroot 中进行测试,以确保任何必需的依赖项没有被系统已安装的包屏蔽或隐藏。这需要一个 干净的测试环境。虽然有很多种方法可以实现这一点,但大多数推荐的方法都需要完整的容器/VM 管理器或具有超级用户权限的 chroot。
Genpac 采用了一种方法,利用一个普通的 chroot(与 VM 或容器工具不同),但具有普通非管理员用户账户的限制权限。Genpac 使用 bubblewrap(一个沙箱工具)和 Linux 用户命名空间(UID/GID 映射)来实现这一点。更多详细信息请参阅配置文档。
功能、特性 & 优势
Genpac 能够做到以下内容
- 在预定义的 工作区 目录中管理多个 chroot
- 从以下之一创建新的 chroot
- Gentoo stage3 存档(甚至其他发行版的根存档)
- 另一个 chroot
- 指定为默认模板的 chroot
- 在 chroot 内启动沙箱应用程序
- 只读挂载仓库和配置文件(需要系统配置)
- chroot 内的 root 权限(对于 Portage 工具是必要的)
- chroot 外没有 root 权限或文件系统访问
- 当不再需要时删除 chroot(需要系统配置)
- (可选,默认禁用)使用 UIDs/GIDs 映射转换 stage3 存档
Genpac 支持以下 chroot 后端
- 无(不执行任何操作)
- Btrfs(完整)
- 普通目录(计划中)
- Bcachefs(计划中)
这比传统方法有几个优势
- 易于管理具有单个单词名称的 chroot 和简单的命令
- 无需记住或编写必要的挂载或 bubblewrap 参数
- 只读挂载使得无法在沙箱内损坏仓库或配置文件
- 这些文件仍然可以从主机命名空间中进行编辑
- 外部更改会立即反映在沙箱内部
- 提供了一个用于显示活动chroot的prompt的
/etc/profile
补丁
- chroot内容属于普通用户
- 普通用户可以使用熟悉的工具编辑chroot内容,无需额外的权限
- 提取stage3存档不需要超级用户权限,即使存档包含具有不同UID/GID的文件
- 即使应用程序设法绕过沙箱,其权限也仅限于普通用户权限
安装
最终将提供ebuild来安装应用程序。可能需要设置useflags来安装文档和可选功能。本节其余部分将说明如何从源代码安装genpac。
依赖关系
构建时依赖关系
- 最新的稳定Rust稳定工具链
较老的工具链(>=1.56)可能可行。但这尚未得到验证。安装工具链的推荐方式是使用rustup。有关更多详细信息,请参阅rustup文档。
运行时依赖关系
- Bubblewrap用于沙箱化
- 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