При установке или обновлении пакетов в CentOS 8 yum и dnf выдают ошибку:
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
Почему так происходит
Поддержка CentOS 8 закончилась 31 декабря 2021 года, а с 31 января 2022 года её пакеты убрали с основных зеркал. Список зеркал, к которому обращается менеджер пакетов, стал пустым, отсюда и ошибка. Сами пакеты остались в архиве vault.centos.org, но обновлений безопасности для CentOS 8 больше нет.
Как исправить
Отключаем обращение к списку зеркал и направляем репозитории в архив:
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
Первая команда комментирует строки mirrorlist, вторая включает строки baseurl с адресом архива. После этого очистите кэш и проверьте:
dnf clean all
dnf makecache
Ошибка «failovermethod does not exist»
После перехода на dnf может появиться и такая ошибка, обычно из-за репозитория PostgreSQL:
Invalid configuration value: failovermethod=priority in /etc/yum.repos.d/pgdg-redhat-all.repo; Configuration: OptionBinding with id "failovermethod" does not exist
Параметр failovermethod остался от старого yum, dnf его не поддерживает. Удаляем его из файлов репозиториев:
sudo sed -i '/^failovermethod=/d' /etc/yum.repos.d/*.repo
Что делать дальше
Архив — временное решение: система продолжит работать, но без исправлений безопасности. Для рабочих серверов стоит спланировать переход на поддерживаемый дистрибутив, например Rocky Linux, AlmaLinux или CentOS Stream.
Похожая ошибка появляется и на CentOS 7 после окончания её поддержки 30 июня 2024 года. Подход тот же: перевести репозитории на архив vault.centos.org, где последняя версия хранится в каталоге 7.9.2009.