我注意到,当我执行命令时,YUM 似乎会一遍又一遍地选择特定服务器yum update
,但有时它会切换并使用替代服务器。
在闲逛中,我注意到它使用了一个名为 的插件yum-fastestmirror
。
YUM 和这个插件是如何做到这一点的?
答案1
背景
插件百胜最快的镜子概念非常简单。它只是维护一个文本文件,其中包含 YUM 累积的每个镜像的时间,然后当要求 YUM 下载软件包时,它会使用下载期间显示最快的服务器。
时间存储在这个位置:
$ locate timedhosts.txt
/var/cache/yum/x86_64/7/timedhosts.txt
如果我们检查这个文件,我们会发现它只是主机名,每个主机名旁边都有时间。在这里,我们将其从最快到最慢进行排序:
$ sort -k2,2 /var/cache/yum/x86_64/7/timedhosts.txt
mirror.atlanticmetro.net 0.00165295600891
mirror.cc.columbia.edu 0.00172901153564
ewr.edge.kernel.org 0.00207901000977
mirror.es.its.nyu.edu 0.00217700004578
mirror.siena.edu 0.00543117523193
mirror.pit.teraswitch.com 0.0140120983124
mirrors.rit.edu 0.0208911895752
mirror.clarkson.edu 0.0243170261383
mirror.linux.duke.edu 0.0244128704071
mirror.mia11.us.leaseweb.net 0.0328259468079
mirror.hackingand.coffee 0.0435431003571
ftp.ussg.iu.edu 0.0479228496552
mirror.genesishosting.com 0.0481269359589
repo1.ash.innoscale.net 0.050274848938
mirror.den1.denvercolo.net 0.0838551521301
mirror.keystealth.org 0.134334802628
centos.mirror.ndchost.com 0.140916824341
现在,当我们询问特定包的位置是否要使用以下命令下载它时repoquery
:
$ $ repoquery --location java-1.8.0-openjdk
http://mirror.atlanticmetro.net/centos/7.7.1908/updates/x86_64/Packages/java-1.8.0-openjdk-1.8.0.222.b10-1.el7_7.i686.rpm
http://mirror.atlanticmetro.net/centos/7.7.1908/updates/x86_64/Packages/java-1.8.0-openjdk-1.8.0.222.b10-1.el7_7.x86_64.rpm
配置
yum-fastestmirror 插件也有自己的配置文件:
$ more /etc/yum/pluginconf.d/fastestmirror.conf
[main]
enabled=1
verbose=0
always_print_best_host = true
socket_timeout=3
# Relative paths are relative to the cachedir (and so works for users as well
# as root).
hostfilepath=timedhosts.txt
maxhostfileage=10
maxthreads=15
#exclude=.gov, facebook
#include_only=.nl,.de,.uk,.ie
通过此文件,我们可以指示插件将特定镜像列入白名单和黑名单,这些镜像要么在过去给我们带来了问题,要么出于某种原因被我们认为不可接受。