Как безопасно обновить Debian до следующего релиза

В течение примерно двух лет Debian остаётся относительно неизменным: версии программ и поведение системы держатся стабильными, а критические исправления внедряются обратной портировкой. Иногда допускают обновления драйверов или редких пакетов, но это исключение, а не правило. Такая предсказуемость снижает вероятность поломок и неожиданных изменений после обновлений.
Тем не менее каждые ≈2 года выходит новый релиз Debian со значительными улучшениями и новыми возможностями. Процесс обновления между последовательными мажорными релизами обычно надёжен, если система корректно подготовлена.
В этой статье вы найдёте пошаговое руководство по безопасному обновлению Debian, рекомендации для десктопов и серверов, чек-листы, сценарии отката и типичные ошибки с объяснениями, как их решать.
Ключевые термины
- sources.list — файл со списком репозиториев APT, по которому система получает пакеты.
- кодовое имя релиза — внутреннее имя версии Debian (пример: stretch, buster, bullseye).
Перед началом
Important: сделайте резервную копию системы перед обновлением. Минимум — бэкап /etc и списка установленных пакетов: sudo dpkg –get-selections >~/packages.list. Без резервной копии восстановление после серьёзной ошибки может оказаться трудоёмким.
Notes: обновляйте только на один релиз за раз (например, с Debian 9 → 10, а не 9 → 11 напрямую).
Шаг 1. Очистите sources.list от сторонних репозиториев
Многие проблемы при обновлении возникают из-за сторонних репозиториев или вручную установленных .deb. Удалите или закомментируйте все строки, не относящиеся к официальным репозиториям Debian.
Откройте файл для правки:
sudo nano /etc/apt/sources.listУдалите строки, указывающие на PPA, сторонние сайты или локальные репозитории. В файле остаётся минимальный набор строк, соответствующий вашему текущему релизу. Пример шаблона (сохраните кодовое имя текущего выпуска):
deb http://deb.debian.org/debian stretch main
deb http://deb.debian.org/debian stretch-updates main
deb http://deb.debian.org/debian-security/ stretch/updates mainЕсли в ваших строках указаны дополнительные секции (contrib, non-free), сохраните их в конце каждой строки:
deb http://deb.debian.org/debian stretch main contrib non-free
deb http://deb.debian.org/debian stretch-updates main contrib non-free
deb http://deb.debian.org/debian-security/ stretch/updates main contrib non-freeСохраните файл (в nano: Ctrl+X, затем Y и Enter).
Обновите информацию о пакетах и примените текущие обновления перед сменой кодового имени:
sudo apt update
sudo apt upgrade
sudo apt autoremove
Если при обновлении появляется просмотрщик changelog, просмотрите его и выйдите нажатием q.

Шаг 2. Подготовьте sources.list к обновлению
Откройте файл снова:
sudo nano /etc/apt/sources.listЗамените кодовое имя текущего релиза на кодовое имя следующего релиза. Список кодовых имён доступен на странице релизов Debian.
Например, для перехода с Debian 9 (stretch) на Debian 10 (buster) замените:
deb http://deb.debian.org/debian stretch main contrib non-free
deb http://deb.debian.org/debian stretch-updates main contrib non-free
deb http://deb.debian.org/debian-security stretch/updates main contrib non-freeна
deb http://deb.debian.org/debian buster main contrib non-free
deb http://deb.debian.org/debian buster-updates main contrib non-free
deb http://deb.debian.org/debian-security buster/updates main contrib non-freeСохраните и обновите индекс пакетов:
sudo apt updateШаг 3. Последовательное обновление пакетов
- Сначала выполните безопасное обновление, которое не удаляет пакеты:
sudo apt upgradeВнимательно читайте сообщения: если apt пытается удалить критичные пакеты (например, графический стек на рабочем столе), остановитесь и проанализируйте причину. Это часто случается, если были установлены сторонние пакеты или пакеты с конфликтующими зависимостями.
- Во время обновления вам будет задан вопрос о конфигурационных файлах. Если вы ранее меняли файл вручную и хотите сохранить внесённые правки — оставьте старую версию; если нет — предпочтительнее установить версию от мейнтейнера (Y), чтобы получить исправления и новые опции.

