Arch User Repository (简体中文)

From ArchWiki
Jump to: navigation, search
翻译状态: 本文是英文页面 Arch_User_Repository翻译,最后翻译时间:2016-04-02,点击这里可以查看翻译后英文页面的改动。

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

安装软件包

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

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

准备

首先确定必要的软件包组已经安装:

# pacman -S --needed base-devel

软件包组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 方式获取,无需解压。

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

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

警告: 务必认真检查所有文件!cd 到新建立的目录,然后仔细检查每个文件确保没有恶意或危险代码. PKGBUILD和所有.install文件都是shell脚本文件,包含若干函数,由makepkg调用并执行。这些函数可以调用任何命令,可能包含恶意或危险代码。makepkg通过fakeroot(意为“假root”)执行这些命令(所以不要以root用户运行makepkg),能在一定程度防止恶意代码损坏系统,但还是小心为好。如有疑问,可以到论坛或邮件列表询问。
$ cd foo
$ nano PKGBUILD
$ nano foo.install

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

$ makepkg -sri

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

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

反馈

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

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

分享和维护软件包

Note: 编辑这一节时请注意 Talk:Arch User Repository#Scope of the AUR4 section 的相关内容.

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

提交软件包

Warning: 在提交前请先熟悉 Arch packaging standards 及所有的"相关文章".

提交软件包的规则

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

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

认证

要向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.

如果已经有了 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邮件列表发条消息.

其他事项

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

删除的条件比较严格。如果无法通过,弃置即可,其他用户可能会接手。

AUR3 软件包的Git仓库

因为AUR的后端迁移到Git,从2015年8月8日起无人维护的包已从AUR中移除,旧的AUR包可以在git://pkgbuild.com/aur-mirror.git 找到. 它以只读方式每天更新.如果不需要提交历史 通过添加 --depth=1 参数能克隆的快些:

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

你也可以通过web浏览器打开http://pkgbuild.com/git/aur-mirror.git/tree 来查找某个软件包,这可能会消耗大量的时间和内存.

阅读下论文章了解更多细节: Git Web interface, forum thread.

也可以在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 数组就足够了。

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(受信用户)愿意维护,否则即便有上千票也不会收录。当然,如果某个受信用户愿意维护一个软件包的话,投票数往往不是决定因素。

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

  • 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.

为啥某个软件包从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 消失的软件包

通过网络访问检查::

#!/bin/bash
for pkg in $(pacman -Qqm); do
    if ! curl -sILfo /dev/null -w '%{http_code}' "https://aur.archlinux.org/packages/$pkg" | grep -q '^2'; then
        echo "$pkg is missing!"
    fi
done

另请参阅