鸟哥的Linux私房菜(基础篇)- 第二十三章、软件安装: RPM, SRPM 与 YUM 功能

第二十三章、软件安装: RPM, SRPM YUM 功能
最近升级日期:2009/09/18

虽然使用原始码进行软件编译可以具有客制化的配置,但对於 Linux distribution 的发布商来说,则有软件管理不易的问题,毕竟不是每个人都会进行原始码编译的。如果能够将软件预先在相同的硬件与操作系统上面编译好才发布的话,不就能够让相同的 distribution 具有完全一致的软件版本吗果再加上简易的安装/移除/管理等机制的话,对於软件控管就会简易的多。有这种东西吗的,那就是 RPM 与 YUM 这两个好用的咚咚。既然这么好用,我们当然不能错过学习机会罗!赶紧来参详参详!


1. 软件管理员简介
  1.1 Linux 界的两大主流: RPM 与 DPKG
  1.2 什么是 RPM 与 SRPM
  1.3 什么是 i386, i586, i686, noarch, x86_64
  1.4 RPM 的优点
  1.5 RPM 属性相依的克服方式: YUM 线上升级
2. RPM 软件管理程序: rpm
  2.1 RPM 默认安装的路径
  2.2 RPM 安装 (install)
  2.3 RPM 升级与升级 (upgrade/freshen)
  2.4 RPM 查询 (query)
  2.5 RPM 验证与数码签章 (Verify/signature)
  2.6 RPM 反安装与重建数据库 (erase/rebuilddb)
3. SRPM 的使用: rpmbuild
  3.1 利用默认值安装 SRPM 文件 (–rebuid/–recompile)
  3.2 SRPM 使用的路径与需要的软件
  3.3 配置档的主要内容 (*.spec)
  3.4 SRPM 的编译命令 (-ba/-bb)
  3.5 一个打包自己软件的范例
4. YUM 线上升级机制
  4.1 利用 yum 进行查询、安装、升级与移除功能
  4.2 yum 的配置档
  4.3 yum 的软件群组功能
  4.4 全系统自动升级
5. 管理的抉择:RPM 还是 Tarball
6. 重点回顾
7. 本章习题
8. 参考数据与延伸阅读
9. 针对本文的建议:http://phorum.vbird.org/viewtopic.php=23893

小标题的图示 Linux 界的两大主流: RPM 与 DPKG

由於自由软件的蓬勃发展,加上大型 Unix-Like 主机的强大效能,让很多软件开发者将他们的软件使用 Tarball 来释出。后来 Linux 发展起来后,由一些企业或社群将这些软件收集起来制作成为 distributions以发布这好用的 Linux 操作系统。但后来发现到,这些 distribution 的软件管理实在伤脑筋,如果软件有漏洞时,又该如何修补呢用 tarball 的方式来管理吗常常不晓得到底我们安装过了哪些程序此,一些社群与企业就开始思考 Linux 的软件管理方式。

如同刚刚谈过的方式,Linux 开发商先在固定的硬件平台与操作系统平台上面将需要安装或升级的软件编译好,然后将这个软件的所有相关文件打包成为一个特殊格式的文件,在这个软件文件内还包含了预先侦测系统与相依软件的脚本,并提供记载该软件提供的所有文件资讯等。最终将这个软件文件释出。用户端取得这个文件后,只要透过特定的命令来安装,那么该软件文件就会依照内部的脚本来侦测相依的前驱软件是否存在,若安装的环境符合需求,那就会开始安装,安装完成后还会将该软件的资讯写入软件管理机制中,以达成未来可以进行升级、移除等动作呢。

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

  • dpkg
    这个机制最早是由 Debian Linux 社群所开发出来的,透过 dpkg 的机制, Debian 提供的软件就能够简单的安装起来,同时还能提供安装后的软件资讯,实在非常不错。只要是衍生於 Debian 的其他 Linux distributions 大多使用 dpkg 这个机制来管理软件的,包括 B2D, Ubuntu 等等。
  • RPM
    这个机制最早是由 Red Hat 这家公司开发出来的,后来实在很好用,因此很多 distributions 就使用这个机制来作为软件安装的管理方式。包括 Fedora, CentOS, SuSE 等等知名的开发商都是用这咚咚。

如前所述,不论 dpkg/rpm 这些机制或多或少都会有软件属性相依的问题,那该如何解决呢实前面不是谈到过每个软件文件都有提供相依属性的检查吗么如果我们将相依属性的数据做成列表,等到实际软件安装时,若发生有相依属性的软件状况时,例如安装 A 需要先安装 B 与 C ,而安装 B 则需要安装D 与 E 时,那么当你要安装 A ,透过相依属性列表,管理机制自动去取得 B, C, D, E 来同时安装,不就解决了属性相依的问题吗/p>

