软件包的前端工具--yum使用


    在之前我们介绍了软件包管理器RPM,RPM作为管理器其中最重要的缺点是不能自动解决软件包的相依属性问题(依赖关系)。那么有没有能够自动解决软件包的相依属性问题呢?当然可以,使用yum来安装软件包即可。

 

yum的实现机制:

1、发行商将编译好软件放放在yum服务器内,该服务器内存放了许多的rpm包,以及这些包所依赖其他软件包所生产的依赖关系列表、每一个软件包安装所生产的文件列表、所有软件包安装生产的文件列表和RPM包分组信息(每一个组中包含多个RPM包),而存放这些文件和RPM包的位置就叫做仓库或者yum源。

说明:不同的yum源提供的软件包是不同的。

 

2、当客户端有软件下载需求时,会主动向yum服务器下载清单列表。这些清单列表就是yum仓库中的元数据文件。然后将这些元数据文件缓存在本地的/var/cache/yum/目录下。这样避免每次下载时都需要下载这写元数据文件。

 

3、然后客户端分析本地缓存目录(/var/cache/yum/)下依赖关系列表和rpm列表文件,并对本地RPM数据库进行对比,这样就可以将没有安装的软件通过yum服务器一次性下载到本地并进行安装。



yum仓库的元数据文件

刚刚说过由于每次下载都需要下载这些元数据文件,因此下载效率比较低,一般情况下,我们将这些文件都是保存到本地缓存中,这样每次下载前,只需要到本地缓存中去分析这些文件即可,就不需要再去下载了。这些文件都是存放在某个仓库中repodata目录下的。

这几个文件分别是:

primary.xml.gz:该文件保存了所有RPM列表,以及根据分析这些RPM包生成的依赖关系列表。且保存了每个软件包安装生产的文件。

filelists.xml.gz:该文件保存了所有的RPM包生产的文件列表

other.xml.gz:保存的是额外信息,主要保存的RPM的修改日志。

repomd.xml:记录的是上面三个文件的时间戳和校验和(主要是用来更新这些元数据文件的)

comps*.xml:存放的是RPM包分组信息



获取yum仓库中的软件包的方式

之前说过,RPM包是存放在yum仓库中的,那么当客户端发送下载请求时,客户端如何能找到yum仓库呢?

这就需要本地客户端提供一个配置文件。

在这个文件中,我们需要指定需要使用何种方法获取yum仓库中的数据。

根据获取的方法不同,可以分为以下两种:

一、当yum仓库在本地目录时

file:///ip/path/to/somefile             #注意是三个/哦

这种方式只能提供自己到本地yum仓库中下载数据

二、当yum仓库在远处服务器时

ftp://{ip|domain|path}/path/to/somefile

http://{ip|domain|path}/path/to/somefile

使用这种方式来获取yum仓库中的数据时,需要将yum仓库以ftp或者http协议的方式共享出去,这样更多的客户端都可以到yum仓库中去下载软件包了。


yum的配置文件

yum的配置文件分为2部分

全局配置文件和分段配置文件

全局配置文件为/etc/yum.conf    该配置文件的主要内容为:

cat /etc/yum.conf
[main]                                            #中括号内的为仓库的名字,须唯一
cachedir=/var/cache/yum           #第一本地缓存路径

keepcache=0                        
debuglevel=2                              #调式级别
logfile=/var/log/yum.log              #使用yum安装软件时产生的信息放置在这个文件中
distroverpkg=redhat-release
tolerant=1      #在安装过程中,如果某个软件包以安装,可以忽略掉。1表示启用,0表示不启用exactarch=1
obsoletes=1
gpgcheck=1                        #是否对RPM包进行数字签名,1表示启用,0表示不启用plugins=1                         #是否启用插件功能,1表示启用,0表示不启用
#yum的插件配置文件存放在/etc/yum/pluginconf.d/目录下
# Note: yum-RHN-plugin doesn't honor this.
metadata_expire=1h                #本地缓存目录的缓存时间为1h

# Default.
# installonly_limit = 3

# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d

上面这两句话的意思是在/etc/yum.repos.d/目录下,所有后缀为.repo文件都会作为配置文件的组成部分。

全局配置文件对所有仓库生效



分段配置文件

分段配置文件是/etc/yum.repos.d/*.repo

这个配置文件其实就是定义每一个yum仓库的,因此该配置文件只对指定仓库生效

该配置文件和全局配置文件大致相同,主要内容为:

[rhel-debuginfo]
name=Red Hat Enterprise Linux $releasever - $basearch - Debug
baseurl=ftp://ftp.redhat.com/pub/redhat/linux/enterprise/$releasever/en/os/$basearch/Debuginfo/

#baseurl这一行定义的是获取yum仓库数据的方式

enabled=1              //是否启用该yum仓库
gpgcheck=1         //是否进行数字签名,检查软件包的来源合法性
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

#这一行定义的是数字签名公钥文件所在的位置




yum命令使用详解

yum [option] [COMMAND][package_name...]

option:

-y:自动回答为yes。

-nogpgcheck:不进行数字签名检查。

 

COMMAND:

list:列出yum仓库上面所有的软件包和版本,list命令支持glob,即通配符。还可以接的子命令有:

            all:列出yum仓库上面所有的软件包和版本,类似于rpm -qa

            available:列出仓库中但未安装的软件包

            installed:列出仓库中已经安装的软件包

            updates:列出仓库中可以升级的软件包

search KEYWORD:根据关键字搜寻某个软件包,只要包含KEYWORD的软件包都会显示出来

install:安装某个软件包
update:升级某个软件包

update-to:将某个软件包升级为指定的版本

reinstall:重新安装某个软件包

check-update:检查哪些可用于升级的软件包

localinstall:安装本地的RPM包

remove|erase:卸载某个软件

info:查看某个软件包的信息;类似于rpm -qi

provides|whatprovides:查看指定的文件是由哪个软件包生成的

makecache:生产元数据缓存文件。

clean:清理缓存

            package_name:清理缓存目录下的软件包

            headers:清理缓存目录下的headers

            all:清理缓存目录下所有文件和RPM包

            metadata:清理元数据文件


repolist:显示repo列表及其简要信息

            all:显示所有的yum仓库

            enabled:显示启用的yum仓库,默认是该选项

            disabled:显示禁用的yum仓库

 

上述介绍的yum命令主要用于安装单个软件使用的。如果将来要安装一个大的项目,里面包含的软件非常的多,在使用上述命令来安装的话,就比较复杂了。这时候我们就可以使用yum的软件群组功能呢,一次性将多个软件包一起安装。

yum的软件群组功能

语法格式:yum [群组功能]  [软件群组]

群组功能包括:

grouplist:列出所有的可使用软件群组

groupinfo:后面接group_name,查看该群组包含的所有软件

groupinstall:安装这个群组中所有的软件

groupremove:删除某个软件群组

groupupdate:更新某个软件群组中的所有软件

 

 

yum仓库的配置

使用createrepo命令可以将某个目录配置为yum仓库。不过需要实现安装createrepo软件包。

其中-g FILENAME选项可以用来指定包组定义文件

手动配置yum仓库的步骤

1、首先使用rpm -q createrepo命令来查看该软件包是否已安装

2、如果该软件包没有安装,使用yum install createrepo命令来安装该软件包

3、使用createrepo directory将某个目录常见成仓库

4、创建仓库成功后,会生成一个repodata目录,该目录下存放着仓库的元数据文件

5、在/etc/yum.repo.d/目录下创建一个后缀为.repo的文件

6、配置.repo这个文件即可。