Debian: автоматические обновления с помощью unattended-upgrades и отправка почты через AWS SES

Автор: | 05/23/2019
 

Пакет unattended-upgrades выполняет автоматическую установку обновлений на Debian/Ubuntu.

Представляет собой Python-скрипт (1500 строк), расположенный в /usr/bin/unattended-upgrade (при этом /usr/bin/unattended-upgrades является симлинком на /usr/bin/unattended-upgrade).

Аналог для CentsOS/RHEL — yum-cron.

Устанавливаем:

sudo apt -y install unattended-upgrades

Основной файл настроек — /etc/apt/apt.conf.d/50unattended-upgrades, в нём настраиваются тип обновлений, отправка почты и прочее.

Настройки самих обновлений выполняются в файле /etc/apt/apt.conf.d/20auto-upgrades, который можно создать вручную, или вызвав dpkg-reconfigure unattended-upgrades:

20auto-upgrades

Опции для /etc/apt/apt.conf.d/20auto-upgrades:

  • APT::Periodic::Enable: включение/отключение обновлений, 1 — вкл, 0 — выкл
  • APT::Periodic::Update-Package-Lists: как часто выполнять apt update в днях, 0 — отключить вообще
  • APT::Periodic::Download-Upgradeable-Packages: как часто выполнять apt-get upgrade --download-only
  • APT::Periodic::Unattended-Upgrade: как часто выполнять apt upgrade
  • APT::Periodic::AutocleanInterval: как часто выполнять apt-get autoclean
  • APT::Periodic::Verbose: отправка сообщений на почту и их детализация:
    • 0 — отключить вообще
    • 1 — весь прогресс upgrade
    • 2 — весь прогресс upgrade + stdout прогармм
    • 3 — то же, плюс трассировка

50unattended-upgrades

Unattended-Upgrade::Origins-Pattern

Параметр Unattended-Upgrade::Origins-Pattern описывает репозитории, которые будут использованы для получения обновлений:

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

В ${distro_codename} будет подставлено имя версии, в данном случае stretch.

Unattended-Upgrade::Package-Blacklist

Задаётся список пакетов для игнорирования при установке обновлений:

...
Unattended-Upgrade::Package-Blacklist {
   "openjdk-8-jdk";
};
...

Unattended-Upgrade::Remove-Unused-Dependencies

Удаление неиспользуемых пакетов, apt-get autoremove:

...
Unattended-Upgrade::Remove-Unused-Dependencies "true";
...

Unattended-Upgrade::Mail

Самая полезная поция — отправка почты на ящик, или пользователю. Использует mail из mailutils.

...
Unattended-Upgrade::Mail "user@example.com";
...

Или:

...
Unattended-Upgrade::Mail "root";
...

Unattended-Upgrade::MailOnlyOnError

Отправка почты только при проблемах при обновлении:

...
Unattended-Upgrade::MailOnlyOnError "true";
...

Unattended-Upgrade::Automatic-Reboot

Автоматически выполнять перезагрузку сервера, если файл /var/run/reboot-required присутствует:

...
Unattended-Upgrade::Automatic-Reboot "true";
...

Перезагрузка будет выполнена немедленно, если не задана Automatic-Reboot-Time.

Unattended-Upgrade::Automatic-Reboot-Time

Если Unattended-Upgrade::Automatic-Reboot задана в true — то в Automatic-Reboot-Time задаётся время для перезагрузки:

...
Unattended-Upgrade::Automatic-Reboot-Time "02:00";
...

Запуск

После выполнения всех настроек — можно выполнить dry-run для проверки:

root@bitwarden-production:/home/admin# unattended-upgrade -v -d --dry-run
Initial blacklisted packages:
Initial whitelisted packages:
Starting unattended upgrades script
Allowed origins are: ['origin=Debian,codename=stretch,label=Debian-Security']
pkgs that look like they should be upgraded:
Fetched 0 B in 0s (0 B/s)
fetch.run() result: 0
blacklist: []
whitelist: []
No packages found that can be upgraded unattended and no pending auto-removals

И если есть доступные обновления — то установить их:

root@bitwarden-production:/home/admin# unattended-upgrade -v -d

Настройка почты

Можно настроить локальный Exim (см. Exim: Mailing to remote domains not supported), но нам Gmail, на котором ящик администратора, забанил отправку почты с этого IP :-).

Поэтому — используем AWS SES.

Для отправки через AWS SES — устанавливаем локальный SMTP клиент, например — ssmtp:

root@bitwarden-production:/home/admin# apt install mailutils ssmtp

Редактируем /etc/ssmtp/ssmtp.conf:

root=admin@example.com
mailhub=email-smtp.us-east-1.amazonaws.com:587

AuthUser=AKI***OAQ
AuthPass=BH3***gpM
UseTLS=YES
UseSTARTTLS=YES

hostname=accounts.example.com

Настраиваем Mail From для SSMTP — указываем ящик, который зарегистрирован в AWS SES, иначе получим ошибку «554 Message rejected: Email address is not verified«.

Редактируем /etc/ssmtp/revaliases:

root: no-repy@example.com

Проверяем отправку:

root@bitwarden-production:/home/admin# echo "Test" | mail -s "Test" admin@example.com

Логи unattended-upgrades — в каталоге /var/log/unattended-upgrades/.

Готово.