Настройка автоматических обновлений (Unattended Upgrades) на Debian 13, 12, 11

Unattended Upgrades — это инструмент для автоматической установки обновлений безопасности и критических пакетов на Debian. Он особенно полезен на серверах, VPS и production-системах, где важно вовремя получать патчи без ручного вмешательства. Главные сложности для новичка: нужно понять разницу между systemd-таймерами (apt-daily.timer и apt-daily-upgrade.timer), правильно настроить Origins-Pattern (чтобы обновлялись только нужные репозитории), а также опционально настроить уведомления по email и автоматическую перезагрузку. Также важно уметь проверять логи и отлаживать конфигурацию через --dry-run --debug.

💡 В этом руководстве вы установите и настроите Unattended Upgrades на Debian. Вы узнаете, как включить автоматическую установку обновлений безопасности, настроить systemd-таймеры, исключить определённые пакеты, настроить email-уведомления и автоматическую перезагрузку, а также как проверять логи и решать типичные проблемы.

В этой статье вы узнаете:

  • Как установить Unattended Upgrades
  • Как проверить, установлен ли пакет
  • Как включить автоматические обновления через 20auto-upgrades
  • Как настроить обновления только для репозитория безопасности
  • Как исключить пакеты из автоматического обновления
  • Как настроить email-уведомления
  • Как настроить автоматическую перезагрузку после обновления
  • Как проверить логи и отлаживать конфигурацию
  • Как решить типичные проблемы: обновления не работают, проблемы с зависимостями, ошибки dpkg

Для кого: системные администраторы, владельцы VPS, а также все, кто хочет автоматизировать установку обновлений безопасности на Debian 11, 12 или 13.

Оглавление

1. 🔧 Предварительные требования

Перед настройкой убедитесь, что:

  • У вас установлена Debian 11, 12 или 13
  • Подключение к интернету стабильно
  • У вас есть права sudo

⚠️ ВАЖНО: Проверьте права sudo перед установкой

Если вы не уверены, есть ли у вашего пользователя права администратора, выполните в терминале:

sudo whoami

Что делает: sudo выполняет команду от имени суперпользователя, whoami показывает имя текущего пользователя.

Зачем: Эта команда проверяет, есть ли у вас права sudo. Без них вы не сможете настраивать систему.

✅ Если выводит root — всё в порядке, можете продолжать.

❌ Если выводит is not in the sudoers file — сначала пройдите наше руководство по настройке sudo.

1.1 Обновление системы

Перед настройкой всегда обновляйте список пакетов.

sudo apt update && sudo apt upgrade -y

2. 📦 Установка Unattended Upgrades

2.1 Проверка, установлен ли пакет

dpkg-query -W -f='${db:Status-Abbrev} ${binary:Package} ${Version}\n' unattended-upgrades 2>/dev/null || echo "Пакет не установлен"

Если вы видите строку, начинающуюся с ii — пакет уже установлен. Если Пакет не установлен — продолжайте установку.

2.2 Установка основного пакета

sudo apt install unattended-upgrades -y

Что делает: Устанавливает пакет для автоматических обновлений.

2.3 Установка опциональных пакетов

sudo apt install apt-config-auto-update powermgmt-base -y

Что делает:

  • apt-config-auto-update — для автоматической перезагрузки и настройки APT periodic
  • powermgmt-base — для проверки питания (важно для ноутбуков)

3. 🕐 Понимание systemd-таймеров

Unattended Upgrades запускается через systemd-таймеры, а не через cron.

ТаймерРасписаниеЧто делает
apt-daily.timer2 раза в день (6:00 и 18:00)Скачивает списки пакетов и
новые версии
apt-daily-upgrade.timerРаз в день (6:00)Устанавливает обновления
через unattended-upgrades

Проверка статуса таймеров:

systemctl status apt-daily-upgrade.timer
systemctl list-timers apt-daily*

3.1 Включение таймеров (если отключены)

sudo systemctl enable --now apt-daily.timer apt-daily-upgrade.timer

4. ⚙️ Базовая настройка

4.1 Создание файла активации (20auto-upgrades)

Этот файл включает автоматическое обновление списков пакетов и установку обновлений.

