Arch 用户仓库

来自 ArchWiki

Arch 用户仓库 (AUR) 是一个由社区驱动的 Arch Linux 用户仓库。它包含软件包描述 (PKGBUILD),允许您使用 makepkg 从源代码编译软件包,然后通过 pacman 安装它。 AUR 的创建是为了组织和分享来自社区的新软件包,并帮助加速将流行的软件包包含到 extra 仓库中。本文档解释了用户如何访问和使用 AUR。

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

警告: AUR 软件包是用户生成的内容。这些 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 安装软件包是一个相对简单的过程。基本上

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

先决条件

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

注意: AUR 中的软件包假定在构建环境中安装了 base-devel

接下来,选择一个合适的构建目录。构建目录只是一个将从源代码制作或“构建”软件包的目录,可以是任何目录。以下部分中的示例将使用 ~/builds 作为构建目录。

获取构建文件

在 AUR 中找到软件包。这可以通过使用 AUR 主页顶部的搜索字段来完成。单击搜索列表中的应用程序名称会显示软件包的信息页面。通读描述以确认这是所需的软件包,注意软件包上次更新的时间,并阅读任何评论。

有几种方法可以获取软件包的构建文件

  • 克隆其 git 仓库,在 AUR 页面上的“软件包详情”中标记为“Git 克隆 URL”。这是首选方法,其优点是您可以轻松地通过 git pull 获取软件包的更新。
$ git clone https://aur.archlinux.org/package_name.git
  • 下载快照,可以通过单击 AUR 页面右侧“软件包操作”下的“下载快照”链接,或者在终端中
$ 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 checkout package_name

根据需要获取 PGP 公钥

检查 .sig.asc 格式的签名文件是否是 PKGBUILD 源数组的一部分。如果是这种情况,则获取 PKGBUILD validpgpkeys 数组中列出的公钥之一。有关更多信息,请参阅 makepkg#签名检查

构建软件包

将目录更改为包含软件包 PKGBUILD 的目录。

$ cd package_name
警告: 仔细检查 PKGBUILD、任何 .install 文件以及软件包的 git 仓库中的任何其他文件,以查找恶意或危险的命令。如有疑问,请勿构建软件包,并在论坛或邮件列表中寻求建议。以前曾在软件包中发现过恶意代码。[1]

查看所有提供文件的内容。例如,要使用分页器 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 软件包。

账户状态

封禁

当以软件包维护者身份编辑用户时,可以设置“已暂停”字段,这将暂停目标用户。 当用户被暂停时,他们无法:

不活跃

当以软件包维护者身份编辑您自己的账户或另一个账户时,可以设置“不活跃”字段。不活跃账户用于两个原因

  • 在他们的账户页面上显示某人被标记为不活跃的日期
  • 根据他们对新提案的不活跃性生成当前活跃软件包维护者的计数

反馈

评论软件包

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

提示: 避免将补丁或 PKGBUILD 粘贴到评论部分:它们很快就会过时,并且最终会不必要地占用大量空间。相反,请通过电子邮件将这些文件发送给维护者,甚至使用 pastebin

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

注意
  • 此实现与官方 语法规则 有一些偶尔的 差异
  • 软件包的 Git 仓库的提交哈希和对 Flyspray 工单的引用会自动转换为链接。
  • 长评论会折叠,并且可以按需展开。

为软件包投票

所有 Arch 用户最简单的活动之一是浏览 AUR 并使用在线界面为他们最喜欢的软件包投票。所有软件包都有资格被软件包维护者采用并包含在 extra 仓库 中,投票数是该过程中的考虑因素之一;为软件包投票符合每个人的利益!

AUR 网站 上注册以在浏览软件包时获得“为该软件包投票”选项。注册后,也可以使用 aur-auto-vote-gitAUR 从命令行投票。

或者,如果您已设置 AUR SSH 身份验证,则可以使用您的 ssh 密钥直接从命令行投票。这意味着您无需保存或键入您的 AUR 密码。

$ ssh aur@aur.archlinux.org vote package_name

标记软件包为过期

首先,您应该标记软件包为过期,指示软件包过期的详细信息,最好包括指向发布公告或新版本 tarball 的链接。

您还应该尝试通过电子邮件直接联系维护者。如果两周后维护者没有回应,您可以提交孤立软件包请求。有关详细信息,请参见 AUR 提交指南#请求

注意:pkgver 更改时,VCS 软件包 不会被视为过期;不要将它们标记为过期,维护者只会取消标记软件包并忽略您。 AUR 维护者不应仅提交 pkgver 版本号的提升。

