Обновления системы · 7 min read · Jan 14, 2026

Автоматические обновления с помощью unattended-upgrades на Debian и Ubuntu

Выпуски Linux часто получают обновления, и обновления безопасности должны устанавливаться незамедлительно. Debian и Ubuntu используют систему APT, и хотя вручную установить все ожидающие обновления относительно просто, администратор может не помнить об этом или предпочитает спать ночью, а не проверять обновления. Эта статья в основном предназначена для серверных установок.

Обновление и установка пакетов вручную с помощью apt upgrade по-прежнему возможны при использовании unattended-upgrades. Если обновление, запущенное unattended-upgrades, происходит во время использования apt из командной строки, система apt информирует пользователя о том, что операция уже выполняется, и пользователь должен подождать, пока она не завершится, прежде чем продолжить выполнение команд apt.

Легкий способ для занятых администраторов

Установите unattended-upgrades, проверьте, что он включен, и следите за его работой по лог-файлам.

apt install unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades

Команда dpkg-reconfigure показывает диалоговое окно, спрашивающее «да» или «нет» для автоматической загрузки и установки стабильных обновлений безопасности. Убедитесь, что ответ «да».

unattended-upgrades проверяет наличие обновлений дважды в день в случайные моменты времени и устанавливает стабильные обновления безопасности.

Следите за тем, что происходит, читая лог-файлы в каталоге /var/log/unattended-upgrades/ и файле /var/log/dpkg.log.

Где найти документацию

Конфигурационный файл /etc/apt/apt.conf.d/50unattended-upgrades содержит документацию в комментариях. Этот документ будет ссылаться на этот файл с этого момента как 50unattended-upgrades.

Файл readme /usr/share/doc/unattended-upgrades/README.md.gz содержит полезные инструкции. Его можно прочитать с помощью команды zless (доступна из пакета gzip). Этот документ будет ссылаться на этот файл с этого момента как README.

Вики Debian имеет страницу https://wiki.debian.org/UnattendedUpgrades.

Страница документации сервера Ubuntu содержит главу «Автоматические обновления» о unattended-upgrades.

Страница man для unattended-upgrade, man unattended-upgrade.

Расширенная конфигурация

Используя легкий способ, вы заметите, что не все обновления устанавливаются автоматически. Вы также можете захотеть больше контроля над тем, что происходит автоматически, помимо установки обновлений.

Конфигурационный файл /etc/apt/apt.conf.d/50unattended-upgrades содержит документацию в комментариях, поэтому прочитайте файл, чтобы изучить доступные конфигурации. Очень полезно настроить unattended-upgrades для отправки электронных писем, когда что-то происходит.

Важно знать, что конфигурационный файл создается при установке или обновлении пакета unattended-upgrades, поэтому, когда сам unattended-upgrades обновляется или при переходе на следующую версию ОС, изменения, внесенные в этот файл, могут вызвать конфликты, которые необходимо разрешать вручную. Документационный файл README предлагает создать файл 52unattended-upgrades-local вместо изменения оригинального конфигурационного файла.

Если хотите, вы можете проверить файл /etc/apt/apt.conf.d/20auto-upgrades, что он содержит эти строки:

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

Если вы выполнили команду dpkg-reconfigure и ответили «да», строки должны быть там. Эти строки контролируют включение unattended-upgrades.

Отправка электронной почты

Чтобы отправка электронной почты работала, на хосте должна быть работающая система электронной почты, которая может отправлять электронные письма. Сначала проверьте это.

Включите отправку электронной почты из unattended-upgrades, отредактировав конфигурационный файл 52unattended-upgrades-local (создайте файл, если его нет в каталоге /etc/apt/apt.conf/). Скопируйте строку

//Unattended-Upgrade::Mail "";

из 50unattended-upgrades, раскомментируйте ее и добавьте целевой адрес электронной почты между кавычками.

Существует также настройка, чтобы определить, отправляется ли электронная почта всегда, когда unattended-upgrades выполняет обновление, или только в случае ошибок.

// Установите это значение в "true", чтобы получать электронные письма только в случае ошибок. По умолчанию
// всегда отправляется письмо, если Unattended-Upgrade::Mail установлено
//Unattended-Upgrade::MailOnlyOnError "false";

Если вы хотите изменить настройку, скопируйте строки в 52unattended-upgrades-local, раскомментируйте строку настройки и измените “false” на “true”.

Проверка с помощью

unattended-upgrade --dry-run -d

— хорошая идея после изменения конфигурационного файла.

По крайней мере, на Debian 10, 11 и Ubuntu 22.04 установка unattended-upgrades создает символическую ссылку unattended-upgrades на unattended-upgrade в каталоге /usr/bin/ и/или /bin/, так что обе команды работают одинаково.

