Arch User Repository (简体中文) - ArchWiki

Jump to content

相关文章

- makepkg (简体中文)
- pacman (简体中文)
- PKGBUILD (简体中文)
- .SRCINFO (简体中文)
- Aurweb RPC interface
- AUR Trusted User Guidelines (简体中文)
- AUR submission guidelines (简体中文)
- Official repositories (简体中文)
- Arch Build System (简体中文)
- 创建软件包
- AUR helpers (简体中文)
- AUR Cleanup Day

翻译状态：本文是 Arch User Repository 的翻译。上次翻译日期：2022/10/22。如果英文版本有所更改，则您可以帮助同步翻译。

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

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

警告： AUR 中的软件包是由其他用户编写的，这些 `PKGBUILD` 完全是非官方的，未经彻底审查。使用这些文件的风险由您自行承担。

## 入门

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

- 确保 base-devel 软件包组已被完全安装 (`pacman -S --needed base-devel`)。
- 浏览 #FAQ 获取常见问题的答案。
- 在从 AUR 构建软件包之前，您可能希望调整 `/etc/makepkg.conf` 以优化系统的构建过程。通过调整 `MAKEFLAGS` 变量、使用多核进行压缩或使用不同的压缩算法，可以在多核处理器的系统上显著缩短包构建时间。用户还可以通过 `CFLAGS` 变量启用特定于硬件的编译器优化。详情参见 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`。这将下载代码，编译并打包。
5. 运行 `pacman -U package_file` 将软件包安装到您的系统上。

注意： AUR是不受支持的，所以更新这些软件包是您的责任而不是 pacman 的。如果官方仓库中的软件包更新了，您可能需要重建相关的 AUR 软件包。

### 准备

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

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

然后，选择一个合适的编译目录。这个目录用作生成软件包时的工作目录，任何空白目录都可以。下面的示例中使用 `~/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 --single-branch`:

         $ git clone --branch branch_name/package_name --single-branch https://github.com/archlinux/aur

- - 部分克隆 这个仓库 (`git clone --depth=1`) 和选择性 添加分支 ：

        $ git clone --depth=1 https://github.com/archlinux/aur; 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 @~..@ vimdiff`。使用 vimdiff 的好处是您可以查看到带有文件变动指示的所有文件内容。

接下来开始生成软件包。检查文件后，以普通用户权限执行 makepkg ，下面是一些有用的参数：

- `-s`/`--syncdeps` 在构建之前使用 pacman 自动解析和安装任何依赖项。如果包依赖于其他 AUR 包，则您应先手动安装它们。
- `-i`/`--install` 安装成功的包。这使您可以跳过通常手动完成的下一步。
- `-r`/`--rmdeps` 在构建后删除构建时依赖项，因为它们不再需要。但是，下次更新包时可能需要重新安装这些依赖项。
- `-c`/`--clean` 在构建后清理临时构建文件，因为它们不再需要。这些文件通常仅在调试构建过程时才需要。

Tip: 使用 `git clean -dfX` 删除所有被 git 忽略的文件，从而删除所有以前构建的包文件。

### 安装包

现在可以使用 pacman 安装该软件包：

    # pacman -U package_name-version-architecture.pkg.tar.zst

注意：

- 如果您在 `makepkg.conf` 中更改了 `PKGEXT`，则包文件的名称可能会略有不同。

- 以上示例只是对构建过程的简要总结。 特别推荐阅读 makepkg 和 ABS 文章了解更多详情。

### 升级包

在包含包的 PKGBUILD 的目录中，您必须首先使用命令更新文件：

    $ git pull

然后按照之前的构建和安装说明进行操作。

## 帐户状态

### 挂起

将用户编辑为受信任用户时，可以设置“挂起”字段，从而挂起目标用户。 当用户被挂起时，他们不能：

- 登录 https://aur.archlinux.org
- 接收通知
- 与git界面交互

### 交互

当编辑您自己的帐户或其他作为受信任用户的帐户时，可以设置非活动字段。使用非活动帐户有两个原因：

- 在其帐户页面上显示某人被标记为非活动的日期
- 根据他们对新提案的不活动生成当前活跃的受信任用户计数

## 反馈

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

AUR Web Interface 有一个评论工具，允许用户就改进提出建议和反馈给 PKGBUILD 贡献者。

Tip: 避免将补丁或 `PKGBUILD` 粘贴到评论部分：它们很快就会过时，最终会不必要地占用大量空间。而是将这些文件通过电子邮件发送给维护者，甚至使用 pastebin。

[1][失效链接 2022-09-17 ⓘ] 提供基本的 Markdown 语法来格式化评论。

Note:

- 此实现与官方 语法规则 有一些偶尔的 差异。
- 将哈希提交到包的 Git 存储库，并且对 Flyspray 票证的引用会自动转换为链接。
- 长评论折叠，可按需展开。

### 给软件包投票

所有的 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”（中文版为“标记为过期”，并说明过期的原因，最好包含新版本的发布说明或 tarball。

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

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

## 调试包构建过程

1. 在构建任何东西之前，通过 更新 确保您的构建环境是最新的。
2. 确保您已安装 base-devel多软件包。
3. 使用 `-s` 选项和 `makepkg` 在开始构建过程之前检查并安装所需的所有依赖项。
4. 试试默认的 makepkg 配置。
5. 有关常见问题，请参阅 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 邮件列表 以获得 TU 和其他 AUR 成员的反馈，或发布到 创建和修改包论坛。您还可以在 Libera Chat 上的 IRC 频道 #archlinux-aur 寻求帮助。

## 提交

用户可以使用 AUR 分享 PKGBUILD。 参见 AUR submission guidelines (简体中文) 以获得更多细节。

## Web 接口翻译

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

## FAQ

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

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

### 怎么可以为 AUR 中的包投票？

见 #给软件包投票。

### 受信用户（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`无法构建某个软件包，我该怎么办？

您很可能忘了点啥，参见 #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，希望别人帮忙检查错误。

There are several channels available to submit your package for review; see #Debugging the package build process[损坏的链接：无效的章节].

### 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 包的列表？

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

## 另请参阅

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

Categories:

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

Hidden categories:

- Pages with dead links
- Pages with broken section links