HOWTO: репозиторий Debian

Aaron Isotton

Аннотация

В этом документе объясняется что такое репозиторий Debian и как его можно сделать самому.


Содержание

Введение
Авторские права и лицензия
Обратная связь
Термины, использованные в этом документе
Как работают репозитории
Настройка репозитория
Автоматические репозитории
Обычные репозитории
Создание индексных файлов
Создание файлов Release
Создание пулов
Инструменты
Использование репозитория
Смотрите также

Введение

Репозиторий Debian — это набор пакетов Debian, размещённых в специальном дереве каталогов, в которых также есть несколько дополнительных файлов с индексами и контрольными суммами пакетов. Если пользователь добавит репозиторий в свой /etc/apt/sources.list файл, то он сможет легко просматривать и устанавливать пакеты из репозитория, так как будто пакеты хранятся в Debian.

Репозиторий может быть доступен постоянно, а может и нет (например компакт-диск), хотя первый случай более распространён.

Этот документ объясняет как работают репозитории Debian, как их создавать, и как их правильно добавлять в файл sources.list .

Оригинал этого документа можно найти http://www.isotton.com/debian/docs/repository-howto/.

Авторские права и лицензия

Авторские права на этот документ, Debian Repository HOWTO, принадлежат (c) 2002-2003 Aaron Isotton. Разрешается копировать распространять и/или изменять этот документ согласно условиям GNU Free Documentation License, версия 1.1 или более поздней, опубликованной Фондом Свободного ПО (FSF); with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts.

Обратная связь

Присылайте ваши добавления, комментарии и критику по электронной почте: .

Термины, использованные в этом документе

дистрибутивы

Есть три дистрибутива 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, «Обычный репозиторий с двумя подкаталогами». Чтобы создать для него два индексных файла нужно ввести:

$ cd my-repository
$ dpkg-scanpackages binary /dev/null | gzip -9c > binary/Packages.gz
$ dpkg-scansources source /dev/null | gzip -9c > source/Sources.gz

Если у вас сложный репозиторий, подобный Пример 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

deb ftp://sunsite.cnlab-switch.ch/mirror/debian/ unstable main contrib non-free
deb-src ftp://sunsite.cnlab-switch.ch/mirror/debian/ unstable main contrib non-free

Две показанные строки указывают на автоматический бинарный и репозиторий с исходными текстами имеющим корень ftp://sunsite.cnlab-switch.ch/mirror/debian/, дистрибутив нестабильный (unstable) и компоненты main, contrib и non-free.

Если репозиторий не автоматический, то параметр дистрибутив содержит относительный путь к индексным файлам и этот путь должен заканчиваться символом косой черты, а компоненты указываться не должны.

Пример 4. Два обычных репозитория из моего sources.list

deb file:///home/aisotton/rep-exact binary/
deb-src file:///home/aisotton/rep-exact source/

Первая строка подключает бинарный репозиторий /home/aisotton/rep-exact/binary , хранящийся на моей локальной машине; вторая строка подключает репозиторий с исходными текстами /home/aisotton/rep-exact/source.

Смотрите также

  • Файлы apt-ftparchive (документацию к пакету).

  • Файлы apt-get (документацию к пакету) и документацию на apt.

  • Файлы apt-move (документацию к пакету).

  • http://www.apt-get.org/ (много примеров существующих репозиториев)

  • Файлы APT HOWTO.

  • Файлы dpkg-scanpackages (документацию к пакету).

  • Файлы dpkg-scansources (документацию к пакету).

  • Файлы sources.list(5) (страницу руководства).