воскресенье, 28 августа 2011 г.

Корпоративный сервер обновлений с apt-cacher-ng


Взято отсюда
При росте количества машин с Linux на борту неизбежно возникает вопрос обновления их. Даже при наличии безлимитного канала, трафик на обновление уже переходит из разряда количество в качество. Если необходимо обновить одну, две машины это еще не страшно, но если надо обновлять большой парк устройств - это уже повод "создать" решения для ускорения этого процесса, и экономический эффект от этого решения не последнее дело. Сегодня рассмотрим одно из возможных решений для кэширования обновлений запрашиваемых Debian-based системами (Linux системы основанные на дистрибутиве Debian).
Люблю создавать отдельный сервер под конкретное решение, благо виртуализация располагает делать это без финансовых затрат на железо.
Определяем состав задачи:
  • Обеспечить максимальное ускорение обновления ОС; 
  • Сократить расходы на трафик до минимума; 
  • Не требовать финансовых затрат на оборудование; 
Дано для решения задачи:
  • ... ничего; 
  • Свобода идей и великий Гугл; 
  • Немного "серого вещества";
    Немного погуглив и почитав несколько форумов остановился на решении с использованием утилиты apt-cacher-ng. На мой взгляд, имеет самое простое решение и не требовательное к сервисам. Суть работы ее заключается в организации хранилища пакетов по мере их запросов, т.е. один клиент запросил пакет - получил его из интернета, втрой и последующие клиенты запросили - получили этот паке уже из кэша. Нет необходимости создавать полное локальное зеркало, оно будет создаваться по мере запросов.
    Серверная часть
    Как уже подметил ранее, для решения конкретной задачи поставим новый сервер, буду использовать Ubuntu Lucid 10.04 LTS. Ставим стандартно с минимальным набором, благо для apt-cacher-ng нет необходимости устанавливать LAMP и сопутствующие тяжелые библиотеки. Сервер установлен, настроен сервер SSH, в моем случае к нему еще подключен по NFS "резиновый" ресурс (каталог) для использования в качестве хранилища кэшируемых репозиториев. Подготовка не заняла много сил и времени. Приступаем к самому важному шагу, установке и настройке всей этой затеи. У меня на серверах GUI нет, все проделывается в консоли. После установки сервера сознательно не осуществлено его обновления, как обычно рекомендую сделать это, мы обновимся уже через кэшируемый сервер (он сам кэширующий сервер).
    user$ sudo apt-get install apt-cacher-ng
    
    Из сети будет загружено "рекордное" :) количество данных - аж 300кБ. Очень радует, что утилита не тянет за собой никаких зависимостей. Собственно настройку тут можно и закончить, все уже подключено и работает, но мы сделаем несколько красивых штрихов.
    Редактируем конфигурационный файл /etc/apt-cacher-ng/acng.conf:
    user$ sudo nano /etc/apt-cacher-ng/acng.conf
    
    Здесь нас интересует только один параметр
    ...
    CacheDir: var/cache/apt-cacher-ng
    
    ..
    Необходимо заменить путь на тот, где вы собираетесь хранить все кэшированнные пакеты, надо заметить, что apt-cacher-ng не создает специализированных баз непонятного формата, а раскладывает все в том виде как это хранится на сервере источника. Если вы изменили конфигурацию, то не забудьте перезапустить сервис:
    user$ service apt-cacher-ng restart
    
    Стоит обратить внимание, что размер надо предусматривать с запасом - всякое бывает. В моем случае - это отдельное NFS ресурс, выделенный для этой задачи. Что ж настройки сделаны, остальное можно не трогать. Вспомним, что мы не обновляли сам сервер на котором настраиваем кэширование пакетов.
    Настройка клиентов
    На всех Debian-based клиентах сообщим apt-get (aptitude) использовать для обновления наш новоиспеченный кэширующий сервер. Для это создадим файл изменения конфигурации установщика пакетов, можете назвать его как вам удобно, главное чтоб он лежал там где надо и имел определенный формат записи.
    user$ sudo touch /etc/apt/apt.conf.d/01proxy
    
    поместим в него всего одну строку
    Acquire::http { Proxy "http://Адрес_Нашего_Нового_Сервера:3142"; };
    
    Или можно сделать это всего одной командой, кому как удобно или кто как запоминает
    user$ sudo sh -c "echo \"Acquire::http { Proxy \\\"http://Адрес_Нашего_Нового_Сервера:3142\\\"; }; \"> /etc/apt/apt.conf.d/01proxy"
    
    Настройка клиентов на этом завершена, можно приступать к обновлению.
    user$ sudo apt-get update 
    
    user$ sudo apt-get upgrade
    Ждем пока все обновится и посмотрим результат использования нашего сервера, отчеты лежат по адресу http://ip-адрес:3142/acng-report.html для примера приведу свой отчет после всего 2х часового использования с 4мя клиентами (Ubuntu Lucid, Ubuntu Maverick, Debian Lenny).
    Для анализа лога необходимо нажать на кнопку "Count Data"
    Эффективность кэширующего сервера будет расти с каждым запросом клиентов на обновление. Если у вас уже имеется папка содержащая пакеты, которые вы хотите использовать для обновления, то их необходимо загрузить в каталог /var/cache/apt-cacher-ng/_import если вы не меняли путь хранения, иначе указываете /путь/хранения/_import. Создадим каталог импорта и поместим туда пакеты:
    user$ sudo mkdir -p /var/cache/apt-cacher-ng/_import
    user$ sudo chown apt-cacher-ng /var/cache/apt-cacher-ng/_import
    
    Скопируйте удобным для вас способом все пакеты в этот каталог и на странице отчета http://Адрес_Нашего_Нового_Сервера:3142/acng-report.html нажмите "Start Import". Все содержащиеся там пакеты будут помещены в хранилище и будут предоставлены по первому требованию клиентов. Импорт не будет работать пока через систему не пройдет хотя бы один пакет! (Установите любой пакет, да хоть тот же русский мануал по командам: sudo apt-get install manpages-ru). Во время импорта система проверит обновление известных на момент импорта репозиториев. По окончанию импорта все файлы в каталоге _import будут удалены, имейте это ввиду! Удачи.

    Комментариев нет:

    Отправить комментарий