Linux 界的两大主流: RPM 与 DPKG

目前在 Linux 界软件安装方式最常见的有两种,分别是:

  • dpkg:

这个机制最早是由 Debian Linux 社群所开发出来的,透过 dpkg 的机制, Debian 提供的软件就能够简单 的安装起来,同时还能提供安装后的软件信息,实在非常不错。 只要是衍生于 Debian 的其他 Linux distributions 大多使用 dpkg 这个机制来管理软件的, 包括 B2D, Ubuntu 等等。

  • RPM:

这个机制最早是由 Red Hat 这家公司开发出来的,后来实在很好用,因此很多 distributions 就使用这个机 制来作为软件安装的管理方式。包括 Fedora, CentOS, SuSE 等等知名的开发商都是用这咚咚。

在 dpkg 管理机制上就开发出 APT 的在线升级机制,RPM 则依开发商的不同,有 Red Hat 系统的 yum , SuSE 系统的 Yast Online Update (YOU) 等。

distribution 代表 软件管理机制 使用指令 在线升级机制(指令)
Red Hat/Fedora RPM rpm, rpmbuild YUM (yum)
Debian/Ubuntu DPKG dpkg APT (apt-get)

什么是 RPM 与 SRPM

RPM 全名是『 RedHat Package Manager 』简称则为 RPM 。顾名思义,当初这个软件管理的机制 是由 Red Hat 这家公司发展出来的。 RPM 是以一种数据库记录的方式来将你所需要的软件安装到 你的 Linux 系统的一套管理机制。

他最大的特点就是将你要安装的软件先编译过, 并且打包成为 RPM 机制的包装文件,透过包装好 的软件里头默认的数据库记录, 记录这个软件要安装的时候必须具备的相依属性软件,当安装在你 的 Linux 主机时, RPM 会先依照软件里头的数据查询 Linux 主机的相依属性软件是否满足, 若 满足则予以安装,若不满足则不予安装。那么安装的时候就将该软件的信息整个写入 RPM 的数据 库中,以便未来的查询、验证与反安装!这样一来的优点是:

  1. 由于已经编译完成并且打包完毕,所以软件传输与安装上很方便 (不需要再重新编译);
  2. 由于软件的信息都已经记录在 Linux 主机的数据库上,很方便查询、升级与反安装

通常不同的 distribution 所释出的 RPM 文件,并不能用在其他的 distributions 上。举例来说, Red Hat 释出的 RPM 文件,通常无法直接在 SuSE 上面进行安装的。这样可以发现这些软件管理机制的问题是:

  1. 软件文件安装的环境必须与打包时的环境需求一致或相当;
  2. 需要满足软件的相依属性需求;
  3. 反安装时需要特别小心,最底层的软件不可先移除,否则可能造成整个系统的问题!

SRPM 是什么呢?顾名思义,他是 Source RPM 的意思,也就是这个 RPM 文 件里面含有原始码。特别注意的是,这个 SRPM 所提供的软件内容『并没有经过编译』, 它提供的是原始码喔!

通常 SRPM 的扩展名是以 ***.src.rpm 这种格式来命名的。不过,既然 SRPM 提供的是原始码,那 么为什么我们不使用 Tarball 直接来安装就好了?这是因为 SRPM 虽然内容是原始码,但是他仍然 含有该软件所需要的相依性软件说明、以及所有 RPM 文件所提供的数据。同时,他与 RPM 不同 的是,他也提供了参数配置文件 (就是 configure 与 makefile)。所以,如果我们下载的是 SRPM , 那么要安装该软件时,你就必须要:

  • 先将该软件以 RPM 管理的方式编译,此时 SRPM 会被编译成为 RPM 文件;
  • 然后将编译完成的 RPM 文件安装到 Linux 系统当中

RPM 文件必须 要在相同的 Linux 环境下才能够安装,而 SRPM 既然是原始码的格式,自然我们就可以透过修改 SRPM 内的参数配置文件,然后重新编译产生能适合我们 Linux 环境的 RPM 文件,如此一来,不 就可以将该软件安装到我们的系统当中,而不必与原作者打包的 Linux 环境相同了?这就是 SRPM 的用处了!

