# Arch User Repository (简体中文)

相关文章

- AUR 帮助程序
- AurJson
- AUR Trusted User Guidelines (简体中文)

翻译状态： 本文是英文页面 Arch_User_Repository 的翻译，最后翻译时间：2013-04-09，点击这里可以查看翻译后英文页面的改动。

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

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

## 导读

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

- 确保 base-devel 软件包组 已被安装 (`pacman -S base-devel`)。
- 阅读下面 AUR 的更深入的介绍，了解如何安装软件包。
- 访问AUR网站查看软件包更新和其他事件。网站还提供了最新软件包的列表。
- 浏览#FAQ获取常见问题的答案。
- 在`/etc/makepkg.conf`中，针对处理器使用合适的CFLAGS、CXXFLAGS编译参数，以优化软件包编译。通过设置MAKEFLAGS变量，可以启用多线程编译，使用多核心处理器的话，将大大减少编译时间。详情参见makepkg。

## 历史

本节所述内容都是遥远的历史，现在已经见不到这些古董了，AUR取代了它们。

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

后来，出现了受信用户软件仓库，部分社区用户拥有了建设自己的软件仓库的权力。以这个仓库为基础，为使其更加灵活易用，AUR出现了。事实上，AUR维护人员现在仍被称为受信用户（简称TU）。

## 搜索

AUR提供了方便人们访问的网页接口，以及另一个方便程序访问的RPC接口。网页上有一个搜索框，可以用它搜索软件包名称或描述。

软件包检索使用MySQL的LIKE比较字符串。这使得搜索规则更加灵活（例如，搜索“tool%like%grep”而非“tool like grep”）。如果需要搜索带有“%”的内容，用斜杠转义为“\%”即可。

## 安装软件包

从AUR（即[unsupported]仓库）安装软件包并不很困难。步骤如下：

1. 从AUR下载包含PKGBUILD和其他安装文件（比如 systemd-units 和补丁，通常不是实际代码）的tar包。
2. 用命令 `tar -xzf foo.tar.gz` 解包到一个仅用于编译AUR的空闲文件夹。
3. 在上述文件夹中运行makepkg（`makepkg -s` 会自动调用pacman解决依赖关系）。这一步会下载代码、编译并打包。
4. 查看 `src/` 文件夹中是否存在 README 文件，阅读 README 可以获得和编译相关的信息。
5. 使用pacman安装上一步生成的软件包：

      # pacman -U /path/to/pkg.tar.xz

AUR辅助工具提供了更为简单的方法，这些工具可以自动搜索、获取、编译、安装AUR中的软件包。在AUR中可以找到这些工具。

注意: Arch官方永远不会提供安装AUR（和其他不受支持）软件包的便利工具，AUR用户应当对软件编译有一定了解。

下面以假想的软件包“foo”为例子，讲解安装过程。

### 基础环境

首先要安装基本的开发工具。软件包组base-devel 是必须的，其中包括make和其他编译工具：

    # pacman -S base-devel

然后，选择一个合适的编译目录。这个目录用作生成软件包时的工作目录，任何空白目录都可以。例如使用：

    ~/builds

如果用ABS（Arch Build System，Arch软件包构建系统），则通常使用：

    /var/abs/local

更多有关ABS的信息，参见此文。下面的示例中使用`~/builds`作为编译目录。

### 获取软件包构建所需文件

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

确认无误后，下载需要的文件。从软件包信息页面点击“Tarball”（中文页面翻译做“压缩包”），保存压缩包到编译目录。以本文的foo软件包为例，压缩包名为“foo.tar.gz”（标准格式是“<pkgname>.tar.gz”）。

### 构建软件包

切换到编译目录，解压缩构建文件：

    $ cd ~/builds
    $ tar -xvzf foo.tar.gz

这时应该出现了一个新的名为“foo”的目录。进入目录并检查脚本文件：