$ ls -lhi /bin/unattended-upgrade*
11404505 -rwxr-xr-x 1 root root 98K tammi  15  2022 /bin/unattended-upgrade
11407087 lrwxrwxrwx 1 root root  18 tammi  15  2022 /bin/unattended-upgrades -> unattended-upgrade

Добавление репозитория

Добавление репозитория для автоматического обновления осуществляется путем добавления строк в Unattended-Upgrade::Origins-Pattern. В конфигурационном файле есть документация об этом.

README инструктирует настройки в более позднем конфигурационном файле 52unattended-upgrades-local, чтобы переопределить настройки по умолчанию. Я пробовал и обнаружил, что установка Unattended-Upgfade::Origins-Pattern не полностью переопределяет то, что было установлено в файле по умолчанию, вместо этого она добавляется к значениям по умолчанию. Поэтому нет необходимости копировать полное значение по умолчанию Unattended-Upgrade::Origins-Pattern, его можно добавить.

Например, пакет goaccess не обновляется автоматически, когда он установлен из Официального репозитория GoAccess. Он обновится автоматически, если будет установлен из обычного репозитория Debian (он доступен из обоих). Добавление репозитория GoAccess в Origins-Pattern заставляет unattended-upgrades выполнить обновление.

Изучите ситуацию с apt list –upgradable:

root@posti:~# LANG=C apt list --upgradable 
Listing... Done
goaccess/unknown 2:1.6.3-buster amd64 [upgradable from: 2:1.6.2-buster]
php-tcpdf/buster-backports 6.5.0+dfsg1-1~bpo10+1 all [upgradable from: 6.3.5+dfsg1-1~bpo10+1]
root@posti:~#

Таким образом, есть два пакета, которые не были обновлены автоматически с помощью unattended-upgrades. Изучая goaccess, видно, что он поступает из Официального репозитория GoAccess (и более старая версия из обычного репозитория Debian).

root@posti:~# LANG=C apt policy goaccess
goaccess:
  Установлено: 2:1.6.2-buster
  Кандидат: 2:1.6.3-buster
  Таблица версий:
     2:1.6.3-buster 500
        500 https://deb.goaccess.io buster/main amd64 Packages
 *** 2:1.6.2-buster 100
        100 /var/lib/dpkg/status
     1:1.2-4+b10 500
        500 http://mirror.hetzner.de/debian/packages buster/main amd64 Packages
        500 http://deb.debian.org/debian buster/main amd64 Packages
    root@posti:~#

Запуск unattended-upgrade –dry-run -d показывает, какие источники имеют неустановленные пакеты. Это может помочь выяснить, что нужно добавить в Origins-Pattern.

Изучение лога последнего запуска unattended upgrades показывает, какие источники рассматриваются при автоматическом обновлении:

2022-09-05 08:28:08,955 INFO Проверка, работает ли система от батареи, пропущена. Пожалуйста, установите
    пакет powermgmt-base, чтобы проверить состояние питания и пропустить установку обновлений, когда система
    работает от батареи.
2022-09-05 08:28:08,960 INFO Начальный черный список : 
2022-09-05 08:28:08,960 INFO Начальный белый список: 
2022-09-05 08:28:08,960 INFO Запуск скрипта автоматических обновлений
2022-09-05 08:28:08,960 INFO Разрешенные источники:
origin=Debian,codename=buster,label=Debian, 
origin=Debian,codename=buster,label=Debian-Security

Репозиторий GoAccess еще не там, поэтому теперь я добавляю его в /etc/apt/apt.conf.d/52unattended-upgrades-local.

Кстати, если вы установили unattended-upgrades на ноутбук, подумайте о том, чтобы установить powermgmt-base. Используя это, unattended-upgrades не запускает обновления, когда работает от батареи, как сообщает информационное сообщение в логе. Если вы работаете на сервере, который всегда работает от сети, это информационное сообщение больше не отображается с добавлением Unattended-Upgrade::OnlyOnACPower “false”; в конфигурацию.

Unattended-Upgrade::Origins-Pattern {
// Taleman добавил GoAccess 2022-09-05
        "o=GoAccess Repository, n=buster, l=Official GoAccess Repository";
};
Unattended-Upgrade::OnlyOnACPower "false";

Политика apt не показывала поле a для GoAccess, поэтому я использовал o, n и l. Найдите информацию о этих полях в README.

Поддерживается замена переменных для ${distro_id}, которая содержит вывод lsb_release -i, и ${distro_codename}, которая содержит вывод lsb_release -c. Таким образом, вместо n=buster я мог бы написать n=${distro_codename}.

