Глава 1. Хорошее начало — половина дела

# Глава 1. Хорошее начало — половина дела

The rewrite of this tutorial document with updated contents and more practical examples is available as Guide for Debian Maintainers. Please use this new tutorial as the primary tutorial document.

В этом документе описан процесс создания пакета Debian с точки зрения обычного пользователя и начинающего разработчика. Он написан простым языком и содержит работающие примеры. В этом руководстве мы пытаемся следовать старой латинской поговорке: Longum iter est per praecepta, breve et efficax perexempla! (Путь длинен, если изучать правила, но короток и эффективен, если пользоваться примерами!).

This document is made available for the Debian `Buster` release since this offers many translations. This document will be dropped in the following releases since contents are getting outdated. [1]

Одна из сильных, по сравнению с другими дистрибутивами, сторон Debian — это система управления пакетами. Несмотря на то, что для Debian уже существует очень много пакетов, может случиться так, что вам понадобится установить программу, для которой не существует соответствующего пакета. Это может заставить вас задуматься о том, как создать свой собственный пакет. Для тех, кто делает первые шаги в Linux, это сложно, но вы к ним не относитесь, если сейчас читаете этот документ :-) Вам понадобятся некоторые знания о программировании под Unix, но ни в коем случае вы не обязаны быть гуру [2].

Одно можно сказать определённо: создание и сопровождение пакетов Debian занимает много времени. Несомненно, чтобы наша система работала, сопровождающие должны быть технически грамотными и прилежными.

If you need some help with packaging, please read Раздел 1.4, «Где искать помощь».

Самые новые версии этого документа всегда доступны на странице http://www.debian.org/doc/maint-guide/ и в пакете `maint-guide`. Переводы доступны в отдельных пакетах, например `maint-guide-es`. Заметим, что данный документ может быть слегка устаревшим.

Так как это учебное пособие, каждый важный вопрос будет объясняться последовательно, шаг за шагом. Некоторые из них могут показаться вам ненужными. Будьте терпеливее. Также, для упрощения документа были намеренно опущены некоторые крайние случаи и приведены только ссылки.

## 1.1. Социальная динамика Debian

Вот некоторые наблюдения за социальной динамикой Debian, представленные в надежде, что это подготовит вас к взаимодействию с Debian:

- Все занимаются Debian на добровольной основе.

  - Вы не можете указывать другим что делать.

  - Вы сами должны быть заинтересованы что-то делать.

- Движущая сила — дружественное сотрудничество.

  - Ваш вклад не должен перенапрягать остальных.

  - Ваш вклад полезен, если так посчитают остальные.

- Debian — это не школа, где вы автоматически получите внимание учителей.

  - Вы должны быть способны учиться самостоятельно.

  - Внимание других добровольцев — очень дефицитный ресурс.

- Debian постоянно улучшается.

  - От вас ожидают высококачественных пакетов.

  - Вы сами должны адаптироваться к изменениям.

Есть несколько групп людей, взаимодействующих в Debian друг с другом в различных качествах:

- автор программы (upstream author) — человек, который создал программу.

- сопровождающий программы (upstream maintainer) — человек, который сопровождает программу в настоящее время.

- сопровождающий (maintainer) — человек, который создал для программы пакет Debian.

- поручитель (sponsor) — человек, который помогает сопровождающим помещать пакеты в официальный архив пакетов Debian (после проверки их содержимого).

- наставник (mentor) — человек, который помогает новым сопровождающим в пакетировании и т.п.

- разработчик Debian (DD) — человек, являющийся участником проекта Debian. У него есть право на размещение пакетов в официальном архиве пакетов Debian.

- сопровождающий Debian (DM) — человек, обладающий ограниченными правами на размещение пакетов в официальном архиве пакетов Debian.

Вы не можете стать официальным разработчиком Debian за вечер, так как для этого требуются не только технические знания. Но не унывайте. Если ваш пакет полезен другим, вы можете предложить его будучи сопровождающим через поручителя или как сопровождающий Debian.

Заметим, что вам не нужно обязательно создавать новый пакет, чтобы стать официальным разработчиком Debian, для этого достаточно поддерживать существующие пакеты. Есть много пакетов, которые ждут хороших сопровождающих (смотрите Раздел 2.2, «Выбор программы»).

Этот документ описывает технические моменты пакетирования. О том, как работает Debian, и как вы можете помочь, обратите внимание на следующие страницы:

- Debian: 17 лет Свободного ПО, «дело-кратия» и демократия (вступительные слайды)

- Как помочь Debian? (официальная страница)

- Часто задаваемые вопросы по Debian GNU/Linux, глава 13: «Содействие проекту Debian» (полуофициальная страница)

- Страница HelpDebian в Debian Wiki (дополнительно)

- Сайт нового сопровождающего Debian (официальный)

- Список ответов на часто задаваемые вопросы наставникам Debian (дополнительно)

## 1.2. Программы, необходимые для разработки

