Как откатить пакеты на Linux

Зачем откатывать пакеты
Новые версии пакетов могут содержать регрессии — функциональные ошибки, несовместимости с конфигурациями или удалённые возможности. На рабочих серверах или критичных рабочих станциях стабильность важнее свежести функций. Откат к проверенной версии помогает быстро восстановить работоспособность, не удаляя пакет полностью.
Коротко о рисках и мотивах:
- На «bleeding-edge» дистрибутивах (напр., Arch) обновления приходят мгновенно и иногда ломают систему.
- На стабильных ветках (Debian Stable, Ubuntu LTS) пакеты чаще проходят дополнительное тестирование.
- На серверах откат часто предпочтительнее полной переустановки, так как сохраняются конфигурации и зависимости.
Что важно знать перед откатом
- Проверьте, какие зависимости потребуют отката тоже — откат одного пакета может потребовать отката библиотек.
- Сделайте резервную копию важных конфигурационных файлов (обычно в /etc и в домашней директории).
- По возможности протестируйте откат в окружении staging или на машине с той же конфигурацией.
- После отката зафиксируйте пакет (hold/pinning/versionlock), чтобы он не обновился снова автоматически.
Основные подходы
- Установить конкретную версию из репозитория (apt, yum/dnf).
- Установить ранее скачанный пакет из локального кэша (pacman -U, dpkg -i, rpm -Uvh).
- Использовать утилиты, облегчающие выбор старых версий (downgrade для Arch, версионирование с помощью apt-cache/apt policy).
- Зафиксировать версию, чтобы избежать повторного апгрейда.
Как откатить пакеты на Debian и Ubuntu
Простейший путь — установить конкретную версию пакета из репозитория.
- Посмотреть все доступные версии в репозиториях:
apt list -a packagenameАльтернативный способ показать информацию и приоритеты:
apt-cache policy packagenameПример для GNOME Terminal:
apt list -a gnome-terminal- Установить нужную версию (замените version на точную строку из вывода):
sudo apt install gnome-terminal=3.36.1.1-1ubuntu1После выполнения APT предупредит об откате; подтвердите «Y» и Enter. Проверка версии:
gnome-terminal --version- Зафиксировать пакет, чтобы предотвратить обновление:
sudo apt-mark hold gnome-terminalВернуть возможность обновления:
sudo apt-mark unhold gnome-terminal- Продвинутая опция — pinning через /etc/apt/preferences.d/ для тонкого контроля по приоритетам версий. Пример файла /etc/apt/preferences.d/gnome-terminal:
Package: gnome-terminal
Pin: version 3.36.1.1-1ubuntu1
Pin-Priority: 1001Pin-Priority выше 1000 позволяет «понизить» пакет до указанной версии даже если это понижение.
Совет: если нужная версия не в официальных репо, можно скачать .deb с надёжного зеркала или из snapshot.debian.org/launchpad и установить через:
sudo dpkg -i package_version.deb
sudo apt --fix-broken installКак откатить пакеты на Arch Linux и производных
На Arch сохраняется кэш всех загруженных пакетов в /var/cache/pacman/pkg. Это даёт простой путь установить ранее использованный пакет.
- Найти пакет в кэше и установить:
sudo pacman -U /var/cache/pacman/pkg/packagename-old.tar.zst- Если не хочется искать вручную, можно использовать find:
ls -1 /var/cache/pacman/pkg | grep packagename- Утилита downgrade из AUR упрощает процесс: она показывает доступные версии (включая кэш, AUR, архивы) и позволяет выбрать нужную.
yay -S downgrade
sudo downgrade packagenameДалее следуйте меню: выберите версию по номеру, подтвердите установку.
Важно: при откате вручную следите за зависимостями и файлами конфигураций. После отката можно заблокировать пакет, используя package manager hooks или AUR-утилиты; явного аналога apt-mark в pacman нет, но можно воспользоваться ignorepkg в /etc/pacman.conf:
IgnorePkg = packagenameЭто предотвратит обновление указанного пакета при pacman -Syu.
Как откатить пакеты на Fedora, CentOS, RHEL
На современных Fedora/RHEL дистрибутивах используется dnf (yum остаётся совместимой обёрткой). Есть встроенная команда downgrade:
sudo dnf downgrade packagenameДля старых версий или если нужно указать конкретный RPM, скачайте RPM-файл (например, с Koji) и установите его:
sudo rpm -Uvh --oldpackage package-version.rpmИли через dnf:
sudo dnf install package-version.rpmЕсли вы не видите нужную версию в репозиториях, загляните на Fedora Koji:
Пример отката Firefox:
sudo dnf downgrade firefoxЧтобы «зафиксировать» версию в dnf можно использовать плагин versionlock:
sudo dnf install 'dnf-plugins-core'
sudo dnf versionlock add packagenameПроцедура отката: мини-методология
- Сохраняем состояние:
- Резерв копий конфигурационных файлов (tar/rsync).
- Список установленных версий (apt list –installed / pacman -Q / rpm -qa).
- Анализируем зависимости и совместимость.
- Выполняем откат выбранного пакета и его зависимостей.
- Проверяем работоспособность сервиса или приложения.
- Фиксируем пакет от автоматических обновлений.
- Документируем причину и шаги отката.
Короткая команда для создания списка текущих пакетов:
apt list --installed > installed-packages.txt
pacman -Q > installed-packages.txt
rpm -qa > installed-packages.txtКогда откат не помогает — альтернативы
- Вручную вернуть старую конфигурацию (backup) и перезапустить сервис.
- Использовать контейнеризацию или виртуальные машины для запуска приложений в изолированной, проверенной среде.
- Откат системы через снапшот (LVM snapshot, Btrfs/ZFS snapshot, VM snapshot).
- Установить параллельную версию приложения (если поддерживается рядом) и постепенно мигрировать.
Что может пойти не так — когда откат не применим
- Нужная для работы версия недоступна в репозиториях и кэше и отсутствует на внешних архивах.
- Откат ломает другие пакеты из-за несовместимости API/ABI (особенно опасно на серверах).
- Обновления безопасности: откат может вернуть уязвимость.
Если безопасность критична, рассмотрите временное решение (rollback конфигурации, переключение на резервный узел) и работу с разработчиками/поставщиками пакета.
Проверки и критерии приёмки
Критерии, по которым вы узнаете, что откат успешен:
- Приложение запускается без ошибок и предоставляет ожидаемый функционал.
- Логи больше не содержат критических ошибок, связанных с пакетом.
- Зависимые сервисы работают корректно.
- Пакет заблокирован от автоматических обновлений (apt-mark hold / IgnorePkg / dnf versionlock).
Команды для проверки:
systemctl status your-service
journalctl -u your-service --since "1 hour ago"
packagename --versionРольовые чек-листы (быстрая проверка)
Администратор перед откатом:
- Снял бэкап конфигураций
- Проверил зависимости
- Проверил доступность старой версии
- Уведомил пользователей/заинтересованные стороны
После отката:
- Проверил логи
- Зафиксировал пакет
- Документировал причину и шаги
Разработчик:
- Проверяет баг-репорт и воспроизводимость
- Готовит фикс или откат на стороне пакета
Отказоустойчивость и откат на уровень системы
Если простая установка старой версии не помогает и система нестабильна, используйте снапшоты файловой системы (Btrfs, LVM), резервные образы или восстановление из резервной копии образа VM.
Советы по безопасности и приватности
- Откат может вернуть уязвимости — перед откатом оцените риск и, при возможности, включите временные компенсирующие меры (Firewall, ограничения доступа).
- Не скачивайте пакеты из сомнительных источников. Предпочтительнее использовать официальные зеркала или проверенные архивы (snapshot.debian.org, Fedora Koji).
Быстрые шпаргалки
Debian/Ubuntu:
apt list -a packagename
sudo apt install packagename=version
sudo apt-mark hold packagenameArch:
sudo pacman -U /var/cache/pacman/pkg/packagename-old.tar.zst
sudo downgrade packagename
# или добавить в /etc/pacman.conf: IgnorePkg = packagenameFedora/RHEL:
sudo dnf downgrade packagename
sudo dnf install package-version.rpm
sudo dnf versionlock add packagenameМентальная модель и эвристики
- Если проблема критична и известна, откат до ближайшей стабильной версии — быстрый путь к восстановлению.
- Если откат решает проблему, исследуйте причину и сообщите в баг-трекер пакета.
- Фиксируйте пакеты только временно и планируйте обновление после выпуска исправления.
Диаграмма решения (Mermaid)
flowchart TD
A[Пакет обновлён и сломался] --> B{Есть ли проверенная предыдущая версия?}
B -- Да --> C[Проверить зависимости]
B -- Нет --> I[Искать в зеркалах / Koji / snapshot]
I --> J{Найдена версия?}
J -- Да --> C
J -- Нет --> K[Рассмотреть VM/контейнер или откат системы по снапшоту]
C --> D{Влияет ли откат на другие пакеты?}
D -- Нет --> E[Выполнить откат и протестировать]
D -- Да --> F[Откатить зависимости / план тестирования]
F --> E
E --> G[Зафиксировать версию и документировать]
G --> H[Наблюдать / планировать обновление]Короткий глоссарий
- Откат (downgrade) — установка более старой версии пакета.
- Hold/Ignore/Versionlock — механизмы блокировки пакета от автоматических обновлений.
- Кэш пакетов — локальное хранилище ранее загруженных пакетов.
Итог
Откат пакетов — стандартная операция для восстановления стабильности системы после проблем с новыми версиями. Основные шаги: найти нужную версию, установить её корректно, проверить зависимости, протестировать сервисы и зафиксировать пакет, чтобы избежать повторного обновления. При недостатке нужной версии рассмотрите контейнеризацию, использование снапшотов или восстановление из резервной копии.
Важно: всегда документируйте причину отката и, по возможности, сообщайте о баге разработчикам пакета, чтобы проблема была решена в будущих релизах.
Похожие материалы
Как редактировать отправленные сообщения в Telegram
Настройка плиток в меню «Пуск» Windows 10
Как измерить фантомную нагрузку и сэкономить
Что делать при зависании Linux: приложения и система
Рисовать мышью на ПК — полное руководство