Arch 用户软件仓库
Arch 用户软件仓库(Arch User Repository,AUR)是为 Arch Linux 用户而建,由社区主导的软件仓库。AUR 中的软件包以软件包描述文件(PKGBUILD)的形式提供,用户自己通过 makepkg 生成包,再由 pacman 安装。创建 AUR 的初衷是供社区管理和分享新的软件包,并由官方定期从中挑选软件包进入 extra 仓库。本文介绍用户访问和使用 AUR 的方法。
许多官方仓库软件包都来自 AUR。通过 AUR,大家可以相互分享新的软件包生成脚本(PKGBUILD 和其他相关文件)。用户还可以为软件包投票。如果一个软件包投票足够多,没有许可证问题且打包质量好,那么它就很有希望被收录进官方 extra 仓库(以后就可以直接通过 pacman 或 Arch 构建系统安装了)。
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 安装软件包并不困难。基本步骤如下:
- 从 AUR 下载
PKGBUILD和其他构建文件(比如 systemd 单元文件和补丁,通常不是实际代码)。 - 验证
PKGBUILD和其它相关文件,确保其中不含有恶意代码。 - 在保存文件的目录下运行
makepkg。这将下载代码,编译并打包。 - 运行
pacman -U package_file将软件包安装到您的系统上。
准备
首先,确保安装了 base-devel包,该元软件包提供了 make包 等用于从源码进行编译的工具:
然后,选择一个合适的构建目录。该目录仅用作生成软件包或从源码构建时的工作目录,因此任何空白目录都可以。下面的示例中使用 ~/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.git; cd aur
$ git remote set-branches --add origin package_name
$ git fetch
$ git switch package_name
如果需要,获取 PGP 公钥
检查 .sig 或 .asc 形式的签名文件是否是 PKGBUILD 源数组的一部分,如果是,则获取 PKGBUILD validpgpkeys 数组中列出的公钥之一。更多信息请参考 makepkg#验证签名。
构建软件包
切换到含有软件包的 PKGBUILD 文件的目录:
$ cd package_name
PKGBUILD、所有 .install 文件以及其它文件,确认是否带有恶意或危险命令。如有任何怀疑,请不要构建软件包,并到论坛或邮件列表中寻求帮助。过去已有发现数例含恶意代码的软件包。[3] [4]
查看所有提供的文件中的内容。例如使用 less 查看 PKGBUILD:
$ less PKGBUILD
- 您可以使用
git show来查看最后一次提交之后的变动。 - 您也可以使用 vimdiff:
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 --packagelist 来获取生成的软件包文件名列表。升级包
在包含包的 PKGBUILD 的目录中,您必须首先使用命令更新文件:
$ git pull
然后按照之前的构建和安装说明进行操作。
更新包
Pacman 不支持 AUR,因此更新您安装的所有包是您的职责,而不是 pacman 的。如果官方仓库中的包更新了,您需要重新构建依赖于那些库的 AUR 包。checkrebuild 和 rebuild-detector包 提供的 rebuild-detector 钩子可用于查找需重新构建的软件包。
账户状态
封禁(Suspension)
作为软件包维护者时,可以对用户配置“封禁”字段,从而挂起目标用户。当用户被封禁时,他们不能:
- 登录 https://aur.archlinux.org
- 接收通知
- 与 git 界面交互
非活动(Inactivity)
当编辑自己的账户或作为软件包维护者编辑其他用户的账户时,可以设置“非活动”字段。使用非活动账户有两个原因:
- 在其账户页面上显示某人被标记为非活动的日期
- 根据他们对新提案的不活动情况,生成当前的活跃软件包维护者计数
反馈
在软件包上添加评论
AUR 网页界面中有一个评论工具,允许用户就改进提出建议和反馈给 PKGBUILD 贡献者。
PKGBUILD 粘贴到评论部分:它们很快就会过时,最终会不必要地占用大量空间。请将这些文件通过电子邮件发送给维护者,甚至可以使用 pastebin。Python-Markdown 提供了基本的 Markdown 语法来格式化评论。
给软件包投票
所有的 Arch 用户都可以通过 AUR 界面为喜欢的软件包投票。所有软件包都有机会被包维护者接手,并收录至 extra 仓库。投票数是该选拔过程的重要依据之一,因此请尽可能地投票!
注册 AUR 网站账户,在浏览软件包时会看到投票选项。注册后,还可以通过 aur-auto-vote-gitAUR 在命令行中投票。
此外,如果你设置了 AUR SSH 身份认证,可以使用 ssh 密钥直接通过命令行投票,不再需要保存或者输入 AUR 密码:
$ ssh aur@aur.archlinux.org vote package_name
将软件包标记为过期
首先,点击软件包页面的“Flag Out-of-date”(中文版为“标记为过期”),并说明过期的原因,最好包含新版本的发布说明或 tarball 的链接。
可以通过邮件通知维护人员。如果两周后还是没有得到答复,可以发出遗弃(orphan)请求。更多信息请参考 AUR 提交准则#请求。
调试包构建过程
- 在构建任何东西之前,通过更新确保您的构建环境是最新的。
- 确保您已安装 base-devel包。
- 对
makepkg搭配使用-s选项,以在开始构建过程之前检查并安装所有依赖项。 - 试试默认的 makepkg 配置。
- 常见问题请参阅 Makepkg#问题处理。
如果您在构建包时遇到问题,请先阅读其 PKGBUILD 及其 AUR 页面上的评论。
可能 PKGBUILD 本身就有配置问题。如果您无法自行解决,请将其报告给维护者(例如,通过在 AUR 页面的评论中发布您遇到的错误)。您也可以在 AUR 问题、讨论和 PKGBUILD 请求论坛寻求帮助。
问题原因可能并不简单,可能会涉及自定义到 CFLAGS、LDFLAGS 和 MAKEFLAGS。为排除由您的特定系统配置引起的问题,请在干净的 chroot 中构建包。如果在纯净 chroot 中构建仍然失败,则问题很可能出在 PKGBUILD。
请参阅创建软件包#检查包的逻辑性以获得关于使用 namcap 的信息。如果您希望审核 PKGBUILD,请将其发布到 aur-general 邮件列表以获得软件包维护者和其他 AUR 成员的反馈,或发布到创建和修改包论坛。您还可以在 Libera Chat 上的 #archlinux-aur IRC 频道中寻求帮助。
提交
用户可以使用 AUR 分享 PKGBUILD。参见 AUR 提交准则以获得更多细节。
Web 接口翻译
参阅 AUR 源码中的 i18n.md 获得关于创建和维护 AUR Web 界面翻译的详细信息。
历史
最初,人们仅将 PKGBUILD、所需的补充文件和构建好的包上传到 ftp://ftp.archlinux.org/incoming 服务器。包及相关文件会暂存在此,直至一位“受信用户”(现已更名为软件包维护者)看到这个程序并接管维护。
然后,受信用户仓库诞生了。社区中,特定的个人被授权托管他们自己的仓库,以供他人使用。在更灵活、更易用的目标下,AUR 在这个基础上扩展壮大。事实上,AUR 维护者曾一直被称作受信用户(Trusted user,TU),直到更名为软件包维护者。
在 2015 年 6 月 8 日到 8 月 8 日期间,AUR 从 3.5.1 版本迭代到 4.0.0,引入了通过 Git 仓库发布 PKGBUILD 的功能。
已存在的包会被丢弃,除非维护者手动地将它们移植到新的基础架构上。
AUR3 包的 Git 仓库
Github 上的 AUR 存档中有一个包含移植时 AUR 3 的所有包的仓库。
或者,采用等价的 aur-mirror 仓库。
常见问题
什么样的软件包能被放到 AUR?
AUR 中的软件包仅是编译脚本,即为 pacman 构建二进制文件的蓝图。只要你遵循了打包内容的许可条例,基本上符合规则的软件包都可以提交。有时候,下载的链接具有 "you may not link" 条款(即不可分发),这时就不能提供下载链接,而是要用程序名称代替,用户需要用其它方式提前获取受限制的源代码。有疑问请及时询问。
怎么可以为 AUR 中的包投票?
见 #给软件包投票。
软件包维护者是什么?
参见 Arch 术语#软件包维护者。
Arch User Repository 和 extra 仓库有何区别?
Arch User Repository 是储存所有用户提交的 PKGBUILD 的地方,软件包需通过 makepkg 手动生成。吸引足够多的社区关注及有软件包维护者支持的 PKGBUILD 会被收录进 extra 仓库(由软件包维护者维护),以二进制软件包形式提供,可以由 pacman 安装。
AUR 中的软件包过期了,我该怎么做?
参见 #将软件包标记为过期。
同时,你可以在本地编辑 PKGBUILD 来自行更新软件包。有时更新不需要修改构建流程,只用按需更新 pkgver 或 source 数组即可。
makepkg 无法构建某个软件包,我该怎么办?
您很可能忘了点啥,参见 #调试包构建过程。
ERROR: One or more PGP signatures could not be verified! 我该怎么办?
最有可能的情况是您没有所需的公钥来验证下载的文件。详情参见 Makepkg#验证签名。
如何编写 PKGBUILD?
查阅 AUR 提交准则#提交软件包的规则 和 创建软件包。
我想提交一个 PKGBUILD,希望别人帮忙检查错误。
您可以通过多种渠道提交您的材料供审核;请看 #调试包构建过程。
PKGBUILD(AUR 软件包)怎样才能被收录到 extra 软件仓库?
一般至少需要 10 票,并且要有软件包维护者愿意维护,否则即便有上千票也不会收录。当然,如果某个软件包维护者愿意维护一个软件包的话,投票数往往不是决定因素。
一些流行的软件包未被收录的原因一般是:
- Arch Linux 的软件仓库中已经有了别的版本。
- 没有再发布的授权许可。
- 那个软件包的功能只和 AUR 相关(例如,是个 AUR helper)
如何加速编译?
参见 Makepkg#减少编译时间。
foo 和 foo-git 的区别是什么?
很多 AUR 软件包都包含稳定版本和开发版本。开发版本一般都会有代表版本管理系统的后缀。开发版本并不是为日常使用而设计的,不过可能包含新功能或者 bug 修复。由于执行 makepkg 时会从软件源获取最新的代码,因此 AUR 上的 pkgver() 并不代表上游的最新更改。这些软件包很可能会跳过对 VCS 源代码的完整性效验。
同时请参阅 系统维护#使用经测试的软件包。
为啥某个软件包从 AUR 消失了?
可能是有软件包维护者认领了这个软件包,并把它收入到 extra 仓库中了。
软件包也可能因为不满足提交软件包的规则而被删除,您可以在 aur-requests 存档中找到删除原因。
我要怎么找出从 AUR 里消失的软件包?
最简单的办法是检查软件包 AUR 页面的 HTTP 状态:
$ comm -23 <(pacman -Qqm | sort) <(curl https://aur.archlinux.org/packages.gz | gzip -cd | sort)
如何得到包含所有 AUR 包的列表?
- https://aur.archlinux.org/packages.gz
- 使用来自 python3-aurAUR 的
aurpkglist。 - 新的 AUR 元数据存档