Arch 用户仓库

出自 ArchWiki
(重定向自 AUR archive)

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

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

警告: AUR 软件包是用户生成的内容。这些 PKGBUILD 是完全非官方的,并且未经彻底审查。使用提供的任何文件风险自负。

开始入门

用户可以从 AUR 网页界面 搜索和下载 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 软件包文件 以将软件包安装到您的系统上。

准备工作

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

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

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

获取构建文件

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

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

  • 克隆其 git 仓库,在其 AUR 页面上的“软件包详情”中标记为“Git Clone 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 软件包名称.tar.gz
  • 使用只读镜像 archlinux/aur on GitHub,其中每个软件包都位于一个分支中。建议仅克隆单个分支(整个仓库太大,性能会很低)。您可以使用以下两种方法之一来完成此操作
    • 使用 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 网页界面 具有评论功能,允许用户为 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 提交指南

网页界面翻译

有关创建和维护 AUR 网页界面 翻译的信息,请参阅 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 仓库中已存在该软件包的另一个版本
  • 其许可证禁止重新分发
  • 它有助于检索用户提交的 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 软件包的列表?

参见