Руководство начинающего разработчика Debian Josip Rodin jrodin@jagor.srce.hr Перевод: Михаил Соболев, mss@transas.com Перевод: Алексей Выскубов, alexey@pepper.spb.ru версия 0.97 от 27 сентября 1999 года. Copyright © 1998, 1999 Josip Rodin.

This document may used under the terms of any fully DFSG compliant license, preferably GNU General Public License version 2+.

With permission of their authors, I have used and modified portions of these two documents:

Making a Debian Package (AKA the Debmake Manual), copyright © 1997 Jaldhar Vyas jaldhar@debian.org.

The New-Maintainer's Debian Packaging Howto, copyright © 1997 Will Lowe lowe@debian.org. Getting started «The Right Way»

Этот документ описывает процесс создания пакетов для Debian GNU/Linux. В этом руководстве мы пытаемся следовать римской поговорке Longum iter est per preaecepta, breve et efficax per exempla! (It's a long way by the rules, but short and efficient with examples!).

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

Сначала вы должны убедиться, что все необходимые для работы пакеты установлены (это можно сделать при помощи программы (например, ‘dpkg -i имя пакет’) или при помощи одной из программ dselect или apt). На момент написания этого документа официальной стабильной версией был выпуск 2.1 (‘slink’), а выпуск 2.2 (‘potato’) только создавался. Поэтому большинство пакетов, упомянутых здесь, взяты из ‘potato’.

Нижеперечисленные пакеты пакеты присутствуют в стандартной поставке Debian 2.1, что означает, что скорее всего они уже установлены на вашей машине. Несмотря на это, мы рекомендуем вам при помощи команды ‘dpkg -s имя-пакета’ проверить, что они установлены. binutils Программы, входящие в этот пакет, позволяют работать с объектными файлами — файлы, из которых «собираются» программы. (см. ‘info binutils’) cpp Препроцессор языка C. (см. ) cpio Программа архивирования, как, например, tar или zip. (см. ) dpkg-dev Этот пакет содержит все утилиты, необходимые для распаковки, создания и загрузки исходных пакетов Debian. В этом же пакете находятся «Руководство по созданию пакетов» (packaging) и «Руководство по внутреннему устройству программ из пакета dpkg». (см. ) file Эта полезная программа позволяет определить тип файла. (см. ) fileutils Основные утилиты Linux, например, ls, chmod, rm и другие. (см. ‘info --file /usr/info/fileutils.info.gz’) gcc Компилятор языка C от GNU. Большинство программ Linux написаны на языке C. Однако если ваша программа написана на каком-то другом языке программирования, например, C++, Fortran, Pascal, и другм, вы должны установить соответствующий пакет (соответственно g++, g77, gpc или другой). (см. , , , ) libc6-dev Библиотека языка C и файлы заголовков, необходимые программе gcc. Несмотря на то, что некоторые программы все еще рекомендуют и/или используют libc5, мы рекомендуем вам использовать новую версию (libc6). (см. ‘info libc’) make Обычно создание программы состоит из нескольких шагов, которые необходимо выполнять в определенном порядке. Вместо того, чтобы вводить одни и те же команды снова и снова, вы можете воспользоваться этой программой для автоматизации всего процесса. В некоторых случаях следует использовать утилиты imake и xmkmf (они позволяют создавать make-файлы из файлов специального вида). Многие современные программы создают сценарий configure и make-файлы при помощи утилит autoconf и automake, поэтому вам также могут понадобиться эти утилиты (см. ‘info make’, , , , ). patch Эта очень полезная программа изменяет исходный файл в соответствии со списком различий между файлами, полученным при помощи программы diff (см. ). perl5-5.005 Perl — один из наиболее используемых интерпретируемых языков в Un*x-системах. Его часто называют “Unix's Swiss Army Chainsaw” (Универсальная пила) (см. ).

Из раздела devel вам могут понадобиться следующие пакеты: dh-make debhelper Программа dh_make необходима для создания скелета будущего пакета. При этом в получающихся управляющих файлах будут использованы программы из пакета debhelper. При создании пакетов вовсе не обязательно использовать эти программы, но мы очень рекомендуем их начинающим разработчикам. Они позволяют сильно упростить процесс создания и поддержки пакетов (см. , , /usr/share/doc/debhelper/README). devscripts Этот пакет содержит несколько простых и полезных, но не являющихся необходимыми для создания пакетов, сценариев (см. /usr/share/doc/devscripts/README.gz). fakeroot Эта утилита позволит вам создавать пакеты, не пользуясь привилегиями (которые необходимы на некоторых этапах) пользователя root (см. ). lintian Эта программа предназначена для проверки пакетов. Она позволяет убедиться, что при создании пакетане было допущено ни одной из «стандартных» ошибок (см. , /usr/share/doc/lintian/lintian.html/index.html).

И, наконец, вам следует установить очень важные пакеты из раздела doc: debian-policy Этот пакет содержит описание структуры архива, разнообразных моментов, связанных с построением операционной системы, «Стандарт иерархии файловой системы». Также (что для вас важнее всего) пакет содержит требования, которым должен удовлетворять пакет Debian, для того, чтобы он мог быть включен в дистрибутив (см. /usr/share/doc/debian-policy/policy.html/index.html). developers-reference Данный пакет содержит информацию для разработчика пакетов, не относящуюся непосредственно к техническим вопросам создания пакетов. В частности, вы найдете здесь информацию о структуре архивап, о том, как переименовываь пакеты, как переводить пакеты в «брошенное»

:-)

состояние, как начать поддержку «брошенного» пакета, как обновление пакета может быть произведено не его разработчиком, как работать с ошибками в пакетах, когда и как обновлять пакеты и т.п. (см. /usr/share/doc/developers-reference/developers-reference.html/index.html). packaging-manual Здесь вы найдете описание технических вопросов создания двоичных пакетов и пакетов с исходными текстами (см. /usr/share/doc/packaging-manual/packaging.html/index.html).

Вам также понадобится (для создания цифровой подписи к пакету) программа зашифрования — либо PGP (пакеты pgp-*), либо GPG (пакет gnupg). Это особенно важно, если вы хотите предоставлять ваш пакет другим людям (вне всякого сомнения, вы будете делать это после того, как ваша работа будет включена в дистрибутив Debian). Однако, в силу несколько странного экспортного законодательства США, вы не можете загрузить необходимые программы зашифрования с ближайшего зеркала Debian. Несмотря на это, Debian предоставляет эти пакеты через сервер, физически находящийся в стране, отличной от США, и называемый . На вашем зеркале вы можете найти файл README.non-US, который описывает как вы можете найти ближайшее зеркало этого сервера.