没错!您真聪明!目前新的 Linux 开发商都有提供这样的『线上升级』机制,透过这个机制,原版光盘就只有第一次安装时需要用到而已,其他时候只要有网络,你就能够取得原本开发商所提供的任何软件了呢!在 dpkg 管理机制上就开发出 APT 的线上升级机制,RPM 则依开发商的不同,有 Red Hat 系统的 yum ,SuSE 系统的 Yast Online Update (YOU), Mandriva 的 urpmi 软件等。

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

我们这里使用的是 CentOS 系统嘛!所以说:使用的软件管理机制为 RPM机制,而用来作为线上升级的方式则为 yum !底下就让我们来谈谈 RPM 与 YUM 的相关说明吧!


鸟哥的图示

小标题的图示 RPM 的优点

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

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

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

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

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


YUM 使用的流程示意图
图 1.5.1、YUM 使用的流程示意图

当用户端有升级、安装的需求时, yum 会向容器要求清单的升级,等到清单升级到本机的 /var/cache/yum 里面后,等一下升级时就会用这个本机清单与本机的 RPM 数据库进行比较,这样就知道该下载什么软件。接下来 yum 会跑到容器服务器 (yum server) 下载所需要的软件,然后再透过 RPM 的机制开始安装软件啦!这就是整个流程!谈到最后,还是需要动到 RPM 的啦!所以下个小节就让我们来谈谈 RPM 这咚咚吧!

Tips:
为什么要做出『容器』呢於 yum 服务器提供的 RPM 文件内容可能有所差异,举例来说,原厂释出的数据有 (1)原版数据; (2)升级数据 (update); (3)特殊数据 (例如第三方协力软件,或某些特殊功能的软件)。这些软件文件基本上不会放置到一起,那如何分辨这些软件功能呢用『容器』的概念来处理的啦!不同的『容器』网址,可以放置不同的软件功能之意!
大标题的图示RPM 软件管理程序: rpm

RPM 的使用其实不难,只要使用 rpm 这个命令即可!鸟哥最喜欢的就是rpm 命令的查询功能了,可以让我很轻易的就知道某个系统有没有安装鸟哥要的软件呢!此外,我们最好还是得要知道一下,到底 RPM 类型的文件他们是将软件的相关文件放置在哪里呢有,我们说的那个 RPM的数据库又是放置在哪里呢br>


小标题的图示 RPM 安装 (install)

因为安装软件是 root 的工作,因此你得要是 root 的身份才能够操作 rpm 这命令的。用 rpm 来安装很简单啦!假设我要安装一个档名为 rp-pppoe-3.5-32.1.i386.rpm 的文件,那么我可以这样:

不过,这样的参数其实无法显示安装的进度,所以,通常我们会这样下达安装命令:

另外,如果我们在安装的过程当中发现问题,或者已经知道会发生的问题,而还是『执意』要安装这个软件时,可以使用如下的参数『强制』安装上去:

rpm 安装时常用的选项与参数说明
可下达的选项 代表意义
-Uvh -Fvh
  • 先到各发展商的 errata 网站或者是国内的 FTP 映像站捉下来最新的 RPM 文件;
  • 使用 -Fvh 来将你的系统内曾安装过的软件进行修补与升级!(真是方便呀!)
  • 所以,在不晓得 yum 功能的情况下,你依旧可以到 CentOS 的映设站台下载 updates 数据,然后利用上述的方法来一口气升级!当然罗,升级也是可以利用 –nodeps/–force 等等的参数啦!


    鸟哥的Linux私房菜(基础篇)- 第二十三章、软件安装: RPM, SRPM 与 YUM 功能

    在查询的部分,所有的参数之前都需要加上 -q 才是所谓的查询!查询主要分为两部分,一个是查已安装到系统上面的的软件资讯,这部份的资讯都是由 /var/lib/rpm/ 所提供。另一个则是查某个 rpm 文件内容,等於是由 RPM 文件内找出一些要写入数据库内的资讯就是了,这部份就得要使用 -qp (p 是 package 的意思)。那就来看看几个简单的范例吧!

    常见的查询就是这些了!要特别说明的是,在查询本机上面的 RPM 软件相关资讯时,不需要加上版本的名称,只要加上软件名称即可!因为他会由 /var/lib/rpm 这个数据库里面去查询,所以我们可以不需要加上版本名称。但是查询某个 RPM 文件就不同了,我们必须要列出整个文件的完整档名才行~这一点朋友们常常会搞错。底下我们就来做几个简单的练习吧!

    例题:
    1. 我想要知道我的系统当中,以 c 开头的软件有几个,如何实做/li>
    2. 我的 WWW 服务器为 Apache ,我知道他使用的 RPM 软件档名为 httpd 。现在,我想要知道这个软件的所有配置档放置在何处,可以怎么作/li>
    3. 承上题,如果查出来的配置文件已经被我改过,但是我忘记了曾经修改过哪些地方,所以想要直接重新安装一次该软件,该如何作/li>
    4. 如果我误砍了某个重要文件,例如 /etc/crontab,偏偏不晓得他属於哪一个软件,该怎么办/li>

    答:

      来源:GarfieldEr007

      声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

      上一篇 2015年10月2日
      下一篇 2015年10月2日

      相关推荐