Arch 用户软件仓库 (AUR)
Arch 用户软件仓库 (AUR) 是一个面向 Arch Linux 用户的社区驱动型仓库。它包含软件包描述 (PKGBUILD),允许您使用 makepkg 从源代码编译软件包,然后通过 pacman 进行安装。创建 AUR 的目的是为了组织和分享来自社区的新软件包,并帮助加快热门软件包进入 extra 仓库的速度。本文档说明了用户如何访问和使用 AUR。
进入官方仓库的大量新软件包都是从 AUR 开始的。在 AUR 中,用户可以贡献自己的软件包构建脚本(PKGBUILD 及相关文件)。AUR 社区可以为 AUR 中的软件包投票。如果一个软件包变得足够受欢迎——前提是它具有兼容的许可证和良好的打包技术——它可能会被移入 extra 仓库(可直接通过 pacman 或从 Arch 构建系统访问)。
PKGBUILD 完全是非官方的,且未经彻底审查。使用所提供的文件风险自担。入门指南
用户可以从 AUR Web 界面搜索并下载 PKGBUILD。这些 PKGBUILD 可以使用 makepkg 构建成可安装的软件包,然后使用 pacman 安装。
- 确保已安装 base-devel。
- 浏览一下#常见问题解答,了解最常见问题的答案。
- 在从 AUR 构建软件包之前,您可能希望调整
/etc/makepkg.conf以针对您的系统优化构建过程。在多核处理器系统上,通过调整MAKEFLAGS变量、使用多核进行压缩或使用不同的压缩算法,可以显著缩短软件包构建时间。用户还可以通过CFLAGS变量启用特定于硬件的编译器优化。有关更多信息,请参阅 makepkg#优化。
如果您已设置了 AUR SSH 身份验证,那么也可以通过 SSH 与 AUR 交互:输入 ssh aur@aur.archlinux.org help 获取可用命令列表。
安装和升级软件包
从 AUR 安装软件包是一个相对简单的过程。本质上:
- 获取构建文件,包括
PKGBUILD以及可能需要的其他文件,例如 systemd 单元文件和补丁(通常不包含实际代码)。 - 核实
PKGBUILD及其附带文件并非恶意或不可信。 - 在保存文件的目录中运行
makepkg。这将下载代码、编译并打包。 - 运行
pacman -U package_file将软件包安装到您的系统上。
前提条件
首先,通过安装 base-devel 确保已安装必要工具;这个元软件包将 make 和其他从源代码编译所需的工具列为依赖项。
接下来,选择一个合适的构建目录。构建目录只是一个用于从源代码制作或“构建”软件包的目录,可以是任何目录。以下各节中的示例将使用 ~/builds 作为构建目录。
获取构建文件
在 AUR 中查找软件包。这可以使用 AUR 主页顶部的搜索栏完成。在搜索列表中点击应用程序名称将打开软件包的信息页面。仔细阅读描述以确认这是所需的软件包,留意软件包最后更新的时间,并阅读任何评论。
有几种方法可以获取软件包的构建文件:
- 克隆其 Git 仓库,该地址在 AUR 页面“Package Details”中标记为“Git Clone URL”。这是首选方法,其优势在于您可以通过
git pull轻松获取软件包更新。
$ git clone https://aur.archlinux.org/package_name.git
- 下载快照,可以点击 AUR 页面右侧“Package Actions”下的“Download snapshot”链接,或在终端中操作:
$ curl -L -O https://aur.archlinux.org/cgit/aur.git/snapshot/package_name.tar.gz
- 注意: 快照文件是经过压缩的,必须解压(最好解压到为 AUR 构建预留的目录中):
tar -xvf package_name.tar.gz
- 使用 GitHub 上的只读镜像 archlinux/aur,每个软件包都位于一个分支中。建议仅克隆单个分支(整个仓库太大,性能会很低)。您可以使用以下两种方法之一执行此操作:
$ git clone --depth=1 https://github.com/archlinux/aur.git; cd aur
$ git remote set-branches --add origin package_name
$ git fetch
$ git switch package_name
(可选)获取 PGP 公钥
检查 PKGBUILD 的 source 数组中是否包含 .sig 或 .asc 形式的签名文件。如果是这种情况,请获取 PKGBUILD validpgpkeys 数组中列出的公钥之一。有关更多信息,请参阅 makepkg#签名检查。
构建软件包
切换到包含 PKGBUILD 文件的目录。
$ cd package_name
PKGBUILD、任何 .install 文件以及软件包 Git 仓库中的任何其他文件,查看是否存在恶意或危险命令。如有疑虑,请勿构建该软件包,并到论坛或邮件列表寻求建议。过去曾在软件包中发现过恶意代码。[3] [4]查看所有提供的文件的内容。例如,要使用分页器 less 查看 PKGBUILD,请执行:
$ less PKGBUILD
- 要查看自上次 Git 提交以来的更改,可以使用
git show。 - 要使用 vimdiff 查看自上次提交以来的更改,请运行
git difftool @~..@ --tool=vimdiff。vimdiff 的优势在于您可以查看每个文件的完整内容,以及指示更改位置的标记。
制作软件包。在手动确认文件内容后,以普通用户身份运行 makepkg。一些有用的参数:
-s/--syncdeps在构建前自动使用 pacman 解析并安装所有依赖项。如果该软件包依赖于其他 AUR 软件包,您需要先手动安装它们。-i/--install如果构建成功则安装软件包。这可以让您跳过通常手动执行的下一步。-r/--rmdeps在构建后删除构建时依赖项,因为不再需要它们。但是,下次更新软件包时可能需要重新安装这些依赖项。-c/--clean在构建后清理临时构建文件,因为不再需要它们。这些文件通常仅在调试构建过程时需要。
git clean -dfx 删除所有未被 Git 追踪的文件,从而删除所有之前构建的软件包文件。安装软件包
现在可以使用 pacman 安装该软件包:
# pacman -U package_name-version-architecture.pkg.tar.zst
makepkg --packagelist 获取在不构建的情况下将产生的软件包文件名列表。升级软件包
在包含软件包 PKGBUILD 的目录中,您必须先使用以下命令更新文件和更改:
$ git pull
然后按照之前的构建和安装说明进行操作。
更新软件包
AUR 是不受支持的,因此您安装的任何软件包都由您负责更新,而不是 pacman 的责任。如果官方仓库中的软件包进行了更新,您将需要重新构建任何依赖于这些库的 AUR 软件包。来自 rebuild-detector 的 checkrebuild 工具和 rebuild-detector 钩子 (hook) 可以帮助找到需要重新构建的软件包。
账户状态
停用 (Suspension)
当软件包维护者编辑用户时,可以设置 Suspended 字段,从而停用目标用户。当用户被停用后,他们无法:
- 登录 https://aur.archlinux.org
- 接收通知
- 与 Git 界面交互
非活跃 (Inactivity)
当编辑您自己的账户或作为软件包维护者编辑他人账户时,可以设置 Inactive 字段。非活跃账户用于两个原因:
- 在用户的账户页面上显示某人被标记为非活跃的日期
- 为新提案生成基于其非活跃状态的当前活跃软件包维护者计数
反馈
评论软件包
AUR Web 界面具有评论功能,允许用户向 PKGBUILD 贡献者提供改进建议和反馈。
PKGBUILD:它们很快就会过时,最终只会无谓地占用大量空间。相反,请将这些文件发送邮件给维护者,甚至使用 pastebin。Python-Markdown 提供基础的 Markdown 语法来格式化评论。
为软件包投票
对于所有 Arch 用户来说,最简单的活动之一就是浏览 AUR 并使用在线界面为他们喜爱的软件包投票。所有软件包都有资格被软件包维护者收录到 extra 仓库中,而投票数是该过程的考虑因素之一;投票符合每个人的利益!
在 AUR 网站注册以在浏览软件包时获得“Vote for this package”选项。注册后,也可以使用 aur-auto-vote-gitAUR 从命令行投票。
或者,如果您设置了 AUR SSH 身份验证,您可以直接使用 SSH 密钥从命令行投票。这意味着您无需保存或输入 AUR 密码。
$ ssh aur@aur.archlinux.org vote package_name
标记软件包已过时
首先,您应该将软件包标记为 out-of-date(已过时),说明软件包过时的详细原因,最好包含指向发布公告或新版本 tarball 的链接。
您还应该尝试通过电子邮件直接联系维护者。如果维护者在两周后仍无回应,您可以提交 orphan(孤立)请求。详情请参阅 AUR 提交指南#请求。
调试软件包构建过程
- 在构建任何内容之前,通过升级系统确保您的构建环境是最新的。
- 确保您已安装了 base-devel。
- 在
makepkg中使用-s选项,以便在开始构建过程之前检查并安装所需的所有依赖项。 - 尝试使用默认的 makepkg 配置。
- 有关常见问题,请参阅 Makepkg#疑难解答。
如果您在构建软件包时遇到困难,请先阅读其 PKGBUILD 和 AUR 页面上的评论。
PKGBUILD 可能对所有人都是损坏的。如果您无法自行解决,请将其报告给维护者(例如,通过在 AUR 页面的评论中发布您遇到的错误)。您也可以在 AUR 问题、讨论和 PKGBUILD 请求论坛中寻求帮助。
原因可能并不简单。自定义的 CFLAGS、LDFLAGS 和 MAKEFLAGS 可能会导致失败。为了避免由于您特定的系统配置引起的问题,请在干净的 chroot 中构建软件包。如果构建过程在干净的 chroot 中仍然失败,则问题可能出在 PKGBUILD 上。
请参阅 Creating packages#Checking package sanity 关于如何使用 namcap。如果您希望您的 PKGBUILD 得到评审,请将其发布到 aur-general 邮件列表,以获得 Package Maintainers 和其他 AUR 成员的反馈,或发布到 创建与修改软件包论坛。您也可以在 IRC 频道 #archlinux-aur(位于 Libera Chat 网络)寻求帮助。
提交软件包
用户可以使用 Arch 用户软件仓库分享 PKGBUILD。详情请参阅 AUR 提交指南。
Web 界面翻译
有关创建和维护 AUR Web 界面翻译的信息,请参阅 AUR 源码树中的 i18n.md。
历史
最初,只有 ftp://ftp.archlinux.org/incoming,人们通过简单地将 PKGBUILD、所需的补充文件以及构建好的软件包本身上传到服务器来做贡献。软件包和相关文件保留在那里,直到一位“受信任的用户”(现已更名为软件包维护者)看到并收录该程序。
随后,受信任用户仓库 (Trusted User Repositories) 诞生了。社区中的某些个人被允许托管他们自己的仓库供所有人使用。AUR 在此基础上进行了扩展,旨在使其更具灵活性和可用性。事实上,AUR 维护者一直被称为 TU (Trusted Users),直到名称更改为软件包维护者。
在 2015-06-08 到 2015-08-08 之间,AUR 从 3.5.1 版本过渡到 4.0.0 版本,引入了使用 Git 仓库发布 PKGBUILD。除非维护者手动迁移到新架构,否则现有的软件包将被移除。
AUR3 软件包的 Git 仓库
GitHub 上的 AUR Archive 为迁移时 AUR 3 中的每个软件包都建立了一个仓库。或者,aur3-mirror 仓库也提供同样的内容。
常见问题解答
AUR 允许什么样的软件包?
AUR 上的软件包仅仅是“构建脚本”,即为 pacman 构建二进制文件的配方。在大多数情况下,只要您符合内容的许可条款,并符合有用性和范围指南,一切都是被允许的。在其他情况下,如果提到“不得链接”到下载内容(即不可重新分发的内容),您只能将文件名本身用作 source。这意味着并要求用户在构建软件包之前,构建目录中已存在该受限源代码。如有疑问,请询问。
我如何为 AUR 中的软件包投票?
见 #为软件包投票。
什么是软件包维护者?
Arch 用户软件仓库和 extra 仓库有什么区别?
Arch 用户软件仓库是存储用户提交的所有 PKGBUILD 的地方,必须使用 makepkg 手动构建。当 PKGBUILD 获得足够的社区关注并得到一位软件包维护者的支持时,它们会被移入 extra 仓库(由软件包维护者维护),届时可以使用 pacman 安装二进制包。
AUR 中的某软件已过时;我该怎么办?
见 #标记软件包已过时。
在此期间,您可以尝试通过在本地编辑 PKGBUILD 来自己更新软件包。有时,更新不需要更改构建或打包过程,在这种情况下,只需更新 pkgver 或 source 数组即可。
运行 makepkg 时 AUR 中的某软件编译失败;我该怎么办?
您可能遗漏了一些简单的东西;见 #调试软件包构建过程。
错误:一个或多个 PGP 签名无法验证!;我该怎么办?
最有可能的情况是,您的个人密钥环中没有验证下载文件所需的公钥。详情见 Makepkg#签名检查。
如何创建 PKGBUILD?
参考 AUR 提交指南#提交规则,然后阅读创建软件包。
我有一个想提交的 PKGBUILD;有人能帮我检查一下是否有错吗?
有多个渠道可以提交您的软件包进行审查;见 #调试软件包构建过程。
如何将 PKGBUILD 移入 extra 仓库?
通常,某项内容至少需要 10 票才能移入 extra。但是,如果一位软件包维护者想要支持某个软件包,它往往就会出现在仓库中。
达到所需的最低投票数并不是唯一的条件;必须有一位愿意维护该软件包的维护者。即使某个软件包有数千张选票,软件包维护者也没有义务将其移入 extra 仓库。
通常,当一个非常受欢迎的软件包留在 AUR 时,是因为:
另请参阅 软件包进入 extra 仓库的规则
我如何加快重复构建的过程?
foo 和 foo-git 软件包之间有什么区别?
许多 AUR 软件包都提供“稳定”发布版和“不稳定”开发版。开发版软件包通常带有表示其版本控制系统的后缀,不建议常规使用,但可能提供新功能或错误修复。因为这些软件包仅在您执行 makepkg 时下载最新的可用源码,所以它们在 AUR 中的 pkgver() 并不反映上游的更改。同样,这些软件包无法对任何 VCS 源码执行完整性校验和。
另请参阅 系统维护#使用经过验证的软件包。
为什么 foo 从 AUR 中消失了?
有可能该软件包已被一位软件包维护者收录,现在位于 extra 仓库中。
如果软件包不符合提交规则,它们可能会被删除。删除原因请查看 aur-requests 归档。
我如何发现已安装的软件包是否已从 AUR 消失?
最简单的方法是检查软件包 AUR 页面的 HTTP 状态:
$ comm -23 <(pacman -Qqm | sort) <(curl https://aur.archlinux.org/packages.gz | gzip -cd | sort)
我如何获取所有 AUR 软件包的列表?
- https://aur.archlinux.org/packages.gz
- 使用 python3-aurAUR 中的
aurpkglist - 新 AUR 元数据归档