замены зеркал на Yandex в различных Linux-дистрибутивах
Ни для кого ни секрет, что в настоящее время некоторые зарубежные репозитории пакетов стали недоступны для пользователей России. Некоторые дата центры не позволяют обновлять с официальных репозиториев, либо блокировка исходит от самих репозиториев по географической принадлежности. Это создает проблемы при обновлении ОС и установке необходимого программного обеспечения. Лучшим вариантом будет переход на репозитории Yandex. О чем и поговорим.
Преимущества зеркал Yandex
-
Высокая скорость загрузки пакетов для пользователей в России
-
Стабильность работы
-
Актуальность репозиториев
-
Полнота пакетов (включая non-free и contrib)
Для Debian/Ubuntu и производных (APT)
#!/bin/bash
# Определяем версию Debian/Ubuntu
if [ -f /etc/os-release ]; then
. /etc/os-release
DIST=$ID
VERSION=$VERSION_ID
CODENAME=$(echo $VERSION_CODENAME | tr -d '\n')
if [ -z "$CODENAME" ]; then
case $VERSION in
"12") CODENAME="bookworm" ;;
"11") CODENAME="bullseye" ;;
"10") CODENAME="buster" ;;
"9") CODENAME="stretch" ;;
"22.04") CODENAME="jammy" ;;
"20.04") CODENAME="focal" ;;
"18.04") CODENAME="bionic" ;;
*) CODENAME="unknown" ;;
esac
fi
if [ "$CODENAME" != "unknown" ]; then
echo "Обнаружена система: $DIST $VERSION ($CODENAME)"
# Создаем резервную копию текущего sources.list
cp /etc/apt/sources.list /etc/apt/sources.list.bak
# Записываем новые зеркала
if [ "$DIST" = "debian" ]; then
echo "deb http://mirror.yandex.ru/debian/ $CODENAME main contrib non-free non-free-firmware
deb http://mirror.yandex.ru/debian/ $CODENAME-updates main contrib non-free non-free-firmware
deb http://mirror.yandex.ru/debian-security/ $CODENAME-security main contrib non-free non-free-firmware" | tee /etc/apt/sources.list
elif [ "$DIST" = "ubuntu" ]; then
echo "deb http://mirror.yandex.ru/ubuntu/ $CODENAME main restricted universe multiverse
deb http://mirror.yandex.ru/ubuntu/ $CODENAME-updates main restricted universe multiverse
deb http://mirror.yandex.ru/ubuntu/ $CODENAME-security main restricted universe multiverse" | tee /etc/apt/sources.list
fi
# Обновляем список пакетов
apt update
echo "Зеркала успешно заменены на Yandex!"
else
echo "Не удалось определить кодовое имя дистрибутива."
fi
else
echo "Не удалось определить дистрибутив."
fi
Для CentOS/RHEL/AlmaLinux/Rocky Linux (YUM/DNF)
#!/bin/bash
# Определяем дистрибутив
if [ -f /etc/redhat-release ]; then
echo "Обнаружена RHEL-подобная система"
# Создаем резервную копию
mkdir -p /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/
# Для CentOS 7
if grep -q "CentOS Linux 7" /etc/redhat-release; then
echo "Устанавливаем зеркала для CentOS 7"
cat > /etc/yum.repos.d/yandex.repo <<EOL
[base]
name=CentOS-\$releasever - Base - Yandex
baseurl=http://mirror.yandex.ru/centos/7/os/\$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[updates]
name=CentOS-\$releasever - Updates - Yandex
baseurl=http://mirror.yandex.ru/centos/7/updates/\$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[extras]
name=CentOS-\$releasever - Extras - Yandex
baseurl=http://mirror.yandex.ru/centos/7/extras/\$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
EOL
# Для CentOS 8 / RHEL 8 / AlmaLinux 8 / Rocky Linux 8
elif grep -q -E "CentOS Linux 8|AlmaLinux|Rocky Linux" /etc/redhat-release; then
echo "Устанавливаем зеркала для CentOS 8 / RHEL 8 / AlmaLinux / Rocky Linux"
cat > /etc/yum.repos.d/yandex.repo <<EOL
[baseos]
name=CentOS-\$releasever - BaseOS - Yandex
baseurl=http://mirror.yandex.ru/centos/8/BaseOS/\$basearch/os/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
[appstream]
name=CentOS-\$releasever - AppStream - Yandex
baseurl=http://mirror.yandex.ru/centos/8/AppStream/\$basearch/os/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
[extras]
name=CentOS-\$releasever - Extras - Yandex
baseurl=http://mirror.yandex.ru/centos/8/extras/\$basearch/os/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
EOL
fi
# Обновляем кеш
if command -v dnf &> /dev/null; then
dnf makecache
else
yum makecache
fi
echo "Зеркала успешно заменены на Yandex!"
else
echo "Не удалось определить RHEL-подобный дистрибутив."
fi
Для Arch Linux (Pacman)
#!/bin/bash
if [ -f /etc/arch-release ]; then
echo "Обнаружен Arch Linux"
# Создаем резервную копию
cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak
# Устанавливаем зеркало Yandex
echo 'Server = http://mirror.yandex.ru/archlinux/$repo/os/$arch' > /etc/pacman.d/mirrorlist
# Обновляем базу данных пакетов
pacman -Syy
echo "Зеркало успешно заменено на Yandex!"
else
echo "Не удалось определить Arch Linux."
fi
Консольные команды (для ввода в консоль без создания скриптов):
Для Debian:
sudo sh -c 'echo "deb http://mirror.yandex.ru/debian/ bookworm main contrib non-free non-free-firmware\ndeb http://mirror.yandex.ru/debian/ bookworm-updates main contrib non-free non-free-firmware\ndeb http://mirror.yandex.ru/debian-security/ bookworm-security main contrib non-free non-free-firmware" > /etc/apt/sources.list && apt update'
Для Ubuntu:
sudo sh -c 'echo "deb http://mirror.yandex.ru/ubuntu/ jammy main restricted universe multiverse\ndeb http://mirror.yandex.ru/ubuntu/ jammy-updates main restricted universe multiverse\ndeb http://mirror.yandex.ru/ubuntu/ jammy-security main restricted universe multiverse" > /etc/apt/sources.list && apt update'
Для CentOS 7:
sudo sh -c 'mkdir -p /etc/yum.repos.d/backup && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/ && echo -e "[base]\nname=CentOS-\$releasever - Base - Yandex\nbaseurl=http://mirror.yandex.ru/centos/7/os/\$basearch/\ngpgcheck=1\ngpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7\n\n[updates]\nname=CentOS-\$releasever - Updates - Yandex\nbaseurl=http://mirror.yandex.ru/centos/7/updates/\$basearch/\ngpgcheck=1\ngpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7\n\n[extras]\nname=CentOS-\$releasever - Extras - Yandex\nbaseurl=http://mirror.yandex.ru/centos/7/extras/\$basearch/\ngpgcheck=1\ngpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7" > /etc/yum.repos.d/yandex.repo && yum makecache'
Для CentOS 8/RHEL 8/AlmaLinux/Rocky Linux:
sudo sh -c 'mkdir -p /etc/yum.repos.d/backup && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/ && echo -e "[baseos]\nname=CentOS-\$releasever - BaseOS - Yandex\nbaseurl=http://mirror.yandex.ru/centos/8/BaseOS/\$basearch/os/\ngpgcheck=1\ngpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial\n\n[appstream]\nname=CentOS-\$releasever - AppStream - Yandex\nbaseurl=http://mirror.yandex.ru/centos/8/AppStream/\$basearch/os/\ngpgcheck=1\ngpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial\n\n[extras]\nname=CentOS-\$releasever - Extras - Yandex\nbaseurl=http://mirror.yandex.ru/centos/8/extras/\$basearch/os/\ngpgcheck=1\ngpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial" > /etc/yum.repos.d/yandex.repo && dnf makecache'
Для Arch Linux:
sudo sh -c 'echo "Server = http://mirror.yandex.ru/archlinux/\$repo/os/\$arch" > /etc/pacman.d/mirrorlist && pacman -Syy'
Универсальная команда с автоматическим определением дистрибутива:
sudo sh -c 'if [ -f /etc/debian_version ]; then echo "deb http://mirror.yandex.ru/debian/ bookworm main contrib non-free non-free-firmware\ndeb http://mirror.yandex.ru/debian/ bookworm-updates main contrib non-free non-free-firmware\ndeb http://mirror.yandex.ru/debian-security/ bookworm-security main contrib non-free non-free-firmware" > /etc/apt/sources.list && apt update; elif [ -f /etc/redhat-release ] && grep -q "CentOS Linux 7" /etc/redhat-release; then mkdir -p /etc/yum.repos.d/backup && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/ && echo -e "[base]\nname=CentOS-\$releasever - Base - Yandex\nbaseurl=http://mirror.yandex.ru/centos/7/os/\$basearch/\ngpgcheck=1\ngpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7\n\n[updates]\nname=CentOS-\$releasever - Updates - Yandex\nbaseurl=http://mirror.yandex.ru/centos/7/updates/\$basearch/\ngpgcheck=1\ngpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7\n\n[extras]\nname=CentOS-\$releasever - Extras - Yandex\nbaseurl=http://mirror.yandex.ru/centos/7/extras/\$basearch/\ngpgcheck=1\ngpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7" > /etc/yum.repos.d/yandex.repo && yum makecache; elif [ -f /etc/arch-release ]; then echo "Server = http://mirror.yandex.ru/archlinux/\$repo/os/\$arch" > /etc/pacman.d/mirrorlist && pacman -Syy; fi'
Некоторые дистрибутивы могут иметь специфические требования:
-
Fedora: В связи с политиками Fedora Project, российские зеркала могут не содержать всех пакетов.
-
openSUSE: Имеет сложную структуру репозиториев, рекомендуется использовать
zypper mrдля изменения приоритетов зеркал. -
Старые версии дистрибутивов: Могут не поддерживаться российскими зеркалами.
Представленные скрипты позволяют быстро и безопасно перевести систему на использование российских зеркал от Yandex, что особенно актуально в текущих условиях ограничения доступа к зарубежным репозиториям. Перед выполнением замены рекомендуется создать резервные копии текущих конфигурационных файлов.
После замены зеркал рекомендуется выполнить полное обновление системы:
-
Для APT:
apt update && apt upgrade -y -
Для YUM/DNF:
yum update -yилиdnf upgrade -y -
Для Pacman:
pacman -Syu