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

From ArchWiki
Jump to: navigation, search
(update Pkg/AUR templates (https://github.com/lahwaacz/wiki-scripts/blob/master/update-package-templates.py))
(Sync with latest English page.)
Line 33: Line 33:
 
{{Related|Creating packages}}
 
{{Related|Creating packages}}
 
{{Related articles end}}
 
{{Related articles end}}
{{TranslationStatus (简体中文)|Arch_User_Repository|2015-08-23|391850}}
+
{{TranslationStatus (简体中文)|Arch_User_Repository|2015-10-03|400351}}
 
[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 43: Line 43:
  
 
* 确保 {{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]]。
Line 83: Line 81:
 
通过搜索或任何方式,在AUR中找到要安装的软件包。阅读介绍,检查软件包更新日期,看看别人的评论。
 
通过搜索或任何方式,在AUR中找到要安装的软件包。阅读介绍,检查软件包更新日期,看看别人的评论。
  
确认无误后,下载需要的文件。从软件包信息页面点击“Download snapshot”(中文页面翻译做“下载快照”),保存压缩包到编译目录。以本文的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
  
 
===构建和安装软件包===
 
===构建和安装软件包===
切换到编译目录,解压缩构建文件:
+
切换到编译目录,解压缩构建文件。如果是 Git 方式获取,无需解压。
  
 
  $ cd ~/builds
 
  $ cd ~/builds
Line 116: Line 123:
 
AUR不包含任何编译过的二进制包,用户上传[[PKGBUILD (简体中文)|PKGBUILD]],供其他用户下载使用。所有软件包都是非官方的,使用风险自担。
 
AUR不包含任何编译过的二进制包,用户上传[[PKGBUILD (简体中文)|PKGBUILD]],供其他用户下载使用。所有软件包都是非官方的,使用风险自担。
  
===提交软件包===
+
=== 提交软件包的规则 ===
 +
 
 +
* 检查[https://www.archlinux.org/packages/ 官方仓库],如果存在该软件包的 '''任何版本''',就'''不要'''重复提交。如果认为官方仓库的软件包已过期,请标记它。如果它有问题或者缺少功能,请反馈[https://bugs.archlinux.org/ bug 报告]。
 +
* 查看AUR中是否已有相同软件包。如果已经有人维护某软件包,其他用户的提交将以评论形式报告给维护人员。如果软件包无人维护或不存在,用户提交的软件包将被收录。
 +
* 仔细检查上传的文件。编写PKGBUILD前务必阅读[[Arch Packaging Standards (简体中文)|Arch软件打包标准]]。劣质的PKGBUILD会影响软件的正常使用,不要指望别人会因此感谢你。
 +
* 包含二进制文件或质量差的PKGBUILD有可能无提醒地被直接删除。
 +
* 如果对自己的PKGBUILD缺乏信心,可以先把它贴到[https://mailman.archlinux.org/mailman/listinfo/aur-general AUR邮件列表]或[https://bbs.archlinux.org/viewforum.php?id=4 论坛AUR版],让大家帮你检查。
 +
* 确保你的软件包有人需要,不要上传没用的软件包。
 +
* AUR 官方软件仓库中放置通用软件和软件相关内容,包括:可执行文件、配置文件、软件的在线文档和软件直接使用的数据。
 +
* 上传软件包之前务必掌握打包过程,自己打几个包练练手。
 +
 
 +
===维护软件包===
 
{{注意|提交前请先熟悉 [[Arch packaging standards]] 及相关文章。}}
 
{{注意|提交前请先熟悉 [[Arch packaging standards]] 及相关文章。}}
  
 
要获得 AUR 写权限,用户先要准备好 [[SSH keys|SSH key]].将公钥 {{ic|.ssh/foo.pub}} 导入到用户账户的 ''我的帐号''。建议为 AUR 创建一个新的密钥,这样出问题时可以直接废除密钥。
 
要获得 AUR 写权限,用户先要准备好 [[SSH keys|SSH key]].将公钥 {{ic|.ssh/foo.pub}} 导入到用户账户的 ''我的帐号''。建议为 AUR 创建一个新的密钥,这样出问题时可以直接废除密钥。
  
 +
==== 创建新软件包 ====
 
要提交软件包,先用用户名对应的地址克隆镜像:
 
要提交软件包,先用用户名对应的地址克隆镜像:
  
 
  $ git clone <nowiki>ssh://</nowiki>aur@aur.archlinux.org/''foobar''.git
 
  $ git clone <nowiki>ssh://</nowiki>aur@aur.archlinux.org/''foobar''.git
 +
 +
从不存在的仓库中克隆或推送,将会自动创建此仓库。
  
 
然后将需要提交的源代码加入 Git 镜像。注意要确保每次更新都包含顶层目录的 {{ic|PKGBUILD}} 和 {{ic|.SRCINFO}}。可以用 {{Pkg|pkgbuild-introspection}} 软件包提供的 {{ic|mksrcinfo}} 创建 {{ic|.SRCINFO}}。  
 
然后将需要提交的源代码加入 Git 镜像。注意要确保每次更新都包含顶层目录的 {{ic|PKGBUILD}} 和 {{ic|.SRCINFO}}。可以用 {{Pkg|pkgbuild-introspection}} 软件包提供的 {{ic|mksrcinfo}} 创建 {{ic|.SRCINFO}}。  
 +
 +
{{Note|".SRCINFO" 包含了软件代码的元数据,详情参阅[[#AUR metadata]].}}
 +
 +
==== 更新软件包 ====
  
 
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}}.
 
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}}.
Line 146: Line 171:
  
 
{{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|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.}}
 
{{Note|".SRCINFO" 包含了软件代码的元数据,详情参阅[[#AUR metadata]].}}
 
 
提交软件包时,需遵守如下规定:
 
 
* 检查[https://www.archlinux.org/packages/ 官方仓库],如果存在该软件包的 '''任何版本''',就'''不要'''重复提交。如果认为官方仓库的软件包已过期,请标记它。如果它有问题或者缺少功能,请反馈[https://bugs.archlinux.org/ bug 报告]。
 
* 查看AUR中是否已有相同软件包。如果已经有人维护某软件包,其他用户的提交将以评论形式报告给维护人员。如果软件包无人维护或不存在,用户提交的软件包将被收录。
 
* 仔细检查上传的文件。编写PKGBUILD前务必阅读[[Arch Packaging Standards (简体中文)|Arch软件打包标准]]。劣质的PKGBUILD会影响软件的正常使用,不要指望别人会因此感谢你。
 
* 包含二进制文件或质量差的PKGBUILD有可能无提醒地被直接删除。
 
* 如果对自己的PKGBUILD缺乏信心,可以先把它贴到[https://mailman.archlinux.org/mailman/listinfo/aur-general AUR邮件列表]或[https://bbs.archlinux.org/viewforum.php?id=4 论坛AUR版],让大家帮你检查。
 
* 确保你的软件包有人需要,不要上传没用的软件包。
 
* AUR 官方软件仓库中放置通用软件和软件相关内容,包括:可执行文件、配置文件、软件的在线文档和软件直接使用的数据。
 
* 上传软件包之前务必掌握打包过程,自己打几个包练练手。
 
  
 
===维护软件包===
 
===维护软件包===
Line 262: Line 274:
 
Arch User Repository是储存所有用户提交的PKGBUILD的地方,软件包需通过[[makepkg (简体中文)|makepkg]]手动生成。吸引足够多的 community interest 及 TU 支持的 PKGBUILD 会被收录进[community]仓库(由TU维护),以二进制软件包形式提供,可以由[[pacman (简体中文)|pacman]]安装。
 
Arch User Repository是储存所有用户提交的PKGBUILD的地方,软件包需通过[[makepkg (简体中文)|makepkg]]手动生成。吸引足够多的 community interest 及 TU 支持的 PKGBUILD 会被收录进[community]仓库(由TU维护),以二进制软件包形式提供,可以由[[pacman (简体中文)|pacman]]安装。
  
=== PKGBUILD(AUR软件包)怎样才能被收录到community软件仓库? ===
+
=== AUR的某个软件包过时了,该怎么办? ===
一般至少需要10票,并且要有TU(受信用户)愿意维护,否则即便有上千票也不会收录。当然,也有TU(受信用户)无视票数而主动去收录他想要的软件包。
+
 
 +
点击软件包页面的“Flag Out-of-date”(中文版为“标记为过期”)即可。如果长期未更新,最好email通知维护人员。如果还是没有得到答复,如果这些软件包标记为过期的时间超过 3 个月,长期未更新,可以在aur-general要求弃置软件包,邮件中请包含过期的信息。
 +
 
 +
同时,你可以自行更新 PKGBUILD - 通常软件更新不需要修改编译或打包方式,更新 {{ic|pkgver}} 或 {{ic|source}} 数组就足够了。
 +
 
 +
=== {{ic|makepkg}}无法构建某个软件包怎么办? ===
  
一些流行的软件包未被收录的原因一般是:
+
你很可能忘了点啥。
  
* Arch Linux的软件仓库中已经有了别的版本。
+
# 执行{{ic|makepkg}}之前先使用{{ic|pacman -Syyu}}更新系统,系统软件过时可能导致软件包构建失败。
* 那个软件包是AUR-centric((e.g. 是个 [[AUR helper]]))(译者问:AUR-centric到底是啥?没看到这个AUR helper啊。懂行的麻烦编辑下,谢谢。)
+
# 确保安装了“base”和“base-devel”软件包组。
* 没有再发布的授权许可
+
# 在执行{{ic|makepkg}}时,使用{{ic|-s}}选项检查依赖关系。
  
另见 [[DeveloperWiki:Community repo candidates]] [[AUR Trusted User Guidelines#Rules for Packages Entering the .5Bcommunity.5D Repo|Rules for Packages Entering the community Repo]].
+
先阅读 PKGBUILD 和 AUR 页面的评论。可能导致编译错误的还有不正确的CFLAGS、LDFLAGS和MAKEFLAGS设置。也有可能是PKGBUILD写错了,如果确实如此,请通知包维护人员。例如在 AUR 页面留言。
  
 
=== 如何编写PKGBUILD? ===
 
=== 如何编写PKGBUILD? ===
  
 
建议阅读[[Creating packages (简体中文)|创建软件包]]一文。先检查AUR看看有没有相同软件包,不要再造轮子。
 
建议阅读[[Creating packages (简体中文)|创建软件包]]一文。先检查AUR看看有没有相同软件包,不要再造轮子。
 
=== AUR的某个软件包过时了,该怎么办? ===
 
 
点击软件包页面的“Flag Out-of-date”(中文版为“标记为过期”)即可。如果长期未更新,最好email通知维护人员。如果还是没有得到答复,如果这些软件包标记为过期的时间超过 3 个月,长期未更新,可以在aur-general要求弃置软件包,邮件中请包含过期的信息。
 
  
 
=== 我想提交一个PKGBUILD,希望别人帮忙检查错误。 ===
 
=== 我想提交一个PKGBUILD,希望别人帮忙检查错误。 ===
Line 285: Line 298:
 
你可以在aur-general贴出你的PKGBUILD并征求他人意见,或到irc.freenode.net上的[[ArchChannel|IRC频道]]#archlinux寻求帮助。也可以自己使用[[namcap (简体中文)|namcap]]检查PKGBUILD和软件包。
 
你可以在aur-general贴出你的PKGBUILD并征求他人意见,或到irc.freenode.net上的[[ArchChannel|IRC频道]]#archlinux寻求帮助。也可以自己使用[[namcap (简体中文)|namcap]]检查PKGBUILD和软件包。
  
=== {{ic|makepkg}}无法构建某个软件包怎么办? ===
+
=== PKGBUILD(AUR软件包)怎样才能被收录到community软件仓库? ===
 +
一般至少需要10票,并且要有TU(受信用户)愿意维护,否则即便有上千票也不会收录。当然,也有TU(受信用户)无视票数而主动去收录他想要的软件包。
  
你很可能忘了点啥。
+
一些流行的软件包未被收录的原因一般是:
  
# 执行{{ic|makepkg}}之前先使用{{ic|pacman -Syyu}}更新系统,系统软件过时可能导致软件包构建失败。
+
* Arch Linux的软件仓库中已经有了别的版本。
# 确保安装了“base”和“base-devel”软件包组。
+
* 那个软件包是AUR-centric((e.g. 是个 [[AUR helper]]))(译者问:AUR-centric到底是啥?没看到这个AUR helper啊。懂行的麻烦编辑下,谢谢。)
# 在执行{{ic|makepkg}}时,使用{{ic|-s}}选项检查依赖关系。
+
* 没有再发布的授权许可
  
先阅读 PKGBUILD 和 AUR 页面的评论。可能导致编译错误的还有不正确的CFLAGS、LDFLAGS和MAKEFLAGS设置。也有可能是PKGBUILD写错了,如果确实如此,请通知包维护人员。例如在 AUR 页面留言。
+
另见 [[DeveloperWiki:Community repo candidates]] [[AUR Trusted User Guidelines#Rules for Packages Entering the .5Bcommunity.5D Repo|Rules for Packages Entering the community Repo]].
  
 
=== 如何加速编译? ===
 
=== 如何加速编译? ===
Line 299: Line 313:
 
如果经常用gcc编译同样的代码,[[ccache (简体中文)|ccache]]对你可能有很大帮助。
 
如果经常用gcc编译同样的代码,[[ccache (简体中文)|ccache]]对你可能有很大帮助。
  
=== 除了AUR网站,还有什么上传软件包到AUR的方法? ===
+
=== foo 和 foo-git 的区别是什么? ===
 +
 
 +
Many AUR packages are presented in regular ("stable") and development versions ("unstable"). A development package usually has a suffix such as {{ic|-cvs}}, {{ic|-svn}}, {{ic|-git}}, {{ic|-hg}}, {{ic|-bzr}} or {{ic|-darcs}}. While development packages are not intended for regular use, they may offer new features or bugfixes. Because these packages download the latest available source when you execute {{ic|makepkg}}, a package version to track possible updates is not directly available for these. Likewise, these packages cannot perform an authenticity checksum, instead it is relied on the maintainer(s) of the Git repository.
 +
 
 +
See also [[Enhancing Arch Linux Stability#Avoid development packages]].
 +
 
 +
=== Why has foo disappeared from the AUR? ===
 +
 
 +
Packages may be deleted, if they didn't fulfill the [[#Rules of submission]]. See the [https://lists.archlinux.org/pipermail/aur-requests/ aur-requests archives] for the reason for deletion.
  
可以使用{{pkg|burp}}{{Broken package link|{{aur-mirror|burp}}}}, ''aurploader'' ({{AUR|python3-aur}}) 或 {{AUR|aurup}}{{Broken package link|{{aur-mirror|aurup}}}} &mdash;都是命令行工具。
+
If the package used to exist in AUR3, it might not have been [https://lists.archlinux.org/pipermail/aur-general/2015-August/031322.html migrated to AUR4]. See the [[#Git repositories for AUR3 packages]] where these are preserved.
  
 
== 参阅 ==
 
== 参阅 ==

Revision as of 05:13, 3 October 2015

zh-TW:Arch User Repository

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

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

历史

最初,人们上传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”)。如果需要搜索带有“%”的内容,用斜杠转义为“\%”即可。

安装软件包

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

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

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

基础环境

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

# pacman -S --needed base-devel

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

获取软件包构建所需文件

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

确认无误后,下面三种方法可以不用 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 方式获取,无需解压。

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

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

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

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

$ makepkg -sri

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

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

反馈

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

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

分享和维护软件包

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

提交软件包的规则

  • 检查官方仓库,如果存在该软件包的 任何版本,就不要重复提交。如果认为官方仓库的软件包已过期,请标记它。如果它有问题或者缺少功能,请反馈bug 报告
  • 查看AUR中是否已有相同软件包。如果已经有人维护某软件包,其他用户的提交将以评论形式报告给维护人员。如果软件包无人维护或不存在,用户提交的软件包将被收录。
  • 仔细检查上传的文件。编写PKGBUILD前务必阅读Arch软件打包标准。劣质的PKGBUILD会影响软件的正常使用,不要指望别人会因此感谢你。
  • 包含二进制文件或质量差的PKGBUILD有可能无提醒地被直接删除。
  • 如果对自己的PKGBUILD缺乏信心,可以先把它贴到AUR邮件列表论坛AUR版,让大家帮你检查。
  • 确保你的软件包有人需要,不要上传没用的软件包。
  • AUR 官方软件仓库中放置通用软件和软件相关内容,包括:可执行文件、配置文件、软件的在线文档和软件直接使用的数据。
  • 上传软件包之前务必掌握打包过程,自己打几个包练练手。

维护软件包

注意: 提交前请先熟悉 Arch packaging standards 及相关文章。

要获得 AUR 写权限,用户先要准备好 SSH key.将公钥 .ssh/foo.pub 导入到用户账户的 我的帐号。建议为 AUR 创建一个新的密钥,这样出问题时可以直接废除密钥。

创建新软件包

要提交软件包,先用用户名对应的地址克隆镜像:

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

从不存在的仓库中克隆或推送,将会自动创建此仓库。

然后将需要提交的源代码加入 Git 镜像。注意要确保每次更新都包含顶层目录的 PKGBUILD.SRCINFO。可以用 pkgbuild-introspection 软件包提供的 mksrcinfo 创建 .SRCINFO

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

更新软件包

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

For example, to create and submit the initial commit:

$ mksrcinfo
$ git add PKGBUILD .SRCINFO
$ git commit -m 'Initial import'
$ git push origin master
Warning: If you do not want to publish your system-wide identity, do not forget to set a local user name and email address via git config user.name [...] and git config user.email [...]! It is much more difficult to rewrite already published history, see: FS#45425. Review your commits before pushing them!

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

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

See Git for more information.

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

维护软件包

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

其他事项

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

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

Git repositories for AUR3 packages

On 08/08/2015 unmaintained packages have been removed from the AUR with the migration to a Git backend. A Git repository of the old AUR contents is available at git://pkgbuild.com/aur-mirror.git. It was generally updated once per day and is now read-only. If the repository's commit history is not needed, then cloning with the --depth=1 option will be much quicker:

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

You can also visit http://pkgbuild.com/git/aur-mirror.git/tree/<packagename> directly as trying to load http://pkgbuild.com/git/aur-mirror.git/tree in a web browser is going to use a lot of time and memory.

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

There is also the AUR Archive on GitHub with a repository for every package that was in AUR 3 during the migration to AUR 4.

AUR metadata

Tango-edit-clear.pngThis article or section needs language, wiki syntax or style improvements.Tango-edit-clear.png

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

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

How it works

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

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

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

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

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

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

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

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

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

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

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

AUR translation

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

FAQ

AUR是什么?

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

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

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

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

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

受信用户(或TU)是什么?

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

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

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

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

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

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

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

你很可能忘了点啥。

  1. 执行makepkg之前先使用pacman -Syyu更新系统,系统软件过时可能导致软件包构建失败。
  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寻求帮助。也可以自己使用namcap检查PKGBUILD和软件包。

PKGBUILD(AUR软件包)怎样才能被收录到community软件仓库?

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

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

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

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

如何加速编译?

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

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

Many AUR packages are presented in regular ("stable") and development versions ("unstable"). A development package usually has a suffix such as -cvs, -svn, -git, -hg, -bzr or -darcs. While development packages are not intended for regular use, they may offer new features or bugfixes. Because these packages download the latest available source when you execute makepkg, a package version to track possible updates is not directly available for these. Likewise, these packages cannot perform an authenticity checksum, instead it is relied on the maintainer(s) of the Git repository.

See also Enhancing Arch Linux Stability#Avoid development packages.

Why has foo disappeared from the AUR?

Packages may be deleted, if they didn't fulfill the #Rules of submission. See the aur-requests archives for the reason for deletion.

If the package used to exist in AUR3, it might not have been migrated to AUR4. See the #Git repositories for AUR3 packages where these are preserved.

参阅