sudo tee /etc/apt/apt.conf.d/20auto-upgrades > /dev/null <<EOF
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
EOF

Проверка настроек APT periodic:

apt-config dump | grep -E 'APT::Periodic::(Update-Package-Lists|Unattended-Upgrade)'

Ожидаемый вывод:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

4.2 Резервное копирование конфигурации

sudo cp /etc/apt/apt.conf.d/50unattended-upgrades{,.bak}

4.3 Редактирование конфигурации

sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

💡 Совет: Вместо редактирования 50unattended-upgrades (файл пакета) можно создать свой файл 52unattended-upgrades-local с теми же опциями. Это упростит обновление пакета.

sudo nano /etc/apt/apt.conf.d/52unattended-upgrades-local

4.4 Настройка источников обновлений

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

Unattended-Upgrade::Origins-Pattern {
    "origin=Debian,codename=${distro_codename},label=Debian";
    "origin=Debian,codename=${distro_codename},label=Debian-Security";
    "origin=Debian,codename=${distro_codename}-security,label=Debian-Security";
};

Если вы хотите обновлять также -updates (точечные релизы):

Unattended-Upgrade::Origins-Pattern {
    "origin=Debian,codename=${distro_codename},label=Debian";
    "origin=Debian,codename=${distro_codename},label=Debian-Security";
    "origin=Debian,codename=${distro_codename}-security,label=Debian-Security";
    "origin=Debian,codename=${distro_codename}-updates,label=Debian";
};

4.5 Исключение пакетов из автоматического обновления

Unattended-Upgrade::Package-Blacklist {
    "nginx";
    "mysql-server";
    "postgresql";
    "docker-ce";
};

4.6 Настройка email-уведомлений

Unattended-Upgrade::Mail "admin@example.com";
Unattended-Upgrade::MailReport "on-change";

Значения MailReport:

  • always — всегда отправлять отчёт
  • only-on-error — только при ошибках
  • on-change — когда произошли изменения

4.7 Автоматическая перезагрузка

Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "03:00";

⚠️ Для серверов: Убедитесь, что время перезагрузки выбрано так, чтобы не мешать работе пользователей.

4.8 Очистка неиспользуемых пакетов

Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-New-Unused-Dependencies "true";

4.9 Логирование в syslog

Unattended-Upgrade::SyslogEnable "true";

5. 🧪 Проверка конфигурации

Всегда проверяйте конфигурацию после изменений:

sudo unattended-upgrades --dry-run --debug

Что ищем в выводе:

  • Allowed origins — должны быть ваши источники
  • Packages that will be upgraded — список пакетов для обновления
  • Отсутствие ошибок и Python traceback

6. 📊 Управление сервисом

КомандаЧто делает
systemctl status unattended-upgradesСтатус сервиса
sudo systemctl restart unattended-upgradesПерезапуск сервиса
sudo systemctl disable apt-daily-upgrade.timerОтключение таймера

7. 📜 Просмотр логов

7.1 Логи Unattended Upgrades

sudo cat /var/log/unattended-upgrades/unattended-upgrades.log

7.2 Последние строки

sudo tail -50 /var/log/unattended-upgrades/unattended-upgrades.log

7.3 Поиск по дате

sudo grep "2026-04-28" /var/log/unattended-upgrades/unattended-upgrades.log

7.4 Через journalctl

Если включена syslog-опция:

journalctl -u unattended-upgrades

8. ⚠️ Решение типичных проблем

8.1 Обновления не запускаются автоматически

Симптом: Прошло несколько дней, но обновления не устанавливаются.

Причина: Таймер отключён или файл активации не создан.

Решение:

sudo systemctl enable --now apt-daily-upgrade.timer
sudo tee /etc/apt/apt.conf.d/20auto-upgrades > /dev/null <<EOF
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
EOF

8.2 Пакеты не обновляются (held back)

Симптом: В логах или сухом запуске пакеты помечены как kept back.

Причина: Конфликт зависимостей.

Решение: Проверьте вручную:

sudo apt update
sudo apt --simulate upgrade

Если проблемы есть — выполните полное обновление вручную:

sudo apt upgrade

