跳转至内容

Arch 用户软件仓库 (AUR)

来自 ArchWiki
(从 AUR archive 重定向而来)

Arch 用户软件仓库 (AUR) 是一个面向 Arch Linux 用户的社区驱动型仓库。它包含软件包描述 (PKGBUILD),允许您使用 makepkg 从源代码编译软件包,然后通过 pacman 进行安装。创建 AUR 的目的是为了组织和分享来自社区的新软件包,并帮助加快热门软件包进入 extra 仓库的速度。本文档说明了用户如何访问和使用 AUR。

进入官方仓库的大量新软件包都是从 AUR 开始的。在 AUR 中,用户可以贡献自己的软件包构建脚本(PKGBUILD 及相关文件)。AUR 社区可以为 AUR 中的软件包投票。如果一个软件包变得足够受欢迎——前提是它具有兼容的许可证和良好的打包技术——它可能会被移入 extra 仓库(可直接通过 pacman 或从 Arch 构建系统访问)。

警告: AUR 软件包是用户产生的内容。这些 PKGBUILD 完全是非官方的,且未经彻底审查。使用所提供的文件风险自担。
注意: 如果您打算使用 AUR 仓库,强烈建议关注 aur-general Arch 邮件列表,该列表过去曾被用于发布安全警告。[1] [2]

入门指南

用户可以从 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 安装软件包是一个相对简单的过程。本质上:

  1. 获取构建文件,包括 PKGBUILD 以及可能需要的其他文件,例如 systemd 单元文件和补丁(通常不包含实际代码)。
  2. 核实 PKGBUILD 及其附带文件并非恶意或不可信。
  3. 在保存文件的目录中运行 makepkg。这将下载代码、编译并打包。
  4. 运行 pacman -U package_file 将软件包安装到您的系统上。

前提条件

首先,通过安装 base-devel 确保已安装必要工具;这个元软件包make 和其他从源代码编译所需的工具列为依赖项。

注意: AUR 中的软件包假设构建环境中已安装 base-devel

接下来,选择一个合适的构建目录。构建目录只是一个用于从源代码制作或“构建”软件包的目录,可以是任何目录。以下各节中的示例将使用 ~/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 --single-branch
      $ git clone --branch package_name --single-branch https://github.com/archlinux/aur.git
    • 对该仓库执行部分克隆 (git clone --depth=1) 并选择性地添加分支
$ 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=vimdiffvimdiff 的优势在于您可以查看每个文件的完整内容,以及指示更改位置的标记。

制作软件包。在手动确认文件内容后,以普通用户身份运行 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.conf 中更改了 PKGEXT,则软件包文件的名称可能会略有不同。
  • 以上示例仅是构建过程的简要总结。强烈建议阅读 makepkgArch 构建系统文章了解更多详情。
提示: 您可以使用 makepkg --packagelist 获取在不构建的情况下将产生的软件包文件名列表。

升级软件包

在包含软件包 PKGBUILD 的目录中,您必须先使用以下命令更新文件和更改:

$ git pull

然后按照之前的构建和安装说明进行操作。

更新软件包

AUR 是不受支持的,因此您安装的任何软件包都由您负责更新,而不是 pacman 的责任。如果官方仓库中的软件包进行了更新,您将需要重新构建任何依赖于这些库的 AUR 软件包。来自 rebuild-detectorcheckrebuild 工具和 rebuild-detector 钩子 (hook) 可以帮助找到需要重新构建的软件包。

账户状态

停用 (Suspension)

软件包维护者编辑用户时,可以设置 Suspended 字段,从而停用目标用户。当用户被停用后,他们无法:

非活跃 (Inactivity)

当编辑您自己的账户或作为软件包维护者编辑他人账户时,可以设置 Inactive 字段。非活跃账户用于两个原因:

  • 在用户的账户页面上显示某人被标记为非活跃的日期
  • 为新提案生成基于其非活跃状态的当前活跃软件包维护者计数

反馈

评论软件包

AUR Web 界面具有评论功能,允许用户向 PKGBUILD 贡献者提供改进建议和反馈。

提示: 避免在评论区粘贴补丁或 PKGBUILD:它们很快就会过时,最终只会无谓地占用大量空间。相反,请将这些文件发送邮件给维护者,甚至使用 pastebin

Python-Markdown 提供基础的 Markdown 语法来格式化评论。

  • 此实现在某些情况下与官方语法规则存在差异
  • 指向软件包 Git 仓库的提交哈希和对 Flyspray 工单的引用会自动转换为链接。
  • 较长的评论会被折叠,并可根据需要展开。

