CentOS заставляет 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

Я хотел бы знать, есть ли параметр при запросе mirrorlist.centos.org, который я могу указать для фильтрации по местоположению, нечто вроде этого:

mirrorlist=http://mirrorlist.centos.org/?country=us&other-params-ommitted

(country= я пробовал, не дало никакого эффекта)

Мне не удалось найти какую-либо соответствующую документацию по API сайта.

Итак, я немного покопался, прежде чем задать этот вопрос, и сам нашел ответ, вот он.

Я искал “Centos mirrorlist API” и нашел репозиторий кода для веб-сервиса. Я изучил его исходный код и нашел этот фрагмент кода здесь:

  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'

Похоже, что параметр просто cc. Я протестировал с помощью следующих URL и действительно получил желаемые зеркала:


Редактировать

Оказалось, что я на самом деле посмотрел не на тот файл, что довольно неловко 😅

  • isoredirect.py на самом деле отвечает за страницу загрузки ISO;
  • ml.py отвечает за mirrorlist. Сначала я не смотрел его, потому что думал, что это означает машинное обучение… Ну да ладно.

Я имею в виду, что я пришел к правильному ответу, но чуть не так, как ожидал. cc также используется в ml.py и делает практически то же самое.

Я обнаружил, что использование запроса country в URL работает для Fedora metalink URL.

Например, чтобы запросить зеркала, ближайшие к Австралии (AU), добавьте &country=au в конец URL metalink.

[updates]
name=Fedora $releasever - $basearch - Updates
metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-released-f$releasever&arch=$basearch&country=au
...

Ссылки на:

Ответ или решение

Чтобы заставить dnf в CentOS 8 использовать зеркала из определенного региона, следует внести изменения в конфигурационные файлы репозиториев, находящиеся в директории /etc/yum.repos.d/. Это можно сделать без необходимости вручную поддерживать список зеркал.

Шаг 1: Изучение конфигурации репозиториев

Для начала, откройте файл конфигурации, например, /etc/yum.repos.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

Обратим внимание на строку, содержащую mirrorlist, поскольку именно она указывает на сервер, который предоставляет список зеркал.

Шаг 2: Использование параметра cc

Чтобы ограничить запрос только зеркалами из конкретной страны или региона, необходимо добавить параметр cc к URL-адресу mirrorlist. Например, чтобы получить зеркала только из США, измените строку на:

mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&cc=us

Параметры cc

Параметр cc должен содержать код страны, который используется для фильтрации зеркал. Например:

  • Для США: cc=us
  • Для Канады: cc=ca
  • Для Китая: cc=cn

Важно отметить, что этот параметр действительно работает, как подтвердили тесты с использованием разные комбинации кода страны и архитектуры.

Выполнение изменений

После того как вы внесли изменения в файл репозитория, не забудьте проверить правильность конфигурации. Для этого выполните следующую команду:

dnf clean all
dnf makecache

Эти команды очистят кэш и обновят его с новым списком зеркал в соответствии с вашими установками.

Заключение

Таким образом, изменение конфигурационных файлов репозиториев и использование параметра cc позволяют dnf загружать пакеты и обновления исключительно из нужных вам регионов, что может существенно улучшить скорость загрузки и надежность подключения в зависимости от вашего местоположения.

В случае возникновения вопросов или необходимости дальнейшей помощи всегда можно обратиться к документации CentOS или сообществам пользователей.

Оцените материал
Добавить комментарий

Капча загружается...