centos6.5软件安装:RPM,SRPM与yum功能

鸟哥的linxu私房菜读书笔记

前言:

  Linux上软件的安装可以以原始码的方式来安装软件,也就是利用厂商释出的 Tarball 来进行软件的安装。不过,你应该很容易发现,那就是每次安装软件都需要侦测操作系统与环境、设定编译参数、实际的编译、最后还要依据个人喜好的方式来安装软件到定位。这过程是真的很麻烦的,而且对于不熟悉整个系统的朋友来说,还真是累人啊!

  那有没有想过,如果我的Linux系统与厂商的系统一模一样,那么在厂商的系统上面编译出来的执行档,自然也就可以在我的系统上面跑啰!也就是说,厂商先在他们的系统上面编译好了我们用户所需要的软件,然后将这个编译好的可执行的软件直接释出给用户来安装,如此一来,由于我们本来就使用厂商的 Linux distribution ,所以当然系统 (硬件与操作系统) 是一样的,那么使用厂商提供的编译过的可执行文件就没有问题啦! 说的比较白话一些,那就是利用类似 Windows 的安装方式,由程序开发者直接在已知的系统上面编译好,再将该程序直接给用户来安装,如此而已。

  那么如果在安装的时候还可以加上一些与这些程序相关的信息,将他建立成为数据库,那么就可以进行安装、反安装、 升级不验证等等的相关功能啰 (类似 Windows 底下的『新增移除程序』)?确实如此,在 Linux 上面至少就有两种常见的这方面的软件管理员,分别是RPM与Debian的dpkg。我们的CentOS主要是以RPM为主但也不能不知道dpkg啦!所以底下就来约略介绍一下这两个玩意儿。

Linux 界的两大主流: RPM 和 DPKG

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

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

  目前在 Linux 界软件安装方式(也就是刚才所说的distribution档案,通过这个特殊的指令读取档案信息并安装、卸载等关联linux软件)最常见的有两种,分别是:

    dpkg:

      Debian Packager的缩写。

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

    rpm:

      Red Hat Package Manager的缩写。

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

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

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

  什么是RPM与SRPM

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

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

  1. 由于已经编译完成并且打包完毕,所以软件传输与安装上很方便 (不需要再重新编译);

  2. 由于软件的信息都已经记录在Linux主机的数据库上,很方便查询、升级与反安装;

  但是这也造成些许的困扰。由于RPM档案是已经包装好的数据也就是说,里面的数据已经都『编译完成』了!所以,该软件档案几乎只能安装在原本硬件的硬件与操作系统版本中。也就是说,你的主机系统环境必须要与当初建立这个软件档案的主机环境相同才行! 举例来说,rp-pppoe这个ADSL 拨接软件,他必须要在ppp这个软件存在的环境下才能进行安装!如果你的主机幵没有ppp这个软件,那么很抱歉,除非你先安装ppp否则rp-pppoe就是不让你安装的 (当然你可以强制安装,但是通常都会有点问题发生就是了!)。

  所以,通常不同的distribution所释出的RPM档案,并不能用在其他的distributions上。举例来说,Red Hat释出的RPM档案,通常无法直接在SuSE上面进行安装的。更有甚者,相同distribution的不同版本之间也无法互通,例如CentOS 4.x的RPM档案就无法直接套用在CentOS 5.x!因此,这样可以发现这些软件管理机制的问题是:

  1. 软件档案安装的环境必须不打包时的环境需求一致或相当;
  2. 需要满足软件的相依属性需求(如果检查到没有安装相依赖的软件,就装不上这个软件了);
  3. 反安装时需要特别小心,最底层的软件不可先移除,否则可能造成整个系统的问题!


  那怎么办?如果我真的想要安装其他distributions提供的好用的RPM软件档案时? 还好,还有SRPM这个东西!SRPM是什么呢?顾名思义,他是Source RPM的意思,也就是这个RPM档案里面含有原始码哩!特别注意的是,这个SRPM所提供的软件内容『并没有经过编译』,他提供的是原始码喔!通常SRPM的扩展名是以 ***.src.rpm 这种格式来命名的。不过,既然SRPM提供的是原始码,那么为什么我们不使用Tarball直接来安装就好了?这是因为SRPM虽然内容是原始码,但是他仍然含有该软件所需要的相依性软件说明、以及所有RPM档案所提供的数据。同时,他与RPM不同的是,他也提供了参数配置文件 (就是configure与makefile)。所以,如果我们下载的是SRPM,那