Перед началом работы над созданием пакета мы рекомендуем вам прочитать документация на все программы, которые вы будете использовать. Это может сначала показаться излишеством, но потом вы будете очень рады, что прислушались к нашему совету…

Внимание: Пакет debmake содержит программы, аналогичные по функциональности программам, входящим в пакет dh-make. К сожалению, описание пакета debmake не приводится в этом документе. Вы можете найти дополнительную информацию на странице . Прочая информация

Вы можете создавать пакеты двух типов: двоичные пакеты и пакеты с исходными текстами. Последние содержат код, который позволяет скомпилировать программу и создать пакет. Двоичные пакеты содержат только скомпилированную программу. Пожалуйста, не путайте исходные тексты программы и пакет с исходными текстами.

Debian использует термин сопровождающий либо разработчик пакета (maintainer) для человека, который создает пакеты, автор (author) для человека, который создал программу, и активный автор (upstream maintainer) для человека, осуществляющего работу над программой в настоящий момент времени. Обычно автор и активный автор являются одним и тем же человеком (а иногда тот же человек выступает и в роли сопровождающего). Если вы создали программу и хотите, чтобы ее включили в Debian, вы можете сделать это, подав соответствующее заявление.

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

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

При выборе пакета, над которым вы собираетесь работать, вы должны иметь в виду следующие моменты: проверьте существует ли данный пакет в дистрибутиве. Если вы используете ‘стабильный’ выпуск, лучше всего будет посетить страницу . Если же вы используете текущий ‘нестабильный’ выпуск, для проверки лучше использовать следующие команды: dpkg -s название_программы dpkg -l '*название_программы*' Посмотрите в списке и архивах списка рассылки debian-devel — не работает ли уже кто-нибудь над этим пакетом. Если работа уже ведется, но вы действительно хотите работать над этим же пакетом, свяжитесь с текущим разработчиком. Если же не против создания другого пакета, поищите другую интересную программу, над которой еще никто не работает. Пакет должен содержать программу. Не пытайтесь пока создавать пакеты для библиотек. У программы обязательно должна быть лицензия. Желательно, чтобы она позволяла квалифицировать данную программу как свободно распространяемую в соответствии с . Если лицензия не соответствует каким-либо пунктам этих правил, вы все равно можете включить ваш пакет в один из разделов ‘contrib’ или ‘non-free’. Если вы не уверены, в какой раздел данный пакет должен быть помещен, спросите в списке рассылки debian-legal@lists.debian.org. Программа не должна требовать режима setuid root, а еще лучше — вообще не требовать режима доступа setuid или setgid. Программа не должна быть демоном или чем-то, что должно быть помещено в каталоги */sbin. Программа должна быть хорошо документирована или, по крайней мере, понятна (всем). Вы должны связаться с авторами программы, чтобы убедиться, что они не против создания пакета с их программой. Возможность консультироваться с авторами программы по поводу тех или иных моментов обычно очень важна, поэтому лучше не пытайтесь создавать пакеты для неподдерживаемых программ. И, наконец, программа должна использоваться вами в течение некоторого времени, чтобы вы могли быть уверены, что она работает.

Разумеется, все перечисленное — это всего лишь меры безопасности, которые спасут вас от разъяренных пользователей, если вы сделали что-то не так в ftp-демоне… Как только вы приобретете определенный опыт, вы сможете создавать любые пакеты — но помните, что даже опытные разработчики, если у них есть какие-то сомнения, обращаются за помощью в список рассылки debian-devel. Подписчики этого списка рассылки всегда рады помочь.

Дополнительную информацию вы можете найти в «Руководстве разработчика». Возьмите программу и попробуйте ее

Итак, первое, что вы должны сделать — это найти и загрузить исходные тексты программы. Скорее всего, у вас уже есть исходные тексты, которые вы взяли с домашней странички автора. Исходные тексты программ для Linux обычно предоставляются в виде архива в формате tar-gzip, имеют расширение .tar.gz (или .tgz). Внутри архива обычно находится каталог программа-версия,в котором находятся все файлы исходных текстов програмы. Если исходные тексты выбранной вами программы поставляются в другом виде (например, имя файла оканчивается на .Z или .zip), распакуйте его соответствующими средствами или спросите в списке рассылки debian-mentors, если вы не знаете как это правильно сделать (подсказка: выполните команду ‘file архив.расширение’).

Для примера мы будем использовать программу ‘gentoo’ — менеджер файлов для X11, использующий библиотеку GTK+. Заметьте, что для этой программы уже создан пакет и он постоянно обновляется.

В каталоге /usr/local/src создайте подкаталог с именем, соответствующем названию вашей программы (/usr/local/src/gentoo в нашем примере). Поместите загруженный архив в этот каталог и распакуйте его при помощи команды ‘tar -xzf gentoo-0.9.12.tar.gz’. Этот процесс может занять значительное время, но ничего не выведет на экран (разве что возникнут какие-нибудь ошибки; в этом случае вы должны попытаться загрузить этот архив еще раз и проверить действительно ли это tar-gzip-архив). В результате вы получите подкаталог gentoo-0.9.12 в текущем каталоге (/usr/local/src/gentoo), а в этом подкаталоге — исходные тексты программы

Перейдите в этот каталог и внимательно прочитайте имеющуюся информацию. Обычно полезными оказываются файлы README*, INSTALL*, *.lsm и *.html. Здесь вы найдете инструкции, которые позволят вам правильно скомпилировать и установить программу (скорее всего в каталог /usr/local/bin).

Дальнейшая последовательность действий будет зависеть от конкртной программы. Однако современные программы обычно поставляются со сценарием configure, который позволяет получить параметры, необходимые для компиляции программы в вашей системе (также производится проверка, что в вашей системе компиляция данной программы вообще возможна). После настройки (выполните команду ‘./configure’) вы можете скомпилировать вашу программу при помощи команды ‘make’, а затем установить ее при помощи команды ‘make install’.

Итак, скомпилируйте программу, установите ее и попробуйте ее запустить, чтобы убедиться, что она правильно работает и ничто другое не было испорчено. Перед запуском программы dh_make

Для того, чтобы правильно построить программу, вы должны поместить исходные тексты программы в каталог название пакета-версия. Как вы видите, исходные тексты программы gentoo уже находятся в каталоге с правильным именем. Возможно, для вашей программы придется делать что-то специальное. Убедитесь, что название каталога содержит буквы только нижнего регистра. Если название состоит из больше, чем одного слова, попробуйте сократить его или создать какую-нибудь аббревиатуруЯ не совсем понимаю, зачем это может понадобится. Прим. переводчика.. Например, если название программы “John's little editor for X”, название пакета может быть johnledx, jle4x или что-нибудь, что вам покажется подходящим. Мы рекомендуем не превышать длину в 15 символов в названии пакета.

