主要的包管理器似乎是(排名不分先后) apt、yum 和 pacman。但归根结底,有什么区别呢?我的理解是,您可以在任何发行版上使用它们中的任何一个,尽管每个发行版似乎都偏爱其中一种。
所以,我的问题是:主要包管理器之间的核心区别是什么?为什么我应该考虑其中之一而不是另一个?
答案1
好吧,这基本上是关于它们处理的数据包类型(apt - deb; yum - rpm; pacman - tar.gz),其中这些打包系统本身有点不同......然后是它们处理依赖关系的情况如何(非常重要)...当然 - 他们提供的选项以及他们如何呈现有关正在安装的软件包的数据...我想说这些将是一些主要区别...
答案2
您引用的包管理器实际上只是底层打包系统前端的选择。例如,yum 是 RPM 的前端,还存在其他前端(smart、zypper、apt4rpm 等)。同样,基于 DPKG 的系统默认有两个或三个包管理器(Synaptic、Aptitude、apt-get、dselect 等)。我对 Pacman 的了解还不够,无法在那里发表评论。
前端实际上并不是那么有趣 - 它需要处理一定程度的依赖关系解析,但包管理真正“困难”的部分来自底层包格式。
再说一遍,我无法评论 Pacman,但在 RPM 和 DPKG 之间,RPM 的工作更艰巨 - 您可以在 RPM 包中定义极其复杂的关系,解析器需要以某种方式处理这些关系,并且在你的包定义可能会导致痛苦。就依赖关系信息而言,DPKG 是一种更简单的格式,因为您只能定义两件事 - 包名称和版本 - 而使用 RPM,您可以执行复杂的操作,例如依赖关系中的版本化符号等。
因此,回答你的问题,单一格式中管理者的选择仅取决于个人品味(我主要使用能力)。格式之间的选择取决于您想要的控件的细粒度程度(讽刺的是,您希望该控件在您的打包中引入多少复杂性)。
答案3
包管理器可以分为两大类:
二进制包管理器:该软件是在某个远程计算机上构建的,您只能得到编译的结果。最流行(唯一?)的格式是 deb (apt) 和 rpm (yum)。
源包管理器:直接获取软件代码源码,本地编译。一些源包管理器有 emerge、pacman、yaourt、slackpkg、来自 BSD、Mac Ports、Homebrew、pip (Python)、gem (Ruby) 等。
二进制包的主要优点是安装时间大大缩短如果您的互联网带宽足够高。重现性也更好至于包的一个版本将始终对应一个且仅一个二进制文件。
缺点是包装尺寸(比源代码大几倍)和系统刚性:与 Windows 不同,Linux 上的二进制文件通常嵌入硬编码路径,并且很难生成可重新定位的二进制文件(可以移动的二进制文件)。即二进制包管理通常只能在/usr 中工作。
为了让您了解源代码和二进制文件之间的区别,Debian 档案目前源略多于 1Tb,但只有 72Gb!一种架构,例如 amd64,约为 95+92=187Gb(大 2.5 (1))。
二进制包的另一个问题是固定编译标志:系统包中可能会禁用一些可选功能,出于兼容性原因也可能会禁用一些现代 CPU 扩展...
一个有争议的点是二进制包管理器倾向于提供旧版本。事实上,主要是源代码包管理器在每次发布后不久就为每个包提供最新更新。然而,二进制包在到达存储库之前往往会经过广泛的测试(毕竟,它们有为所有架构成功编译!)。
为了帮助您进行选择,一种常见的模式是对不想在配置过程中花费大量时间的服务器和盒子使用二进制包管理器。对于“高级用户”使用的开发机器以及需要前沿库的地方,源包管理器往往会更频繁地使用。
(1) 95Gb+92Gb 是 amd64 软件包和“所有”软件包的总和,这些软件包是与体系结构无关的文件(多媒体资源、字体、文档等)