8.3 Ошибка dpkg lock

Симптом: В логах: Could not get lock /var/lib/dpkg/lock-frontend.

Решение: Проверьте, не запущен ли другой APT-процесс:

ps aux | grep -E 'apt|dpkg'

Если ничего не работает — выполните:

sudo dpkg --configure -a
sudo apt -f install

⚠️ Не удаляйте lock-файлы вручную, если процесс APT всё ещё работает!

8.4 Email-уведомления не работают

Симптом: Письма не приходят.

Причина: Нет настроенного MTA (mail transfer agent).

Решение: Установите bsd-mailx и postfix:

sudo apt install bsd-mailx postfix -y

При установке Postfix выберите «Internet Site» и укажите домен.

8.5 На ноутбуке обновления не запускаются

Симптом: Таймеры работают, но обновления не устанавливаются на ноутбуке без подключения к сети.

Причина: В apt-daily-upgrade.service есть условие ConditionACPower=true.

Решение: Подключите ноутбук к питанию. Если нужно обновлять и на батарее, отредактируйте сервис:

sudo systemctl edit apt-daily-upgrade.service

Добавьте:

[Service]
ConditionACPower=

Затем перезагрузите сервис:

sudo systemctl daemon-reload
sudo systemctl restart apt-daily-upgrade.timer

9. ⚙️ (Опционально) Настройка cron вместо systemd-таймеров

Если вы хотите задать своё расписание, отключите systemd-таймер и добавьте cron-задание:

sudo systemctl disable --now apt-daily-upgrade.timer

Добавьте cron-задание:

sudo crontab -e

Пример (ежедневно в 3 часа ночи):

0 3 * * * /usr/bin/unattended-upgrade

10. ❌ Удаление Unattended Upgrades

10.1 Удаление основного и опциональных пакетов

sudo apt remove unattended-upgrades apt-config-auto-update powermgmt-base -y
sudo apt autoremove -y

10.2 Удаление конфигурации (опционально)

sudo rm -f /etc/apt/apt.conf.d/20auto-upgrades
sudo rm -f /etc/apt/apt.conf.d/50unattended-upgrades
sudo rm -f /etc/apt/apt.conf.d/52unattended-upgrades-local

10.3 Проверка удаления

dpkg-query -W -f='${db:Status-Abbrev} ${binary:Package}\n' unattended-upgrades 2>/dev/null | grep '^ii' || echo "unattended-upgrades не установлен"

11. 📝 Чек-лист: всё готово к работе

  • [ ] Система обновлена (sudo apt update && sudo apt upgrade -y)
  • [ ] Пакет unattended-upgrades установлен
  • [ ] Файл /etc/apt/apt.conf.d/20auto-upgrades создан с правильными значениями
  • [ ] apt-config dump | grep APT::Periodic показывает "1"
  • [ ] systemd-таймер активен (systemctl status apt-daily-upgrade.timer)
  • [ ] Файл конфигурации 50unattended-upgrades (или 52unattended-upgrades-local) настроен
  • [ ] sudo unattended-upgrades --dry-run --debug не показывает ошибок
  • [ ] Email-уведомления настроены (если нужны)
  • [ ] Автоматическая перезагрузка настроена (если нужна)
  • [ ] Для ноутбуков учтено условие ConditionACPower

Заключение

Вы настроили автоматические обновления безопасности на Debian. Это важный шаг для обеспечения безопасности сервера, особенно если вы не можете заходить на него каждый день. Главное, что нужно запомнить: по умолчанию обновляются только пакеты из репозитория безопасности (security.debian.org). Если нужно обновлять и другие репозитории, добавьте их в Origins-Pattern. Всегда проверяйте конфигурацию через --dry-run --debug. Для серверов, где критична доступность, настройте уведомления и время перезагрузки. На ноутбуках учитывайте условие ConditionACPower.

Что дальше:

  • Настройте Fail2Ban для защиты от брутфорса
  • Настройте UFW или Firewalld для ограничения доступа
  • Настройте Timeshift для создания снимков перед обновлениями (можно запускать через cron)
  • Настройте SSH-доступ для удалённого управления

Связанные статьи: