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

From ArchWiki
Jump to: navigation, search
(synchronized interlanguage links with the other wikis)
(update interlanguage links)
(Tag: wiki-scripts)
(36 intermediate revisions by 8 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]]
 
 
{{Related articles start (简体中文)}}
 
{{Related articles start (简体中文)}}
{{Related2|AUR Helpers (简体中文)|AUR 帮助程序}}
+
{{Related2|AUR helpers (简体中文)|AUR 帮助程序}}
 +
{{Related|AUR Trusted User Guidelines (简体中文)}}
 
{{Related|AurJson}}
 
{{Related|AurJson}}
{{Related|AUR Trusted User Guidelines (简体中文)}}
+
{{Related|PKGBUILD (简体中文)}}
 +
{{Related|makepkg (简体中文)}}
 +
{{Related|Pacman (简体中文)}}
 +
{{Related|.SRCINFO (简体中文)}}
 +
{{Related|Official repositories (简体中文)}}
 +
{{Related|Arch Build System (简体中文)}}
 +
{{Related|Creating packages}}
 
{{Related articles end}}
 
{{Related articles end}}
{{TranslationStatus (简体中文)|Arch_User_Repository|2013-04-09|253260}}
+
{{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的初衷是方便用户维护和分享新软件包,并由官方定期从中挑选软件包进入[[#.5Bcommunity.5D|[community]]]仓库。本文介绍用户访问和使用AUR的方法。
+
[https://aur.archlinux.org Arch用户软件仓库](Arch User Repository,AUR)是为用户而建、由用户主导的Arch软件仓库。AUR中的软件包以软件包生成脚本([[PKGBUILD (简体中文)|PKGBUILD]])的形式提供,用户自己通过[[makepkg (简体中文)|makepkg]]生成包,再由[[pacman (简体中文)|pacman]]安装。创建AUR的初衷是方便用户维护和分享新软件包,并由官方定期从中挑选软件包进入[[community]]仓库。本文介绍用户访问和使用AUR的方法。
  
 
许多官方仓库软件包都来自AUR。通过AUR,大家相互分享新的软件包生成脚本([[PKGBUILD (简体中文)|PKGBUILD]]和其他相关文件)。用户还可以为软件包投票。如果一个软件包投票足够多、没有协议问题、打包质量好,那么它就很有希望被收录进官方[community]仓库(以后就可以直接通过[[pacman]] 或 [[ABS|abs]] 安装了)。
 
许多官方仓库软件包都来自AUR。通过AUR,大家相互分享新的软件包生成脚本([[PKGBUILD (简体中文)|PKGBUILD]]和其他相关文件)。用户还可以为软件包投票。如果一个软件包投票足够多、没有协议问题、打包质量好,那么它就很有希望被收录进官方[community]仓库(以后就可以直接通过[[pacman]] 或 [[ABS|abs]] 安装了)。
  
 
==导读==
 
==导读==
 
 
用户可以从[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 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 54: Line 57:
  
 
软件包检索使用MySQL的LIKE比较字符串。这使得搜索规则更加灵活(例如,搜索“tool%like%grep”而非“tool like grep”)。如果需要搜索带有“%”的内容,用斜杠转义为“\%”即可。
 
软件包检索使用MySQL的LIKE比较字符串。这使得搜索规则更加灵活(例如,搜索“tool%like%grep”而非“tool like grep”)。如果需要搜索带有“%”的内容,用斜杠转义为“\%”即可。
 
 
==安装软件包==
 
==安装软件包==
  
 
从AUR(即[unsupported]仓库)安装软件包并不很困难。步骤如下:
 
从AUR(即[unsupported]仓库)安装软件包并不很困难。步骤如下:
# 从AUR下载包含[[PKGBUILD]]和其他安装文件(比如 systemd-units 和补丁,通常不是实际代码)的tar包。
+
# 从AUR下载包含[[PKGBUILD]]和其他安装文件(比如 [[systemd]] 和补丁,通常不是实际代码)的tar包。
# 用命令 {{ic|tar -xzf foo.tar.gz}} 解包到一个仅用于编译AUR的空闲文件夹。
+
# 用命令 {{ic|tar -xvf packagename.tar.gz}} 解包到一个仅用于编译AUR的空闲文件夹。
# 在上述文件夹中运行[[makepkg (简体中文)|makepkg]]{{ic|makepkg -s}} 会自动调用[[pacman (简体中文)|pacman]]解决依赖关系)。这一步会下载代码、编译并打包。
+
# 验证[[PKGBUILD]]和其它相关文件,确保其中不含有恶意代码.
# 查看 {{ic|src/}} 文件夹中是否存在 README 文件,阅读 README 可以获得和编译相关的信息。
+
# 在上述文件夹中运行 {{ic|makepkg -si}}. 命令会自动调用[[pacman (简体中文)|pacman]]解决依赖关系,然后下载代码、编译并打包. 然后安装软件包。
# 使用[[pacman (简体中文)|pacman]]安装上一步生成的软件包:
 
: {{bc|# pacman -U /path/to/pkg.tar.xz}}
 
  
[[AUR Helpers (简体中文)|AUR辅助工具]]提供了更为简单的方法,这些工具可以自动搜索、获取、编译、安装AUR中的软件包。在AUR中可以找到这些工具。
+
=== 准备 ===
  
{{注意|Arch官方永远不会提供安装AUR(和其他不受支持)软件包的便利工具,'''AUR用户应当对软件编译有一定了解'''。}}
+
首先确定安装了 {{grp|base-devel}} 软件包组,其中包括{{Pkg|make}}和其他编译工具:
  
下面以假想的软件包“foo”为例子,讲解安装过程。
+
{{Note|AUR 中的软件包都会假定你已经安装了 {{grp|base-devel}} 软件包组(例如它们不会将这个组中的软件包列入依赖列表.}}
  
===基础环境===
+
然后,选择一个合适的编译目录。这个目录用作生成软件包时的工作目录,任何空白目录都可以。下面的示例中使用{{ic|~/builds}}作为编译目录。
  
首先要安装基本的开发工具。软件包组{{grp|base-devel}} 是必须的,其中包括{{Pkg|make}}和其他编译工具:
+
=== 获取软件包构建所需文件 ===
  
# pacman -S base-devel
+
通过搜索或任何方式,在AUR中找到要安装的软件包。阅读介绍,检查软件包更新日期,看看别人的评论。
 
 
然后,选择一个合适的编译目录。这个目录用作生成软件包时的工作目录,任何空白目录都可以。例如使用:
 
 
 
~/builds
 
  
如果用ABS(Arch Build System,[[Arch Build System (简体中文)|Arch软件包构建系统]]),则通常使用:
+
确认无误后,下面三种方法可以不用 AUR 工具就下载到需要的编译文件。
 +
* 从软件包信息页面点击“Download snapshot”(中文页面翻译做“下载快照”),保存压缩包到编译目录。以本文的foo软件包为例,压缩包名为“foo.tar.gz”(标准格式是“<pkgname>.tar.gz”)。
  
/var/abs/local
+
* 从终端下载:
 +
  $ cd ~/builds
 +
  $ curl -L -O <nowiki>https://aur.archlinux.org/cgit/aur.git/snapshot/foo.tar.gz</nowiki>
  
更多有关ABS的信息,参见[[Arch Build System (简体中文)|此文]]。下面的示例中使用{{ic|~/builds}}作为编译目录。
+
* 在"Package Details"中,找到"Git Clone URL",然后下载 [[Git]]仓库:
 +
  $ cd ~/build-repos
 +
  $ git clone https://aur.archlinux.org/foo.git
 +
:这样做的其中一个好处是你以后可以通过 {{ic|git pull}} 的形式来更新。
  
===获取软件包构建所需文件===
+
===构建和安装软件包===
 
+
切换到编译目录,解压缩构建文件。如果是 Git 方式获取,无需解压。
通过搜索或任何方式,在AUR中找到要安装的软件包。阅读介绍,检查软件包更新日期,看看别人的评论。
 
 
 
确认无误后,下载需要的文件。从软件包信息页面点击“Tarball”(中文页面翻译做“压缩包”),保存压缩包到编译目录。以本文的foo软件包为例,压缩包名为“foo.tar.gz”(标准格式是“<pkgname>.tar.gz”)。
 
 
 
===构建软件包===
 
切换到编译目录,解压缩构建文件:
 
  
 
  $ cd ~/builds
 
  $ cd ~/builds
Line 101: 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 -s
+
  $ makepkg -si
  
{{ic|-s}}表示自动调用[[sudo (简体中文)|sudo]]执行[[pacman (简体中文)|pacman]]解决依赖关系。如果没有安装[[sudo (简体中文)|sudo]],就必须自己安装依赖软件包。
+
{{ic|-s}}/{{ic|--syncdeps}} 表示自动执行[[pacman (简体中文)|pacman]]安装依赖关系。{{ic|-i}}/{{ic|--install}} 会安装软件包。
  
===安装软件包===
+
有些选项可能有用:
接下来要使用[[pacman (简体中文)|pacman]]安装软件包。软件包构建和打包成功后,会生成一个压缩包,文件名格式如下:
 
  
<软件名称>-<软件版本号>-<软件包修订版本>-<平台>.pkg.tar.xz
+
* {{ic|-r}}/{{ic|--rmdeps}} 会移除只在构建时需要的软件包,不过重新编译时就要再安装了。
 
+
* {{ic|-c}}/{{ic|--clean}} 会在构建结束时删除临时文件。如果需要调试构建过程这会十分有用。
安装软件包的命令如下:
 
 
 
# pacman -U foo-0.1-1-i686.pkg.tar.xz 
 
 
 
这些被手动安装的软件包被成为外部软件包 - 不是来自 pacman 知道的软件仓库。要显示所有外部软件包:
 
$ pacman -Qm
 
  
 
{{注意|本文所涵盖的内容十分有限。如果想要对软件包构建有更深了解,推荐阅读[[makepkg (简体中文)|makepkg]]和[[Arch Build System (简体中文)|ABS]]。}}
 
{{注意|本文所涵盖的内容十分有限。如果想要对软件包构建有更深了解,推荐阅读[[makepkg (简体中文)|makepkg]]和[[Arch Build System (简体中文)|ABS]]。}}
  
 
==反馈==
 
==反馈==
[https://aur.archlinux.org AUR网站]的评论机制为用户提供了一种对PKGBUILD提建议的渠道。注意,最好不要在评论处贴自己的代码,因为代码很占地方,还很容易被新的评论刷掉。最好直接email通知维护人员,或者用[[pastebin Clients|pastebin]]贴代码。
+
[https://aur.archlinux.org AUR网站]的评论机制为用户提供了一种对PKGBUILD提建议的渠道。注意,最好不要在评论处贴自己的代码,因为代码很占地方,还很容易被新的评论刷掉。最好直接email通知维护人员,或者用[[pastebin]]贴代码。
  
在AUR网站上,用户可以为自己喜欢的AUR'''投票'''。投票数是[community]仓库软件包选拔的重要依据。
+
'''所有的'' Arch用户都可以通过AUR Web界面为软件包投票.大多数软件包都有机会被TU收录进[[community]]仓库.投票数是[community]仓库软件包选拔的重要依据之一。
  
==分享和维护软件包==
+
== 分享和维护软件包 ==
用户是AUR的一切,没有用户的贡献和支持就没有今天的AUR。本节介绍如何通过AUR分享自己的软件包。
 
  
 
AUR不包含任何编译过的二进制包,用户上传[[PKGBUILD (简体中文)|PKGBUILD]],供其他用户下载使用。所有软件包都是非官方的,使用风险自担。
 
AUR不包含任何编译过的二进制包,用户上传[[PKGBUILD (简体中文)|PKGBUILD]],供其他用户下载使用。所有软件包都是非官方的,使用风险自担。
  
===提交软件包===
+
=== 提交软件包 ===
在AUR网站登录后,点击上方的Submit(中文版为“提交”)进入[https://aur.archlinux.org/pkgsubmit.php 上传软件包页面]。用户须提交一个名为{{ic|.tar.gz}}的压缩包,其中应包含一个存放软件包生成所需文件的目录,目录中有一个PKGBUILD、零到多个{{ic|.install}}文件、代码补丁文件等等。如果安装了[[Arch Build System (简体中文)|ABS]],可以在{{ic|/var/abs}}查看这样的文件夹的范例。
 
  
{{ic|PKGBUILD}}所在目录执行以下命令创建上述压缩包:
+
{{Warning|在提交前请先熟悉 [[Arch packaging standards]] 及所有的"相关文章".违反相应规则的软件包可能不经警告被直接删除。}}
$ makepkg --source
 
  
如果要上传一个名为''libfoo''的软件包,上面生成的压缩包大致如下:
+
如果对自己的PKGBUILD缺乏信心,可以先把它贴到[https://mailman.archlinux.org/mailman/listinfo/aur-general AUR邮件列表],[https://bbs.archlinux.org/viewforum.php?id=4 论坛AUR版]或 [[IRC Channels|IRC 频道]],让大家帮你检查。
+
 
# 查看压缩包内容
+
==== 提交软件包的规则 ====
{{hc|$ tar tf libfoo-0.1-1.src.tar.gz|
 
libfoo/
 
libfoo/PKGBUILD
 
libfoo/libfoo.install
 
}}
 
  
提交软件包时,需遵守如下规定:
+
提交软件包时请遵循下列的规则:
  
* 检查[https://www.archlinux.org/packages/ 官方仓库],如果存在该软件包的 '''任何版本''',就'''不要'''重复提交。如果认为官方仓库的软件包已过期,请标记它。如果它有问题或者缺少功能,请反馈[https://bugs.archlinux.org/ bug 报告]。
+
* '''任何提交的 PKGBUILD 都不能编译已经位于官方二进制软件包仓库的程序。''' 如果认为官方仓库的软件包已过期,请标记它。如果它有问题或者缺少功能,请反馈[https://bugs.archlinux.org/ bug 报告]。
* 查看AUR中是否已有相同软件包。如果已经有人维护某软件包,其他用户的提交将以评论形式报告给维护人员。如果软件包无人维护或不存在,用户提交的软件包将被收录。
+
: '''唯一的例外'''是和官方打包版本相比增加或开启了新的功能。这时 pkgname 列应该不同。例如加入了边栏支持的 {{ic|screen}} 应该命名为 {{ic|screen-sidebar}},同时添加 {{ic|1=provides=('screen')}} 以避免与官方仓库中的包冲突。
* 仔细检查上传的文件。编写PKGBUILD前务必阅读[[Arch Packaging Standards (简体中文)|Arch软件打包标准]]。劣质的PKGBUILD会影响软件的正常使用,不要指望别人会因此感谢你。
+
* 查看AUR中是否已有相同软件包。如果已经有人维护某软件包,其他用户的提交将以评论形式报告给维护人员。如果软件包无人维护或不存在,用户提交的软件包将被收录,别创建重复的包.
 +
* 仔细检查上传的文件。编写PKGBUILD前务必阅读[[Arch packaging standards (简体中文)|Arch软件打包标准]]。劣质的PKGBUILD会影响软件的正常使用,不要指望别人会因为你糟糕的PKGBUILD浪费了他们的时间而收到感谢。
 
* 包含二进制文件或质量差的PKGBUILD有可能无提醒地被直接删除。
 
* 包含二进制文件或质量差的PKGBUILD有可能无提醒地被直接删除。
* 如果对自己的PKGBUILD缺乏信心,可以先把它贴到[https://mailman.archlinux.org/mailman/listinfo/ 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
 +
  IdentityFile ~/.ssh/aur
 +
  User aur}}
 +
 
 +
建议为 AUR 创建一个新的密钥(而不是用旧的),这样出问题时可以直接废除密钥。在输入密钥时可以导入多个公钥,每行一个。
 +
 
 +
==== 创建软件包 ====
 +
 +
要创建新的空本地 Git 仓库,可以用 {{ic|git clone}} 相同名称的远程仓库,如果 AUR 中还不存在软件包,将会看到下面警告:
 +
{{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.
 +
Checking connectivity... done.
 +
}}
 +
 
 +
{{Note|即使 AUR 中的软件包被删除 Git 仓库也不会删除,所以你可能会发现 clone 一个 AUR 中还不存在的软件包时不会看到这个警告。 }}
 +
 
 +
如果已经有了 git 仓库,可以远程创建 AUR git 并获取它:
 +
 
 +
$ git remote add ''remote_name'' <nowiki>git+ssh://</nowiki>aur@aur.archlinux.org/''package_name''.git
 +
$ git fetch ''remote_name''
 +
 
 +
{{ic|''remote_name''}} 是需要创建的仓库,参考 [[Git#Using remotes]]。
 +
 
 +
第一次 ''push'' 之后,AUR 上就会出现软件包。可以将源代码加入本地 Git 仓库,参考 [[#维护软件包]].
 +
 
 +
{{Warning|AUR 提交会通过 git 用户名和邮件定义作者,一旦提交很难改变。如果需要修改用户名和密码,请通过 {{ic|git config user.name [...]}} 和 {{ic|git config user.email [...]}} 修改。请一定在推送前进行检查。}}
 +
 
 +
==== 提交和更新软件包 ====
 +
 
 +
要更新软件包的方法和创建类似,注意要确保每次推送都包含顶层目录的 {{ic|PKGBUILD}} 和 [[.SRCINFO (简体中文)|.SRCINFO]]。
 +
 
 +
用 {{ic|git add}} 将它们和其它需要的文件 (例如 {{ic|.install}} 和像 {{ic|.patch}} 一类的源码文件)添加到工作区域("staging area"),用 {{ic|git commit}} 提交更改,最后用 {{ic|git push}} 上传到AUR.
 +
 
 +
例如:
 +
 
 +
$ makepkg --printsrcinfo > .SRCINFO
 +
$ git add PKGBUILD .SRCINFO
 +
$ git commit -m 'Useful commit message'
 +
$ git push origin master
 +
 
 +
{{Warning|不想以全局身份提交?记得通过{{ic|git config user.name [...]}} 和 {{ic|git config user.email [...]}} 编辑自己的本地身份! 这可能会导致很难追踪提交历史, 参阅: {{Bug|45425}}. 在提交之前复查你的更改!}}
 +
 
 +
要更新某个软件包,修改需要的文件然后运行相应的操作把更改提交到AURgit仓库:
 +
 
 +
$ mksrcinfo
 +
$ git commit -am 'Update to ''1.0.0-2'''
 +
$ git push
 +
 
 +
参阅 [[Git]] 获得更多信息.
 +
 
 +
{{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}} 选项.}}
  
 
===维护软件包===
 
===维护软件包===
  
* 要更新软件包,重新提交即可。
+
* 要更新软件包,重新提交更新过的PKGBUILD即可。
* 阅读其他用户的反馈,并改进软件包。
+
* 阅读其他用户的反馈,并试着听从建议改进软件包,这是个学习的过程!
 +
* 升级软件包后,不要在评论中加入版本更新信息,这些信息会冲淡更重要的用户评论。[[AUR helpers]] 更适合检查更新。
 
* 不要提交软件包后就放任不管!PKGBUILD的和维护升级是用户自己的责任。
 
* 不要提交软件包后就放任不管!PKGBUILD的和维护升级是用户自己的责任。
* 如果不想继续维护某个软件包,可以在AUR网站上的软件包页面放弃所有权,或者在AUR邮件列表发布信息。
+
* 发觉自己没有精力维护某个软件包?可以通过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}} 的软件包.
  
 
===其他事项===
 
===其他事项===
  
 +
* 取消维护权限和删除软件包的请求可以通过右边"Package actions" 的 "File Request" 链接执行。这会给当前的维护者和 [https://mailman.archlinux.org/mailman/listinfo/aur-requests aur-requests 邮件列表]自动发送邮件通知。[[Trusted Users]] 会接受或拒绝请求。
 
* 在aur-general邮件列表请求移除软件包或弃置他人的软件包,受信用户会作出决定。
 
* 在aur-general邮件列表请求移除软件包或弃置他人的软件包,受信用户会作出决定。
 
* 请求中需包含'''软件包名称和AUR页面链接'''。
 
* 请求中需包含'''软件包名称和AUR页面链接'''。
Line 181: Line 232:
 
** 删除原因,至少一句话 <br> '''注意:'''不要以为在软件包评论处贴出移除理由就足够了,受信用户只会阅读邮件列表上的信息。
 
** 删除原因,至少一句话 <br> '''注意:'''不要以为在软件包评论处贴出移除理由就足够了,受信用户只会阅读邮件列表上的信息。
 
** 详情说明,比如是因为修改名称而移除还是其他什么的。
 
** 详情说明,比如是因为修改名称而移除还是其他什么的。
 +
** 如果是合并请求,请注明需要合并到的软件包。
 +
 +
删除的条件比较严格。如果无法通过,弃置即可,其他用户可能会接手。
  
删除的条件比较严格。如果无法通过,弃置即可。
+
== AUR3 软件包的Git仓库 ==
  
==[community]==
+
因为AUR的后端迁移到[[Git]],从2015年8月8日起无人维护的包已从AUR中移除,可以在Github上找到AUR3软件包归档: [https://github.com/aur-archive AUR Archive]  
[community]仓库由[[Trusted Users|受信用户]]维护,包含来自AUR的流行软件包。{{ic|pacman.conf}}中默认已启用该仓库,相关文件内容如下:
 
  
{{hc
+
== AUR translation ==
|/etc/pacman.conf
+
 
|<nowiki>
+
参阅 [https://projects.archlinux.org/aurweb.git/tree/doc/i18n.txt i18n.txt] 获得关于创建和维护AUR web界面翻译的详细信息.
...
 
[community]
 
Include = /etc/pacman.d/mirrorlist
 
...
 
</nowiki>}}
 
  
[community]与AUR的最大不同是软件包以二进制包形式提供,可由[[pacman (简体中文)|pacman]]直接安装,软件包生成脚本可以通过[[Arch Build System (简体中文)|ABS]]获取。该仓库中的某些软件包还可能收录进[core]或[extra]仓库。
+
==FAQ==
  
可以通过编辑{{ic|/etc/abs.conf}}的{{ic|REPOS}}数组打开或关闭[[Arch Build System (简体中文)|ABS]]对[community]仓库的支持。
+
=== AUR是什么? ===
  
==Git版本库==
+
AUR 是 Arch User Repository (Arch用户软件仓库)的缩写,是Arch用户上传并分享软件、共享库等等的[[PKGBUILD (简体中文)|PKGBUILD]]的地方。用户可以为喜欢的软件包投票,票数多的将有机会进入[community]仓库并以二进制包的形式提供。
Thomas Dziedzic维护着AUR的Git版本库,每日至少更新一次,其中可以找到AUR软件包的历史版本。克隆该版本库(有上百MB):
 
  
$ git clone git://pkgbuild.com/aur-mirror.git
+
=== 什么样的软件包能被放到 AUR? ===
  
另见:[http://pkgbuild.com/git/aur-mirror.git/ Git库网页],[http://pkgbuild.com/~td123/readme Readme],[https://bbs.archlinux.org/viewtopic.php?id=113099 论坛相关帖子]。
+
AUR中的软件包仅是编译脚本,只要内容符合软件版权,满足上面提到的软件包要求,就能够放入。有时候,下载的链接具有 "you may not link" 条款,这时就不能提供下载链接,而是要用程序名称代替,用户需要用其它方式提前获取受限制的源代码。有疑问请及时询问。
  
==FAQ==
+
=== 如何给 AUR 中的软件包投票? ===
 +
注册[https://aur.archlinux.org/ AUR 网站]账户,在浏览软件包时会看到投票选项。登录后,还可以通过 {{AUR|aurvote}} 投票.
  
{{FAQ
+
=== 受信用户(或TU)是什么? ===
|question=AUR是什么?
 
|answer=AUR 是 Arch User Repository (Arch用户软件仓库)的缩写,是Arch用户上传并分享软件、共享库等等的[[PKGBUILD (简体中文)|PKGBUILD]]的地方。用户可以为喜欢的软件包投票,票数多的将有机会进入[community]仓库并以二进制包的形式提供。}}
 
  
{{FAQ
+
[[AUR Trusted User Guidelines|受信用户]](TU,Trusted User)是选拔出的监督AUR和[community]仓库的用户。他们维护着[community]的热门软件,并维持AUR运转。
|question=什么样的软件包能被放到 AUR?
 
|answer=AUR中的软件包仅是编译脚本,只要内容符合软件版权,满足上面提到的软件包要求,就能够放入。有时候,下载的链接具有 "you may not link" 条款,这时就不能提供下载链接,而是要用程序名称代替,用户需要用其它方式提前获取受限制的源代码。有疑问请及时询问。}}
 
  
{{FAQ
+
=== Arch User Repository和[community]仓库有何区别? ===
|question=受信用户(或TU)是什么?
 
|answer=[[AUR Trusted User Guidelines|受信用户]](TU,Trusted User)是选拔出的监督AUR和[community]仓库的用户。他们维护着[community]的热门软件,并维持AUR运转。}}
 
  
{{FAQ
+
Arch User Repository是储存所有用户提交的PKGBUILD的地方,软件包需通过[[makepkg (简体中文)|makepkg]]手动生成。吸引足够多的 community interest 及 TU 支持的 PKGBUILD 会被收录进[community]仓库(由TU维护),以二进制软件包形式提供,可以由[[pacman (简体中文)|pacman]]安装。
|question= Arch User Repository和[community]仓库有何区别?
 
|answer= Arch User Repository是储存所有用户提交的PKGBUILD的地方,软件包需通过[[makepkg (简体中文)|makepkg]]手动生成。吸引足够多的 community interest 及 TU 支持的 PKGBUILD 会被收录进[community]仓库(由TU维护),以二进制软件包形式提供,可以由[[pacman (简体中文)|pacman]]安装。}}
 
  
{{FAQ
+
=== AUR的某个软件包过时了,该怎么办? ===
|question=一个AUR软件包进入[community]需要多少投票?
 
|answer=至少需要10票。但如果受信用户偏爱某个软件包,那它就很可能被收录。}}
 
  
{{FAQ
+
点击软件包页面的“Flag Out-of-date”(中文版为“标记为过期”)即可。如果长期未更新,最好email通知维护人员。如果还是没有得到答复,如果这些软件包标记为过期的时间超过 3 个月,长期未更新,可以在aur-general要求弃置软件包,邮件中请包含过期的信息。
|question=如何编写PKGBUILD?
 
|answer=建议阅读[[Creating Packages (简体中文)|创建软件包]]一文。先检查AUR看看有没有相同软件包,不要再造轮子。}}
 
  
{{FAQ
+
同时,你可以自行更新 PKGBUILD - 通常软件更新不需要修改编译或打包方式,更新 {{ic|pkgver}} {{ic|source}} 数组就足够了。
|question=某个软件包已经在[community]仓库,但我无法使用{{ic|pacman -S}}安装。
 
|answer=可能因为你没有启用[community]。在{{ic|/etc/pacman.conf}}找到相关内容,去掉注释即可。
 
如果[community]确实开启了,请先执行{{ic|pacman -Sy}}同步软件包数据。}}
 
  
{{FAQ
+
{{Note|[[VCS package guidelines|VCS 软件包]] 在 pkgver 变化时并不会过时,所以不要标记它们,AUR 维护者不应该仅为了 pkgver 进行提交。}}
|question=AUR的某个软件包过时了,该怎么办?
 
|answer=点击软件包页面的“Flag Out-of-date”(中文版为“标记为过期”)即可。如果长期未更新,最好email通知维护人员。如果还是没有得到答复,如果这些软件包标记为过期的时间超过 3 个月,长期未更新,可以在aur-general要求弃置软件包,邮件中请包含过期的信息。}}
 
  
{{FAQ
+
=== {{ic|makepkg}}无法构建某个软件包怎么办? ===
|question=我想提交一个PKGBUILD,希望别人帮忙检查错误。
 
|answer=你可以在aur-general贴出你的PKGBUILD并征求他人意见,或到irc.freenode.net上的[[ArchChannel|IRC频道]]#archlinux寻求帮助。也可以自己使用[[namcap (简体中文)|namcap]]检查PKGBUILD和软件包。}}
 
  
{{FAQ
+
你很可能忘了点啥。
|question={{ic|makepkg}}无法构建软件包,怎么办?
 
|answer=你很可能忘了点啥。
 
  
# 执行{{ic|makepkg}}之前先使用{{ic|pacman -Syyu}}更新系统,系统软件过时可能导致软件包构建失败。
+
# [[Pacman#Upgrading_packages|更新系统]],系统软件过时可能导致软件包构建失败。
 
# 确保安装了“base”和“base-devel”软件包组。
 
# 确保安装了“base”和“base-devel”软件包组。
 
# 在执行{{ic|makepkg}}时,使用{{ic|-s}}选项检查依赖关系。
 
# 在执行{{ic|makepkg}}时,使用{{ic|-s}}选项检查依赖关系。
  
先阅读 PKGBUILD 和 AUR 页面的评论。可能导致编译错误的还有不正确的CFLAGS、LDFLAGS和MAKEFLAGS设置。也有可能是PKGBUILD写错了,如果确实如此,请通知包维护人员。例如在 AUR 页面留言。}}
+
先阅读 PKGBUILD 和 AUR 页面的评论。可能导致编译错误的还有不正确的CFLAGS、LDFLAGS和MAKEFLAGS设置。也有可能是PKGBUILD写错了,如果确实如此,请通知包维护人员。例如在 AUR 页面留言。
 +
 
 +
=== 如何编写PKGBUILD? ===
 +
 
 +
建议阅读[[Creating packages (简体中文)|创建软件包]]一文。先检查AUR看看有没有相同软件包,不要再造轮子。
 +
 
 +
=== 我想提交一个PKGBUILD,希望别人帮忙检查错误。 ===
 +
 
 +
你可以在aur-general贴出你的PKGBUILD并征求他人意见,或到irc.freenode.net上的[[ArchChannel|IRC频道]]#archlinux-aur寻求帮助。也可以自己使用[[namcap (简体中文)|namcap]]检查PKGBUILD和软件包。
 +
 
 +
=== PKGBUILD(AUR软件包)怎样才能被收录到community软件仓库? ===
 +
 
 +
一般至少需要10票,并且要有TU(受信用户)愿意维护,否则即便有上千票也不会收录。当然,如果某个受信用户愿意维护一个软件包的话,投票数往往不是决定因素。
 +
 
 +
一些流行的软件包未被收录的原因一般是:
 +
 
 +
* Arch Linux的软件仓库中已经有了别的版本。
 +
* 那个软件包的功能只和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]].
 +
 
 +
=== 如何加速编译? ===
 +
 
 +
如果经常用gcc编译同样的代码,[[ccache (简体中文)|ccache]]对你可能有很大帮助。
 +
 
 +
=== foo 和 foo-git 的区别是什么? ===
 +
 
 +
很多AUR软件包都包含稳定版本和开发版本.开发版本一般都会有像 {{ic|-cvs}}, {{ic|-svn}}, {{ic|-git}}, {{ic|-hg}}, {{ic|-bzr}} 或者 {{ic|-darcs}}一样的后缀.
 +
开发版本并不是为日常使用而设计的,不过可能包含新功能或者bug修复.因为要从上游获取最新的源代码,所以当运行{{ic|makepkg}}时版本号可能会发生变化.而且会跳过对源代码的完整性效验.
 +
 
 +
同时请参阅 [[Enhancing Arch Linux Stability#Avoid development packages]]{{Broken section link}}.
 +
 
 +
=== 为啥某个软件包从AUR消失了? ===
 +
 
 +
软件包可能因为不满足[[#提交软件包的规则]]或是其它原因而被删除,你可以在
 +
[https://lists.archlinux.org/pipermail/aur-requests/ aur-requests archives] 找到对应删除记录的归档.
 +
 
 +
如果某个软件包在AUR3时期存在,它可能没 [https://lists.archlinux.org/pipermail/aur-general/2015-August/031322.html 迁移到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 消失的软件包 ===
  
{{FAQ
+
通过网络访问检查::
|question=如何加速编译?
+
$ comm -23 <(pacman -Qqm | sort) <(curl https://aur.archlinux.org/packages.gz | gzip -cd | sort)
|answer=如果经常用gcc编译同样的代码,[[ccache (简体中文)|ccache]]对你可能有很大帮助。}}
 
  
{{FAQ
+
=== 想知道AUR 里都有啥 ?===
|question=如何使用AUR中的软件?
+
|answer=参见:[[#安装软件包]]。}}
+
* https://aur.archlinux.org/packages.gz
 +
* 使用来自  {{aur|python3-aur}} 的 <code>aurpkglist</code> 。
  
{{FAQ
+
== 另请参阅 ==
|question=除了AUR网站,还有什么上传软件包到AUR的方法?
+
* [https://aur.archlinux.org AUR Web ]
|answer=可以使用{{pkg|burp}}, {{AUR|aurploader}} 或 {{AUR|aurup}} &mdash;都是命令行工具。}}
+
* [https://lists.archlinux.org/listinfo/aur-general AUR 邮件列表]
 +
* [[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 里都有啥 ?

另请参阅