[l10n-russian CVS] repository-howto repository-howto.ru.xml,NONE,1.1
Yuri Kozlov
debian-l10n-russian@lists.debian.org
Sun, 12 Jun 2005 04:41:55 +0000
Update of /cvsroot/l10n-russian/repository-howto
In directory haydn:/tmp/cvs-serv20707/repository-howto
Added Files:
repository-howto.ru.xml
Log Message:
initial cvs version
--- NEW FILE: repository-howto.ru.xml ---
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://docbook.org/xml/4.2/docbookx.dtd">
<article>
<articleinfo>
<title>HOWTO: репозиторий Debian</title>
<author>
<firstname>Aaron</firstname>
<surname>Isotton</surname>
<affiliation>
<address><email>aaron@isotton.com</email></address>
</affiliation>
</author>
<abstract>
<para>В этом документе объясняется что такое репозиторий Debian и как его можно сделать самому.</para>
</abstract>
</articleinfo>
<section id="intro">
<title>Введение</title>
<para>Репозиторий Debian — это набор пакетов Debian, размещённых в специальном дереве каталогов, в которых также есть несколько дополнительных файлов с индексами и контрольными суммами пакетов. Если пользователь добавит репозиторий в свой
<filename>/etc/apt/sources.list</filename> файл, то он сможет легко просматривать и устанавливать пакеты из репозитория, так как будто пакеты хранятся в Debian.</para>
<para>Репозиторий может быть доступен постоянно, а может и нет (например компакт-диск), хотя первый случай более распространён.</para>
<para>Этот документ объясняет как работают репозитории Debian, как их создавать, и как их правильно добавлять в файл
<filename>sources.list</filename> .</para>
<para>Оригинал этого документа можно найти <ulink
url="http://www.isotton.com/debian/docs/repository-howto/"/>.</para>
<section id="copyright">
<title>Авторские права и лицензия</title>
<para>Авторские права на этот документ, <emphasis>Debian Repository HOWTO</emphasis>, принадлежат (c) 2002-2003
<emphasis>Aaron Isotton</emphasis>. Разрешается копировать распространять и/или изменять этот документ согласно условиям GNU Free Documentation License, версия 1.1 или более поздней, опубликованной Фондом Свободного ПО (FSF); with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts.</para>
</section> <!-- copyright -->
<section id="feedback">
<title>Обратная связь</title>
<para>
Присылайте ваши добавления, комментарии и критику по электронной почте: <email>aaron@isotton.com</email>.
</para>
</section> <!-- feedback -->
</section> <!-- intro -->
<section id="terms">
<title>Термины, использованные в этом документе</title>
<variablelist>
<varlistentry>
<term>дистрибутивы</term>
<listitem><para>Есть три дистрибутива Debian:
<emphasis>стабильный (stable)</emphasis>, <emphasis>тестируемый (testing)</emphasis>
и <emphasis>нестабильный (unstable)</emphasis>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>индексные файлы</term>
<listitem><para>Файлы <filename>Packages.gz</filename> и
<filename>Sources.gz</filename> .</para>
</listitem>
</varlistentry>
</variablelist>
</section>
<section id="how-it-works">
<title>Как работают репозитории</title>
<para>Репозиторий состоит как минимум из одного каталога, в котором хранятся DEB пакеты и два специальных файла:
<filename>Packages.gz</filename> для бинарных пакетов и
<filename>Sources.gz</filename> для пакетов с исходными текстами.</para>
<para>Если ваш репозиторий описан правильно в
<filename>sources.list</filename> (об этом позже), то
<command>apt-get</command> загрузит индексный файл
<filename>Packages.gz</filename> для бинарных пакетов (ключевое слово <literal>deb</literal> ) и файл
<filename>Sources.gz</filename> для пакетов с исходными текстами (ключевое слово <literal>deb-src</literal> ).</para>
<para><filename>Packages.gz</filename> содержит название, версию, размер, краткое и полное описание и зависимости для каждого пакета, плюс некоторую дополнительную информацию, которая нам не интересна. Вся эта информация читается (и используется) менеджерами пакетов Debian, например
<command>dselect</command> или
<command>aptitude</command>.</para>
<para><filename>Sources.gz</filename> содержит название, версию и зависимости для сборки (пакеты, которые нужны для сборке программы) каждого пакета (плюс некоторую дополнительную информацию, которая нам опять не интересна). Эта информация используется <command>apt-get source</command> и подобными программами.</para>
<para>Кроме этого может существовать необязательный файл <filename>Release</filename> , содержащий информацию о вашем репозитории, которая используется механизмом <emphasis>Фиксации</emphasis>, интересной вещи, но здесь это рассмотрено не будет. О фиксации вы можете прочитать в <ulink
url="http://www.debian.org/doc/manuals/apt-howto/">APT HOWTO</ulink>.</para>
<para>Таким образом, после настройки собственного репозитория, вы сможете получать список и устанавливать собственные пакеты вместе с пакетами из репозитория Debian; если вы обновите пакет в репозитории, то он обновится в системе когда пользователь запустит
<command>apt-get upgrade</command>; кроме этого каждый пользователь сможет легко увидеть краткое описание и другую важную информацию о ваших пакетах.</para>
<para>Кроме того, правильно созданные репозитории могут предложить различные пакеты для каждого поддерживаемого дистрибутива и для каждой (в данный момент одиннадцати) из поддерживаемых архитектур;
<literal>apt</literal> автоматически загрузит правильный для машины пользователя пакет, пользователю не нужно обременять себя лишними знаниями обо всех этих архитектурах. Также можно сгрупировать собственные пакеты в компоненты, точно также как пакеты Debian подразделяются на <literal>main</literal>, <literal>non-free</literal> и
<literal>contrib</literal>. Из-за этого, особенно если ваши программы могут работать на нескольких архитектурах, вы полюбите репозитории пакетов.</para>
</section> <!-- how-it-works -->
<section id="setting-up">
<title>Настройка репозитория</title>
<para>Существует два типа репозиториев: сложные, где пользователям нужно указывать не только путь к репозиторию, но и дистрибутив и нужные компоненты (если есть выбор, apt автоматически загрузит файл с нужной архитектурой), и простые, где пользователю нужно указать только полный путь (и apt не нужно выяснять подходят ли пакеты в данном случае). Первый тип, естестенно сложнее в настройке, но легче в использовании, и им нужно пользоваться всегда при сложных и/или кросплатформенных репозиториях; второй проще в настройке, но подходит только для маленьких или одноархитектурных репозиториев.</para>
<para>Хотя это и не совсем правильно, но я буду называть первые
<emphasis>Автоматические репозитории</emphasis> , а вторые
<emphasis>Обычные репозитории</emphasis>.</para>
<section>
<title>Автоматические репозитории</title>
<para>Структура каталогов автоматического репозитория с поддерживаемыми в Debian архитектурами и компонентами выглядит так:</para>
<example id="debian-repository-example">
<title>Стандартный репозиторий Debian</title>
<screen>(корневой каталог репозитория)
|
+-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</screen>
</example>
<para>Свободные пакеты лежат в каталоге <literal>main</literal>; несвободные в <literal>non-free</literal>, и свободные, зависящие от несвободных в
<literal>contrib</literal>. В настоящий момент в Debian поддерживается 11 архитектур; большинство каталогов для них здесь для краткости не показаны.
</para>
<para>В каждом каталоге <filename>binary-*</filename> содержится файл
<filename>Packages.gz</filename> и необязательный файл
<filename>Release</filename> ; в каждом каталоге
<filename>source</filename> содержится файл
<filename>Sources.gz</filename> и необязательный файл
<filename>Release</filename> . Заметьте, что
<emphasis>сами пакеты</emphasis> располагаются не в том же каталоге что и индексные файлы, так как индексные файлы содержат пути к каждому пакету; фактически пакеты могут располагаться
<emphasis>где угодно</emphasis> в репозитории. Это делает возможным создание <link
linkend="pools">пулов</link>.</para>
<para>Вы можете создавать любое число дистрибутивов и компонент и называть их как угодно; то, что показано в примере просто используется в Debian. Вы можете, например, создать дистрибутивы <literal>current</literal>
и <literal>beta</literal> (вместо
<literal>стабильный (stable)</literal>, <literal>тестируемый (testing)</literal> и
<literal>нестабильный (unstable)</literal>), и компоненты
<literal>foo</literal>, <literal>bar</literal>,
<literal>baz</literal> и <literal>qux</literal> (вместо
<literal>main</literal>, <literal>contrib</literal> и
<literal>non-free</literal>).</para>
<para>Хотя вы и можете использовать любые названия компонент, обычно лучше придерживаться стандартных названий Debian, так как их назначение уже понятно пользователям Debian.</para>
</section>
<section>
<title>Обычные репозитории</title>
<para>Обычные репозитории состоят из корневого каталога и нескольких нужных вам подкаталогов. Так как пользователям нужно указывать путь к корневому каталогу репозитория и относительный путь между корневым и каталогом с индексным файлом, вы можете создавать каталоги как угодно (даже положить всё в один корневой каталог; просто относительный путь в этом случае будет
<quote><filename>/</filename></quote>).</para>
<example id="trivial-example">
<title>Обычный репозиторий с двумя подкаталогами</title>
<screen>(корневой каталог репозитория)
|
|-binary
+-source</screen>
</example>
</section>
<section>
<title>Создание индексных файлов</title>
<para><command>dpkg-scanpackages</command> создаёт файл
<filename>Packages</filename> , а
<command>dpkg-scansources</command> файл
<filename>Sources</filename> .</para>
<para>Результат обеих программ направляется в stdout (стандартный выходной поток); таким образом, для сжатия файлов вы можете использовать цепочку команд:
<command>dpkg-scanpackages
<replaceable>аргументы</replaceable> | gzip -9c > Packages.gz</command>.</para>
<para>Данные программы работают схожим образом; им передаётся два аргумента (на самом деле есть и другие, но они здесь не показаны; вы можете прочитать о них в страницах руководства); первым параметром указывается каталог с пакетами, а вторым файл <emphasis>override</emphasis>. Для простых репозиториев файл override не нужен, но всё равно этот аргумент является обязательным, поэтому мы просто передаём
<literal>/dev/null</literal>.</para>
<para><command>dpkg-scanpackages</command> сканирует
<filename>.deb</filename> пакеты;
<command>dpkg-scansources</command> сканирует
<filename>.dsc</filename> файлы. Необходимо располагать файлы <filename>.orig.gz</filename>,
<filename>.diff.gz</filename> и <filename>.dsc</filename>
вместе. Файлы <filename>.changes</filename> необязательны.</para>
<para>Предположим, мы имеем обычный репозиторий, описанный в <xref linkend="trivial-example"/>. Чтобы создать для него два индексных файла нужно ввести:</para>
<screen>$ cd my-repository
$ dpkg-scanpackages binary /dev/null | gzip -9c > binary/Packages.gz
$ dpkg-scansources source /dev/null | gzip -9c > source/Sources.gz</screen>
<para>Если у вас сложный репозиторий, подобный <xref
linkend="debian-repository-example"/>, то вам придётся писать несколько сценариев для автоматизации процесса.</para>
<para>Также, вы можете воспользоваться параметром
<replaceable>pathprefix</replaceable> для упрощения синтаксиса; читателю самому предлагается проделать это в качестве упражнения. (Это описано в страницах руководства).</para>
</section>
<section id="release">
<!-- todo: Release should be between <filename> tags, but then
xmltex won't compile it -->
<title>Создание файлов Release</title>
<para>Если вы хотите позволить пользователям вашего репозитория использовать механизм
<emphasis>Фиксации</emphasis> , то нужно создать файл <filename>Release</filename> в каждом каталоге, где есть индексный файл. (Подробные сведения о фиксации изложены в <ulink
url="http://www.debian.org/doc/manuals/apt-howto/">APT HOWTO</ulink>).</para>
<para>Файлы <filename>Release</filename> являются простыми маленькими текстовыми файлами следующего вида:</para>
<screen>Archive: <replaceable>архив</replaceable>
Component: <replaceable>компонент</replaceable>
Origin: <replaceable>название вашей организации</replaceable>
Label: <replaceable>Debian репозиторий моей организации</replaceable>
Architecture: <replaceable>архитектура</replaceable></screen>
<variablelist>
<varlistentry>
<term><literal>Archive</literal></term>
<listitem>
<para>Название дистрибутива Debian, к которому относятся пакеты в этом каталоге (или для которого предназначены), например <literal>стабильный (stable)</literal>,
<literal>тестируемый (testing)</literal> или
<literal>нестабильный (unstable)</literal>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>Component</literal></term>
<listitem>
<para>Компонент, к которому относятся пакеты в каталоге, например <literal>main</literal>,
<literal>non-free</literal>, или
<literal>contrib</literal>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>Origin</literal></term>
<listitem>
<para>Имя автора пакетов.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>Label</literal></term>
<listitem>
<para>Любая информация относящаяся к пакетам или к репозиторию. Дайте волю воображению.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>Architecture</literal></term>
<listitem>
<para>Архитектура машин, для которых собирались пакеты этого каталога, например <literal>i386</literal>,
<literal>sparc</literal> или
<literal>source</literal>.</para>
</listitem>
</varlistentry>
</variablelist>
<para>Очень важно указать правильные <literal>Archive</literal> и
<literal>Architecture</literal> , так как они используются для фиксации. Остальные поля менее важны.</para>
</section>
<section id="pools">
<title>Создание пулов</title>
<para>При использовании автоматических репозиториев раскидывание пакетов по разным каталогам быстро приводит к неприятностям. Это также влечёт за собой напрасные траты места и пропускной способности сети, так как многие пакеты (например пакеты с документацией) относятся сразу ко всем архитектурам.</para>
<para>В таких случаях возможным решением является
<emphasis>пул</emphasis>. Пул — это дополнительный каталог внутри репозитория, содержащий <emphasis>все</emphasis>
пакеты (двоичные пакеты для всех архитектур, дистрибутивов, компонент и все пакеты с исходными текстами). В совокупности с правильной комбинацией файлов override (которые не описаны в этом документе) и с помощью сценариев многих проблем удаётся избежать. Отличным примером репозитория с пулом является сам репозиторий Debian.</para>
<para>Пулы полезны только для больших репозиториев; я пока ни одного не сделал и не думаю, что это понадобится в ближайшем будущем, и поэтому я не объясняю как его создавать. Если вы думаете, что такой раздел должен быть добавлен, напишите его и свяжитесь со мной.</para>
</section>
<section>
<title>Инструменты</title>
<para>Существуют различные инструменты для автоматизации и упрощения создания архивов Debian; здесь описаны наболее важные из них.</para>
<para><command>apt-ftparchive</command> — используется для перемещения набора файлов пакетов Debian в надлежащую архивную иерархию, соответствующую официальному архиву Debian. Данная программа является частью пакета <literal>apt-utils</literal> .</para>
<para><command>apt-move</command> — используется для перемещения набора файлов пакетов Debian в надлежащую архивную иерархию, соответствующую официальному архиву Debian.</para>
</section>
</section> <!-- setting-up -->
<section id="using-a-repository">
<title>Использование репозитория</title>
<para>Использовать репозиторий очень просто, как именно зависит от типа созданного репозитория: бинарного или с исходными текстами, автоматического или обычного.</para>
<para>Подключение каждого репозитория занимает одну строку в
<filename>sources.list</filename>; для репозитория с бинарными пакетами используется команда
<literal>deb</literal> , а для репозитория с исходными текстами команда
<literal>deb-src</literal> .</para>
<para>Каждая строка имеет следующий синтаксис:
<screen>deb|deb-src <replaceable>uri</replaceable> <replaceable>дистрибутив</replaceable> [<replaceable>компонент1</replaceable>] [<replaceable>компонент2</replaceable>] [...]</screen>
Файлы <replaceable>uri</replaceable> — это URI (унифицированный идентификатор ресурса), указывающий на корень репозитория, например,
<literal>ftp://ftp.yoursite.com/debian</literal>,
<literal>http://yoursite.com/debian</literal> или, для файлов на вашем жёстком диске,
<literal>file::///home/joe/my-debian-repository</literal>. Последняя косая черта является необязательной.</para>
<para>Для автоматических репозиториев вы должны указать дистрибутив и один или более компонент; дистрибутив не должен заканчиваться символом косой черты.</para>
<example>
<!-- todo: sources.list should be tagged as <filename>, but xmltex
doesn't support that -->
<title>Два автоматических репозитория из моего sources.list</title>
<screen>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</screen>
<para>Две показанные строки указывают на автоматический бинарный и репозиторий с исходными текстами имеющим корень
<literal>ftp://sunsite.cnlab-switch.ch/mirror/debian/</literal>, дистрибутив <literal>нестабильный (unstable)</literal> и компоненты
<literal>main</literal>, <literal>contrib</literal> и
<literal>non-free</literal>.</para>
</example>
<para>Если репозиторий не автоматический, то параметр
<emphasis>дистрибутив</emphasis> содержит относительный путь к индексным файлам и этот путь должен заканчиваться символом косой черты, а компоненты указываться не должны.</para>
<example>
<title>Два обычных репозитория из моего
<filename>sources.list</filename></title>
<screen>deb file:///home/aisotton/rep-exact binary/
deb-src file:///home/aisotton/rep-exact source/</screen>
<para>Первая строка подключает бинарный репозиторий <filename>/home/aisotton/rep-exact/binary</filename> , хранящийся на моей локальной машине; вторая строка подключает репозиторий с исходными текстами
<filename>/home/aisotton/rep-exact/source</filename>.</para>
</example>
</section> <!-- using-a-repository -->
<section>
<title>Смотрите также</title>
<itemizedlist>
<listitem>
<para>Файлы <command>apt-ftparchive</command>
(документацию к пакету).</para>
</listitem>
<listitem>
<para>Файлы <command>apt-get</command> (документацию к пакету) и документацию на <literal>apt</literal>.</para>
</listitem>
<listitem>
<para>Файлы <command>apt-move</command> (документацию к пакету).</para>
</listitem>
<listitem>
<para><ulink url="http://www.apt-get.org/"/> (много примеров существующих репозиториев)</para>
</listitem>
<listitem>
<para>Файлы <ulink
url="http://www.debian.org/doc/manuals/apt-howto/">APT HOWTO</ulink>.</para>
</listitem>
<listitem>
<para>Файлы <command>dpkg-scanpackages</command>
(документацию к пакету).</para>
</listitem>
<listitem>
<para>Файлы <command>dpkg-scansources</command>
(документацию к пакету).</para>
</listitem>
<listitem>
<para>Файлы <literal>sources.list(5)</literal> (страницу руководства).</para>
</listitem>
</itemizedlist>
</section>
</article>