- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF135:deb
Материал из Linuxformat.
- Локальный репозиторий
Содержание |
Сам себе зеркало
- Виталий Сороко расскажет, почему вам может захотеться создать локальный Debian-репозиторий, и покажет, как это сделать.
Репозиторий — это, как известно, вещь, присутствующая у большинства дистрибутивов Linux и представляющая собой коллекцию программ, заботливо собранных разработчиками в виде готовых для установки пакетов. Однако в некоторых случаях имеет смысл создать локальный репозиторий. Несмотря на технический прогресс, который привел к появлению высокоскоростного Интернета, скачивание пакетов из центрального репозитория или его зеркал не всегда является наилучшим решением. Если у вас всего один компьютер, то создание локального репозитория будет иметь следующие преимущества:
- Отпадает необходимость заново скачивать нужные для работы пакеты из Интернета после переустановки системы.
- Уменьшается зависимость от провайдера — вам будут не страшны «профилактические работы».
- Обеспечивается экономия интернет-трафика и пропускной способности канала, что приводит к увеличению скорости скачивания, а значит, и самого главного — вашего личного времени.
Техника и финансы
В принципе, при создании локального репозитория можно обойтись и одним компьютером, используемым в качестве рабочей станции, просто доустановив недостающие компоненты. Преимущества этого подхода очевидны: вам не нужно тратиться на покупку дополнительного оборудования (сервера и сетевых компонентов), внедрение и обслуживание, а также на дополнительный расход электроэнергии. Но недостатки у него также присутствуют – существенно снижается производительность «сервера»; и если при использовании репозитория только для собственных нужд это не слишком заметно, то в локальной сети в моменты пиковой нагрузки вы не сможете нормально работать за таким компьютером. Да и отказоустойчивость подобной системы довольно низкая, поскольку, сделав что-нибудь не так, вы рискуете вместе с системой потерять и репозиторий, что сводит на нет добрую половину преимуществ от его создания (см. выше). Поэтому мы пойдем по другому пути: выделим для хранения репозитория отдельный компьютер.
Чтобы создать локальный репозиторий у себя дома или в офисе, совершенно не обязательно покупать дорогостоящий сервер корпоративного уровня с несколькими процессорами и жесткими дисками, объединенными в RAID-массив. Будет вполне достаточно компьютера класса Pentium, с ОЗУ 128 МБ и сетевой картой на 100 Мбит. Однако необходимо иметь в виду, что на такой компьютер придется установить жесткий диск большого объема, так как одно только зеркало репозитория Ubuntu 9.04 (Jaunty) со всеми пакетами займёт около 60 ГБ, а вместе с Lucid Lynx может занять около 130–140 ГБ. Не все старые материнские платы могут корректно работать со внутренними жесткими дисками такого объема. Неплохим выходом в этом случае будет покупка совместимого с операционной системой контроллера USB 2.0 или FireWire и внешнего жесткого диска под этот порт. А если у вас уже есть внутренний жесткий диск нужного объема, можно просто докупить для него внешний бокс.
Кроме того, использование внешнего жесткого диска дает ряд дополнительных преимуществ: при необходимости можно будет закачивать пакеты для зеркала с другого компьютера; упрощается создание резервных копий и замена сервера или жесткого диска в случае поломки. Лично я использую в качестве сервера компьютер со следующей конфигурацией (рис. 1): процессор Celeron-700, ОЗУ 192 МБ, гигабитная сетевая карта, noname-контроллер USB на чипе VIA VT6212L, встроенная видеокарта на 8 МБ, внутренний жесткий диск на 2,1 ГБ, внешний LaCie на 500 ГБ (основной) и Samsung STORY STATION 1 ТБ (резервный). Такой сервер вместе с внешним жестким диском и монитором обошелся мне примерно в $100.
Однако этот путь стоит повторять только при недостатке денежных средств, так как сейчас в продаже появились неттопы на базе Intel Atom. Компьютер, использующий двухъядерный чип Atom 330 или D510, почти бесшумен и, при том, что быстрее в несколько раз, потребляет примерно на 50 % меньше электроэнергии. В общем, неттопы, на мой взгляд, для наших целей подходят как нельзя лучше – особенно если учесть, что цена таких устройств обычно менее $300. Еще один возможный вариант – «компьютеры-вилки», вроде SheevaPlug/GuruPlug (LXF126–127): с доставкой в Россию они обойдутся примерно в $ 150–$200, жесткий диск придется докупить дополнительно. Ну, а если вы собираетесь использовать репозиторий для большого количества компьютеров (свыше 100), имеет смысл задуматься о покупке начального однопроцессорного сервера на базе Intel Xeon, который обычно стоит $ 800–1200, или, в крайнем случае, обычного компьютера с двухъядерным или четырехъядерным процессором. В последнем случае важно правильно выбрать корпус – лучше всего отдать предпочтение моделям, у которых внутри имеется большое количество отсеков 3,5 дюйма и блок питания мощностью не менее 450 Вт, так как это поможет избежать проблем в дальнейшем, а также позволит с легкостью модернизировать этот компьютер на случай, если вы соберетесь использовать его для других задач, вроде хранения файлов (в роли файл-сервера). Такие модели корпусов выпускают многие производители, например, Modecom (рис. 2).
Программная начинка
В первую очередь вам, конечно, понадобится операционная система. Я использую для этих целей Ubuntu Server 9.04. Подошел бы и любой другой дистрибутив на базе Debian (раз уж мы создаем репозиторий для этого семейства); для Fedora/Red Hat рекомендуем CentOS; для SUSE – openSUSE, и так далее. Разумеется, в случае систем, отличных от Debian, инструменты также потребуются другие; но это тема для отдельной статьи. Далее, в зависимости от целей создания репозитория, вам понадобятся утилиты apt-move (предназначена для создания частичного репозитория из уже скачанных пакетов) или apt-mirror (для создания полного зеркала репозитория). В последнем случае можно также воспользоваться утилитой debmirror, которая в целом по функциям аналогична apt-mirror, но в отличие от последней не требует редактирования конфигурационного файла – все необходимые параметры задаются прямо из командной строки. В общем, как и всегда, мир свободного ПО полон альтернатив, так что выбирайте то, что вам удобнее.
Первым из инструментов мы рассмотрим утилиту apt-move. Она предназначена для извлечения из кэша уже установленных пакетов и последующего создания репозитория на их основе. Это полезно в том случае, если вы хотите сохранить уже скачанные и установленные пакеты перед переустановкой системы. Устанавливается apt-move с помощью команды sudo apt-get install apt-move. Для настройки apt-move необходимо отредактировать конфигурационный файл, который находится по адресу /etc/apt-move.conf. Для этого можно воспользоваться консольным текстовым редактором Nano, введя команду sudo nano /etc/apt-move.conf. После установки этот файл уже содержит параметры, поэтому от вас, вероятно, потребуется лишь задать нужный путь хранения репозитория (переменная LOCALDIR) и изменить другие настройки по умолчанию. Для большей наглядности приведем листинг файла apt-move.conf:
APTSITES=”/all/” LOCALDIR=/media/LaCie/ubuntu DIST=stable PKGTYPE=both FILECACHE=/var/cache/apt/archives LISTSTATE=/var/lib/apt/lists DELETE=no MAXDELETE=20 COPYONLY=yes PKGCOMP=gzip CONTENTS=yes GPGKEY=
Как видите, параметров не так уж и много, поэтому вкратце рассмотрим большую часть из них.
- APTSITES Отбирает сайты из /etc/apt/sources.list, пакеты с которых должны попасть в локальный репозиторий (по умолчанию – все сайты).
- PKGTYPE Тип пакетов (binary или source; по умолчанию переносятся оба типа).
- FILECACHE Путь к кэшу apt.
- LISTCACHE Путь к списку и описанию пакетов, находящихся в кэше apt.
- DELETE Указывает на необходимость очистки репозитория от ставших ненужными пакетов.
- COPYONLY Определяет, будет ли производиться очистка локального кэша после переноса пакетов в локальный репозиторий.
- CONTENTS Указывает на необходимость создания архивов со списком содержимого подразделов локального репо-зитория.
Подробнее об остальных параметрах вы можете узнать, прочитав страницу руководства по данной утилите, набрав в консоли команду man apt-move.
Зеркалирование
В отличие от вышеописанного способа, создание локального «зеркала» на базе центрального репозитория позволит вам удовлетворить потребности неограниченного числа клиентских компьютеров, что особенно полезно в корпоративной среде, а также если у вас большая семья и у каждого есть компьютер с установленным Ubuntu или Debian Linux. В общем случае, создание локального репозитория на базе центрального осуществляется по следующему алгоритму:
- Выбор утилиты для зеркалирования (apt-mirror или debmirror).
- Выбор сервера, содержащего базовый репозиторий.
- Выбор архитектуры (i386, amd64 или обе).
- Выбор нужных для зеркалирования разделов репозитория (main, multiverse, universe и т. д.).
- Выбор дополнительных параметров.
- Выбор пути для хранения репозитория.
Чтобы вы не запутались, я сразу оговорю основные параметры создаваемого далее локального репозитория (на примере утилит apt-mirror и debmirror). Итак, мы будем создавать локальный репозиторий для Ubuntu 10.04 с архитектурой i386, содержащий подразделы main, multiverse, universe и restricted, а также архивы со списком содержимого этих подразделов. В качестве базового репозитория у меня будет выступать репозиторий, находящийся в интернете по адресу http://ftp.byfly.by (этот неофициальный репозиторий находится на сервере моего интернет-провайдера – вы, конечно, возьмете что-то свое). Создаваемый локальный репозиторий будет хранится на внешнем жестком диске LaCie, и путь для хранения будет /media/LaCie/ubuntu/. С целью экономии дискового пространства пакеты, содержащие исходный код, не загружаются, а в конце каждого обновления соответствующие утилиты проведут очистку от ненужного (устаревшего) содержимого.
Для установки debmirror наберите sudo apt-get install debmirror, а запуск с основными параметрами имеет следующий вид:
sudo debmirror --nosource --passive --host=ftp.byfly.by --root=ubuntu/ --method=http --progress --dist=lucid --section =main,restricted,multiverse,universe --arch=i386 /media/LaCie/ ubuntu/ --getcontents --ignore-release-gpg
Поясним назначение основных опций (параметров) debmirror.
- --nosource Не закачивать пакеты с исходным кодом (экономит место на диске).
- --passive Пассивный режим скачивания.
- --host URL репозитория.
- --root Путь к репозиторию на сайте (подкаталог, содержащий репозиторий).
- --method Метод скачивания (http, ftp, hftp, rsync).
- --progress Отображение состояния скачивания.
- --dist Версия дистрибутива ОС (jaunty, karmic, lucid, …).
- --section Подраздел репозитория с пакетами (main, multiverse, universe, …).
- --arch Архитектура вашего компьютера (i386, amd64).
- --getcontents Сохранять архивы с содержимым (в некоторых случаях необходимо для совместимости).
- --ignore-release-gpg Игнорировать отсутствие цифровой подписи (полезно при скачивании с некоторых интернет-зеркал официального репозитория, хотя и менее безопасно).
- --cleanup Принудительная очистка каталогов репозитория от неизвестного содержимого (неизвестных пакетов) – в отличие от очистки по умолчанию, производится в любом случае.
О других параметрах вы можете узнать из справки, введя команду man debmirror; ну, а мы перейдем к рассмотрению аналога debmirror – утилите apt-mirror. В целом, использование данной утилиты аналогично рассмотренной выше apt-move; разница только в местонахождении (/etc/apt/mirror.list) и содержимом конфигурационного файла. Устанавливается apt-mirror стандартной командой sudo apt-get install apt-mirror. Для редактирования конфигурационного файла, как и в предыдущем случае, воспользуемся текстовым редактором Nano (sudo nano /etc/apt/mirror.list).
Вам потребуется задать нужный путь хранения репозитория (переменная set base_path) и web-адрес зеркала, а также дополнительные параметры. Для достижения результата, аналогичного полученному выше с помощью утилиты debmirror, конфигурационный apt-mirror файл должен выглядеть следующим образом:
set base_path /media/LaCie set mirror_path $base_path/ubuntu set skel_path $base_path/skel set var_path $base_path/var set cleanscript $var_path/clean.sh set defaultarch i386 set nthreads 1 set _tilde 0 deb http://ftp.byfly.by/ubuntu lucid main restricted universe multiverse
Обратите внимание на то, что apt-mirror, в отличие от утилиты debmirror, не осуществляет автоматическую очистку репозитория после окончания процесса скачивания. Вместо этого вам придется вручную запустить скрипт clean.sh. О его местонахождении и синтаксисе команды для запуска apt-mirror непременно сообщит перед окончанием своей работы. Кроме того, переменная nthreads позволяет задать количество потоков для скачивания, что в некоторых случаях очень полезно и позволяет избежать проблем, а также оптимизировать скорость загрузки и нагрузку на интернет-соединение. И еще одно важное отличие пакета debmirror от apt-mirror – первый обычно сохраняет репозиторий в строго определенном месте, ничегоне добавляя при этом к указанному пути; apt-mirror же скорее всего добавит имя сайта, с которого был скачан репозиторий. Я неспроста сейчас отметил эту деталь. Она будет очень важна на нашем следующем этапе – предоставлении доступа к созданному вами локальному репозиторию по сети.
Доступ по сети
Через некоторое время работы, процесс скачивания пакетов и формирования структуры локального репозитория будет завершен, и утилита debmirror или apt-mirror, как я надеюсь, сообщит о его успешном создании. После того как локальный репозиторий будет создан, вам необходимо будет предоставить к нему доступ – как системе с вашего компьютера, так и всем остальным. Наилучшим способом достичь этого, на мой взгляд, является установка и использование web-сервера Apache, так как с его помощью проще всего организовать доступ к репозиторию и распределить нагрузку на сервер и сетевой канал. Естественно, первым делом его нужно установить, командой sudo apt-get install apache2. Затем необходимо создать Alias для каталога, в котором содержится локальный репозиторий, и разрешить его просмотр. Для этого необходимо открыть (можно опять с помощью текстового редактора Nano) конфигурационный файл, находящийся в /etc/apache2/sites-enabled/@000‑default, и добавить в него следующие строки:
Alias /ubuntu/ /media/LaCie/ubuntu/ftp.byfly.by/ubuntu/ <Directory “/media/LaCie/ubuntu/ftp.byfly.by/ubuntu/”> AllowOverride None Options +MultiViews +Indexes Order allow, deny Allow from all </Directory>
Здесь /media/LaCie/ubuntu/ftp.byfly.by/ubuntu/ – путь к содержимому локального репозитория, который в вашем случае, скорее всего, будет называться иначе. Затем необходимо перезагрузить web-сервер командой
sudo /etc/init.d/apache2 restart
На всякий случай напомню, что для разрешения возможности просмотра содержимого в web-сервере Apache, целевой каталог должен иметь соответствующие права (как минимум, на просмотр и поиск). После этого можно проверить результат, введя в web-браузере (рис. 3) адрес репозитория, который состоит из IP или символьного адреса сервера и пути /ubuntu/. В моем случае это http://192.168.1.199/ubuntu/.
После этого, в случае успеха, можно смело настраивать менеджер пакетов на созданный локальный репозиторий. Для этого необходимо добавить его в список, находящийся в файле /etc/apt/sources.list. В принципе, это можно сделать с помощью графических инструментов, но наиболее простым и быстрым способом, на мой взгляд, все же является редактирование файла sources.list с помощью текстового редактора. В зависимости от используемой системы это может быть Gedit (Ubuntu) – sudo gedit /etc/apt/sources.list; Kate (Kubuntu) – sudo kate /etc/apt/sources.list; Mousepad (Xubuntu) – sudo mousepad /etc/apt/sources.list; Nano (Ubuntu Server и др.) – sudo nano /etc/apt/sources.list.
Поскольку весь смысл создания локального репозитория сводится к тому, чтобы клиентские машины не скачивали пакеты из центрального репозитория в Интернете, то от вас потребуется заменить URL нужного репозитория на адрес вашего сервера.
Так, в нашем случае после модификации соответствующие строки в файле /etc/apt/sources.list примут следующий вид:
deb http://192.168.1.199/ubuntu/ lucid main restricted deb http://192.168.1.199/ubuntu/ lucid universe deb http://192.168.1.199/ubuntu/ lucid multiverse
После этого необходимо обновить кэш apt с помощью команды sudo apt-get update либо используя менеджер пакетов. Ну и, на всякий случай, для надежности, можно проверить работу локального репозитория, установив оттуда что-нибудь через стандартный менеджер пакетов; например, в Ubuntu и Xubuntu таковым является Synaptic (рис. 4).
Пользуясь случаем, хочу напомнить, что будет совсем не лишним почаще обновлять локальный репозиторий и делать его резервные копии. На этом, пожалуй, и закончим – и удачи вам в работе со свободным программным обеспечением!