Вам также необходимо знать точную версию программы (эта информация будет использована в версии пакета). Если программа нумеруется не как X.Y.Z, а датой, вы можете использовать эту дату, приписав перед ней “0.0.” (на всякий случай, вдруг когда-нибудь авторы программы решать выпустить версию 1.0). Таким образом, если программа была выпущена 19-го декабря 1999 года, вы можете указать 0.0.19981219 в качестве версии. Версии некоторых программ вообще никак не нумеруются. В таком случае мы рекомендуем вам связаться с авторами программы и выяснить, не используют ли они какую-нибудь другую схему отслеживания версий. Запуск программы dh_make

Перейдите в каталог, в котором находятся исходные тексты программы и выполните команду dh_make -e ваш@электронный.адрес

Разумеется, вы должны заменить ваш@электронный.адрес на ваш реальный адрес, который будет использован в различных служебных файлах пакета (debian/changelog, debian/control, …).

Теперь от вас понадобится дополнительная информация. Вы должны указать тип пакета, который вы собираетесь создать. В случае программы gentoo мы хотим создать один пакет, содержащий программу (single binary package), поэтому мы выберем первый пункт, нажав на клавишу ‘s’. Проверьте информацию, выведенную на экран и, если все правильно, нажмите на клавишу Enter. Так как для вас это первый пакет, мы не рекомендуем вам создавать проект, позволяющий построить сразу несколько пакетов (multi-binary package), или проект, содержащий библиотеку.

Помните, что вам необходимо запускать программу dh_make только один раз. Если вы попытаетесь запустить ее еще раз, она может сработать неправильно. Это также означает, что для создания новой версии пакета, вы должны использовать другой подход. Это описано позже. Изменение исходных текстов

После того, как программа dh_make закончит свою работу, а вы внесли необходимые изменения в файл Makefile, вы можете выполнить команду ‘cd ..’ и увидеть, что был создан новый каталог с именем gentoo-0.9.12.orig. В этом каталоге находятся оригинальные файлы, которые должны оставаться неизменными. Каталог gentoo-0.9.12 также присутствует и именно здесь вы должны производить все свои изменения.

Обычно программы устанавливаются в каталог /usr/local. Пакеты, входящие в состав Debian, не должны использовать этот каталог, поскольку он зарезервирован для системного администратора (или пользователей). Это означает, что вы обязательно должны посмотреть на содержимое файла Makefile. В этом файле (для подробной информации см. ) находятся команды, позволяющие автоматизировать процесс построения данной программы. Подробно об этом файле мы говорим в .

Мы не можем охватить все проблемы, с которыми вы можете столкнуться, но все-таки мы попытались перечислить те из них, с которыми вы, скорее всего, столкнетесь. Установка в необходимый каталог

В большинстве случаев, программы устанавливаются в существующую иерархию каталогов вашей системы таким образом, чтобы исполняемый файл попал в один из каталогов, указанных в переменной среды $PATH, а файлы документации и страницы Руководства оказываются в стандартных местах. Вы должны убедиться, что операция установки выполняется правильно, но при этом вы должны сделать так, чтобы все необходимые файлы могли быть установлены во временный каталог, который будет создан в каталоге debian/ (обычно этот временный каталог называется debian/tmp), это позволит стандартным программам разработчика построить результирующий пакет. Все, что находится в этом временном каталоге, появится в системе пользователя при установке вашего пакета. Единственное отличие состоит в том, что программа dpkg будет устанавливать эти файлы по отношению к корневому каталогу.

Вообще говоря, вам нужно установить программу в каталог debian/tmp, но при этом она должна себя правильно вести, если ее поместить в корневой каталог, то есть, если установить пакет. Если процесс построения использует программы GNU autoconf, то программа dh_make добавит необходимые команды с тем, чтобы необходимое действие выполнялось автоматически, а вы можете пропустить данный раздел. В других случаях вам, скорее всего, понадобится просмотреть и поправить make-файлы.

Вот, например, соответствующая часть файла Makefile программы gentooКомментарии в файле Makefile были тоже переведены. Прим. переводчика: # Куда поместить исполняемые файлы по команде 'make install'? BIN = /usr/local/bin # Куда поместить значки по команде 'make install'? Внимание: если вы # поменяете это значение, при старте программа gentoo может не найти # этих значков. Вам придется поменять значение параметра 'путь к значкам' # (в окне настроек страничка "Пути"). ICONS = /usr/local/lib/gentoo/

Прежде всего вы должны добавить две строчки, которые говорят: # Добавлено для Debian GNU/Linux. DESTDIR = так как процесс построения требует что-то подобное (об этом позже).

В файле Makefile был указан каталог, куда будет установлена программа. Вам необходимо заменить ту строчку на: # Куда поместить исполняемые файлы по команде 'make install'? BIN = $(DESTDIR)/usr/X11R6/bin

Вы можете спросить «почему в этот каталог, а не в какой-нибудь другой?» Потому что существуют определенные правила, говорящие куда должны быть установлены программы. Об этом можно почитать в стандарте «Иерархии файловой системы» (см. /usr/share/doc/debian-policy/fhs/). Поэтому мы должны устанавливать программу в каталог /usr/X11R6/bin вместо каталога /usr/local/bin, а страницу Руководства (в нашем случае она отсутствует, но так как для большинства программ они существуют, мы создадим ее позже) в каталог /usr/share/man/man1, а не в каталог /usr/local/man/man1.

Следующий шаг несколько сложнее. Если вы произведете следующее изменение: ICONS = $(DESTDIR)/usr/share/gentoo/ что соответствует стандарту, вам придется изменить исходные тексты программы. Но где и что искать? Вы можете попробовать выполнить команду: grep -n usr/local/lib *.[ch] (ее нужно выполнить в каждом каталоге, в котором присутствуют файлы с расширением .c или .h). Программа grep выведет названия файлов и номера строк, в которых присутствует ‘usr/local/lib’. Теперь измените в этих строчках ‘usr/local/lib’ на ‘usr/share’ — и готово. Только будьте внимательны и не измените что-нибудь другое, особенно, если вы не слишком много знаете о программировании на языке C. :-)

Теперь вам нужно найти цель ‘install’ (поищите в файле Makefile строчку, содержащую ‘install:’) и переименуйте все ссылки на каталоги, не использующие переменные, описанные в начале файла. В нашем случае, мы несколько улучшим то, что было. Если раньше было: # ----------------------------------------- Установка # Для того, чтобы выполнить это, вы должны иметь права пользователя root! install: gentoo-target install ./gentoo $(BIN) install icons $(ICONS) install gentoorc-example $(HOME)/.gentoorc

