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

Содержание

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

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

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.

This document is made available for the Debian Buster release since it is offered in many translations but this 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. Заметим, что данный документ может быть слегка устаревшим.

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

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

Перед тем как начать, нужно убедиться, что установлены все необходимые для разработки пакеты. Обратите внимание, что приведённый ниже список не содержит пакеты, помеченные как обязательные (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), по крайней мере, по основам работы. Сейчас это может оказаться слишком трудным, но позже вы будете очень довольны, что сделали это. Если позднее у вас возникнут конкретные вопросы, перечитайте документацию, упомянутую выше.

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

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

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

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

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

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

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

Более опытные разработчики 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 и т.д.