Difference between revisions of "Arch User Repository (简体中文)"

From ArchWiki
Jump to: navigation, search
(Add AUR4. Update translation.)
(update interlanguage links)
(Tag: wiki-scripts)
(26 intermediate revisions by 5 users not shown)
Line 1: Line 1:
[[Category:Arch User Repository (简体中文)]]
+
[[Category:About Arch (简体中文)]]
 
[[Category:Package development (简体中文)]]
 
[[Category:Package development (简体中文)]]
 
[[Category:Package management (简体中文)]]
 
[[Category:Package management (简体中文)]]
Line 19: Line 19:
 
[[ru:Arch User Repository]]
 
[[ru:Arch User Repository]]
 
[[sr:Arch User Repository]]
 
[[sr:Arch User Repository]]
[[tr:Arch Kullanıcı Deposu]]
+
[[zh-hant:Arch User Repository]]
[[uk:Arch User Repository]]
 
[[zh-TW:Arch User Repository]]
 
 
{{Related articles start (简体中文)}}
 
{{Related articles start (简体中文)}}
{{Related2|AUR Helpers (简体中文)|AUR 帮助程序}}
+
{{Related2|AUR helpers (简体中文)|AUR 帮助程序}}
 
{{Related|AUR Trusted User Guidelines (简体中文)}}
 
{{Related|AUR Trusted User Guidelines (简体中文)}}
 
{{Related|AurJson}}
 
{{Related|AurJson}}
{{Related|PKGBUILD}}
+
{{Related|PKGBUILD (简体中文)}}
{{Related|makepkg}}
+
{{Related|makepkg (简体中文)}}
{{Related|pacman}}
+
{{Related|Pacman (简体中文)}}
{{Related|Official repositories}}
+
{{Related|.SRCINFO (简体中文)}}
{{Related|Arch Build System}}
+
{{Related|Official repositories (简体中文)}}
 +
{{Related|Arch Build System (简体中文)}}
 
{{Related|Creating packages}}
 
{{Related|Creating packages}}
 
{{Related articles end}}
 
{{Related articles end}}
{{TranslationStatus (简体中文)|Arch_User_Repository|2015-08-05|389301}}
+
{{TranslationStatus (简体中文)|Arch_User_Repository|2017-09-04|488175}}
 
