# Arch User Repository (简体中文)

相关文章

- AUR 帮助程序
- AUR Trusted User Guidelines (简体中文)
- AurJson
- PKGBUILD
- makepkg
- pacman
- Official repositories
- Arch Build System
- Creating packages

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

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 --needed 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”）。如果需要搜索带有“%”的内容，用斜杠转义为“\%”即可。

## 安装软件包

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

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

1. 从AUR下载包含PKGBUILD和其他安装文件（比如 systemd-units 和补丁，通常不是实际代码）的tar包。
2. 用命令 `tar -xvf packagename.tar.gz` 解包到一个仅用于编译AUR的空闲文件夹。
3. 在上述文件夹中运行 `makepkg -sri`. 命令会自动调用pacman解决依赖关系，然后下载代码、编译并打包. 然后安装软件包，然后删除仅在编译时才需要的软件包。

### 基础环境

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

    # pacman -S --needed base-devel

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

`-s`/`--syncdeps` 表示自动执行pacman安装依赖关系。`-r`/`--rmdeps` 会在编译后删除不需要的编译时依赖。`-i`/`--install` 会安装软件包。

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

## 反馈

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

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

## 分享和维护软件包

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

### 提交软件包

注意: 提交前请先熟悉 Arch packaging standards 及相关文章。
Note: The following section describes how to upload packages to aurweb 3.5.1. If you are submitting a package for the first time, please consider directly uploading it to AUR 4 instead.

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

压缩包可以通过下面命令创建：

    $ makepkg --source

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

    # 查看压缩包内容

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

    libfoo/
    libfoo/.SRCINFO
    libfoo/PKGBUILD
    libfoo/libfoo.install

Note: ".SRCINFO" 包含了软件代码的元数据，详情参阅#AUR metadata.

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

- 检查官方仓库，如果存在该软件包的 任何版本，就不要重复提交。如果认为官方仓库的软件包已过期，请标记它。如果它有问题或者缺少功能，请反馈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`）。如果必须使用原文件名，可以在打包脚本中改回命名。

### 维护软件包

- 要更新软件包，重新提交即可。
- 阅读其他用户的反馈，并改进软件包。
- 升级软件包后，不要在评论中加入版本更新信息，这些信息会冲淡更重要的用户评论。AUR helpers 更适合检查更新。
- 不要提交软件包后就放任不管！PKGBUILD的和维护升级是用户自己的责任。

### 其他事项

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

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

### AUR 4

Note: Please see Talk:Arch User Repository#Scope of the AUR4 section before making changes to this section.

Since release 4.0.0, aurweb uses Git repositories for AUR packages. This means that the package submission process is a bit more involved. Maintainers will need to have a basic understanding of Git and SSH. Numerous scripts are available to help ease the transition. While aur.archlinux.org runs aurweb 3.5.1 until August 8th 2015, there is a setup of a 4.0.0 release candidate running under aur4.archlinux.org.

Current AUR maintainers are given a grace period between June 8th and July 8th to upload any package they already maintain to aur4.archlinux.org. After July 8th, any packages left in the current AUR that have not been uploaded to AUR4 will be orphaned and can be taken over by any maintainer and uploaded. On August 8th, AUR4 will become the new official AUR and will be moved to the normal aur.archlinux.org domain.

#### Submitting packages to aur4.archlinux.org

Warning: Before attempting to submit a package you are expected to familiarize yourself with Arch packaging standards and all the articles under "Related articles".

For write access to the AUR users need to have an SSH key. The contents of a public key `.ssh/foo.pub` need to be copied to the user profile in My Account. It is recommended that you create a new key, rather than use an existing SSH key so that you could selectively revoke the SSH key should something happen.

In order to upload a package, simply clone the Git repository with the corresponding name:

    $ git clone ssh://aur@aur4.archlinux.org/foobar.git

After August 8th, replace `aur4.archlinux.org` with `aur.archlinux.org`.

You can now add the source files to the local copy of the Git repository. When making changes to the repository, make sure you always include the `PKGBUILD` and `.SRCINFO` in the top-level directory. You can create `.SRCINFO` files using `mksrcinfo`, provided by pkgbuild-introspection.

In order to submit new versions of a package base to the AUR, add the new `PKGBUILD`, `.SRCINFO` and possibly helper files (like `.install` files or local source files like `.patch`) to the staging area with `git add`, commit them to your local tree with a commit message with `git commit`, and finally publish the changes to the AUR with `git push`.

For example, to create and submit the initial commit:

    $ mksrcinfo
    $ git add PKGBUILD .SRCINFO
    $ git commit -m 'Initial import'
    $ git push origin master

Warning: If you do not want to publish your system-wide identity, do not forget to set a local user name and email address via `git config user.name [...]` and `git config user.email [...]`! It is much more difficult to rewrite already published history, see: FS#45425. Review your commits before pushing them!

To update a package, edit the `PKGBUILD` and run the following commands to track the changes in the AUR Git repository:

    $ mksrcinfo
    $ git commit -am 'Update to 1.0.0-2'
    $ git push

See Git for more information.

Tip: If you forget to commit the `.SRCINFO` and add it in a later commit, the AUR will still reject your pushes because the `.SRCINFO` must exist for every commit. To solve this problem you can use git rebase with the `--root` option or git filter-branch with the `--tree-filter` option.

#### Migration scripts

See AUR helpers#AUR4.

## Git repository

A Git repository of the AUR is available at `git://pkgbuild.com/aur-mirror.git`, and is generally updated at least once per day. If the repository's commit history is not needed, then cloning with the `--depth=1` option will be much quicker:

    $ git clone --depth=1 git://pkgbuild.com/aur-mirror.git

