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

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

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

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

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

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

[simterm]

$ sudo apt -y install unattended-upgrades

[/simterm]

Основной файл настроек – /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 "[email protected]";
...

Или:

...
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 для проверки:

[simterm]

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

[/simterm]

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

[simterm]

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

[/simterm]

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

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

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

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

[simterm]

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

[/simterm]

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

[email protected]
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: [email protected]

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

[simterm]

root@bitwarden-production:/home/admin# echo "Test" | mail -s "Test" [email protected]

[/simterm]

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

Готово.