【免费下载链接】Shelly-ALPMPacman alternative for ArchLinux, designed with you in mind.项目地址https://gitcode.com/gh_mirrors/sh/Shelly-ALPM点击查看免费下载Shelly 是面向 Arch Linux 的现代化包管理器也是 Pacman 的有力替代方案。它用 Zig 重写核心、用 GTK4 构建图形界面统一管理原生仓库、AUR、Flatpak 与 AppImage 四类软件源。这篇文章带你从一条安装命令出发拆解 Shelly 的包管理核心架构与背后的设计理念帮助新手理解它究竟在系统里做了什么。一、设计理念重新想象与系统的交互方式对新手来说Shelly 的定位可以概括为一句话Pacman 负责能装Shelly 负责好装。它没有抛弃 Arch 生态的根基而是在其之上重建了一层友好的交互️图形优先基于 GTK4 的 Wayland 原生界面安装、升级、搜索都是可视化的⌨️CLI 同级shelly命令行提供与 UI 完全对等的核心能力适合自动化与脚本多源统一标准仓库standard、AUR、Flatpak、AppImage 在同一个管理器中并列管理可插拔后端底层引擎、Flatpak 支持都可以按需启用或替换。这种多入口、单核心的思路正是整个架构的地基。二、整体架构一次安装命令如何跑完全程分层UI、CLI 与核心库的清晰边界Shelly 采用严格的三层架构层与层之间通过进程边界而非共享内存通信这是它最独特的设计之一用户GUI / 终端 │ Shelly-UIGTK4──► Shelly-CLIZig 命令行──sudo 提权 │ Shelly.PackageManager核心库 ┌─────────────┼─────────────┐ libalpm 后端 AUR 构建器 Flatpak/AppImage关键规则写在 CONTRIBUTING.md 中UI 永远不直接链接核心库。GUI 需要安装、移除、升级这类提权操作时会以sudo启动 CLI 并附加--ui-mode标志CLI 随后输出结构化的帧数据JSON 进度帧UI 解析这些帧来刷新进度条和状态提示。这样设计的好处非常实际提权只发生在 CLI 进程中图形进程保持普通用户权限同一套命令逻辑同时服务终端用户和 GUI行为天然一致UI 崩溃或更新不会波及核心核心升级也不会破坏 GUI 依赖。组件地图仓库按职责拆分为多个 Zig 子项目核心组件一览组件职责路径Shelly.Cli.Zig命令行入口、命令解析与分派Shelly.Cli.Zig/Shelly.Ui.GtkGTK4 图形界面Shelly.Ui.Gtk/Shelly.PackageManager核心库原生包、AUR、AppImage、Flatpak 门面Shelly.PackageManager/Shelly.Rlpm自研 Zig 原生包后端RLPMShelly.Rlpm/Shelly.Flatpak.Backend可选的 Flatpak 版本化共享库Shelly.Flatpak.Backend/Shelly.Http独立 HTTP 客户端与兼容 TLS 实现Shelly.Http/Shelly.KeyGPG 密钥环管理与签名验证Shelly.Key/Shelly.Notifications.Zig托盘与桌面通知服务Shelly.Notifications.Zig/当你在终端输入shelly -Is zed --needed时流程大致是main.zig 完成信号处理、会话日志与会话上下文初始化随后 dispatcher.zig 将命令依次交给 config、search、install、upgrade 等分派模块匹配命中安装命令后核心库解析依赖、下载包、执行事务事件通过统一的事件流回传给终端或 GUI。三、双后端设计libalpm 与自研 RLPM 引擎为什么要有第二个后端Shelly 默认调用 Arch 官方使用的libalpm引擎保证与系统行为完全一致同时它正在用 Zig 从零实现一个功能对等的原生后端RLPM目标包括 CachyOS 扩展见 Shelly.Rlpm/README.md。这套双轨制由统一的门面facade封装核心库中的Manager每个实例只持有恰好一个后端对外暴露的包记录、事件、错误类型都定义在中立模块中调用方完全感知不到底层是 libalpm 还是 RLPM。相关契约定义在 Shelly.PackageManager/src/alpm/manager.zig 与 contract.zig。运行时一键切换引擎切换后端不需要重新编译只需一条配置命令shelly config get NativePackageBackend shelly config set NativePackageBackend rlpm shelly config set NativePackageBackend libalpm配置保存在~/.config/shelly/config.json对下一次 CLI 调用生效GUI 通过 CLI 复用同一选择。完整规则见 docs/native-package-backends.md。两个细节体现了架构的严谨性编译期也有开关-Dlibalpmfalse可构建纯 RLPM 版本产物中不允许残留任何 libalpm 依赖路径与后端解耦Shelly 支持pacman与devario两套路径画像配置文件、数据库、缓存、密钥环的位置不同由共享模块 Shelly.Paths 统一管理默认画像与/etc/pacman.conf体系完全兼容。RLPM 采用Owner / Database / Package / Transaction的所有权模型Owner 持有配置与仓库注册的完整副本事务有独占锁与冻结的准备阶段失败替换配置时保留旧状态。其兼容性由一份公开的账本追踪493 个公开符号、25 项行为契约并用固定版本的参考场景做回归验证。单一可执行文件的 Worker 模式一个容易被忽略的设计Shelly 的下载 worker 与事务动作 worker 不是独立小工具而是主可执行文件的保留模式。子进程通过重执行/proc/self/exe启动这些模式因此即使升级过程中安装路径本身被替换worker 依然可用不需要任何伴随二进制文件。分发与回收逻辑位于 Shelly.Rlpm/src/workers.zig入口分派在 main.zig 的最早阶段完成。四、AUR 构建管线从 PKGBUILD 审查到隔离编译AUR 支持是 Shelly 最受关注的部分它的构建管线 Shelly.PackageManager/src/aur/builder/ 把makepkg -si的流程做成了可审查、可隔离的流水线可用性校验shelly -Ia package会先向 AUR 服务确认包确实存在缓存的 Git 仓库不能越权构建已删除的包PKGBUILD 审查构建前在终端以 diff 形式展示变更行默认折叠上下文CollapsePkgbuildDiff可关闭安全扫描器会检查安装脚本等潜在风险见 pkgbuild_review.zig源码获取与校验支持 GPG 签名验证的源码下载source_pgp_verifier.zig 负责独立验证生命周期执行pkgver、build、package等步骤逐步执行失败会精确报告在哪个包、哪个步骤、退出码是多少。隔离构建在私有根里编译进阶能力shelly -Ia --isolated package通过systemd-nspawn为每个包准备一个全新的 Arch 根环境仓库构建依赖装在访客内编译产物导出后再走宿主机的正常事务安装。提权进程只充当协调者PKGBUILD 生命周期以固定的非特权shelly-build访客账户运行且要求私有 UID 映射——拿不到就干脆失败fail closed。详细规则见 docs/isolated-builds.md。对新手而言这意味着AUR 编译不会污染你的系统环境依赖冲突在隔离根里解决装进宿主机的只有干净的.pkg.tar。五、安全设计沙箱下载与可选后端隔离Shelly 的安全考量贯穿全链路下载沙箱包下载运行在受限沙箱中支持凭据降级与并发下载队列实现见 Shelly.Download/ 与 Sandbox.zig签名信任链GPG 密钥环管理是独立组件密钥填充、信任级别、过期/吊销键都有专门测试见 Shelly.Key/ 与 docs/TESTING.mdFlatpak 零负担集成Flatpak 是纯可选项。核心库不链接libflatpak只在执行 Flatpak 操作时惰性加载/usr/lib/shelly/libshelly-flatpak-backend.so.1这个 ABI 版本化共享库协议 schema 会拒绝未知与重复字段。不装 Flatpak 的 Shelly 依旧完整可用加载规则记录在 docs/flatpak-backend-abi.md⚖️统一操作上下文原生包、AUR、Flatpak、AppImage、本地包五个后端共享同一条事件/提问/取消 API任何后端的中断Ctrl-C都能优雅终止整个事务。六、架构小结Shelly 做对了什么回顾全文Shelly 的包管理架构可以浓缩成四个决策决策解决的问题UI 不直连核心库经 CLI 帧协议通信权限隔离、行为一致、易测试双后端 中立门面平滑迁移自研引擎用户无感切换单可执行文件多 Worker 模式升级自替换场景下的部署简单性可插拔的 Flatpak/AppImage 支持按需启用基础安装零负担如果你想继续深挖推荐从 docs/isolated-builds.md、docs/native-package-backends.md 与 Shelly.Rlpm/ 的各专题文档数据库、事务、执行器、验证入手那里记录了每个模块的 API、生命周期与兼容性边界。Shelly 用 Zig 证明了一件事包管理器不仅可以能跑还可以被彻底读懂、替换与演进。赞分享【免费下载链接】Shelly-ALPMPacman alternative for ArchLinux, designed with you in mind.项目地址https://gitcode.com/gh_mirrors/sh/Shelly-ALPM点击查看免费下载相关推荐KPlayer-go完全指南从安装到推流的5分钟快速上手教程KPlayer go完全指南从安装到推流的5分钟快速上手教程 KPlayer go是一款专为无图形界面服务器设计的直播推流工具帮助用户快速实现视频资源的循环深入ko架构理解其核心设计理念深入ko架构理解其核心设计理念 ko作为一个现代化的Kubernetes容器构建工具其架构设计体现了高度的模块化和可扩展性。通过深入分析其代码结构我们可以开发工具云原生如何为自定义键盘构建ZMK固件从零到完整功能的实践指南如何为自定义键盘构建ZMK固件从零到完整功能的实践指南 想象一下你刚刚设计好了一块完美的键盘PCB所有按键都焊接完毕但当你按下按键时——什么反应都没有。固件嵌入式智能硬件蓝牙创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考