文件格式 檔名格式 直接安装与否 内含程序类型 可否修改参数并编译
RPM xxx.rpm 已编译 不可
SRPM xxx.src.rpm 不可 未编译之原始码

什么是 i386, i586, i686, noarch, x86_64

从上面的说明,现在我们知道 RPM 与 SRPM 的格式分别为:

xxxxxxxxx.rpm <==RPM 的格式,已经经过编译且包装完成的 rpm 文件;
xxxxx.src.rpm <==SRPM 的格式,包含未编译的原始码信息。

那么我们怎么知道这个软件的版本、适用的平台、编译释出的次数呢?只要透过档名就可以知道了! 例如 rp-pppoe-3.11-5.el7.x86_64.rpm 这的文件的意义为:

rp-pppoe - 3.11 - 5 .el7.x86_64 .rpm
软件名称 软件的版本信息 释出的次数 适合的硬件平台 扩展名

除了后面适合的硬件平台与扩展名外,主要是以『-』来隔开各个部分,这样子可以很清楚的发现该 软件的名称、 版本信息、打包次数与操作的硬件平台!好了,来谈一谈每个不同的地方吧:

  • 软件名称:

当然就是每一个软件的名称了!上面的范例就是 rp-pppoe 。

  • 版本信息:

每一次更新版本就需要有一个版本的信息,否则如何知道这一版是新是旧?这里通常又分为主版本跟次版本。以上面为例,主版本为 3 ,在主版本的架构下更动部分原始码内容,而释出一个新的版本,就是次版 本啦!以上面为例,就是 11 啰!所以版本名就为 3.11

  • 释出版本次数:

通常就是编译的次数啦!那么为何需要重复的编译呢?这是由于同一版的软件中,可能由于有某些 bug 或 者是安全上的顾虑,所以必须要进行小幅度的 patch 或重设一些编译参数。 设定完成之后重新编译并打包 成 RPM 文件!因此就有不同的打包数出现了!

  • 操作硬件平台:

由于 RPM 可以适用在不同的操作平台上,但是不同的平台设定的参数还是有所差 异性! 并且,我们可以针对比较高阶的 CPU 来进行优化参数的设定,这样才能够使用高阶 CPU 所带来 的硬件加速功能。 所以就有所谓的 i386, i586, i686, x86_64 与 noarch 等的文件名出现了!

平台名称 适合平台说明
i386 几乎适用于所有的 x86 平台,不论是旧的 pentum 或者是新的 Intel Core 2 与 K8 系列的 CPU 等等,都可以正常的工作!那个 i 指的是 Intel 兼容的 CPU 的意思,至于 386 不用说,就是 CPU 的等级啦!
i586 就是针对 586 等级的计算机进行优化编译。那是哪些 CPU 呢?包括 pentum 第一代 MMX CPU, AMD 的 K5, K6 系列 CPU (socket 7 插脚) 等等的 CPU 都算是这个等级;
i686 在 pentun II 以后的 Intel 系列 CPU ,及 K7 以后等级的 CPU 都属于这个 686 等级! 由于 目前市面上几乎仅剩 P-II 以后等级的硬件平台,因此很多 distributions 都直接释出这种等级的 RPM 文件。
x86_64 针对 64 位的 CPU 进行优化编译设定,包括 Intel 的 Core 2 以上等级 CPU ,以及 AMD 的Athlon64 以后等级的 CPU ,都属于这一类型的硬件平台。
noarch 就是没有任何硬件等级上的限制。一般来说,这种类型的 RPM 文件,里面应该没有 binary program 存在, 较常出现的就是属于 shell script 方面的软件。

RPM 的优点

