CentOS强制dnf使用特定位置的镜像

cyq*_*mon 0 yum centos repository geolocation dnf

使用 CentOS 8。

我想强制dnf只在某个位置附近使用镜子,而不必手动维护所需镜子的列表。所以我想修改/etc/yum.repo.d/.

/etc/yum.repo.d/CentOS-Linux-BaseOS.repo个例子,这是它的默认状态:

[baseos]
name=CentOS Linux $releasever - BaseOS
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Run Code Online (Sandbox Code Playgroud)

我想知道查询时是否有一个参数mirrorlist.centos.org可以指定按位置过滤,如下所示:

mirrorlist=http://mirrorlist.centos.org/?country=us&other-params-ommitted
Run Code Online (Sandbox Code Playgroud)

country=我试过了,什么也没做)

我在该网站的 API 上找不到任何相关文档。

cyq*_*mon 5

因此,在发布这个问题之前,我进行了更深入的研究,并自己得到了答案,所以就在这里。

我搜索“CentosmirrorlistAPI”并找到了webservice的代码存储库我深入研究了它的源代码并在这里找到了这段代码:

  ip=request.remote_route[-1]
  cc=request.query.cc
  debug=request.query.debug
  remote_ip = ipaddr.IPAddress(ip)
  mirrorlistpage = "https://www.centos.org/download/mirrors/"
  if branch == "altarch":
    mirrorlistpage = "https://www.centos.org/download/altarch-mirrors/"

  region = None
  if len(cc) == 5 and cc[2:3] == "-":
    country = cc[:2]
    region = cc[3:]
  elif len(cc) > 0:
    country = cc
  else:
    try:
      country = geodb.city(ip).country.iso_code.lower()
      if country == 'us' or country == 'ca':
        try:
          region = geodb.city(ip).subdivisions.most_specific.iso_code
        except:
          pass
    except:
      country = 'fallback'
Run Code Online (Sandbox Code Playgroud)

看起来参数只是cc. 我使用以下 URL 进行了测试,确实得到了我想要的镜像:


编辑

原来我居然看错文件了,有点尴尬

  • isoredirect.py实际上负责 ISO 下载页面;
  • ml.py是负责镜像列表的人。我最初没有看它,因为我认为它代表机器学习......哦,好吧。

我的意思是,我只是通过不准确的过程得到了正确的答案。cc也用于ml.py并且做几乎完全相同的事情。