For more information, see the following: Git Web interface, forum thread.

## AUR metadata

This article or section needs language, wiki syntax or style improvements.

Reason: This section was originally in a separate page, it may need adaptations to better fit into this article. (Discuss in Talk:Arch User Repository (简体中文)#)

In order to display information in the AUR web interface, the AUR's back-end code attempts to parse PKGBUILD files and salvage package name, version, and other information from it. `PKGBUILD`s are Bash scripts, and correctly parsing Bash scripts without executing them is a huge challenge, which is why makepkg is a Bash script itself: it includes the PKGBUILD of the package being built via the `source` directive. AUR metadata files were created to get rid of some hacks, used by AUR package maintainers to work around incorrect parsing in the web interface. See also FS#25210, FS#15043, and FS#16394.

### How it works

By adding a metadata file called `.SRCINFO` to source tarballs to overwrite specific PKGBUILD fields. An outdated format of this file was described in the AUR 2.1.0 release announcement. `.SRCINFO` files are parsed line-by-line. The syntax for each line is `key[_arch] = value`. Exactly one space must be on each side of the equals sign, even for an empty value, and do not include quotes around the values.

The `key` is a field name, based on the names of the corresponding PKGBUILD Variables. Some field names may optionally be suffixed with an architecture name. Fields are grouped into sections, each headed by one of the following two field names:

- pkgbase: This is required by AUR 3, otherwise the infamous “only lowercase letters are allowed” error is reported. (Pacman uses the first pkgname if pkgbase is omitted.) Repeat pkgname if unsure. There is only one pkgbase section. The field values from this section are inherited unless overridden in the pkgname sections that follow it. An empty field value in the pkgname section cancels the inheritance.
- pkgname: There may be multiple pkgname sections.

The following field names are associated with a single value for the section:

- epoch
- pkgver: package version, may be formatted as [epoch:]pkgver if the epoch field is not given separately
- pkgrel: release number of the package specific to Arch Linux
- pkgdesc
- url

The following field names may be repeated on multiple lines in a section to add multiple values:

- license: in case of multiple licenses separate them by a space
- groups

The following field names may be repeated, and also may optionally have an architecture suffix, separated from the field name by an underscore:

- depends: dependencies, one per line
- makedepends
- checkdepends
- optdepends
- conflicts
- provides
- replaces
- source

Fields with other names are ignored. Blank lines and comment lines beginning with a hash sign (#) are also ignored. Lines may be indented. This format closely matches the `.PKGINFO` format that is used for binary packages in pacman/libalpm.

The `.SRCINFO` can also be created from the `PKGBUILD` with `mksrcinfo` from pkgbuild-introspection.

## AUR translation

See TRANSLATING in the AUR source tree for information about creating and maintaining translation of the AUR web interface.

## FAQ

### AUR是什么？

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

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

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

### 如何给 AUR 中的软件包投票?

注册AUR 网站账户，在浏览软件包时会看到投票选项。登录后，还可以通过 aurvoteAUR 投票.

### 受信用户（或TU）是什么？

受信用户（TU，Trusted User）是选拔出的监督AUR和[community]仓库的用户。他们维护着[community]的热门软件，并维持AUR运转。

### Arch User Repository和[community]仓库有何区别？

Arch User Repository是储存所有用户提交的PKGBUILD的地方，软件包需通过makepkg手动生成。吸引足够多的 community interest 及 TU 支持的 PKGBUILD 会被收录进[community]仓库（由TU维护），以二进制软件包形式提供，可以由pacman安装。

### PKGBUILD（AUR软件包）怎样才能被收录到community软件仓库？

一般至少需要10票，并且要有TU（受信用户）愿意维护，否则即便有上千票也不会收录。当然，也有TU（受信用户）无视票数而主动去收录他想要的软件包。

一些流行的软件包未被收录的原因一般是：

- Arch Linux的软件仓库中已经有了别的版本。
- 那个软件包是AUR-centric（(e.g. 是个 AUR helper)）（译者问：AUR-centric到底是啥？没看到这个AUR helper啊。懂行的麻烦编辑下，谢谢。）
- 没有再发布的授权许可

另见 DeveloperWiki:Community repo candidates 和 Rules for Packages Entering the community Repo.

### 如何编写PKGBUILD？

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

### 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的方法？

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

## 参阅

- AUR 网页
- AUR 邮件列表
- AUR Git 仓库

Categories:

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