RHEL7的yum简介

RHEL7中的rpm和yum的简单介绍。

1、RPM和dpkg简介

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

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

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

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

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

2、RPM和SRPM

2.1 RPM

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

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

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

由于RPM文件是已经编译完成了的,所以,该软件文件几乎只能安装在原本默认的硬件与操作系统版本中。也就是说,你的主机系统环境必须要与当初建立这个软件文件的主机环境相同才行!

举例来说,rp-pppoe这个ADSL拨接软件,他必须要在ppp这个软件存在的环境下才能进行安装!如果你的主机并没有ppp这个软件,那么很抱歉,除非你先安装ppp否则rp-pppoe就是不让你安装的(当然你可以强制安装,但是通常都会有点问题发生就是了!)。

2.2 SRPM

SRPM就是Source RPM的意思,也就是这个RPM文件里面含有源码。也就是说这个SRPM所提供的软件内容并没有经过编译,它提供的是原始码。

通常SRPM的扩展名是以***src.rpm这种格式来命名的。需要注意的是,虽然RPM提供的是原始码,但是他仍然含有该软件所需要的依赖软件说明、以及所有RPM文件所提供的数据。同时,他与RPM不同的是,他也提供了参数配置文件(就是configuremakefile)。所以,如果我们下载的是SRPM,那么要安装该软件时,你就必须要:

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

通常一个软件在释出的时候,都会同时释出该软件的RPM与SRPM。我们现在知道RPM文件必须要在相同的Linux环境下才能够安装,而SRPM既然是原始码的格式,我们可以修改SRPM内的参数配置文件,然后重新编译产生能适合我们Linux环境的RPM文件。

2.3 x86和noarch

一般对应的rpm包会有不同的几种平台对应,下表列出了比较常见的一些平台,需要注意的是,现在基本已经全部步入了64位时代(主要是服务器、桌面端和移动端),==主打服务器端的CentOS7已经不再发布32位版本,因此在CentOS7上面见到的主要是x86_64noarch。==

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

3、Yum

3.1 yum简介

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

yum的repo文件一般在/etc/yum.repo.d/目录下,如图所示就是小七的CentOS7中的yum repo list

3.2 yum update和upgrade

1
2
3
4
5
# 升级所有包同时也升级软件和系统内核
yum update

# 只升级所有包,不升级软件和系统内核
yum upgrade

3.3 yum repo文件构成

一般来说,一个yum repo文件由下面的几部分构成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 必须是独一无二的ID来标记这个yum repo,如果重复了,后面的会覆盖掉前面的
[serverid]

# 添加一段文字来描述这个yum repo
name=Description

# 设置资源库的地址,可以是http或者ftp等多种形式
baseurl={ftp://|http://|file://}

# enabled=1开启本地更新模式
enabled={1|0}

# gpgcheck=1表示检查;可以不检查gpgcheck=0
gpgcheck={1|0}

# 检查的key;如果上面不检查这一行可以不写
# gpgkey的地址也可以是http或者ftp等多种形式
gpgkey=