luet - 基于容器的包管理器
Luet 是一个基于容器的多平台包管理器 - 它使用 Docker(和其他工具)来构建软件包。它没有任何依赖,非常适合"从零开始"的环境。它还可以对整个根文件系统进行版本控制,并支持类似 OTA 的更新,使其成为边缘计算时代和物联网嵌入式设备的完美选择。
它提供了一种简单的 规范文件格式,采用 YAML 表示法来定义 软件包 和 根文件系统。由于它基于容器,因此也可用于构建 Linux From Scratch 安装的各个阶段,并可以为这些系统构建和跟踪更新。
它完全用 Golang 编写,作为包管理器使用时,可以在从零开始的环境中运行,无需任何依赖。
概览
- Luet 可以重用 Gentoo 的 portage 树层次结构,并受到它的启发。
- 它从容器构建,但在机器上进行安装、卸载和升级操作。
- 安装程序不依赖任何东西(零依赖安装程序!),静态编译。
- 您可以将其安装在现有发行版的包管理器旁边,并开始构建和分发您的软件包。
- 支持将软件包作为"层"
- 使用 SAT 求解技术来解决依赖树(受 OPIUM 启发)
- 支持 集合 和 模板化的软件包定义
- 可以通过插件和扩展进行扩展
- 可以在 Kubernetes 中构建软件包(实验性)
- 使用 containerd/go-containerregistry 来操作镜像 - 使用 img 后端也可以无守护进程工作
安装
-
使用官方安装脚本:
$ curl https://luet.io/install.sh | sudo sh
-
或使用
bin
$ bin i github.com/mudler/luet
测试安装:
$ luet --help
$ luet search ...
$ luet install ..
文档
文档 可用,或者运行 luet --help
,所有子命令都有文档,例如:luet build --help
。
依赖解决
Luet 使用 SAT 和强化学习引擎来解决依赖关系。 它将软件包需求编码为 SAT 问题,使用 gophersat 来解决依赖树并给出具体的模型结果。
SAT 编码
每个软件包及其约束都围绕 OPIUM 进行编码和构建。此外,Luet 在构建模型时也无缝处理选择器,添加 ALO(至少一个)和 AMO(至多一个)规则,以保证已安装系统的一致性。
强化学习
Luet 还实现了一个小型且可移植的 Q-learning 代理,当尝试验证您的查询与系统模型时出现冲突时,它将尝试代表您解决这些冲突。
要使用它,只需在支持的子命令中传递 --solver-type qlearning
(您可以通过调用 --help
来查看)。
作者
感谢我们出色的 贡献者,Luet 才得以实现!
Luet 最初由 Ettore Di Giacinto 创建,mudler@sabayon.org,mudler@gentoo.org。
许可证
Luet 根据 GPLv3 条款分发,请查看 LICENSE 文件。