Arch 用户仓库

来自 ArchWiki
(重定向自 AUR

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安装
  • 浏览 #常见问题解答 以获取最常见问题的答案。
  • 您可能希望调整 /etc/makepkg.conf 以优化构建过程,使其适应您的系统,然后再从 AUR 构建软件包。通过调整 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 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 package_name.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 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 提交指南#请求

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

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

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

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

另请参阅