Arch User Repository (简体中文)
| 摘要 |
|---|
| Arch用户软件仓库(AUR)是用户提交的PKGBUILD集合,以补充官方仓库没有包含的软件。本文将讲解如何利用AUR构建不受官方支持的软件包。 |
| 概览 |
| Arch Linux中的软件包通过makepkg生成,每一个软件包都有一个构建脚本(称为PKGBUILD)。打包后,软件可以通过pacman安装和管理。官方软件仓库中的PKGBUILD可以从ABS树获得;更多脚本位于(不受官方支持)Arch用户软件仓库。 |
| 相关内容 |
| AUR Helpers (简体中文) |
| AurJson |
| AUR Trusted User Guidelines (简体中文) |
| 相关资源 |
| AUR网站 |
| AUR邮件列表 |
Arch用户软件仓库(Arch User Repository,AUR)是为用户而建、由用户主导的Arch软件仓库。AUR中的软件包以软件包生成脚本(PKGBUILD)的形式提供,用户自己通过makepkg生成包,再由pacman安装。创建AUR的初衷是方便用户维护和分享新软件包,并由官方定期从中挑选软件包进入[community]仓库。本文介绍用户访问和使用AUR的方法。
许多官方仓库软件包都来自AUR。通过AUR,大家相互分享新的软件包生成脚本(PKGBUILD和其他相关文件)。用户还可以为软件包投票。如果一个软件包投票足够多、没有协议问题、打包质量好,那么它就很有希望被收录进官方[community]仓库(以后就可以直接通过pacman 或 abs 安装了)。
导读
用户可以从AUR网站下载PKGBUILD。makepkg使用该文件生成软件包,最后由pacman安装。
- 确保 base-devel 软件包组 已被安装 (
pacman -S base-devel)。 - 阅读下面 AUR 的更深入的介绍,了解如何安装软件包。
- 访问AUR网站查看软件包更新和其他事件。网站还提供了最新软件包的列表。
- 浏览#FAQ获取常见问题的答案。
- 在
/etc/makepkg.conf中,针对处理器使用合适的CFLAGS、CXXFLAGS编译参数,以优化软件包编译。通过设置MAKEFLAGS变量,可以启用多线程编译,使用多核心处理器的话,将大大减少编译时间。详情参见makepkg。
历史
本节所述内容都是遥远的历史,现在已经见不到这些古董了,AUR取代了它们。
最初,人们上传PKGBUILD、附属文件、编译好的软件包到 ftp://ftp.archlinux.org/incoming。文件一直存放在那里,直到软件包维护人员发现并收录。
后来,出现了受信用户软件仓库,部分社区用户拥有了建设自己的软件仓库的权力。以这个仓库为基础,为使其更加灵活易用,AUR出现了。事实上,AUR维护人员现在仍被称为受信用户(简称TU)。
搜索
AUR提供了方便人们访问的网页接口,以及另一个方便程序访问的RPC接口。网页上有一个搜索框,可以用它搜索软件包名称或描述。
软件包检索使用MySQL的LIKE比较字符串。这使得搜索规则更加灵活(例如,搜索“tool%like%grep”而非“tool like grep”)。如果需要搜索带有“%”的内容,用斜杠转义为“\%”即可。
安装软件包
从AUR(即[unsupported]仓库)安装软件包并不很困难。步骤如下:
- 从AUR下载包含PKGBUILD和其他安装文件(比如 systemd-units 和补丁,通常不是实际代码)的tar包。
- 用命令
tar -xzf foo.tar.gz解包到一个仅用于编译AUR的空闲文件夹。 - 在上述文件夹中运行makepkg(
makepkg -s会自动调用pacman解决依赖关系)。这一步会下载代码、编译并打包。 - 查看
src/文件夹中是否存在 README 文件,阅读 README 可以获得和编译相关的信息。 - 使用pacman安装上一步生成的软件包:
-
# pacman -U /path/to/pkg.tar.xz
AUR辅助工具提供了更为简单的方法,这些工具可以自动搜索、获取、编译、安装AUR中的软件包。在AUR中可以找到这些工具。
下面以假想的软件包“foo”为例子,讲解安装过程。
基础环境
首先要安装基本的开发工具。软件包组base-devel 是必须的,其中包括make和其他编译工具:
# pacman -S base-devel
然后,选择一个合适的编译目录。这个目录用作生成软件包时的工作目录,任何空白目录都可以。例如使用:
~/builds
如果用ABS(Arch Build System,Arch软件包构建系统),则通常使用:
/var/abs/local
更多有关ABS的信息,参见此文。下面的示例中使用~/builds作为编译目录。
获取软件包构建所需文件
通过搜索或任何方式,在AUR中找到要安装的软件包。阅读介绍,检查软件包更新日期,看看别人的评论。
确认无误后,下载需要的文件。从软件包信息页面点击“Tarball”(中文页面翻译做“压缩包”),保存压缩包到编译目录。以本文的foo软件包为例,压缩包名为“foo.tar.gz”(标准格式是“<pkgname>.tar.gz”)。
构建软件包
切换到编译目录,解压缩构建文件:
$ cd ~/builds $ tar -xvzf foo.tar.gz
这时应该出现了一个新的名为“foo”的目录。进入目录并检查脚本文件:
$ cd foo $ nano PKGBUILD $ nano foo.install
接下来开始生成软件包。检查文件后,执行makepkg(以普通用户权限):
$ makepkg -s
-s表示自动调用sudo执行pacman解决依赖关系。如果没有安装sudo,就必须自己安装依赖软件包。
安装软件包
接下来要使用pacman安装软件包。软件包构建和打包成功后,会生成一个压缩包,文件名格式如下:
<软件名称>-<软件版本号>-<软件包修订版本>-<平台>.pkg.tar.xz
安装软件包的命令如下:
# pacman -U foo-0.1-1-i686.pkg.tar.xz
这些被手动安装的软件包被成为外部软件包 - 不是来自 pacman 知道的软件仓库。要显示所有外部软件包:
$ pacman -Qm
反馈
AUR网站的评论机制为用户提供了一种对PKGBUILD提建议的渠道。注意,最好不要在评论处贴自己的代码,因为代码很占地方,还很容易被新的评论刷掉。最好直接email通知维护人员,或者用pastebin贴代码。
在AUR网站上,用户可以为自己喜欢的AUR投票。投票数是[community]仓库软件包选拔的重要依据。
分享和维护软件包
用户是AUR的一切,没有用户的贡献和支持就没有今天的AUR。本节介绍如何通过AUR分享自己的软件包。
AUR不包含任何编译过的二进制包,用户上传PKGBUILD,供其他用户下载使用。所有软件包都是非官方的,使用风险自担。
提交软件包
在AUR网站登录后,点击上方的Submit(中文版为“提交”)进入上传软件包页面。用户须提交一个名为.tar.gz的压缩包,其中应包含一个存放软件包生成所需文件的目录,目录中有一个PKGBUILD、零到多个.install文件、代码补丁文件等等。如果安装了ABS,可以在/var/abs查看这样的文件夹的范例。
在PKGBUILD所在目录执行以下命令创建上述压缩包:
$ makepkg --source
如果要上传一个名为libfoo的软件包,上面生成的压缩包大致如下:
# 查看压缩包内容
$ tar tf libfoo-0.1-1.src.tar.gz
libfoo/ libfoo/PKGBUILD libfoo/libfoo.install
提交软件包时,需遵守如下规定:
- 检查官方仓库,如果存在该软件包的 任何版本,就不要重复提交。如果认为官方仓库的软件包已过期,请标记它。如果它有问题或者缺少功能,请反馈bug 报告。
- 查看AUR中是否已有相同软件包。如果已经有人维护某软件包,其他用户的提交将以评论形式报告给维护人员。如果软件包无人维护或不存在,用户提交的软件包将被收录。
- 仔细检查上传的文件。编写PKGBUILD前务必阅读Arch软件打包标准。劣质的PKGBUILD会影响软件的正常使用,不要指望别人会因此感谢你。
- 包含二进制文件或质量差的PKGBUILD有可能无提醒地被直接删除。
- 如果对自己的PKGBUILD缺乏信心,可以先把它贴到AUR邮件列表或论坛AUR版,让大家帮你检查。
- 确保你的软件包有人需要,不要上传没用的软件包。
- AUR 官方软件仓库中放置通用软件和软件相关内容,包括:可执行文件、配置文件、软件的在线文档和软件直接使用的数据。
- 上传软件包之前务必掌握打包过程,自己打几个包练练手。
- 如果上传一个名为
package.tar.gz的压缩包,其中包含名为package的与软件包名相同的文件,上传时会出现错误:“Could not change to directory/home/aur/unsupported/package/package”。解决方法是把package文件重命名(比如package.rc)。如果必须使用原文件名,可以在打包脚本中改回命名。
维护软件包
- 要更新软件包,重新提交即可。
- 阅读其他用户的反馈,并改进软件包。
- 不要提交软件包后就放任不管!PKGBUILD的和维护升级是用户自己的责任。
- 如果不想继续维护某个软件包,可以在AUR网站上的软件包页面放弃所有权,或者在AUR邮件列表发布信息。
其他事项
- 在aur-general邮件列表请求移除软件包或弃置他人的软件包,受信用户会作出决定。
- 请求中需包含软件包名称和AUR页面链接。
- 如果email通知当前软件包维护人员后两个星期内没有答复,弃置请求将得到许可。
- 软件包尚无法改名。如果需要,可以提交新软件包,并在邮件列表请求移除旧软件包。
- 移除请求格式如下(务必用英语):
- 软件包名称和AUR页面链接
- 删除原因,至少一句话
注意:不要以为在软件包评论处贴出移除理由就足够了,受信用户只会阅读邮件列表上的信息。 - 详情说明,比如是因为修改名称而移除还是其他什么的。
删除的条件比较严格。如果无法通过,弃置即可。
[community]
[community]仓库由受信用户维护,包含来自AUR的流行软件包。pacman.conf中默认已启用该仓库,相关文件内容如下:
/etc/pacman.conf
... [community] Include = /etc/pacman.d/mirrorlist ...
[community]与AUR的最大不同是软件包以二进制包形式提供,可由pacman直接安装,软件包生成脚本可以通过ABS获取。该仓库中的某些软件包还可能收录进[core]或[extra]仓库。
可以通过编辑/etc/abs.conf的REPOS数组打开或关闭ABS对[community]仓库的支持。
Git版本库
Thomas Dziedzic维护着AUR的Git版本库,每日至少更新一次,其中可以找到AUR软件包的历史版本。克隆该版本库(有上百MB):
$ git clone git://pkgbuild.com/aur-mirror.git
FAQ
Q: AUR是什么?
Q: 什么样的软件包能被放到 AUR?
Q: 受信用户(或TU)是什么?
Q: Arch User Repository和[community]仓库有何区别?
Q: 一个AUR软件包进入[community]需要多少投票?
Q: 如何编写PKGBUILD?
Q: 某个软件包已经在[community]仓库,但我无法使用pacman -S安装。
/etc/pacman.conf找到相关内容,去掉注释即可。
如果[community]确实开启了,请先执行pacman -Sy同步软件包数据。Q: AUR的某个软件包过时了,该怎么办?
Q: 我想提交一个PKGBUILD,希望别人帮忙检查错误。
Q: makepkg无法构建软件包,怎么办?
- 执行
makepkg之前先使用pacman -Syyu更新系统,系统软件过时可能导致软件包构建失败。 - 确保安装了“base”和“base-devel”软件包组。
- 在执行
makepkg时,使用-s选项检查依赖关系。