замены зеркал на Yandex в различных Linux-дистрибутивах

Ни для кого ни секрет, что в настоящее время некоторые зарубежные репозитории пакетов стали недоступны для пользователей России. Некоторые дата центры не позволяют обновлять с официальных репозиториев, либо блокировка исходит от самих репозиториев по географической принадлежности. Это создает проблемы при обновлении ОС и установке необходимого программного обеспечения. Лучшим вариантом будет переход на репозитории Yandex. О чем и поговорим.

Преимущества зеркал Yandex

  1. Высокая скорость загрузки пакетов для пользователей в России

  2. Стабильность работы

  3. Актуальность репозиториев

  4. Полнота пакетов (включая 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'

 

Некоторые дистрибутивы могут иметь специфические требования:

  1. Fedora: В связи с политиками Fedora Project, российские зеркала могут не содержать всех пакетов.

  2. openSUSE: Имеет сложную структуру репозиториев, рекомендуется использовать zypper mr для изменения приоритетов зеркал.

  3. Старые версии дистрибутивов: Могут не поддерживаться российскими зеркалами.

 

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

После замены зеркал рекомендуется выполнить полное обновление системы:

  • Для APT: apt update && apt upgrade -y

  • Для YUM/DNF: yum update -y или dnf upgrade -y

  • Для Pacman: pacman -Syu

Добавить комментарий 0

Ваш электронный адрес не будет опубликован. Обязательные поля помечены *