yum前端管理工具详解

1. yum概述

之前在上一篇文章里提到的rpm包管理器虽然在数据库中为用户指定了程序包之间的依赖关系,但用户仍需根据程序包的依赖关系去手动使用rpm命令来安装每个程序包,过程略为繁琐。而yum作为前端管理工具则为用户解决这一问题。

yum的全称为:Yellow dog Updater, Modifier,是通过修改Yellow Dog Linux的Yellow Dog Updater开发而成。

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

需要注意的是,yum前端管理工具是基于rpm管理功能的,因此yum不能脱离rpm而存在。yum只是让程序包管理起来更为方便,但不意味着可以取代rpm。另外,yum访问文件服务器(仓库)的模式是基于C/S架构的,而文件服务器(仓库)则需要以某种共享服务方式将其提供的程序包及包相关的元数据提供给其他主机使用,通常使用到的协议有http、https、ftp、nfs等。此外,还可以使用光盘作为本地仓库或者自己制作本地仓库,通常使用到的协议是file。

因此对于用户来讲,使用yum这样的前端程序管理工具比直接使用rpm就要简便得多了。下面介绍yum的工作原理。

2. yum的工作原理

要能使用yum这个工具来安装程序包,首先要确保系统上支持rpm包管理功能,并且安装了yum程序。以下将使用yum下载程序包的流程绘制成图:

当用户使用yum去请求安装某一个程序包时,yum工具会先去yum配置文件中查找yum仓库指向的路径,根据该路径去访问远程或本地的文件服务器,这个服务器作为yum仓库并且存储了众多的rpm包以及包相关的元数据文件。当yum根据仓库路径访问到仓库后,会首先尝试请求获取rpm包的元数据文件并缓存至本地(/var/cache/yum目录),而这个元数据文件包括了该仓库所有rpm包的程序包名、版本号、依赖性以及每个程序包所提供的capabilities等。而后,yum根据用户要安装的程序包名去元数据文件里查找,看看仓库里是否有用户请求下载的程序包文件,如果找到了则根据元数据文件分析该程序包的依赖关系并分析本地系统上有哪些包已安装、哪些包还没安装,再将所有用户需要安装且本地尚未安装的程序包名列出来,并以客户端的角色发送至文件服务器(仓库)请求下载之。如果请求成功,则yum将要安装的程序包文件也缓存至本地并执行安装操作。安装完成之后将缓存的程序包文件删除以节约空间,而缓存中只留下元数据文件。

为什么只缓存元数据而不缓存程序包呢?因为程序包一般只安装一次即可,很少会再安装第二次,而且基于节约空间的考虑,因此yum在安装完程序包后会将缓存中的程序包删除。而缓存元数据好处则是当下一次用户使用yum请求安装程序包时可以节约带宽,无需再次重新请求获取全部的元数据文件,并且可以提高本地分析程序包的速度。

当用户第二次使用yum请求安装程序包时,基于实时同步更新缓存以及节约带宽的考虑,yum会先请求下载yum仓库下rpm包元数据的校验码文件至本地,将其与本地缓存上的元数据校验码相比较,如果相同,说明无须更新;如果不同,则说明仓库中rpm包已经更新,因此yum会重新请求下载仓库上的元数据文件以更新元数据缓存。接着同样是分析程序包依赖性、请求要安装的全部程序包等。


3. yum客户端配置文件

