- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF119:DrBrown3
Материал из Linuxformat.
Содержание |
Отраженная слава
- Прокси-серверы и зеркала доставят репозитории Debian или Ubuntu поближе к дому и ускорят установку ПО.
Начать создание репозитория проще всего с превращения компьютера в прокси- сервер APT. Тут нам поможет пакет apt-proxy. Процитируем его man-страницу:
«Apt-proxy – это программа на Python, запускаемая как отдельный сервер через twistd; представляетсобой аккуратный интеллектуальный прокси-сервер с кэшированием для apt-get, взаимодействует с клиентами apt-get по протоколу HTTP и с сервером (серверами) по протоколам HTTP, FTP или rsync. По умолчанию Apt-proxy слушаетпорт 9999».
Вот как она работает. Клиентские компьютеры вашей сети используют репозитории с прокси- сервера, а не с «настоящих» серверов. В первый раз, когда у прокси- сервера запрашивается, скажем, пакет Banshee, он обращается к серверу, чтобы получить его. Затем он отдает пакет клиенту и кэширует локально. Когда несколько клиентов запрашивают один и тот же пакет, тот достается из кэша. Очевидно, что прокси- сервер с подобным кэшированием работает эффективно, если несколько клиентов устанавливают одни и те же пакеты – например, они все настроены на загрузку обновлений безопасности. По умолчанию apt-proxy создает свой кэш в каталоге /var/cache/aptproxy, хотя это можно изменить в его файле настройки.
Заставим его работать
Вот что я сделал, чтобы запустить apt-proxy на сервере Ubuntu 8.04:
- Установил пакет apt-proxy: sudo apt-get install apt-proxy
- Поправил файл конфигурации 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.
Создаем зеркало
Следующий шаг вверх по, так сказать, репозиторной лестнице – это зеркалирование существующих репозиториев. Разница между прокси- сервером и зеркалом в том, что первый хранит только ранее запрошенные локальные копии 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, которые я считаю самыми полезными:
- Обновление пакетных метаданных для всех репозиториев, перечисленных в sources.list. Это нужно делать периодически и, конечно, после редактирования файла sources.list: sudo apt-get update.
- Установка пакета foo и прочих пакетов, нужных для его работы: sudo apt-get install foo.
- Поиск в кэше метаданных акетов всего, что относится к астрономии: apt-cache search astronomy.
- Вывод метаданных для одного заданного пакета: apt-cache show celestia
Где узнать больше
- Информация по использованию apt-proxy имеется на сайте http://www.subvs.co.uk/apt-proxy_on_ubuntu или https://help.ubuntu.com/community/AptProxy.
- Чтобы узнать больше о зеркалировании, зайдите на http://www.howtoforge.com/local debian_ubuntu_mirror или http://popey.com/Creating_an_Ubuntu_repository_mirror_with_aptmirror.
- Процесс создания собственного репозитория хорошо описан на странице https://help.ubuntu.com/community/Repositories/Personal.
- Руководство по политике Debian (Debian Policy Manual) — интересное (пусть и слегка официальное) чтение. см. http://www.debian.org/doc/debian-policy.
И, конечно, можно также прочесть man-страницы apt-get, apt-cache, apt-proxy, apt-proxyimport, apt-mirror