Arch 用户软件仓库 (AUR)

本页使用了标题或全文手工转换
来自 Arch Linux 中文维基
(重定向自Arch User Repository

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

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

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

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

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

  • 确保已经安装base-devel
  • 浏览 #常见问题一节,以获得对最常见问题的解答。
  • 在从 AUR 构建软件包之前,您可能希望调整 /etc/makepkg.conf 以优化系统的构建过程。通过调整 MAKEFLAGS 变量、使用多核进行压缩或使用不同的压缩算法,可以在多核处理器的系统上显著缩短包构建时间。用户还可以通过 CFLAGS 变量启用特定于硬件的编译器优化。详情参见 makepkg

如果您设置了AUR SSH 身份验证,也可以通过 SSH 连接到 AUR:运行 ssh aur@aur.archlinux.org help 以获得可用指令的列表。

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

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

  1. 从 AUR 下载包含 PKGBUILD 和其他安装文件(比如 systemd 和补丁,通常不是实际代码)的 tar 包。
  2. 用命令 tar -xvf packagename.tar.gz 解包到一个仅用于编译 AUR 的空闲文件夹。
  3. 验证 PKGBUILD 和其它相关文件,确保其中不含有恶意代码。
  4. 在保存文件的目录下运行makepkg。这将下载代码,编译并打包。
  5. 运行 pacman -U package_file 将软件包安装到您的系统上。

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

首先,确保安装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 --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 有效的 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 @~..@ --tool=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,则包文件的名称可能会略有不同。
  • 以上示例只是对构建过程的简要总结。 特别推荐阅读 makepkgArch 构建系统 文章以了解更多详情。
提示:在不进行构建的情况下,您可以用 makepkg --packagelist 来获取生成的软件包文件名列表。

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

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

$ git pull

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

更新包[编辑 | 编辑源代码]

Pacman 不支持 AUR,因此更新您安装的所有包是您的职责,而不是 pacman 的。如果官方仓库中的包更新了,您需要重新构建依赖于那些库的 AUR 包。

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

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

将用户编辑为软件包维护者时,可以设置“挂起”字段,从而挂起目标用户。当用户被挂起时,他们不能:

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

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

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

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

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

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

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

[1] 提供基本的 Markdown 语法来格式化评论。

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

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

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

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

此外,如果您已经按照上述方法设置了 AUR 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 邮件列表以获得软件包维护者和其他 AUR 成员的反馈,或发布到创建和修改包论坛。您还可以在 Libera Chat 上的 IRC 频道 #archlinux-aur 寻求帮助。

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

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

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

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

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

最初,人们仅将 PKGBUILD、所需的补充文件和构建好的包,通过 ftp://ftp.archlinux.org/incoming 上传至服务器。包及相关文件会暂存,直至一位“受信用户”(现已更名为软件包维护者)看到这个程序并采用它。

然后,受信用户仓库诞生了。社区中,特定的个人被授权托管他们自己的仓库,以供他人使用。在更灵活、更易用的目标下,AUR 在这个基础上扩展壮大。事实上,AUR 维护者一直被称作受信用户,直到更名为软件包维护者。

在 2015 年 6 月 8 日到 8 月 8 日期间,AUR 从 3.5.1 版本迭代到 4.0.0,引入了通过 Git 仓库发布 PKGBUILD 的功能。 已存在的包会被丢弃,除非维护者手动地将它们移植到新的基础架构。

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

Github 上的 AUR 档案中有一个包含移植时 AUR 3 的所有包的仓库。

或者,采用等价的 aur-mirror 仓库。

常见问题[编辑 | 编辑源代码]

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

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

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

#给软件包投票

软件包维护者是什么?[编辑 | 编辑源代码]

参见 Arch terminology#Package maintainer.

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

Arch User Repository 是储存所有用户提交的 PKGBUILD 的地方,软件包需通过 makepkg 手动生成。吸引足够多的 community interest 及软件包维护者支持的 PKGBUILD 会被收录进 extra 仓库(由软件包维护者维护),以二进制软件包形式提供,可以由 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,希望别人帮忙检查错误。[编辑 | 编辑源代码]

您可以通过多种渠道提交您的材料供审核;请看 #调试包构建过程.

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

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

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

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

另见包进入 extra 仓库的规则

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

参见 Makepkg#Improving build times

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

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

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

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

可能是有软件包维护者认领了这个软件包,并把它收入到 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 包的列表?[编辑 | 编辑源代码]

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