由于 RPM 是透过预先编译并打包成为 RPM 文件格式后,再加以安装的一种方式,并且还能够进 行数据库的记载。 所以 RPM 有以下的优点:

  • RPM 内含已经编译过的程序与配置文件等数据,可以让用户免除重新编译的困扰;
  • RPM 在被安装之前,会先检查系统的硬盘容量、操作系统版本等,可避免文件被错误安装;
  • RPM 文件本身提供软件版本信息、相依属性软件名称、软件用途说明、软件所含文件等信息,便于了解软件;
  • RPM 管理的方式使用数据库记录 RPM 文件的相关参数,便于升级、移除、查询与验证。

为什么 RPM 在使用上很方便呢?我们前面提过, RPM 这个软件管理员所处理的软件,是由软件 提供者在特定的 Linux 作业平台上面将该软件编译完成并且打包好。那使用者只要拿到这个打包好 的软件, 然后将里头的文件放置到应该要摆放的目录,不就完成安装啰?

有些软件是有相关性的,例如要安装网卡驱动程序,就 得要有 kernel source 与 gcc 及 make 等软件。那么我们的 RPM 软件是否一定可以安装完成呢?如 果该软件安装之后,却找不到他相关的前驱软件, 那不是挺麻烦的吗?因为安装好的软件也无法使 用啊!

为了解决这种具有相关性的软件之间的问题 (就是所谓的软件相依属性),RPM 就在提供打包的软件 时,同时加入一些讯息登录的功能,这些讯息包括软件的版本、 打包软件者、相依属性的其他软件、 本软件的功能说明、本软件的所有文件记录等等,然后在 Linux 系统上面亦建立一个 RPM 软件数据库,如此一来,当你要安装某个以 RPM 型态提供的软件时,在安装的过程中, RPM 会去检验 一下数据库里面是否已经存在相关的软件了,如果数据库显示不存在,那么这个 RPM 文件『预设』 就不能安装。呵呵!没有错,这个就是 RPM 类型的文件最为人所诟病的『软件的属性相依』问题 啦!

RPM 属性相依的克服方式: YUM 在线升级

为了重复利用既有的软件功能,因此很多软件都会以函式库的方式释出部分功能,以方便其他软件的呼叫应用。

因为有上述的现象,因此 RPM 软件文件就会有所谓的属性相依的问题产生 。那有没有办法解决啊?前面不是谈到 RPM 软件文件内部会记录相依属 性的数据吗?那想一想,要是我将这些相依属性的软件先列表, 在有要安装软件需求的时候,先到 这个列表去找,同时与系统内已安装的软件相比较,没安装到的相依软件就一口气同时安装起来, 那 不就解决了相依属性的问题了吗?有没有这种机制啊?有啊!那就是 YUM 机制的由来!

CentOS(1)先将释出的软件放置到 YUM 服务器内,然后(2)分析这些软件的相依属性问题,将软件内的记录信息写下来 (header)。 然后再将这些信息分析后记录成软件相关性的列表列表。这些列表数 据与软件所在的本机或网络位置可以称呼为容器或软件仓库或软件库 (repository)。 当客户端有软件 安装的需求时,客户端主机会主动的向网络上面的 yum 服务器的软件库网址下载清单列表, 然后 透过列表列表的数据与本机 RPM 数据库已存在的软件数据相比较,就能够一口气安装所有需要的 具有相依属性的软件了。 整个流程可以简单的如下图说明:

