Arch User Repository (简体中文)

From ArchWiki
翻译状态:本文是 Arch_User_Repository翻译。上次翻译日期:2019-02-03。如果英文版本有所更改,则您可以帮助同步翻译。

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

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

警告: AUR 中的软件包是由其他用户编写的,使用这些文件的风险由您自行承担。

入门

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

  • 确保 base-devel 软件包组已被完全安装 (pacman -S --needed base-devel)。
  • 浏览 #FAQ 获取常见问题的答案。
  • /etc/makepkg.conf 中,针对处理器设置合适的 GCC 编译参数 CFLAGS。通过设置 MAKEFLAGS 变量,可以启用多线程编译,使用多核心处理器的话,将大大减少编译时间。详情参见 makepkg
  • 也可以通过 SSH 连接到 AUR: 运行 ssh [email protected] help 获得可用指令的列表。

历史

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

后来,出现了受信用户软件仓库,部分社区用户拥有了建设自己的软件仓库的权力。以这个仓库为基础,为使其更加灵活易用,AUR 出现了。事实上,AUR 维护人员现在仍被称为受信用户(简称 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 -si。命令会自动调用 pacman 解决依赖关系,然后下载代码、编译并打包。然后安装软件包。
注意: AUR是不受支持的,所以更新这些软件包是您的责任而不是 pacman 的。如果官方仓库中的软件包更新了,您可能需要重建相关的 AUR 软件包。

准备

首先确定完整地安装了 base-devel 软件包组,其中包括 make 和其他编译工具:

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

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

获取软件包构建所需文件

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

确认无误后,通过下面三种方法可以获取到所需的编译文件:

  • 在“Package Details”中,找到“Git Clone URL”,然后下载 Git 仓库。这也是推荐的方法。
$ git clone https://aur.archlinux.org/package_name.git
这样做的其中一个好处是您以后可以通过 git pull 的形式来更新。
  • 从软件包信息页面点击“Download snapshot”(中文页面翻译做“下载快照”),保存压缩包到编译目录。
$ tar -xvf package_name.tar.gz
  • 从终端下载:
$ curl -L -O https://aur.archlinux.org/cgit/aur.git/snapshot/package_name.tar.gz

构建和安装软件包

切换到含有软件包的 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 (以普通用户权限):

$ makepkg -si
  • -s/--syncdeps 表示自动执行 pacman 安装依赖关系。如果软件包依赖其他的 AUR 软件包,您需要先手动安装依赖。
  • -i/--install 会在顺利构建软件包之后安装软件包。除此之外,您还可以使用 pacman -U package.pkg.tar.xz 来手动安装软件包。

其他可能有用的选项:

  • -r/--rmdeps 会移除只在构建时需要的软件包,不过重新编译时就要再安装了。
  • -c/--clean 会在构建结束时删除临时文件。如果需要调试构建过程这会十分有用。
注意: 本文所涵盖的内容十分有限。如果想要对软件包构建有更深了解,推荐阅读 makepkgABS

反馈

在软件包上添加评论

AUR 网站的评论机制为用户提供了一种对 PKGBUILD 提建议的渠道。

最好不要在评论处贴自己的代码,因为代码很占地方,还很容易被新的评论刷掉。最好直接给维护人员发邮件,或者用 pastebin 贴代码。

给软件包投票

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

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

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

$ ssh [email protected] vote package_name

将软件包标记为过期

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

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

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

提交

用户可以通过AUR来提交 PKGBUILD。 这个并不包括任何二进制包,但是允许用户上传 PKGBUILD以便其他人下载。 这些PKGBUILD并不是官方的而且也没有经过详尽的审查,使用时请请注意风险。请在 AUR submission guidelines 查看详细信息。

Web 接口翻译

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

评论语法

评论支持 Python-Markdown 语法。 它提供基本的 Markdown 语法来格式化评论。请注意这一实现与官方的语法有些区别。评论会被哈希进软件包的 Git 仓库,对 Flyspray 工单的引用会被自动转换成链接。长评论会被折叠并能根据需要展开。

FAQ

AUR 是什么?

AUR 是 Arch User Repository(Arch 用户软件仓库)的缩写,是 Arch 用户上传并分享软件、共享库等等的 PKGBUILD 的地方。用户可以为喜欢的软件包投票,票数多的将有机会进入community仓库并以二进制包的形式提供。

什么样的软件包能被放到 AUR?

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

受信用户(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无法构建某个软件包,我该怎么办?

您很可能忘了点啥。

  1. 更新系统,系统软件过时可能导致软件包构建失败。
  2. 确保安装了 basebase-devel 软件包组。
  3. 在执行makepkg时,使用-s选项检查依赖关系。

先阅读 PKGBUILD 和 AUR 页面的评论。可能导致编译错误的还有不正确的 CFLAGS、LDFLAGS 和 MAKEFLAGS 设置。也有可能是 PKGBUILD 写错了,如果确实如此,请通知包维护人员。例如在 AUR 页面留言。

为了检查 PKGBUILD 是否损坏,或者您的系统是否配置错误,您可以考虑在 chroot 环境中构建软件包。它会在一个干净的、只安装制定构建依赖、没有任何用户定制的 Arch Linux 环境中构建软件包。您需要安装 devtools 并使用 extra-x86_64-build 替代 makepkg。对于 multilib 软件包,运行 multilib-build。参见 DeveloperWiki:Building in a clean chroot 以获得更多详细内容。如果在 chroot 环境中仍然构建失败,那么很有可能是 PKGBUILD 文件有些问题。

ERROR: One or more PGP signatures could not be verified! 我该怎么办?

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

如何编写 PKGBUILD?

建议阅读创建软件包一文。先检查 AUR 看看有没有相同软件包,不要再造轮子。

我想提交一个 PKGBUILD,希望别人帮忙检查错误。

您可以在 aur-general 贴出您的 PKGBUILD 并征求他人意见,或到 irc.libera.chat 上的 IRC频道 #archlinux-aur 寻求帮助。也可以自己使用 namcap 检查PKGBUILD和软件包。

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 里都有啥 ?

另请参阅