Pull to refresh

Автоматизация обновления серверов с Debian/Ubuntu

Reading time4 min
Views6.5K
В данной заметке я попытаюсь обобщить существующие способы автоматизации обновления серверов с Debian/Ubuntu на борту.

А оно нам надо?


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

Обновления с заплатками в Debian/Ubuntu выходят почти каждый день. Уследить за всем этим бывает очень не просто. Вот тут и могут пригодиться описанные ниже программы.

apticron


apticron — простой скрипт, который ежедневно шлёт письма с информацией о доступных обновлениях. Всё что нужно для его работы — указать в файле настроек /etc/apticron/apticron.conf наш e-mail:
EMAIL="mail@example.com"

Письмо от apticron довольно информативно и выглядит примерно так:
apticron report [Thu, 06 Aug 2009 16:15:24 +0300]
========================================================================

apticron has detected that some packages need upgrading on:

example.com
[ 127.0.1.1 192.168.0.1 ]

The following packages are currently pending an upgrade:

acpid 1.0.4-5etch1
apache2-utils 2.2.3-4+etch10

========================================================================

Package Details:

Reading changelogs...
--- Changes for acpid ---
acpid (1.0.4-5etch1) oldstable-security; urgency=high

* Added upstream's patch to fix CVE-2009-0798

-- Michael Meskes <meskes@debian.org> Wed, 29 Apr 2009 12:26:56 +0200

--- Changes for apache2 (apache2-utils) ---
apache2 (2.2.3-4+etch10) oldstable-security; urgency=low

* Fix regression: A segfault could happen in mod_deflate in conjunction with
mod_php when a client aborts the connection.

-- Stefan Fritsch <sf@debian.org> Wed, 29 Jul 2009 11:39:06 +0200

========================================================================

You can perform the upgrade by issuing the command:

aptitude dist-upgrade

as root on example.com

It is recommended that you simulate the upgrade first to confirm that
the actions that would be taken are reasonable. The upgrade may be
simulated by issuing the command:

aptitude -s -y dist-upgrade

-- apticron

Из письма видно, что нужно обновить acpid и apache2-utils. Кроме этого в письме есть и описания изменений. Это очень удобно, когда Вы не получаете эти сведения из других источников (например, из списка рассылки debian-security-announce).

cron-apt


cron-apt — более продвинутая утилита, которая помимо информирования о доступных обновлениях может их скачивать и устанавливать. По-умолчанию, cron-apt только скачивает обновления, но не устанавливает их. Для получения писем нужно в файле /etc/cron-apt/config указать наш e-mail и сказать при каких условиях отправлять письма:
MAILTO="mail@example.com"
MAILON="always"

Вот пример письма от cron-apt:
CRON-APT RUN [/etc/cron-apt/config]: Wed Jul 29 04:00:01 EEST 2009
CRON-APT SLEEP: 1172, Wed Jul 29 04:19:33 EEST 2009
CRON-APT ACTION: 0-update
CRON-APT LINE: /usr/bin/apt-get update -o quiet=2
CRON-APT ACTION: 3-download
CRON-APT LINE: /usr/bin/apt-get autoclean -y
Reading package lists...
Building dependency tree...
Reading state information...
CRON-APT LINE: /usr/bin/apt-get dist-upgrade -d -y -o APT::Get::Show-Upgraded=true
Reading package lists...
Building dependency tree...
Reading state information...
The following packages will be upgraded:
dbus dbus-x11 dhcp3-client dhcp3-common libdbus-1-3
5 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0B/957kB of archives.
After this operation, 8192B disk space will be freed.
Download complete and in download only mode

Видно, что cron-apt скачал, но не устанавливал (!) обновления для dbus и dhcp.

unattended-upgrades


unattended-upgrade — это дополнительный скрипт, разработанный в Canonical для совмстной работы с apt. В отличие от двух ранее описанных утилит, unattended-upgrade умеет только устанавливать обновления. Чтобы включить автоматическое обновление системы, для начала надо указать в файле настроек /etc/apt/apt.conf.d/50unattended-upgrades что именно мы хотим обновлять:
// allowed (origin, archive) pairs
Unattended-Upgrade::Allowed-Origins {
"Debian stable Debian-Security";
};

// never update the packages in this list
Unattended-Upgrade::Package-Blacklist {
// "vim";
};

Дополнительно, в секции Unattended-Upgrade::Package-Blacklist, можно указать список пакетов, которые нельзя обновлять. В данном примере там закомментированный vim.

После этого надо сказать apt, что мы хотим воспользоваться unattended-upgrade. Для этого создадим файл /etc/apt/apt.conf.d/10periodic и добавим туда следующие строки:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "1";
APT::Periodic::Unattended-Upgrade "1";

В итоге мы получим ежедневное обновление списка пакетов, загрузку доступных обновлений, удаление deb-файлов из кэша уже установленных пакетов и самое главное — автоматическую установку пакетов.

У unattended-upgrade есть один маленький недостаток — утилита никому (кроме лог-файла) не сообщает о том, что же собственно она сделала. Для того, чтобы узнавать о том, что она обновила, можно воспользоваться возможностью утилиты logrotate — отправкой лог-файлов на почту. Для этого пропишем следующие строки в файл /etc/logrotate.d/unattended-upgrades:
/var/log/unattended-upgrades/unattended-upgrades.log {
rotate 7
daily
mailfirst
mail mail@example.com
compress
missingok
notifempty
}

В результате мы получим на e-mail копию лог-файла с информацией об обновлениях:
2009-08-01 17:50:57,596 INFO Initial blacklisted packages:
2009-08-01 17:50:57,596 INFO Starting unattended upgrades script
2009-08-01 17:50:57,596 INFO Allowed origins are: ["['Debian', 'stable', 'Debian-Security']"]
2009-08-01 17:51:08,294 INFO Packages that are upgraded: libbind9-40 libisc45 libisccfg40 dnsutils libtiff4 liblwres40 bind9-host libisccc40 libdns45
2009-08-01 17:51:08,294 INFO Writing dpkg log to '/var/log/unattended-upgrades/unattended-upgrades-dpkg_2009-08-01_17:51:08.294492.log'
2009-08-01 17:51:11,169 INFO All upgrades installed

Как видно из лога, подробности (вывод dpkg) записаны в отдельный файл: unattended-upgrades-dpkg_2009-08-09_17:51:08.294492.log.

Заключение


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

P.S. Для себя я сделал выбор в пользу cron-apt.
Tags:
Hubs:
+2
Comments8

Articles

Change theme settings