Журнал LinuxFormat - перейти на главную

LXF119:DrBrown3

Материал из Linuxformat
Перейти к: навигация, поиск

Содержание

Отраженная слава

Прокси-серверы и зеркала доставят репозитории Debian или Ubuntu поближе к дому и ускорят установку ПО.

Начать создание репозитория проще всего с превращения компьютера в прокси- сервер APT. Тут нам поможет пакет apt-proxy. Процитируем его man-страницу:

«Apt-proxy – это программа на Python, запускаемая как отдельный сервер через twistd; представляетсобой аккуратный интеллектуальный прокси-сервер с кэшированием для apt-get, взаимодействует с клиентами apt-get по протоколу HTTP и с сервером (серверами) по протоколам HTTP, FTP или rsync. По умолчанию Apt-proxy слушаетпорт 9999».

LXF119 46 1.jpgВ первый раз Apt-proxy получает Deb- файл с сервера, а затем достает его из кэша.

Вот как она работает. Клиентские компьютеры вашей сети используют репозитории с прокси- сервера, а не с «настоящих» серверов. В первый раз, когда у прокси- сервера запрашивается, скажем, пакет Banshee, он обращается к серверу, чтобы получить его. Затем он отдает пакет клиенту и кэширует локально. Когда несколько клиентов запрашивают один и тот же пакет, тот достается из кэша. Очевидно, что прокси- сервер с подобным кэшированием работает эффективно, если несколько клиентов устанавливают одни и те же пакеты – например, они все настроены на загрузку обновлений безопасности. По умолчанию apt-proxy создает свой кэш в каталоге /var/cache/aptproxy, хотя это можно изменить в его файле настройки.

Заставим его работать

Вот что я сделал, чтобы запустить apt-proxy на сервере Ubuntu 8.04:

  1. Установил пакет apt-proxy: sudo apt-get install apt-proxy
  2. Поправил файл конфигурации apt-proxy (/etc/apt-proxy/aptproxy-v2.conf). Главное здесь – секции, содержащие информацию о серверах.

Я исправил только одну строку – сразу под заголовком секции [ubuntu] я изменил значение backends на (территориально) ближайший сервер:

backends = http://ru.archive.ubuntu.com/ubuntu

Все прекрасно работало бы и без этого изменения, но предполагается, что серверы, которые находятся физически ближе к вам, дадут лучшую производительность. Я отнюдь не уверен, что это так!

В файле конфигурации можно поправить и еще кое-что: например, номер порта, который будет слушать сервер, и каталог, в котором будет храниться кэш apt-proxy, но я оставил все это без изменений.

3 Перезапустил apt-proxy:
$ sudo /etc/init.d/apt-proxy restart

Это для сервера. Далее мне нужно было убедиться, что клиентские компьютеры используют новый прокси вместо того, чтобы обращаться напрямую к «настоящим» серверам. Я отредактировал файл /etc/apt/sources.list, изменив каждую ссылку на ru.archive.ubuntu.com на 192.168.1.65:9999. Здесь 192.168.1.65 – IP-адрес сервера aptproxy, а 9999 – номер порта, который он слушает.

После этого на клиентском компьютере нужно выполнить команду

$ sudo apt-get update

Она обновит информацию о пакетах. В порядке побочного эффекта, прокси загрузит и закэширует эту информацию.

Работает? Ну, на вид все почти так же, как и прежде. Для проверки я установил пакет bind9 на клиенте:

$ sudo apt-get install bind9

Вывод apt-get включает строку

Get: 1 http://192.168.1.65 hardy-updates/main bind 9 ...

… которая показывает, что прокси-сервер и вправду используется, и если посмотреть в журнальный файл apt-proxy на сервере, то вы найдете там (среди прочего!) нечто вроде

[CacheEntry] start download:pool/main/b/bind9/bind9....deb
[CacheEntry] file_sent:/var/cache/apt-proxy/ubuntu/pool/main/b/bind9/bind9....deb

Наконец, заглянув в каталог /var/cache/apt-proxy/ubuntu/pool/main, вы увидите, что Deb-файл bind9 теперь закэширован. Фактически apt-proxy начинает создавать структуру каталогов, которая соответствует таковой на настоящем сервере. При повторной установке bind9 на другом клиенте этот файл будет взят из кэша.

Если для инсталляции пакетов с сервера вы воспользуетесь непосредственно APT, то обнаружите, что все установленные Deb- файлы кэшируются в каталоге /var/cache/apt/archives. Их можно импортировать в кэш apt-proxy с помощью скрипта aptproxyimport, который также входит в пакет apt-proxy.

Создаем зеркало

LXF119 46 1.jpg Зеркалирование — потенциально затратная операция. Она создает локальную копию целого репозитория из сети.

