mnogoweb revised this gist 11 months ago. Go to revision
1 file changed, 1 insertion, 1 deletion
setup-local-repos.sh
| @@ -6,7 +6,7 @@ | |||
| 6 | 6 | # Как использовать: | |
| 7 | 7 | # | |
| 8 | 8 | # Установка: | |
| 9 | - | # wget -O setup-local-repos.sh https://t.mnogoweb.com/mnogoweb/bfc651ecb5b64d798a70eb9a7dee02e7/raw/HEAD/update-repos.sh | |
| 9 | + | # wget -O setup-local-repos.sh https://t.mnogoweb.com/mnogoweb/bfc651ecb5b64d798a70eb9a7dee02e7/raw/HEAD/setup-local-repos.sh | |
| 10 | 10 | # chmod +x setup-local-repos.sh | |
| 11 | 11 | # | |
| 12 | 12 | # Основной режим: | |
mnogoweb revised this gist 11 months ago. Go to revision
No changes
mnogoweb revised this gist 11 months ago. Go to revision
No changes
mnogoweb revised this gist 11 months ago. Go to revision
1 file changed, 18 insertions
update-repos.sh renamed to setup-local-repos.sh
| @@ -3,6 +3,24 @@ | |||
| 3 | 3 | # Скрипт для замены репозиториев на локальные российские зеркала | |
| 4 | 4 | # Поддерживает Debian 12/13 и AlmaLinux 8/9/10 | |
| 5 | 5 | ||
| 6 | + | # Как использовать: | |
| 7 | + | # | |
| 8 | + | # Установка: | |
| 9 | + | # wget -O setup-local-repos.sh https://t.mnogoweb.com/mnogoweb/bfc651ecb5b64d798a70eb9a7dee02e7/raw/HEAD/update-repos.sh | |
| 10 | + | # chmod +x setup-local-repos.sh | |
| 11 | + | # | |
| 12 | + | # Основной режим: | |
| 13 | + | # sudo ./setup-local-repos.sh | |
| 14 | + | # | |
| 15 | + | # Проверить текущие репозитории: | |
| 16 | + | # sudo ./setup-local-repos.sh --check | |
| 17 | + | # | |
| 18 | + | # Откатить изменения: | |
| 19 | + | # sudo ./setup-local-repos.sh --rollback | |
| 20 | + | # | |
| 21 | + | # Подробный вывод: | |
| 22 | + | # sudo ./setup-local-repos.sh --verbose | |
| 23 | + | ||
| 6 | 24 | set -e # Выход при ошибках | |
| 7 | 25 | ||
| 8 | 26 | # Цвета для вывода | |
mnogoweb revised this gist 11 months ago. Go to revision
No changes
mnogoweb revised this gist 11 months ago. Go to revision
1 file changed, 509 insertions
update-repos.sh(file created)
| @@ -0,0 +1,509 @@ | |||
| 1 | + | #!/bin/bash | |
| 2 | + | ||
| 3 | + | # Скрипт для замены репозиториев на локальные российские зеркала | |
| 4 | + | # Поддерживает Debian 12/13 и AlmaLinux 8/9/10 | |
| 5 | + | ||
| 6 | + | set -e # Выход при ошибках | |
| 7 | + | ||
| 8 | + | # Цвета для вывода | |
| 9 | + | RED='\033[0;31m' | |
| 10 | + | GREEN='\033[0;32m' | |
| 11 | + | YELLOW='\033[1;33m' | |
| 12 | + | BLUE='\033[0;34m' | |
| 13 | + | NC='\033[0m' # No Color | |
| 14 | + | ||
| 15 | + | # Функция для вывода с цветом | |
| 16 | + | print_message() { | |
| 17 | + | echo -e "${GREEN}[INFO]${NC} $1" | |
| 18 | + | } | |
| 19 | + | ||
| 20 | + | print_warning() { | |
| 21 | + | echo -e "${YELLOW}[WARN]${NC} $1" | |
| 22 | + | } | |
| 23 | + | ||
| 24 | + | print_error() { | |
| 25 | + | echo -e "${RED}[ERROR]${NC} $1" | |
| 26 | + | } | |
| 27 | + | ||
| 28 | + | print_debug() { | |
| 29 | + | echo -e "${BLUE}[DEBUG]${NC} $1" | |
| 30 | + | } | |
| 31 | + | ||
| 32 | + | # Функция для определения ОС | |
| 33 | + | detect_os() { | |
| 34 | + | if [ -f /etc/os-release ]; then | |
| 35 | + | . /etc/os-release | |
| 36 | + | OS_NAME="$ID" | |
| 37 | + | OS_VERSION="$VERSION_ID" | |
| 38 | + | OS_VERSION_MAJOR=$(echo "$OS_VERSION" | cut -d. -f1) | |
| 39 | + | OS_CODENAME="$VERSION_CODENAME" | |
| 40 | + | elif [ -f /etc/redhat-release ]; then | |
| 41 | + | if grep -qi "alma" /etc/redhat-release; then | |
| 42 | + | OS_NAME="almalinux" | |
| 43 | + | elif grep -qi "centos" /etc/redhat-release; then | |
| 44 | + | OS_NAME="centos" | |
| 45 | + | elif grep -qi "rocky" /etc/redhat-release; then | |
| 46 | + | OS_NAME="rocky" | |
| 47 | + | else | |
| 48 | + | OS_NAME="rhel" | |
| 49 | + | fi | |
| 50 | + | # Извлекаем версию из redhat-release | |
| 51 | + | OS_VERSION=$(grep -oE '[0-9]+\.[0-9]+' /etc/redhat-release | head -1) | |
| 52 | + | if [ -z "$OS_VERSION" ]; then | |
| 53 | + | OS_VERSION=$(grep -oE '[0-9]+' /etc/redhat-release | head -1) | |
| 54 | + | fi | |
| 55 | + | OS_VERSION_MAJOR=$(echo "$OS_VERSION" | cut -d. -f1) | |
| 56 | + | else | |
| 57 | + | print_error "Не удалось определить операционную систему" | |
| 58 | + | exit 1 | |
| 59 | + | fi | |
| 60 | + | ||
| 61 | + | print_message "Обнаружена ОС: $OS_NAME $OS_VERSION (мажорная версия: $OS_VERSION_MAJOR)" | |
| 62 | + | } | |
| 63 | + | ||
| 64 | + | # Функция для создания резервной копии файла | |
| 65 | + | backup_file() { | |
| 66 | + | local file="$1" | |
| 67 | + | local backup="${file}.backup.$(date +%Y%m%d_%H%M%S)" | |
| 68 | + | ||
| 69 | + | if [ -f "$file" ]; then | |
| 70 | + | cp "$file" "$backup" | |
| 71 | + | print_message "Создана резервная копия: $backup" | |
| 72 | + | echo "$backup" # Возвращаем имя резервной копии | |
| 73 | + | fi | |
| 74 | + | } | |
| 75 | + | ||
| 76 | + | # Функция для проверки доступности зеркала | |
| 77 | + | check_mirror() { | |
| 78 | + | local mirror="$1" | |
| 79 | + | local test_url="$2" | |
| 80 | + | ||
| 81 | + | print_debug "Проверка доступности зеркала: $mirror" | |
| 82 | + | ||
| 83 | + | if curl --silent --head --fail --max-time 5 "$test_url" > /dev/null 2>&1; then | |
| 84 | + | print_message "Зеркало $mirror доступно" | |
| 85 | + | return 0 | |
| 86 | + | else | |
| 87 | + | print_warning "Зеркало $mirror недоступно или отвечает медленно" | |
| 88 | + | return 1 | |
| 89 | + | fi | |
| 90 | + | } | |
| 91 | + | ||
| 92 | + | # Функции для Debian | |
| 93 | + | setup_debian_repos() { | |
| 94 | + | local version="$1" | |
| 95 | + | local sources_list="/etc/apt/sources.list" | |
| 96 | + | local sources_dir="/etc/apt/sources.list.d/" | |
| 97 | + | ||
| 98 | + | print_message "Настройка репозиториев для Debian $version" | |
| 99 | + | ||
| 100 | + | # Создаем резервную копию | |
| 101 | + | backup_file "$sources_list" | |
| 102 | + | ||
| 103 | + | # Российские зеркала для Debian | |
| 104 | + | # Список приоритетных зеркал (проверяем доступность) | |
| 105 | + | local mirrors=( | |
| 106 | + | "http://mirror.yandex.ru/debian/" | |
| 107 | + | "http://ftp.ru.debian.org/debian/" | |
| 108 | + | "http://mirror.truenetwork.ru/debian/" | |
| 109 | + | ) | |
| 110 | + | ||
| 111 | + | local selected_mirror="" | |
| 112 | + | local selected_security_mirror="" | |
| 113 | + | ||
| 114 | + | # Проверяем доступность зеркал | |
| 115 | + | for mirror in "${mirrors[@]}"; do | |
| 116 | + | if check_mirror "$mirror" "${mirror}dists/stable/Release"; then | |
| 117 | + | selected_mirror="$mirror" | |
| 118 | + | # Для зеркал безопасности используем соответствующие URL | |
| 119 | + | if [[ "$mirror" == *"mirror.yandex.ru"* ]]; then | |
| 120 | + | selected_security_mirror="http://mirror.yandex.ru/debian-security/" | |
| 121 | + | elif [[ "$mirror" == *"ftp.ru.debian.org"* ]]; then | |
| 122 | + | selected_security_mirror="http://ftp.ru.debian.org/debian-security/" | |
| 123 | + | else | |
| 124 | + | selected_security_mirror="${mirror%-}/debian-security/" | |
| 125 | + | fi | |
| 126 | + | break | |
| 127 | + | fi | |
| 128 | + | done | |
| 129 | + | ||
| 130 | + | # Если ни одно зеркало не доступно, используем Yandex по умолчанию | |
| 131 | + | if [ -z "$selected_mirror" ]; then | |
| 132 | + | print_warning "Все зеркала недоступны, используем Yandex по умолчанию" | |
| 133 | + | selected_mirror="http://mirror.yandex.ru/debian/" | |
| 134 | + | selected_security_mirror="http://mirror.yandex.ru/debian-security/" | |
| 135 | + | fi | |
| 136 | + | ||
| 137 | + | print_message "Используется основное зеркало: $selected_mirror" | |
| 138 | + | print_message "Используется зеркало безопасности: $selected_security_mirror" | |
| 139 | + | ||
| 140 | + | # Определяем кодовое имя релиза | |
| 141 | + | local codename | |
| 142 | + | case "$version" in | |
| 143 | + | "12") codename="bookworm" ;; | |
| 144 | + | "13") codename="trixie" ;; | |
| 145 | + | *) codename="bookworm" ;; # По умолчанию для других версий | |
| 146 | + | esac | |
| 147 | + | ||
| 148 | + | # Создаем новый sources.list с выбранными зеркалами | |
| 149 | + | cat > "$sources_list" << EOF | |
| 150 | + | # Российские зеркала для Debian $version ($codename) | |
| 151 | + | deb $selected_mirror $codename main contrib non-free non-free-firmware | |
| 152 | + | deb $selected_mirror $codename-updates main contrib non-free non-free-firmware | |
| 153 | + | deb $selected_security_mirror $codename-security main contrib non-free non-free-firmware | |
| 154 | + | ||
| 155 | + | # Дополнительные компоненты | |
| 156 | + | # deb $selected_mirror $codename-backports main contrib non-free non-free-firmware | |
| 157 | + | EOF | |
| 158 | + | ||
| 159 | + | # Обновляем репозитории в sources.list.d с помощью sed | |
| 160 | + | for file in "$sources_dir"*.list; do | |
| 161 | + | if [ -f "$file" ]; then | |
| 162 | + | backup_file "$file" | |
| 163 | + | print_debug "Обновление репозиториев в файле: $(basename "$file")" | |
| 164 | + | ||
| 165 | + | # Заменяем стандартные репозитории на российские зеркала | |
| 166 | + | sed -i \ | |
| 167 | + | -e "s|http://deb.debian.org/debian|$selected_mirror|g" \ | |
| 168 | + | -e "s|https://deb.debian.org/debian|$selected_mirror|g" \ | |
| 169 | + | -e "s|http://security.debian.org|$selected_security_mirror|g" \ | |
| 170 | + | -e "s|https://security.debian.org|$selected_security_mirror|g" \ | |
| 171 | + | -e "s|http://ftp.debian.org|$selected_mirror|g" \ | |
| 172 | + | -e "s|https://ftp.debian.org|$selected_mirror|g" \ | |
| 173 | + | "$file" | |
| 174 | + | fi | |
| 175 | + | done | |
| 176 | + | ||
| 177 | + | print_message "Обновление списка пакетов..." | |
| 178 | + | if apt-get update; then | |
| 179 | + | print_message "Список пакетов успешно обновлен" | |
| 180 | + | else | |
| 181 | + | print_warning "Обновление списка пакетов завершилось с предупреждениями" | |
| 182 | + | fi | |
| 183 | + | } | |
| 184 | + | ||
| 185 | + | # Функции для AlmaLinux | |
| 186 | + | setup_almalinux_repos() { | |
| 187 | + | local version="$1" | |
| 188 | + | local repo_dir="/etc/yum.repos.d/" | |
| 189 | + | ||
| 190 | + | print_message "Настройка репозиториев для AlmaLinux $version" | |
| 191 | + | ||
| 192 | + | # Российские зеркала для AlmaLinux | |
| 193 | + | local mirrors=( | |
| 194 | + | "http://mirror.yandex.ru/almalinux/" | |
| 195 | + | "http://mirror.nucleus.be/almalinux/" # Российское зеркало Selectel | |
| 196 | + | "http://mirror.docker.ru/almalinux/" | |
| 197 | + | ) | |
| 198 | + | ||
| 199 | + | local selected_mirror="" | |
| 200 | + | ||
| 201 | + | # Проверяем доступность зеркал | |
| 202 | + | for mirror in "${mirrors[@]}"; do | |
| 203 | + | if check_mirror "$mirror" "${mirror}${version}/BaseOS/x86_64/os/repodata/repomd.xml"; then | |
| 204 | + | selected_mirror="$mirror" | |
| 205 | + | break | |
| 206 | + | fi | |
| 207 | + | done | |
| 208 | + | ||
| 209 | + | # Если ни одно зеркало не доступно, используем Yandex по умолчанию | |
| 210 | + | if [ -z "$selected_mirror" ]; then | |
| 211 | + | print_warning "Все зеркала недоступны, используем Yandex по умолчанию" | |
| 212 | + | selected_mirror="http://mirror.yandex.ru/almalinux/" | |
| 213 | + | fi | |
| 214 | + | ||
| 215 | + | print_message "Используется зеркало: $selected_mirror" | |
| 216 | + | ||
| 217 | + | # Создаем резервные копии всех репозиториев | |
| 218 | + | print_message "Создание резервных копий репозиториев..." | |
| 219 | + | for repo_file in "$repo_dir"*.repo; do | |
| 220 | + | if [ -f "$repo_file" ]; then | |
| 221 | + | backup_file "$repo_file" | |
| 222 | + | fi | |
| 223 | + | done | |
| 224 | + | ||
| 225 | + | # Основные файлы репозиториев для AlmaLinux | |
| 226 | + | local repo_files=( | |
| 227 | + | "almalinux.repo" | |
| 228 | + | "almalinux-baseos.repo" | |
| 229 | + | "almalinux-appstream.repo" | |
| 230 | + | "almalinux-extras.repo" | |
| 231 | + | "almalinux-powertools.repo" # Для версии 8 | |
| 232 | + | "almalinux-crb.repo" # Для версий 9+ | |
| 233 | + | ) | |
| 234 | + | ||
| 235 | + | # Список паттернов для замены | |
| 236 | + | local patterns=( | |
| 237 | + | "https://repo.almalinux.org" | |
| 238 | + | "http://repo.almalinux.org" | |
| 239 | + | "https://mirror.almalinux.org" | |
| 240 | + | "http://mirror.almalinux.org" | |
| 241 | + | "https://cdn.redhat.com" | |
| 242 | + | "http://cdn.redhat.com" | |
| 243 | + | ) | |
| 244 | + | ||
| 245 | + | # Заменяем URL во всех репозиторных файлах с помощью sed | |
| 246 | + | print_message "Замена URL репозиториев на российские зеркала..." | |
| 247 | + | ||
| 248 | + | for repo_file in "$repo_dir"*.repo; do | |
| 249 | + | if [ -f "$repo_file" ]; then | |
| 250 | + | local filename=$(basename "$repo_file") | |
| 251 | + | print_debug "Обработка файла: $filename" | |
| 252 | + | ||
| 253 | + | # Создаем временный файл для новой конфигурации | |
| 254 | + | local temp_file=$(mktemp) | |
| 255 | + | ||
| 256 | + | # Обрабатываем файл построчно | |
| 257 | + | while IFS= read -r line; do | |
| 258 | + | # Заменяем baseurl и metalink | |
| 259 | + | if [[ "$line" =~ ^(baseurl|metalink)\s*= ]]; then | |
| 260 | + | # Заменяем все паттерны на выбранное зеркало | |
| 261 | + | local new_line="$line" | |
| 262 | + | for pattern in "${patterns[@]}"; do | |
| 263 | + | new_line="${new_line//$pattern/$selected_mirror}" | |
| 264 | + | done | |
| 265 | + | ||
| 266 | + | # Для baseurl добавляем параметры репозитория | |
| 267 | + | if [[ "$new_line" =~ ^baseurl= ]] && [[ ! "$new_line" =~ /\$releasever/ ]]; then | |
| 268 | + | new_line="baseurl=$selected_mirror\$releasever/\$basearch/os/" | |
| 269 | + | fi | |
| 270 | + | ||
| 271 | + | echo "$new_line" >> "$temp_file" | |
| 272 | + | else | |
| 273 | + | echo "$line" >> "$temp_file" | |
| 274 | + | fi | |
| 275 | + | done < "$repo_file" | |
| 276 | + | ||
| 277 | + | # Заменяем оригинальный файл | |
| 278 | + | mv "$temp_file" "$repo_file" | |
| 279 | + | ||
| 280 | + | # Дополнительная обработка sed для надежности | |
| 281 | + | sed -i \ | |
| 282 | + | -e "s|https://repo.almalinux.org|$selected_mirror|gI" \ | |
| 283 | + | -e "s|http://repo.almalinux.org|$selected_mirror|gI" \ | |
| 284 | + | -e "s|https://mirror.almalinux.org|$selected_mirror|gI" \ | |
| 285 | + | -e "s|http://mirror.almalinux.org|$selected_mirror|gI" \ | |
| 286 | + | -e "s|https://cdn.redhat.com|$selected_mirror|gI" \ | |
| 287 | + | -e "s|http://cdn.redhat.com|$selected_mirror|gI" \ | |
| 288 | + | "$repo_file" | |
| 289 | + | ||
| 290 | + | # Отключаем metalink и включаем baseurl | |
| 291 | + | sed -i \ | |
| 292 | + | -e '/^metalink/s/^/#/' \ | |
| 293 | + | -e '/^#baseurl/s/^#//' \ | |
| 294 | + | -e '/^mirrorlist/s/^/#/' \ | |
| 295 | + | "$repo_file" | |
| 296 | + | fi | |
| 297 | + | done | |
| 298 | + | ||
| 299 | + | # Специфичные настройки для разных версий | |
| 300 | + | case "$version" in | |
| 301 | + | "8") | |
| 302 | + | # Для версии 8 | |
| 303 | + | for repo_file in "$repo_dir"almalinux*.repo; do | |
| 304 | + | if [ -f "$repo_file" ]; then | |
| 305 | + | sed -i \ | |
| 306 | + | -e "s|/AppStream/|/AppStream/|g" \ | |
| 307 | + | -e "s|/PowerTools/|/PowerTools/|g" \ | |
| 308 | + | -e "s|/BaseOS/|/BaseOS/|g" \ | |
| 309 | + | "$repo_file" | |
| 310 | + | fi | |
| 311 | + | done | |
| 312 | + | ;; | |
| 313 | + | "9"|"10") | |
| 314 | + | # Для версий 9 и 10 | |
| 315 | + | for repo_file in "$repo_dir"almalinux*.repo; do | |
| 316 | + | if [ -f "$repo_file" ]; then | |
| 317 | + | sed -i \ | |
| 318 | + | -e "s|/AppStream/|/AppStream/|g" \ | |
| 319 | + | -e "s|/CRB/|/CRB/|g" \ | |
| 320 | + | -e "s|/BaseOS/|/BaseOS/|g" \ | |
| 321 | + | "$repo_file" | |
| 322 | + | fi | |
| 323 | + | done | |
| 324 | + | ;; | |
| 325 | + | esac | |
| 326 | + | ||
| 327 | + | print_message "Очистка кэша DNF..." | |
| 328 | + | dnf clean all | |
| 329 | + | ||
| 330 | + | print_message "Проверка доступности репозиториев..." | |
| 331 | + | if dnf repolist -v; then | |
| 332 | + | print_message "Репозитории успешно настроены" | |
| 333 | + | ||
| 334 | + | # Показываем информацию о репозиториях | |
| 335 | + | echo "" | |
| 336 | + | print_message "Список активных репозиториев:" | |
| 337 | + | dnf repolist enabled | |
| 338 | + | else | |
| 339 | + | print_warning "Есть проблемы с доступностью репозиториев" | |
| 340 | + | print_warning "Проверьте настройки сети или выберите другое зеркало" | |
| 341 | + | fi | |
| 342 | + | } | |
| 343 | + | ||
| 344 | + | # Функция для проверки текущих репозиториев | |
| 345 | + | check_current_repos() { | |
| 346 | + | print_message "Текущие репозитории:" | |
| 347 | + | ||
| 348 | + | case "$OS_NAME" in | |
| 349 | + | "debian") | |
| 350 | + | grep -h "^deb" /etc/apt/sources.list /etc/apt/sources.list.d/*.list 2>/dev/null | head -10 | |
| 351 | + | ;; | |
| 352 | + | "almalinux") | |
| 353 | + | grep -h "^\s*baseurl" /etc/yum.repos.d/*.repo 2>/dev/null | head -10 | |
| 354 | + | ;; | |
| 355 | + | esac | |
| 356 | + | } | |
| 357 | + | ||
| 358 | + | # Функция для отката изменений | |
| 359 | + | rollback_changes() { | |
| 360 | + | print_message "Поиск резервных копий для отката..." | |
| 361 | + | ||
| 362 | + | case "$OS_NAME" in | |
| 363 | + | "debian") | |
| 364 | + | local backup_files=$(find /etc/apt -name "*.backup.*" -type f | sort -r) | |
| 365 | + | ;; | |
| 366 | + | "almalinux") | |
| 367 | + | local backup_files=$(find /etc/yum.repos.d -name "*.backup.*" -type f | sort -r) | |
| 368 | + | ;; | |
| 369 | + | esac | |
| 370 | + | ||
| 371 | + | if [ -z "$backup_files" ]; then | |
| 372 | + | print_error "Резервные копии не найдены" | |
| 373 | + | return 1 | |
| 374 | + | fi | |
| 375 | + | ||
| 376 | + | # Берем последнюю резервную копию | |
| 377 | + | local latest_backup=$(echo "$backup_files" | head -1) | |
| 378 | + | local original_file="${latest_backup%.backup.*}" | |
| 379 | + | ||
| 380 | + | print_message "Восстановление из: $latest_backup" | |
| 381 | + | print_message "В файл: $original_file" | |
| 382 | + | ||
| 383 | + | if cp "$latest_backup" "$original_file"; then | |
| 384 | + | print_message "Откат выполнен успешно" | |
| 385 | + | ||
| 386 | + | # Обновляем кэш пакетов | |
| 387 | + | case "$OS_NAME" in | |
| 388 | + | "debian") | |
| 389 | + | apt-get update | |
| 390 | + | ;; | |
| 391 | + | "almalinux") | |
| 392 | + | dnf clean all | |
| 393 | + | dnf repolist | |
| 394 | + | ;; | |
| 395 | + | esac | |
| 396 | + | else | |
| 397 | + | print_error "Ошибка при откате изменений" | |
| 398 | + | fi | |
| 399 | + | } | |
| 400 | + | ||
| 401 | + | # Основная функция | |
| 402 | + | main() { | |
| 403 | + | # Проверяем права суперпользователя | |
| 404 | + | if [ "$EUID" -ne 0 ]; then | |
| 405 | + | print_error "Запустите скрипт с правами root (sudo)" | |
| 406 | + | exit 1 | |
| 407 | + | fi | |
| 408 | + | ||
| 409 | + | print_message "Начало настройки локальных репозиториев..." | |
| 410 | + | ||
| 411 | + | # Определяем ОС | |
| 412 | + | detect_os | |
| 413 | + | ||
| 414 | + | # Показываем текущие репозитории | |
| 415 | + | check_current_repos | |
| 416 | + | ||
| 417 | + | echo "" | |
| 418 | + | print_warning "Вы собираетесь заменить репозитории на российские зеркала." | |
| 419 | + | print_warning "Будут созданы резервные копии конфигурационных файлов." | |
| 420 | + | echo "" | |
| 421 | + | ||
| 422 | + | read -p "Продолжить? (y/N): " -n 1 -r | |
| 423 | + | echo | |
| 424 | + | if [[ ! $REPLY =~ ^[Yy]$ ]]; then | |
| 425 | + | print_message "Операция отменена пользователем" | |
| 426 | + | exit 0 | |
| 427 | + | fi | |
| 428 | + | ||
| 429 | + | # Выбираем действие в зависимости от ОС | |
| 430 | + | case "$OS_NAME" in | |
| 431 | + | "debian") | |
| 432 | + | setup_debian_repos "$OS_VERSION_MAJOR" | |
| 433 | + | ;; | |
| 434 | + | "almalinux") | |
| 435 | + | setup_almalinux_repos "$OS_VERSION_MAJOR" | |
| 436 | + | ;; | |
| 437 | + | "centos"|"rocky"|"rhel") | |
| 438 | + | print_warning "Обнаружена $OS_NAME, будет применена конфигурация для AlmaLinux" | |
| 439 | + | setup_almalinux_repos "$OS_VERSION_MAJOR" | |
| 440 | + | ;; | |
| 441 | + | *) | |
| 442 | + | print_error "Неподдерживаемая операционная система: $OS_NAME" | |
| 443 | + | print_warning "Поддерживаются только Debian, AlmaLinux, CentOS, Rocky Linux и RHEL" | |
| 444 | + | exit 1 | |
| 445 | + | ;; | |
| 446 | + | esac | |
| 447 | + | ||
| 448 | + | echo "" | |
| 449 | + | print_message "Настройка репозиториев успешно завершена!" | |
| 450 | + | print_warning "Рекомендуется проверить работоспособность репозиториев:" | |
| 451 | + | ||
| 452 | + | case "$OS_NAME" in | |
| 453 | + | "debian") | |
| 454 | + | echo " apt update && apt install -y neofetch" | |
| 455 | + | ;; | |
| 456 | + | "almalinux"|"centos"|"rocky"|"rhel") | |
| 457 | + | echo " dnf update && dnf install -y neofetch" | |
| 458 | + | ;; | |
| 459 | + | esac | |
| 460 | + | } | |
| 461 | + | ||
| 462 | + | # Обработка аргументов командной строки | |
| 463 | + | if [[ $# -gt 0 ]]; then | |
| 464 | + | case $1 in | |
| 465 | + | "-h"|"--help") | |
| 466 | + | echo "Использование: $0 [OPTIONS]" | |
| 467 | + | echo "Скрипт для замены штатных репозиториев на локальные российские зеркала" | |
| 468 | + | echo "" | |
| 469 | + | echo "Опции:" | |
| 470 | + | echo " -h, --help Показать эту справку" | |
| 471 | + | echo " -c, --check Проверить текущие репозитории" | |
| 472 | + | echo " -r, --rollback Откатить последние изменения" | |
| 473 | + | echo " -v, --verbose Подробный вывод" | |
| 474 | + | echo "" | |
| 475 | + | echo "Поддерживаемые ОС:" | |
| 476 | + | echo " - Debian 12 (Bookworm)" | |
| 477 | + | echo " - Debian 13 (Trixie)" | |
| 478 | + | echo " - AlmaLinux 8" | |
| 479 | + | echo " - AlmaLinux 9" | |
| 480 | + | echo " - AlmaLinux 10" | |
| 481 | + | echo " - CentOS/Rocky Linux/RHEL 8/9/10" | |
| 482 | + | echo "" | |
| 483 | + | echo "Автоматически создаются резервные копии конфигурационных файлов" | |
| 484 | + | exit 0 | |
| 485 | + | ;; | |
| 486 | + | "-c"|"--check") | |
| 487 | + | detect_os | |
| 488 | + | check_current_repos | |
| 489 | + | exit 0 | |
| 490 | + | ;; | |
| 491 | + | "-r"|"--rollback") | |
| 492 | + | detect_os | |
| 493 | + | rollback_changes | |
| 494 | + | exit 0 | |
| 495 | + | ;; | |
| 496 | + | "-v"|"--verbose") | |
| 497 | + | set -x # Включить режим отладки | |
| 498 | + | main | |
| 499 | + | ;; | |
| 500 | + | *) | |
| 501 | + | print_error "Неизвестный аргумент: $1" | |
| 502 | + | echo "Используйте $0 --help для справки" | |
| 503 | + | exit 1 | |
| 504 | + | ;; | |
| 505 | + | esac | |
| 506 | + | else | |
| 507 | + | # Запуск основной функции | |
| 508 | + | main | |
| 509 | + | fi | |