После необходимого изменения, он будет выглядеть так: # ----------------------------------------- Установка # Для того, чтобы выполнить это, вы должны иметь права пользователя root! install: gentoo-target install -d $(BIN) $(ICONS) $(DESTDIR)/etc install ./gentoo $(BIN) install -m644 icons/* $(ICONS) install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc install -d $(DESTDIR)/usr/share/doc/gentoo/html cp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html

Внимательный читатель заметит, что мы поменяли ‘gentoo’ на ‘gentoo-target’ в строчке, где указано ‘install:’. Это называется исправлением ошибки. :-)

Каждый раз, когда вы вносите изменения, не связанные непосредственно с созданием пакета Debian, обязательно отправьте их авторам программы с тем, чтобы они могли быть включены в следующий выпуск программы. Проблемы с библиотеками

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

То есть, если в вашем файле Makefile присутствует строка, похожая на эту (а программа не компилируется): LIBS = -lcurses -lчто-то -lчто-то-еще

Попробуйте заменить ее на такую строчку (и, возможно, все заработает): LIBS = -lncurses -lsomething -lsomethingelse #LIBS = -lcurses -lsomething -lsomethingelse Файлы debian/control и debian/rules

В каталоге gentoo-0.9.12 появился новый подкаталог — debian, в котором есть несколько файлов. Эти файлы определяют поведение пакета. Наиболее важные из них — это файлы control и rules. Файл control

Этот файл содержит информацию, которая используется программами dpkg и dselect (а также другими) для работы c пакетами. Вот, например, файл control, который был создан программой dh_make. 1 Source: gentoo 2 Section: unknown 3 Priority: optional 4 Maintainer: Josip Rodin <jrodin@jagor.srce.hr> 5 Standards-Version: 3.0.1 6 7 Package: gentoo 8 Architecture: any 9 Depends: ${shlibs:Depends} 10 Description: <insert up to 60 chars description> 11 <insert long description, indented with spaces> (номера строк добавлены)

Строки 1-5 представляют собой управляющую информацию для пакета, содержащего исходные тексты, где строка 1 — его название.

Строка 2 — это название раздела, к которому относится данный пакет. Как, возможно, вы уже заметили, Debian разбит на несколько разделов: раздел main (основной) содержит свободное программное обеспечение, non-free (не-свободное) содержит пакеты, которые не совсем отвечают определению свободного программного обеспечения, и contib, где находятся пакеты, которые, являясь свободным программным обеспечением, зависят от не-свободного программного обесепеченя. В каждом разделе существуют логические подразделы, определяющие что пакет из данного подраздела делает. Таким образом, существует раздел ‘admin’, где находятся программы администрирования, раздел ‘base’ — для основных пакетов, раздел ‘devel’ содержит инструменты разработки программного обеспечения, ‘doc’ — документацию, ‘libs’ — библиотеки, ‘mail’ — почтовых сервером и программ чтения почты, ‘net’ — для сетевых приложений, ‘x11’ — программ, работающих под X Window System, и много много других.

В нашем случае мы должны указать ‘x11’.

В строке 3 мы должны указать, насколько важен данный пакет. Значения полей Section и Priority пока используется только программой dselect, которая позволяет пользователю сортировать по значениям этих полей, они также могут (и, скорее всего, будут) замещены сопровождающими ftp-сервер. Документ «Policy Manual» подробно описывает, чем нужно руководствоваться при выборе значений для этих полей.

В нашем случае мы оставим значение этого поля равным ‘optional’.

В строке 4 указано имя и адрес разработчика пакета.

Строка 5 — это версия документа «Debian Policy», стандартам которого следует данный пакет (две основные версии пакета debian-policy).

В строке 7 указано имя двоичного пакета.

В строке 8 указана архитектура процессора, для которого был скомпилирован двоичный пакет. Мы можем оставить в качестве значения ‘any’, так как программа поместит в это поле значение, соответствующее процессору машины, на которой компилировался пакет (см. в «Руководстве разработчика» объяснение понятия ‘перенос пакета’).

Одна из самых полезных возможностей системы управления пакетами Debian приведена в строке 9. Пакеты могут зависеть друг от друга различным образом. Помимо зависимости Depends, существуют также зависимости Recommends, Suggests, Pre-Depends, Conflicts, Provides, и Replaces .

Программы управления пакетами (такие как dpkg, dselect или apt) обычно одинаковым образом обрабатывают эти зависимости. Мы попытались дать объяснение тем случаям, когда поведение различается. (см. , , , , )

Ниже приведено описание того, что означает каждый тип зависимости: Depends Данный пакет не может быть установлен, если пакеты, указанные в списке зависимостей Depends, также установлены. Используйте этот тип зависимости, если ваша программа гарантировано не будет работать (или вызовет какие-нибудь серьезные проблемы), если соответствующий пакет не установлен. Recommends Программа dselect не установит ваш пакет, если пакеты, указанные в списке зависимостей Recommends, не установлены. Однако программы dpkg и apt-get должны позволить сделать это. Используйте данный тип зависимостей для пакетов, которые бы не использовались вместе с вашим пакетом только в нестандартных случаях. Suggests Когда пользователь устанавливает ваш пакет, программа dselect предложит ему также установить пакеты, перечисленные в списке зависимостей Suggests. Программы dpkg и apt этого делать не будут. Используйте данный тип зависимостей для пакетов, которые могут расширить функциональность вашего пакета, и, таким образом, увеличить его полезность. Pre-Depends Данный тип зависимостей строже, чем зависимости типа Depends. Данный пакет не будет установлен, если пакеты, указанные в списке зависимостей Pre-Depends, уже не установлены или не настроены. Используйте этот тип зависимостей очень скупо и только после обсуждения в списке рассылки debian-devel. Другими словами, не используйте его никогда! :-) Conflicts Данный пакет не будет установлен пока пакеты, перечисленные в списке зависимостей Conflicts, не удалены из системы. Provides В случае, когда для какого-то типа пакетов существуют несколько альтернатив, вводятся так называемый виртуальные пакеты. Полный список виртуальных пакетов приведен в файле /usr/share/doc/debian-policy/virtual-package-names-list.text.gz. Вы должны использовать данный тип зависимостей, если ваша программа реализует функциональность существующего виртуального пакета. Replaces Используйте данный тип зависимостей в случае, когда ваш пакет заменяет файлы из другого пакета, или же полностью заменяет другой пакет (в этом случае, вы должны использовать также зависимость типа Conflicts:). Тогда файлы из указанного пакета будут удалены перед установкой вашего.

