17.02.2008

Автоматические обновления с помощью cron-apt

Когда количество серверов на поддержке переваливает за второй десяток, поневоле начинаешь думать как бы так сделать, чтобы удобные, но очень скучные aptitude update && aptitude upgrade происходили без вмешательства со стороны занятого более творческой работой администратора. В бытность свою молодым джедаем, меня посещала гениальная мысль засунуть эти команды в шедулер. Ничего хорошего из этого, разумеется, не вышло. При желании, конечно, можно написать скрипт автоматизирующий эту задачу, но это уже будет велосипедостроение.

Пакет cron-apt представляет собой утилиту, с помощью которой автоматизируется скачивание, а при желании и установка обновлений. Расскажу как я обычно настраиваю его и apt sources.

Конфигурация apt

Мой /etc/apt/sources.list для серверов в российском сегменте сети выглядит так:

deb http://mirrors.yandex.ru/debian/ etch main contrib non-free

Раньше я указывал на зеркала http://ftp.uk.debian.org/debian/ или http://ftp.estpac.ee/debian/, потом перестал. Яндекс, хоть я его и не очень люблю, находится значительно ближе, да и трафиик с него российский.

Кроме основного файла создаётся ещё один или два:

/etc/apt/sources.list.d/security.list:

deb http://security.debian.org/debian-security/ etch/updates main contrib non-free

/etc/apt/sources.list.d/volatile.list:

deb http://volatile.debian.org/debian-volatile/ etch main contrib non-free

Для справки: volatile — это репозитарий, который позволяет обновлять те пакеты из текущей стабильной версии, которые требуют регулярного обновления. Нужен он для того, чтобы не вносить в стабильный репозитарий пакеты, не прошедшие стандартный путь через ветку testing.

Как пример, у меня volatile используется для обновлений clam и spamassassin.

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

Конфигурация cron-apt

Ставится стандартно:

$ sudo aptitude install cron-apt

Конфигурацию имеет довольно гибкую. Параметры подробно описаны в /etc/cron-apt/config. Если оставить его как есть, то будет раз в сутки обновлять списки пакетов и скачивать всё, что нужно для dist-upgrade. Это уже само по-себе приятно. Когда начинаешь апдейтиться вручную пакеты уже готовы, не надо ждать пока они скачаются. Экономит время.

А чтобы автоматизировать ещё и установку, создаётся два файла.

/etc/cron-apt/action.d/4-security:

upgrade -y -o Dir::Etc::SourceList=/etc/apt/sources.list.d/security.list

/etc/cron-apt/action.d/5-volatile:

upgrade -y -o Dir::Etc::SourceList=/etc/apt/sources.list.d/volatile.list

Есть один подводный камень, на который можно наткнуться. Если вы имеете привычку редактировать стандартные конфиги, устанавливаемые пакетами, то при обновлении apt может захотеть слить изменённый конфиг с новым. Я натыкался на такую проблему, когда кроме security и volatile автоматически обновлялся ещё и из proposed-updates (что и вручную-то делать на продакшн-сервере не фонтан идея). При обновлениях из security и volatile, за 4 с лишним года использования cron-apt, таких проблем не наблюдал ни разу. Хотя справедливости ради надо сказать, что никаких документов отдельно регламентирующих процедуру автоматического обновления файлов конфигурации мне найти не удалось. Так что проявление таких проблем возможно.

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

/etc/cron-apt/conf.d/4-security:

MAILON="always"

/etc/cron-apt/conf.d/5-volatile:

MAILON="always"

Теперь обо всех своих действиях cron-apt будет отчитываться root’у. Параметр «always» можно заменить на «errors», и тогда отчёты будут отправляться только в случае возникновения ошибок.

Комментарии

18.02.08 19:56 Anonymous комментирует:

А можно поподробнее почему ничего хорошего из засовывания в шедулер не вышло? Чем хуже стал бы работать

/etc/cron.daily/update.sh:

apt-get update
apt-get -y upgrade

Скачивать заранее всё для dist-upgrade ИМХО не есть хорошо: до того как надумаешь этот dist-upgrade сделать, можно скачать что-нибудь вроде package-1.0-r1.deb, package-1.0-r2.deb, package-1.0-r3.deb , а понадобится только последний. Хотя если сильно надо, можно добавить

apt-get –download-only dist-upgrade
apt-get autoclean

Кидание сообщений на почту тоже можно прикрутить.

18.02.08 19:59 Anonymous комментирует:

и ещё #!/bin/sh в начале написать забыл

19.02.08 09:16 uptimebox комментирует:

Хуже как минимум тем, что, как справедливо замечено, сообщения «можно прикрутить». Т.е. для этого нужно совершать дополнительные движения и отладку.

Что касается предварительного скачивания, то тут уж кому что больше нравится. Можно dist-upgrade заменить на просто upgrade.

21.02.08 08:46 uptimebox комментирует:

Поправка: http://ftp.estpak.ee/debian/

01.03.08 13:08 amadis комментирует:

«Когда количество серверов на поддержке переваливает за второй десяток» можно пользоваться для aptitude update && aptitude upgrade софтинкой clusterssh (http://www.debian-administration.org/articles/551)
. И контролировать, что оно там заапдейтит.
А то вот, насколько мне помниццо, при upgrade с sarge на woody там столько всего попеременяли, что очень много потом пришлось допиливать руками (синтаксис конфигов некоторых программ поменялся)…

10.06.08 12:37 Ксюша комментирует:

Реализовать оказалось несложно, а эффект очень классный, теперь все делается на автомате, спасибо за полезную информацию!

04.04.10 21:25 private-seo-soft.blogspot.com комментирует:

Спасибо написано очень доходчиво :) Хочу добавить от себя детальное описание процесса настройки крона вручную и через панельку DirectAdmin private-seo-soft.blogspot.com/2010/04/crontab.html