警告: 务必认真检查所有文件！ `PKGBUILD`和所有`.install`文件都是shell脚本文件，包含若干函数，由`makepkg`调用并执行。这些函数可以调用任何命令，可能包含恶意或危险代码。除非使用root执行（不要这样做），否则`makepkg`将通过fakeroot（意为“假root”）执行这些命令，能在一定程度防止恶意代码损坏系统，但还是小心为好。如有疑问，可以到论坛或邮件列表询问。

    $ cd foo
    $ nano PKGBUILD
    $ nano foo.install

接下来开始生成软件包。检查文件后，执行makepkg（以普通用户权限）：

    $ makepkg -s

`-s`表示自动调用sudo执行pacman解决依赖关系。如果没有安装sudo，就必须自己安装依赖软件包。

### 安装软件包

接下来要使用pacman安装软件包。软件包构建和打包成功后，会生成一个压缩包，文件名格式如下：

    <软件名称>-<软件版本号>-<软件包修订版本>-<平台>.pkg.tar.xz

安装软件包的命令如下：

    # pacman -U foo-0.1-1-i686.pkg.tar.xz

这些被手动安装的软件包被成为外部软件包 - 不是来自 pacman 知道的软件仓库。要显示所有外部软件包：

    $ pacman -Qm

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

## 反馈

AUR网站的评论机制为用户提供了一种对PKGBUILD提建议的渠道。注意，最好不要在评论处贴自己的代码，因为代码很占地方，还很容易被新的评论刷掉。最好直接email通知维护人员，或者用pastebin贴代码。

在AUR网站上，用户可以为自己喜欢的AUR投票。投票数是[community]仓库软件包选拔的重要依据。

## 分享和维护软件包

用户是AUR的一切，没有用户的贡献和支持就没有今天的AUR。本节介绍如何通过AUR分享自己的软件包。

AUR不包含任何编译过的二进制包，用户上传PKGBUILD，供其他用户下载使用。所有软件包都是非官方的，使用风险自担。

### 提交软件包

在AUR网站登录后，点击上方的Submit（中文版为“提交”）进入上传软件包页面。用户须提交一个名为`.tar.gz`的压缩包，其中应包含一个存放软件包生成所需文件的目录，目录中有一个PKGBUILD、零到多个`.install`文件、代码补丁文件等等。如果安装了ABS，可以在`/var/abs`查看这样的文件夹的范例。

在`PKGBUILD`所在目录执行以下命令创建上述压缩包：

    $ makepkg --source

如果要上传一个名为libfoo的软件包，上面生成的压缩包大致如下：

    # 查看压缩包内容

    $ tar tf libfoo-0.1-1.src.tar.gz

    libfoo/
    libfoo/PKGBUILD
    libfoo/libfoo.install

提交软件包时，需遵守如下规定：

- 检查官方仓库，如果存在该软件包的 任何版本，就不要重复提交。如果认为官方仓库的软件包已过期，请标记它。如果它有问题或者缺少功能，请反馈bug 报告。
- 查看AUR中是否已有相同软件包。如果已经有人维护某软件包，其他用户的提交将以评论形式报告给维护人员。如果软件包无人维护或不存在，用户提交的软件包将被收录。
- 仔细检查上传的文件。编写PKGBUILD前务必阅读Arch软件打包标准。劣质的PKGBUILD会影响软件的正常使用，不要指望别人会因此感谢你。
- 包含二进制文件或质量差的PKGBUILD有可能无提醒地被直接删除。
- 如果对自己的PKGBUILD缺乏信心，可以先把它贴到AUR邮件列表或论坛AUR版，让大家帮你检查。
- 确保你的软件包有人需要，不要上传没用的软件包。
- AUR 官方软件仓库中放置通用软件和软件相关内容，包括：可执行文件、配置文件、软件的在线文档和软件直接使用的数据。
- 上传软件包之前务必掌握打包过程，自己打几个包练练手。
- 如果上传一个名为`package.tar.gz`的压缩包，其中包含名为`package`的与软件包名相同的文件，上传时会出现错误：“Could not change to directory `/home/aur/unsupported/package/package`”。解决方法是把`package`文件重命名（比如`package.rc`）。如果必须使用原文件名，可以在打包脚本中改回命名。