Следующий шаг вверх по, так сказать, репозиторной лестнице – это зеркалирование существующих репозиториев. Разница между прокси- сервером и зеркалом в том, что первый хранит только ранее запрошенные локальные копии Deb-файлов, а второе активно загружает содержимое, предоставляя полную локальную копию заданного набора репозиториев.

Чувствую, здесь необходимо предупреждение из серии «не делайте этого дома, ребята». Зеркало требует несколько десятков гигабайт дискового пространства и большой нагрузки на сеть во время заполнения – и если у вас нет достаточного количества клиентов, которым оно пригодится, создавать его незачем!

Для создания зеркала в Debian сперва установите пакет aptmirror. В файле конфигурации /etc/apt/mirror.list определены репозитории, которые нужно зеркалировать, и их нужно нацелить на серверы, подходящие для страны, где вы живете. Я изменил все вхождения archive.ubuntu.com на ru.archive.ubuntu.com – типичная запись выглядит так:

deb http://ru.archive.ubuntu.com/ubuntu hardy main restricted universe multiverse

Я также решил не зеркалировать архивы с исходным кодом, поэтому закомментировал строки, начинающиеся с deb-src. Вам также стоит настроить параметр nthreads. Он определяет активность работы apt-mirror. Я установил его в 2. Теперь можно начать заполнять новое зеркало:

$ sudo apt-mirror
Downloading 33 index files using 2 threads...
Begin time: Sun Jan 18 09:51:25 2009 [2]... [1]... [0]...
End time: Sun Jan 18 09:52:03 2009
Proceed indexes: [PPP]
25.4 GiB will be downloaded into archive.
Downloading 28204 archive files using 2 threads...
Begin time: Sun Jan 18 09:52:08 2009 [2]...

Новое зеркало начнет загружаться в каталог /var/spool/apt-mirror/mirror/ru.archive.ubuntu.com/ubuntu. Разумеется, это займет некоторое время…

После заполнения зеркала нужно открыть к нему доступ для клиентов. Один из вариантов – экспортировать зеркало с сервера по NFS. Этот подход будет работать хорошо, если зеркало и клиенты находятся в одной и той же локальной сети. Альтернатива – установить web-сервер, подобный Apache, и обслуживать репозиторий через него.

Я решил пойти по пути NFS. Если сервер NFS установлен, можно экспортировать зеркало, добавив в файл /etc/exports на сервере примерно такую строку:

/var/spool/apt-mirror *(ro)

Затем выполните команду

$ sudo exportfs -a

На клиентах создайте подходящую точку монтирования (я выбрал /repos) и смонтируйте зеркало:

$ sudo mkdir /repos
$ sudo mount 192.168.1.65:/var/spool/apt-mirror /repos

Теперь нужно велеть клиентам использовать зеркало вместо внешних серверов. На клиентах отредактируйте файл /etc/apt/sources.list, заменив все строки, ссылающиеся на внешние серверы. Например, строку типа:

deb http://ru.archive.ubuntu.com/ubuntu hardy universe

нужно заменить на

deb file:/repos/mirror/ru.archive.ubuntu.com/ubuntu hardy universe

Проделайте это со всеми репозиториями, которые зеркалировали. Теперь обновите информацию о пакетах на клиентах:

$ sudo apt-get update

и все должно быть готово!

Развернем свой репозиторий

Если вы разработали несколько пакетов и хотели бы распространить их внутри предприятия, то нетрудно создать личный репозиторий и заполнить его собственными Deb-файлами. Вам потребуется установленный web-сервер, в корне (DocumentRoot) которого нужно будет создать структуру каталогов, в основном похожую на один из главных репозиториев Ubuntu, и скопировать туда свои Deb-файлы. После этого с помощью утилиты dpkg-scanpackages можно создать файл Packages.gz. Команда выдает в стандартный поток вывода несжатый файл, поэтому его нужно перенаправить в gzip или bzip2 и записать вывод в подходящий файл.

Ну, место закончилось, и я должен извиниться перед энтузиастами Debian, которые нашептывают мне на ухо: «Расскажи им о возможности X», где X – произвольное.

APT для нетерпеливых

Вот четыре команды APT, которые я считаю самыми полезными:

  1. Обновление пакетных метаданных для всех репозиториев, перечисленных в sources.list. Это нужно делать периодически и, конечно, после редактирования файла sources.list: sudo apt-get update.
  2. Установка пакета foo и прочих пакетов, нужных для его работы: sudo apt-get install foo.
  3. Поиск в кэше метаданных акетов всего, что относится к астрономии: apt-cache search astronomy.
  4. Вывод метаданных для одного заданного пакета: apt-cache show celestia

Где узнать больше

И, конечно, можно также прочесть man-страницы apt-get, apt-cache, apt-proxy, apt-proxyimport, apt-mirror

Персональные инструменты
купить
подписаться
Яндекс.Метрика