Arch User Repository (简体中文)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
翻译状态:本文是 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 aur@aur.archlinux.org 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 aur@aur.archlinux.org 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.freenode.net 上的 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 里都有啥 ?

另请参阅