### 维护软件包

- 要更新软件包，重新提交即可。
- 阅读其他用户的反馈，并改进软件包。
- 不要提交软件包后就放任不管！PKGBUILD的和维护升级是用户自己的责任。
- 如果不想继续维护某个软件包，可以在AUR网站上的软件包页面放弃所有权，或者在AUR邮件列表发布信息。

### 其他事项

- 在aur-general邮件列表请求移除软件包或弃置他人的软件包，受信用户会作出决定。
- 请求中需包含软件包名称和AUR页面链接。
- 如果email通知当前软件包维护人员后两个星期内没有答复，弃置请求将得到许可。
- 软件包尚无法改名。如果需要，可以提交新软件包，并在邮件列表请求移除旧软件包。
- 移除请求格式如下（务必用英语）：
  - 软件包名称和AUR页面链接
  - 删除原因，至少一句话
    注意：不要以为在软件包评论处贴出移除理由就足够了，受信用户只会阅读邮件列表上的信息。
  - 详情说明，比如是因为修改名称而移除还是其他什么的。

删除的条件比较严格。如果无法通过，弃置即可。

## [community]

[community]仓库由受信用户维护，包含来自AUR的流行软件包。`pacman.conf`中默认已启用该仓库，相关文件内容如下：

    /etc/pacman.conf

    ...
    [community]
    Include = /etc/pacman.d/mirrorlist
    ...

[community]与AUR的最大不同是软件包以二进制包形式提供，可由pacman直接安装，软件包生成脚本可以通过ABS获取。该仓库中的某些软件包还可能收录进[core]或[extra]仓库。

可以通过编辑`/etc/abs.conf`的`REPOS`数组打开或关闭ABS对[community]仓库的支持。

## Git版本库

Thomas Dziedzic维护着AUR的Git版本库，每日至少更新一次，其中可以找到AUR软件包的历史版本。克隆该版本库（有上百MB）：

    $ git clone git://pkgbuild.com/aur-mirror.git

另见：Git库网页，Readme，论坛相关帖子。

## 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安装。

### 一个AUR软件包进入[community]需要多少投票？

至少需要10票。但如果受信用户偏爱某个软件包，那它就很可能被收录。

### 如何编写PKGBUILD？

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

### 某个软件包已经在[community]仓库，但我无法使用`pacman -S`安装。

可能因为你没有启用[community]。在`/etc/pacman.conf`找到相关内容，去掉注释即可。 如果[community]确实开启了，请先执行`pacman -Sy`同步软件包数据。

### AUR的某个软件包过时了，该怎么办？

点击软件包页面的“Flag Out-of-date”（中文版为“标记为过期”）即可。如果长期未更新，最好email通知维护人员。如果还是没有得到答复，如果这些软件包标记为过期的时间超过 3 个月，长期未更新，可以在aur-general要求弃置软件包，邮件中请包含过期的信息。

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

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

### `makepkg`无法构建软件包，怎么办？

你很可能忘了点啥。

1. 执行`makepkg`之前先使用`pacman -Syyu`更新系统，系统软件过时可能导致软件包构建失败。
2. 确保安装了“base”和“base-devel”软件包组。
3. 在执行`makepkg`时，使用`-s`选项检查依赖关系。

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

### 如何加速编译？

如果经常用gcc编译同样的代码，ccache对你可能有很大帮助。

### 如何使用AUR中的软件？

参见：#安装软件包。

### 除了AUR网站，还有什么上传软件包到AUR的方法？

可以使用burp, aurploader (python3-aur) 或 aurup —都是命令行工具。

Categories:

- Arch User Repository (简体中文)
- Package development (简体中文)
- Package management (简体中文)