Arch User Repository (简体中文) - ArchWiki

Jump to content

# Arch User Repository (简体中文)

From ArchWiki

相关文章

- makepkg (简体中文)
- pacman (简体中文)
- PKGBUILD (简体中文)
- .SRCINFO (简体中文)
- Aurweb RPC interface
- AUR Trusted User Guidelines (简体中文)
- AUR submission guidelines (简体中文)
- Official repositories (简体中文)
- Arch Build System (简体中文)
- Creating packages (简体中文)
- AUR helpers (简体中文)

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

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

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

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

## 入门

用户可以从 AUR 网站下载 PKGBUILD。makepkg 使用该文件生成软件包，最后由 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` 会在构建结束时删除临时文件。如果需要调试构建过程这会十分有用。

注意： 本文所涵盖的内容十分有限。如果想要对软件包构建有更深了解，推荐阅读 makepkg 和 ABS。

## 反馈

### 在软件包上添加评论

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

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

### 给软件包投票

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

注册AUR 网站账户，在浏览软件包时会看到投票选项。注册后，还可以通过 aurvoteAUR、aurvote-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. 确保安装了 base 和 base-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 里都有啥 ？

- https://aur.archlinux.org/packages.gz
- 使用来自 python3-aurAUR 的 `aurpkglist`。

## 另请参阅

- AUR Web 接口
- AUR 邮件列表
- DeveloperWiki:AUR Cleanup Day

Categories:

- About Arch (简体中文)
- Package development (简体中文)
- Package management (简体中文)