Пакет 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-onlyAPT::Periodic::Unattended-Upgrade: как часто выполнятьapt upgradeAPT::Periodic::AutocleanInterval: как часто выполнятьapt-get autocleanAPT::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/.
Готово.
