RPM 与 YUM的简要介绍



   CentOS系统中,使用的软件管理机制为RPM机制,因为或多或少存在软件属性依赖的问题,所以作为在线升级的方式则为YUM。下面让我们来谈谈RPM与YUM的相关说明。

  

  什么是RPM

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

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

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

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

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

    所以,通常不同的distribution所发布的RPM文件不能用在其他的distributions上。因此可以发现RPM软件管理机制的问题是:

  1,软件安装的环境必须与打包时的环境需求一致或相当;

  2,需要满足软件的依赖属性需求;

  3,反安装时需要特别小心,最底层的软件不可先删除,否则可能造成整个系统的问题。


  RPM的优点

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

  .RPM内含已经编译过的程序与设置文件等数据,可以让用户免除重新编译的困扰;

  .RPM在被安装以前,会先检查系统的硬盘容量,操作系统版本等,可避免文件被错误安装;

  .RPM文件本身提供软件版本信息,依赖属性软件名称,软件用途说明,软件所含文件等信息,便于了解软件;

RPM管理的方式使用数据库记录RPM文件的相关参数,便于升级,删除,查询与验证。

 为什么RPM在使用上很方便呢?因为有些软件是有相关性的,例如要安装网卡驱动程序,就要有Kernel source与gcc及make等软件。那么我们的RPM软件是否一定可以安装完成呢?如果该软件安装完成之后,却找不到它相关的前驱软件,是非常麻烦,因为安装好的软件也无法使用。

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


  RPM属性依赖的解决方式:YUM在线升级

  CentOS先将发布的软件放置到YUM服务器内,然后分析这些软件的依赖属性问题,将软件内的记录信息写下来,然后再将这些信息分析后记录成软件相关的清单列表。这些列表数据与软件所在位置可以称为容器。当客户端有软件安装的需求时,客户端主机会主动向网络上面的YUM服务器的容器网址下载到清单列表,然后再通过清单列表的数据与本机的RPM数据已存在的软件数据相比较,就能够一口气安装所有需要的具有依赖属性的软件了。

  当客户端有升级,安装的需求时,YUM会向容器要求清单的更新,等到清单更新到本机的/var/cache/yum里面后,等一下更新时就会用这个本机清单与本机RPM数据库作比较,这样就知道该下载什么软件,接下来YUM会跑到容器服务器下载所需要的软件,然后再通过RPM的机制开始安装软件,这就是整个流程。

     






































































猜你喜欢

转载自blog.51cto.com/13570206/2154707