Перед тем как начать, нужно убедиться, что установлены все необходимые для разработки пакеты. Обратите внимание, что приведённый ниже список не содержит пакеты, помеченные как `обязательные` (essential) или `требуемые` (required) — считается, что эти пакеты уже установлены на вашей машине.

The following packages come with the standard Debian installation, so you probably have them already (along with any additional packages they depend on). Still, you should check them with `aptitude show `package`` or with `dpkg -s `package``.

Самый важный пакет в системе разработчика — `build-essential`. Его установка повлечёт за собой загрузку других пакетов, требуемых для основы среды сборки.

Кроме пакетов, требуемых для сборки любого пакета, есть пакеты, которые нужны только для некоторых пакетов; установите их, они могут пригодиться именно для вашего пакета:

- `autoconf`, `automake` и `autotools-dev` — данные утилиты (смотрите `info autoconf`, `info automake`) используются во многих современных программах для создания сценариев настройки и файла `Makefile`. В пакете `autotools-dev` содержатся самые новые версии некоторых файлов auto- и документация по их применению.

- `debhelper` и `dh-make` — пакет `dh-make` необходим для создания скелета нашего будущего пакета. Для этого он будет использовать некоторые инструменты из пакета `debhelper`. Использовать их необязательно, но мы очень рекомендуем их начинающим разработчикам. Они сильно упрощают процесс создания и поддержки пакетов (смотрите dh_make(8), debhelper(1)) [3].

  The new `debmake` may be used as the alternative to the standard `dh-make`. It does more and comes with HTML documentation with extensive packaging examples in `debmake-doc`.

- `devscripts` — данный пакет содержит сценарии, полезные для сопровождающих, но так же не являющиеся необходимыми для сборки пакетов. Стоит обратить внимание на рекомендуемые и предлагаемые им пакеты (смотрите `/usr/share/doc/devscripts/README.gz`).

- `fakeroot` - this utility lets you emulate being root, which is necessary for some parts of the build process. (See fakeroot(1).)

- `file` — данная программа позволяет определить тип файла (смотрите file(1)).

- `gfortran` — пакет содержит компилятор GNU Fortran; требуется, если программа написана на Fortran (смотрите gfortran(1)).

- `git` — данный пакет предоставляет популярную систему контроля версий, разработанную для быстрого и эффективного сопровождения очень больших проектов; она используется во многих известных проектах с открытым кодом, наиболее заметным из которых является ядро Linux (смотрите git(1), руководство по git (`/usr/share/doc/git-doc/index.html`)).

- `gnupg` - a tool that enables you to digitally sign packages. This is especially important if you want to distribute packages to other people, and you will certainly be doing that when your work gets included in the Debian distribution. (See gpg(1).)

- `gpc` — пакет содержит компилятор GNU Pascal, который требуется при работе с программами, написанными на Pascal. Для этой задачи также хорошо подходит `fp-compiler`, Free Pascal Compiler (смотрите gpc(1), ppc386(1)).