yum的配置文件主要有/etc/yum.conf和/etc/yum.repos.d/*.repo,其中/etc/yum.conf为主配置文件,为所有yum仓库提供公共配置;而/etc/yum.repos.d目录下以.repo结尾的文件则为各yum仓库的指向提供配置信息。需要注意的是,在CentOS发行版中,/etc/yum.repos.d目录下使用多个以.repo结尾的仓库配置文件是为了方便管理,既可以用多个以.repo结尾的文件分别配置多个不同的仓库指向,又可以在一个.repo文件中配置多个仓库指向。而且,当同时存在多个同一类的仓库时,每个仓库称为镜像,yum支持镜像列表插件并且只使用其中的一个仓库指向即可,因为同一类仓库中的程序包是相同的。这时应该使用离用户较近的镜像站点,在repo选项中可通过开销(cost)指定具体使用哪一个仓库。当同时存在多个不同类的仓库时,每个仓库中的程序包各不相同,yum也可同时分析、使用这些仓库。

我们通常在/etc/yum.repos.d目录下配置yum的指向路径相关信息,而在这个配置文件中的仓库指向的定义选项主要有以下几项:

[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.

各类型文件服务器:

示例:使用光盘当做本地yum仓库

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

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

(2) 创建配置文件

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


4. yum命令的用法

配置好本地仓库指向后,就可以使用yum安装程序包了,接下来介绍yum命令如何使用:

语法格式:

    yum [options] [command] [package ...]


常用选项:

--nogpgcheck:禁止进行gpg check;

-y:自动回答为"yes"

-q:静默模式;

--disablerepo=repoidglob:临时禁用此处指定的repo;支持glob风格通配,表示某一类repo;

--enablerepo=repoidglob:临时启用此处指定的repo;支持glob风格通配,表示某一类repo;

--noplugins:临时禁用所有插件。

yum的子命令用法:

(1)显示仓库列表:

# yum repolist [all|enabled|disabled]

(2)显示程序包:

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

(3)安装程序包:

# yum install package1 [package2] [...]


(4)重新安装:

# yum reinstall package1 [package2] [...]

相当于:rpm -ivh --replacepkgs

(5)升级程序包:

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

(6)降级程序包:

# yum downgrade package1 [package2] [...]

相当于:rpm -Uvh --oldpackage

(7)检查可用升级:

# yum check-update

(8)卸载程序包:

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

注意:依赖于此包的程序会一同被卸载。

(9)查看程序包information:

# yum info [...]

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

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

相当于rpm -qf FILE;

(11)清理本地缓存:

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

(12)构建缓存:

# yum makecache [fast]

(13)搜索:

# yum search string1 [string2] [...]

以指定的关键字搜索程序包名及summary信息;匹配方式为模糊匹配;

(14)查看指定包所依赖的capabilities:

# yum deplist package1 [package2] [...]

(15)查看yum事务历史:

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

仅能查到有改动的历史,例如安装、升级、卸载等。

(16)安装及升级本地程序包:

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

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

注意:本地程序包指非仓库的程序包,可以是从互联网上下载的程序包。当本地程序包的安装存在依赖关系并且该包依赖于仓库里的程序包时,使用此选项可借助yum安装这个本地程序包。但从CentOS 6/7后,直接install选项指定本地rpm程序包即可,即:# yum install local_rpmfile.

(17)包组管理的相关命令:

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

5. yum的repo配置文件中可用的变量

前面提到,/etc/yum.repos.d目录下的配置文件能为yum指明仓库的路径及其相关信息,而使用不同平台类型的用户可通过镜像网站来安装仓库里的程序包。而在/etc/yum.repos目录下的配置文件中,通过引用变量来表示baseurl可以使yum自动指向适合其平台的仓库路径,这样即使不会配置yum的repo配置文件的用户也可使用默认的yum源,可方便镜像源管理员的管理。

在yum的repo配置文件中可用的变量有:

①$releasever:当前OS的发行版的主版本号;
②$arch:平台;
③$basearch:基础平台;例如i386,i486,i586,i686的基础平台为i386,即只要是32位的系统统统视
为i386基础平台;常见的基础平台有i386, x86_64, ppc等;
④$YUM0-$YUM9:供用户自定义的内部变量;

示例:baseurl=http://apt.sw.be/fedora/$releasever/en/$basearch/dag

6. 创建yum仓库--createrepo命令

如果管理上百台服务器主机,则当全部主机要求从互联网上某个文件服务器下载安装某个程序包时,会对带宽造成极大的消耗,为了节约带宽,可将远程文件服务器上的yum仓库镜像至本地,做成本地服务器,而全部主机只需通过内网访问本地服务器即可下载安装程序包,大大节约了带宽。

前面提到,一个yum仓库不仅包括众多的rpm包,还包括包相关的元数据文件。因此要创建仓库,除了要提供rpm包之外,还需要为所有rpm包制作元数据文件,而在Linux上只需通过执行createrepo命令就可以创建出元数据文件,createrepo是通过读取各个rpm包上的元数据信息并堆积形成元数据文件来实现的。

接下来简单介绍createrepo命令的使用:

createrepo命令:

createrepo - Create repomd (xml-rpm-metadata) repository

用于创建yum仓库的元数据目录文件(repodata)

常用选项:

--basedir:可通过此选项将repodata目录输出到当前rpm程序包的父目录去;

命令演示:

这里以/local_repo/Packages目录下事先复制过来的rpm包作为使用示例,如图:

开始创建元数据目录文件repodata:

再次ls查看:

可以发现,当前目录下多了一个repodata目录。

切换至repodata目录查看:

需要注意的是,rpm包的元数据文件是使用UUID来命名文件的,其中filelists类文件用来存放程序包文件名列表,而primary类文件则可用于存放程序包(组)的版本号、依赖性信息等。另外,repodata目录下的repomd.xml文件即为元数据的校验码文件。

7. 即将取代yum的dnf

虽然yum功能强大,并且支持许多插件扩展功能,但yum在设计体系上存在一些不足的地方,例如,yum在安装程序包时,如果突然中断,则下一次重新安装时yum无法识别该程序包是否已安装,而dnf主要就是为了解决yum这一缺陷的,预测将来dnf会取代yum这个工具。

时间: 2024-10-07 22:32:24

yum前端管理工具详解的相关文章

Linux进程管理工具详解:htop、glances、dstat

1.进程相关知识     1.操作系统的功能:文件系统.网络功能.进程管理.内存管理.安全功能.驱动程序(Linux是一个多任务的操作系统,而且是抢占式的多任务操作系统);.OS其实就是提供虚拟的计算机,进而能够将有限的资源借助于"保护"机制分配多个同时运行的程序,即"进程"使用,从而实现了所谓的多任务 2.程序执行环境有2种: 内核模式:cpu运行内核级指令 用户模式:cpu运行普通指令 3.应用程序运行普通指令,其实是直接运行于cpu上:应用程序运行特权指令,是

2018-3-14Linux系统管理(12) Linux程序包管理(2)yum前端管理工具

我们在之前的章节中讲到了Linux的程序包管理的基础与实现,后面也讲述了RPM包的管理命令实现了管理包的功能,主要用的是rpm命令,那么rpm实现程序管理总结如下:    rpm命令实现程序管理:       安装:-ivh, --nodeps, --replacepkgs       卸载:-e, --nodeps, --replacepkgs       升级:-Uvh, -Fvh, --nodeps, --oldpackage       查询:-q, -qa, -qf, -qi, -qd

NPM 包管理工具详解,使用教程

NPM 包管理工具 1.1 定义:什么是 NPM NPM 全称 Node Package Manager,它是 JavaScript 的包管理工具, 并且是 Node.js 平台的默认包管理工具.通过NPM 可以安装.共享.分发代码,管理项目依赖关系. 可从NPM服务器下载别人编写的第三方包到本地使用. 可从NPM服务器下载并安装别人编写的命令行程序到本地使用. 可将自己编写的包或命令行程序上传到NPM服务器供别人使用. 其实我们可以把 NPM 理解为前端的 Maven.我们通过 npm 可以很

Linux进程管理工具详解

 进程管理工具 查看进程 pstree  显示进程树 -p:显示PID ps 搜索进程 ps | grep pgrep pidof 系统监控工具 uptime free top 第一行:当前系统时间  系统启动到现在所经过的时间  当前上线用户数  系统在1,5,15分钟的平均负载 相当于uptime命令:交互按键:l 注意:平均负载值越小,系统越空闲:如果高于1,当前系统负载过高 第二行:显示的是目前进程总量与个别程序在什么状态(running,sleeping,stopped,zombie)

RPM包管理工具详解

RPM是Red Hat 和centos下的一个软件包管理机制,可使用yum安装,自动解决依赖关系. dpkg是Ubuntu下的一个软件包管理的工具,可使用apt-get 安装软件包,自动解决依赖关系. RPM是以数据库记录的方式将软件安装到linux系统上的.官方站点:http://rpm.org/ SRPM(source rpm)  ,这个软件包含有源代码,提供了参数配置文件(configure和makefile) 扩展名是以  .src.rpm格式来命名的. RPM软件命名格式: 软件名-软

rpm包安装和卸载,rpm查询,yum工具详解,yum仓库搭建

rpm包安装和卸载 [[email protected] Packages]# rpm -ivh zip-3.0-1.el6.x86_64.rpm    安装rpm包命令   ivh I=安装的意思install    v=可视     h =显示安装进度 mount /dev/cdrom  /mnt/  挂载到mnt下 cd /mnt/ cd packages Ls    查看rpm包 遇到有相互依赖的包,两个包一起安装 卸载也是一样的 两个包同时卸载 rpm -e yp -tools ypb

[转帖]前端-chromeF12 谷歌开发者工具详解 Network篇

前端-chromeF12 谷歌开发者工具详解 Network篇 https://blog.csdn.net/qq_39892932/article/details/82493922 blog 也是原作者转帖的 应该是 不过挺好的 可以在1906 里面仔细实验学习一下. 原文链接:https://segmentfault.com/a/1190000010302235 开发者工具初步介绍 chrome开发者工具最常用的四个功能模块: Elements:主要用来查看前面界面的html的Dom结构,和修

[转帖]前端-chromeF12 谷歌开发者工具详解 Sources篇

前端-chromeF12 谷歌开发者工具详解 Sources篇 原贴地址:https://blog.csdn.net/qq_39892932/article/details/82498748 console 里面的东西 前端的不懂啊.. 这次分享的是Chrome开发工具中最有用的面板Sources. Sources面板几乎是我最常用到的Chrome功能面板,也是在我看来决解一般问题的主要功能面板.通常只要是开发遇到了js报错或者其他代码问题,在审视一遍自己的代码而一无所获之后,我首先就会打开So

[转帖]前端-chromeF12 谷歌开发者工具详解 Console篇

前端-chromeF12 谷歌开发者工具详解 Console篇 https://blog.csdn.net/qq_39892932/article/details/82655866 趁着搞 cloud 的学习学一下chrome前端知识等. 大家都有用过各种类型的浏览器,每种浏览器都有自己的特色,本人拙见,在我用过的浏览器当中,我是最喜欢Chrome的,因为它对于调试脚本及前端设计调试都有它比其它浏览器有过之而无不及的地方.可能大家对console.log会有一定的了解,心里难免会想调试的时候用a