Arch 用户软件仓库 (AUR)
Arch 用户软件仓库(Arch User Repository,AUR)是为用户而建、由用户主导的 Arch Linux 软件仓库。AUR 中的软件包以软件包生成脚本(PKGBUILD)的形式提供,用户自己通过 makepkg 生成包,再由 pacman 安装。创建 AUR 的初衷是方便用户维护和分享新软件包,并由官方定期从中挑选软件包进入 extra 仓库。本文介绍用户访问和使用 AUR 的方法。
许多官方仓库软件包都来自 AUR。通过 AUR,大家相互分享新的软件包生成脚本(PKGBUILD 和其他相关文件)。用户还可以为软件包投票。如果一个软件包投票足够多、没有许可证问题、打包质量好,那么它就很有希望被收录进官方 community 仓库(以后就可以直接通过 pacman 或 ABS 安装了)。
PKGBUILD
完全是非官方的,未经彻底审查。使用这些文件的风险由您自行承担。入门[编辑 | 编辑源代码]
用户可以从 AUR 网站下载 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 和补丁,通常不是实际代码)的 tar 包。
- 用命令
tar -xvf packagename.tar.gz
解包到一个仅用于编译 AUR 的空闲文件夹。 - 验证 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 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 --packagelist
来获取生成的软件包文件名列表。升级包[编辑 | 编辑源代码]
在包含包的 PKGBUILD 的目录中,您必须首先使用命令更新文件:
$ git pull
然后按照之前的构建和安装说明进行操作。
更新包[编辑 | 编辑源代码]
Pacman 不支持 AUR,因此更新您安装的所有包是您的职责,而不是 pacman 的。如果官方仓库中的包更新了,您需要重新构建依赖于那些库的 AUR 包。
账户状态[编辑 | 编辑源代码]
挂起[编辑 | 编辑源代码]
将用户编辑为软件包维护者时,可以设置“挂起”字段,从而挂起目标用户。当用户被挂起时,他们不能:
- 登录 https://aur.archlinux.org
- 接收通知
- 与git界面交互
非活动[编辑 | 编辑源代码]
当编辑您自己的账户或其他作为软件包维护者的账户时,可以设置非活动字段。使用非活动账户有两个原因:
- 在其账户页面上显示某人被标记为非活动的日期
- 根据他们对新提案的不活动生成当前活跃的软件包维护者计数
反馈[编辑 | 编辑源代码]
在软件包上添加评论[编辑 | 编辑源代码]
AUR Web Interface 有一个评论工具,允许用户就改进提出建议和反馈给 PKGBUILD 贡献者。
PKGBUILD
粘贴到评论部分:它们很快就会过时,最终会不必要地占用大量空间。而是将这些文件通过电子邮件发送给维护者,甚至使用 pastebin。给软件包投票[编辑 | 编辑源代码]
所有的 Arch 用户都可以通过 AUR Web 界面为软件包投票。大多数软件包都有机会被 TU 收录进 community 仓库。投票数是 community 仓库软件包选拔的重要依据之一。
注册AUR 网站账户,在浏览软件包时会看到投票选项。注册后,还可以通过 aurvoteAUR、aurvote-gitAUR 或者 aur-auto-vote-gitAUR 投票。
此外,如果您已经按照上述方法设置了 AUR SSH 身份认证,可以使用 ssh 密钥直接通过命令行投票。不再需要保存或者输入 AUR 密码。
$ ssh aur@aur.archlinux.org vote package_name
将软件包标记为过期[编辑 | 编辑源代码]
首先,点击软件包页面的“Flag Out-of-date”(中文版为“标记为过期”,并说明过期的原因,最好包含新版本的发布说明或 tarball。
可以通过邮件通知维护人员。如果两周后还是没有得到答复,可以发出遗弃请求,也就是让一个 Trusted User 不再维护这个软件包。注意请确保软件包需要维护人更新,而他/她没有任何回应的情况下再这么操作。
调试包构建过程[编辑 | 编辑源代码]
- 在构建任何东西之前,通过更新确保您的构建环境是最新的。
- 确保您已安装 base-devel包多软件包。
- 使用
-s
选项和makepkg
在开始构建过程之前检查并安装所需的所有依赖项。 - 试试默认的 makepkg 配置。
- 有关常见问题,请参阅 Makepkg#Troubleshooting。
如果您在构建包时遇到问题,请先阅读其 PKGBUILD 及其 AUR 页面上的评论。
可能每个人的 PKGBUILD
都损坏了。如果您无法自行解决,请将其报告给维护者(例如,通过在 AUR 页面的评论中发布您遇到的错误)。您也可以在 AUR 问题、讨论和 PKGBUILD 请求论坛寻求帮助。
毕竟,原因可能并非微不足道。自定义 CFLAGS
、LDFLAGS
和 MAKEFLAGS
可能会导致失败。为避免由您的特定系统配置引起的问题,请在 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))
如何加速编译?[编辑 | 编辑源代码]
参见 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 找到对应删除记录的归档。
我要怎么找出从 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 包的列表?[编辑 | 编辑源代码]
- https://aur.archlinux.org/packages.gz
- 使用 python3-aurAUR 的
aurpkglist