为软件包投票

对于所有 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 提交指南#请求

注意:pkgver 发生变化时,VCS 软件包不被视为已过时;请勿标记它们,因为维护者只会取消标记并忽略您。AUR 维护者不应仅为了 pkgver 的提升而提交更新。

调试软件包构建过程

  1. 在构建任何内容之前,通过升级系统确保您的构建环境是最新的。
  2. 确保您已安装了 base-devel
  3. makepkg 中使用 -s 选项,以便在开始构建过程之前检查并安装所需的所有依赖项。
  4. 尝试使用默认的 makepkg 配置
  5. 有关常见问题,请参阅 Makepkg#疑难解答

如果您在构建软件包时遇到困难,请先阅读其 PKGBUILD 和 AUR 页面上的评论。

PKGBUILD 可能对所有人都是损坏的。如果您无法自行解决,请将其报告给维护者(例如,通过在 AUR 页面的评论中发布您遇到的错误)。您也可以在 AUR 问题、讨论和 PKGBUILD 请求论坛中寻求帮助。

原因可能并不简单。自定义的 CFLAGSLDFLAGSMAKEFLAGS 可能会导致失败。为了避免由于您特定的系统配置引起的问题,请在干净的 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 术语#软件包维护者

Arch 用户软件仓库和 extra 仓库有什么区别?

Arch 用户软件仓库是存储用户提交的所有 PKGBUILD 的地方,必须使用 makepkg 手动构建。当 PKGBUILD 获得足够的社区关注并得到一位软件包维护者的支持时,它们会被移入 extra 仓库(由软件包维护者维护),届时可以使用 pacman 安装二进制包。

AUR 中的某软件已过时;我该怎么办?

#标记软件包已过时

在此期间,您可以尝试通过在本地编辑 PKGBUILD 来自己更新软件包。有时,更新不需要更改构建或打包过程,在这种情况下,只需更新 pkgversource 数组即可。

运行 makepkg 时 AUR 中的某软件编译失败;我该怎么办?

您可能遗漏了一些简单的东西;见 #调试软件包构建过程

错误:一个或多个 PGP 签名无法验证!;我该怎么办?

最有可能的情况是,您的个人密钥环中没有验证下载文件所需的公钥。详情见 Makepkg#签名检查

如何创建 PKGBUILD?

参考 AUR 提交指南#提交规则,然后阅读创建软件包

我有一个想提交的 PKGBUILD;有人能帮我检查一下是否有错吗?

有多个渠道可以提交您的软件包进行审查;见 #调试软件包构建过程

如何将 PKGBUILD 移入 extra 仓库?

通常,某项内容至少需要 10 票才能移入 extra。但是,如果一位软件包维护者想要支持某个软件包,它往往就会出现在仓库中。

达到所需的最低投票数并不是唯一的条件;必须有一位愿意维护该软件包的维护者。即使某个软件包有数千张选票,软件包维护者也没有义务将其移入 extra 仓库。

通常,当一个非常受欢迎的软件包留在 AUR 时,是因为:

  • Arch Linux 的仓库中已经有了该软件包的另一个版本
  • 其许可证禁止重新分发
  • 它有助于检索用户提交的 PKGBUILD。从定义上讲,AUR 助手不受支持的。

另请参阅 软件包进入 extra 仓库的规则

我如何加快重复构建的过程?

Makepkg#缩短构建时间

foo 和 foo-git 软件包之间有什么区别?

许多 AUR 软件包都提供“稳定”发布版和“不稳定”开发版。开发版软件包通常带有表示其版本控制系统后缀,不建议常规使用,但可能提供新功能或错误修复。因为这些软件包仅在您执行 makepkg 时下载最新的可用源码,所以它们在 AUR 中的 pkgver() 并不反映上游的更改。同样,这些软件包无法对任何 VCS 源码执行完整性校验和。

另请参阅 系统维护#使用经过验证的软件包

为什么 foo 从 AUR 中消失了?

有可能该软件包已被一位软件包维护者收录,现在位于 extra 仓库中。

如果软件包不符合提交规则,它们可能会被删除。删除原因请查看 aur-requests 归档

注意: 被删除软件包的 Git 仓库通常仍可访问。详情请参阅 AUR 提交指南#请求

我如何发现已安装的软件包是否已从 AUR 消失?

最简单的方法是检查软件包 AUR 页面的 HTTP 状态:

$ comm -23 <(pacman -Qqm | sort) <(curl https://aur.archlinux.org/packages.gz | gzip -cd | sort)

我如何获取所有 AUR 软件包的列表?

参见