Формат этих полей одинаков: это список имен пакетов, разделенных запятой. Здесь также могут быть указаны списки имен альтернативных пакетов, разделенных вертикальной чертой |. Для каждого пакета в списке вы можете ограничить допустимость указанного пакета по версии. Версии указываются в круглых скобках после имени пакета и должны состоять из символа сравнения, за которым следует номер версии. Допустимыми символами сравнения являются: <<, <=, =, >=, и >> для “строго раньше чем”, “раньше или равно”, “в точности равно”, “равно или позже” и “строго позже чем” соответственно.

Последнее, что мы хотели бы здесь показать, это $(shlibs:Depends). Данная конструкция позволяет программе (см. позже) заполнить данное поле названиями пакетов разделяемых библиотек — например, libc6 или xlib6g — которыми пользуется ваша программа. Таким образом, вы можете их не указывать. В нашем случае, мы оставляем строку 9 так как она есть.

Мы добавим строчку (которая станет строкой номер 10) со списком зависимостей типа Suggest. Здесь мы (пока только) укажем пакет file так как мы можем использовать некоторые из возможностей предоставляемых данным пакетом.

Строка 11 — это короткое описание. У большинства людей ширина экрана составляет 80 колонок, поэтому мы рекомендуем вам не превышать этот предел. Здесь мы напишем “A fully GUI configurable GTK+ file manager”.

В строке 12 мы укажем длинное (более полное) описание пакета. В первой колонке должен быть пробел. Пустых строк не должно быть. Если вам необходимо поместить в описание пустую строку, поместите после пробела (!) символ ‘.’ (точка). После описания не должно быть больше одной пустой строки.

Вот обновленный файл control: 1 Source: gentoo 2 Section: x11 3 Priority: optional 4 Maintainer: Josip Rodin <jrodin@jagor.srce.hr> 5 Standards-Version: 3.0.1 6 7 Package: gentoo 8 Architecture: any 9 Depends: ${shlibs:Depends} 10 Suggests: file 11 Description: A fully GUI configurable GTK+ file manager 12 gentoo is a file manager for Linux written from scratch in pure C. It 13 uses the GTK+ toolkit for all of its interface needs. gentoo provides 14 100% GUI configurability; no need to edit config files by hand and re- 15 start the program. gentoo supports identifying the type of various 16 files (using extension, regular expressions, or the 'file' command), 17 and can display files of different types with different colors and icons. 18 . 19 gentoo borrows some of its look and feel from the classic Amiga file 20 manager "Directory OPUS" (written by Jonathan Potter). (номера строк добавлены) Файл rules

Теперь вернемся в каталог debian и взглянем на файл rules, который используется программой для создания пакета. Обычно это просто еще один управляющий файл для программы make. Только он отличается от того, что предлагается вместе с исходными текстами.

