Модераторы: powerfox, ZeeLax
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обновление парка машин Debian 
:(
    Опции темы
ZeeLax
Дата 22.9.2007, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 4388
Регистрация: 20.8.2006
Где: Алма-Ата

Репутация: 7
Всего: 88



Введение
Процесс обновления большого количества машин (как серверов, так и рабочих станций) всегда представлял из себя нетривиальную задачу - необходимо получить новые версии пакетов программ (желательно, в формате вашего менеджера пакетов), распространить копии пакетов на все машины в сети (причем, для каждой из машин часто необходим "свой" набор пакетов), произвести установку обновлений. При установке ОС на новый сервер, тоже возникали проблемы - необходимо установить имеющуюся версию дистрибутива "наложив" полученные ранее обновления описанным выше способом, или же, загрузить iso-образ новой версии дистрибутива.

Менеджеры пакетов современных дистрибутивов Linux облегчают процесс обновлений. Всё, что вам необходимо - это интернет-канал и небольшая настройка менеджера пакетов на использование необходимого набора пакетов и ближайших к вам зеркал. Менеджер пакетов сам определит пакеты, требующие обновления и их зависимости, загрузит всё это из сети и произведет установку. Установка новой системы также может происходить из сети.

Предисловие
В моей организации большая часть серверов находится под управлением дистрибутива Debian GNU/Linux, использующего систему пакетов APT, следовательно, рассматривать я буду именно её. Если вы используете другой дистрибутив, не спешите закрывать статью - основная идея может быть воспроизведена во многих современных дистрибутивах. Описание системы APT выходит за рамки данной статьи (и превосходит её по размеру smile ). Его вы можете найти на сайте дистрибутива или же, установив пакет apt-howto.

Когда для подсчета серверов перестало хватать пальцев на руках, а география расположения расширилась от "одной серверной стойки" до "города и его окрестностей", совместно с коллегой было найдено решение, позволяющее своевременно обновлять ПО, не загружая при этом каналы интернет. Даже если имеется безлимитный высокоскоростной канал, всё равно не вижу смысла загружать его (каналы провайдеров, сервера Debian) обновлениями. Итак, решение состоит всего из двух пакетов - apt-proxy и jigdo. Первый используется для создания общего хранилища пакетов, а второй - для поддержания "свежести" iso-образов дистрибутивов Debian для установки новых систем, раздачи коллегам, друзьям и т.п. Но, обо всём по порядку.

Apt-proxy
Сеть организации в большинстве случаев обладает большей пропускной способностью, чем имеющиеся каналы интернет. Относительно стоимости - даже арендованные каналы обходятся дешевле публичных каналов интернет. В такой сети очень удобно иметь локальный сервер обновлений, находящийся на сервере, непосредственно подключенном к интернету и имеющим связь с другими серверами и DMZ. Apt-proxy является прокси-сервером особого типа, предназначенным специально для "общения" клиентов с зеркалами обновлений. Почему бы просто не воспользоваться обычным кэширующим прокси-сервером, спросите вы? Вот несколько причин:
  •  apt-proxy нацелен на кэширование .deb пакетов
  •  строго говоря apt-proxy - это веб-сервер специального назначения; следовательно, общаться с ним можно как с любым веб-сервером, например, с помощью wget
  •  сервера обновлений и протокол доступа к ним (http, ftp или rsync) выбираются централизованно для всех клиентов, исходя из конфигурационного файла apt-proxy. Все клиенты обращаются к apt-proxy как к серверу обновлений по протоколу HTTP.
  •  кэш apt-proxy является отображением сервера обновлений Debian с точно такой же структурой каталогов, содержащей только файлы, запрошенные клиентами; эти файлы можно использовать так же как любые .deb файлы
  •  в кэш можно импортировать существующие пакеты
Когда клиент запрашивает файл у apt-proxy, сначала проверяется кэш. Если файл найден в кэше, он отдаётся клиенту. Если файл в кэше не обнаружен, то для получения файла используется набор зеркал, определенных для данного ресурса. Одновременно со скачиванием, файл передаётся клиенту. При недоступности первого зеркала ресурса, используется второе, третье и т.д.

Установка
Код

apt-get install apt-proxy

Настройка
Все параметры содержаться к конфигурационном файле /etc/apt-proxy/apt-proxy.conf (или /etc/apt-proxy/apt-proxy-v2.conf).
Пример файла /etc/apt-proxy/apt-proxy-v2.conf
Код

[DEFAULT]
;; All times are in seconds, but you can add a suffix
;; for minutes(m), hours(h) or days(d)

;; Server IP to listen on
;address = 192.168.0.254

;; Server port to listen on
port = 9999

;; Control files (Packages/Sources/Contents) refresh rate
;;
;; Minimum time between attempts to refresh a file
min_refresh_delay = 1h

;; Minimum age of a file before attempting an update (NOT YET IMPLEMENTED)
;min_age = 23h

;; Uncomment to make apt-proxy continue downloading even if all
;; clients disconnect.  This is probably not a good idea on a
;; dial up line.
;; complete_clientless_downloads = 1

;; Debugging settings.
;; for all debug information use this:
;; debug = all:9
debug = all:4 db:0

;; Debugging remote python console
;; Do not enable in an untrusted environment
;telnet_port = 9998
;telnet_user = apt-proxy
;telnet_password = secret

;; Network timeout when retrieving from backend servers
timeout = 15

;; Cache directory for apt-proxy
cache_dir = /var/cache/apt-proxy

;; Use passive FTP? (default=on)
passive_ftp = on

;; Use HTTP proxy?
;http_proxy = 127.0.0.1:8080

;; Limit download rate from backend servers (http and rsync only), in bytes/sec
;bandwidth_limit = 100000

;; Enable HTTP pipelining within apt-proxy (for test purposes)
;disable_pipelining=0

;;--------------------------------------------------------------
;; Cache housekeeping

;; Time to perform periodic housekeeping:
;;  - delete files that have not been accessed in max_age
;;  - scan cache directories and update internal tables
cleanup_freq = 1d

;; Maximum age of files before deletion from the cache (seconds)
max_age = 120d

;; Maximum number of versions of a .deb to keep per distribution
max_versions = 3

;; Add HTTP backends dynamicaly if not already defined? (default=on)
;dynamic_backends = on

;;---------------------------------------------------------------
;;---------------------------------------------------------------
;; Backend servers
;;
;; Place each server in its own [section]

[debian]
;; The main Debian archive
;; You can override the default timeout like this:
;timeout = 30

;; Rsync server used to rsync the Packages file (NOT YET IMPLEMENTED)
;;rsyncpackages = rsync://ftp.de.debian.org/debian

;; Backend servers, in order of preference
backends =
        http://ftp.de.debian.org/debian
        http://ftp.ch.debian.org/debian
        ftp://ftp.uk.debian.org/debian

[security]
;; Debian security archive
backends =
        http://security.debian.org/debian-security
        http://ftp2.de.debian.org/debian-security

В секции DEFAULT содержатся общие настройки, смысл которых ясен из названий и комментариев. Все остальные секции являются описаниями ресурсов, упомянутых выше. Каждый ресурс содержит данные определенных репозиториев Debian. В примере выше debian - основной репозиторий, security - репозиторий обновлений безопасноти.
Также необходимо внести соответствующие изменения в файлы /etc/apt/sources.list на клиентских машинах. Формат записи таков:
deb http://адрес-apt-proxy/ресурс дистрибутив секция1 секция2. Пример исходного файла sources.list
Код

deb http://ftp.de.debian.org/debian/ testing main non-free contrib
deb-src http://ftp.de.debian.org/debian/ testing main non-free contrib

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

Пример файла после перенастройки:
Код

deb http://apt-proxy.domain.tld:9999/debian/ testing main non-free contrib
deb-src http://apt-proxy.domain.tld:9999/debian/ testing main non-free contrib

deb http://apt-proxy.domain.tld:9999/security testing/updates main contrib non-free
deb-src http://apt-proxy.domain.tld:9999/security testing/updates main contrib non-free

Использование
Пользоваться APT нужно так же как и раньше.
Код

apt-get update
apt-get upgrade
apt-get install moo

Все скачиваемы пакеты будут кэшироваться apt-proxy. По-умолчанию кэш располагается в директории /var/cache/apt-proxy.

Jigdo
Казалось бы, на этом можно и остановиться. Кэш растёт, интернет трафик остаётся достаточно стабильным, независимо от количества обновляемых машин - всем хорошо. Но, мы решили пойти немного дальше, вспомнив о том, что неплохо было бы иметь свежие iso-образы дистрибутивов. Установка дома (где медленный DSL-канал), неожиданная командировка, поднятие сайта, удаленного географически, с последующим подключением (расширением) интернет-каналов - всё это требует наличия большого количества пакетов под рукой. Чем и является iso-образ в "отрезанном" на CD/DVD виде. ISO-образ можно загрузить из интернета как обычно, по протоколу HTTP или FTP. Для уменьшения нагрузки на серверы Debian можно воспользоваться протоколом BitTorrent. Но, какой бы из этих методов вы не выбрали - всё равно придётся загрузить ВЕСЬ ISO-образ, даже если от релиза к релизу изменилось всего несколько десятков файлов (на одном образе DVD содержится около 4000 файлов).

Альтернативой является метод с использованием Jigdo. Схема проста: вы скачиваете два файла - файл .jigdo и файл .template. .template-файл представляет собой "шаблон" необходимого образа, содержащий загрузочную область, таблицу размещения файлов, описания каталогов и другие данные, не являющиеся пакетами Debian. Файлы пакетов заменены их контрольными суммами. Файл .jigdo содержит набор контрольная-сумма=имя-файла. Во время работы, утилита воссоздаёт iso-образ из .template файла. После этого, она начинает заполнять "пустые" области файлами, скачивая их из сети. Если у вас уже имеются некоторые файлы, необходимые для данного образа (например, предыдущий релиз дистрибутива), то вы можете указать утилите директорию для поиска файлов. Если таковые будут найдены (совпадает имя, размер и md5-сумма), они будут включены в образ без скачивания из сети. Таким образом, можно организовать, так называемое "инкрементное обновление" ISO-образов, значительно снижающее объём трафика и нагрузку на серверы Debian.
Преимущества jigdo перед "обычной" загрузкой образов:
  •  загрузка происходит быстрее, т.к. на ближайшем к вам зеркале может не оказаться образов ISO
  •  уменьшается нагрузка на серверы Debian
  •  при "обновлении" образа скачиваются только обновившиеся файлы
Установка
Код

apt-get install jigdo-file

Никакой специальной настройки пакета не требуется. Так как мы собираемся только скачивать нужные образы, мы будем пользоваться только утилитой jigdo-lite. Для начала работы, нам понадобятся два файла - .jigdo файл и файл .template. Ссылки на эти файлы можно получить на сайте debian.org или напрямую найти их на зеркалах в директориях jigdo-cd или jigdo-dvd. Получив файлы, запускаем jigdo-lite, передав в качесвте пераметра имя .jigdo файла
Код

$ jigdo-lite debian-testing-i386-DVD-2.jigdo
Jigsaw Download "lite"
Copyright (C) 2001-2005  |  jigdo@
Richard Atterer          |  atterer.net
Loading settings from `/home/zeelax/.jigdo-lite'

-----------------------------------------------------------------
Images offered by `debian-testing-i386-DVD-2.jigdo':
  1: 'Debian GNU/Linux testing "Lenny" - Official Snapshot i386 DVD Binary-2 20070919-20:28 (20070919)' (debian-testing-i386-DVD-2.iso)

Further information about `debian-testing-i386-DVD-2.iso':
Generated on Wed, 19 Sep 2007 22:44:20 +0200

-----------------------------------------------------------------
If you already have a previous version of the CD you are
downloading, jigdo can re-use files on the old CD that are also
present in the new image, and you do not need to download them
again. Mount the old CD ROM and enter the path it is mounted under
(e.g. `/mnt/cdrom').
Alternatively, just press enter if you want to start downloading
the remaining files.

You can also enter a single digit from the list below to
select the respective entry for scanning:
  1: /mnt/cdrom
Files to scan:

Утилита определит имя образа и предложит нам указать каталог, в котором она может найти необходимые файлы. Также можно просто выбрать соответствующий номер пути, введенного ранее. В нашем случае, я монтирую предыдущий образ в директорию /mnt/cdrom
Код

mount /home/zeelax/download/soft/debian/iso/testing/debian-testing-i386-DVD-2.iso /mnt/cdrom -oloop

и выбираю первый путь, вводом единицы. Далее, можно хлебнуть кофе, т.к. поиск займёт какое-то время. После поиска, получаем:
Код

Not downloading .template file - `debian-testing-i386-DVD-2.template' already present
Found 217 of the 4178 files required by the template
Copied input files to temporary file `debian-testing-i386-DVD-2.iso.tmp' - repeat command and supply more files to continue

-----------------------------------------------------------------
If you already have a previous version of the CD you are
downloading, jigdo can re-use files on the old CD that are also
present in the new image, and you do not need to download them
again. Mount the old CD ROM and enter the path it is mounted under
(e.g. `/mnt/cdrom').
Alternatively, just press enter if you want to start downloading
the remaining files.

You can also enter a single digit from the list below to
select the respective entry for scanning:
  1: /mnt/1
Files to scan:

Найдя нужные файлы, утилита запишет их в образ. Для поиска недостающих файлов, она ещё раз запросит у вас путь. В данном случае, так как файлов у нас больше нет, нажимаем enter, получая запрос на выбор зеркала. По умолчанию используются зеркала из sources.list.
Код

-----------------------------------------------------------------
The jigdo file refers to files stored on Debian mirrors. Please
choose a Debian mirror as follows: Either enter a complete URL
pointing to a mirror (in the form
`ftp://ftp.debian.org/debian/'), or enter any regular expression
for searching through the list of mirrors: Try a two-letter
country code such as `de', or a country name like `United
States', or a server name like `sunsite'.
Debian mirror [http://apt-proxy.network.kz:9999/debian/]:

Далее, опять нажимаем enter и идём пить пиво с друьями, т.к. в зависимости от ширины вашего канала и "разницы" в релизах загрузка может занять приличное время. По завершении процесса, утилита проверит контрольную сумму всего образа и, если всё верно, предоставит вам iso-файл, готовый к использованию. Просто, не правда ли?

Послесловие
Внимательный читатель, должен был заметить, что в последнем примере содержится ссылка на "интересное" зеркало Debian.
Код

Debian mirror [http://apt-proxy.network.kz:9999/debian/]:

Да. Вы правильно догадались. Мы объединили эти два замечательных метода получив:
  •  быстрое обновление парка серверов и рабочих станций
  •  минимальные затраты на обновление
  •  быстрая установка новых систем, даже с использованием минимальных образов (network install и bussiness card)
  •  всегда "свежие" ISO-образы систем
  •  пополнение кэша apt-proxy для нужд обновления за счёт jigdo и наоборот
  •  много пива во время скачивания обновлений smile
Продолжение следует...

Ссылки
Официальный сайт Debian GNU/Linux
Домашняя страница apt-proxy
Debian jigdo mini-HOWTO

За время написания этой статьи автором были получны ISO-образы Debian Testing DVD-1 и DVD-2, посредством преобразования "предпоследнего" релиза в "последний".

Это сообщение отредактировал(а) ZeeLax - 23.10.2007, 18:08


--------------------
Utility is when you have one telephone, luxury is when you have two, opulence is when you have three — and paradise is when you have none.
— Doug Larson
PM MAIL WWW ICQ Skype Jabber   Вверх
JackYF
Дата 22.9.2007, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 1
Всего: 162



Отличная статья! Про apt-proxy я слышал раньше, но и тут было полезно, про jidgo услышал впервые.

Блин, где тут можно + за статью поставить?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
powerfox
Дата 23.9.2007, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 97



Очень интересно. +1!

Цитата(ZeeLax @  22.9.2007,  13:35 Найти цитируемый пост)
уменьшается нагрузка на серверы Debian

Особенно за это. Настоящий линуксоид всегда думает о других!


--------------------
user posted image
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Linux/UNIX: Администрирование"
ZeeLax
Imple
nerezus
Этот форум предназначен для решения вопросов по администрации *n?x-систем, в частности по настройке сложных сетей и обслуживанию серверного оборудования.

  • Вы должны соблюдать правила форума.
  • Помните: какой вопрос, такой и ответ. Прежде чем задать вопрос прочитайте вот эту статью на форуме CIT.
  • Оскорблять запрещается.
  • Религиозные войны в Религиозных войнах.
  • Общение "просто так" в Клубе юнуксоидов. В отличие от многих других разделов, здесь разрешается сдержанно оффтопить и юморить в тему.

За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу).


В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим.


Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Администрирование *NIX систем | Следующая тема »


 




[ Время генерации скрипта: 0.0666 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.