Arch 用户软件仓库 (AUR)

本页使用了标题或全文手工转换
来自 Arch Linux 中文维基

Arch 用户软件仓库(Arch User Repository,AUR)是为用户而建、由用户主导的 Arch 软件仓库。AUR 中的软件包以软件包生成脚本(PKGBUILD)的形式提供,用户自己通过 makepkg 生成包,再由 pacman 安装。创建 AUR 的初衷是方便用户维护和分享新软件包,并由官方定期从中挑选软件包进入 community 仓库。本文介绍用户访问和使用 AUR 的方法。

许多官方仓库软件包都来自 AUR。通过 AUR,大家相互分享新的软件包生成脚本(PKGBUILD 和其他相关文件)。用户还可以为软件包投票。如果一个软件包投票足够多、没有许可证问题、打包质量好,那么它就很有希望被收录进官方 community 仓库(以后就可以直接通过 pacmanabs 安装了)。

警告: AUR 中的软件包是由其他用户编写的,这些 PKGBUILD 完全是非官方的,未经彻底审查。使用这些文件的风险由您自行承担。

入门[编辑 | 编辑源代码]

用户可以从 AUR 网站下载 PKGBUILDmakepkg 使用该文件生成软件包,最后由 pacman 安装。

  • 确保已经安装base-devel
  • 浏览 #FAQ 获取常见问题的答案。
  • 在从 AUR 构建软件包之前,您可能希望调整 /etc/makepkg.conf 以优化系统的构建过程。通过调整 MAKEFLAGS 变量、使用多核进行压缩或使用不同的压缩算法,可以在多核处理器的系统上显著缩短包构建时间。用户还可以通过 CFLAGS 变量启用特定于硬件的编译器优化。详情参见 makepkg
  • 也可以通过 SSH 连接到 AUR: 运行 ssh aur@aur.archlinux.org help 获得可用指令的列表。

历史[编辑 | 编辑源代码]

最初,人们上传PKGBUILD、附属文件、编译好的软件包到 ftp://ftp.archlinux.org/incoming。文件一直存放在那里,直到软件包维护人员发现并收录。

后来,出现了受信用户软件仓库,部分社区用户拥有了建设自己的软件仓库的权力。以这个仓库为基础,为使其更加灵活易用,AUR 出现了。事实上,AUR 维护人员现在仍被称为受信用户(Trusted Users,简称 TU)。

从 2015-06-08 到 2015-08-08,AUR 版本从 3.5.1 到 4.0.0,Git 仓库成为 PKGBUILD 的发布方式。

当时现存的所有软件包都会被删除,除非维护者将他们手动迁移到新的架构上。

AUR3 软件包的 Git 仓库[编辑 | 编辑源代码]

Github 上的 AUR Archive 储存了迁移过程中的所有 AUR3 软件包仓库。 除此之外,aur3-mirror 也提供了同样的内容。

安装与更新软件包[编辑 | 编辑源代码]

从 AUR 安装软件包并不困难。基本步骤如下:

  1. 从 AUR 下载包含 PKGBUILD 和其他安装文件(比如 systemd 和补丁,通常不是实际代码)的 tar 包。
  2. 用命令 tar -xvf packagename.tar.gz 解包到一个仅用于编译 AUR 的空闲文件夹。
  3. 验证 PKGBUILD 和其它相关文件,确保其中不含有恶意代码。
  4. 在保存文件的目录下运行makepkg。这将下载代码,编译并打包。
  5. 运行 pacman -U package_file 将软件包安装到您的系统上。
注意: AUR是不受支持的,所以更新这些软件包是您的责任而不是 pacman 的。如果官方仓库中的软件包更新了,您可能需要重建相关的 AUR 软件包。

准备[编辑 | 编辑源代码]

首先确定安装base-devel,其中包括 make 和其他编译工具:

注意: AUR 中的软件包都会假定您已经安装了 base-devel 软件包组(例如它们不会将这个组中的软件包列入依赖列表)。

然后,选择一个合适的编译目录。这个目录用作生成软件包时的工作目录,任何空白目录都可以。下面的示例中使用 ~/builds 作为编译目录。

获取软件包构建所需文件[编辑 | 编辑源代码]

通过搜索或任何方式,在 AUR 中找到要安装的软件包。阅读介绍,检查软件包更新日期,看看别人的评论。

确认无误后,有几种方法可以获取包的构建文件:

  • 克隆其 git 存储库,在其 AUR 页面的“包详细信息”中标记为“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; cd aur
$ git remote set-branches --add origin package_name
$ git fetch
$ git checkout package_name

