Переключение репозиториев Fedora, RPM Fusion и EPEL на российские зеркала
Яндекса (mirror.yandex.ru) и HyperDedic (mirror.hyperdedic.ru) — одним
командой, с автоматическим бэкапом и полным откатом прежнего состояния.
Зеркало Яндекса полностью зеркалирует Fedora, RPM Fusion (free/nonfree) и EPEL — это самый надёжный вариант для машин, находящихся в РФ. HyperDedic — резервный вариант для Fedora и EPEL.
metalink/mirrorlist на прямые baseurl зеркал без ручного редактирования файлов.fedora, updates, updates-testing, *-modular, RPM Fusion
free/nonfree (release, updates, updates-testing), epel, epel-testing, epel-modular.fedora-cisco-openh264 (недоступен из РФ, ошибка 403):
отключение или перевод на codecs.fedoraproject.org./etc/yum.repos.d перед каждой правкой и команда restore
для возврата байт-в-байт.--dry-run — посмотреть diff без изменений и без root.gpgcheck=1 сохраняется всегда — проверка подписей пакетов не отключается.epel*)dnf или dnf5 (для обновления метаданных)git clone <URL-репозитория> && cd mirror-switch
sudo install -m 0755 mirror-switch.sh /usr/local/sbin/mirror-switch.sh
# 1. что прописано сейчас
mirror-switch.sh status
# 2. сухой прогон: показать будущие изменения (root не нужен)
mirror-switch.sh yandex --dry-run
# 3. переключиться на зеркало Яндекса (бэкап создастся автоматически)
sudo mirror-switch.sh yandex
# 4. проверить
sudo dnf repolist
cat /etc/yum.repos.d/fedora.repo
# 5. если что-то не так — полный откат
sudo mirror-switch.sh restore
| Команда | Что делает | root |
|---|---|---|
yandex |
Снимок → baseurl на mirror.yandex.ru для Fedora, Updates, RPM Fusion, EPEL; Cisco OpenH264 выключает |
да |
hyperdedic |
То же на mirror.hyperdedic.ru; RPM Fusion не трогает (HyperDedic его не зеркалирует) |
да |
restore |
Возврат файлов из снимка (полный откат), затем dnf clean all && dnf makecache |
да |
list |
Список снимков в /etc/yum.repos.d.bak/ (хранятся последние 10) |
нет |
status |
Таблица: repo id, enabled, источник (yandex/hyperdedic/metalink), URL |
нет |
| Опция | Назначение |
|---|---|
-n, --dry-run |
показать diff и выйти, ничего не меняя; root не нужен |
--cisco=disable \| codecs \| keep |
поведение для fedora-cisco-openh264 / epel-cisco-openh264 (по умолчанию disable) |
--no-refresh |
не запускать dnf clean all / dnf makecache |
--snapshot ID |
(для restore) конкретный снимок вместо последнего |
--purge |
(для restore) удалить .repo-файлы, появившиеся после снимка |
-h, --help |
краткая справка |
fedora, updates, rf-nonfree-updates, epel, …)
по её ID и имени файла. Неизвестные секции не изменяются./etc/yum.repos.d копируется в
/etc/yum.repos.d.bak/<метка-времени>-before-<зеркало> (хранится 10 последних снимков).metalink/mirrorlist/baseurl удаляются, сразу под
заголовком секции прописывается новый baseurl; gpgcheck/gpgkey не изменяются.dnf clean all и dnf makecache (отключается опцией --no-refresh).Все URL используют литеральные $releasever и $basearch — их подставляет сам DNF.
| Repo ID | baseurl |
|---|---|
fedora |
https://mirror.yandex.ru/fedora/linux/releases/$releasever/Everything/$basearch/os/ |
fedora-modular |
https://mirror.yandex.ru/fedora/linux/releases/$releasever/Modular/$basearch/os/ |
updates |
https://mirror.yandex.ru/fedora/linux/updates/$releasever/Everything/$basearch/ |
updates-modular |
https://mirror.yandex.ru/fedora/linux/updates/$releasever/Modular/$basearch/ |
updates-testing |
https://mirror.yandex.ru/fedora/linux/updates/testing/$releasever/Everything/$basearch/ |
updates-testing-modular |
https://mirror.yandex.ru/fedora/linux/updates/testing/$releasever/Modular/$basearch/ |
rpmfusion-free |
https://mirror.yandex.ru/fedora/rpmfusion/free/fedora/releases/$releasever/Everything/$basearch/os/ |
updates-rpmfusion-free |
https://mirror.yandex.ru/fedora/rpmfusion/free/fedora/updates/$releasever/$basearch/ |
updates-testing-rpmfusion-free |
https://mirror.yandex.ru/fedora/rpmfusion/free/fedora/updates/testing/$releasever/$basearch/ |
rpmfusion-nonfree и его updates |
то же, но с /nonfree/ вместо /free/ |
epel (EL) |
https://mirror.yandex.ru/fedora/epel/$releasever/Everything/$basearch/ |
epel-testing (EL) |
https://mirror.yandex.ru/fedora/epel/testing/$releasever/Everything/$basearch/ |
epel-modular (EL) |
https://mirror.yandex.ru/fedora/epel/$releasever/Modular/$basearch/ |
fedora-cisco-openh264, epel-cisco-openh264 |
по умолчанию enabled=0; при --cisco=codecs → https://codecs.fedoraproject.org/openh264/$releasever/$basearch/ |
Секции SRPM/debuginfo, а также сторонние репозитории (Google Chrome, VS Code, NVIDIA,
COPR-репозитории copr.fedorainfracloud.org…) скрипт намеренно не изменяет.
# переключение с отключением Cisco OpenH264 (значение по умолчанию)
sudo mirror-switch.sh yandex
# оставить OpenH264, но перевести на официальное зеркало кодеков
sudo mirror-switch.sh yandex --cisco=codecs
# не трогать cisco-репозитории вообще и не обновлять кэш
sudo mirror-switch.sh yandex --cisco=keep --no-refresh
# посмотреть снимки и откатиться к конкретному
mirror-switch.sh list
sudo mirror-switch.sh restore --snapshot 20260924T101530Z-before-yandex
# откат + удалить .repo, добавленные после снимка
sudo mirror-switch.sh restore --purge
Снимки хранятся в /etc/yum.repos.d.bak/ (имя каталога — UTC-метка и целевое зеркало),
автоматически чистятся до 10 последних. Поведение настраивается переменными окружения:
| Переменная | По умолчанию | Назначение |
|---|---|---|
REPO_DIR |
/etc/yum.repos.d |
каталог .repo-файлов |
SNAPSHOT_ROOT |
/etc/yum.repos.d.bak |
каталог снимков |
KEEP_SNAPSHOTS |
10 |
сколько снимков хранить |
restore копирует файлы из снимка с сохранением прав (cp -a). Файлы, появившиеся
после снимка, по умолчанию сохраняются с предупреждением — удалить их можно опцией --purge.
Репозиторий fedora-cisco-openh264 недоступен из России (HTTP 403) и для большинства
задач не нужен — кодеки удобнее ставить из RPM Fusion (openh264, ffmpeg).
Поэтому по умолчанию он отключается (enabled=0). Альтернативы:
sudo mirror-switch.sh yandex --cisco=codecs # перевести на codecs.fedoraproject.org
sudo mirror-switch.sh yandex --cisco=keep # не трогать
gpgcheck=1 никогда не отключается. Пакеты на зеркалах подписаны ключами
Fedora/RPM Fusion, проверка подписи гарантирует, что пакет не подменён.gpgkey остаётся исходным (file:///etc/pki/rpm-gpg/... или официальный URL RPM Fusion).| Симптом | Что делать |
|---|---|
Failed to download metadata для одной секции |
sudo dnf repoinfo <repo-id> — проверить URL; возможно, у зеркала нет каталога для $releasever (например, релиз EOL) |
404 на новом релизе Fedora |
зеркало ещё синхронизировалось — подождать или временно sudo mirror-switch.sh restore |
| Нужно вернуть всё как было | sudo mirror-switch.sh restore (список снимков — mirror-switch.sh list) |
| Хочу посмотреть изменения без риска | mirror-switch.sh yandex --dry-run |
Скрипт пишет ВНИМАНИЕ: RPM Fusion ... не зеркалируется |
ожидаемо для hyperdedic — секции RPM Fusion остаются на своих адресах |
Правила внесения изменений, инварианты и тестовые сценарии — в AGENTS.md.
Проверка перед коммитом:
shellcheck mirror-switch.sh
shfmt -i 2 -ci -sr -d mirror-switch.sh
bash tests/run-tests.sh
MIT — см. LICENSE.