- Затем выполните полное обновление, которое может удалить устаревшие пакеты, чтобы разрешить зависимости новых версий:
sudo apt full-upgrade- Удалите ненужные пакеты и очищайте кэш:
sudo apt autoremove
sudo apt clean- Перезагрузите систему:
sudo systemctl rebootКритерии приёмки
- Система загружается до приглашения логина без ошибок ядра.
- Основные сервисы (SSH, веб-сервер, базы данных) стартуют и работают после обновления.
- Пользовательские приложения работают как прежде или имеют корректные конфигурации.
- Логи не содержат критичных ошибок, влияющих на функциональность.
Чек-листы по ролям
Администратор сервера:
- Сделать полную резервную копию (образ или rsync / и /etc).
- Сохранить список установленных пакетов: sudo dpkg –get-selections >~/packages.list.
- Отключить ненужные сторонние репозитории.
- Обновить и протестировать на тестовом хосте (если есть).
Пользователь рабочего стола:
- Выйти из графической сессии перед запуском full-upgrade.
- Проверить, не установлены ли локальные проприетарные драйверы (NVIDIA и т.п.).
- Создать точку восстановления или образ системы.
Разработчик/DevOps:
- Прогнать тесты приёмки (unit/integration).
- Обновить контейнеры/CI, если они ссылаются на системные образы.
Мини-методология обновления (5 шагов)
- Резервное копирование. 2. Очистка sources.list. 3. Обновление текущих пакетов. 4. Изменение кодового имени и apt update. 5. upgrade → full-upgrade → перезагрузка → проверка сервисов.
Когда обновление может не сработать и как поступать
- Сторонние репозитории с конфликтующими версиями. Решение: закомментируйте строки, удалите сторонние пакеты, затем повторите обновление.
- Локально установленные .deb с несовместимыми зависимостями. Решение: удалить пакет через sudo dpkg -r
или sudo apt remove . - Пакеты с изменившимися именами или объединённые пакеты. Решение: внимательно прочитайте вывод apt и корректно установите/удалите пакеты по подсказкам.
- Графическая среда удалена на рабочем столе. Решение: выполнить обновление в консоли, при необходимости переустановить мета-пакет рабочего окружения.
Если вы не уверены, остановитесь, сделайте снимок системы и поиск причины в логах: /var/log/apt/term.log и /var/log/dpkg.log.
Сценарий отката и план действий при инциденте
- Если доступен образ системы — восстановите образ.
- Если нет образа, но есть список пакетов — восстановите чистый системный релиз и установите пакеты по списку.
- Для сервисов: запустите контейнеры или временные инстансы служб, чтобы снизить простои.
- Всегда документируйте какие пакеты были удалены или изменены в ходе обновления.
Важно: откат «в одну команду» невозможен для большинства апгрейдов; планируйте резервное копирование заранее.
Тестовые сценарии и критерии приёмки
- Тест 1: Завершение apt full-upgrade без критичных удалений. Приёмка: завершился с кодом 0.
- Тест 2: Перезагрузка и доступ по SSH. Приёмка: подключение установлено за 60 сек.
- Тест 3: Запуск критичных сервисов (nginx, postgresql, cron). Приёмка: сервисы в состоянии active/running.
Дерево решений для выбора стратегии (Mermaid)
flowchart TD
A[Нужен апгрейд Debian?] -->|Да| B{Есть резервная копия?}
A -->|Нет| Z[Не обновлять]
B -->|Нет| C[Создать резервную копию]
B -->|Да| D{Есть сторонние репозитории?}
D -->|Да| E[Отключить/удалить сторонние репозитории]
D -->|Нет| F[Изменить кодовое имя в sources.list]
F --> G[apt update → apt upgrade]
G --> H{Есть конфликты?}
H -->|Да| I[Удалить проблемные пакеты или откатить]
H -->|Нет| J[apt full-upgrade → перезагрузка]
J --> K[Проверить сервисы]
K --> L{Все сервисы работают?}
L -->|Да| M[Завершено]
L -->|Нет| IПолезные команды и шпаргалка
- Резервная копия списка пакетов: sudo dpkg –get-selections >~/packages.list
- Обновление индекса: sudo apt update
- Безопасное обновление: sudo apt upgrade
- Полное обновление: sudo apt full-upgrade
- Удаление ненужных пакетов: sudo apt autoremove
- Очистка кэша: sudo apt clean
- Перезагрузка: sudo systemctl reboot
Частые ошибки и как их читать в логах
- «held packages» — пакеты удерживаются; проверьте sudo apt-mark showhold.
- Конфликты зависимостей — apt напишет какие пакеты конфликтуют и какие предлагается удалить. Если это пакет стороннего происхождения — удалите его.
- Ошибки подписи репозитория — проверьте, не осталось ли сторонних репов в /etc/apt/sources.list.d/.
Резюме
Обновление Debian между соседними релизами — процесс предсказуемый, если соблюдать простые правила: сделать бэкап, убрать сторонние репозитории, обновить текущую систему, заменить кодовое имя в sources.list и выполнить последовательность apt-команд. Главное — не торопиться и внимательно читать вывод пакетного менеджера. Если возникнут проблемы, чаще всего их решают удалением конфликтующих сторонних пакетов или восстановлением из бэкапа.
Важные заметки
- Никогда не обновляйте через несколько релизов сразу.
- Всегда тестируйте процедуру на ненагруженной тестовой системе при возможности.
Если нужно, я могу подготовить готовые шаблоны sources.list для конкретных релизов, чек-листы для вашей инфраструктуры или сценарий обновления в виде playbook Ansible.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента