Руководство начинающего разработчика Debian ------------------------------------------- Josip Rodin Перевод: Михаил Соболев, Перевод: Алексей Выскубов, версия 1.0.2, 10 June 2001 (?) ------------------------------------------------------------------------------- Сведения об авторских правах ---------------------------- Copyright (C) 1998-2001 Josip Rodin. This document may used under the terms the GNU General Public License version 2 or higher. This document was made using with these two documents as examples: Making a Debian Package (AKA the Debmake Manual), copyright (C) 1997 Jaldhar Vyas. The New-Maintainer's Debian Packaging Howto, copyright (C) 1997 Will Lowe. ------------------------------------------------------------------------------- Содержание ---------- 1. Хорошее начало --- половина дела 1.1. Программы, которые вам понадобятся 1.2. Прочая информация 2. Первые шаги 2.1. Выберите программу 2.2. Возьмите программу и попробуйте ее 2.3. Перед запуском программы `dh_make' 2.4. Запуск программы `dh_make' 3. Изменение исходных текстов 3.1. Установка в необходимый каталог 3.2. Проблемы с библиотеками 4. Обязательные файлы в каталоге `debian/' 4.1. Файл `control' 4.2. Файл `copyright' 4.3. Файл `changelog' 4.4. Файл `rules' 5. Другие файлы в каталоге `debian/' 5.1. Файл `README.Debian' 5.2. Файл `conffiles' 5.3. Файл `dirs' 5.4. Файл `manpage.1.ex' 5.5. Файл `menu.ex' 5.6. Файл `watch.ex' 5.7. Файл `ex.doc-base' 5.8. Файлы `postinst.ex', `preinst.ex', `postrm.ex', `prerm.ex' 6. Завершающие шаги 6.1. Построение пакета 6.2. Поиск ошибок в пакете 6.3. Загрузка пакета 6.4. Обновление пакета 6.5. Где искать помощь ------------------------------------------------------------------------------- 1. Хорошее начало --- половина дела ----------------------------------- Этот документ описывает процесс создания пакетов для 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!)[1]. Одна из сильных, по сравнению с другими дистрибутивами, сторон Debian GNU/Linux --- это система управления пакетами. Несмотря на то, что для Debian уже существует очень много пакетов, может случиться так, что вам понадобится установить программу, для которой не существует соответствующего пакета. Это может заставить вас задуматься о том, как создать свой собственный пакет. :) Да, вам понадобятся некоторые знания о программировании под Unix, но ни в коем случае вы не обязаны быть гуру. Последняя версия этого документа всегда доступна как http://www.debian.org/doc/maint-guide/, вы также можете найти этот документ в пакете `maint-guide-ru'[2]. [1] _Путь длинен, если изучать правила, но короток и эффективен, если пользоваться примерами!_ [2] А английскую версию --- в пакете `maint-guide' 1.1. Программы, которые вам понадобятся --------------------------------------- Сначала вы должны установить все необходимые для разработки пакеты. Заметьте, что ниже приведенный список не содержит пакеты приоритетов `essential' или `required' --- эти пакеты уже установлены на вашу машину. На момент написания этого документа официальной стабильной версией был выпуск 2.1 (`slink'), а выпуск 2.2 (`potato') только создавался. Поэтому большинство пакетов, упомянутых здесь, взяты из `potato'. Нижеперечисленные пакеты присутствуют в стандартной поставке Debian 2.1, что означает, что скорее всего они уже установлены на вашей машине (как, впрочем, и пакеты, перечислинные в зависимостях к этим). Несмотря на это, мы рекомендуем вам при помощи команды `dpkg -s <имя-пакета>' проверить, что они установлены. `binutils' Программы, входящие в этот пакет, позволяют работать с объектными файлами --- файлы, из которых <<собираются>> программы. (см. `info binutils') `cpp' Препроцессор языка C. (см. cpp(1)) `cpio' Программа архивирования, как, например, `tar' или `zip' (см. cpio(1)). `dpkg-dev' Этот пакет содержит все утилиты, необходимые для распаковки, создания и загрузки исходных пакетов Debian (см. dpkg-source(1)). `file' Эта полезная программа позволяет определить тип файла (см. file(1)). `gcc' Компилятор языка C от GNU. Большинство программ Linux написаны на языке C. Однако если ваша программа написана на каком-то другом языке программирования, например, C++, Fortran, Pascal, или другим, вы должны установить соответствующий пакет (`g++', `g77', `gpc' или другой). (см. gcc(1), g++(1), g77(1), gpc(1)) `libc6-dev' Библиотека языка C и файлы заголовков, необходимые программе `gcc'. Несмотря на то, что некоторые программы все еще рекомендуют и/или используют libc5, мы рекомендуем вам использовать новую версию (libc6). (см. `info libc') `make' Обычно процесс создания программы состоит из нескольких шагов, которые необходимо выполнять в определенном порядке. Вместо того, чтобы вводить одни и те же команды снова и снова, вы можете воспользоваться этой программой для автоматизации всего процесса. В некоторых случаях следует использовать утилиты `imake' и `xmkmf' (они позволяют создавать make-файлы из файлов специального вида). Многие современные программы создают сценарий `configure' и make-файлы при помощи утилит `autoconf' и `automake', поэтому вам также могут понадобиться эти утилиты (см. `info make', imake(1), xmkmf(1), autoconf(1), automake(1)). `patch' Эта очень полезная программа изменяет исходный файл в соответствии со списком различий между файлами, полученным при помощи программы `diff' (см. patch(1)). `perl5-5.005' Perl --- один из наиболее используемых интерпретируемых языков в Un*x-системах. Его часто называют ``Unix's Swiss Army Chainsaw'' (Универсальная пила) (см. perl(1)). Из раздела `devel' вам могут понадобиться следующие пакеты: `dh-make' `debhelper' Программа `dh_make' необходима для создания скелета будущего пакета. При этом в получающихся управляющих файлах будут использованы программы из пакета `debhelper'. При создании пакетов вовсе не обязательно использовать эти программы, но мы _очень_ рекомендуем их начинающим разработчикам. Они позволяют сильно упростить процесс создания и поддержки пакетов (см. dh_make(1), debhelper(1), `/usr/share/doc/debhelper/README'). `devscripts' Этот пакет содержит несколько простых и полезных, но не являющихся необходимыми для создания пакетов, сценариев (см. `/usr/share/doc/devscripts/README.gz'). `fakeroot' Эта утилита позволит вам создавать пакеты, не пользуясь привилегиями пользователя root (которые необходимы на некоторых этапах) (см. fakeroot(1)). `lintian' Эта программа предназначена для проверки пакетов Debian. Она позволяет убедиться, что при создании пакета не было допущено ни одной из <<стандартных>> ошибок (см. lintian(1), `/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'). Вам также понадобится (для создания цифровой подписи к пакету) программа зашифрования --- либо PGP (пакеты `pgp-*'), либо GPG (пакет `gnupg'). Это особенно важно, если вы хотите предоставлять ваш пакет другим людям (вне всякого сомнения, вы будете делать это после того, как ваша работа будет включена в дистрибутив Debian). Однако, в силу несколько странного экспортного законодательства США, вы не можете загрузить необходимые программы зашифрования с ближайшего зеркала Debian. Несмотря на это, Debian предоставляет эти пакеты через сервер, физически находящийся в стране, отличной от США, и называемый non-US.debian.org (ftp://non-us.debian.org/debian-non-US/). На вашем зеркале вы можете найти файл `README.non-US', который описывает как вы можете найти ближайшее зеркало этого сервера. Перед началом работы над созданием пакета мы рекомендуем вам прочитать документацию на все программы, которые вы будете использовать. Это может сначала показаться излишеством, но потом вы будете _очень_ рады, что прислушались к нашему совету... _Внимание:_ Пакет `debmake' содержит программы, аналогичные по функциональности программам, входящим в пакет `dh-make'. Описание пакета `debmake' _не приводится_ в этом документе. Вы можете найти дополнительную информацию на странице the Debmake manual (http://www.debian.org/~jaldhar/). 1.2. Прочая информация ---------------------- Вы можете создавать пакеты двух типов: двоичные пакеты и пакеты с исходными текстами. Последние содержат код, который позволяет скомпилировать программу и создать пакет. Двоичные пакеты содержат только скомпилированную программу. Пожалуйста, не путайте исходные тексты программы и пакет с исходными текстами. Debian использует термин _сопровождающий_ либо _разработчик пакета_ (maintainer) для человека, который создает пакеты, _автор_ (author) для человека, который создал программу, и _активный автор_ (upstream maintainer) для человека, осуществляющего работу над программой в настоящий момент времени. Обычно автор и активный автор являются одним и тем же человеком (а иногда тот же человек выступает и в роли сопровождающего). Если вы создали программу и хотите, чтобы ее включили в Debian, вы можете сделать это, подав соответствующее заявление. Для того, чтобы ваш пакет попал в следующий выпуск Debian (почему бы и нет, если программа полезна?), вы должны стать официальным разработчиком Debian. Этот процесс описан в <<Руководстве разработчика>>. Пожалуйста, прочитайте этот документ. ------------------------------------------------------------------------------- 2. Первые шаги -------------- Так как на страницах Уголок разработчика (http://www.debian.org/devel/) нет достаточно четкой информации о том, где и как новые разработчики должны начинать свою работу, ниже мы попытаемся объяснить каждый (что может показаться излишним) шажок и помочь вам создать первый пакет, что позволит вам получить некий опыт для создания последующих пакетов. 2.1. Выберите программу ----------------------- При выборе пакета, над которым вы собираетесь работать, вы должны иметь в виду следующие моменты: * проверьте существует ли данный пакет в дистрибутиве. Если вы используете `стабильный' выпуск, лучше всего будет посетить страницу Поиск пакетов (http://www.debian.org/distrib/packages.html). Если же вы используете _текущий_ `нестабильный' выпуск, для проверки лучше использовать следующие команды: dpkg -s название_программы dpkg -l '*название_программы*' * Посмотрите в списке Будущие и требующие работы пакеты (http://www.debian.org/devel/wnpp/) и архивах списка рассылки debian-devel --- не работает ли уже кто-нибудь над этим пакетом. Если работа уже ведется, но вы все-таки хотите работать над этим же пакетом, свяжитесь с текущим разработчиком. Если же вы не против создать другой пакет, поищите другую интересную программу, над которой еще никто не работает. * Пакет должен содержать программу. Не пытайтесь пока создавать пакеты для библиотек. * У программы _обязательно_ должна быть лицензия. Желательно, чтобы она позволяла квалифицировать данную программу как свободно распространяемую в соответствии с Debian Free Software Guidelines (http://www.debian.org/social_contract.html#guidelines). Если лицензия не соответствует каким-либо пунктам этих правил, вы все равно можете включить ваш пакет в один из разделов `contrib' или `non-free'. Если вы не уверены, в какой раздел данный пакет должен быть помещен, спросите в списке рассылки . * Программа _не должна_ требовать режима setuid root, а еще лучше --- вообще не требовать режима доступа setuid или setgid. * Программа не должна быть демоном или чем-то, что должно быть помещено в каталоги `*/sbin'. * Программа должна быть хорошо документирована или, по крайней мере, понятна (всем). * Вы должны связаться с авторами программы, чтобы убедиться, что они не против создания пакета с их программой. Возможность консультироваться с авторами программы по поводу тех или иных моментов обычно очень важна, поэтому лучше не пытайтесь создавать пакеты для неподдерживаемых программ. * И, наконец, программа должна использоваться вами в течение некоторого времени, чтобы вы могли быть уверены, что она работает. Разумеется, все перечисленное --- это всего лишь меры безопасности, которые спасут вас от разъяренных пользователей, если вы сделали что-то не так в ftp-демоне... Как только вы приобретете определенный опыт, вы сможете создавать любые пакеты --- но помните, что даже опытные разработчики, если у них есть какие-то сомнения, обращаются за помощью в список рассылки debian-devel. Подписчики этого списка рассылки всегда рады помочь. Дополнительную информацию вы можете найти в <<Руководстве разработчика>>. 2.2. Возьмите программу и попробуйте ее --------------------------------------- Итак, первое, что вы должны сделать --- это найти и загрузить исходные тексты программы. Скорее всего, у вас уже есть исходные тексты, которые вы взяли с домашней странички автора. Исходные тексты программ для Linux обычно предоставляются в виде архива в формате tar-gzip и имеют расширение `.tar.gz' (или `.tgz'). Внутри архива обычно находится каталог <программа>-<версия>, в котором находятся все файлы исходных текстов програмы. Если исходные тексты выбранной вами программы поставляются в другом виде (например, имя файла оканчивается на `.Z' или `.zip'), распакуйте его соответствующими средствами или спросите в списке рассылки debian-mentors, если вы не знаете как это правильно сделать (подсказка: выполните команду `file <архив.расширение>'). Для примера мы будем использовать программу `gentoo' --- использующий библиотеку GTK+ менеджер файлов для X11. Заметьте, что для этой программы уже создан пакет и он постоянно обновляется. В вашем домашнем каталоге создайте подкаталог с именем `debian', `deb' или что-нибудь, что вы найдете подходящим (например, в нашем случае можно было бы использовать `gentoo'). Поместите загруженный архив в этот каталог и распакуйте его при помощи команды `tar -xzf gentoo-0.9.12.tar.gz'. Убедитесь, что при этом не возникло никаких (даже, казалось бы, не относящихся к делу) ошибок (наличие каких-либо предупреждений на вашей машине означает, что на машине, где для распаковки этого архива используются другие программ, данных архив может и не распаковаться). В результате вы получите подкаталог `gentoo-0.9.12'. Перейдите в этот каталог и _внимательно_ прочитайте имеющуюся информацию. Обычно полезными оказываются файлы `README*', `INSTALL*', `*.lsm' и `*.html'. Здесь вы найдете инструкции, которые позволят вам правильно скомпилировать и установить программу (скорее всего в каталог `/usr/local/bin'; вы должны будете установить программу в другой каталог, подробнее об этом в разделе раздел 3.1, `Установка в необходимый каталог'). Дальнейшая последовательность действий будет зависеть от конкртной программы. Однако современные программы обычно поставляются со сценарием `configure', который позволяет получить параметры, необходимые для компиляции программы в вашей системе (также производится проверка, что в вашей системе компиляция данной программы вообще возможна). После настройки (выполните команду `./configure') вы можете скомпилировать вашу программу при помощи команды `make'. В некоторых случаях вы можете запустить внутренние тесты при помощи команды `make check'. Затем установите ее при помощи команды `make install'. Итак, скомпилируйте программу и попробуйте ее запустить, чтобы убедиться, что она правильно работает и ничто другое не было испорчено. Вы также можете попытать воспользоваться командой `make uninstall' для того, чтобы удалить все установленные файлы. Команда `make clean' позволит вам очистить ваш рабочий каталог. 2.3. Перед запуском программы `dh_make' --------------------------------------- Свою работу вы должны начать в каталоге, свободном от временных и/или рабочих файлов. Для того, чтобы правильно построить пакет, вы должны поместить исходные тексты программы в каталог <название пакета>-<версия>. Убедитесь, что название каталога содержит буквы только нижнего регистра. Если название состоит из больше, чем одного слова, попробуйте сократить его или создать какую-нибудь аббревиатуру[1]. Например, если название программы ``John's little editor for X'', название пакета может быть `johnledx', `jle4x' или что-нибудь, что вам покажется подходящим. Мы рекомендуем не превышать длину в 20 символов в названии пакета. Вам также необходимо знать точную версию программы (эта информация будет использована в версии пакета). Если программа нумеруется не как X.Y.Z, а датой, вы можете использовать эту дату, приписав перед ней ``0.0.'' (на всякий случай, вдруг когда-нибудь авторы программы решать выпустить версию 1.0). Таким образом, если программа была выпущена 19-го декабря 1999 года, вы можете указать 0.0.19981219 в качестве версии. Версии некоторых программ вообще никак не нумеруются. В таком случае мы рекомендуем вам связаться с авторами программы и выяснить, не используют ли они какую-нибудь другую схему отслеживания версий. [1] Я не совсем понимаю, зачем это может понадобится. _Прим. переводчика_. 2.4. Запуск программы `dh_make' ------------------------------- Перейдите в каталог, в котором находятся исходные тексты программы и выполните команду dh_make -e ваш@электронный.адрес -f ../gentoo-0.9.12.tar.gz Разумеется, вы должны заменить <ваш@электронный.адрес> на ваш реальный адрес, который будет использован в различных служебных файлах пакета (`debian/changelog', `debian/control', ...), а имя файла --- на имя архива, содержащего оригинальные исходные тексты (см. dh_make(1)). Теперь от вас понадобится дополнительная информация. Вы должны указать тип пакета, который вы собираетесь создать. В случае программы `gentoo' мы хотим создать один пакет, содержащий программу (single binary package), поэтому мы выберем первый пункт, нажав на клавишу `s'. Проверьте информацию, выведенную на экран и, если все правильно, нажмите на клавишу Enter. Так как для вас это первый пакет, мы не рекомендуем вам создавать проект, позволяющий построить сразу несколько пакетов (multi-binary package), или проект, содержащий библиотеку. Это не сложно, нет, просто такая задача требует немного больше информации, поэтому мы не будем это описывать в этом документе. Помните, что вам необходимо запускать программу `dh_make' _только один раз_. Если вы попытаетесь запустить ее еще раз, она может сработать неправильно. Это также означает, что для создания новой версии пакета, вы должны использовать другой подход. Это описано в разделе раздел 6.4, `Обновление пакета'. ------------------------------------------------------------------------------- 3. Изменение исходных текстов ----------------------------- Обычно программы устанавливаются в каталог `/usr/local'. Пакеты, входящие в состав Debian, не должны использовать этот каталог, поскольку он зарезервирован для системного администратора (или пользователей). Это означает, что вы обязательно должны изучить систему построения вашей програмы, обычно вся необходимая информация содержится в файле `Makefile'. В этом файле (для подробной информации см. make(1)) находятся команды, позволяющие автоматизировать процесс построения данной программы. Подробно об этом файле мы говорим в разделе раздел 4.4, `Файл `rules''. Заметьте, что если выбранная вами программа использует GNU automake(1) и/или autoconf(1) (что означает у вас присутствуют файлы `Makefile.am' или/и `Makefile.in' соответственно), вы должны будете изменять именно эти файлы, так как программа `automake' использует информацию в файле `Makefile.am' для создания нового файла `Makefile.in', а сценарий `configure' использует информацию в файле `Makefile.in' для создания нового файла `Makefile'. Изменение файла `Makefile.am' требует определенных знаний о программе `automake', изменение же файла `Makefile.in' практически то же самое, что и изменение файла `Makefile', однако вы должны правильно использовать переменные (имена, окруженные символом `@'), например `@CFLAGS@', `@LN_S@'; они будут заменены на значения, указанные при запуске сценария `./configure'. Мы не можем охватить _все_ проблемы, с которыми вы можете столкнуться, но все-таки мы попытались перечислить те из них, с которыми вы, скорее всего, столкнетесь. 3.1. Установка в необходимый каталог ------------------------------------ В большинстве случаев, программы устанавливаются в существующую иерархию каталогов вашей системы таким образом, чтобы исполняемый файл попал в один из каталогов, указанных в переменной среды $PATH, а файлы документации и страницы Руководства оказались в стандартных местах. Вы должны убедиться, что операция установки выполняется правильно, но при этом вы должны сделать так, чтобы все необходимые файлы могли быть установлены во временный каталог, который будет создан в каталоге `debian/' (обычно этот временный каталог называется `debian/tmp'), это позволит стандартным программам разработчика построить результирующий пакет. Все, что находится в этом временном каталоге, появится в системе пользователя при установке вашего пакета. Единственное отличие состоит в том, что программа `dpkg' будет устанавливать эти файлы по отношению к корневому каталогу. Вообще говоря, вам нужно установить программу в каталог `debian/tmp', но при этом она должна себя правильно вести, если ее поместить в корневой каталог, то есть, если установить пакет. Если процесс построения использует программы `GNU autoconf', то программа `dh_make' добавит необходимые команды с тем, чтобы необходимое действие выполнялось автоматически, а вы можете пропустить данный раздел. В других случаях вам, скорее всего, понадобится просмотреть и поправить `make'-файлы. Вот, например, соответствующая часть файла `Makefile' программы `gentoo'[1]: # Куда поместить исполняемые файлы по команде 'make install'? BIN = /usr/local/bin # Куда поместить значки по команде 'make install'? Внимание: если вы # поменяете это значение, при старте программа gentoo может не найти # этих значков. Вам придется поменять значение параметра 'путь к значкам' # (в окне настроек страничка "Пути"). ICONS = /usr/local/lib/gentoo/ Прежде всего вы должны добавить две строчки, которые говорят: # Добавлено для Debian GNU/Linux. DESTDIR = так как процесс построения требует что-то подобное (об этом вы можете прочитать в раздел раздел 4.4, `Файл `rules''). В файле `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 -nr -e 'usr/local/lib' --include='*.[c|h]' . (ее нужно выполнить в каждом каталоге, в котором присутствуют файлы с расширением `.c' или `.h'). Программа `grep' выведет названия файлов и номера строк, в которых присутствует `usr/local/lib'. Теперь измените в этих строчках `usr/local/lib' на `usr/share' --- и готово. Только будьте внимательны и не измените что-нибудь другое, особенно, если вы не слишком много знаете о программировании на языке C. :-) Теперь вам нужно найти цель `install' (поищите в файле `Makefile' строчку, содержащую `install:') и переименуйте все ссылки на каталоги, не использующие переменные, описанные в начале файла. В нашем случае, мы несколько улучшим то, что было. Если раньше было: # ----------------------------------------- Установка # Для того, чтобы выполнить это, вы должны иметь права пользователя root! install: gentoo 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, обязательно отправьте их авторам программы с тем, чтобы они могли быть включены в следующий выпуск программы. Заметьте, что вы не должны посылать содержимое каталоге `debian', однако вы должны посылать любые другие изменения. И попытайтесь не создавать авторам лишних проблем, внося изменения, имеющие отношения только к Linux (или даже Unix!). [1] Комментарии в файле `Makefile' были тоже переведены. _Прим. переводчика_ 3.2. Проблемы с библиотеками ---------------------------- Существует общая проблема: библиотеки обычно различаются на разных платформах. Например, файл `Makefile' может содержать ссылки на библиотеки, которые недоступны в Debian (или даже в Linux!). В этом случае вы должны попытаться попробовать заменить библиотеку, служащую тем же самым целям, но уже присутствующую в Debian. Наилучший способ --- это попробовать закоментировать строки, содержащие такие библиотеки (возможно, сообщения об ошибках помогут вам разобраться с тем, как можно разрешить эту проблему). То есть, если в вашем файле `Makefile' (или `Makefile.in') присутствует строка, похожая на эту (а программа не компилируется): LIBS = -lcurses -lчто-то -lчто-то-еще Попробуйте заменить ее на такую строчку (и, возможно, все заработает): LIBS = -lncurses -lчто-то -lчто-то-еще #LIBS = -lcurses -lчто-то -lчто-то-еще ------------------------------------------------------------------------------- 4. Обязательные файлы в каталоге `debian/' ------------------------------------------ В основном каталоге программы (`gentoo-0.9.12') появился новый подкаталог --- `debian', в котором есть несколько файлов. Эти файлы определяют поведение пакета. Наиболее важные из них --- это файлы `control', `changelog', `copyright' и `rules', которые обязательны для всех пакетов. 4.1. Файл `control' ------------------- Этот файл содержит информацию, которая используется программами `dpkg' и `dselect' (а также другими) для работы c пакетами. Вот, например, файл `control', который был создан программой `dh_make'. 1 Source: gentoo 2 Section: unknown 3 Priority: optional 4 Maintainer: Josip Rodin 5 Standards-Version: 3.0.1 6 7 Package: gentoo 8 Architecture: any 9 Depends: ${shlibs:Depends} 10 Description: 11 (номера строк добавлены) Строки 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-сервер. Документ <> подробно описывает, чем нужно руководствоваться при выборе значений для этих полей. В нашем случае мы оставим значение этого поля равным `optional'. В строке 4 указано имя и адрес разработчика пакета. Строка 5 --- это версия документа <>, стандартам которого следует данный пакет (две основные версии пакета `debian-policy'). Если для построения программы используется нестандартный компилятор или какие-нибудь дополнительные утилиты, вы должны перечислить их в специальной записи `Build-Depends'. Дополнительная информация может быть найдена в <<Руководстве по созданию пакетов>> (раздел 8.7) и в документации, прилагаемой к пакету `build-essential'. В строке 7 указано имя двоичного пакета. В строке 8 указана архитектура процессора, для которого может быть скомпилирован двоичный пакет. Мы можем оставить в качестве значения `any', так как программа dpkg-gencontrol(1) поместит в это поле значение, соответствующее процессору машины, на которой компилировался пакет (см. в <<Руководстве разработчика>> объяснение понятия `перенос пакета'). Если ваш пакет не зависит от архитектуры процессора (например, сценарий на языке Perl или же документ), измените значение этого поля на `all' и прочитайте раздел раздел 4.4, `Файл `rules'', который описывает цель `binary-indep', используемую при построении пакета. Одна из самых полезных возможностей системы управления пакетами Debian приведена в строке 9. Пакеты могут зависеть друг от друга различным образом. Помимо зависимости `Depends', существуют также зависимости `Recommends', `Suggests', `Pre-Depends', `Conflicts', `Provides', и `Replaces' . Программы управления пакетами (такие как `dpkg', `dselect' или `apt') обычно одинаковым образом обрабатывают эти зависимости. Мы попытались дать объяснение тем случаям, когда поведение различается. (см. dpkg(8), dselect(8), apt(8), console-apt(8), gnome-apt(8)) Ниже приведено описание того, что означает каждый тип зависимости: `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). Данная конструкция позволяет программе dh_gencontrol(1) заполнить данное поле названиями пакетов разделяемых библиотек --- например, `libc6' или `xlib6g' --- которыми пользуется ваша программа (список библиотек позволяет получить программа dh_shlibdeps(1)). Таким образом, вы можете их не указывать. В нашем случае, мы оставляем строку 9 так как она есть. Мы добавим строчку (которая станет строкой номер 10) со списком зависимостей типа `Suggests'. Здесь мы (пока только) укажем пакет `file' так как программа `gentoo' может использовать некоторые из возможностей предоставляемых данным пакетом/программой. Строка 11 --- это короткое описание. У большинства людей ширина экрана составляет 80 колонок, поэтому мы рекомендуем вам не превышать этот предел. Здесь мы напишем ``fully GUI configurable GTK+ file manager''. В строке 12 мы укажем длинное (более полное) описание пакета. В первой колонке должен быть пробел. Пустых строк не должно быть. Если вам необходимо поместить в описание пустую строку, поместите после пробела (!) символ `.' (точка). После описания не должно быть больше одной пустой строки. Вот обновленный файл `control': 1 Source: gentoo 2 Section: x11 3 Priority: optional 4 Maintainer: Josip Rodin 5 Standards-Version: 3.0.1 6 7 Package: gentoo 8 Architecture: any 9 Depends: ${shlibs:Depends} 10 Suggests: file 11 Description: 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). (номера строк добавлены) 4.2. Файл `copyright' --------------------- Этот файл содержит информацию о местнонахождении исходной программы и авторских правах и лицензионное соглашение. Документ <<Политика Debian>> диктует не формат этого файла, но его содержание (см. раздел 6.5). Вот как выглядит файл, созданный программой `dh_make': 1 This package was debianized by Josip Rodin on 2 Wed, 11 Nov 1998 21:02:14 +0100. 3 4 It was downloaded from 5 6 Upstream Author(s): 7 8 Copyright: 9 10 (номера строк добавлены) В этот файл необходимо добавить: место (ftp- или web-сервер), где вы взяли исходные пакет; информацию об авторских правах и лицензионную информацию. Если лицензионное соглашение --- это одно из популярных ``свободных'' лицензий (например, GNU GPL, GNU LGPL, BSD или Artistic), вы можете просто сослаться на соответствующий файл в существующем в каждой системе Debian каталоге `/usr/share/common-licenses/', в противном случае вы должны его включить полностью. Программа `gentoo' лицензирована в соответствии с GNU General Public License, поэтому измененный файл `copyright' будет выглядеть таким образом: 1 This package was debianized by Josip Rodin 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 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. (номера строк добавлены) 4.3. Файл `changelog' --------------------- Это обязательный файл, имеющий специальный формат (описан в <<Руководстве по созданию пакетов>> (раздел 4.4)). Этот файл используется программой `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 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(1) упростит вам работу, вы также можете использовать программу emacs(1) (строки 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 Wed, 11 Nov 1998 21:02:14 +0100 8 9 Local variables: 10 mode: debian-changelog 11 End: (номера строк добавлены) Когда вы выпускаете новую версию пакета, вы должны увеличить номер версии пакета. Вы можете сделать это с помощью команды `dch -i' или, если вам необходимо явно указать новую версию, при помощи команды `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 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 Wed, 11 Nov 1998 21:02:14 +0100 14 15 Local variables: 16 mode: debian-changelog 17 End: (номера строк добавлены) Более подробную информацию о версия/обновлениях пакетов, вы можете найти в раздел 6.4, `Обновление пакета'. 4.4. Файл `rules' ----------------- Теперь вернемся в каталог `debian' и взглянем на файл `rules', который используется программой dpkg-buildpackage(1) для создания пакета. Обычно это просто еще один управляющий файл для программы `make'. Только он отличается от того, что предлагается вместе с исходными текстами. Каждый файл `rules', как и любой другой `Makefile', содержит правила, определяющие как необходимо выполнять те или иные действия. Правила состоят из имени цели, имен файлов, и названий действий, которые необходимо выполнить (например, `build:' или `install:'). Правила, которые вы хотите выполнить, должны быть указаны в командной строке (например, `debian/rules build' или `make -f debian/rules install'). После имени цели вы можете указать имя другой цели, название программы или файла, от которых зависит данная цель. Затем вы можете указать произвольной количество команд (первым символом в строке с командой должен быть символ табуляции!), пустая строка завершает правило[1] Комментарии начинаются с символа диеза (`#') и идут до конца строки. Вы можете обращаться к правилам либо из других правил, либо из командной строки `debian/rules clean'). Возможное недопонимание должно уйти, после того, как вы посмотрите на содержимое файла `rules', который был создан программой `dh_make'. Вы также должны прочитать документацию к программе `make'. Самое главное, что вы должны помнить о файле `rules', созданном программой `dh_make', это то, что этот файл представляет собой рекомендацию. Он будет работать для простых пакетов, но для более сложных вам, скорее всего, понадобится что-то добавить или удалить. Единственное, что вы не должны менять, это имена правил, так как все инструменты используют эти имена в соответствии с <<Руководством по созданию пакетов>>. 1 #!/usr/bin/make -f 2 # -*- makefile -*- 3 # Sample debian/rules that uses debhelper. 4 # This file was originally written by Joey Hess and Craig Small. 5 # As a special exception, when this file is copied by dh-make into a 6 # dh-make output file, you may use that output file without restriction. 7 # This special exception was added by Craig Small in version 0.37 of dh-make. 8 # Uncomment this to turn on verbose mode. 9 #export DH_VERBOSE=1 10 configure: configure-stamp 11 configure-stamp: 12 dh_testdir 13 # Add here commands to configure the package. 14 touch configure-stamp 15 build: build-stamp 16 build-stamp: configure-stamp 17 dh_testdir 18 # Add here commands to compile the package. 19 $(MAKE) 20 #docbook-to-man debian/testpack.sgml > testpack.1 21 touch $@ 22 clean: 23 dh_testdir 24 dh_testroot 25 rm -f build-stamp configure-stamp 26 # Add here commands to clean up after the build process. 27 $(MAKE) clean 28 dh_clean 29 install: build 30 dh_testdir 31 dh_testroot 32 dh_clean -k 33 dh_installdirs 34 # Add here commands to install the package into debian/testpack. 35 $(MAKE) DESTDIR=$(CURDIR)/debian/testpack install 36 # Build architecture-independent files here. 37 binary-indep: build install 38 # We have nothing to do by default. 39 # Build architecture-dependent files here. 40 binary-arch: build install 41 dh_testdir 42 dh_testroot 43 dh_installchangelogs 44 dh_installdocs 45 dh_installexamples 46 # dh_install 47 # dh_installmenu 48 # dh_installdebconf 49 # dh_installlogrotate 50 # dh_installemacsen 51 # dh_installpam 52 # dh_installmime 53 # dh_python 54 # dh_installinit 55 # dh_installcron 56 # dh_installinfo 57 dh_installman 58 dh_link 59 dh_strip 60 dh_compress 61 dh_fixperms 62 # dh_perl 63 # dh_makeshlibs 64 dh_installdeb 65 dh_shlibdeps 66 dh_gencontrol 67 dh_md5sums 68 dh_builddeb 69 binary: binary-indep binary-arch 70 .PHONY: build clean binary-indep binary-arch binary install configure (номера строк добавлены) Скорее всего, вы уже знакомы с форматом строки 1. Такая строка означает, что данный файл должен обрабатываться программой `make'. Строки с 12-й по 19-ую описывают правило `build' (и подчиненной правило `build-stamp'), которое выполняет `Makefile', идущий вместе с программой, и который позволяет скомпилировать программу. Правило `clean', описанное в строках 21-29, удаляет все автоматически созданные файлы. Это правило должно успешно выполняться всегда (даже, если файлов, которые нужно было бы удалять, _нет_). Поэтому используйте форсирующие параметры (например, для программы `rm' это `-f') и игнорируйте результат выполнения команды (для этого поместите `-' перед ее названием). Процесс установки --- правило `install' --- начинается в строке 31. Основное, что оно выполняет, это цель `install' из файла исходного файла `Makefile' --- установка происходит в каталог `debian/tmp' --- вот зачем мы использовали переменную $(DESTDIR) для указания корневого каталога при установке программы. Как указано в комментарии, правило `binary-indep' в строках 41-43 используется для построения платформо-независимых пакетов, но в нашем примере такие отстутвуют. Если у вашего пакета в файле `debian/control' написано `Architecture: all', то все команды для создания пакета вы должны поместить сюда, а правило `binary-arch' должно быть пустым. Следующее правило --- `binary-arch' (строки 45-73) --- использует несколько небольших утилит из пакета `debhelper', которые выполняют действия, необходимые для того, чтобы ваш пакет удовлетворял требованиям Debian. Названия команд начинаются с `dh_', здесь мы приводим список команд и описание того, что они делают: dh_testdir(1) проверяет, что вы находитесь в правильном каталоге (`/usr/local/gentoo/gentoo-0.9.12/'); dh_testroot(1) проверяет, что вы обладаете необходимыми привилегиями (пользователя root); dh_installmanpages(1) копирует страницы руководства; dh_strip(1) удаляет отладочную информацию из исполняемых файлов, что позволяет сделать их меньше; dh_compress(1) сжимает страницы Руководства и файлы документации программой `gzip', если размер соответствующего файла превышает 4 Кбайт; dh_installdeb(1) копирует управляющие файлы пакета в каталог `debian/tmp/DEBIAN'; dh_shlibdeps(1) определяет зависимости для исполняемых файлов; dh_gencontrol(1) создает и устанавливает файл `control'; dh_md5sums(1) вычисляет MD5-суммы для всех файлов в пакете; Для подробной информации о том, что делает и какие параметры допустимы для каждого из этих `dh_*' сценариев, мы рекомендуем вам прочитать соответствующие страницы Руководства. Мы упомянули не все сценарии из семейста `dh_*', их описание вы можете найти в документации к пакету `debhelper'. Раздел `binary-arch' --- это то место, где вы должны закомментировать все те строки, отвечающие за дополнительные возможности, в которых вы не нуждаетесь. Например, для пакета `gentoo' были закомментированы строки со словами testversion, emacsen, pam, init, cron, manpages, info, undocumented, suidregister, makeshlibs, и perl. Это было сделано просто потому, что пакет `gentoo' в этом не нуждается. А в строке 60 было необходимо добавить ` FIXED', так как это имя файла журнала изменений исходной программы. Две последние строки (как все другие строки, для которых у нас не нашлось комментариев) представляют собой более или менее обязательные вещи, о которых вы можете прочитать в руководстве к программе `make' и <<Руководстве по созданию пакетов>>. Пока вы можете считать, что они недостаточно важны, чтобы о них знать. [1] Если я не ошибаюсь, то правило завершается при нахождении названия следующей цели. _Прим. переводчика_ ------------------------------------------------------------------------------- 5. Другие файлы в каталоге `debian/' ------------------------------------ В каталоге `debian/' вы также можете найти другие файлы, большинство их которых имеет расширение `.ex', который означает, что соответствущий файл является примером. Если вам необходимы те или иные дополнительные свойства у пакета, просмотрите эти файлы и прочитайте соответствующую документацию (подсказка: документ называется <<Политика Debian>>). Вы должны переименовать необходимые файлы, убрав расширение `.ex', а затем изменить их и, если необходимо, файл `debian/rules'. Некоторые из этих файлов --- те, что достаточно часто используются --- описаны ниже. 5.1. Файл `README.Debian' ------------------------- Любая дополнительная информация, а также различия между программой в вашем пакете и исходной программой должны быть описаны в файле `README.Debian'. Программа `dh_make' создает файл, похожий на этот: gentoo for Debian ---------------------- Josip Rodin , Wed, 11 Nov 1998 21:02:14 +0100 Так как в нашем примере нам нечего поместить в этот файл, мы его удалим. 5.2. Файл `conffiles' --------------------- Одна из самых неприятных (и раздражающих) вещей, которая может случиться, это когда вы потратили очень много времени и усилий на то, чтобы настроить программу, а при очередном обновлении все ваши настройки исчезли. Debian предлагает решение этой проблемы, через специальный механизм работы с конфигурационными файлами: все конфигурационные файлы должны быть помечены как таковые, это позволит при обновлении проверить не изменились ли данные файлы, и, если они изменились, спросить у вас, нужно ли заменить старые конфигурационные файлы теми, что пришли в новом пакете. Для того, чтобы это сделать это, вы должны в файле `conffiles' указать _полные_ пути к каждому конфигурационному файлу (обычно они находятся в каталоге `/etc'). Одни файл в одной строчке. У программы `gentoo' есть только один конфигурационный файл --- `/etc/gentoorc' --- и мы укажем его в файле `conffiles'. Если у вашей программы нет конфигурационных файлов, вам этот файл не нужен. 5.3. Файл `dirs' ---------------- Этот файл содержит названия каталогов, которые необходимы, но которые не создаются командой установки программы (`make install'). По умолчанию, он содержит следующие строки: usr/bin usr/sbin Заметьте, что начальный символ `косая черта' отсутствует. В нашем случае, необходимо изменить этот файл следующим образом: usr/X11R6/bin usr/X11R6/man/man1 но эти каталоги создаются командой `make install', поэтому нам этот файл не нужен и мы можем его легко удалить. 5.4. Файл `manpage.1.ex' ------------------------ Файлы, имеющие расширение `.ex', представляют собой примеры тех дополнительных файлов, которые вам могут понадобится. Для того, чтобы воспользоваться ими, удалите расширение `.ex'. Если вы не собираетесь их использовать, просто удалите их! Для вашей программа должна присутствовать страница Руководства. Если ее нет, вы должны заполнить шаблон `manpage.1.ex'. Краткое описание того, как создавать страницы Руководства, смотрите в man(7). Не забудьте переименовать этот файл, чтобы его имя соответствовало имени программы, а расширение --- разделу Руководства, в который должна попасть данная страница. Вот короткий список разделов: Раздел | Описание | Примечание 1 Команды пользователя Программы и сценарии 2 Системные вызовы Функции, предоставляемые ядром 3 Библиотечные вызовы Функции, предоставляемые различными библиотеками 4 Специальные файлы Обычно файлы в каталоге /dev 5 Форматы файлов Например, формат файла /etc/passwd 6 Игры Или другие развлекательный программы 7 Макро пакеты Например, макросы пакета man 8 Системное администрирование Программы, которые обычно запускаются только пользователем root 9 Kernel routines Нестандартные вызовы и информация о внутреннем строении Таким образом, страница Руководства для программы `gentoo' должна называться `gentoo.1'. В исходных текстах страница Руководства отсутствовала, поэтому нам пришлось написать собственную, используя информацию из файла примера и документации к программе. 5.5. Файл `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" Для дополнительной информации смотрите menufile(5), update-menus(1) и `/usr/share/doc/debian-policy/menu-policy.html/'. 5.6. Файл `watch.ex' -------------------- Данный файл может быть использован программами uscan(1) и uupdate(1) (они предоставляются пакетом `devscripts') для отслеживания серверов, откуда вы загрузили исходные тексты программы. Вот, например, что находится в этом файле в пакете `gentoo': # watch control file for uscan # Site Directory Pattern Version Script ftp.obsession.se /gentoo gentoo-(.*)\.tar\.gz debian uupdate Совет: подсоединитесь к Интернету и попробуйте запустить программу `uscan', находясь в каталоге программы _после_ того, как вы создали этот файл. И прочитайте документацию на эту программу! 5.7. Файл `ex.doc-base' ----------------------- Если ваш пакет содержит документацию (отличную от страниц Руководства или info-файлов), вы должны воспользоваться файлом `doc-base' для того, чтобы ее зарегистрировать в системе. Это позволит пользователю найти ее при помощи программ dhelp(1), dwww(1) и, возможно, другими. Вот как выглядит файл `doc-base', входящий в пакет `gentoo': Document: gentoo Title: Gentoo Manual Author: Emil Brink Abstract: This manual describes what Gentoo is, and how it can be used. Section: Apps/Tools Format: HTML Index: /usr/share/doc/gentoo/html/index.html Files: /usr/share/doc/gentoo/html/*.html Формат этого файла описан в странице Руководства install-docs(8), а также в документации, входящей в пакет `doc-base' (см. файл `/usr/doc/doc-base/doc-base.html/index.html'). 5.8. Файлы `postinst.ex', `preinst.ex', `postrm.ex', `prerm.ex' --------------------------------------------------------------- Эти файлы называются служебными сценариями, те сценариями, которые попадают в управляющую область пакета, и которые запускаются программой `dpkg' в момент, когда ваш пакет устанавливается, обновляется или удаляется. Возможно, пока вам следует избегать создания этих сценариев, так как они имеют тенденцию усложняться со временем. Подробную информацию вы можете найти в <<Руководстве по созданию пакетов>>, раздел 6; также просмотрите файлы примеров, созданные программой `dh_make'. Теперь все должно быть готово к построению пакета. ------------------------------------------------------------------------------- 6. Завершающие шаги ------------------- 6.1. Построение пакета ---------------------- Перейдите в основной каталог программы и выполните команду: dpkg-buildpackage -rfakeroot Эта команды сделает все, что необходимо. Все, что вам необходимо будет сделать, это ввести фразу-пароль для вашего секретного PGP-ключа. _Дважды!_ После того, как команда завершит свою работу, в каталоге, который вы создали в самом начале (`~/debian/') следующие файлы: `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' и необходим для распаковки исходных текстов командой dpkg-source(1). Содержимое этого файла имеет вашу цифровую подпись, что позволяет другим людям удостовериться, что именно вы создали его. `gentoo_0.9.12-1.diff.gz' Этот файл содержит (в формате `unified diff') все изменения, которые вам понадобилось сделать с исходными текстами. Он был создал и используется программой dpkg-source(1). `gentoo_0.9.12-1_i386.changes' Этот файл описывает изменения, сделанные в данной версии пакета по сравнению с предыдущей версией. Он используется программами поддержки ftp-архива Debian для помещения пакетов (как двоичных так и содержащих исходные тексты) в архив. Он содержит как информацию из файла `gentoo-0.9.12/debian/changelog' так и из файла `.dsc'. По мере того, как вы будете работать над вашим пакетом, вы можете добавлять новую функциональность или просто поменять его поведение. Люди, загружающие ваш пакет могут сразу увидеть в этом файле, что именно изменилось. Длинные строки цифр --- это md5-суммы всех перечисленных файлов. Человек, которые загрузил ваши файлы, может проверить их при помощи программы md5sum(1) и, если значения контрольных сумм не совпадает, он точно будет знать, что это не те файлы, что создали вы (могла произойти ошибка при загрузке либо же кто-то ``поправил'' их). Этот файл также имеет цифровую подпись содержимого с тем, чтобы люди имели большую уверенность, что он был создан вами. В случае, если процесс построения пакета длится значительное время, вы скорее всего захотите избежать пересборки с нуля каждый раз, пока вы отлаживаете содержимое файла `debian/rules'. В этом случае для построения `.deb'-файла мы рекомендуем вам использовать команду: fakeroot debian/rules binary Убедитесь только, что цель `install' _не_ зависит от цели `install-stamp'; в этом случае каждый раз будет выполнена команда `dh_clean -k'. После завершения отладки процедуры построения пакета, не забудьте построить пакет с нуля. 6.2. Поиск ошибок в пакете -------------------------- Запустите программу lintian(1) на файл `.changes'; эта программа проверит пакет на наличие стандартных ошибок. Команда выглядит так: lintian -i gentoo_0.9.12-1_i386.changes Разумеется, вы должны указать имя файла `.changes', созданного для вашего пакета. Если окажется, что какие-то ошибки присутствуют (это все строки, начинающиеся с `E:'), внимательно прочитайте объяснение (строки, начинающиеся с `N:'), исправьте ошибки и попробуйте снова построить пакет, что описано в разделе раздел 6.1, `Построение пакета'. Если вы увидели только строки, начинающиеся с `W:' (предупреждения), то вы можете быть уверены, что ваш пакет, скорее всего, правилен (но, разумеется, требует дополнительной работы). Заметьте, что программа debuild(1) поможет вам построить пакет при помощи программы `dpkg-buildpackage' и сразу проверить полученный пакет при помощи программы `lintian'. Проверьте содержимое пакета при помощи мэнеджера файлов (например, mc(1)) или распакуйте его во временный каталог при помощи программы dpkg-deb(1). Убедитесь, что какие бы то ни было лишние файлы отсутсвуют как в двоичном пакете, так и в пакете с исходными текстами. Подсказка: команда zgrep ^+++ ../gentoo_0.9.12-1.diff.gz позволит вам получить список измененных исходных файлов, а команда dpkg-deb -c gentoo_0.9.12-1_i386.deb выведет список файлов в двоичном пакете. Теперь установите свой пакет (например, при помощи программы debi(1)). Попробуйте установить его на машинах, отличной от той, на которой вы создавали ваш пакет, и тщательно проследите, что отсутствуют какие бы то ни было предупреждения или ошибки во время установки и при запуске программы. Позже, когда вы будет создавать новую версию пакета, для того, чтобы убедиться, что обновление будет происходить без ошибок, вы должны проверить следующее: * попробуйте обновить предыдущую версию пакета (а также версию, включенную в последний выпуск Debian); * попробуйте установить предыдущую версию пакета, * установите пакет как новый (в систему, в которой отсутвуют предыдущие версии пакета); * удалите его, установите заново, и, наконец, вычистите его. 6.3. Загрузка пакета -------------------- Теперь, когда вы тщательно оттестировали свой пакет, настало время загрузить все необходимые файлы на сервер master.debian.org. Для этого вы должны воспользоваться программой dupload(1). Сначала вы должны создать конфигурационный файл `~/.dupload.conf'. Поместите в него что-нибудь похожее на: package config; $default_host = "ftp-master"; $cfg{"ftp-master"}{"login"} = "yourdebianusername"; $cfg{"non-us"}{"login"} = "yourdebianusername"; 1; Разумеется, измените информацию обо мне на вашу, для этого прочитайте страницу Руководства dupload.conf(5), что позволит вам понять, что означает каждый параметр. Теперь подсоединитесь к вашему Интернет-провайдеру и выполните команду: dupload --to master gentoo_0.9.12-1_i386.changes Программа `dupload' проверяет, что md5-суммы ваших файлов совпадают с тем, что указано в файле `.changes'. Если будет обнаружено несовпадение, она вам предложит создать этот файл заново (о том, как правильно это сделать, смотрите раздел раздел 6.1, `Построение пакета'). Программа `dupload' попросит ввести ваш пароль на машине master.debian.org, загрузит пакеты и пошлет, если необходимо, информацию о загруженных файлах в список рассылки . Если вы живете в Европе, вы можете воспользоваться другой машиной для загрузки ваших пакетов. Для дополнительной информации смотрите dupload(1), dupload.conf(5) и <<Руководство разработчика>>. 6.4. Обновление пакета ---------------------- Предположим, что в вашем пакете нашли ошибку, которую была зарегестрирована в системе отслеживания ошибок под номером #54321. Предположим также, что вы можете исправить эту ошибку. Для того, чтобы создать обновленный пакет Debian, вам необходимо сделать следующее: * Разумеется, исправить ошибку. * Добавить новую редакцию в файл `changelog' при помощи команды `dch -i' и поместить в него краткое описание ошибки и то, как вы ее исправили. Обязательно в конце описания добавьте `Closes: #54321'. Этот позволит системе поддержки архива Debian автоматически послать сообщение о том, что данная ошибка была исправлена новой редакцией вашего пакета. * Повторить действия описанные в разделах раздел 6.1, `Построение пакета', раздел 6.2, `Поиск ошибок в пакете', и раздел 6.3, `Загрузка пакета'. Отличие состоит в том, что в этот раз вы не должны включать архив, содержащий оригинальные исходные тексты, так как он уже присутствует в архиве Debian. Теперь давайте рассмотрим случай, когда вышла новая версия программы и, разумеется, вы хотите создать для нее пакет. Вам необходимо сделать следующее: * Загрузить исходные тексты программы и поместить этот архив (например, `gentoo-0.9.13.tar.gz') в каталог, что мы создавали в самом начале (например, `~/debian'). * Перейти в рабочий каталог (`gentoo-0.9.12') и выполнить команду uupdate -u gentoo-0.9.13.tar.gz Вы должны заменить это имя именем файла, содержащего новую версию исходных тесктов программы. Программа uupdate(1) переименует его, попытается применить все изменения, что находятся в файле `.diff.gz' и обновит файл `debian/changelog'. * Перейти в каталог с исходными текстами новой версии программы (`../genetool-0.9.13') и повторить действия, описанный в разделах раздел 6.1, `Построение пакета', раздел 6.2, `Поиск ошибок в пакете', и раздел 6.3, `Загрузка пакета'. Заметьте, что если создали файл `debian/watch' (это описано в разделе раздел 5.6, `Файл `watch.ex''), вы можете запустить программу uscan(1), которая попытается найти новую версию программы, загрузить необходимый архив и запустит программу `uupdate'. 6.5. Где искать помощь ---------------------- Прежде всего (перед тем, как задавать свой вопрос в одном из форумов!), пожалуйста, прочитайте документацию (RTFM!). Это включает документацию в каталогах `/usr/share/doc/dpkg', `/usr/share/doc/debian', `/usr/share/doc/package/*', а также страницы Руководства и или info-страницы для всех упомянутых в этой статье программ. Если вы получили сообщение об ошибке (да, да, настоящее сообщение об ошибке!), это означает, что настало время посетить Debian Bug Tracking System (http://www.debian.org/Bugs/) и ознакомиться с необходимой документацией. Это позволит вам эффективно работать с сообщениями об ошибках. Подписавшись на список рассылки Debian Mentors (mailto:debian-mentors@lists.debian.org), вы можете попросить помощи у опытных разработчиков Debian. Для того, чтобы подписаться на этот список рассылки, пошлите письмо по адресу , указав слово `subscribe' в поле темы письма. Если у вас остались вопросы, задайте их в список рассылки разработчиков Debian по адресу . Вы можете подписаться на него, послав письмо по адресу , в теме которого будет слово 'subscribe'. Если вы уже стали разработчиком Debian, вам следует подписаться на него в любом случае. Даже если все правильно работало, настало время молиться. Почему? Потому что через несколько часов или дней пользователи по всему миру начнут использовать ваш пакет, и, если вы допустили какую-нибудь _критическую_ ошибку, многочисленные расстроенные пользователи Debian начнут наполнять ваш почтовый ящик злобными письмами... Шутка, шутка. :-) Расслабьтесь и приготовьтесь к получению сообщений об ошибках, так как много чего еще нужно сделать для того, чтобы пакет полностью соответствовал политике Debian (еще раз, прочитайте _полную документацию_). Успехов! ------------------------------------------------------------------------------- Руководство начинающего разработчика Debian Josip Rodin Перевод: Михаил Соболев, Перевод: Алексей Выскубов, версия 1.0.2, 10 June 2001 (?)