如果需要,获取 PGP 公钥[编辑 | 编辑源代码]

检查 .sig.asc 形式的签名文件是否是 PKGBUILD 源数组的一部分,如果是,则获取列表中列出的公钥之一PKGBUILD 有效的 PGP 密钥 列表。有关详细信息,请参阅 Makepkg#Signature checking

构建软件包[编辑 | 编辑源代码]

切换到含有软件包的 PKGBUILD 文件的目录:

$ cd package_name
警告: 务必认真检查所有文件! cd 到新建立的目录,然后仔细检查每个文件确保没有恶意或危险代码。PKGBUILD 和所有 .install 文件都是 shell 脚本文件,包含若干函数,由 makepkg 调用并执行。这些函数可以调用任何命令,可能包含恶意或危险代码。makepkg 通过 fakeroot(意为“假root”)执行这些命令(所以不要以 root 用户运行makepkg),能在一定程度防止恶意代码损坏系统,但还是小心为好。如有疑问,可以到论坛或邮件列表询问。

查看所有提供的文件中的内容。例如使用 less 查看 PKGBUILD

$ less PKGBUILD
提示:如果您正在更新软件包,您可能需要查看最后一次提交以来的变动。
  • 您可以使用 git show 来查看最后一次提交之后的变动。
  • 您也可以使用 git difftool @~..@ 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.conf 中更改了 PKGEXT,则包文件的名称可能会略有不同。
  • 以上示例只是对构建过程的简要总结。 特别推荐阅读 makepkgABS 文章了解更多详情。

升级包[编辑 | 编辑源代码]

在包含包的 PKGBUILD 的目录中,您必须首先使用命令更新文件:

$ git pull	

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

账户状态[编辑 | 编辑源代码]

挂起[编辑 | 编辑源代码]

将用户编辑为受信任用户时,可以设置“挂起”字段,从而挂起目标用户。 当用户被挂起时,他们不能:

非活动[编辑 | 编辑源代码]

当编辑您自己的账户或其他作为受信任用户的账户时,可以设置非活动字段。使用非活动账户有两个原因:

  • 在其账户页面上显示某人被标记为非活动的日期
  • 根据他们对新提案的不活动生成当前活跃的受信任用户计数

反馈[编辑 | 编辑源代码]

在软件包上添加评论[编辑 | 编辑源代码]

AUR Web Interface 有一个评论工具,允许用户就改进提出建议和反馈给 PKGBUILD 贡献者。

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

[1][失效链接 2022-09-17 ⓘ] 提供基本的 Markdown 语法来格式化评论。

注意:
  • 此实现与官方 语法规则 有一些偶尔的 差异
  • 将哈希提交到包的 Git 存储库,并且对 Flyspray 票证的引用会自动转换为链接。
  • 长评论折叠,可按需展开。

给软件包投票[编辑 | 编辑源代码]

所有的 Arch 用户都可以通过 AUR Web 界面为软件包投票。大多数软件包都有机会被 TU 收录进 community 仓库。投票数是 community 仓库软件包选拔的重要依据之一。

注册AUR 网站账户,在浏览软件包时会看到投票选项。注册后,还可以通过 aurvoteAURaurvote-gitAUR 或者 aur-auto-vote-gitAUR 投票。

此外,如果您已经按照上述方法设立ssh 认证,可以使用 ssh 密钥直接通过命令行投票。不再需要保存或者输入 AUR 密码。

$ ssh aur@aur.archlinux.org vote package_name

将软件包标记为过期[编辑 | 编辑源代码]

