Arch User Repository (简体中文)
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 --needed base-devel
)。 - 浏览 #FAQ 获取常见问题的答案。
- 在
/etc/makepkg.conf
中,针对处理器设置合适的 GCC 编译参数CFLAGS
。通过设置 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 安装软件包并不困难。基本步骤如下:
- 从 AUR 下载包含 PKGBUILD 和其他安装文件(比如 systemd 和补丁,通常不是实际代码)的 tar 包。
- 用命令
tar -xvf packagename.tar.gz
解包到一个仅用于编译 AUR 的空闲文件夹。 - 验证 PKGBUILD 和其它相关文件,确保其中不含有恶意代码。
- 在上述文件夹中运行
makepkg -si
。命令会自动调用 pacman 解决依赖关系,然后下载代码、编译并打包。然后安装软件包。
准备
首先确定完整地安装了 base-devel 软件包组,其中包括 make 和其他编译工具:
然后,选择一个合适的编译目录。这个目录用作生成软件包时的工作目录,任何空白目录都可以。下面的示例中使用 ~/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
会在构建结束时删除临时文件。如果需要调试构建过程这会十分有用。
反馈
在软件包上添加评论
AUR 网站的评论机制为用户提供了一种对 PKGBUILD 提建议的渠道。
最好不要在评论处贴自己的代码,因为代码很占地方,还很容易被新的评论刷掉。最好直接给维护人员发邮件,或者用 pastebin 贴代码。
给软件包投票
所有的 Arch 用户都可以通过 AUR Web 界面为软件包投票。大多数软件包都有机会被 TU 收录进 community 仓库。投票数是 community 仓库软件包选拔的重要依据之一。
注册AUR 网站账户,在浏览软件包时会看到投票选项。注册后,还可以通过 aurvoteAUR、aurvote-gitAUR 或者 aur-auto-vote-gitAUR 投票。
此外,如果您已经按照上述方法设立ssh 认证,可以使用 ssh 密钥直接通过命令行投票。不再需要保存或者输入 AUR 密码。
$ ssh aur@aur.archlinux.org vote package_name
将软件包标记为过期
首先,点击软件包页面的“Flag Out-of-date”(中文版为“标记为过期”,并说明过期的原因,最好包含新版本的发布说明或 tar 包.
可以通过邮件通知维护人员。如果两周后还是没有得到答复,可以发出 遗弃 请求,也就是让一个 Trusted User 不再维护这个软件包。注意请确保软件包需要维护人更新,而他/她没有任何回应的情况下再这么操作。
提交
用户可以通过AUR来提交 PKGBUILD。 这个并不包括任何二进制包,但是允许用户上传 PKGBUILD
以便其他人下载。 这些PKGBUILD
并不是官方的而且也没有经过详尽的审查,使用时请请注意风险。请在 AUR submission guidelines 查看详细信息。
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" 条款,这时就不能提供下载链接,而是要用程序名称代替,用户需要用其它方式提前获取受限制的源代码。有疑问请及时询问。
受信用户(TU)是什么?
受信用户(TU,Trusted User)是选拔出的监督 AUR 和 community 仓库的用户。他们维护着 community 的热门软件,并维持 AUR 运转。
Arch User Repository 和 community 仓库有何区别?
Arch User Repository 是储存所有用户提交的 PKGBUILD 的地方,软件包需通过 makepkg 手动生成。吸引足够多的 community interest 及 TU 支持的 PKGBUILD 会被收录进 community仓库(由 TU 维护),以二进制软件包形式提供,可以由 pacman 安装。
makepkg
无法构建某个软件包,我该怎么办?
您很可能忘了点啥。
- 更新系统,系统软件过时可能导致软件包构建失败。
- 确保安装了 base 和 base-devel 软件包组。
- 在执行
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! 我该怎么办?
最有可能的情况是您没有所需的公钥来验证下载的文件。详情参见 Makepkg#Signature checking。
如何编写 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 找到对应删除记录的归档。
我要怎么找出从 AUR 里消失的软件包?
最简单的办法是检查软件包 AUR 页面的 HTTP 状态:
$ comm -23 <(pacman -Qqm | sort) <(curl https://aur.archlinux.org/packages.gz | gzip -cd | sort)
想知道 AUR 里都有啥 ?
- https://aur.archlinux.org/packages.gz
- 使用来自 python3-aurAUR 的
aurpkglist
。