Linux学习-软件管理员简介的更多相关文章

  1. Linux学习之路--简介

    1 Linux简介 UNIX与Linux发展史 Unix在1969年,美国贝尔实验室的肯汤普森在DEC PDP-7机器上开发出了UNIX系统.Linux出现于1991年,是由芬兰赫尔辛基大学学生李纳斯 ...

  2. linux 学习-软件的安装

    Linux软件的安装rpm -ivh安装软件全名 -i install 安装 -v verbose 显示详细信息 -h hash 显示进度 --nodeps 不检测依赖性(不推荐使用) rpm -U ...

  3. linux学习-systemd-journald.service 简介

    过去只有 rsyslogd 的年代中,由于 rsyslogd 必须要开机完成并且执行了 rsyslogd 这个 daemon 之 后,登录文件才会开始记录.所以,核心还得要自己产生一个 klogd 的 ...

  4. Linux学习-软件磁盘阵列 (Software RAID)

    什么是 RAID 磁盘阵列全名是『 Redundant Arrays of Inexpensive Disks, RAID 』,英翻中的意思是:容错式廉价磁盘阵列.RAID 可以透过一个技术(软件或硬 ...

  5. Linux学习:Makefile简介及模板

    一.基本概念介绍: Makefile 文件就是告诉make命令需要怎么样的去编译和链接程序. 编写Makefile的基本规则: 1.如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接. 2. ...

  6. Linux内核学习笔记-1.简介和入门

    原创文章,转载请注明:Linux内核学习笔记-1.简介和入门 By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...

  7. (大数据工程师学习路径)第一步 Linux 基础入门----Linux 下软件安装

    介绍 介绍 Ubuntu 下软件安装的几种方式,及 apt,dpkg 工具的使用. 一.Linux 上的软件安装 通常 Linux 上的软件安装主要有三种方式: 在线安装 从磁盘安装deb软件包 从二 ...

  8. Linux 学习 (十一) 软件安装管理

    Linux软件安装管理 学习笔记 软件包简介 软件包分类: 源码包 :脚本安装包 二进制包(RPM 包.系统默认包) 源码包的优点: 开源,如果有足够的能力,可以修改源代码 可以自由选择所需的功能 软 ...

  9. Linux学习笔记-Linux系统简介

    Linux学习笔记-Linux系统简介 UNIX与Linux发展史 UNIX是父亲,Linux是儿子. UNIX发行版本 操作系统 公司 硬件平台 AIX IBM PowerPC HP-UX HP P ...

随机推荐

  1. 3D旋转仿伪3D立体效果,手机端

    偶然在书上看到这段代码,感觉很舒服,直街附代码吧,原生JS.手机端旋转效果仿立体效果. 纯JS代码足够了. var img=document.createElement('img'); img.set ...

  2. ASPCTJ

    ublic interface ISomeService { public void doSome(); public String dade(); } public class SomeServic ...

  3. Java基础(变量、运算符)

    第2天 Java基础语法 今日内容介绍 u 变量 u 运算符 第1章 变量 1.1 变量概述 前面我们已经学习了常量,接下来我们要学习变量.在Java中变量的应用比常量的应用要多很多.所以变量也是尤为 ...

  4. [20190620]日常学习记录(三)-初识promise及vuex

    在学习promise之前重温了Ajax的原生js实现, 在原生js中发送一个http请求首先new XMLHttpRequest() 然后定义状态变更事件 浏览器监听请求的状态,触发不同状态下相应的代 ...

  5. ajax在购物车中的应用

    代码如下: 购物车页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http: ...

  6. C语言的sprintf()和snprintf()

    1.sprintf()函数 送格式化输出到字符串中,返回实际输出到字符串中的个数. 例如: char buffer[80]; sprint(buffer,"1234567890") ...

  7. POJ 2411 Mondriaan's Dream (状压DP,骨牌覆盖,经典)

    题意: 用一个2*1的骨牌来覆盖一个n*m的矩形,问有多少种方案?(1<=n,m<=11) 思路: 很经典的题目,如果n和m都是奇数,那么答案为0.同uva11270这道题. 只需要m个b ...

  8. Linux中根据访问日志统计访问量最高的前N个IP

    前段时间面试中被问到如上问题,日常不怎么注意积累,以此谨记. 访问IP 页面[nxuser@im440-zh test]$ vi log 135.252.172.181 page1 136.252.1 ...

  9. UVA 12171 (hdu 2771)sculptrue(离散化)

    以前对离散化的理解不够,所以把端点和区间区分来考虑但是做完这题以后有了新的认识: 先来看一个问题:给你以下的网格,你需要多少空间去存储红点区间的信息呢? 只需要图上所示的1,2,3,4个点就足够表示红 ...

  10. 如何使用Python生成200个优惠券(激活码)

    解析: 常见的优惠券(激活码)是由数字.字母(大小写)组成: string.ascii_letters   26个大小写字母: string.digits 0-9数字: 随机组合 使用random.s ...