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

From ArchWiki
Jump to navigation Jump to search
m (→‎维护软件包: 纠正错别字)
(Update Chinese translation)
 
(46 intermediate revisions by 12 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 5: Line 5:
 
[[cs:Arch User Repository]]
 
[[cs:Arch User Repository]]
 
[[da:Arch User Repository]]
 
[[da:Arch User Repository]]
 +
[[de:Arch User Repository]]
 
[[el:Arch User Repository]]
 
[[el:Arch User Repository]]
 
[[en:Arch User Repository]]
 
[[en:Arch User Repository]]
Line 16: Line 17:
 
[[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 (简体中文)}}
{{Article summary start|摘要}}
+
{{Related|makepkg (简体中文)}}
{{Article summary text|Arch用户软件仓库(AUR)是用户提交的[[PKGBUILD (简体中文)|PKGBUILD]]集合,以补充[[官方仓库]]没有包含的软件。本文将讲解如何利用AUR构建不受官方支持的软件包。}}
+
{{Related|pacman (简体中文)}}
{{Article summary heading|概览}}
+
{{Related|PKGBUILD (简体中文)}}
{{Article summary text|{{Package management overview (简体中文)}}}}
+
{{Related|.SRCINFO (简体中文)}}
{{Article summary heading|相关内容}}
+
{{Related|Aurweb RPC interface}}
{{Article summary wiki|AUR Helpers (简体中文)}}
+
{{Related|AUR Trusted User Guidelines (简体中文)}}
{{Article summary wiki|AurJson}}
+
{{Related|Official repositories (简体中文)}}
{{Article summary wiki|AUR Trusted User Guidelines (简体中文)}}
+
{{Related|Arch Build System (简体中文)}}
{{Article summary heading|相关资源}}
+
{{Related|Creating packages (简体中文)}}
{{Article summary link|AUR网站|https://aur.archlinux.org}}
+
{{Related|AUR helpers (简体中文)}}
{{Article summary link|AUR邮件列表|https://www.archlinux.org/mailman/listinfo/aur-general}}
+
{{Related articles end}}
{{Article summary end}}
+
{{TranslationStatus (简体中文)|Arch_User_Repository|2019-02-03|565667}}
{{TranslationStatus (简体中文)|Arch_User_Repository|2013-04-09|253260}}
 
Arch用户软件仓库(Arch User Repository,AUR)是为用户而建、由用户主导的Arch软件仓库。AUR中的软件包以软件包生成脚本([[PKGBUILD (简体中文)|PKGBUILD]])的形式提供,用户自己通过[[makepkg (简体中文)|makepkg]]生成包,再由[[pacman (简体中文)|pacman]]安装。创建AUR的初衷是方便用户维护和分享新软件包,并由官方定期从中挑选软件包进入[[#.5Bcommunity.5D|[community]]]仓库。本文介绍用户访问和使用AUR的方法。
 
  
许多官方仓库软件包都来自AUR。通过AUR,大家相互分享新的软件包生成脚本([[PKGBUILD (简体中文)|PKGBUILD]]和其他相关文件)。用户还可以为软件包投票。如果一个软件包投票足够多、没有协议问题、打包质量好,那么它就很有希望被收录进官方[community]仓库(以后就可以直接通过[[pacman]] [[ABS|abs]] 安装了)。
+
[https://aur.archlinux.org Arch 用户软件仓库](Arch User Repository,AUR)是为用户而建、由用户主导的 Arch 软件仓库。AUR 中的软件包以软件包生成脚本([[PKGBUILD (简体中文)|PKGBUILD]])的形式提供,用户自己通过 [[makepkg (简体中文)|makepkg]] 生成包,再由 [[pacman (简体中文)|pacman]] 安装。创建 AUR 的初衷是方便用户维护和分享新软件包,并由官方定期从中挑选软件包进入 [[community repository|community]] 仓库。本文介绍用户访问和使用 AUR 的方法。
  
==导读==
+
许多官方仓库软件包都来自 AUR。通过 AUR,大家相互分享新的软件包生成脚本([[PKGBUILD (简体中文)|PKGBUILD]] 和其他相关文件)。用户还可以为软件包投票。如果一个软件包投票足够多、没有协议问题、打包质量好,那么它就很有希望被收录进官方 ''community'' 仓库(以后就可以直接通过 [[pacman]] 或 [[ABS|abs]] 安装了)。
  
用户可以从[https://aur.archlinux.org AUR网站]下载[[PKGBUILD (简体中文)|PKGBUILD]]。[[makepkg (简体中文)|makepkg]]使用该文件生成软件包,最后由[[pacman (简体中文)|pacman]]安装。
+
{{警告|AUR 中的软件包是由其他用户编写的,使用这些文件的风险由您自行承担。}}
  
* 确保 {{Grp|base-devel}} 软件包组 已被安装 ({{ic|pacman -S base-devel}})。
+
== 入门 ==
* 阅读下面 AUR 的更深入的介绍,了解如何安装软件包。
 
* 访问[https://aur.archlinux.org AUR网站]查看软件包更新和其他事件。网站还提供了最新软件包的列表。
 
* 浏览[[#FAQ]]获取常见问题的答案。
 
* 在{{ic|/etc/makepkg.conf}}中,针对处理器使用合适的CFLAGS、CXXFLAGS编译参数,以优化软件包编译。通过设置MAKEFLAGS变量,可以启用多线程编译,使用多核心处理器的话,将大大减少编译时间。详情参见[[makepkg (简体中文)|makepkg]]。
 
  
==历史==
+
用户可以从 [https://aur.archlinux.org AUR 网站]下载 [[PKGBUILD (简体中文)|PKGBUILD]]。[[makepkg (简体中文)|makepkg]] 使用该文件生成软件包,最后由 [[pacman (简体中文)|pacman]] 安装。
  
本节所述内容都是遥远的历史,现在已经见不到这些古董了,AUR取代了它们。
+
* 确保 {{Grp|base-devel}} 软件包组已被完全安装 ({{ic|pacman -S  --needed base-devel}})。
 +
* 浏览 [[#FAQ]] 获取常见问题的答案。
 +
* 在 {{ic|/etc/makepkg.conf}} 中,针对处理器使用合适的 CFLAGS、CXXFLAGS 编译参数,以优化软件包编译。通过设置 MAKEFLAGS 变量,可以启用多线程编译,使用多核心处理器的话,将大大减少编译时间。详情参见 [[makepkg (简体中文)|makepkg]]。
 +
* 也可以通过 SSH 连接到 AUR: 运行 {{ic|ssh aur@aur.archlinux.org help}} 获得可用指令的列表。
 +
 
 +
== 历史 ==
  
 
最初,人们上传[[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 的发布方式。
 +
 
 +
当时现存的所有软件包都会被删除,除非维护者将他们手动迁移到新的架构上。
 +
 
 +
=== AUR3 软件包的 Git 仓库 ===
 +
 
 +
Github 上的 [https://github.com/aur-archive AUR Archive] 储存了迁移过程中的所有 AUR3 软件包仓库。
 +
除此之外,[https://github.com/felixonmars/aur3-mirror/ aur3-mirror] 也提供了同样的内容。
 +
 
 +
== 安装软件包 ==
  
==搜索==
+
从 AUR 安装软件包并不困难。基本步骤如下:
 +
# 从 AUR 下载包含 [[PKGBUILD (简体中文)|PKGBUILD]] 和其他安装文件(比如 [[systemd]] 和补丁,通常不是实际代码)的 tar 包。
 +
# 用命令 {{ic|tar -xvf packagename.tar.gz}} 解包到一个仅用于编译 AUR 的空闲文件夹。
 +
# 验证 [[PKGBUILD (简体中文)|PKGBUILD]] 和其它相关文件,确保其中不含有恶意代码。
 +
# 在上述文件夹中运行 {{ic|makepkg -si}}。命令会自动调用 [[pacman (简体中文)|pacman]] 解决依赖关系,然后下载代码、编译并打包。然后安装软件包。
  
AUR提供了方便人们访问的[https://aur.archlinux.org/ 网页接口],以及另一个方便程序访问的[https://aur.archlinux.org/rpc.php RPC接口]。网页上有一个搜索框,可以用它搜索软件包名称或描述。
+
{{注意|AUR是不受支持的,所以更新这些软件包是''您的责任''而不是 pacman 的。如果官方仓库中的软件包更新了,您可能需要重建相关的 AUR 软件包。}}
  
软件包检索使用MySQL的LIKE比较字符串。这使得搜索规则更加灵活(例如,搜索“tool%like%grep”而非“tool like grep”)。如果需要搜索带有“%”的内容,用斜杠转义为“\%”即可。
+
=== 准备 ===
  
==安装软件包==
+
首先确定完整地安装了 {{grp|base-devel}} 软件包组,其中包括 {{Pkg|make}} 和其他编译工具:
  
从AUR(即[unsupported]仓库)安装软件包并不很困难。步骤如下:
+
{{注意|AUR 中的软件包都会假定您已经安装了 {{grp|base-devel}} 软件包组(例如它们不会将这个组中的软件包列入依赖列表)。}}
# 从AUR下载包含[[PKGBUILD]]和其他安装文件(比如 systemd-units 和补丁,通常不是实际代码)的tar包。
 
# 用命令 {{ic|tar -xzf foo.tar.gz}} 解包到一个仅用于编译AUR的空闲文件夹。
 
# 在上述文件夹中运行[[makepkg (简体中文)|makepkg]]({{ic|makepkg -s}} 会自动调用[[pacman (简体中文)|pacman]]解决依赖关系)。这一步会下载代码、编译并打包。
 
# 查看 {{ic|src/}} 文件夹中是否存在 README 文件,阅读 README 可以获得和编译相关的信息。
 
# 使用[[pacman (简体中文)|pacman]]安装上一步生成的软件包:
 
: {{bc|# pacman -U /path/to/pkg.tar.xz}}
 
  
[[AUR Helpers (简体中文)|AUR辅助工具]]提供了更为简单的方法,这些工具可以自动搜索、获取、编译、安装AUR中的软件包。在AUR中可以找到这些工具。
+
然后,选择一个合适的编译目录。这个目录用作生成软件包时的工作目录,任何空白目录都可以。下面的示例中使用 {{ic|~/builds}} 作为编译目录。
  
{{注意|Arch官方永远不会提供安装AUR(和其他不受支持)软件包的便利工具,'''AUR用户应当对软件编译有一定了解'''。}}
+
=== 获取软件包构建所需文件 ===
  
下面以假想的软件包“foo”为例子,讲解安装过程。
+
通过搜索或任何方式,在 AUR 中找到要安装的软件包。阅读介绍,检查软件包更新日期,看看别人的评论。
  
===基础环境===
+
确认无误后,通过下面三种方法可以获取到所需的编译文件:
  
首先要安装基本的开发工具。软件包组{{grp|base-devel}} 是必须的,其中包括{{Pkg|make}}和其他编译工具:
+
* 在“Package Details”中,找到“Git Clone URL”,然后下载 [[Git]] 仓库。这也是推荐的方法。
  
  # pacman -S base-devel
+
  $ git clone <nowiki>https://aur.archlinux.org/</nowiki>''package_name''.git
  
然后,选择一个合适的编译目录。这个目录用作生成软件包时的工作目录,任何空白目录都可以。例如使用:
+
:这样做的其中一个好处是您以后可以通过 {{ic|git pull}} 的形式来更新。
  
~/builds
+
* 从软件包信息页面点击“Download snapshot”(中文页面翻译做“下载快照”),保存压缩包到编译目录。
  
如果用ABS(Arch Build System,[[Arch Build System (简体中文)|Arch软件包构建系统]]),则通常使用:
+
$ tar -xvf ''package_name''.tar.gz
  
/var/abs/local
+
* 从终端下载:
  
更多有关ABS的信息,参见[[Arch Build System (简体中文)|此文]]。下面的示例中使用{{ic|~/builds}}作为编译目录。
+
$ curl -L -O <nowiki>https://aur.archlinux.org/cgit/aur.git/snapshot/</nowiki>''package_name''.tar.gz
  
===获取软件包构建所需文件===
+
=== 构建和安装软件包 ===
  
通过搜索或任何方式,在AUR中找到要安装的软件包。阅读介绍,检查软件包更新日期,看看别人的评论。
+
切换到含有软件包的 [[PKGBUILD (简体中文)|PKGBUILD]] 文件的目录:
  
确认无误后,下载需要的文件。从软件包信息页面点击“Tarball”(中文页面翻译做“压缩包”),保存压缩包到编译目录。以本文的foo软件包为例,压缩包名为“foo.tar.gz”(标准格式是“<pkgname>.tar.gz”)。
+
$ cd ''package_name''
  
===构建软件包===
+
{{警告|'''务必认真检查所有文件!''' {{ic|cd}} 到新建立的目录,然后仔细检查每个文件确保没有恶意或危险代码。{{ic|PKGBUILD}} 和所有 {{ic|.install}} 文件都是 shell 脚本文件,包含若干函数,由 {{ic|makepkg}} 调用并执行。这些函数可以调用'''任何'''命令,可能包含恶意或危险代码。{{ic|makepkg}} 通过 fakeroot(意为“假root”)执行这些命令(所以不要以 root 用户运行makepkg),能在一定程度防止恶意代码损坏系统,但还是小心为好。如有疑问,可以到论坛或邮件列表询问。}}
切换到编译目录,解压缩构建文件:
 
  
$ cd ~/builds
+
查看所有提供的文件中的内容。例如使用 ''less'' 查看 {{ic|PKGBUILD}}:
$ tar -xvzf foo.tar.gz
 
  
这时应该出现了一个新的名为“foo”的目录。进入目录并检查脚本文件:
+
$ less PKGBUILD
  
{{警告|'''务必认真检查所有文件!''' {{ic|PKGBUILD}}和所有{{ic|.install}}文件都是shell脚本文件,包含若干函数,由{{ic|makepkg}}调用并执行。这些函数可以调用'''任何'''命令,可能包含恶意或危险代码。除非使用root执行(不要这样做),否则{{ic|makepkg}}将通过fakeroot(意为“假root”)执行这些命令,能在一定程度防止恶意代码损坏系统,但还是小心为好。如有疑问,可以到论坛或邮件列表询问。}}
+
{{提示|如果您正在更新软件包,您可能需要查看最后一次提交以来的变动。
 +
* 您可以使用 {{ic|git show}} 来查看最后一次提交之后的变动。
 +
* 您也可以使用 {{ic|git difftool @~..@ vimdiff}}。使用 ''vimdiff'' 的好处是您可以查看到带有文件变动指示的所有文件内容。}}
  
$ cd foo
+
接下来开始生成软件包。检查文件后,执行 [[makepkg (简体中文)|makepkg]] (以普通用户权限):
$ nano PKGBUILD
 
$ nano foo.install
 
  
接下来开始生成软件包。检查文件后,执行[[makepkg (简体中文)|makepkg]](以普通用户权限):
+
$ makepkg -si
  
$ makepkg -s
+
* {{ic|-s}}/{{ic|--syncdeps}} 表示自动执行 [[pacman (简体中文)|pacman]] 安装依赖关系。如果软件包依赖其他的 AUR 软件包,您需要先手动安装依赖。
 +
* {{ic|-i}}/{{ic|--install}} 会在顺利构建软件包之后安装软件包。除此之外,您还可以使用 {{ic|pacman -U ''package''.pkg.tar.xz}} 来手动安装软件包。
  
{{ic|-s}}表示自动调用[[sudo (简体中文)|sudo]]执行[[pacman (简体中文)|pacman]]解决依赖关系。如果没有安装[[sudo (简体中文)|sudo]],就必须自己安装依赖软件包。
+
其他可能有用的选项:
  
===安装软件包===
+
* {{ic|-r}}/{{ic|--rmdeps}} 会移除只在构建时需要的软件包,不过重新编译时就要再安装了。
接下来要使用[[pacman (简体中文)|pacman]]安装软件包。软件包构建和打包成功后,会生成一个压缩包,文件名格式如下:
+
* {{ic|-c}}/{{ic|--clean}} 会在构建结束时删除临时文件。如果需要调试构建过程这会十分有用。
  
<软件名称>-<软件版本号>-<软件包修订版本>-<平台>.pkg.tar.xz
+
{{注意|本文所涵盖的内容十分有限。如果想要对软件包构建有更深了解,推荐阅读 [[makepkg (简体中文)|makepkg]] 和 [[Arch Build System (简体中文)|ABS]]。}}
  
安装软件包的命令如下:
+
== 反馈 ==
  
# pacman -U foo-0.1-1-i686.pkg.tar.xz 
+
[https://aur.archlinux.org AUR 网站]的评论机制为用户提供了一种对 PKGBUILD 提建议的渠道。注意,最好不要在评论处贴自己的代码,因为代码很占地方,还很容易被新的评论刷掉。最好直接 email 通知维护人员,或者用 [[pastebin]] 贴代码。
  
这些被手动安装的软件包被成为外部软件包 - 不是来自 pacman 知道的软件仓库。要显示所有外部软件包:
+
'''所有的''' Arch 用户都可以通过 AUR Web 界面为软件包投票。大多数软件包都有机会被 TU 收录进 [[community repository|community]] 仓库。投票数是 community 仓库软件包选拔的重要依据之一。
$ pacman -Qm
 
  
{{注意|本文所涵盖的内容十分有限。如果想要对软件包构建有更深了解,推荐阅读[[makepkg (简体中文)|makepkg]]和[[Arch Build System (简体中文)|ABS]]。}}
+
== 分享和维护软件包 ==
  
==反馈==
+
AUR不包含任何编译过的二进制包,用户上传 [[PKGBUILD (简体中文)|PKGBUILD]],供其他用户下载使用。所有软件包都是非官方的,使用风险自担。
[https://aur.archlinux.org AUR网站]的评论机制为用户提供了一种对PKGBUILD提建议的渠道。注意,最好不要在评论处贴自己的代码,因为代码很占地方,还很容易被新的评论刷掉。最好直接email通知维护人员,或者用[[pastebin Clients|pastebin]]贴代码。
 
  
在AUR网站上,用户可以为自己喜欢的AUR'''投票'''。投票数是[community]仓库软件包选拔的重要依据。
+
=== 提交软件包 ===
  
==分享和维护软件包==
+
{{警告|在提交前请先熟悉 [[Arch packaging standards]] 及所有的"相关文章"。违反相应规则的软件包可能不经警告被直接删除。}}
用户是AUR的一切,没有用户的贡献和支持就没有今天的AUR。本节介绍如何通过AUR分享自己的软件包。
 
  
AUR不包含任何编译过的二进制包,用户上传[[PKGBUILD (简体中文)|PKGBUILD]],供其他用户下载使用。所有软件包都是非官方的,使用风险自担。
+
如果对自己的 PKGBUILD 缺乏信心,可以先把它贴到[https://mailman.archlinux.org/mailman/listinfo/aur-general AUR 邮件列表],[https://bbs.archlinux.org/viewforum.php?id=4 论坛 AUR 版]或 [[IRC Channels|IRC 频道]],让大家帮您检查。
  
===提交软件包===
+
==== 提交软件包的规则 ====
在AUR网站登录后,点击上方的Submit(中文版为“提交”)进入[https://aur.archlinux.org/pkgsubmit.php 上传软件包页面]。用户须提交一个名为{{ic|.tar.gz}}的压缩包,其中应包含一个存放软件包生成所需文件的目录,目录中有一个PKGBUILD、零到多个{{ic|.install}}文件、代码补丁文件等等。如果安装了[[Arch Build System (简体中文)|ABS]],可以在{{ic|/var/abs}}查看这样的文件夹的范例。
 
  
在{{ic|PKGBUILD}}所在目录执行以下命令创建上述压缩包:
+
提交软件包时请遵循下列的规则:
$ makepkg --source
 
  
如果要上传一个名为''libfoo''的软件包,上面生成的压缩包大致如下:
+
* 仔细检查上传的文件。编写PKGBUILD前务必阅读 [[Arch packaging standards (简体中文)|Arch软件打包标准]]。劣质的 PKGBUILD 会影响软件的正常使用,不要指望别人会因为您糟糕的 PKGBUILD 浪费了他们的时间而收到感谢。
 +
* 任何提交的 PKGBUILD 都不能编译'''已经'''位于'''官方'''二进制软件包'''仓库'''的程序。如果认为官方仓库的软件包已过期,请标记它。如果它有问题或者缺少功能,请反馈 [https://bugs.archlinux.org/ bug 报告]。
 +
: '''唯一的例外'''是和官方打包版本相比增加或开启了'''新的功能'''或者使用了不同的'''补丁'''。这时需要修改 pkgname 来表示新增的功能。例如加入了边栏支持的 {{ic|screen}} 应该命名为 {{ic|screen-sidebar}}。此外还需要同时添加 {{ic|1=provides=('screen')}} 以避免与官方仓库中的包冲突。
 +
* '''检查 AUR''' 中是否'''已有'''相同软件包。如果已经有人维护某软件包,可以以评论的形式将变化报告给维护人员。如果软件包无人维护或不存在,用户提交的软件包将被认领。别创建重复的包。
 +
* 确保您的软件包'''有人需要''',有人会用这个软件包吗?它非常特别吗?如果有一些人觉得它有用,就提交它。
 +
:AUR 和官方软件仓库中计划放置通用软件和软件相关的内容,包括:可执行文件、配置文件、软件的在线/离线文档和软件直接使用的媒体数据。
 +
* 不要在 AUR PKGBUILD 中使用 {{ic|replaces}},除非这个软件包将要被重命名(例如当 ''Ethereal'' 变成 ''Wireshark'' 时)。如果这个软件包是已经存在的软件包的另一版本,使用 {{ic|conflicts}} (或者如果这个软件包被其他软件需要时,使用 {{ic|provides}})。两者的主要区别是:在 pacman 同步(-Sy)之后,如果遇到与 {{ic|replaces}} 匹配并已经安装的软件包时,pacman 会立刻想去替换它。而 {{ic|conflicts}} 则在安装软件包时进行替换。
 +
* 如果源代码是可取得的,请'''避免'''提交'''二进制文件'''。AUR不应当包含 {{ic|makepkg}} 创建的二进制包,也不应当包含文件列表。
 +
* 请在 {{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|aur.archlinux.org}} 指定私钥的位置,例如:
 +
 
 +
{{hc|~/.ssh/config|
 +
Host aur.archlinux.org
 +
  IdentityFile ~/.ssh/aur
 +
  User aur}}
 +
 
 +
建议为 AUR 创建一个新的密钥(而不是用旧的),这样出问题时可以直接废除密钥:
 +
 
 +
$ ssh-keygen -f ~/.ssh/aur
 +
 
 +
{{提示|在输入公钥时可以通过换行的方式设置添加多个公钥。}}
 +
 
 +
==== 创建软件包仓库 ====
 +
 
 +
如果您正在[[Creating_packages|创建新的软件包]],请通过克隆所需的 [[PKGBUILD#pkgbase|pkgbase]] 的方式建立一个远程 AUR 仓库和本地 Git 仓库。如果软件包还不存在,则会出现以下预料之中的警告:
 +
 
 +
{{hc|$ git clone <nowiki>ssh://</nowiki>aur@aur.archlinux.org/''pkgbase''.git|
 +
Cloning into &apos;''pkgbase''&apos;...
 +
warning: You appear to have cloned an empty repository.
 +
Checking connectivity... done.}}
 +
 
 +
{{注意|即使 AUR 中的软件包被删除 Git 仓库也不会删除,所以您可能会发现 clone 一个 AUR 中还不存在的软件包时不会看到这个警告。 }}
 +
 
 +
如果您已经有一个软件包了,如果它不是 Git 仓库的话,[[Git#Getting_a_Git_repository|初始化]]并添加远程 AUR 地址:
 
   
 
   
  # 查看压缩包内容
+
  $ git remote add ''label'' <nowiki>ssh://</nowiki>aur@aur.archlinux.org/''pkgbase''.git
{{hc|$ tar tf libfoo-0.1-1.src.tar.gz|
+
 
libfoo/
+
然后从远程[[Git#Using remotes|获取]]文件并初始化。
libfoo/PKGBUILD
+
 
libfoo/libfoo.install
+
{{提示|使用[https://git-scm.com/docs/git-pull#git-pull---rebasefalsetruemergespreserveinteractive 推送和变基]来解决 {{ic|''pkgbase''}} 匹配到已删除软件包的冲突问题。}}
}}
+
 
 +
==== 提交和更新软件包 ====
 +
 
 +
{{警告|不想以全局身份提交?记得通过 {{ic|git config user.name [...]}} 和 {{ic|git config user.email [...]}} 编辑自己的本地身份!}}
 +
 
 +
当释出新版本的软件时,更新 [[PKGBUILD#pkgver|pkgver]] 或者 [[PKGBUILD#pkgrel|pkgrel]] 变量来提示所有的用户更新。如果仅仅是对 [[PKGBUILD (简体中文)|PKGBUILD]] 的小修改(例如修正笔误),请不要更新这些变量。
 +
 
 +
无论何时 {{ic|PKGBUILD}} 的元数据发生变动(例如更新了 {{ic|pkgver()}}),都需要重新生成 [[.SRCINFO (简体中文)|.SRCINFO]] 。否则AUR不会显示更新后的版本号。
  
提交软件包时,需遵守如下规定:
+
要上传或者更新一个软件包,''至少''要[[Git#Staging_changes|添加]] {{ic|PKGBUILD}} 和 {{ic|.SRCINFO}} 和其他所有新增的或者修改过的辅助文件(例如 [[PKGBUILD#install|''.install'']] 文件或者如[[Patching_packages|补丁]]之类的[[PKGBUILD#source|本地源码文件]]),[[Git#Committing changes|提交]],最后[[Git#Push_to_a_repository|推送]]这些变动到AUR上。
  
* 检查[https://www.archlinux.org/packages/ 官方仓库],如果存在该软件包的 '''任何版本''',就'''不要'''重复提交。如果认为官方仓库的软件包已过期,请标记它。如果它有问题或者缺少功能,请反馈[https://bugs.archlinux.org/ bug 报告]。
+
例如:
* 查看AUR中是否已有相同软件包。如果已经有人维护某软件包,其他用户的提交将以评论形式报告给维护人员。如果软件包无人维护或不存在,用户提交的软件包将被收录。
+
 
* 仔细检查上传的文件。编写PKGBUILD前务必阅读[[Arch Packaging Standards (简体中文)|Arch软件打包标准]]。劣质的PKGBUILD会影响软件的正常使用,不要指望别人会因此感谢你。
+
$ makepkg --printsrcinfo > .SRCINFO
* 包含二进制文件或质量差的PKGBUILD有可能无提醒地被直接删除。
+
$ git add PKGBUILD .SRCINFO
* 如果对自己的PKGBUILD缺乏信心,可以先把它贴到[https://mailman.archlinux.org/mailman/listinfo/ AUR邮件列表][https://bbs.archlinux.org/viewforum.php?id=4 论坛AUR版],让大家帮你检查。
+
$ git commit -m "''useful commit message''"
* 确保你的软件包有人需要,不要上传没用的软件包。
+
$ git push
* AUR 官方软件仓库中放置通用软件和软件相关内容,包括:可执行文件、配置文件、软件的在线文档和软件直接使用的数据。
+
 
* 上传软件包之前务必掌握打包过程,自己打几个包练练手。
+
{{注意|如果您忘记在首次提交中包含 {{ic|.SRCINFO}},您可以使用 [https://git-scm.com/docs/git-rebase#git-rebase---root rebasing with --root] 或是 [https://git-scm.com/docs/git-filter-branch#git-filter-branch---tree-filterltcommandgt filtering the tree] 使得 AUR 接受您的第一次推送}}
* 如果上传一个名为{{ic|package.tar.gz}}的压缩包,其中包含名为{{ic|package}}的与软件包名相同的文件,上传时会出现错误:“Could not change to directory {{ic|/home/aur/unsupported/package/package}}”。解决方法是把{{ic|package}}文件重命名(比如{{ic|package.rc}})。如果必须使用原文件名,可以在打包脚本中改回命名。
+
 
 +
{{提示|为了保持工作目录和提交尽可能的干净,可以创建 {{man|5|gitignore}} 文件来排除所有文件,然后再按需添加文件。}}
  
 
===维护软件包===
 
===维护软件包===
  
* 要更新软件包,重新提交即可。
+
* 阅读其他用户的反馈,并试着听从建议改进软件包,这是个学习的过程!
* 阅读其他用户的反馈,并改进软件包。
+
* 升级软件包后,不要在评论中加入版本更新信息,这些信息会冲淡更重要的用户评论。
* 不要提交软件包后就放任不管!PKGBUILD的和维护升级是用户自己的责任。
+
* 不要提交软件包后就放任不管!检查更新并改进 PKGBUILD 是维护者的责任。
* 如果不想继续维护某个软件包,可以在AUR网站上的软件包页面放弃所有权,或者在AUR邮件列表发布信息。
+
* 发觉自己不再想维护某个软件包?可以通过 AUR web 界面 {{ic|disown}} 一个软件包或是在 AUR 邮件列表发条消息。如果这个包的所有维护者都disown,那么它就会变成一个 [https://aur.archlinux.org/packages/?SB=n&do_Orphans=Orphans “orphaned”] 软件包.
  
 
===其他事项===
 
===其他事项===
  
* 在aur-general邮件列表请求移除软件包或弃置他人的软件包,受信用户会作出决定。
+
取消维护权限、删除、合并请求可以通过右侧 "Package actions" 的 "File Request" 链接执行。这会给当前的维护者和 [https://mailman.archlinux.org/mailman/listinfo/aur-requests aur-requests 邮件列表]自动发送邮件通知。[[Trusted Users]] 会接受或拒绝请求。
* 请求中需包含'''软件包名称和AUR页面链接'''。
+
 
* 如果email通知当前软件包维护人员后两个星期内没有答复,弃置请求将得到许可。
+
* 如果现在的维护者在两周之内没有反应,orphan 请求就会通过。
* '''软件包尚无法改名'''。如果需要,可以提交新软件包,并在邮件列表请求移除旧软件包。
+
* 合并请求会删除软件包 base,并将现有的投票数、评论转移到另一个软件包 base 中。将要合并到的软件包 base 是必须的。请注意这和 git merge 或者 GitLab 的 merge request 没有任何关系。
* 移除请求格式如下(务必用英语):
+
* 移除请求需要如下信息(务必用英语):
** 软件包名称和AUR页面链接
+
** 简要解释请求删除的原因。注意仅仅在软件包下评论是不足以指出需要删除的原因的。因为在 TU 采取行动之前,aur-requests 是唯一能取得这些信息的地方。
** 删除原因,至少一句话 <br> '''注意:'''不要以为在软件包评论处贴出移除理由就足够了,受信用户只会阅读邮件列表上的信息。
+
** 支持删除原因的详细内容,例如这个软件包已经由另一个软件包提供。
** 详情说明,比如是因为修改名称而移除还是其他什么的。
+
** 移除请求可能会被拒绝。例如如果您是维护者的话,您很有可能被建议 disown 这个软件包,以便让其他打包者认领。
 +
** 软件包被删除之后,它的 Git 仓库仍然能从 AUR 中被获取。
 +
 
 +
== Web 接口翻译 ==
 +
 
 +
参阅 [https://projects.archlinux.org/aurweb.git/tree/doc/i18n.txt i18n.txt] 获得关于创建和维护 AUR web 界面翻译的详细信息。
 +
 
 +
== 评论语法 ==
 +
 
 +
评论支持 [https://python-markdown.github.io/ Python-Markdown] 语法。
 +
它提供基本的 [[Wikipedia:Markdown|Markdown]] 语法来格式化评论。请注意这一实现与[https://daringfireball.net/projects/markdown/syntax 官方的语法]有些[https://python-markdown.github.io/#differences 区别]。评论会被哈希进软件包的 Git 仓库,对 Flyspray 工单的引用会被自动转换成链接。长评论会被折叠并能根据需要展开。
  
删除的条件比较严格。如果无法通过,弃置即可。
+
== FAQ ==
  
==[community]==
+
=== AUR 是什么? ===
[community]仓库由[[Trusted Users|受信用户]]维护,包含来自AUR的流行软件包。{{ic|pacman.conf}}中默认已启用该仓库,相关文件内容如下:
 
  
{{hc
+
AUR 是 Arch User Repository(Arch 用户软件仓库)的缩写,是 Arch 用户上传并分享软件、共享库等等的 [[PKGBUILD (简体中文)|PKGBUILD]] 的地方。用户可以为喜欢的软件包投票,票数多的将有机会进入community仓库并以二进制包的形式提供。
|/etc/pacman.conf
 
|<nowiki>
 
...
 
[community]
 
Include = /etc/pacman.d/mirrorlist
 
...
 
</nowiki>}}
 
  
[community]与AUR的最大不同是软件包以二进制包形式提供,可由[[pacman (简体中文)|pacman]]直接安装,软件包生成脚本可以通过[[Arch Build System (简体中文)|ABS]]获取。该仓库中的某些软件包还可能收录进[core]或[extra]仓库。
+
=== 什么样的软件包能被放到 AUR? ===
  
可以通过编辑{{ic|/etc/abs.conf}}的{{ic|REPOS}}数组打开或关闭[[Arch Build System (简体中文)|ABS]]对[community]仓库的支持。
+
AUR 中的软件包仅是编译脚本,只要内容符合软件版权,满足上面提到的软件包要求,就能够放入。有时候,下载的链接具有 "you may not link" 条款,这时就不能提供下载链接,而是要用程序名称代替,用户需要用其它方式提前获取受限制的源代码。有疑问请及时询问。
  
==Git版本库==
+
=== 如何给 AUR 中的软件包投票? ===
Thomas Dziedzic维护着AUR的Git版本库,每日至少更新一次,其中可以找到AUR软件包的历史版本。克隆该版本库(有上百MB):
 
  
$ git clone git://pkgbuild.com/aur-mirror.git
+
注册[https://aur.archlinux.org/ AUR 网站]账户,在浏览软件包时会看到投票选项。登录后,还可以通过 {{AUR|aurvote}}、{{AUR|aurvote-git}} 或者 {{AUR|aur-auto-vote-git}} 投票。
  
另见:[http://pkgbuild.com/git/aur-mirror.git/ Git库网页],[http://pkgbuild.com/~td123/readme Readme],[https://bbs.archlinux.org/viewtopic.php?id=113099 论坛相关帖子]
+
此外,如果您已经按照上诉方法设立[[#认证|ssh 认证]],您可以使用您的 ssh 密钥直接通过命令行投票。这意味着您不再需要保存或者输入您的 AUR 密码。
  
==FAQ==
+
ssh aur@aur.archlinux.org vote <PACKAGE_NAME>
  
{{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”软件包组。
+
# 确保安装了 {{Grp|base}} {{Grp|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 是否损坏,或者您的系统是否配置错误,您可以考虑在 chroot 环境中构建软件包。它会在一个干净的、只安装制定构建依赖、没有任何用户定制的 Arch Linux 环境中构建软件包。您需要安装 {{pkg|devtools}} 并使用 {{ic|extra-x86_64-build}} 替代 {{ic|makepkg}}。对于 [[multilib]] 软件包,运行 {{ic|multilib-build}}。参见 [[DeveloperWiki:Building in a clean chroot]] 以获得更多详细内容。如果在 chroot 环境中仍然构建失败,那么很有可能是 PKGBUILD 文件有些问题。
 +
 
 +
=== ERROR: One or more PGP signatures could not be verified! 我该怎么办? ===
 +
 
 +
最有可能的情况是您没有所需的公钥来验证下载的文件。如果构建过程中下载了一个或者多个 .sig 文件, [[Makepkg#Signature_checking|makepkg 会自动验证对应的文件和它的签发人]]。如果您没有所需的密钥,{{ic|makepkg}} 就会无法进行验证。
 +
 
 +
推荐的解决办法是[[GnuPG#Import_a_public_key|手动]]或者[[GnuPG#Use_a_keyserver|从密钥服务器]]导入所需的公钥。通常来说,您能从 [[PKGBUILD]] 的 [[PKGBUILD#validpgpkeys|validpgpkeys]] 部分找到所需公钥的指纹。
 +
 
 +
=== 如何编写 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]]))
 +
 
 +
另见 [[AUR Trusted User Guidelines#Rules for Packages Entering the .5Bcommunity.5D Repo|Rules for Packages Entering the community Repo]].
 +
 
 +
=== 如何加速编译? ===
 +
 
 +
参阅 [[Makepkg#Improving compile times]]。
 +
 
 +
=== foo 和 foo-git 的区别是什么? ===
 +
 
 +
很多AUR软件包都包含稳定版本和开发版本。开发版本一般都会有像 {{ic|-cvs}}、{{ic|-svn}}、{{ic|-git}}、{{ic|-hg}}、{{ic|-bzr}} 或者 {{ic|-darcs}} 这样的后缀。
 +
开发版本并不是为日常使用而设计的,不过可能包含新功能或者 bug 修复。因为要从上游获取最新的源代码,所以当运行 {{ic|makepkg}} 时版本号可能会发生变化。而且会跳过对源代码的完整性效验。
 +
 
 +
同时请参阅 [[System maintenance#Use proven software packages]]。
 +
 
 +
=== 为啥某个软件包从 AUR 消失了? ===
 +
 
 +
有可能是 TU 认领了这个软件包,并把它收入到 [[community repository|community]] 仓库中了。
 +
 
 +
软件包可能因为不满足[[#提交软件包的规则]]或是其它原因而被删除,您可以在
 +
[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 里消失的软件包? ===
 +
 
 +
最简单的办法是检查软件包 AUR 页面的 HTTP 状态:
  
{{FAQ
+
$ comm -23 <(pacman -Qqm | sort) <(curl https://aur.archlinux.org/packages.gz | gzip -cd | sort)
|question=如何加速编译?
 
|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]]

Latest revision as of 09:42, 3 February 2019

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

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

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

警告: AUR 中的软件包是由其他用户编写的,使用这些文件的风险由您自行承担。

入门

用户可以从 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 的发布方式。

当时现存的所有软件包都会被删除,除非维护者将他们手动迁移到新的架构上。

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 -si。命令会自动调用 pacman 解决依赖关系,然后下载代码、编译并打包。然后安装软件包。
注意: AUR是不受支持的,所以更新这些软件包是您的责任而不是 pacman 的。如果官方仓库中的软件包更新了,您可能需要重建相关的 AUR 软件包。

准备

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

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

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

获取软件包构建所需文件

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

确认无误后,通过下面三种方法可以获取到所需的编译文件:

  • 在“Package Details”中,找到“Git Clone URL”,然后下载 Git 仓库。这也是推荐的方法。
$ git clone https://aur.archlinux.org/package_name.git
这样做的其中一个好处是您以后可以通过 git pull 的形式来更新。
  • 从软件包信息页面点击“Download snapshot”(中文页面翻译做“下载快照”),保存压缩包到编译目录。
$ tar -xvf package_name.tar.gz
  • 从终端下载:
$ curl -L -O https://aur.archlinux.org/cgit/aur.git/snapshot/package_name.tar.gz

构建和安装软件包

切换到含有软件包的 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 (以普通用户权限):

$ makepkg -si
  • -s/--syncdeps 表示自动执行 pacman 安装依赖关系。如果软件包依赖其他的 AUR 软件包,您需要先手动安装依赖。
  • -i/--install 会在顺利构建软件包之后安装软件包。除此之外,您还可以使用 pacman -U package.pkg.tar.xz 来手动安装软件包。

其他可能有用的选项:

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

反馈

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

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

分享和维护软件包

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

提交软件包

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

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

提交软件包的规则

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

  • 仔细检查上传的文件。编写PKGBUILD前务必阅读 Arch软件打包标准。劣质的 PKGBUILD 会影响软件的正常使用,不要指望别人会因为您糟糕的 PKGBUILD 浪费了他们的时间而收到感谢。
  • 任何提交的 PKGBUILD 都不能编译已经位于官方二进制软件包仓库的程序。如果认为官方仓库的软件包已过期,请标记它。如果它有问题或者缺少功能,请反馈 bug 报告
唯一的例外是和官方打包版本相比增加或开启了新的功能或者使用了不同的补丁。这时需要修改 pkgname 来表示新增的功能。例如加入了边栏支持的 screen 应该命名为 screen-sidebar。此外还需要同时添加 provides=('screen') 以避免与官方仓库中的包冲突。
  • 检查 AUR 中是否已有相同软件包。如果已经有人维护某软件包,可以以评论的形式将变化报告给维护人员。如果软件包无人维护或不存在,用户提交的软件包将被认领。别创建重复的包。
  • 确保您的软件包有人需要,有人会用这个软件包吗?它非常特别吗?如果有一些人觉得它有用,就提交它。
AUR 和官方软件仓库中计划放置通用软件和软件相关的内容,包括:可执行文件、配置文件、软件的在线/离线文档和软件直接使用的媒体数据。
  • 不要在 AUR PKGBUILD 中使用 replaces,除非这个软件包将要被重命名(例如当 Ethereal 变成 Wireshark 时)。如果这个软件包是已经存在的软件包的另一版本,使用 conflicts (或者如果这个软件包被其他软件需要时,使用 provides)。两者的主要区别是:在 pacman 同步(-Sy)之后,如果遇到与 replaces 匹配并已经安装的软件包时,pacman 会立刻想去替换它。而 conflicts 则在安装软件包时进行替换。
  • 如果源代码是可取得的,请避免提交二进制文件。AUR不应当包含 makepkg 创建的二进制包,也不应当包含文件列表。
  • 请在 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 。将公钥导入到用户账户的我的帐号一节,然后为 aur.archlinux.org 指定私钥的位置,例如:

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

建议为 AUR 创建一个新的密钥(而不是用旧的),这样出问题时可以直接废除密钥:

$ ssh-keygen -f ~/.ssh/aur
提示: 在输入公钥时可以通过换行的方式设置添加多个公钥。

创建软件包仓库

如果您正在创建新的软件包,请通过克隆所需的 pkgbase 的方式建立一个远程 AUR 仓库和本地 Git 仓库。如果软件包还不存在,则会出现以下预料之中的警告:

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

如果您已经有一个软件包了,如果它不是 Git 仓库的话,初始化并添加远程 AUR 地址:

$ git remote add label ssh://aur@aur.archlinux.org/pkgbase.git

然后从远程获取文件并初始化。

提示: 使用推送和变基来解决 pkgbase 匹配到已删除软件包的冲突问题。

提交和更新软件包

警告: 不想以全局身份提交?记得通过 git config user.name [...]git config user.email [...] 编辑自己的本地身份!

当释出新版本的软件时,更新 pkgver 或者 pkgrel 变量来提示所有的用户更新。如果仅仅是对 PKGBUILD 的小修改(例如修正笔误),请不要更新这些变量。

无论何时 PKGBUILD 的元数据发生变动(例如更新了 pkgver()),都需要重新生成 .SRCINFO 。否则AUR不会显示更新后的版本号。

要上传或者更新一个软件包,至少添加 PKGBUILD.SRCINFO 和其他所有新增的或者修改过的辅助文件(例如 .install 文件或者如补丁之类的本地源码文件),提交,最后推送这些变动到AUR上。

例如:

$ makepkg --printsrcinfo > .SRCINFO
$ git add PKGBUILD .SRCINFO
$ git commit -m "useful commit message"
$ git push
注意: 如果您忘记在首次提交中包含 .SRCINFO,您可以使用 rebasing with --root 或是 filtering the tree 使得 AUR 接受您的第一次推送
提示: 为了保持工作目录和提交尽可能的干净,可以创建 gitignore(5) 文件来排除所有文件,然后再按需添加文件。

维护软件包

  • 阅读其他用户的反馈,并试着听从建议改进软件包,这是个学习的过程!
  • 升级软件包后,不要在评论中加入版本更新信息,这些信息会冲淡更重要的用户评论。
  • 不要提交软件包后就放任不管!检查更新并改进 PKGBUILD 是维护者的责任。
  • 发觉自己不再想维护某个软件包?可以通过 AUR web 界面 disown 一个软件包或是在 AUR 邮件列表发条消息。如果这个包的所有维护者都disown,那么它就会变成一个 “orphaned” 软件包.

其他事项

取消维护权限、删除、合并请求可以通过右侧 "Package actions" 的 "File Request" 链接执行。这会给当前的维护者和 aur-requests 邮件列表自动发送邮件通知。Trusted Users 会接受或拒绝请求。

  • 如果现在的维护者在两周之内没有反应,orphan 请求就会通过。
  • 合并请求会删除软件包 base,并将现有的投票数、评论转移到另一个软件包 base 中。将要合并到的软件包 base 是必须的。请注意这和 git merge 或者 GitLab 的 merge request 没有任何关系。
  • 移除请求需要如下信息(务必用英语):
    • 简要解释请求删除的原因。注意仅仅在软件包下评论是不足以指出需要删除的原因的。因为在 TU 采取行动之前,aur-requests 是唯一能取得这些信息的地方。
    • 支持删除原因的详细内容,例如这个软件包已经由另一个软件包提供。
    • 移除请求可能会被拒绝。例如如果您是维护者的话,您很有可能被建议 disown 这个软件包,以便让其他打包者认领。
    • 软件包被删除之后,它的 Git 仓库仍然能从 AUR 中被获取。

Web 接口翻译

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

评论语法

评论支持 Python-Markdown 语法。 它提供基本的 Markdown 语法来格式化评论。请注意这一实现与官方的语法有些区别。评论会被哈希进软件包的 Git 仓库,对 Flyspray 工单的引用会被自动转换成链接。长评论会被折叠并能根据需要展开。

FAQ

AUR 是什么?

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

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

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

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

注册AUR 网站账户,在浏览软件包时会看到投票选项。登录后,还可以通过 aurvoteAURaurvote-gitAUR 或者 aur-auto-vote-gitAUR 投票。

此外,如果您已经按照上诉方法设立ssh 认证,您可以使用您的 ssh 密钥直接通过命令行投票。这意味着您不再需要保存或者输入您的 AUR 密码。

ssh aur@aur.archlinux.org vote <PACKAGE_NAME>

受信用户(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. 确保安装了 basebase-devel 软件包组。
  3. 在执行makepkg时,使用-s选项检查依赖关系。

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

为了检查 PKGBUILD 是否损坏,或者您的系统是否配置错误,您可以考虑在 chroot 环境中构建软件包。它会在一个干净的、只安装制定构建依赖、没有任何用户定制的 Arch Linux 环境中构建软件包。您需要安装 devtools 并使用 extra-x86_64-build 替代 makepkg。对于 multilib 软件包,运行 multilib-build。参见 DeveloperWiki:Building in a clean chroot 以获得更多详细内容。如果在 chroot 环境中仍然构建失败,那么很有可能是 PKGBUILD 文件有些问题。

ERROR: One or more PGP signatures could not be verified! 我该怎么办?

最有可能的情况是您没有所需的公钥来验证下载的文件。如果构建过程中下载了一个或者多个 .sig 文件, makepkg 会自动验证对应的文件和它的签发人。如果您没有所需的密钥,makepkg 就会无法进行验证。

推荐的解决办法是手动或者从密钥服务器导入所需的公钥。通常来说,您能从 PKGBUILDvalidpgpkeys 部分找到所需公钥的指纹。

如何编写 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))

另见 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 找到对应删除记录的归档。

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

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

最简单的办法是检查软件包 AUR 页面的 HTTP 状态:

$ comm -23 <(pacman -Qqm | sort) <(curl https://aur.archlinux.org/packages.gz | gzip -cd | sort)

想知道 AUR 里都有啥 ?

另请参阅