- `lintian` - this is the Debian package checker, which lets you know of any common mistakes after you build the package and explains the errors found. (See lintian(1), Lintian User's Manual.)

- `patch` — данная утилита изменяет исходный файл в соответствии со списком различий между файлами, полученным при помощи программы diff (смотрите patch(1)).

- `patchutils` — данный пакет содержит несколько утилит для работы с заплатами, например lsdiff, interdiff и filterdiff.

- `pbuilder` - this package contains programs which are used for creating and maintaining a chroot environment. Building a Debian package in this chroot environment verifies the proper build dependency and avoids FTBFS (Fails To Build From Source) bugs. (see pbuilder(8) and pdebuild(1))

- `perl` — один из наиболее используемых интерпретируемых языков в Unix-системах. Его часто называют «Unix's Swiss Army Chainsaw» (швейцарской армейской пилой) (смотрите perl(1)).

- `python` — ещё один из наиболее используемых интерпретируемых языков в Debian, который объединяет необычайную мощь с очень понятным синтаксисом (смотрите python(1)).

- `quilt` — пакет помогает управлять большими наборами заплат, отслеживая каждое сделанное изменение. Заплаты логически организуются в стек, и вы можете накладывать их, откатывать изменения, обновлять их и т.д. (смотрите quilt(1), `/usr/share/doc/quilt/quilt.pdf.gz`).

- `xutils-dev` — пакет содержит программы, которые используются при сборке пакетов для X11, например с их помощью генерируется `Makefile` из набора макрофункций (смотрите imake(1), xmkmf(1)).

Краткие описания, показанные выше, даны лишь для того, чтобы у вас сложилось общее представление о том, для чего предназначен каждый пакет. Прежде чем продолжить, полностью прочитайте документацию к каждой программе (в том числе по установленным согласно зависимостям пакетам, например make), по крайней мере, по основам работы. Сейчас это может оказаться слишком трудным, но позже вы будете очень довольны, что сделали это. Если позднее у вас возникнут конкретные вопросы, перечитайте документацию, упомянутую выше.

## 1.3. Документация, необходимая для разработки

Кроме этого документа также очень важно прочитать следующую документацию:

- `debian-policy` — в руководстве по политике Debian содержится описание структуры и содержимого архива Debian, некоторых проблем при разработке операционной системы, стандарт иерархии файловой системы (FHS, в котором оговаривается расположение каждого файла и каталога) и т.д. Также (что для вас важнее всего), в пакете указаны требования, которым должен удовлетворять каждый пакет Debian для того, чтобы он мог быть включён в дистрибутив (смотрите локальные файлы `/usr/share/doc/debian-policy/policy.pdf.gz` и `/usr/share/doc/debian-policy/fhs/fhs-3.0.pdf.gz`).

- `developers-reference` - the Debian Developer's Reference describes all matters not specifically about the technical details of packaging, like the structure of the archive, how to rename, orphan, or adopt packages, how to do NMUs, how to manage bugs, best packaging practices, when and where to upload, etc. (See the local copy of `/usr/share/doc/developers-reference/developers-reference.pdf`.)

Кроме этого документа также важно прочитать следующую документацию:

- Autotools Tutorial provides a very good tutorial for the GNU Build System known as the GNU Autotools, whose most important components are Autoconf, Automake, Libtool, and gettext.

- `gnu-standards` — в этом пакете содержатся две части документации проекта GNU: стандарты написания кода GNU и информация для сопровождающих ПО GNU . Хотя в Debian не требуется их соблюдения, они всё равно полезны для общего понимания (смотрите локальные файлы `/usr/share/doc/gnu-standards/standards.pdf.gz` и `/usr/share/doc/gnu-standards/maintain.pdf.gz`).

Если этот документ в чём-то противоречит документам, упомянутым выше, это считается ошибкой. Отправьте сообщение об ошибке в пакете `maint-guide` с помощью reportbug.

The following is an alternative tutorial document that you may read along with this document:

- Учебник Debian по пакетированию

## 1.4. Где искать помощь

Before you decide to ask your question in some public place, please read this fine documentation:

- файлы в `/usr/share/doc/`пакет`` для всех используемых пакетов

- содержимое `man `команда`` для всех используемых команд

- содержимое `info `команда`` для всех используемых команд

- содержимое архива списка рассылки debian-mentors@lists.debian.org

- содержимое архива списка рассылки debian-devel@lists.debian.org

Для более эффективного поиска с помощью поисковых машин добавьте в строку поиска `site:lists.debian.org` для ограничения по домену поиска.

Создание маленького тестового пакета — хороший способ научиться пакетированию. Изучая устройство тщательно сопровождаемых пакетов, можно узнать ещё больше.

Если вы не смогли найти ответы на свои вопросы в документации и веб, то можете задать их интерактивно:

- в список рассылки debian-mentors@lists.debian.org (для новичков).

- в список рассылки debian-devel@lists.debian.org (для опытных разработчиков).

- на канале IRC, например в `#debian-mentors`.

- Команды, работающие над определённым набором пакетов (полный список https://wiki.debian.org/Teams).

- Списки рассылки на родном языке, например debian-devel-{french,italian,portuguese,spanish}@lists.debian.org или debian-devel@debian.or.jp (полный список https://lists.debian.org/devel.html и https://lists.debian.org/users.html).

Более опытные разработчики Debian будут рады помочь вам, если на правильно зададите вопрос после попыток разобраться самостоятельно.

Когда вы получите сообщение об ошибке (да, сообщения о реальных ошибках!), то знайте, что пришло время разобраться с системой отслеживания ошибок Debian и прочитать имеющуюся там документацию, чтобы эффективно работать с сообщениями об ошибках. Настоятельно рекомендуем прочитать справочник разработчика Debian, раздел 5.8. «Работа с ошибками».

Even if it all worked well, it's time to start praying. Why? Because in just a few hours (or days) users from all around the world will start to use your package, and if you made some critical error you'll get mailbombed by numerous angry Debian users… Just kidding. :-)

Отдохните и приготовьтесь получать сообщения об ошибках, так как много чего ещё нужно сделать для того, чтобы пакет полностью соответствовал политике Debian (ещё раз, прочитайте имеющуюся документацию). Успехов!

[1] В документе предполагается, что вы используете `jessie` или более новую версию. Если у вас старая версия (включая старые выпуски Ubuntu и т.д.), установите современные версии пакетов `dpkg` и `debhelper` из специального репозитория (backports).

[2] О том, как работать с системой Debian, можно найти в справочнике Debian. В нём также содержатся ссылки на материалы по программированию в системах Unix.

[3] Существуют также похожие, более специализированные пакеты, такие как `dh-make-perl`, `dh-make-php` и т.д.

Руководство начинающего разработчика Debian |  | Глава 2. Первые шаги