程序包管理前端工具yum的使用详解

来源:互联网 发布:淘宝劲霸男装春秋夹克 编辑:程序博客网 时间:2024/06/07 19:51

前言:

what?什么是yum
why?为什么需要yum
how to work?yum的工作原理如何实现
how to use?怎么在Linux中使用yum命令

1. yum概述

在上一篇博客上,我详细的介绍了程序管理工具rpm,它很大程度上简化了安装程序的流程,但它也存在一个缺陷:不能解决程序包的依赖问题。而yum的诞生就是为了弥补这个不足。yum不能说是一款全新的程序包管理工具,它只是rpm的前端管理工具。之所以这么说,是因为yum的安装、升级、卸载、查询等操作,都要依靠rpm来完成。要想使用yum,系统上必须安装rpm,yum程序包是依赖于rpm程序包的。

yum是一款基于rpm包管理器的前端程序包管理器,全称为Yellow dog Update Modifier。它可以从指定服务器上自动下载程序包,并自动分析程序包的元数据、自动处理程序包之间的依赖关系,能一次性安装完所有依赖的包,而无须繁琐地一次次安装所有依赖包。

2. yum的工作原理

yum是基于C-S(客户端-服务器)模式的,用户从服务器上下载程序包进行安装。为此,我们需要在服务器上构建一个存储rpm包的仓库,用于存储rpm包,并接受来自客户端的访问。为了方便客户端一次性获取全部rpm包详细信息,以分析依赖关系,服务器端将仓库中所有rpm包的详细信息(包括依赖关系信息)提取出来,做成仓库的元数据文件。这样依赖,客户端只需获取元数据文件,便能得到整个仓库中rpm包的信息,以进行依赖关系分析。


第一次使用yum时的的工作方式如下所示:
第一步:获取yum仓库元数据文件,并缓存在本地的/var/cache/yum目录下。
第二步:在元数据文件中查找用户选择要安装的程序包,根据元数据文件在本地分析要安装的程序包的依赖关系,结合当前系统上已安装的程序包,列出需要但未安装的程序包清单。
第三步:将需要下载的程序包清单发送给yum仓库。
第四步:下载各程序包缓存至本地,并安装。
第五步:程序包安装结束后,缓存的程序包文件将被删除,但缓存的仓库元数据文件将被保留,用于下次安装时使用。

这里写图片描述



保留yum仓库元数据文件,能够节省带宽,但同时也带来一个问题:yum仓库如果进行了更新,它的元数据文件也会发生变化,这样以来客户端的元数据文件和服务器的元数据文件就不一致了。为了解决者两个文件的一致性问题,便需要用到元数据文件的校验码了。我们可以在yum仓库中为元数据文件生成一个校验码,客户端从服务器请求元数据文件校验码,与缓存中的元数据文件进行比对,相同则缓存与服务器元数据文件一致,可以使用,不同则不一致,需要重新下载元数据文件。

后续使用yum安装程序包的流程:
第一步:获取yum仓库校验码文件。
第二步:核对校验码,相同则使用缓存的元数据文件,不同则重新下载元数据文件。
第三步:之后的步骤与上面介绍的首次使用yum相同。

这里写图片描述

3. yum相关的配置文件

yum相关的主要配置文件包括/etc/yum.conf文件和/etc/yum.repo目录下的以“.repo”结尾的文件。其中/etc/yum.conf为主配置文件,它配置了yum的一些公共的配置信息,/etc/yum.repo目录下的配置文件用于定义各个yum仓库各自的信息。多个yum仓库的信息可以配置在一个同一配置文件中,或分别配置在多个文件中,这并不会影响使用。通常,为了管理的方便,将不同的仓库用多个文件进行配置。有时候,多个网站上有相同的yum仓库源,我们可以将它们的URL写在配置文件中的同一个仓库中,系统将随机或依照特定规则使用某一链接。

3.1 主配置文件/etc/yum.conf内容详解:

可使用man yum.conf获取配置文件的帮助文档。

[main]cachedir=/var/cache/yum/$basearch/$releasever #设置缓存目录keepcache=0     #安装后是否保留缓存debuglevel=2    #调试消息输出等级logfile=/var/log/yum.log    #日志文件路径exactarch=1     #是否做精确平台匹配obsoletes=1     gpgcheck=1      #是否检查来源合法性和包完整性plugins=1       #是否支持插件机制installonly_limit=5     #最多同时安装多少个程序包bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum       #bug追踪URLdistroverpkg=centos-release     #发行版版本