么要安装该软件时,你就必须要:
  1.先将该软件以 RPM 管理的方式编译,此时SRPM 会被编译成为RPM档案;
  2.然后将编译完成的RPM档案安装到Linux系统当中。


  怪了,怎么SRPM这么麻烦吶!还要重新编译一次,那举我们直接使用RPM来安装不就好了?通常一个软件在释出的时候,都会同时释出该软件的RPM与SRPM 。我们现在知道 RPM 档案必须要在相同的Linux环境下才能够安装,而SRPM既然是原始码的格式,自然我们就可以透过修改SRPM内的参数配置文件,然后重新编译产生能适合我们Linux环境的RPM档案,如此一来,不就可以将该软件安装到我们的系统当中,而不必与原作者打包的Linux环境相同了?这就是SRPM的用处了!

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

      Tips:
      
为何说CentOS是『社群维护的企业版』呢?Red Hat公司的RHEL释出后,连带会将SRPM释出。社群的朋友就将这些SRPM收集起来并重新编译成为所需要的软件,             再重复释出成为CentOS,所以才能号称与Red Hat的RHEL企业版同步啊!真要感谢SRPM哩!如果你想要理解CentOS是如何编译一支程序的,也能够透过学习SRPM内含的编译        参数,来学习的啊! 

什么是 i386, i586, i686, noarch, x86_64
  从上面的说明,现在我们知道RPM与SRPM 的格式分别为:
  xxxxxxxxx.rpm <==RPM 的格式,已经经过编译并包装完成的rpm档案;
  xxxxx.src.rpm <==SRPM 的格式,包含未编译的原始码信息。


  那么我们怎么知道这个软件的版本、适用的平台、编译释出的次数呢?只要透过档名就可以知道了!例如 rp-pppoe-3.1-5.i386.rpm
  这的档案的意义为:
    rp-pppoe-3.1-5.i386.rpm
    软件名称-软件的版本信息-释出的次数-适合的硬件平台-扩展名,除了后面适合的硬件平台不扩展名外,主要是以『-』来隔开各个部分,这样子可以很清楚的发现该软件的名称、版本信息、打包次数与操作的硬件平台!好了,来谈一谈每个不同的地方吧:   

    1.软件名称:      

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

    2.版本信息:
      每一次更新版本就需要有一个版本的信息,否则如何知道这一版是新是旧?这里通常又分为主版本跟次版本。以上面为例,主版本为 3 ,在主版本的架构下更新部分原始码内容,而释出一个新的版本,就是次版本啦!以上面为例,就是1啰!
    3.释出版本次数:
      通常就是编译的次数啦!那么为何需要重复的编译呢?这是由于同一版的软件中,可能由于有某些bug或者是安全上的顾虑,所以必须要进行小幅度的patch或重设一些编译参数。设定完成之后重新编译并打包成RPM档案!因此就有不同的打包数出现了!
    4.操作硬件平台:
      这是个徆很玩的地方,由于RPM可以适用在不同的操作平台上,但是不同的平台设定的参数还是有所差异性! 并且,我们可以针对比较高阶的CPU来进行优化参数的设定,这样才能够使用高阶CPU所带来的硬件加速功能。所以就有所谓的i386, i586,i686,x86_64与noarch等的文件名出现了!

    
  受惠于目前x86系统的支持方面,新的CPU都能够执行旧型 CPU 所支持的软件,也就是说硬件方面都可以向下兼容的,因此最低等级的i386软件可以安装在所有的x86硬件平台上面,不论是32位还是64位。但是反过来说就不行了。举例来说,目前硬件大多是64位的等级,因此你可以在该硬件上面安装x86_64或i386等级的RPM软件。但在你的旧型主机,例如PIII/P-4 32位机器上面,就不能够安装x86_64的软件!

  根据上面的说明,其实我们只要选择i386版本来安装在你的x86硬件上面就肯定没问题。但是如果强调效能的话,还是选择搭配你的硬件的RPM档案吧!毕竟该软件才有针对你的CPU硬件平进行过参数优化的编译嘛!

 

posted @ 2015-12-26 15:46  502studio  阅读(2393)  评论(0编辑  收藏  举报