调试软件包构建过程

  1. 在构建任何内容之前,通过升级来确保您的构建环境是最新的。
  2. 确保您已安装 base-devel
  3. -s 选项与 makepkg 一起使用,以检查并安装在开始构建过程之前所需的所有依赖项。
  4. 尝试默认的 makepkg 配置
  5. 有关常见问题,请参见 Makepkg#故障排除

如果您在构建软件包时遇到问题,请首先阅读其 PKGBUILD 及其 AUR 页面上的评论。

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

原因可能并非微不足道。自定义 CFLAGSLDFLAGSMAKEFLAGS 可能会导致失败。为避免由您的特定系统配置引起的问题,请在干净的 chroot 环境中构建软件包。如果构建过程在干净的 chroot 环境中仍然失败,则问题可能出在 PKGBUILD 上。

有关使用 namcap 的信息,请参见 创建软件包#检查软件包的健全性。如果您想审查 PKGBUILD,请将其发布到 aur-general 邮件列表,以获得来自软件包维护者和 AUR 成员的反馈,或 创建和修改软件包论坛。您也可以在 IRC 频道 #archlinux-aur 上在 Libera Chat 网络中寻求帮助。

提交软件包

用户可以使用 Arch 用户仓库分享 PKGBUILD。有关详细信息,请参见 AUR 提交指南

Web 界面翻译

有关创建和维护 AUR Web 界面 翻译的信息,请参见 AUR 源代码树中的 i18n.md

历史

最初,有 ftp://ftp.archlinux.org/incoming,人们通过简单地将 PKGBUILD、所需的补充文件和构建的软件包本身上传到服务器来做出贡献。软件包和相关文件保留在那里,直到“受信任用户”(重命名为软件包维护者)看到该程序并采用它。

然后诞生了受信任用户仓库。社区中的某些个人被允许托管他们自己的仓库供任何人使用。 AUR 在此基础上扩展,旨在使其更灵活和更可用。实际上,AUR 维护者被称为 TU(受信任用户),直到更名为软件包维护者。

在 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 构建二进制文件的配方。在大多数情况下,一切都是允许的,但须遵守 实用性和范围指南,只要您遵守内容的许可条款即可。对于其他情况,其中提到“您不得链接”到下载,即不可重新分发的内容,您只能使用文件名本身作为来源。这意味着并要求用户在构建软件包之前已经在构建目录中拥有受限制的源代码。如有疑问,请咨询。

如何在 AUR 中为软件包投票?

参见 #为软件包投票

什么是软件包维护者?

参见 Arch 术语#软件包维护者

Arch 用户仓库和 extra 仓库之间有什么区别?

Arch 用户仓库是存储用户提交的所有 PKGBUILD 的地方,必须使用 makepkg 手动构建。当 PKGBUILD 获得足够的社区兴趣和 软件包维护者 的支持时,它们将被移动到 extra 仓库(由软件包维护者维护),二进制软件包可以在其中使用 pacman 安装。

AUR 中的软件包 Foo 已过期;我该怎么办?

参见 #标记软件包为过期

与此同时,您可以尝试通过在本地编辑 PKGBUILD 来自行更新软件包。有时,更新不需要更改构建或打包过程,在这种情况下,只需更新 pkgversource 数组就足够了。

当我运行 makepkg 时,AUR 中的软件包 Foo 无法编译;我该怎么办?

您可能缺少一些琐碎的东西;参见 #调试软件包构建过程

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

很可能,您的个人密钥环中没有所需的公钥来验证下载的文件。有关详细信息,请参见 Makepkg#签名检查

如何创建 PKGBUILD?

请查阅 AUR 提交指南#提交规则,然后参见 创建软件包

我有一个想要提交的 PKGBUILD;有人可以检查一下是否有任何错误吗?

有几个渠道可用于提交您的软件包以供审查;参见 #调试软件包构建过程

如何将 PKGBUILD 放入 extra 仓库?

通常,至少需要 10 票才能将某些内容移入 extra。但是,如果 软件包维护者 想要支持某个软件包,通常会在仓库中找到它。

达到所需的最低票数不是唯一的要求;必须有软件包维护者愿意维护该软件包。即使软件包获得数千票,软件包维护者也没有义务将软件包移入 extra 仓库。

通常,当一个非常流行的软件包停留在 AUR 中时,是因为

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

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

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

参见 Makepkg#提高构建时间

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

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

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

为什么 foo 从 AUR 中消失了?

可能是该软件包已被 软件包维护者 采用,现在位于 extra 仓库 中。

如果软件包不符合 提交规则,则可能会被删除。有关删除原因,请参见 aur-requests 存档

注意: 已删除软件包的 git 仓库通常仍然可用。 有关详细信息,请参阅 AUR 提交指南#Requests

如何找出我安装的软件包是否已从 AUR 中消失?

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

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

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

参见