什么是yum
yum是Yellowdog update Modified的简称。yum的宗旨是自动化的升级、安装/移除rpm安装包(也就是说yum这个命令它的操作对象是RPM包),收集rmp的相关信息,检查依赖性,并提示用户解决。yum的关键之处是要有可靠的repository,顾名思义这就是软件的仓库,它可以是http或者ftp站点,也可以是本地的软件池,但是必须包含rpm的header,rmp的header包括了rmp的各种信息,包括描述、功能、提供的文件、依赖性等,正是收集了这些信息,才能自动化的完成余下的任务。yum本身就是运行在linux上的自动管理安装包的系统。yum 的理念是使用一个中心仓库(repository)管理一部分甚至一个distribution 的应用程序相互关系,根据计算出来的软件依赖关系进行相关的升级、安装、删除等等操作,减少了Linux 用户一直头痛的dependencies 的问题。这一点上,yum 和apt 相同。apt 原为debian 的deb 类型软件管理所使用,但是现在也能用到RedHat 门下的rpm 了。
注:linux下的RPM的全称是“RedHat Package Manager”,最早是Red Hat公司开发的,后来在CentOS、Fedora、SUSE都用它。而rpm包则是软件编译完成后按照RPM机制打包起来的一个文件,可以用rpm命令安装的一个软件安装包,它省去了Linux软件安装中编译的步骤,安装成功后软件就可以用了。RPM包的特点是:1.实现已经编译好;2.安装方便;3.安装过程中要求环境一致;4.反安装时要从最上层开始。RPM包的名称规则示例:ttpd-manual- 2.0.40-21.i386.rpm,ttp-manual是软件包的名称,2是主版本号;0是次版本号;40是次版本号;21是编译的次数;i386是适合的平台;.rpm说明这是一个RPM包。
yum的特点
1.可以同时配置多个资源库(repository)
2.简洁的配置文件(一般配置文件是/etc/yum.conf)
3.自动解决增加或者删除rpm包时遇到的依赖问题
4.保持与rpm的数据库一致
yum的配置文件
yum的配置文件,它的绝对路径一般是:/etc/yum.conf。yum的一切配置信息都存储在这个文件中,这是yum系统中最重要的内容。
yum.conf一般分为main和repository两部分,但是默认情况下只有main部分。每一个yum.conf都只能有一个main部分。repository 部分定义了每个源/服务器的具体配置,可以有一到多个。常位于/etc/yum.repo.d 目录下的各文件中。
使用cat /etc/yum.conf查看该文件的内容。
1.cachedir:此项为yum下载的RPM包的缓存目录,yum在此存储下载的rpm包和数据库
2.keepcache:缓存是否保存,1表示安装后保留软件包,0表示安装后删除软件包
3.debuglevel:出错日志级别,级别为0-10,默认为2(只保留安装和删除记录)
4.logfile:存放系统更新软件的记录,用户可以在该配置项配置的文件中检查自己在过去的日子都做了哪些更新
5.pkgpolicy: 包的策略。一共有两个选项,newest和last,这个作用是如果你设置了多个repository,而同一软件在不同的repository中同时存 在,yum应该安装哪一个,如果是newest,则yum会安装最新的那个版本。如果是last,则yum会将服务器id以字母表排序,并选择最后的那个服务器上的软件安装。
6.distroverp:指定一个软件包,yum会根据这个包判断你的发行版本,默认是RedHat-release,也可以是安装的任何针对自己发行版的rpm包。
7.tolerent:也有1和0两个选项,表示yum是否容忍命令行发生与软件包有关的错误,比如你要安装1,2,3三个包,而其中3此前已经安装了,如果你设为1,则yum不会出现错误信息。默认是0。
8.exactarch:有两个选项1和0,代表是否只升级和你安装软件包cpu体系一致的包,如果设为1,则如你安装了一个i386的rpm,则yum不会用1686的包来升级。
9.retries:网络连接发生错误后的重试次数,如果设为0,则会无限重试。
10.obsoletes:这是一个update的参数,具体请参阅yum(
8
),简单的说就是相当于upgrade,允许更新陈旧的RPM包。
11.gpgcheck:是否检查GPG(GNU Private Guard),一种密钥方式签名。
12.plugins:否允许使用插件,默认是
0
不允许,但是我们一般会用yum-fastestmirror这个插件。
13.installonly_limit:允许保留多少个内核包。
14.exclude:屏蔽不想更新的RPM包,可用通配符,多个RPM包之间使用空格分离。
15.reposdir:该选项用户指定 .repo 文件的绝对路径。.repo 文件包含软件仓库的信息 (作用与 /etc/yum.conf 文件中的 [repository] 片段相同)。 reposdir=[包含 .repo 文件的目录的绝对路径]
16.bugtracker_url:追踪bug路径
使用:man 5 yum.conf #可获得yum.conf的详解
yum的工作原理
yum的工作模式是C/S架构:
Server端(yum仓库):依赖关系库、原文件、校验码文件。
Client端:yum客户端程序、配置文件(连接Server路径信息)。
执行yum命令时,会首先从”/etc/yum.repo.d”目录下的众多repo文件中取得软件仓库的地址并下载“元数据”,“元数据”包含注册于该软件仓库内所有软件包的包名及其所需的依赖环境等信息,yum得到这些信息后会和本地以后环境做对比,进而列出确认需要安装哪些包,并在用户确认后开始安装。
“元数据”由位于yum源服务器相关路径的repodata目录下的repomd.xml做索引。
yum系统的工作流程:
yum的基本工作流程如下:
服务器端:在服务器上面存放了所有的rpm软件包,然后以相关的功能去分析每个rpm文件的依赖性关系,将这些数据记录成文件存放在服务器的某特定目录内。
客户端:如果需要安装某个软件时,先下载服务器上面记录的依赖性关系文件(可通过WWW或FTP方式),通过对服务器端下载的纪录数据进行分析,然后取得所有相关的软件,一次全部下载下来进行安装。
.repo文件
什么是repo文件? repo文件是Fedora中yum源(软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,例如我们将从哪里下载需要安装或者升级的软件包,repo文件中的设置内容将被yum读取和应用!
进入/etc/yum.repos.d/目录下,可以看到默认情况下有如下三个文件:
其中CentOS-Base.repo 是yum 网络源的配置文件(一般都是用这个)
CentOS-Debuginfo.repo debug包尤其和内核相关的更新和软件安装
CentOS-Media.repo 这个是使用光盘挂载后调用的文件(我机器上没有)
CentOS-Vault.repo 这个是最近新版本的加入的老版本的yum源配置(没有。。。)
epel.repo:EPEL(Extra Packages for Enterprise Linux)是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS等提供高质量软件包的项目。装上了 EPEL,就像在 Fedora 上一样,可以通过 yum install 软件包名,即可安装很多以前需要编译安装的软件、常用的软件或一些比较流行的软件,比如现在流行的nginx、htop、ncdu、vnstat等等,都可以使用EPEL很方便的安装更新。前可以直接通过执行命令: yum install epel-release 直接进行安装,如果不能安装,参考:https://www.cnblogs.com/imweihao/p/7357484.html
仓库(.repo文件)配置文件
#serverid是用于区别各个不同的repository,必须有一个独一无二的名称。若重复了,是前面覆盖后面--还是反过来呢???用enabled 测试是后面覆盖前面 [serverid] #name,是对repository的描述,支持像$releasever $basearch这样的变量; name=Fedora Core $releasever - $basearch - Released Updates name=Some name for this server #baseurl是服务器设置中最重要的部分,只有设置正确,才能从上面获取软件。它的格式是: #baseurl=url://server1/path/to/repository/ #url://server2/path/to/repository/ #url://server3/path/to/repository/ #其中url支持的协议有 http:// ftp:// file://三种。baseurl后可以跟多个url,你可以自己改为速度比较快的镜像站,但#baseurl只能有一个,也就是说不能像如下格式: #baseurl=url://server1/path/to/repository/ #baseurl=url://server2/path/to/repository/ #baseurl=url://server3/path/to/repository/ #其中url指向的目录必须是这个repository header目录的上一级,它也支持$releasever $basearch这样的变量。 baseurl=url://path/to/repository/ #指定一个镜像服务器的地址列表,通常是开启的,本例中加了注释符号禁用了,我们可以试试,将$releasever和$basearch替换 #成自己对应的版本和架构,例如10和i386,在浏览器中打开,我们就能看到一长串镜可用的镜像服务器地址列表。 #解释下几个变量 #$releasever 发行版的版本,从[main]部分的distroverpkg获取,如果没有,则根据redhat-release包进行判断。 #$arch cpu体系,如i686,athlon等 #$basearch cpu的基本体系组,如i686和athlon同属i386,alpha和alphaev6同属alpha。 # #url之后可以加上多个选项,如gpgcheck、exclude、failovermethod等,比如: #gpgcheck=1 #exclude=gaim #其中gpgcheck,exclude的含义和[main]部分相同,但只对此服务器起作用 #mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch #failovermethode 有两个选项roundrobin和priority,意思分别是有多个url可供选择时,yum选择的次序,roundrobin是随机选择,如果连接失 败则使用下一个,依次循环,priority则根据url的次序从第一个开始。如果不指明,默认是roundrobin。 failovermethod=priority #当某个软件仓库被配置成 enabled=0 时,yum 在安装或升级软件包时不会将该仓库做为软件包提供源。使用这个选项,可以启用或禁用软件仓库。 #通过 yum 的 --enablerepo=[repo_name] 和 --disablerepo=[repo_name] 选项,或者通过 PackageKit 的"添加/删除软件"工具,也能够方便地启用和禁用指定的软件仓库 enabled=[1 or 0]
参看:https://www.jb51.net/article/98963.htm
补充:
[repositoryID] #仓库ID,唯一标识别,不能重复
name=Some name for this repository # 完整的仓库名称
baseurl=url://path/to/repository/ # yum仓库指明的访问路径
enabled={1|0} #是否启用此yum仓库,默认启用
gpgcheck={1|0} #是否检查完整性和来源合法性
gpgkey=URL #秘钥文件位置,可能是对方仓库提供
enablegroups={1|0} #是否基于组来批量管理程序包
failovermethod={roundrobin|priority} #故障转移方法:轮询、根据优先级选择; 默认roundrobin随机
cost=# #设置开销,默认为1000
… ...
说明:
1)*.repo可以将多个[repositoryID]的配置信息放在一个而文件内,也可以切成多个方便管理
2)baseurl可以使用:ftp:// 、http:// 、nfs:// 、file:/// 指明URL路径
3)baseurl等号两边不能有空格,其后可以填写多个镜像访问路径,每行一个,不能顶行写
多个访问路径间联系是镜像相同,目的是为了做备用访问
4)更多选项使用man 5 yum.conf查看,基本配置只需前三行就可以
5)发行版光盘镜像安装可能会自动配置网络镜像URL地址
yum命令格式
yum的命令形式一般是如下:yum [options] [command] [package ...]
其中的[options]是可选的,选项包括-h(帮助),-y(当安装过程提示选择全部为"yes"),-q(不显示安装的过程)等等。[command]为所要进行的操作,[package ...]是操作的对象。
1.OPTIONS
--nogpgcheck:禁止进行gpg check;
-y: 自动回答为“yes”;
-q: 静默模式,不输出显示信息;
--disablerepo=repoidglob:临时禁用此处指定的repo;
--enablerepo=repoidglob:临时启用此处指定的repo;
--noplugins:禁用所有插件;
2.常用COMMAND
(1)显示仓库列表:repolist
# yum repolist [all|enabled|disabled] [所有|可用的|不可用]
参看:https://blog.csdn.net/xmm1981/article/details/78258176