每个电脑设备都使用某种形式的软件来执行其预定任务。在软件开发的早期,对产品进行了严格的bug和其他缺陷测试。在过去的十多年里,软件通过互联网发布,目的是通过应用新版本的软件来修复任何错误。在某些情况下,每个应用程序都有自己的更新程序。在其他情况下,则由用户自己决定如何获得和升级软件。

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就该这么学》这本书,非常适合小白入门~

Linux系统-----包管理器的演变的更多相关文章

  1. ARCH Linux pacman 包管理器出错总结

    最在使用ARCH的时候使用命令: sudo pacman -S Ruby 终端报错: error: could not open file /var/lib/pacman/sync/apricity- ...

  2. 在ubtuntu中使用包管理器 linux-brew

    用惯了mac的程序员回到linux开发平台总觉得有点不适应,这是因为linux的界面没有mac那么精美,而且linux的包管理器没有mac上面的homebrew那么强大.mac程序员遇到库的依赖问题时 ...

  3. [转]给Linux系统管理员准备的Nmap命令的29个实用范例+ tsysv 系统服务器管理器

    原文链接:http://os.51cto.com/art/201401/428152.htm Nmap即网络映射器对Linux系统/网络管理员来说是一个开源且非常通用的工具.Nmap用于在远程机器上探 ...

  4. Linux包管理器

    按Linux系统分类 Redhat系列:Redhat(本身就是Centos).Centos.Fedora等,采用Dpkg包管理器 Debian系列:Debian.Ubuntu等,使用RPM包管理器 R ...

  5. Linux新手的最佳包管理器

    一个 Linux 新用户应该知道他或她的进步源自于对 Linux 发行版的使用,而 Linux 发行版有好几种,并以不同的方式管理软件包. 在 Linux开发 中,包管理器非常重要,知道如何使用多种包 ...

  6. 把玩Alpine linux(二):APK包管理器

    导读 Alpine Linux非常精简,开机内存占用也在二三十兆大,没有拆箱即用,就需要我们自己去做一些了解和配置 Alpine Linux的优劣 优势 Alpine Linux的Docker镜像特点 ...

  7. Arch Linux 独特的包管理器相关名词解释及用法对照

    https://wiki.archlinux.org/index.php/PacmanPacman包管理器是Arch Linux的主要特色之一.它结合了简单的二进制包格式和易于使用的构建系统.pacm ...

  8. 在linux中使用包管理器安装node.js

    网上文章中,在linux下安装node.js都是使用源码编译,其实node的github上已经提供了各个系统下使用各自的包管理器(package manager)安装node.js的方法. 1. 在U ...

  9. linux 各种发行版及包管理器的关系

    linux 各种发行版及包管理器的关系 Linux发行版列表 基于Kpkg(Debian 系) Debian GNU / Linux 及其派生发行版使用deb软件包格式,并使用dpkg及其前端作为包管 ...

随机推荐

  1. MBR扇区故障修复!

    一:进行分区且格式化硬盘 [root@roomc~]#mkfs -t ext4 /dev/sdb1    //格式化sdb1盘 二:模拟破坏/sda主硬盘破坏再修复! [root@roomc~]#mk ...

  2. nyoj 100

    怒刷水题... AC代码: #include <stdio.h> int main() { int x,t,count; scanf("%d",&t); whi ...

  3. Mybatis学习day2

    Mybatis初探 之前已经用利用mybatis实现链接数据库查询所有用户的信息(用的是在resources下建立和Dao层一样目录的xml实现的).这次再来看一下增删改查等其它的操作. 利用Myba ...

  4. 275 原型与原型链:显式原型prototype ,隐式原型__proto__,隐式原型链,原型链_属性问题,给原型对象添加属性/方法

    1.所有函数都有一个特别的属性 prototype : 显式原型属性 [普通构造函数的实例对象没有prototype 属性,构造函数有__proto__属性,原型对象有__proto__属性 ] 2. ...

  5. UITextField的快速基本使用代码块

    概述 UITextField在界面中显示可编辑文本区域的对象. 您可以使用文本字段来使用屏幕键盘从用户收集基于文本的输入.键盘可以配置许多不同类型的输入,如纯文本,电子邮件,数字等等.文本字段使用目标 ...

  6. 九 三种Struts2访问Servlet方式总结

    Servlet是单例的,Action是多例的. 多个程序访问Servlet只会创建一个Servlet对象,多个程序访问Action会创建对应的多个Action对象. 跳转页面可以获取对象的属性,说明使 ...

  7. 【原】Web Polygraph 安装

    1.下载 # wget http://www.web-polygraph.org/downloads/srcs/polygraph-4.3.2-src.tgz 2.解压 # tar zxvf poly ...

  8. J.K.罗琳女士---《失败的好处和想象的重要性》

    目录 sohu ruanyifeng web sohu http://www.sohu.com/a/166181502_467718 <哈利波特>的作者J.K.罗琳女士在出席一次哈佛大学的 ...

  9. c++读取注册表的实例

    // CRegisterTest.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #in ...

  10. codeblocks与MINGW的配置

    最好直接下载带GW的Codeblocks,然后配置编译器,调试器,有几个地方要注意: 1 在setting->debugger下要搜到gdb.exe/gdb32.exe 2在debug-acti ...