首先yum源的主配置文件为/etc/yum.conf文件。这个文件一般不用动,而我们配置具体的各个yum源的配置文件在/etc/yum.repo.d目录下,所有以repo结尾的文件都是yum源配置文件。

[root@localhost ha]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
CentOS-Base.repo CentOS-fasttrack.repos CentOS-Vault.repos
CentOS-Debuginfo.repos CentOS-Media.repos wo.repo

需要注意的是,配置的yum源的个数并不是以.repo的文件数量为计数,而是以在所有.repo文件里定义的所有yum源为计数,比如我在Centos-Base.repo中定义了3个yum源,在wo.repo中定义了两个,则我总共定义了5个yum源。这5个yum源的地位是相等的,不论他的名字是base,还是updates,还是extras,还是别的什么,注意,地位是相等的。比如我们要安装a软件,base这个yum源里的a软件的版本是1.0.0-1,而updates源的版本是1.0.0-2,5个yum源中,由我们定义的myyum源里的a软件的版本最高,为1.0.1,则我们执行yum -y install a的时候,安装的就是myyum源中的这个1.0.1版本的a,也就是说,yum在安装软件时,总是去找所有yum源里版本最高的那个去安装。

其次是定义yum源的规范:

[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=
enabled=
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

以上是base源的定义,第一行写源名称,用[]括起来,然后就可以配置了,name这个可以随便写,gpgcheck=1表示安装时进行gpg校验,enabled=1表示启用该yum源,=0则为不启用,默认如果不写这个参数,则表示启用。下面到了mirrorlist和baseurl这两个参数了,二者只能用一个,用了一个就要把另一个注释掉

mirrorlist保存的是yum源的镜像地址列表,是一个list,$releasever是你的centos系统的大的版本号,比如我的centos是6.8,则$releasever为6,而不是6.8.$basearch为系统是多少位的,比如我的是x86_64,$infra这个未知不用理会,所以,上面配置的地址为http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os

我们访问一下这个地址:

看到了没,是众多镜像地址的列表。

而baseurl则为具体的镜像地址,注意这个地址也可以定义多个。所以上面这个base源可以把mirrorlist注释掉,而用baseurl参数

[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
baseurl=http://mirrors.neusoft.edu.cn/centos/6.10/os/x86_64/
http://mirrors.nwsuaf.edu.cn/centos/6.10/os/x86_64/
http://mirrors.nju.edu.cn/centos/6.10/os/x86_64/
http://mirrors.shu.edu.cn/centos/6.10/os/x86_64/
http://mirrors.njupt.edu.cn/centos/6.10/os/x86_64/
http://mirrors.cqu.edu.cn/CentOS/6.10/os/x86_64/
http://mirrors.163.com/centos/6.10/os/x86_64/
http://mirrors.zju.edu.cn/centos/6.10/os/x86_64/
http://mirror.lzu.edu.cn/centos/6.10/os/x86_64/
http://ftp.sjtu.edu.cn/centos/6.10/os/x86_64/ gpgcheck=
enabled=
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

(多说一句,源地址一定是yum源repodata这个目录的所在目录,关于repodata目录的作用,请翻看其他文章)

那么yum在下载的时候,会选择哪个作为下载源呢?

首先,在同一个yum源中定义的地址,yum认为他们都是完全相同的,比如a软件,如果http://mirrors.neusoft.edu.cn/centos/6.10/os/x86_64/有,则http://mirrors.nwsuaf.edu.cn/centos/6.10/os/x86_64/也有,如果在http://mirrors.neusoft.edu.cn/centos/6.10/os/x86_64/中a的版本号是1.1,则在http://mirrors.nwsuaf.edu.cn/centos/6.10/os/x86_64/的版本也是1.1,反之,如果a在http://mirrors.neusoft.edu.cn/centos/6.10/os/x86_64/没有,则在

http://mirrors.nwsuaf.edu.cn/centos/6.10/os/x86_64/也没有。yum会定期对同一yum源中定义的众多地址进行测速,比如我们第一次用yum安装软件,yum第一个做的工作就是先对各个yum源中所有的地址进行测速,然后把结果保存在/var/cache/yum/x86_64/6目录下的timedhosts.txt文件中

[base]
baseurl=http://1.com/centos/6/os/x86_64
http://2.com/centos/6/os/x86_64
http://3.com/centos/6/os/x86_64 [updates]
baseurl=http://4.com/centos/6/updates/x86_64
http://5.com/centos/6/updates/x86_64
http://6.com/centos/6/updates/x86_64
[myyum]
baseurl=http://7.com/centos/6/myyum/x86_64
http://8.com/centos/6/myyum/x86_64
http://9.com/centos/6/myyum/x86_64
[root@localhost ]# cat timedhosts.txt 

.com 0.515101156543
.com 0.235213220074
.com 0.328243950073
.com 0.157401976252
.com 0.673211421011
.com 0.312501632173
.com 0.123424232373
.com 0.157476575652
.com 0.324236577511

比如测出来的结果像上面的这个,则从此以后,2.com就作为了base源的实际下载源,4.com就作为了updates源的实际下载源,7.com就作为了myyum源的实际下载源

假如我们要安装的是ss软件,则yum会在2.com,4.com,7.com中选择安装哪个。如果2.com这个下载源没有该软件,yum并不会再去1.com或者3.com中去寻找该软件,因为yum认为在同一yum源中定义的源都是完全相同的。假如实际的情况是,2.com中没有,4.com中有1.1版本,7.com中有1.2版本,则yum会最终以7.com为下载源。

所以,按照规范,我们在同一yum源中定义的各种源地址,彼此因为是完全相同的,假如我们不按照规范去定义,比如举个例子,上面这个例子中,我们定义的2.com和3.com是不同的,假如我们下载一个dd软件,2中没有,4中也没有,7中也没有,唯独3。com中有,则该软件依然无法安装,因为测速过程中2.com最快,那么yum认为2.com就代表了base这个yum源的实际情况。

注意这个测速表有时效性,比如他的生存周期是5天,则5天内我们用yum的时候,都会以此表作为根据,5天之后,我们再次用yum安装软件的时候,会重新测速,重新得到一个新表

事实上,/var/cache/yum这个目录并不是一个普通的目录,这正是yum的缓存所在的目录,缓存会存储很多信息,其中就包括各个源地址的速度

[root@localhost 6]# pwd
/var/cache/yum/x86_64/6
[root@localhost 6]# ls
base  myyum timedhosts.txt updates

缓存文件还会缓存一些别的东西

关于缓存文件的解释:

yum源有一些文件,我们姑且把他叫做源数据文件,这些源数据文件用于记录本仓库中所有的程序以及其依赖关系
yum命令会首先去下载这些源数据文件,下载到这些源数据文件以后,然后根据这些源数据文件,比对本地系统,看看哪些程序装了哪些没装,最终决定去yum源下载哪些文件,比如,我想安装程序A,然后yum先下载了这些源数据文件,查看到,程序A依赖程序B,C,D,,而程序D又依赖程序F,而程序B,C已经安装过了,于是yum就会只去yum源中下载程序A和程序D还有程序F。如果我们每次在安装新程序之前都去下载这些文件的话,势必造成带宽的浪费,因为很多时候yum源并没有更新,于是就有了这样一种机制,yum源除了有这些源数据文件以外,还会根据这些源数据文件生成一个特征码,如果yum源有更新,比如增加了一些软件或者更新了一些软件导致软件的依赖关系改变了,那么这些源数据文件肯定也会跟着改变,那么他的特征码也随之改变,于是,下次再运行yum命令的时候就先不去下载这些源数据文件了,而是去直接下载校验码,然后比对之前下载的源数据文件的校验码,如果两者一致,证明yum源没有更新,那么这些源数据文件依然可以被分析使用,如果不一致了,那么再重新去下载这些源数据文件

而对于客户端来讲,这些源数据文件就保存在/var/cache/yum下,而对于yum源来讲,则保存在repodata目录下

yum2的更多相关文章

  1. CentOS Yum 命令详解

    总所周知,Redhat和Fedora的软件安装命令是rpm,但是用rpm安 装软件最大的麻烦就是需要手动寻找安装该软件所需要的一系列依赖关系,超级麻烦不说,要是软件不用了需要卸载的话由于卸载掉了某个依 ...

  2. apt-get 与 yum的区别 (转)

    一般来说著名的linux系统基本上分两大类:1.RedHat系列:Redhat.Centos.Fedora等2.Debian系列:Debian.Ubuntu等 RedHat 系列 1 常见的安装包格式 ...

  3. REDHAT4.8安装yum

    公司用的机器还在跑RHEL4(Red Hat Enterprise Linux AS 4.8),没有yum安装软件真是费时间啊,于是上网找了半天yum安装方法,终于成功.分享一下:核心:wget ht ...

  4. 【转发】RedHat Enterprise Linux 6.4 使用 Centos 6 的yum源问题

    作为一名新手,学习Linux已经一个月了,其间遇到了不少问题,而今天笔者遇到的问题是 #yum install pam-devel #This system is not registered to ...

  5. yum工具介绍

    当你的linux处于联网状态时,yum工具能够非常方便的在Linux上安装各种软件.补丁等等,而且最重要的一点是完全不用管包的依赖关系.只需要简单的指定你要安装的软件名称,其他工作几乎都交给yum了, ...

  6. redhat 6 配置 yum 源的两种方法

      由于 redhat的yum在线更新是收费的,如果没有注册的话不能使用,如果要使用,需将redhat的yum卸载后,重启安装,再配置其他源. 本文包括配置本地源及第三方源.第三方源包括:网易,epe ...

  7. sudo apt-get 与 yum安装有啥区别

    rpm包和deb包是两种Linux系统下最常见的安装包格式,在安装一些软件或服务的时候免不了要和它们打交道. rpm包主要应用在RedHat系列包括 Fedora等发行版的Linux系统上, deb包 ...

  8. redis4.0.6集群搭建

    文件环境:CentOS7 + redis4.0.6 先去官网下载redis:https://redis.io/,然后上传到你的虚拟机,我上传到了/mysoft 先解压->然后进入主目录-> ...

  9. linux更换yum源

    由于 redhat的yum在线更新是收费的,如果没有注册的话不能使用,如果要使用,需将redhat的yum卸载后,重启安装,再配置其他源,以下为详细过程: 1.删除redhat原有的yum rpm - ...

随机推荐

  1. Java 接口篇

    为什么使用接口? 问题 要求实现防盗门的功能 分析 门有开和关的功能,锁有上锁和开锁的功能 将门和锁分别定义为抽奖类 那么问题就是防盗门即继承了门的同时又继承了锁,而Java的继承是单继承,接口可多继 ...

  2. 数位DP入门题

    站点一览: hdu 2089"不要62" hdu 4734"F(X)" poj 3252"Round Numbers" hdu 3709&q ...

  3. c#的一些快捷键

    ctrl+c+s 外加代码 F12 转到定义 ctrl+F5调试 一些补全命令 svm Main函数的补全命令 prop 属性的补全命令

  4. Python_sys模块

    import sys import time # 实现百分比的滑动进度(1%-100%) def view_bar(num,total): rate=num/total rate_num=int(ra ...

  5. xgboost使用调参

    欢迎关注博主主页,学习python视频资源 https://blog.csdn.net/q383700092/article/details/53763328 调参后结果非常理想 from sklea ...

  6. 开源图片文字识别引擎——Tesseract OCR

    Tessseract为一款开源.免费的OCR引擎,能够支持中文十分难得.虽然其识别效果不是很理想,但是对于要求不高的中小型项目来说,已经足够用了. 文字识别可应用于许多领域,如阅读.翻译.文献资料的检 ...

  7. ubuntu 14.04中安装 ruby on rails 环境

    环境:在win7 上Vmware虚拟机环境中安装的ubuntu 14.04 1. bundle install 时,报json错误可以看出是在安装nokogiri时遇到了问题,此时执行 sudo ap ...

  8. mysq存储金额的数值类型选择

    在之前得项目中用到了double,计算之后有很长得小数位,需要用算法去除,非常麻烦,以后推荐使用:decimal 这个是专门处理金额值的,Java 类型对应BigDecimal

  9. Django之组件--auth组件

    目录 Auth模块是什么 auth模块常用方法 扩展默认的auth_user表 1 Django自带的用户认证模块,可以快速的实现登录,注销,修改密码... 2 扩展auth表,需要继承Abstrac ...

  10. vue-router拦截

    说明:以下均在main.js中添加. 主要思路 1.在路由分发时,检查本地缓存是否有账号信息,如果没有,跳转登陆页面,传入当前路由 2.在发送请求时,添加账号token 3.在接收请求时,检查响应的数 ...