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

Содержание

1.1. Социальная динамика Debian
1.2. Программы, необходимые для разработки
1.3. Документация, необходимая для разработки
1.4. Где искать помощь

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

Этот документ был адаптирован для выпуска Debian squeeze [1].

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

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

Если вам нужна помощь в пакетировании, прочтите Раздел 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, и как вы можете помочь, обратите внимание на следующие страницы:

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

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

Приведённые ниже пакеты присутствуют в стандартной установке Debian, то есть, скорее всего, они уже установлены на вашей машине (как, впрочем, и пакеты, которые им нужны для работы). Несмотря на это, мы рекомендуем проверить их наличие с помощью команды aptitude show пакет или dpkg -s пакет.

Самый важный пакет в системе разработчика — 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].

  • devscripts - this package contains some useful scripts that can be helpful for maintainers, but they are also not necessary for building packages. Packages recommended and suggested by this package are worth looking into. (See /usr/share/doc/devscripts/README.gz.)

  • fakeroot — данная утилита позволяет эмулировать наличие прав прав пользователя root, которые необходимы на некоторых этапах процесса сборки (смотрите fakeroot(1)).

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

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

  • git - this package provides a popular version control system designed to handle very large projects with speed and efficiency; it is used for many high profile open source projects, most notably the Linux kernel. (See git(1), git Manual (/usr/share/doc/git-doc/index.html).)

  • gnupg — данный инструмент позволяет подписывать пакеты. Это особенно важно, если вы хотите распространять их, и вы точно будете делать это, если хотите, чтобы ваш пакет был включён в дистрибутив Debian (смотрите gpg(1)).

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

  • lintian — данная программа предназначена для проверки пакетов Debian. Если вы допустили одну из распространённых ошибок, она сообщит вам об этом после сборки пакета и покажет пояснение по каждой найденной ошибке (смотрите lintian(1), руководство пользователя lintian).

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

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

  • pbuilder — пакет содержит программы, которые используются для создания и сопровождения окружения chroot. Сборка пакета Debian в окружении chroot позволяет проверить правильность указанных сборочных зависимостей и избежать ошибок FTBFS (ошибки при сборке из исходного кода) (смотрите pbuilder(8) и pdebuild(1)).

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

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

  • quilt - this package helps you to manage large numbers of patches by keeping track of the changes each patch makes. Patches can be applied, un-applied, refreshed, and more. (See quilt(1), and /usr/share/doc/quilt/quilt.pdf.gz.)

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

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

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

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

  • debian-policy - the Debian Policy Manual includes explanations of the structure and contents of the Debian archive, several OS design issues, the Filesystem Hierarchy Standard (FHS, which says where each file and directory should be), etc. For you, the most important thing is that it describes requirements that each package must satisfy to be included in the distribution. (See the local copies of /usr/share/doc/debian-policy/policy.pdf.gz and /usr/share/doc/debian-policy/fhs/fhs-2.3.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.)

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

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

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

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

Прежде всего, перед тем как задавать вопрос, внимательно прочитайте документацию:

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

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

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

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

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

Даже если всё правильно работало, настало время молиться. Почему? Потому что через несколько часов или дней пользователи по всему миру начнут использовать ваш пакет и, если вы допустили какую-нибудь критическую ошибку, многочисленные разгневанные пользователи Debian устроят атаку на почтовый ящик… Шутка, шутка. :-)

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



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

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

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