每个电脑设备都使用某种形式的软件来执行其预定任务。在软件开发的早期,对产品进行了严格的bug和其他缺陷测试。在过去的十多年里,软件通过互联网发布,目的是通过应用新版本的软件来修复任何错误。在某些情况下,每个应用程序都有自己的更新程序。在其他情况下,则由用户自己决定如何获得和升级软件。
[if !vml]
[endif]
Linux早期采用了维护集中位置的做法,用户可以在这里查找和安装软件。在这篇文章中,我将讨论linux上软件安装的历史,以及现代操作系统是如何与无休止的洪流保持同步的。
在软件包管理器之前,Linux上的软件是如何安装的?
从历史上看,软件要么是通过FTP提供的,要么是通过邮件列表提供的(最终这个发行版将包括基本网站)。只有几个小文件包含了创建二进制文件的指令(通常在tarfile中)。您将解压缩文件,读取自述文件,只要您有gcc或其他形式的C编译器,您通常会运行一个./configure带有一些属性列表的脚本,例如将文件粘贴到库文件、创建新二进制文件的位置等。此外,configure进程将检查您的系统是否存在应用程序依赖关系。如果缺少任何主要需求,配置脚本将退出,在满足所有依赖关系之前无法继续安装。如果成功完成配置脚本,则Makefile都会被创造出来。
什么是包裹?
软件包是为了对抗这种复杂性而发明的。为了便于移植和存储,包将多个数据文件一起收集到一个存档文件中,或者简单地压缩文件以减少存储空间。包中包含的二进制文件是根据开发人员选择的正常默认值预编译的。包还包含元数据,如软件名称、用途说明、版本号和软件正常运行所需的依赖项列表。
虽然包本身并不直接管理依赖项,但它们在Linux软件管理方面向前迈进了一大步。
什么是软件存储库?
几年前,在智能手机泛滥之前,对于许多用户来说,如果他们没有参与Linux生态系统的话,建立一个软件存储库的想法是很难理解的。到目前为止,大多数Windows用户似乎仍然需要打开网页浏览器来搜索和安装新的软件。然而,那些拥有智能手机的人已经习惯了软件“商店”的想法。智能手机用户获取软件的方式和软件包管理器的工作方式并无不同。虽然已经有几次尝试为软件库创建一个有吸引力的UI,但绝大多数Linux用户仍然使用命令行来安装软件包。软件存储库是系统配置要使用的任何存储库的所有可用软件的集中列表。
下面是一些最著名的包管理器的简要概述:
基于rpm的包管理器
更新基于RPM的系统,特别是那些基于RedHat技术的系统,有着非常有趣和详细的历史。实际上,当前版本的百胜(用于企业发行版)和DNF(对于社区)组合了几个开源项目,以提供它们当前的功能。
最初,RedHat使用了一个名为rpm(红帽包管理器),至今仍在使用。但是,它的主要用途是安装RPM,这是您在本地拥有的,而不是搜索软件存储库。包管理器名为up2date创建的目的是通知用户包的更新,并使他们能够搜索远程存储库并轻松安装依赖项。在达到目的同时,一些社区成员认为up2date有一些明显的缺点。
目前对百胜的咒语来自几种不同的社区努力。YellowdogUpdater(YUP)是由Terra软件解决方案公司的人员在1999-2001年开发的,作为图形化安装程序的后端引擎。黄狗Linux。杜克大学喜欢是的想法,并决定改进它。他们创造了改良的黄狗更新器(Yum)它最终被改造成帮助管理大学的红帽Linux系统。百胜越来越受欢迎,据估计,到2005年,它将被Linux市场的一半以上所使用。今天,几乎所有使用RPM的Linux发行版都使用YUM进行包管理(除了一些显著的例外)。
基于debian的包管理器
Debian是目前维护最古老的Linux发行版之一,它的系统非常类似于基于RPM的系统。他们用.deb包,可以由名为dpkg. dpkg非常类似于rpm因此,它是为管理本地可用的包而设计的。它不进行依赖解析(尽管它进行依赖检查),也没有与远程存储库交互的可靠方法。为了提高用户体验和易用性,debian项目委托了一个名为神灵。这个代号最终被放弃,改为高级包装工具(APT).
基于ARCH的软件包管理器
ARCH Linux使用名为帕克曼。不像.deb或.rpm文件,Pacman使用了更传统的tarball和LZMA 2压缩(.tar.xz)这使得Arch linux包比其他形式的压缩存档要小得多(例如gzip)最初是在2002年发布的,Pacman已经得到了稳步的迭代和改进。Pacman的主要优点之一是它支持拱筑体系,一种从源构建包的系统。构建系统包含一个名为PKGBUILD的文件,该文件包含元数据(例如版本号、修订、依赖项等)以及一个shell脚本,其中包含编译符合Arch Linux要求的包所需的标志。然后将产生的二进制文件打包到上述文件中。.tar.xz文件供帕克曼使用。
这个系统导致创建了ARCH用户库(Aur)是一个社区驱动的存储库,包含PKGBUILD文件和支持补丁或脚本。这使得几乎无穷无尽的软件可以在Arch中获得。这个系统的明显优点是,如果用户希望向公众提供软件,他们不需要经过官方渠道才能在主要存储库中接受软件。缺点是它依赖社区管理,类似于码头枢纽,CANTEN的快照包,或其他类似的机制。有许多特定于Aur的包管理器,它们可以用于从Aur中的PKGBUILD文件中下载、编译和安装。
结语
当然,本文只触及包管理器所能做的事情的表面。还有很多其他的包管理器,我无法在这个空间中介绍。一些发行版,比如Ubuntu或ElementOS,已经竭尽全力提供了一种图形化的包管理方法。最后推荐《Linux就该这么学》这本书,非常适合小白入门~