我才刚接触 Arch 发行版差不多一个月,都说玩这系统的在包管理这一部分都是必修课!
因此作者特地搜查了各方面的资料,并做了一系列的总结,希望给需要的人一些参考!
由于本章篇幅有限,并不能涵盖所有知识,因此我只针对几个重点的来讲。
然而要认识 Arch 的 包管理机制,我们还需要从源代码开始讲。
源代码
我们知道所有 Linux/Unix 类系统在最初的时候安装一个软件都是用源代码来安装的。
但由于这个过程太过于乏味,或者说麻烦,甚至效率不高,因此便有了各种各样的包管理器!
而每个系统都有自己的一个包管理机制。尽管各系统之间的包管理器都有些差异,但相同的是
包管理器只是简化了从源代码安装软件的过程的一种工具。以下,我将带你走进 Arch 的核心。

1. 从源代码安装软件

软件,是别人写出来的,并根据一定的许可证而开放出了源代码。
当你拿到了这个源码包,你就可以将这个软件安装在自己的系统上以供日常使用。
从源代码安装一个软件不过是以下几个步骤:
1. 到官方(发布者网站)下载源代码且解压得到源码的目录结构。
2. 进行安装之前的路径配置以及一些其他的设定。
3. 在源码根目录下编译所有源码文件且生成可执行文件
4. 将编译好的可执行文件(有时候还包括库文件、资源文件等)进行打包,或者安装到自己的系统中
于是,在用源代码来安装一个软件的时候,也就是以下这个过程:
配置(configure) -> 编译(make) -> 安装(make install)
关于详细的源代码安装过程,我将在下一章详细解释。

2. PKGBUILD 是什么

PKGBUILD 只是是一个文本文件,它是 Arch 特有的一种机制。
该文件包含以下三部分:
1. 软件包的基本信息
2. 指定软件源码包的路径
3. 软件包要如何编译和打包
其实 PKGBUILD 文件的灵活性非常高,用处非常之多。但这里不过多阐述。
注意:为你让你明白,这里简化了一些细节,下一章我将详细介绍该文件的内容。
可以看出,整个源码安装的过程都被包含在这个文件中。
实际上它负责提供了能够完成安装软件的一系列信息。
可能你已经猜出 一二了,但在真正告诉你之前,我们来看看 pacman

3. pacman

这个东西,我不用多解释,你能安装完整个系统并进行使用,你就已经接触过它好几次了。
但我们还是稍微讲几个重点的,pacman 是一个包管理器,
它只认识 name.pkg.tar.xz 或者 name.pkg.tar.gz 这两种格式的文件,以下将选择其中一种格式来讲。
当我们执行 \# pacman -Sy 的时候,它从 Arch 官方仓库下载已经编译好的 name.pkg.tar.gz 软件包。
当我们执行 \# pacman -S 的时候,它解压 .pkg.tar.gz 包,并根据安装信息拷贝到指定的系统目录中。
换句话说,pacman 它只负责安装一个软件包,并且只能读取 .pkg.tar.xz 或 .pkg.tar.gz 格式的文件
而且,.pkg.tar.xz 或 pkg.tar.gz 包内必须是已经被编译过的软件目录结构。

4. AUR

AUR 是一个社区仓库,简单点说,它就是一个仓库源。
这个仓库很有意思,你可以上传你自己编写的,或是经过修改(再发布的)软件到这个仓库与大家共享。
你也可以从上面下载别人共享的各种软件包来安装和使用。据说仓库里资源非常丰富,几乎你想要的都有。
我们知道,在 Linux 类系统下一个源码包占用的体积不大,但是久而久之,随着源码包的数量增多,
其容量也不可忽视。而且投资成本会增高。并且软件作者还得总是上传源码包到 AUR 仓库中。
于是官方想出了一个两全之策,官方使用一种机制,即用一个文件来保存一系列信息,
这些信息包括了 软件名、从哪获取软件包(下载地址)、依赖于哪些包(包括依赖包的下载地址)、
以及验证软件包的完整性密匙 和 编译安装或者是打包需要的信息。
这个文件很好的解决了投资成本,也方便了软件开发者,软件共享者和软件下载使用者。
于是,官方服务器不需要维护一系列源码包,而只需要保存一系列文本文件,
开发者只需要上传一个 几 k 的文件,下载使用者只需要下载一个文件便可安装软件了。
如果你现在到 AUR 仓库下载任何一个软件,下载到的就是一个文件,
而这个文件就是 PKGBUILD 文件 !

5. makepkg 是什么

最好的总是留在最后讲,终于要讲最核心的部分了,但是,很快就会讲完了。
没错,整个核心,就是 makepkg
makepkg 其实只是一个工具,这个工具它只能读取 PKGBUILD 文件。
我们知道,PKGBUILD 文件整体包含三部分:

软件的基本信息,
软件的获取位置,
软件的编译和打包方式