Каждый файл rules, как и любой другой Makefile, содержит правила, определяющие как необходимо выполнять те или иные действия. Правила состоят из имени цели, имен файлов, и названий действий, которые необходимо выполнить (например, ‘build:’ или ‘install:’). Правила, которые вы хотите выполнить, должны быть указаны в командной строке (например, ‘rules build’ или ‘rules install’). После имени цели вы можете указать имя другой цели, название программы или файла, от которых зависит данная цель. Затем вы можете указать произвольной количество команд (первым символом в строке с командой должен быть символ табуляции!), пустая строка завершает правилоЕсли я не ошибаюсь, то правило завершается при нахождении названия следующей цели. Прим. переводчика Комментарии начинаются с символа диеза (‘#’) и идут до конца строки. Вы можете обращаться к правилам либо из других правил, либо из командной строки ‘debian/rules clean’).

Возможное недопонимание должно уйти, после того, как вы посмотрите на содержимое файла rules, который был создан программой dh_make. Вы также должны прочитать документацию к программе make. 1 #!/usr/bin/make -f 2 # Made with the aid of dh_make, by Craig Small 3 # Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess. 4 # Some lines taken from debmake, by Christoph Lameter. 5 6 # Uncomment this to turn on verbose mode. 7 #export DH_VERBOSE=1 8 9 build: build-stamp 10 build-stamp: 11 dh_testdir 12 13 14 # Add here commands to compile the package. 15 $(MAKE) 16 17 touch build-stamp 18 19 clean: 20 dh_testdir 21 dh_testroot 22 rm -f build-stamp install-stamp 23 24 # Add here commands to clean up after the build process. 25 -$(MAKE) clean 26 27 dh_clean 28 29 install: install-stamp 30 install-stamp: build-stamp 31 dh_testdir 32 dh_testroot 33 dh_clean -k 34 dh_installdirs 35 36 # Add here commands to install the package into debian/tmp. 37 $(MAKE) install DESTDIR=`pwd`/debian/tmp 38 39 touch install-stamp 40 41 # Build architecture-independent files here. 42 binary-indep: build install 43 # We have nothing to do by default. 44 45 # Build architecture-dependent files here. 46 binary-arch: build install 47 # dh_testversion 48 dh_testdir 49 dh_testroot 50 dh_installdocs 51 dh_installexamples 52 dh_installmenu 53 # dh_installemacsen 54 # dh_installinit 55 dh_installcron 56 dh_installmanpages 57 # dh_undocumented 58 dh_installchangelogs 59 dh_strip 60 dh_compress 61 dh_fixperms 62 dh_suidregister 63 dh_installdeb 64 dh_shlibdeps 65 dh_gencontrol 66 # dh_makeshlibs 67 dh_md5sums 68 dh_builddeb 69 70 source diff: 71 @echo >&2 'source and diff are obsolete - use dpkg-source -b'; false 72 73 binary: binary-indep binary-arch 74 .PHONY: build clean binary-indep binary-arch binary (номера строк добавлены)

Скорее всего, вы уже знакомы с форматом строки 1. Такая строка означает, что данный файл должен обрабатываться программой make. Пустые строчки игнорируются, строки, начинающиеся с символа диез (‘#’), являются комментариями и также игнорируются.

Строки с 9-й по 17-ую описывают правило ‘build’ (и подчиненной правило ‘build-stamp’), которое выполняет Makefile, идущий вместе с программой, и который позволяет скомпилировать программу.

Очень редко получается так, чтобы все сразу правильно работало, поэтому правило ‘clean’, описанное в строка 18-26, помогает удалить все ненужные рабочие файлы неудачных попыток.

Процесс установки — правило ‘install’ — начинается в строке 29. В строке 34 создаются все необходимые подкаталоги в каталоге debian. В строке выполняется цель ‘install’ из файла исходного файла Makefile — установка происходит в каталог debian/tmp — вот зачем мы использовали переменную DESTDIR для указания корневого каталога при установке программы.

Как указано в комментарии, правило ‘binary-indep’ в строках 41-43 используется для построения платформо-независимых пакетов, но в нашем примере такие отстутвуют.

Следующее правило — ‘binary-arch’ (строки 46-68) — использует несколько небольших утилит из пакета debhelper, которые выполняют действия, необходимые для того, чтобы ваш пакет удовлетворял требованиям Debian.

Названия команд начинаются с dh_, здесь мы приводим список команд и описание того, что они делают: проверяет, что вы находитесь в правильном каталоге (/usr/local/gentoo/gentoo-0.9.12/); проверяет, что вы обладаете необходимыми привилегиями (пользователя root); создает каталоге, перечисленные в файле directories dirs (в нашем примере этот файл не существует); копирует документацию в каталог debian/tmp/usr/share/doc/gentoo; копирует файл menu в каталог debian/tmp/usr/lib/menu/gentoo; копирует страницы руководства; копирует журналы изменений в каталог debian/tmp/usr/share/doc/gentoo; copies init.d script [doesn't exist here], копирует файл crontab в каталог debian/tmp/etc/cron.* (в нашем примере этот файл не существует); копирует файлы примеров в каталог debian/tmp/usr/share/doc/gentoo/examples (в нашем примере этот файл не существует); удаляет отладочную информацию из исполняемых файлов, что позволяет сделать их меньше; сжимает страницы Руководства и файлы документации программой gzip, если размер соответствующего файла превышает 4 Кбайт; проверяет и поправляет права доступа в каталоге debian/tmp; для каждой setuid-программы производит необходимые действия для регистрации при помощи программы (в нашем примере этот файл не существует); копирует управляющие файлы пакета в каталог debian/tmp/DEBIAN; определяет зависимости для исполняемых файлов; создает и устанавливает файл control; создает файл shlibs (в нашем примере этот файл не существует); вычисляет MD5-суммы; собственно строит пакет.

Каждый из dh_* сценариев описан в собственной странице Руководства, поэтому дополнительную информацию вам следует искать там. Здесь описаны не все сценарии, включенные в пакет debhelper, и если вам понадобится что-то еще, почитайте документацию к этому пакету (возможно, необходимый сценарий уже существует).

Строки 70-74 содержат необходимые заклинания, о которых вы можете прочитать в документации по программе make. Сейчас вы можете о них просто забыть.

Важно помнить, что файл rules, созданный программой dh_make, должен рассматриваться не более, чем рекомендации. Он будет правильно работать для простых пакетов; в случае же более сложных не бойтесь добавлять или удалять из него что-то, что необходимо вам для решения своих задач. Это в частности относится к правилу ‘binary-arch’, где вы должны закоментировать строки, в которых вы не нуждаетесь. В нашем случае мы закоментировали строки 47, 53, 54, 57 и 66. Единственное, что вы не должны менять, это названия правил, так как они должны называться именно таким образом, что, в частности, требуется «Руководством по созданию пакетов».

Разумеется кое-что нужно сделать и в нашем примере: в строке 58 было добавлено ‘FIXES’, так как это и есть название журнала изменений. Для дополнительной информации, читайте страницы Руководства для используемых программы dh_*. Другие файлы в каталоге debian/ Файл copyright

Этот файл содержит информацию об авторских правах на пакет. Документ «Политика Debian» диктует не формат этого файла, но его содержание (см. раздел 6.5). Вот как выглядит файл, созданный программой dh_make: 1 This package was debianized by Josip Rodin <jrodin@jagor.srce.hr> on 2 Wed, 11 Nov 1998 21:02:14 +0100. 3 4 It was downloaded from <fill in ftp site> 5 6 Upstream Author(s): <put author(s) name and email here> 7 8 Copyright: 9 10 <Must follow here> (номера строк добавлены)

В этот файл необходимо добавить: место (ftp- или web-сервер), где вы взяли исходные пакет; информацию об авторских правах (включите полную информацию). Если лицензионное соглашение — это одно из популярных “свободных” лицензий (например, GNU GPL, GNU LGPL, BSD или Artistic), вы можете просто сослаться на соответствующий файл в каталоге /usr/share/common-licenses/, который существует в каждой системе Debian. Программа gentoo лицензирована в соответствии с GNU General Public License, поэтому измененный файл copyright будет выглядеть таким образом: 1 This package was debianized by Josip Rodin <jrodin@jagor.srce.hr> on 2 Wed, 11 Nov 1998 21:02:14 +0100. 3 4 It was downloaded from: ftp://ftp.obsession.se/gentoo/ 5 6 Upstream author: Emil Brink <emil@obsession.se> 7 8 This software is copyright (c) 1998-99 by Emil Brink, Obsession 9 Development. 10 11 You are free to distribute this software under the terms of 12 the GNU General Public License. 13 On Debian systems, the complete text of the GNU General Public 14 License can be found in /usr/share/common-licenses/GPL file. (номера строк добавлены) Файл README.Debian

Любая дополнительная информация или различия между программой в вашем пакете и исходной программой должны быть описаны в файле README.Debian. Программ dh_make создает такой файл: gentoo for Debian ---------------------- <possible notes regarding this package - if none, delete this file> Josip Rodin <jrodin@jagor.srce.hr>, Wed, 11 Nov 1998 21:02:14 +0100

Так как в нашем примере нам нечего поместить в этот файл, мы его удалим. Файл changelog

Это обязательный файл, имеющий специальный формат (описан в «Руководстве по созданию пакетов» (раздел 3.2.3)). Этот файл используется программой dpkg и другими для получения информации о версии, ревизии, разделе, и срочности для вашего пакета.

Он также важен и для вас, так как регистрировать все изменения очень помогает в последствии. Он также поможет людям, загрузившим ваш пакет, сразу понять, что именно изменилось в вашем пакете. После установки пакета, этот файл будет доступен как /usr/share/doc/gentoo/changelog.Debian.gz.

Программа dh_make создала такой файл: 1 gentoo (0.9.12-1) unstable; urgency=low 2 3 * Initial Release. 4 5 -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 21:02:14 +0100 6 7 Local variables: 8 mode: debian-changelog 9 End: (номера строк добавлены)

В первой строке указаны название пакета, версия программы, ревизия пакета, раздел, и срочность. Имя должно совпадать с названием пакета с исходными текстами. Раздел должен быть ‘unstable’ (нестабильный) или ‘experimental’ (экспериментальный). Срочность не должна заменяться на что-либо большее, чем ‘low’ (низкая). :-)

Строки 3-5 суть запись в журнале, это то, где вы регистрируете все сделанные над пакетом изменения (это не изменения сделанные авторами программы — для регистрации этих изменений используется отдельный файл, созданный авторами программы, и который устанавливается как /usr/share/doc/gentoo/changelog.gz). Новые строки должны включаться перед строкой, которая начинается с символа звездочка (‘*’). Программа dch упростит вам работу, вы также можете использовать программу emacs (строки 7-9 содержат информацию специально для нее). Либо вы можете воспользоваться любым текстовым редактором. В результате у вас должно получиться что-то подобное: 1 gentoo (0.9.12-1) unstable; urgency=low 2 3 * Initial Release. 4 * This is my first Debian package. 5 * Adjusted the Makefile to fix $DESTDIR problems. 6 7 -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 21:02:14 +0100 8 9 Local variables: 10 mode: debian-changelog 11 End: (номера строк добавлены)

Когда вы выпускаете новую версию пакета, вы должны увеличить номер версии пакета. Вы можете сделать это с помощью команды ‘dch -v версия-ревизия’, а затем добавить комментарии при помощи вашего любимого текстового редактора. Совет: как получить дату в необходимом формате? Используйте команду ‘822-date’ или команду ‘date -R’

Информация о новой версии добавляется в начало файла changelog. Вот как может выглядеть этот файл после изменений: 1 gentoo (0.9.12-2) unstable; urgency=low 2 3 * Fixed a glitch in the menu file. 4 5 -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 22:15:39 +0100 6 7 gentoo (0.9.12-1) unstable; urgency=low 8 9 * Initial Release. 10 * This is my first Debian package. 11 * Adjusted the Makefile to fix $DESTDIR problems. 12 13 -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 21:02:14 +0100 14 15 Local variables: 16 mode: debian-changelog 17 End: (номера строк добавлены) Файл conffiles

Одна из самых неприятных (и раздражающих) вещей, которая может случиться, это когда после того, как вы потратили очень много времени и усилий на то, чтобы настроить программу, а при очередном обновлении все ваши настройки исчезли. Debian предлагает решение этой проблемы, через специальный механизм работы с конфигурационными файлами: все конфигурационные файлы должны быть помечены как таковые, это позволит при обновлении проверить не изменились ли данные файлы, и, если они изменились, спросить у вас, нужно ли заменить старые конфигурационные файлы теми, что пришли в новом пакете. Для того, чтобы это сделать это, вы должны в файле conffiles указать полные пути к каждому конфигурационному файлу (обычно они находятся в каталоге /etc). Одни файл в одной строчке.

У программы gentoo есть только один конфигурационный файл — /etc/gentoorc — и мы укажем его в файле conffiles. Если у вашей программы нет конфигурационных файлов, вам этот файл не нужен. Файл dirs

Этот файл содержит названия каталогов, которые необходимы, но которые ну создаются командой установки программы (‘make install’).

По умолчанию, он содержит следующие строки: usr/bin usr/sbin

Заметьте, что начальный символ ‘косая черта’ отсутствует. В нашем случае, необходимо изменить этот файл следующим образом: usr/X11R6/bin usr/X11R6/man/man1 но эти каталоги создаются командой ‘make install’, поэтому нам этот файл не нужен и мы можем его легко удалить. Файл manpage.1.ex

Файлы, имеющие расширение .ex, представляют собой примеры тех дополнительных файлов, которые вам могут понадобится. Для того, чтобы воспользоваться ими, удалите расширение .ex. Если вы не собираетесь их использовать, просто удалите их!

Для вашей программа должна присутствовать страница Руководства. Если ее нет, вы должны заполнить шаблон manpage.1.ex. Краткое описание того, как создавать страницы Руководства, смотрите в . Не забудьте переименовать этот файл, чтобы его имя соответствовало имени программы, а расширение — разделу Руководства, в который должна попасть данная страница. Вот короткий список разделов: Раздел | Описание | Примечание 1 Команды пользователя Программы и сценарии 2 Системные вызовы Функции, предоставляемые ядром 3 Библиотечные вызовы Функции, предоставляемые различными библиотеками 4 Специальные файлы Обычно файлы в каталоге /dev 5 Форматы файлов Например, формат файла /etc/passwd 6 Игры Или другие развлекательный программы 7 Макро пакеты Например, макросы пакета man 8 Системное администрирование Программы, которые обычно запускаются только пользователем root 9 Kernel routines Нестандартные вызовы и информация о внутреннем строении

Таким образом, страница Руководства для программы gentoo должна называться gentoo.1, or gentoo.1x, так как это программа. В исходных текстах страница Руководства отсутствовала, поэтому нам пришлось написать собственную, используя информацию из файла примера и документации к программе. Файл menu.ex

Пользователи X Window System обычно используют диспетчеры окон, которые поддерживают меню программ. Если у них установлен пакет menu, им станет доступным набор стандартных меню для каждой установленной программы. Это не является обязательным с точки зрения «Политики Debian», но обычно пользователи с удовольствием используют данную возможность. Мы можем добавить меню для программы gentoo, соответствующим образом подправив данный файл. Вот, что создала программа dh_make: ?package(gentoo):needs=X11|text|vc|wm section=Apps/see-menu-manual\ title="gentoo" command="/usr/bin/gentoo"

Значение первого поля указывает тип интерфейса, требуемого для программы (например, текст (text) или X11). Затем перечислены путь в меню, где должна появиться соответствующая запись. Актуальный список разделов доступен в как /usr/share/doc/debian-policy/menu-policy.html/ch2.html#s2.1. Третье поле — название программы. Четвертое — название файла со значком для программ (или отсутствует, если значка нет). Пятое — текст, который появится в меню. И, наконец, шестое — команда, которая запускает программу.

В нашем случае, данный файл будет выглядеть так: ?package(gentoo):needs=X11 section=Apps/Misc \ title="Gentoo" command="/usr/X11R6/bin/gentoo"

Для дополнительной информации смотрите , и /usr/share/doc/debian-policy/menu-policy.html/. Файл watch.ex

Данный файл может быть использован программами и (они предоставляются пакетом devscripts) для отслеживания серверов, откуда вы загрузили исходные тексты программы. Вот, например, что находится в этом файле в пакете gentoo: # watch control file for uscan # Site Directory Pattern Version Script ftp.obsession.se /gentoo gentoo-(.*)\.tar\.gz debian uupdate

Совет: подсоединитесь к Интернету и попробуйте запустить программу uscan, находясь в каталоге программы после того, как вы создали этот файл. И прочитайте документацию на эту программу! Файлы postinst.ex, preinst.ex, postrm.ex, prerm.ex

Эти файлы называются служебными сценариями. Возможно, пока вам следует избегать создания данных сценариев, так как они имеют тенденцию усложняться со временем. Подробную информацию вы можете найти в «Руководстве по созданию пакетов», также просмотрите файлы примеров, созданные программой dh_make.

Теперь все должно быть готово к построению пакета. Завершающие шаги Строим пакет

Перейдите в основной каталог программы (/usr/local/src/gentoo/gentoo-0.9.12/) и выполните команду: dpkg-buildpackage -rfakeroot

Эта команды сделает все, что необходимо. Все, что вам необходимо будет сделать, это ввести фразу-пароль для вашего секретного PGP-ключа. Дважды! После того, как команда завершит свою работу, в каталоге /usr/local/gentoo следующие файлы: gentoo_0.9.12-1_i386.deb это результат вашей работы — двоичный пакет. Вы можете воспользоваться программой dpkg или dselect для того, чтобы установить его (а затем и удалить) как любой другой каталог. gentoo_0.9.12.orig.tar.gz Этот файл содержит оригинальные исходные тексты программы. Они необходимо для того, чтобы если кто-нибудь захочет перекомпилировать ваш пакет, мог это сделать. Или же, если они не используют систему управления пакетами Debian, но хотят загрузить исходные тексты программы и скомпилировать ее. gentoo_0.9.12-1.dsc Этот файл содержит краткое описание исходных файлов для пакета. Этот файл создается с использованием информации из файла gentoo-0.9.12/debian/control и необходим для распаковки исходных текстов командой . Содержимое этого файла имеет вашу цифровую подпись, что позволяет другим людям удостовериться, что именно вы создали его. gentoo_0.9.12-1.diff.gz Этот файл содержит (в формате ‘unified diff’) все изменения, которые вам понадобилось сделать с исходными текстами. Он был создал и используется программой . gentoo_0.9.12-1_i386.changes Этот файл описывает изменения, сделанные в данной версии пакета по сравнению с предыдущей версией. Он используется программами поддержки ftp-архива Debian для помещения пакетов (как двоичных так и содержащих исходные тексты) в архив. Он содержит как информацию из файла gentoo-0.9.12/debian/changelog так и из файла .dsc.

По мере того, как вы будете работать над вашим пакетом, вы можете добавлять новую функциональность или просто поменять его поведение. Люди, загружающие ваш пакет могут сразу увидеть в этом файле, что именно изменилось. Длинные строки цифр — это md5-суммы всех перечисленных файлов. Человек, которые загрузил ваши файлы, может проверить их при помощи программы и, если значения контрольных сумм не совпадает, он точно будет знать, что это не те файлы, что создали вы (могла произойти ошибка при загрузке либо же кто-то “поправил” их). Этот файл также имеет цифровую подпись содержимого с тем, чтобы люди имели большую уверенность, что он был создан вами. Поиск ошибок в пакете

Запустите программу на файл .changes; эта программа проверит пакет на наличие стандартных ошибок. Команда выглядит так: lintian -i gentoo_0.9.12-1_i386.changes

Если окажется, что какие-то ошибки присутствуют (это все строки, начинающиеся с E:), внимательно прочитайте объяснение (строки, начинающиеся с N:), исправьте ошибки и попробуйте снова построить пакет. Если вы увидели только строки, начинающиеся с W: (предупреждения), то вы можете быть уверены, что ваш пакет, скорее всего, правилен (но, разумеется, требует дополнительной работы).

Проверьте содержимое пакета при помощи менеджера файлов (например, ) или распакуйте его во временный каталог при помощи программы .

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

Позже, когда вы будет создавать новую версию пакета, для того, чтобы убедиться, что обновление будет происходить без ошибок, вы должны проверить следующее: попробуйте обновить предыдущую версию пакета (а также версию, включенную в последний выпуск Debian); попробуйте back again, установите пакет как новый (в систему, в которой отсутвуют предыдущие версии пакета); удалите его, установите заново, и, наконец, вычистите его. Загрузка вашего пакета

Теперь, когда вы тщательно оттестировали свой пакет, настало время загрузить все необходимые файлы на сервер master.debian.org. Для этого вы должны воспользоваться программой . Сначала вы должны создать конфигурационный файл ~/.dupload.conf. Поместите в него что-нибудь похожее на: package config; $default_host = "master"; $cfg{master}{"method"} = "scpb"; $cfg{master}{"login"} = "joy"; $cfg{master}{"visibleuser"} = "jrodin"; $cfg{master}{"visiblename"} = "jagor.srce.hr"; $cfg{master}{"fullname"} = "Josip Rodin"; $cfg{non-us}{"method"} = "scpb"; $cfg{non-us}{"login"} = "joy"; $cfg{non-us}{"visibleuser"} = "jrodin"; $cfg{non-us}{"visiblename"} = "jagor.srce.hr"; $cfg{non-us}{"fullname"} = "Josip Rodin"; 1;

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

Теперь подсоединитесь к вашему Интернет-провайдеру, перейдите в каталог /usr/local/src/gentoo и выполните команду: dupload --to master gentoo_0.9.12-1_i386.changes

Программа dupload попросит ввести ваш пароль на машине master.debian.org, загрузит пакеты и пошлет, если необходимо, информацию о загруженных файлах в список рассылки debian-devel-changes@lists.debian.org.

Если вы живете в Европе, вы можете воспользоваться другой машиной для загрузки ваших пакетов. Для дополнительной информации смотрите , и «Руководство разработчика». Где искать помощь

Прежде всего (перед тем, как задавать свой вопрос в одном из форумов!), пожалуйста, прочитайте документацию (RTFM!). Это включает документацию в каталогах /usr/share/doc/dpkg, /usr/share/doc/debian, /usr/share/doc/package/*, а также страницы Руководства и или info-страницы для всех упомянутых в этой статье программ. Если вы получили сообщение об ошибке (да, да, настоящее сообщение об ошибке!), это означает, что настало время посетить и ознакомиться с необходимой документацией. Это позволит вам эффективно работать с сообщениями об ошибках.

Подписавшись на список рассылки , вы можете попросить помощи у опытных разработчиков Debian. Для того, чтобы подписаться на этот список рассылки, пошлите письмо по адресу debian-mentors-request@lists.debian.org, указав слово ‘subscribe’ в поле темы письма.

Если у вас остались вопросы, задайте их в список рассылки разработчиков Debian по адресу debian-devel@lists.debian.org. Вы можете подписаться на него, послав письмо по адресу debian-devel-request@lists.debian.org, в теме которого будет слово 'subscribe'. Если вы уже стали разработчиком Debian, вам следует подписаться на него в любом случае.

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

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