|
Debian — это набор пакетов Debian, размещённых в специальном дереве каталогов, в которых также есть несколько дополнительных файлов с индексами и контрольными суммами пакетов. Если пользователь добавит репозиторий в свой /etc/apt/sources.list файл, то он сможет легко просматривать и устанавливать пакеты из репозитория, так как будто пакеты хранятся в Debian.
Сразу же предупреждаю, что на Debian переводчик изначально отсутствует. Репозиторий может быть доступен постоянно, а может и нет (например компакт-диск), хотя первый случай более распространён. Этот документ объясняет как работают репозитории Debian, как их создавать, и как их правильно добавлять в файл sources.list . ![]() Термины, использованные в этом документе дистрибутивы Есть три дистрибутива Debian: стабильный (stable), тестируемый (testing) и нестабильный (unstable). Индексные файлы Файлы Packages.gz и Sources.gz. Как работают репозитории Репозиторий состоит как минимум из одного каталога, в котором хранятся DEB пакеты и два специальных файла: Packages.gz для бинарных пакетов и Sources.gz для пакетов с исходными текстами. Если ваш репозиторий описан правильно в sources.list (об этом позже), то apt-get загрузит индексный файл Packages.gz для бинарных пакетов (ключевое слово deb) и файл Sources.gz для пакетов с исходными текстами (ключевое слово deb-src ). Packages.gz содержит название, версию, размер, краткое и полное описание и зависимости для каждого пакета, плюс некоторую дополнительную информацию, которая нам не интересна. Вся эта информация читается (и используется) менеджерами пакетов Debian, например dselect или aptitude. Sources.gz содержит название, версию и зависимости для сборки (пакеты, которые нужны для сборке программы) каждого пакета (плюс некоторую дополнительную информацию, которая нам опять не интересна). Эта информация используется apt-get source и подобными программами. Кроме этого может существовать необязательный файл Release , содержащий информацию о вашем репозитории, которая используется механизмом Фиксации, интересной вещи, но здесь это рассмотрено не будет. О фиксации вы можете прочитать в APT HOWTO. Таким образом, после настройки собственного репозитория, вы сможете получать список и устанавливать собственные пакеты вместе с пакетами из репозитория Debian; если вы обновите пакет в репозитории, то он обновится в системе когда пользователь запустит apt-get upgrade; кроме этого каждый пользователь сможет легко увидеть краткое описание и другую важную информацию о ваших пакетах. Кроме того, правильно созданные репозитории могут предложить различные пакеты для каждого поддерживаемого дистрибутива и для каждой (в данный момент одиннадцати) из поддерживаемых архитектур; apt автоматически загрузит правильный для машины пользователя пакет, пользователю не нужно обременять себя лишними знаниями обо всех этих архитектурах. Также можно сгрупировать собственные пакеты в компоненты, точно также как пакеты Debian подразделяются на main, non-free и contrib. Из-за этого, особенно если ваши программы могут работать на нескольких архитектурах, вы полюбите репозитории пакетов. Настройка репозитория Существует два типа репозиториев: сложные, где пользователям нужно указывать не только путь к репозиторию, но и дистрибутив и нужные компоненты (если есть выбор, apt автоматически загрузит файл с нужной архитектурой), и простые, где пользователю нужно указать только полный путь (и apt не нужно выяснять подходят ли пакеты в данном случае). Первый тип, естестенно сложнее в настройке, но легче в использовании, и им нужно пользоваться всегда при сложных и/или кросплатформенных репозиториях; второй проще в настройке, но подходит только для маленьких или одноархитектурных репозиториев. Хотя это и не совсем правильно, но я буду называть первые Автоматические репозитории , а вторые Обычные репозитории. Автоматические репозитории Структура каталогов автоматического репозитория с поддерживаемыми в Debian архитектурами и компонентами выглядит так: Пример 1. Стандартный репозиторий Debian (корневой каталог репозитория) +-dists | |-stable | |-main | | |-binary-alpha | | |-binary-arm | | |-binary-... | | +-source | |-contrib | | |-binary-alpha | | |-binary-arm | | |-binary-... | | +-source | +-non-free | |-binary-alpha | |-binary-arm | |-binary-... | +-source | |-testing | |-main | | |-binary-alpha | | |-binary-arm | | |-binary-... | | +-source | |-contrib | | |-binary-alpha | | |-binary-arm | | |-binary-... | | +-source | +-non-free | |-binary-alpha | |-binary-arm | |-binary-... | +-source | +-unstable |-main | |-binary-alpha | |-binary-arm | |-binary-... | +-source |-contrib | |-binary-alpha | |-binary-arm | |-binary-... | +-source +-non-free |-binary-alpha |-binary-arm |-binary-... +-source Свободные пакеты лежат в каталоге main; несвободные в non-free, и свободные, зависящие от несвободных в contrib. В настоящий момент в Debian поддерживается 11 архитектур; большинство каталогов для них здесь для краткости не показаны. В каждом каталоге binary-* содержится файл Packages.gz и необязательный файл Release ; в каждом каталоге source содержится файл Sources.gz и необязательный файл Release. Заметьте, что сами пакеты располагаются не в том же каталоге что и индексные файлы, так как индексные файлы содержат пути к каждому пакету; фактически пакеты могут располагаться где угодно в репозитории. Это делает возможным создание пулов. Вы можете создавать любое число дистрибутивов и компонент и называть их как угодно; то, что показано в примере просто используется в Debian. Вы можете, например, создать дистрибутивы current и beta (вместо стабильный (stable), тестируемый (testing) и нестабильный (unstable)), и компоненты foo, bar, baz и qux (вместо main, contrib и non-free). Хотя вы и можете использовать любые названия компонент, обычно лучше придерживаться стандартных названий Debian, так как их назначение уже понятно пользователям Debian. Обычные репозитории Обычные репозитории состоят из корневого каталога и нескольких нужных вам подкаталогов. Так как пользователям нужно указывать путь к корневому каталогу репозитория и относительный путь между корневым и каталогом с индексным файлом, вы можете создавать каталоги как угодно (даже положить всё в один корневой каталог; просто относительный путь в этом случае будет «/»). Пример 2. Обычный репозиторий с двумя подкаталогами (корневой каталог репозитория) |-binary +-source Создание индексных файлов dpkg-scanpackages создаёт файл Packages , а dpkg-scansources файл Sources . Результат обеих программ направляется в stdout (стандартный выходной поток); таким образом, для сжатия файлов вы можете использовать цепочку команд: dpkg-scanpackages аргументы | gzip -9c > Packages.gz. Данные программы работают схожим образом; им передаётся два аргумента (на самом деле есть и другие, но они здесь не показаны; вы можете прочитать о них в страницах руководства); первым параметром указывается каталог с пакетами, а вторым файл override. Для простых репозиториев файл override не нужен, но всё равно этот аргумент является обязательным, поэтому мы просто передаём /dev/null. dpkg-scanpackages сканирует .deb пакеты; dpkg-scansources сканирует .dsc файлы. Необходимо располагать файлы .orig.gz, .diff.gz и .dsc вместе. Файлы .changes необязательны. Предположим, мы имеем обычный репозиторий, описанный в Пример 2, «Обычный репозиторий с двумя подкаталогами». Чтобы создать для него два индексных файла нужно ввести:
Если у вас сложный репозиторий, подобный Пример 1, «Стандартный репозиторий Debian», то вам придётся писать несколько сценариев для автоматизации процесса. Также, вы можете воспользоваться параметром pathprefix для упрощения синтаксиса; читателю самому предлагается проделать это в качестве упражнения. (Это описано в страницах руководства). Создание файлов Release Если вы хотите позволить пользователям вашего репозитория использовать механизм Фиксации , то нужно создать файл Release в каждом каталоге, где есть индексный файл. (Подробные сведения о фиксации изложены в APT HOWTO). Файлы Release являются простыми маленькими текстовыми файлами следующего вида: Archive: архив Component: компонент Origin: название вашей организации Label: Debian репозиторий моей организации Architecture: архитектура Archive Название дистрибутива Debian, к которому относятся пакеты в этом каталоге (или для которого предназначены), например стабильный (stable), тестируемый (testing) или нестабильный (unstable). Component Компонент, к которому относятся пакеты в каталоге, например main, non-free, или contrib. Origin Имя автора пакетов. Label Любая информация относящаяся к пакетам или к репозиторию. Дайте волю воображению. Architecture Архитектура машин, для которых собирались пакеты этого каталога, например i386, sparc или source. Очень важно указать правильные Archive и Architecture , так как они используются для фиксации. Остальные поля менее важны. Создание пулов При использовании автоматических репозиториев раскидывание пакетов по разным каталогам быстро приводит к неприятностям. Это также влечёт за собой напрасные траты места и пропускной способности сети, так как многие пакеты (например пакеты с документацией) относятся сразу ко всем архитектурам. В таких случаях возможным решением является пул. Пул — это дополнительный каталог внутри репозитория, содержащий все пакеты (двоичные пакеты для всех архитектур, дистрибутивов, компонент и все пакеты с исходными текстами). В совокупности с правильной комбинацией файлов override (которые не описаны в этом документе) и с помощью сценариев многих проблем удаётся избежать. Отличным примером репозитория с пулом является сам репозиторий Debian. Пулы полезны только для больших репозиториев; я пока ни одного не сделал и не думаю, что это понадобится в ближайшем будущем, и поэтому я не объясняю как его создавать. Если вы думаете, что такой раздел должен быть добавлен, напишите его и свяжитесь со мной. Инструменты Существуют различные инструменты для автоматизации и упрощения создания архивов Debian. Здесь описаны наболее важные из них. apt-ftparchive — используется для перемещения набора файлов пакетов Debian в надлежащую архивную иерархию, соответствующую официальному архиву Debian. Данная программа является частью пакета apt-utils. apt-move — используется для перемещения набора файлов пакетов Debian в надлежащую архивную иерархию, соответствующую официальному архиву Debian. Использование репозитория Использовать репозиторий очень просто, как именно зависит от типа созданного репозитория: бинарного или с исходными текстами, автоматического или обычного. Подключение каждого репозитория занимает одну строку в sources.list; для репозитория с бинарными пакетами используется команда deb , а для репозитория с исходными текстами команда deb-src . Каждая строка имеет следующий синтаксис: deb|deb-src uri дистрибутив [компонент1] [компонент2] [...] Файлы uri — это URI (унифицированный идентификатор ресурса), указывающий на корень репозитория, например, ftp://ftp.yoursite.com/debian, http://yoursite.com/debian или, для файлов на вашем жёстком диске, file::///home/joe/my-debian-repository. Последняя косая черта является необязательной. Для автоматических репозиториев вы должны указать дистрибутив и один или более компонент; дистрибутив не должен заканчиваться символом косой черты. Пример 3. Два автоматических репозитория из моего sources.list
Две показанные строки указывают на автоматический бинарный и репозиторий с исходными текстами имеющим корень ftp://sunsite.cnlab-switch.ch/mirror/debian/, дистрибутив нестабильный (unstable) и компоненты main, contrib и non-free. Если репозиторий не автоматический, то параметр дистрибутив содержит относительный путь к индексным файлам и этот путь должен заканчиваться символом косой черты, а компоненты указываться не должны. Пример 4. Два обычных репозитория из моего sources.list
Первая строка подключает бинарный репозиторий /home/aisotton/rep-exact/binary , хранящийся на моей локальной машине; вторая строка подключает репозиторий с исходными текстами /home/aisotton/rep-exact/source. |
|
![]() |
Дизайн и программирование - Balandin Ivan |
![]() |
© 2009-2011 Юникс-Про.ру
|