3.2 子配置文件/etc/yum.repo/*.repo内容详解

[repositoryID]      #仓库名name=Some name for this repository      #对repo作功能性说明;baseurl=url://path/to/repository/       #仓库指向的路径,可指向多个路径;enabled={1|0}       #是否启用该仓库,默认为1(启用);gpgcheck={1|0}      #是否要对程序包数据的来源合法性和数据完整性做校验;gpgkey=URL      #指定GPG密钥文件的访问路径,可由仓库提供;enablegroups={1|0}      #是否允许以组的方式管理仓库;failovermethod={roundrobin|priority}        #当baseurl同时指向多个仓库路径时,可指定以什么方式选择url去访问仓库,以及当某一路径访问失败时,可指定如何再选择路径;roundrobin是随机挑选路径访问,priority是自上而下选择路径访问;默认为roundrobin;cost=       #开销;开销越小,该仓库url更优;默认为1000。

其中的URL链接支持http;//、ftp://、file:///、nfs://

配置文件中允许使用变量:

  • $releasever: 当前OS的发行版的主版本号;
  • $arch: 平台;
  • $basearch:基础平台;
  • $YUM0-$YUM9:十个可自定义的变量;

变量的使用示例:

http://mirrors.magedu.com/centos/$releasever/$basearch/os

示例:定义一个本地的仓库

[local]name=this is a local repo.baseurl=file:///media/cdromgpgcheck=0enabled=1

4. yum命令的用法

显示仓库列表

子命令:repolist

yum repolist [all|enabled|disabled]     #可显示启用的和未启用的仓库,默认显示启用的仓库

显示程序包

子命令:list

yum list [all | glob_exp1] [glob_exp2] [...]yum list {available|installed|updates} [glob_exp1] [...]

安装程序包

子命令:install

yum install package1 [package2] [...]

重新安装

子命令:reinstall

yum reinstall package1 [package2] [...]

升级程序包

子命令:update

yum update [package1] [package2] [...]

降级程序包

子命令:downgrade

yum downgrade package1 [package2] [...] 

检查可用升级

子命令:check-update

yum check-update

卸载程序包

子命令:remove、erase

yum remove | erase package1 [package2] [...]

查看程序包information

子命令:info

yum info package1 [package2] [...]

查看指定的特性(可以是某文件)是由哪个程序包提供的

子命令:provides、whatprovides

yum provides | whatprovides feature1 [feature2] [...]

清理缓存

子命令:clean

yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

构建缓存

子命令:makecache

yum makecache

搜索

子命令:search
以指定的关键字搜索程序包名及summary信息

yum search string1 [string2] [...]

查看指定包所依赖的capabilities

子命令:deplist

yum deplist package1 [package2] [...]

查看yum事务历史

子命令:history

yum history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

安装及升级本地的程序包

子命令:localinstall、localupdate

yum localinstall rpmfile1 [rpmfile2] [...]      (maintained for legacy reasons only - use install)yum localupdate rpmfile1 [rpmfile2] [...]       (maintained for legacy reasons only - use update)

包组管理的相关命令

子命令:groupinstall、groupupdate、grouplist、groupremove、groupinfo

yum groupinstall group1 [group2] [...]yum groupupdate group1 [group2] [...]yum grouplist [hidden] [groupwildcard] [...]yum groupremove group1 [group2] [...]yum groupinfo group1 [...]

yum的命令行选项

  • –nogpgckeck:禁止进行gpg check;
  • –y:自行回答为”yes”;
  • –q:静默模式;
  • –disablerepo=repoidglob:临时禁用此处指定的repo;
  • –enablerepo=repoidglob:临时启用此处指定的repo;
  • –noplugins:禁用所有插件;

如何使用光盘当做本地yum仓库

(1)挂载光盘至某目录,例如/media/cdrom:

 mount -r -t iso9660 /dev/cdrom /media/cdrom

(2)创建配置文件:

[CentOS 7]name=this is a local repo.baseurl=file:///media/cdromgpgcheck=0enabled=1

创建yum仓库

使用命令:createrepo [options] directory

将程序包复制至指定的directory目录下,使用createrepo命令便能创建yum仓库,并在directory目录下生成一个repodate目录,里面存放着此yum仓库的元数据文件。至此仓库创建成功。

0 0