首先,点击软件包页面的“Flag Out-of-date”(中文版为“标记为过期”,并说明过期的原因,最好包含新版本的发布说明或 tarball

可以通过邮件通知维护人员。如果两周后还是没有得到答复,可以发出 遗弃 请求,也就是让一个 Trusted User 不再维护这个软件包。注意请确保软件包需要维护人更新,而他/她没有任何回应的情况下再这么操作。

注意: VCS 软件包 在 pkgver 变化时并不会过时,所以不要标记它们,AUR 维护者不应该仅为了 pkgver 进行提交。

调试包构建过程[编辑 | 编辑源代码]

  1. 在构建任何东西之前,通过 更新 确保您的构建环境是最新的。
  2. 确保您已安装 base-devel多软件包。
  3. 使用 -s 选项和 makepkg 在开始构建过程之前检查并安装所需的所有依赖项。
  4. 试试默认的 makepkg 配置
  5. 有关常见问题,请参阅 Makepkg#Troubleshooting

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

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

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

请参阅 Creating packages#Checking package sanity 以获得关于使用 namcap的信息。如果您希望审核 PKGBUILD,请将其发布到 aur-general 邮件列表 以获得 TU 和其他 AUR 成员的反馈,或发布到 创建和修改包论坛。您还可以在 Libera Chat 上的 IRC 频道 #archlinux-aur 寻求帮助。

提交[编辑 | 编辑源代码]

用户可以使用 AUR 分享 PKGBUILD。 参见 AUR submission guidelines 以获得更多细节。

Web 接口翻译[编辑 | 编辑源代码]

参阅 i18n.txt 获得关于创建和维护 AUR Web 界面 翻译的详细信息。

FAQ[编辑 | 编辑源代码]

什么样的软件包能被放到 AUR?[编辑 | 编辑源代码]

AUR 中的软件包仅是编译脚本,只要内容符合软件版权,满足上面提到的软件包要求,就能够放入。有时候,下载的链接具有 "you may not link" 条款,这时就不能提供下载链接,而是要用程序名称代替,用户需要用其它方式提前获取受限制的源代码。有疑问请及时询问。

怎么可以为 AUR 中的包投票?[编辑 | 编辑源代码]

#给软件包投票

受信用户(TU)是什么?[编辑 | 编辑源代码]

受信用户(TU,Trusted User)是选拔出的监督 AUR 和 community 仓库的用户。他们维护着 community 的热门软件,并维持 AUR 运转。

Arch User Repository 和 community 仓库有何区别?[编辑 | 编辑源代码]

Arch User Repository 是储存所有用户提交的 PKGBUILD 的地方,软件包需通过 makepkg 手动生成。吸引足够多的 community interest 及 TU 支持的 PKGBUILD 会被收录进 community仓库(由 TU 维护),以二进制软件包形式提供,可以由 pacman 安装。

makepkg无法构建某个软件包,我该怎么办?[编辑 | 编辑源代码]

您很可能忘了点啥,参见 #Debugging the package build process[损坏的链接:无效的章节].

ERROR: One or more PGP signatures could not be verified! 我该怎么办?[编辑 | 编辑源代码]

最有可能的情况是您没有所需的公钥来验证下载的文件。详情参见 Makepkg#Signature checking

如何编写 PKGBUILD?[编辑 | 编辑源代码]

Consult the AUR submission guidelines#Rules of submission, then see creating packages.

我想提交一个 PKGBUILD,希望别人帮忙检查错误。[编辑 | 编辑源代码]

There are several channels available to submit your package for review; see #Debugging the package build process[损坏的链接:无效的章节].

PKGBUILD(AUR 软件包)怎样才能被收录到 community 软件仓库?[编辑 | 编辑源代码]

一般至少需要 10 票,并且要有 TU(受信用户)愿意维护,否则即便有上千票也不会收录。当然,如果某个受信用户愿意维护一个软件包的话,投票数往往不是决定因素。

一些流行的软件包未被收录的原因一般是:

  • Arch Linux 的软件仓库中已经有了别的版本。
  • 没有再发布的授权许可
  • 那个软件包的功能只和 AUR 相关((e.g. 是个 AUR helper))

另见 Rules for Packages Entering the community Repo.

如何加速编译?[编辑 | 编辑源代码]

参阅 Makepkg#Improving compile times

foo 和 foo-git 的区别是什么?[编辑 | 编辑源代码]

很多AUR软件包都包含稳定版本和开发版本。开发版本一般都会有像 -cvs-svn-git-hg-bzr 或者 -darcs 这样的后缀。 开发版本并不是为日常使用而设计的,不过可能包含新功能或者 bug 修复。因为要从上游获取最新的源代码,所以当运行 makepkg 时版本号可能会发生变化。而且会跳过对源代码的完整性效验。

同时请参阅 System maintenance#Use proven software packages

为啥某个软件包从 AUR 消失了?[编辑 | 编辑源代码]

有可能是 TU 认领了这个软件包,并把它收入到 community 仓库中了。

软件包可能因为不满足提交软件包的规则或是其它原因而被删除,您可以在 aur-requests archives 找到对应删除记录的归档。

注意: 通常一个被删除软件包的 git 仓库依然保留,请参考 AUR submission guidelines#Requests

我要怎么找出从 AUR 里消失的软件包?[编辑 | 编辑源代码]

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

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

想知道 AUR 里都有啥 ?[编辑 | 编辑源代码]

如何得到包含所有 AUR 包的列表?[编辑 | 编辑源代码]

另请参阅[编辑 | 编辑源代码]