现在让我们来看看这个命令工具的运行过程:
当你在 PKGBUILD 文件根目录下执行 # makepkg 时,它是这样的
1. 根据软件获取地址,从网上下载,或到指定的位置寻找源码包,并验证完整性
2. 把源码包按固定的本地路径进行解压,并根据基本信息部分来创建与软件包相同名字的目录
3. 按照编译部分,把软件进行编译,并打包为 .pkg.tar.gz 文件格式并保存在当前目录下。
现在,我们可以使用 makepkg 来安装它,也可以使用 pacman 来安装这个软件。
当你使用 makepkg 来安装软件的时候,实际上也是调用了 pacman 来进行安装。
makepkg 本身只负责读取 PKGBUILD 文件,并根据其中的信息来下载,编译,打包,但它不会安装软件。

其实就是这么一回事。重点都在上面已经讲过了。
更多详细的部分,会留在下一章进行详细分析这几个东西。
以下 ABSyaourt 是附加的,你可以了解一下。

6. yaourt 工具

如标题所示,yaourt 是一个工具。如果你要使用它,你还得安装它。
yaourt 工具同样也只认识 PKGBUILD 文件,
这个工具根据 PKGBUILD 文件内容,自动下载软件包,编译,打包,安装。
这是基本的,此外,还有其他一些很实用的功能,这里不再阐述。Wiki可以了解更多。
可以看出,yaourt 其实就是简化 makepkg 命令和 pacman 命令的一个存在。
实现全自动化从 AUR 搜索软件包并安装,而不用自己下载软件的 PKGBUILD 文件。
其实 yaourt 就是把 AURmakepkgpacman 结合在一起的一个存在。
因此在 yaourt 中安装 AUR 源中的软件非常方便。

7. ABS 是什么

首先我们来重复一下 AUR
AUR 的全称为 Archlinux User-community Repository
也就是 ArchLinux 用户社区的软件库。
当你要安装软件的时候,你得从 AUR 源里下载 PKGBUILD 文件,再进行安装。
当你修改了一个软件且成功编译和安装,你想把这个修改的软件分享给所有 Arch 用户,
你得登录到 AUR 仓库然后进行上传,大家才能看到你的 PKGBUILD 文件。才能共享出去。

接着我们来了解一些官方的仓库
当你在命令行中执行这个命令 # pacman -Syu 或者是 # pacman -Sy
就会看到如下输出:

core ….
extra ….
community …..

core: 官方仓库,内包含构建一个基本系统必须的所有组件或软件,即系统的核心软件仓库。
extra: 官方仓库,内包含构建一个基本系统非必须的一些用户常用软件,即常用软件仓库。
community: 社区仓库,内包含的软件大都是从 AUR 仓库那投票进来的且都是可被信任的。
AUR: 非官方仓库,面向广大 Arch 用户的非官方仓库,所有用户自由上传/下载软件包。

其实这些都是 Arch 的仓库,或者说是软件库也行。其实仓库不止这这些,
但无论如何,coreextra 仓库由 Arch 的 核心人员维护,即官方软件仓库。
此外,还有 multilib 仓库则包含了 64 位系统中包含的 32 位软件和32位库
testing 仓库、community-testing 仓库 和 multilib-testing 仓库
它们构成了 texting 系列的仓库。主要用于在移到正式仓库之前的软件包作为测试的一类仓库。
正是由于 AUR 是非官方仓库,因此不在 pacman 的更新列表里。所以 yaourt 才为此提供了方便。

ABS 全称 Archlinux Build System 即一个编译系统。
它的作用就是从 coreextracommunity 三个仓库中同步/下载 PKGBUILD 文件到本地,
当你要安装某个软件的时候,就到 [ABS[]] 目录(与官方目录是相同的)下找到你需要的软件的 PKGBUILD 文件,
为了不改变原来的文件,你可以拷贝到自己home目录下的子目录中,接着你就可以运行 makepkg 命令
pacman 命令来安装了。好处在哪??????
1. 你可以从源码安装软件包,而非编译好的二进制包。
2. 在安装过程中,你可以自己编辑 PKGBUILD 文件来按自己的需求安装某个软件。
3. 可以方便你在不影响原来的文件的情况下测试和修改一些软件,以达到自己的需求。

但是遗憾的是,ArchLinux 官方在 2017-08-15 日宣布放弃支持 ABS 了。
可以忽略这一部分,当然,了解一下这个伟大的一个机制也是个不错的选择。
我可惜的是,当我开始玩 Arch 的时候 ABS 就被放弃了。据说有个替代品。
你可到这里看一下: https://www.archlinux.org/news/deprecation-of-abs/

补充:
了解一下 ABS 的目录结构,实际上也是官方仓库的目录结构。
ABS 分三级目录:

一级目录: 是软件的仓库名,core、extra、community 三个文件夹
二级目录: 是各个仓库下的软件名,是以软件命名的文件夹。
三级目录: 是一个 PKGBUILD 文件 (有时可能还包含一些其它相关的补丁或其它打包所需的文件)

总结

AUR 为了解决了官方问题,和方便了所有人而提供了 PKGBUILD 文件机制
PKGBUILD:

1. 减少了服务器负担,和投资成本
2. 方便了所有人下载/上传软件源码的过程
3. 同时还简化了从源码安装软件的过程

makepkg 命令替代了 make 命令 和 make install 是对 PKGBUILD 文件的一个实际动作。
pacman 命令只负责安装已被编译好且被打包为 .pkg.tar.gz 或 .pkg.tar.xz 格式的软件包。
ABS 是更方便的让你下载安装软件和上传共享软件的一个平台,或者说是一套系统。