yay (Yet Another Yogurt)
1. 概述与核心定位
- 名称:yay(Yet Another Yogurt)
- 类型:Arch Linux 官方包管理器
pacman的增强封装器(Wrapper)与 AUR 助手(AUR Helper)。 - 核心定位:无缝桥接 Arch 官方软件仓库与社区驱动的 AUR(Arch User Repository),以统一的 CLI 交互处理官方预编译二进制包和社区源码构建包。
2. 核心概念与架构设计
官方仓库 vs AUR
- 官方仓库(Core / Extra / Multilib):提供经官方打包测试的预编译二进制包(
.pkg.tar.zst),直接通过pacman极速下载解压安装。 - AUR(用户仓库):存放的是构建脚本(
PKGBUILD)与元数据,而不是编译好的成品。安装时需在本地从源码拉取、安装编译工具并就地编译打包。
权限分离原则(Security Model)
- 绝不以 root 身份运行 yay:AUR 脚本属于社区提供,以 root 直接运行存在极大安全隐患。
- 普通用户编译:拉取源码、解压、打补丁及执行编译全程使用当前普通用户权限(
makepkg强制要求非 root)。 - 按需提权(sudo):仅在“安装系统级编译依赖(Make Dependencies)”和“将打包好的软件安装到系统目录(
/usr)”这两个关键节点提示输入sudo密码。
本地编译与构建缓存
- 构建环境:默认直接运行于宿主系统环境(依赖安装到系统,编译在普通用户空间执行)。
- 缓存位置:源码仓库与中间产物默认存放于
~/.cache/yay/<包名>/。 - 生成产物:最终产物为标准的 Arch 软件包(如
<包名>-<版本>.pkg.tar.zst),内部包含二进制程序、.desktop桌面入口、图标及系统依赖声明。
3. AUR 软件包安装与构建完整流程
flowchart TD Start["执行 yay -S <aur-pkg>"] --> Resolve["1. 解析依赖(区分运行依赖与编译依赖)"] Resolve --> PromptClean{"2. 交互提示: 是否 cleanBuild 缓存?"} PromptClean --> CheckMakeDeps{"3. 系统是否已安装编译依赖 (MakeDeps)?"} CheckMakeDeps -->|否| SudoMake["[sudo] 调用 pacman 安装构建工具 (如 rust, meson, ninja)"] CheckMakeDeps -->|是| Fetch["4. 拉取/更新 PKGBUILD 与源码到 ~/.cache/yay/"] SudoMake --> Fetch Fetch --> PromptDiff{"5. 交互提示: 是否审查代码改动 (Diffs)?"} PromptDiff --> Build["6. 普通用户执行编译与打包 (makepkg)"] Build --> PkgDone["生成本地归档包: <pkg>.pkg.tar.zst"] PkgDone --> SudoInstall["[sudo] 调用 pacman -U 安装至系统根目录"] SudoInstall --> PromptCleanDeps{"7. 交互提示: 是否清理编译依赖 (Remove make dependencies)?"} PromptCleanDeps -->|y| RemoveDeps["[sudo] 卸载仅用于构建的工具,节省磁盘"] PromptCleanDeps -->|N| Done["安装完成"] RemoveDeps --> Done
4. 关键交互提示释义(Prompts Reference)
在执行 AUR 软件包安装时,yay 会在不同阶段触发以下经典提示:
| 提示内容 | 触发时机 | 选项含义与推荐选择 |
|---|---|---|
Packages to cleanBuild? | 本地已有历史构建缓存时 | • [N]one(默认,直接回车):保留缓存增量构建,速度最快。• [A]ll:清空缓存彻底重拉构建,排查编译报错时使用。 |
Diffs to show? | 准备构建前 | • 提示是否查看 PKGBUILD 及相关补丁的安全差异。 • 默认直接回车( None)跳过审查;安装不信任来源时可输入对应编号核查代码。 |
looking for conflicting packages... | 准备安装依赖/本体时 | • 此为 pacman 的常规安全性检查日志(“正在核验是否存在文件/包冲突”),属于正常流程,并非发生冲突。 |
Remove make dependencies after install? [y/N] | 编译并安装全部完成之后 | • 是否自动卸载仅在编译期间派上用场的重型构建工具(如 rust、meson、lld)。• 空间紧张输 y 清理;后续经常编译此类项目直接回车(N)保留。 |
5. 常用命令速查(Cheat Sheet)
安装与更新
# 安装官方包或 AUR 包(语法与 pacman -S 完全一致)
yay -S <package-name>
# 全系统滚动更新(同步更新官方包与所有已安装的 AUR 包)
yay -Syu
# 或简写为(不加任何参数即默认执行 -Syu)
yay
# 强制重新构建并安装 AUR 包
yay -S --rebuild <aur-pkg>搜索与信息查看
# 跨官方源和 AUR 模糊搜索软件包
yay -Ss <keyword>
# 查看软件仓库详情(源码地址、依赖、许可证等)
yay -Si <package-name>
# 查看本机已安装包的信息与安装时间
yay -Qi <package-name>
# 列出某个已安装包释放的所有文件路径
yay -Ql <package-name>卸载与清理
# 彻底卸载软件包及其不再被其他软件依赖的孤立依赖(推荐)
yay -Rns <package-name>
# 清理未安装包的下载缓存及无用构建缓存
yay -Sc
# 彻底清空所有包缓存(释放大量磁盘)
yay -Scc