[https://aur.archlinux.org Arch用户软件仓库](Arch User Repository,AUR)是为用户而建、由用户主导的Arch软件仓库。AUR中的软件包以软件包生成脚本([[PKGBUILD (简体中文)|PKGBUILD]])的形式提供,用户自己通过[[makepkg (简体中文)|makepkg]]生成包,再由[[pacman (简体中文)|pacman]]安装。创建AUR的初衷是方便用户维护和分享新软件包,并由官方定期从中挑选软件包进入[[community]]仓库。本文介绍用户访问和使用AUR的方法。
 
[https://aur.archlinux.org Arch用户软件仓库](Arch User Repository,AUR)是为用户而建、由用户主导的Arch软件仓库。AUR中的软件包以软件包生成脚本([[PKGBUILD (简体中文)|PKGBUILD]])的形式提供,用户自己通过[[makepkg (简体中文)|makepkg]]生成包,再由[[pacman (简体中文)|pacman]]安装。创建AUR的初衷是方便用户维护和分享新软件包,并由官方定期从中挑选软件包进入[[community]]仓库。本文介绍用户访问和使用AUR的方法。
  
Line 39: Line 38:
  
 
==导读==
 
==导读==
 
 
用户可以从[https://aur.archlinux.org AUR网站]下载[[PKGBUILD (简体中文)|PKGBUILD]]。[[makepkg (简体中文)|makepkg]]使用该文件生成软件包,最后由[[pacman (简体中文)|pacman]]安装。
 
用户可以从[https://aur.archlinux.org AUR网站]下载[[PKGBUILD (简体中文)|PKGBUILD]]。[[makepkg (简体中文)|makepkg]]使用该文件生成软件包,最后由[[pacman (简体中文)|pacman]]安装。
  
 
* 确保 {{Grp|base-devel}} 软件包组 已被安装 ({{ic|pacman -S  --needed base-devel}})。
 
* 确保 {{Grp|base-devel}} 软件包组 已被安装 ({{ic|pacman -S  --needed base-devel}})。
* 阅读下面 AUR 的更深入的介绍,了解如何安装软件包。
 
* 访问[https://aur.archlinux.org AUR网站]查看软件包更新和其他事件。网站还提供了最新软件包的列表。
 
 
* 浏览[[#FAQ]]获取常见问题的答案。
 
* 浏览[[#FAQ]]获取常见问题的答案。
 
* 在{{ic|/etc/makepkg.conf}}中,针对处理器使用合适的CFLAGS、CXXFLAGS编译参数,以优化软件包编译。通过设置MAKEFLAGS变量,可以启用多线程编译,使用多核心处理器的话,将大大减少编译时间。详情参见[[makepkg (简体中文)|makepkg]]。
 
* 在{{ic|/etc/makepkg.conf}}中,针对处理器使用合适的CFLAGS、CXXFLAGS编译参数,以优化软件包编译。通过设置MAKEFLAGS变量,可以启用多线程编译,使用多核心处理器的话,将大大减少编译时间。详情参见[[makepkg (简体中文)|makepkg]]。
 
+
* 也可以通过 SSH 连接到 AUR: 运行 {{ic|ssh aur@aur.archlinux.org help}} 获得可用指令的列表。
 
==历史==
 
==历史==
 
本节所述内容都是遥远的历史,现在已经见不到这些古董了,AUR取代了它们。
 
  
 
最初,人们上传[[PKGBUILD (简体中文)|PKGBUILD]]、附属文件、编译好的软件包到 {{ic|<nowiki>ftp://ftp.archlinux.org/incoming</nowiki>}}。文件一直存放在那里,直到[[Package Maintainer|软件包维护人员]]发现并收录。
 
最初,人们上传[[PKGBUILD (简体中文)|PKGBUILD]]、附属文件、编译好的软件包到 {{ic|<nowiki>ftp://ftp.archlinux.org/incoming</nowiki>}}。文件一直存放在那里,直到[[Package Maintainer|软件包维护人员]]发现并收录。
  
 
后来,出现了受信用户软件仓库,部分社区用户拥有了建设自己的软件仓库的权力。以这个仓库为基础,为使其更加灵活易用,AUR出现了。事实上,AUR维护人员现在仍被称为受信用户(简称TU)。
 
后来,出现了受信用户软件仓库,部分社区用户拥有了建设自己的软件仓库的权力。以这个仓库为基础,为使其更加灵活易用,AUR出现了。事实上,AUR维护人员现在仍被称为受信用户(简称TU)。
 +
 +
从2015-06-08 到 2015-08-08,AUR 版本从 3.5.1 到 4.0.0,Git 仓库成为 PKGBUILD 的发布方式.
  
 
==搜索==
 
==搜索==
Line 61: Line 57:
  
 
软件包检索使用MySQL的LIKE比较字符串。这使得搜索规则更加灵活(例如,搜索“tool%like%grep”而非“tool like grep”)。如果需要搜索带有“%”的内容,用斜杠转义为“\%”即可。
 
软件包检索使用MySQL的LIKE比较字符串。这使得搜索规则更加灵活(例如,搜索“tool%like%grep”而非“tool like grep”)。如果需要搜索带有“%”的内容,用斜杠转义为“\%”即可。
 
 
==安装软件包==
 
==安装软件包==
 
{{注意|Arch官方永远不会提供安装AUR(和其他不受支持)软件包的便利工具,'''AUR用户应当对软件编译有一定了解'''。}}
 
  
 
从AUR(即[unsupported]仓库)安装软件包并不很困难。步骤如下:
 
从AUR(即[unsupported]仓库)安装软件包并不很困难。步骤如下:
# 从AUR下载包含[[PKGBUILD]]和其他安装文件(比如 systemd-units 和补丁,通常不是实际代码)的tar包。
+
# 从AUR下载包含[[PKGBUILD]]和其他安装文件(比如 [[systemd]] 和补丁,通常不是实际代码)的tar包。
 
# 用命令 {{ic|tar -xvf packagename.tar.gz}} 解包到一个仅用于编译AUR的空闲文件夹。
 
# 用命令 {{ic|tar -xvf packagename.tar.gz}} 解包到一个仅用于编译AUR的空闲文件夹。
# 在上述文件夹中运行 {{ic|makepkg -sri}}. 命令会自动调用[[pacman (简体中文)|pacman]]解决依赖关系,然后下载代码、编译并打包. 然后安装软件包,然后删除仅在编译时才需要的软件包。
+
# 验证[[PKGBUILD]]和其它相关文件,确保其中不含有恶意代码.
 +
# 在上述文件夹中运行 {{ic|makepkg -si}}. 命令会自动调用[[pacman (简体中文)|pacman]]解决依赖关系,然后下载代码、编译并打包. 然后安装软件包。
  
===基础环境===
+
=== 准备 ===
  
首先要安装基本的开发工具。软件包组{{grp|base-devel}} 是必须的,其中包括{{Pkg|make}}和其他编译工具:
+
首先确定安装了 {{grp|base-devel}} 软件包组,其中包括{{Pkg|make}}和其他编译工具:
  
# pacman -S --needed base-devel
+
{{Note|AUR 中的软件包都会假定你已经安装了 {{grp|base-devel}} 软件包组(例如它们不会将这个组中的软件包列入依赖列表.}}
  
 
然后,选择一个合适的编译目录。这个目录用作生成软件包时的工作目录,任何空白目录都可以。下面的示例中使用{{ic|~/builds}}作为编译目录。
 
然后,选择一个合适的编译目录。这个目录用作生成软件包时的工作目录,任何空白目录都可以。下面的示例中使用{{ic|~/builds}}作为编译目录。
  
===获取软件包构建所需文件===
+
=== 获取软件包构建所需文件 ===
  
 
通过搜索或任何方式,在AUR中找到要安装的软件包。阅读介绍,检查软件包更新日期,看看别人的评论。
 
通过搜索或任何方式,在AUR中找到要安装的软件包。阅读介绍,检查软件包更新日期,看看别人的评论。
  
确认无误后,下载需要的文件。从软件包信息页面点击“Tarball”(中文页面翻译做“压缩包”),保存压缩包到编译目录。以本文的foo软件包为例,压缩包名为“foo.tar.gz”(标准格式是“<pkgname>.tar.gz”)。
+
确认无误后,下面三种方法可以不用 AUR 工具就下载到需要的编译文件。
 +
* 从软件包信息页面点击“Download snapshot”(中文页面翻译做“下载快照”),保存压缩包到编译目录。以本文的foo软件包为例,压缩包名为“foo.tar.gz”(标准格式是“<pkgname>.tar.gz”)。
 +
 
 +
* 从终端下载:
 +
  $ cd ~/builds
 +
  $ curl -L -O <nowiki>https://aur.archlinux.org/cgit/aur.git/snapshot/foo.tar.gz</nowiki>
 +
 
 +
* 在"Package Details"中,找到"Git Clone URL",然后下载 [[Git]]仓库:
 +
  $ cd ~/build-repos
 +
  $ git clone https://aur.archlinux.org/foo.git
 +
:这样做的其中一个好处是你以后可以通过 {{ic|git pull}} 的形式来更新。
  
 
===构建和安装软件包===
 
===构建和安装软件包===
切换到编译目录,解压缩构建文件:
+
切换到编译目录,解压缩构建文件。如果是 Git 方式获取,无需解压。
  
 
  $ cd ~/builds
 
  $ cd ~/builds
Line 93: Line 97:
 
这时应该出现了一个新的名为“foo”的目录。进入目录并检查脚本文件:
 
这时应该出现了一个新的名为“foo”的目录。进入目录并检查脚本文件:
  
{{警告|'''务必认真检查所有文件!''' {{ic|PKGBUILD}}和所有{{ic|.install}}文件都是shell脚本文件,包含若干函数,由{{ic|makepkg}}调用并执行。这些函数可以调用'''任何'''命令,可能包含恶意或危险代码。除非使用root执行(不要这样做),否则{{ic|makepkg}}将通过fakeroot(意为“假root”)执行这些命令,能在一定程度防止恶意代码损坏系统,但还是小心为好。如有疑问,可以到论坛或邮件列表询问。}}
+
{{警告|'''务必认真检查所有文件!'''{{ic|cd}} 到新建立的目录,然后仔细检查每个文件确保没有恶意或危险代码. {{ic|PKGBUILD}}和所有{{ic|.install}}文件都是shell脚本文件,包含若干函数,由{{ic|makepkg}}调用并执行。这些函数可以调用'''任何'''命令,可能包含恶意或危险代码。{{ic|makepkg}}通过fakeroot(意为“假root”)执行这些命令(所以不要以root用户运行makepkg),能在一定程度防止恶意代码损坏系统,但还是小心为好。如有疑问,可以到论坛或邮件列表询问。}}
  
 
  $ cd foo
 
  $ cd foo
  $ nano PKGBUILD
+
  $ less PKGBUILD
  $ nano foo.install
+
  $ less foo.install
  
 
接下来开始生成软件包。检查文件后,执行[[makepkg (简体中文)|makepkg]](以普通用户权限):
 
接下来开始生成软件包。检查文件后,执行[[makepkg (简体中文)|makepkg]](以普通用户权限):
  
  $ makepkg -sri
+
  $ makepkg -si
 +
 
 +
{{ic|-s}}/{{ic|--syncdeps}} 表示自动执行[[pacman (简体中文)|pacman]]安装依赖关系。{{ic|-i}}/{{ic|--install}} 会安装软件包。
 +
 
 +
有些选项可能有用:
  
{{ic|-s}}/{{ic|--syncdeps}} 表示自动执行[[pacman (简体中文)|pacman]]安装依赖关系。{{ic|-r}}/{{ic|--rmdeps}} 会在编译后删除不需要的编译时依赖。{{ic|-i}}/{{ic|--install}} 会安装软件包。
+
* {{ic|-r}}/{{ic|--rmdeps}} 会移除只在构建时需要的软件包,不过重新编译时就要再安装了。
 +
* {{ic|-c}}/{{ic|--clean}} 会在构建结束时删除临时文件。如果需要调试构建过程这会十分有用。
  
 
{{注意|本文所涵盖的内容十分有限。如果想要对软件包构建有更深了解,推荐阅读[[makepkg (简体中文)|makepkg]]和[[Arch Build System (简体中文)|ABS]]。}}
 
{{注意|本文所涵盖的内容十分有限。如果想要对软件包构建有更深了解,推荐阅读[[makepkg (简体中文)|makepkg]]和[[Arch Build System (简体中文)|ABS]]。}}
Line 110: Line 119:
 
[https://aur.archlinux.org AUR网站]的评论机制为用户提供了一种对PKGBUILD提建议的渠道。注意,最好不要在评论处贴自己的代码,因为代码很占地方,还很容易被新的评论刷掉。最好直接email通知维护人员,或者用[[pastebin]]贴代码。
 
[https://aur.archlinux.org AUR网站]的评论机制为用户提供了一种对PKGBUILD提建议的渠道。注意,最好不要在评论处贴自己的代码,因为代码很占地方,还很容易被新的评论刷掉。最好直接email通知维护人员,或者用[[pastebin]]贴代码。
  
在AUR网站上,用户可以为自己喜欢的AUR'''投票'''。投票数是[community]仓库软件包选拔的重要依据。
+
'''所有的'' Arch用户都可以通过AUR Web界面为软件包投票.大多数软件包都有机会被TU收录进[[community]]仓库.投票数是[community]仓库软件包选拔的重要依据之一。
  
==分享和维护软件包==
+
== 分享和维护软件包 ==
  
 
AUR不包含任何编译过的二进制包,用户上传[[PKGBUILD (简体中文)|PKGBUILD]],供其他用户下载使用。所有软件包都是非官方的,使用风险自担。
 
AUR不包含任何编译过的二进制包,用户上传[[PKGBUILD (简体中文)|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|AUR 4]] instead.}}
 
  
在AUR网站登录后,点击上方的Submit(中文版为“提交”)进入[https://aur.archlinux.org/pkgsubmit.php 上传软件包页面]。用户须提交一个名为{{ic|.tar.gz}}的压缩包,其中应包含一个存放软件包生成所需文件的目录,目录中有一个PKGBUILD、零到多个{{ic|.install}}文件、[[#AUR metadata|.SRCINFO]],代码补丁文件等等。如果安装了[[Arch Build System (简体中文)|ABS]],可以在{{ic|/var/abs}}查看范例。
+
{{Warning|在提交前请先熟悉 [[Arch packaging standards]] 及所有的"相关文章".违反相应规则的软件包可能不经警告被直接删除。}}
  
压缩包可以通过下面命令创建:
+
如果对自己的PKGBUILD缺乏信心,可以先把它贴到[https://mailman.archlinux.org/mailman/listinfo/aur-general AUR邮件列表],[https://bbs.archlinux.org/viewforum.php?id=4 论坛AUR版]或 [[IRC Channels|IRC 频道]],让大家帮你检查。
$ makepkg --source
 
  
如果要上传一个名为''libfoo''的软件包,上面生成的压缩包大致如下:
+
==== 提交软件包的规则 ====
 
# 查看压缩包内容
 
{{hc|$ tar tf libfoo-0.1-1.src.tar.gz|
 
libfoo/
 
libfoo/.SRCINFO
 
libfoo/PKGBUILD
 
libfoo/libfoo.install
 
}}
 
  
{{Note|".SRCINFO" 包含了软件代码的元数据,详情参阅[[#AUR metadata]].}}
+
提交软件包时请遵循下列的规则:
  
提交软件包时,需遵守如下规定:
+
* '''任何提交的 PKGBUILD 都不能编译已经位于官方二进制软件包仓库的程序。''' 如果认为官方仓库的软件包已过期,请标记它。如果它有问题或者缺少功能,请反馈[https://bugs.archlinux.org/ bug 报告]。
 
+
: '''唯一的例外'''是和官方打包版本相比增加或开启了新的功能。这时 pkgname 列应该不同。例如加入了边栏支持的 {{ic|screen}} 应该命名为 {{ic|screen-sidebar}},同时添加 {{ic|1=provides=('screen')}} 以避免与官方仓库中的包冲突。
* 检查[https://www.archlinux.org/packages/ 官方仓库],如果存在该软件包的 '''任何版本''',就'''不要'''重复提交。如果认为官方仓库的软件包已过期,请标记它。如果它有问题或者缺少功能,请反馈[https://bugs.archlinux.org/ bug 报告]。
+
* 查看AUR中是否已有相同软件包。如果已经有人维护某软件包,其他用户的提交将以评论形式报告给维护人员。如果软件包无人维护或不存在,用户提交的软件包将被收录,别创建重复的包.
* 查看AUR中是否已有相同软件包。如果已经有人维护某软件包,其他用户的提交将以评论形式报告给维护人员。如果软件包无人维护或不存在,用户提交的软件包将被收录。
+
* 仔细检查上传的文件。编写PKGBUILD前务必阅读[[Arch packaging standards (简体中文)|Arch软件打包标准]]。劣质的PKGBUILD会影响软件的正常使用,不要指望别人会因为你糟糕的PKGBUILD浪费了他们的时间而收到感谢。
* 仔细检查上传的文件。编写PKGBUILD前务必阅读[[Arch Packaging Standards (简体中文)|Arch软件打包标准]]。劣质的PKGBUILD会影响软件的正常使用,不要指望别人会因此感谢你。
 
 
* 包含二进制文件或质量差的PKGBUILD有可能无提醒地被直接删除。
 
* 包含二进制文件或质量差的PKGBUILD有可能无提醒地被直接删除。
* 如果对自己的PKGBUILD缺乏信心,可以先把它贴到[https://mailman.archlinux.org/mailman/listinfo/aur-general AUR邮件列表]或[https://bbs.archlinux.org/viewforum.php?id=4 论坛AUR版],让大家帮你检查。
+
* 确保你的软件包有人需要,有人会用这个软件包吗?它非常特别吗?如果有一些人觉得它有用,就提交它.
* 确保你的软件包有人需要,不要上传没用的软件包。
 
 
* AUR 官方软件仓库中放置通用软件和软件相关内容,包括:可执行文件、配置文件、软件的在线文档和软件直接使用的数据。
 
* AUR 官方软件仓库中放置通用软件和软件相关内容,包括:可执行文件、配置文件、软件的在线文档和软件直接使用的数据。
 
* 上传软件包之前务必掌握打包过程,自己打几个包练练手。
 
* 上传软件包之前务必掌握打包过程,自己打几个包练练手。
* 如果上传一个名为{{ic|package.tar.gz}}的压缩包,其中包含名为{{ic|package}}的与软件包名相同的文件,上传时会出现错误:“Could not change to directory {{ic|/home/aur/unsupported/package/package}}”。解决方法是把{{ic|package}}文件重命名(比如{{ic|package.rc}})。如果必须使用原文件名,可以在打包脚本中改回命名。
+
* 请在 {{ic|PKGBUILD}} 最上端加入包含当前维护者和过去的维护者(作为贡献者)的信息,记得对邮件地址进行必要的处理以避免被垃圾邮件骚扰。然后移除所有不必要的行。例如:
 +
:如果你从其它人接手了一个 PKGBUILD ,像这样把你的名字和邮件地址加到最上面。
 +
:{{bc|<nowiki>
 +
# Maintainer: Your Name <address at domain dot tld>
 +
</nowiki>}}
 +
:如果在你之前有其他的维护者,请将它们添加到贡献者中。(如果提交者不是你也如此。):
 +
:{{bc|<nowiki>
 +
# Maintainer: Your name <address at domain dot tld>
 +
# Maintainer: Other maintainer's name <address at domain dot tld>
 +
# Contributor: Previous maintainer's name <address at domain dot tld>
 +
# Contributor: Original submitter's name <address at domain dot tld>
 +
</nowiki>}}
  
===维护软件包===
+
==== 认证 ====
 +
要向AUR间写入软件包,用户需要创建一个[[SSH keys|SSH key]].将公钥 {{ic|.ssh/foo.pub}} 导入到用户账户的 ''我的帐号''一节,然后为 {{ic|aur.archlinux.org}} 指定私钥的位置,例如:
  
* 要更新软件包,重新提交即可。
+
{{hc|~/.ssh/config|
* 阅读其他用户的反馈,并改进软件包。
+
Host aur.archlinux.org
* 升级软件包后,不要在评论中加入版本更新信息,这些信息会冲淡更重要的用户评论。[[AUR helpers]] 更适合检查更新。
+
  IdentityFile ~/.ssh/aur
* 不要提交软件包后就放任不管!PKGBUILD的和维护升级是用户自己的责任。
+
  User aur}}
  
===其他事项===
+
建议为 AUR 创建一个新的密钥(而不是用旧的),这样出问题时可以直接废除密钥。在输入密钥时可以导入多个公钥,每行一个。
  
* 取消维护权限和删除软件包的请求可以通过右边"Package actions" 的 "File Request" 链接执行。这会给当前的维护者和 [https://mailman.archlinux.org/mailman/listinfo/aur-requests aur-requests 邮件列表]自动发送邮件通知。[[Trusted Users]] 会接受或拒绝请求。
+
==== 创建软件包 ====
* 在aur-general邮件列表请求移除软件包或弃置他人的软件包,受信用户会作出决定。
+
* 请求中需包含'''软件包名称和AUR页面链接'''。
+
要创建新的空本地 Git 仓库,可以用 {{ic|git clone}} 相同名称的远程仓库,如果 AUR 中还不存在软件包,将会看到下面警告:
* 如果email通知当前软件包维护人员后两个星期内没有答复,弃置请求将得到许可。
+
{{hc|$ git clone <nowiki>git+ssh://</nowiki>aur@aur.archlinux.org/''package_name''.git|
* '''软件包尚无法改名'''。如果需要,可以提交新软件包,并在邮件列表请求移除旧软件包。
+
Cloning into &apos;''package_name''&apos;...
* 移除请求格式如下(务必用英语):
+
warning: You appear to have cloned an empty repository.
** 软件包名称和AUR页面链接
+
Checking connectivity... done.
** 删除原因,至少一句话 <br> '''注意:'''不要以为在软件包评论处贴出移除理由就足够了,受信用户只会阅读邮件列表上的信息。
+
}}
** 详情说明,比如是因为修改名称而移除还是其他什么的。
 
** 如果是合并请求,请注明需要合并到的软件包。
 
 
 
删除的条件比较严格。如果无法通过,弃置即可。
 
 
 
=== 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 [https://aur.archlinux.org/ 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 [https://aur4.archlinux.org/ 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 [https://aur4.archlinux.org/ 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 [https://aur.archlinux.org/ aur.archlinux.org] domain.
+
{{Note|即使 AUR 中的软件包被删除 Git 仓库也不会删除,所以你可能会发现 clone 一个 AUR 中还不存在的软件包时不会看到这个警告。 }}
  
==== Submitting packages to aur4.archlinux.org ====
+
如果已经有了 git 仓库,可以远程创建 AUR git 并获取它:
  
{{Warning|Before attempting to submit a package you are expected to familiarize yourself with [[Arch packaging standards]] and all the articles under "Related articles".}}
+
$ git remote add ''remote_name'' <nowiki>git+ssh://</nowiki>aur@aur.archlinux.org/''package_name''.git
 +
$ git fetch ''remote_name''
  
For write access to the AUR users need to have an [[SSH keys|SSH key]].
+
{{ic|''remote_name''}} 是需要创建的仓库,参考 [[Git#Using remotes]]。
The contents of a public key {{ic|.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:
+
第一次 ''push'' 之后,AUR 上就会出现软件包。可以将源代码加入本地 Git 仓库,参考 [[#维护软件包]].
  
$ git clone <nowiki>ssh://</nowiki>aur@''aur4''.archlinux.org/''foobar''.git
+
{{Warning|AUR 提交会通过 git 用户名和邮件定义作者,一旦提交很难改变。如果需要修改用户名和密码,请通过 {{ic|git config user.name [...]}} 和 {{ic|git config user.email [...]}} 修改。请一定在推送前进行检查。}}
  
After August 8th, replace {{ic|aur4.archlinux.org}} with {{ic|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 {{ic|PKGBUILD}} and {{ic|.SRCINFO}} in the top-level directory. You can create {{ic|.SRCINFO}} files using {{ic|mksrcinfo}}, provided by {{Pkg|pkgbuild-introspection}}.
+
要更新软件包的方法和创建类似,注意要确保每次推送都包含顶层目录的 {{ic|PKGBUILD}} 和 [[.SRCINFO (简体中文)|.SRCINFO]]。
  
In order to submit new versions of a package base to the AUR, add the new {{ic|PKGBUILD}}, {{ic|.SRCINFO}} and possibly helper files (like {{ic|.install}} files or local source files like {{ic|.patch}}) to the ''staging area'' with {{ic|git add}}, commit them to your local tree with a commit message with {{ic|git commit}}, and finally publish the changes to the AUR with {{ic|git push}}.
+
{{ic|git add}} 将它们和其它需要的文件 (例如 {{ic|.install}} 和像 {{ic|.patch}} 一类的源码文件)添加到工作区域("staging area"),{{ic|git commit}} 提交更改,最后用 {{ic|git push}} 上传到AUR.
  
For example, to create and submit the initial commit:
+
例如:
  
  $ mksrcinfo
+
  $ makepkg --printsrcinfo > .SRCINFO
  $ git add ''PKGBUILD .SRCINFO''
+
  $ git add PKGBUILD .SRCINFO
  $ git commit -m 'Initial import'
+
  $ git commit -m 'Useful commit message'
 
  $ git push origin master
 
  $ 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 {{ic|git config user.name [...]}} and {{ic|git config user.email [...]}}! It is much more difficult to rewrite already published history, see: {{Bug|45425}}. Review your commits before pushing them!}}
+
{{Warning|不想以全局身份提交?记得通过{{ic|git config user.name [...]}} {{ic|git config user.email [...]}} 编辑自己的本地身份! 这可能会导致很难追踪提交历史, 参阅: {{Bug|45425}}. 在提交之前复查你的更改!}}
  
To update a package, edit the {{ic|PKGBUILD}} and run the following commands to track the changes in the AUR Git repository:
+
要更新某个软件包,修改需要的文件然后运行相应的操作把更改提交到AURgit仓库:
  
 
  $ mksrcinfo
 
  $ mksrcinfo
Line 213: Line 209:
 
  $ git push
 
  $ git push
  
See [[Git]] for more information.
+
参阅 [[Git]] 获得更多信息.
  
{{Tip|If you forget to commit the {{ic|.SRCINFO}} and add it in a later commit, the AUR will still reject your pushes because the {{ic|.SRCINFO}} must exist for ''every'' commit. To solve this problem you can use [https://git-scm.com/docs/git-rebase git rebase] with the {{ic|--root}} option or [https://git-scm.com/docs/git-filter-branch git filter-branch] with the {{ic|--tree-filter}} option.}}
+
{{Tip|如果你忘记在提交中包含{{ic|.SRCINFO}},即使你稍后补上AUR也会拒绝你的提交(因为每一次提交中都包含[[.SRCINFO]]) 要解决这个问题,你可以使用[https://git-scm.com/docs/git-rebase git rebase] 中的 {{ic|--root}} 选项或是 [https://git-scm.com/docs/git-filter-branch git filter-branch] 中的 {{ic|--tree-filter}} 选项.}}
  
==== Migration scripts ====
+
===维护软件包===
  
See [[AUR helpers#AUR4]].
+
* 要更新软件包,重新提交更新过的PKGBUILD即可。
 +
* 阅读其他用户的反馈,并试着听从建议改进软件包,这是个学习的过程!
 +
* 升级软件包后,不要在评论中加入版本更新信息,这些信息会冲淡更重要的用户评论。[[AUR helpers]] 更适合检查更新。
 +
* 不要提交软件包后就放任不管!PKGBUILD的和维护升级是用户自己的责任。
 +
* 发觉自己没有精力维护某个软件包?可以通过AURweb界面 {{ic|disown}} 一个软件包或是在AUR邮件列表发条消息. [https://aur.archlinux.org/packages/?O=0&SeB=nd&K=&outdated=&SB=n&SO=a&PP=50&do_Orphans=Orphans "孤儿包"] 用来表示那些所有维护者都 {{ic|disown}} 的软件包.
  
== Git repository ==
+
===其他事项===
A [[Git]] repository of the AUR is available at {{ic|<nowiki>git://pkgbuild.com/aur-mirror.git</nowiki>}}, and is generally updated at least once per day. If the repository's [http://git-scm.com/book/en/Git-Basics-Viewing-the-Commit-History commit history] is not needed, then cloning with the {{ic|1=--depth=1}} option will be much quicker:
 
  
<nowiki>$ git clone --depth=1 git://pkgbuild.com/aur-mirror.git</nowiki>
+
* 取消维护权限和删除软件包的请求可以通过右边"Package actions" 的 "File Request" 链接执行。这会给当前的维护者和 [https://mailman.archlinux.org/mailman/listinfo/aur-requests aur-requests 邮件列表]自动发送邮件通知。[[Trusted Users]] 会接受或拒绝请求。
 +
* 在aur-general邮件列表请求移除软件包或弃置他人的软件包,受信用户会作出决定。
 +
* 请求中需包含'''软件包名称和AUR页面链接'''。
 +
* 如果email通知当前软件包维护人员后两个星期内没有答复,弃置请求将得到许可。
 +
* '''软件包尚无法改名'''。如果需要,可以提交新软件包,并在邮件列表请求移除旧软件包。
 +
* 移除请求格式如下(务必用英语):
 +
** 软件包名称和AUR页面链接
 +
** 删除原因,至少一句话 <br> '''注意:'''不要以为在软件包评论处贴出移除理由就足够了,受信用户只会阅读邮件列表上的信息。
 +
** 详情说明,比如是因为修改名称而移除还是其他什么的。
 +
** 如果是合并请求,请注明需要合并到的软件包。
  
For more information, see the following: [http://pkgbuild.com/git/aur-mirror.git/ Git Web interface], [https://bbs.archlinux.org/viewtopic.php?id=113099 forum thread].
+
删除的条件比较严格。如果无法通过,弃置即可,其他用户可能会接手。
  
== AUR metadata ==
+
== AUR3 软件包的Git仓库 ==
  
{{Style|This section was originally in a separate page, it may need adaptations to better fit into this article.}}
+
因为AUR的后端迁移到[[Git]],从2015年8月8日起无人维护的包已从AUR中移除,可以在Github上找到AUR3软件包归档: [https://github.com/aur-archive AUR Archive]
  
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. {{ic|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 {{ic|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 {{Bug|25210}}, {{Bug|15043}}, and {{Bug|16394}}.
+
== AUR translation ==
  
=== How it works ===
+
参阅 [https://projects.archlinux.org/aurweb.git/tree/doc/i18n.txt i18n.txt] 获得关于创建和维护AUR web界面翻译的详细信息.
By adding a metadata file called {{ic|.SRCINFO}} to source tarballs to overwrite specific PKGBUILD fields. An outdated format of this file was described in the [https://mailman.archlinux.org/pipermail/aur-dev/2013-March/002428.html AUR 2.1.0 release announcement]. {{ic|.SRCINFO}} files are parsed line-by-line. The syntax for each line is {{ic|1=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 {{ic|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:
+
==FAQ==
  
* 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.
+
=== AUR是什么? ===
* pkgname: There may be multiple ''pkgname'' sections.
 
  
The following field names are associated with a single value for the section:
+
AUR 是 Arch User Repository (Arch用户软件仓库)的缩写,是Arch用户上传并分享软件、共享库等等的[[PKGBUILD (简体中文)|PKGBUILD]]的地方。用户可以为喜欢的软件包投票,票数多的将有机会进入[community]仓库并以二进制包的形式提供。
  
* epoch
+
=== 什么样的软件包能被放到 AUR? ===
* 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:
+
AUR中的软件包仅是编译脚本,只要内容符合软件版权,满足上面提到的软件包要求,就能够放入。有时候,下载的链接具有 "you may not link" 条款,这时就不能提供下载链接,而是要用程序名称代替,用户需要用其它方式提前获取受限制的源代码。有疑问请及时询问。
  
* license: in case of multiple licenses separate them by a space
+
=== 如何给 AUR 中的软件包投票? ===
* groups
+
注册[https://aur.archlinux.org/ AUR 网站]账户,在浏览软件包时会看到投票选项。登录后,还可以通过 {{AUR|aurvote}} 投票.
  
The following field names may be repeated, and also may optionally have an architecture suffix, separated from the field name by an underscore:
+
=== 受信用户(或TU)是什么? ===
  
* depends: dependencies, one per line
+
[[AUR Trusted User Guidelines|受信用户]](TU,Trusted User)是选拔出的监督AUR和[community]仓库的用户。他们维护着[community]的热门软件,并维持AUR运转。
* 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 {{ic|.PKGINFO}} format that is used for binary packages in [[pacman]]/libalpm.
+
=== Arch User Repository和[community]仓库有何区别? ===
  
The {{ic|.SRCINFO}} can also be created from the {{ic|PKGBUILD}} with {{ic|mksrcinfo}} from {{Pkg|pkgbuild-introspection}}.
+
Arch User Repository是储存所有用户提交的PKGBUILD的地方,软件包需通过[[makepkg (简体中文)|makepkg]]手动生成。吸引足够多的 community interest 及 TU 支持的 PKGBUILD 会被收录进[community]仓库(由TU维护),以二进制软件包形式提供,可以由[[pacman (简体中文)|pacman]]安装。
  
== AUR translation ==
+
=== AUR的某个软件包过时了,该怎么办? ===
  
See [https://projects.archlinux.org/aurweb.git/tree/TRANSLATING TRANSLATING] in the AUR source tree for information about creating and maintaining translation of the AUR web interface.
+
点击软件包页面的“Flag Out-of-date”(中文版为“标记为过期”)即可。如果长期未更新,最好email通知维护人员。如果还是没有得到答复,如果这些软件包标记为过期的时间超过 3 个月,长期未更新,可以在aur-general要求弃置软件包,邮件中请包含过期的信息。
  
==FAQ==
+
同时,你可以自行更新 PKGBUILD - 通常软件更新不需要修改编译或打包方式,更新 {{ic|pkgver}} 或 {{ic|source}} 数组就足够了。
  
=== AUR是什么? ===
+
{{Note|[[VCS package guidelines|VCS 软件包]] 在 pkgver 变化时并不会过时,所以不要标记它们,AUR 维护者不应该仅为了 pkgver 进行提交。}}
  
AUR 是 Arch User Repository (Arch用户软件仓库)的缩写,是Arch用户上传并分享软件、共享库等等的[[PKGBUILD (简体中文)|PKGBUILD]]的地方。用户可以为喜欢的软件包投票,票数多的将有机会进入[community]仓库并以二进制包的形式提供。
+
=== {{ic|makepkg}}无法构建某个软件包怎么办? ===
  
=== 什么样的软件包能被放到 AUR? ===
+
你很可能忘了点啥。
  
AUR中的软件包仅是编译脚本,只要内容符合软件版权,满足上面提到的软件包要求,就能够放入。有时候,下载的链接具有 "you may not link" 条款,这时就不能提供下载链接,而是要用程序名称代替,用户需要用其它方式提前获取受限制的源代码。有疑问请及时询问。
+
# [[Pacman#Upgrading_packages|更新系统]],系统软件过时可能导致软件包构建失败。
 +
# 确保安装了“base”和“base-devel”软件包组。
 +
# 在执行{{ic|makepkg}}时,使用{{ic|-s}}选项检查依赖关系。
  
=== 如何给 AUR 中的软件包投票? ===
+
先阅读 PKGBUILD 和 AUR 页面的评论。可能导致编译错误的还有不正确的CFLAGS、LDFLAGS和MAKEFLAGS设置。也有可能是PKGBUILD写错了,如果确实如此,请通知包维护人员。例如在 AUR 页面留言。
注册[https://aur.archlinux.org/ AUR 网站]账户,在浏览软件包时会看到投票选项。登录后,还可以通过 {{AUR|aurvote}} 投票.
 
  
=== 受信用户(或TU)是什么? ===
+
=== 如何编写PKGBUILD? ===
  
[[AUR Trusted User Guidelines|受信用户]](TU,Trusted User)是选拔出的监督AUR和[community]仓库的用户。他们维护着[community]的热门软件,并维持AUR运转。
+
建议阅读[[Creating packages (简体中文)|创建软件包]]一文。先检查AUR看看有没有相同软件包,不要再造轮子。
  
=== Arch User Repository和[community]仓库有何区别? ===
+
=== 我想提交一个PKGBUILD,希望别人帮忙检查错误。 ===
  
Arch User Repository是储存所有用户提交的PKGBUILD的地方,软件包需通过[[makepkg (简体中文)|makepkg]]手动生成。吸引足够多的 community interest 及 TU 支持的 PKGBUILD 会被收录进[community]仓库(由TU维护),以二进制软件包形式提供,可以由[[pacman (简体中文)|pacman]]安装。
+
你可以在aur-general贴出你的PKGBUILD并征求他人意见,或到irc.freenode.net上的[[ArchChannel|IRC频道]]#archlinux-aur寻求帮助。也可以自己使用[[namcap (简体中文)|namcap]]检查PKGBUILD和软件包。
  
 
=== PKGBUILD(AUR软件包)怎样才能被收录到community软件仓库? ===
 
=== PKGBUILD(AUR软件包)怎样才能被收录到community软件仓库? ===
一般至少需要10票,并且要有TU(受信用户)愿意维护,否则即便有上千票也不会收录。当然,也有TU(受信用户)无视票数而主动去收录他想要的软件包。
+
 
 +
一般至少需要10票,并且要有TU(受信用户)愿意维护,否则即便有上千票也不会收录。当然,如果某个受信用户愿意维护一个软件包的话,投票数往往不是决定因素。
  
 
一些流行的软件包未被收录的原因一般是:
 
一些流行的软件包未被收录的原因一般是:
  
 
* Arch Linux的软件仓库中已经有了别的版本。
 
* Arch Linux的软件仓库中已经有了别的版本。
* 那个软件包是AUR-centric((e.g. 是个 [[AUR helper]]))(译者问:AUR-centric到底是啥?没看到这个AUR helper啊。懂行的麻烦编辑下,谢谢。)
+
* 那个软件包的功能只和AUR相关((e.g. 是个 [[AUR helper]])
 
* 没有再发布的授权许可
 
* 没有再发布的授权许可
  
 
另见 [[DeveloperWiki:Community repo candidates]] 和 [[AUR Trusted User Guidelines#Rules for Packages Entering the .5Bcommunity.5D Repo|Rules for Packages Entering the community Repo]].
 
另见 [[DeveloperWiki:Community repo candidates]] 和 [[AUR Trusted User Guidelines#Rules for Packages Entering the .5Bcommunity.5D Repo|Rules for Packages Entering the community Repo]].
  
=== 如何编写PKGBUILD? ===
+
=== 如何加速编译? ===
 +
 
 +
如果经常用gcc编译同样的代码,[[ccache (简体中文)|ccache]]对你可能有很大帮助。
  
建议阅读[[Creating packages (简体中文)|创建软件包]]一文。先检查AUR看看有没有相同软件包,不要再造轮子。
+
=== foo 和 foo-git 的区别是什么? ===
  
=== AUR的某个软件包过时了,该怎么办? ===
+
很多AUR软件包都包含稳定版本和开发版本.开发版本一般都会有像 {{ic|-cvs}}, {{ic|-svn}}, {{ic|-git}}, {{ic|-hg}}, {{ic|-bzr}} 或者 {{ic|-darcs}}一样的后缀.
 +
开发版本并不是为日常使用而设计的,不过可能包含新功能或者bug修复.因为要从上游获取最新的源代码,所以当运行{{ic|makepkg}}时版本号可能会发生变化.而且会跳过对源代码的完整性效验.
  
点击软件包页面的“Flag Out-of-date”(中文版为“标记为过期”)即可。如果长期未更新,最好email通知维护人员。如果还是没有得到答复,如果这些软件包标记为过期的时间超过 3 个月,长期未更新,可以在aur-general要求弃置软件包,邮件中请包含过期的信息。
+
同时请参阅 [[Enhancing Arch Linux Stability#Avoid development packages]]{{Broken section link}}.
  
=== 我想提交一个PKGBUILD,希望别人帮忙检查错误。 ===
+
=== 为啥某个软件包从AUR消失了? ===
  
你可以在aur-general贴出你的PKGBUILD并征求他人意见,或到irc.freenode.net上的[[ArchChannel|IRC频道]]#archlinux寻求帮助。也可以自己使用[[namcap (简体中文)|namcap]]检查PKGBUILD和软件包。
+
软件包可能因为不满足[[#提交软件包的规则]]或是其它原因而被删除,你可以在
 +
[https://lists.archlinux.org/pipermail/aur-requests/ aur-requests archives] 找到对应删除记录的归档.
  
=== {{ic|makepkg}}无法构建某个软件包怎么办? ===
+
如果某个软件包在AUR3时期存在,它可能没 [https://lists.archlinux.org/pipermail/aur-general/2015-August/031322.html 迁移到AUR4]. 参阅[[#AUR3 软件包的Git仓库]] 获得获取他们的更多信息.
  
你很可能忘了点啥。
+
=== 我要咋找出从AUR里消失的软件包? ===
  
# 执行{{ic|makepkg}}之前先使用{{ic|pacman -Syyu}}更新系统,系统软件过时可能导致软件包构建失败。
+
可以用下面的命令实现:
# 确保安装了“base”和“base-devel”软件包组。
 
# 在执行{{ic|makepkg}}时,使用{{ic|-s}}选项检查依赖关系。
 
  
先阅读 PKGBUILD 和 AUR 页面的评论。可能导致编译错误的还有不正确的CFLAGS、LDFLAGS和MAKEFLAGS设置。也有可能是PKGBUILD写错了,如果确实如此,请通知包维护人员。例如在 AUR 页面留言。
+
$ for pkg in $(pacman -Qqm); do cower -s $pkg &>/dev/null || echo "$pkg not in AUR"; done
  
=== 如何加速编译? ===
+
(来自 https://bbs.archlinux.org/viewtopic.php?id=202160)
  
如果经常用gcc编译同样的代码,[[ccache (简体中文)|ccache]]对你可能有很大帮助。
+
=== 如何查找已经安装但是从 AUR 消失的软件包 ===
  
=== 除了AUR网站,还有什么上传软件包到AUR的方法? ===
+
通过网络访问检查::
 +
$ comm -23 <(pacman -Qqm | sort) <(curl https://aur.archlinux.org/packages.gz | gzip -cd | sort)
  
可以使用{{pkg|burp}}, ''aurploader'' ({{AUR|python3-aur}}) 或 {{AUR|aurup}} &mdash;都是命令行工具。
+
=== 想知道AUR 里都有啥 ?===
 +
 +
* https://aur.archlinux.org/packages.gz
 +
* 使用来自  {{aur|python3-aur}} 的 <code>aurpkglist</code> 。
  
== 参阅 ==
+
== 另请参阅 ==
* [https://aur.archlinux.org AUR 网页]
+
* [https://aur.archlinux.org AUR Web ]
* [https://www.archlinux.org/mailman/listinfo/aur-general AUR 邮件列表]
+
* [https://lists.archlinux.org/listinfo/aur-general AUR 邮件列表]
* [http://pkgbuild.com/git/aur-mirror.git/ AUR Git 仓库]
+
* [[DeveloperWiki:AUR Cleanup Day]]

Revision as of 08:09, 13 December 2017

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

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

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

导读

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

  • 确保 base-devel 软件包组 已被安装 (pacman -S --needed base-devel)。
  • 浏览#FAQ获取常见问题的答案。
  • /etc/makepkg.conf中,针对处理器使用合适的CFLAGS、CXXFLAGS编译参数,以优化软件包编译。通过设置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 的发布方式.

搜索

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

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

安装软件包

从AUR(即[unsupported]仓库)安装软件包并不很困难。步骤如下:

  1. 从AUR下载包含PKGBUILD和其他安装文件(比如 systemd 和补丁,通常不是实际代码)的tar包。
  2. 用命令 tar -xvf packagename.tar.gz 解包到一个仅用于编译AUR的空闲文件夹。
  3. 验证PKGBUILD和其它相关文件,确保其中不含有恶意代码.
  4. 在上述文件夹中运行 makepkg -si. 命令会自动调用pacman解决依赖关系,然后下载代码、编译并打包. 然后安装软件包。

准备

首先确定安装了 base-devel 软件包组,其中包括make和其他编译工具:

Note: AUR 中的软件包都会假定你已经安装了 base-devel 软件包组(例如它们不会将这个组中的软件包列入依赖列表.

然后,选择一个合适的编译目录。这个目录用作生成软件包时的工作目录,任何空白目录都可以。下面的示例中使用~/builds作为编译目录。

获取软件包构建所需文件

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

确认无误后,下面三种方法可以不用 AUR 工具就下载到需要的编译文件。

  • 从软件包信息页面点击“Download snapshot”(中文页面翻译做“下载快照”),保存压缩包到编译目录。以本文的foo软件包为例,压缩包名为“foo.tar.gz”(标准格式是“<pkgname>.tar.gz”)。
  • 从终端下载:
 $ cd ~/builds
 $ curl -L -O https://aur.archlinux.org/cgit/aur.git/snapshot/foo.tar.gz
  • 在"Package Details"中,找到"Git Clone URL",然后下载 Git仓库:
 $ cd ~/build-repos
 $ git clone https://aur.archlinux.org/foo.git
这样做的其中一个好处是你以后可以通过 git pull 的形式来更新。

构建和安装软件包

切换到编译目录,解压缩构建文件。如果是 Git 方式获取,无需解压。

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

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

警告: 务必认真检查所有文件!cd 到新建立的目录,然后仔细检查每个文件确保没有恶意或危险代码. PKGBUILD和所有.install文件都是shell脚本文件,包含若干函数,由makepkg调用并执行。这些函数可以调用任何命令,可能包含恶意或危险代码。makepkg通过fakeroot(意为“假root”)执行这些命令(所以不要以root用户运行makepkg),能在一定程度防止恶意代码损坏系统,但还是小心为好。如有疑问,可以到论坛或邮件列表询问。
$ cd foo
$ less PKGBUILD
$ less foo.install

接下来开始生成软件包。检查文件后,执行makepkg(以普通用户权限):

$ makepkg -si

-s/--syncdeps 表示自动执行pacman安装依赖关系。-i/--install 会安装软件包。

有些选项可能有用:

  • -r/--rmdeps 会移除只在构建时需要的软件包,不过重新编译时就要再安装了。
  • -c/--clean 会在构建结束时删除临时文件。如果需要调试构建过程这会十分有用。
注意: 本文所涵盖的内容十分有限。如果想要对软件包构建有更深了解,推荐阅读makepkgABS

反馈

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

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

分享和维护软件包

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

提交软件包

Warning: 在提交前请先熟悉 Arch packaging standards 及所有的"相关文章".违反相应规则的软件包可能不经警告被直接删除。

如果对自己的PKGBUILD缺乏信心,可以先把它贴到AUR邮件列表论坛AUR版IRC 频道,让大家帮你检查。

提交软件包的规则

提交软件包时请遵循下列的规则:

  • 任何提交的 PKGBUILD 都不能编译已经位于官方二进制软件包仓库的程序。 如果认为官方仓库的软件包已过期,请标记它。如果它有问题或者缺少功能,请反馈bug 报告
唯一的例外是和官方打包版本相比增加或开启了新的功能。这时 pkgname 列应该不同。例如加入了边栏支持的 screen 应该命名为 screen-sidebar,同时添加 provides=('screen') 以避免与官方仓库中的包冲突。
  • 查看AUR中是否已有相同软件包。如果已经有人维护某软件包,其他用户的提交将以评论形式报告给维护人员。如果软件包无人维护或不存在,用户提交的软件包将被收录,别创建重复的包.
  • 仔细检查上传的文件。编写PKGBUILD前务必阅读Arch软件打包标准。劣质的PKGBUILD会影响软件的正常使用,不要指望别人会因为你糟糕的PKGBUILD浪费了他们的时间而收到感谢。
  • 包含二进制文件或质量差的PKGBUILD有可能无提醒地被直接删除。
  • 确保你的软件包有人需要,有人会用这个软件包吗?它非常特别吗?如果有一些人觉得它有用,就提交它.
  • AUR 官方软件仓库中放置通用软件和软件相关内容,包括:可执行文件、配置文件、软件的在线文档和软件直接使用的数据。
  • 上传软件包之前务必掌握打包过程,自己打几个包练练手。
  • 请在 PKGBUILD 最上端加入包含当前维护者和过去的维护者(作为贡献者)的信息,记得对邮件地址进行必要的处理以避免被垃圾邮件骚扰。然后移除所有不必要的行。例如:
如果你从其它人接手了一个 PKGBUILD ,像这样把你的名字和邮件地址加到最上面。
# Maintainer: Your Name <address at domain dot tld>
如果在你之前有其他的维护者,请将它们添加到贡献者中。(如果提交者不是你也如此。):
# Maintainer: Your name <address at domain dot tld>
# Maintainer: Other maintainer's name <address at domain dot tld>
# Contributor: Previous maintainer's name <address at domain dot tld>	
# Contributor: Original submitter's name <address at domain dot tld>

认证

要向AUR间写入软件包,用户需要创建一个SSH key.将公钥 .ssh/foo.pub 导入到用户账户的 我的帐号一节,然后为 aur.archlinux.org 指定私钥的位置,例如:

~/.ssh/config
Host aur.archlinux.org
  IdentityFile ~/.ssh/aur
  User aur

建议为 AUR 创建一个新的密钥(而不是用旧的),这样出问题时可以直接废除密钥。在输入密钥时可以导入多个公钥,每行一个。

创建软件包

要创建新的空本地 Git 仓库,可以用 git clone 相同名称的远程仓库,如果 AUR 中还不存在软件包,将会看到下面警告:

$ git clone git+ssh://aur@aur.archlinux.org/package_name.git
Cloning into 'package_name'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.
Note: 即使 AUR 中的软件包被删除 Git 仓库也不会删除,所以你可能会发现 clone 一个 AUR 中还不存在的软件包时不会看到这个警告。

如果已经有了 git 仓库,可以远程创建 AUR git 并获取它:

$ git remote add remote_name git+ssh://aur@aur.archlinux.org/package_name.git
$ git fetch remote_name

remote_name 是需要创建的仓库,参考 Git#Using remotes

第一次 push 之后,AUR 上就会出现软件包。可以将源代码加入本地 Git 仓库,参考 #维护软件包.

Warning: AUR 提交会通过 git 用户名和邮件定义作者,一旦提交很难改变。如果需要修改用户名和密码,请通过 git config user.name [...]git config user.email [...] 修改。请一定在推送前进行检查。

提交和更新软件包

要更新软件包的方法和创建类似,注意要确保每次推送都包含顶层目录的 PKGBUILD.SRCINFO

git add 将它们和其它需要的文件 (例如 .install 和像 .patch 一类的源码文件)添加到工作区域("staging area"),用 git commit 提交更改,最后用 git push 上传到AUR.

例如:

$ makepkg --printsrcinfo > .SRCINFO
$ git add PKGBUILD .SRCINFO
$ git commit -m 'Useful commit message'
$ git push origin master
Warning: 不想以全局身份提交?记得通过git config user.name [...]git config user.email [...] 编辑自己的本地身份! 这可能会导致很难追踪提交历史, 参阅: FS#45425. 在提交之前复查你的更改!

要更新某个软件包,修改需要的文件然后运行相应的操作把更改提交到AURgit仓库:

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

参阅 Git 获得更多信息.

Tip: 如果你忘记在提交中包含.SRCINFO,即使你稍后补上AUR也会拒绝你的提交(因为每一次提交中都包含.SRCINFO) 要解决这个问题,你可以使用git rebase 中的 --root 选项或是 git filter-branch 中的 --tree-filter 选项.

维护软件包

  • 要更新软件包,重新提交更新过的PKGBUILD即可。
  • 阅读其他用户的反馈,并试着听从建议改进软件包,这是个学习的过程!
  • 升级软件包后,不要在评论中加入版本更新信息,这些信息会冲淡更重要的用户评论。AUR helpers 更适合检查更新。
  • 不要提交软件包后就放任不管!PKGBUILD的和维护升级是用户自己的责任。
  • 发觉自己没有精力维护某个软件包?可以通过AURweb界面 disown 一个软件包或是在AUR邮件列表发条消息. "孤儿包" 用来表示那些所有维护者都 disown 的软件包.

其他事项

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

删除的条件比较严格。如果无法通过,弃置即可,其他用户可能会接手。

AUR3 软件包的Git仓库

因为AUR的后端迁移到Git,从2015年8月8日起无人维护的包已从AUR中移除,可以在Github上找到AUR3软件包归档: AUR Archive

AUR translation

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

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

AUR的某个软件包过时了,该怎么办?

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

同时,你可以自行更新 PKGBUILD - 通常软件更新不需要修改编译或打包方式,更新 pkgversource 数组就足够了。

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

makepkg无法构建某个软件包怎么办?

你很可能忘了点啥。

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

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

如何编写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))
  • 没有再发布的授权许可

另见 DeveloperWiki:Community repo candidatesRules for Packages Entering the community Repo.

如何加速编译?

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

foo 和 foo-git 的区别是什么?

很多AUR软件包都包含稳定版本和开发版本.开发版本一般都会有像 -cvs, -svn, -git, -hg, -bzr 或者 -darcs一样的后缀. 开发版本并不是为日常使用而设计的,不过可能包含新功能或者bug修复.因为要从上游获取最新的源代码,所以当运行makepkg时版本号可能会发生变化.而且会跳过对源代码的完整性效验.

同时请参阅 Enhancing Arch Linux Stability#Avoid development packages[broken link: invalid section].

为啥某个软件包从AUR消失了?

软件包可能因为不满足#提交软件包的规则或是其它原因而被删除,你可以在 aur-requests archives 找到对应删除记录的归档.

如果某个软件包在AUR3时期存在,它可能没 迁移到AUR4. 参阅#AUR3 软件包的Git仓库 获得获取他们的更多信息.

我要咋找出从AUR里消失的软件包?

可以用下面的命令实现:

$ for pkg in $(pacman -Qqm); do cower -s $pkg &>/dev/null || echo "$pkg not in AUR"; done

(来自 https://bbs.archlinux.org/viewtopic.php?id=202160)

如何查找已经安装但是从 AUR 消失的软件包

通过网络访问检查:: $ comm -23 <(pacman -Qqm | sort) <(curl https://aur.archlinux.org/packages.gz | gzip -cd | sort)

想知道AUR 里都有啥 ?

另请参阅