Существовали два пакета, которые не обновились автоматически, другой, который все еще не обновлен, это php-tcpdf. Его, конечно, можно обновить с помощью apt upgrade, но его можно добавить в unattended-upgrades для автоматического обновления. Процедура такая же, как для goaccess.

Сначала изучите ситуацию с apt policy php-tcpdf. Это показывает, что он установлен из секции репозитория Debian buster-backports.

Из лога unattended-upgrades видно, что buster-backports не среди разрешенных источников. Он есть в файле 50unattended-upgrades, но закомментирован. Чтобы включить его, скопируйте строку

// "o=Debian Backports,a=${distro_codename}-backports,l=Debian Backports";

в 52unattended-upgrades-local внутри настройки Origins-Pattern и раскомментируйте.

После редактирования файла проверьте с помощью unattended-upgrades –dry-run -d, что добавленный репозиторий теперь среди «Разрешенных источников», и php-tcpdf среди пакетов, которые будут обновлены.

Контроль времени

Unattended-upgrades запускается в случайные моменты времени, чтобы облегчить нагрузку на серверы репозиториев. Это делается для избежания резких пиков нагрузки, которые возникли бы, если бы все хосты начали обновления одновременно. Подумайте внимательно, если вы решите изменить это поведение. Если вы запускаете свой собственный репозиторий или зеркальный репозиторий, то пики нагрузки ударят по вашему серверу репозитория, и вы избежите неприятностей с администраторами репозиториев в Интернете.

Именно systemd контролирует, в какое время запускается unattended-upgrades. Файл /lib/systemd/system/apt-daily.timer имеет секцию Timer, которая запускает загрузку apt дважды в день с 12-часовой случайной задержкой. Я предлагаю вам не изменять это или иметь очень веские причины для изменения.

Остальные настройки времени выполняются в файлах 50unattended-upgrades и 52unattended-upgrades-local.

Настройка Unattended-Upgrade::Update-Days контролирует дни недели, когда unattended-upgrades запускается. По умолчанию она пуста, что означает запуск каждый день. Ее можно настроить, чтобы она запускалась, например, только в субботу и воскресенье.

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

Unattended-upgrades можно настроить на перезагрузку, когда установленные обновления требуют перезагрузки. Это можно настроить так, чтобы это происходило немедленно или в желаемое время. Эти настройки используют параметры

//Unattended-Upgrade::Automatic-Reboot "false";
//Unattended-Upgrade::Automatic-Reboot-WithUsers "true";
//Unattended-Upgrade::Automatic-Reboot-Time "02:00";

По умолчанию автоматической перезагрузки нет. Если вы измените настройку на “true”, перезагрузка произойдет немедленно после установки обновления. Automatic-Reboot-Time можно установить для перезагрузки в желаемое время, если есть установленные обновления, требующие перезагрузки.

Черный и белый списки

Черный список предотвращает обновление пакета, который в противном случае был бы обновлен с помощью unattended-upgrades. Настройка Package-Blacklist содержит регулярные выражения. Если имя пакета совпадает, он исключается из автоматического обновления.

Я не использовал эту функцию, думаю, она может быть более полезной, если вы запускаете версию разработки, где имеет смысл предотвратить автоматическое обновление критических пакетов. Конфигурационный файл 50unattended-upgrades предоставляет примеры пакетов в черном списке.

README рассказывает о настройке Package-Whitelist. Описание говорит: «Только пакеты, которые соответствуют регулярным выражениям в этом списке, будут помечены для обновления». Оно не предлагает примеров, чтобы прояснить, в каких случаях было бы желательно установить белый список. Из моих экспериментов видно, что добавление пакетов в белый список означает, что только эти пакеты будут автоматически обновлены, ничего больше.

Заключение

Теперь вы знаете, что может сделать unattended-upgrades и как заставить его делать то, что вы хотите.

Существуют случаи, когда unattended-upgrades не выполняет обновление, потому что команда apt upgrade удерживает пакет. Это происходит, когда обновление удаляет пакет или устанавливает ранее не установленный пакет. Чтобы обновление произошло, выполните его самостоятельно с помощью команды apt full-upgrade, которая может удалить пакеты или установить новые ранее не установленные пакеты. Если unattended upgrades настроен на отправку электронной почты, электронное письмо содержит строку

Пакеты с обновляемым источником, но удерживаемые:

Заключительный пример 52unattended-upgrades-local с одного из моих хостов:

Unattended-Upgrade::Origins-Pattern {
// Taleman добавил 2022-09-05
        "o=GoAccess Repository, n=buster, l=Official GoAccess Repository";
        "o=Debian Backports,a=${distro_codename}-backports,l=Debian Backports";
    "origin=deb.sury.org,archive=${distro_codename}";
};

Unattended-Upgrade::Mail "[email protected]";
Unattended-Upgrade::OnlyOnACPower "false";
Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.