| 1 |
<!--
|
| 2 |
russian version: $Id: maint-guide.ru.sgml,v 1.6 2002-02-22 22:42:59 joy Exp $
|
| 3 |
english version: 1.10
|
| 4 |
-->
|
| 5 |
|
| 6 |
<!doctype debiandoc system>
|
| 7 |
|
| 8 |
<debiandoc>
|
| 9 |
|
| 10 |
<book>
|
| 11 |
|
| 12 |
<titlepag>
|
| 13 |
<title>Руководство начинающего разработчика Debian</title>
|
| 14 |
|
| 15 |
<author>Josip Rodin <email>jrodin@jagor.srce.hr</email></author>
|
| 16 |
<author>Перевод: Михаил Соболев, <email>mss@transas.com</email></author>
|
| 17 |
<author>Перевод: Алексей Выскубов, <email>alexey@pepper.spb.ru</email></author>
|
| 18 |
|
| 19 |
<version>версия 1.0.2, 10 June 2001 (?)</version>
|
| 20 |
|
| 21 |
<copyright>
|
| 22 |
<copyrightsummary>Copyright © 1998-2001 Josip Rodin.</copyrightsummary>
|
| 23 |
|
| 24 |
<p>This document may used under the terms the GNU General Public License
|
| 25 |
version 2 or higher.
|
| 26 |
|
| 27 |
<p>This document was made using with these two documents as examples:
|
| 28 |
|
| 29 |
<p>Making a Debian Package (AKA the Debmake Manual), copyright ©
|
| 30 |
1997 Jaldhar Vyas <email>jaldhar@debian.org</email>.
|
| 31 |
|
| 32 |
<p>The New-Maintainer's Debian Packaging Howto, copyright © 1997
|
| 33 |
Will Lowe <email>lowe@debian.org</email>.
|
| 34 |
</copyright>
|
| 35 |
|
| 36 |
</titlepag>
|
| 37 |
|
| 38 |
<toc sect>
|
| 39 |
|
| 40 |
<chapt id="start">
|
| 41 |
<heading>Хорошее начало — половина дела</heading>
|
| 42 |
|
| 43 |
<p>Этот документ описывает процесс создания пакетов для Debian GNU/Linux. В этом руководстве мы
|
| 44 |
пытаемся следовать римской поговорке <em>Longum iter est per preaecepta, breve et efficax per
|
| 45 |
exempla!</em> (It's a long way by the rules, but short and efficient with
|
| 46 |
examples!)<footnote><em>Путь длинен, если изучать правила, но короток и эффективен, если
|
| 47 |
пользоваться примерами!</em></footnote>.
|
| 48 |
|
| 49 |
<p>Одна из сильных, по сравнению с другими дистрибутивами, сторон Debian GNU/Linux — это
|
| 50 |
система управления пакетами. Несмотря на то, что для Debian уже существует очень много пакетов,
|
| 51 |
может случиться так, что вам понадобится установить программу, для которой не существует
|
| 52 |
соответствующего пакета. Это может заставить вас задуматься о том, как создать свой собственный
|
| 53 |
пакет. :) Да, вам понадобятся некоторые знания о программировании под Unix, но ни в коем случае
|
| 54 |
вы не обязаны быть гуру.
|
| 55 |
|
| 56 |
<p>Последняя версия этого документа всегда доступна как <url
|
| 57 |
name="http://www.debian.org/doc/maint-guide/" id="http://www.debian.org/doc/maint-guide/">, вы также
|
| 58 |
можете найти этот документ в пакете <package>maint-guide-ru</package><footnote>А английскую версию
|
| 59 |
— в пакете <package>maint-guide</package></footnote>.
|
| 60 |
|
| 61 |
<sect id="needprogs">Программы, которые вам понадобятся
|
| 62 |
|
| 63 |
<p>Сначала вы должны установить все необходимые для разработки пакеты. Заметьте, что ниже
|
| 64 |
приведенный список не содержит пакеты приоритетов ‘essential’ или ‘required’
|
| 65 |
— эти пакеты уже установлены на вашу машину.
|
| 66 |
|
| 67 |
<p>На момент написания этого документа официальной стабильной версией был выпуск 2.1
|
| 68 |
(‘slink’), а выпуск 2.2 (‘potato’) только создавался. Поэтому большинство
|
| 69 |
пакетов, упомянутых здесь, взяты из ‘potato’.
|
| 70 |
|
| 71 |
<p>Нижеперечисленные пакеты присутствуют в стандартной поставке Debian 2.1, что означает, что скорее
|
| 72 |
всего они уже установлены на вашей машине (как, впрочем, и пакеты, перечислинные в зависимостях к
|
| 73 |
этим<comment editor="Michael Sobolev">очень плохо!!!</comment>). Несмотря на это, мы рекомендуем
|
| 74 |
вам при помощи команды ‘dpkg -s <var>имя-пакета</var>’ проверить, что они установлены.
|
| 75 |
|
| 76 |
<taglist>
|
| 77 |
<tag><package>binutils</package>
|
| 78 |
<item>Программы, входящие в этот пакет, позволяют работать с объектными файлами —
|
| 79 |
файлы, из которых «собираются» программы. (см. ‘info binutils’)
|
| 80 |
|
| 81 |
<tag><package>cpp</package>
|
| 82 |
<item>Препроцессор языка C. (см. <manref name="cpp" section="1">)
|
| 83 |
|
| 84 |
<tag><package>cpio</package>
|
| 85 |
<item>Программа архивирования, как, например, <prgn>tar</prgn> или <prgn>zip</prgn> (см.
|
| 86 |
<manref name="cpio" section="1">).
|
| 87 |
|
| 88 |
<tag><package>dpkg-dev</package>
|
| 89 |
<item>Этот пакет содержит все утилиты, необходимые для распаковки, создания и загрузки исходных
|
| 90 |
пакетов Debian (см. <manref name="dpkg-source" section="1">).
|
| 91 |
|
| 92 |
<tag><package>file</package>
|
| 93 |
<item>Эта полезная программа позволяет определить тип файла (см. <manref name="file" section="1">).
|
| 94 |
|
| 95 |
<tag><package>gcc</package>
|
| 96 |
<item>Компилятор языка C от GNU. Большинство программ Linux написаны на языке C. Однако если
|
| 97 |
ваша программа написана на каком-то другом языке программирования, например, C++, Fortran,
|
| 98 |
Pascal, или другим, вы должны установить соответствующий пакет (<package>g++</package>,
|
| 99 |
<package>g77</package>, <package>gpc</package> или другой). (см. <manref name="gcc"
|
| 100 |
section="1">, <manref name="g++" section="1">, <manref name="g77" section="1">, <manref
|
| 101 |
name="gpc" section="1">)
|
| 102 |
|
| 103 |
<tag><package>libc6-dev</package>
|
| 104 |
<item>Библиотека языка C и файлы заголовков, необходимые программе <prgn>gcc</prgn>. Несмотря
|
| 105 |
на то, что некоторые программы все еще рекомендуют и/или используют libc5, мы рекомендуем вам
|
| 106 |
использовать новую версию (libc6). (см. ‘info libc’)
|
| 107 |
|
| 108 |
<tag><package>make</package>
|
| 109 |
<item>Обычно процесс создания программы состоит из нескольких шагов, которые необходимо выполнять в
|
| 110 |
определенном порядке. Вместо того, чтобы вводить одни и те же команды снова и снова, вы можете
|
| 111 |
воспользоваться этой программой для автоматизации всего процесса. В некоторых случаях следует
|
| 112 |
использовать утилиты <prgn>imake</prgn> и <prgn>xmkmf</prgn> (они позволяют создавать
|
| 113 |
make-файлы из файлов специального вида). Многие современные программы создают сценарий
|
| 114 |
<file>configure</file> и make-файлы при помощи утилит <prgn>autoconf</prgn> и
|
| 115 |
<prgn>automake</prgn>, поэтому вам также могут понадобиться эти утилиты (см. ‘info
|
| 116 |
make’, <manref name="imake" section="1">, <manref name="xmkmf" section="1">, <manref
|
| 117 |
name="autoconf" section="1">, <manref name="automake" section="1">).
|
| 118 |
|
| 119 |
<tag><package>patch</package>
|
| 120 |
<item>Эта очень полезная программа изменяет исходный файл в соответствии со списком различий
|
| 121 |
между файлами, полученным при помощи программы <prgn>diff</prgn> (см. <manref name="patch"
|
| 122 |
section="1">).
|
| 123 |
|
| 124 |
<tag><package>perl5-5.005</package>
|
| 125 |
<item>Perl — один из наиболее используемых интерпретируемых языков в Un*x-системах. Его
|
| 126 |
часто называют “Unix's Swiss Army Chainsaw” (Универсальная пила) (см. <manref
|
| 127 |
name="perl" section="1">).
|
| 128 |
</taglist>
|
| 129 |
|
| 130 |
<p>Из раздела ‘devel’ вам могут понадобиться следующие пакеты:<taglist>
|
| 131 |
<tag><package>dh-make</package>
|
| 132 |
<tag><package>debhelper</package>
|
| 133 |
<item>Программа <prgn>dh_make</prgn> необходима для создания скелета будущего пакета. При этом
|
| 134 |
в получающихся управляющих файлах будут использованы программы из пакета
|
| 135 |
<package>debhelper</package>. При создании пакетов вовсе не обязательно использовать эти
|
| 136 |
программы, но мы <em>очень</em> рекомендуем их начинающим разработчикам. Они позволяют сильно
|
| 137 |
упростить процесс создания и поддержки пакетов (см. <manref name="dh_make" section="1">, <manref
|
| 138 |
name="debhelper" section="1">, <file>/usr/share/doc/debhelper/README</file>).
|
| 139 |
|
| 140 |
<tag><package>devscripts</package>
|
| 141 |
<item>Этот пакет содержит несколько простых и полезных, но не являющихся необходимыми для
|
| 142 |
создания пакетов, сценариев (см. <file>/usr/share/doc/devscripts/README.gz</file>).
|
| 143 |
|
| 144 |
<tag><package>fakeroot</package>
|
| 145 |
<item>Эта утилита позволит вам создавать пакеты, не пользуясь привилегиями пользователя root
|
| 146 |
(которые необходимы на некоторых этапах) (см. <manref name="fakeroot" section="1">).
|
| 147 |
|
| 148 |
<tag><package>lintian</package>
|
| 149 |
<item>Эта программа предназначена для проверки пакетов Debian. Она позволяет убедиться, что при
|
| 150 |
создании пакета не было допущено ни одной из «стандартных» ошибок <!-- TO ADD OR NOT
|
| 151 |
TO ADD. К каждой ошибке будет также выдано пояснение --> (см. <manref
|
| 152 |
name="lintian" section="1">, <file>/usr/share/doc/lintian/lintian.html/index.html</file>).
|
| 153 |
</taglist>
|
| 154 |
|
| 155 |
<p>И, наконец, вам следует установить <em>очень важные</em> пакеты из раздела doc:<taglist>
|
| 156 |
<tag><package>debian-policy</package>
|
| 157 |
<item>Этот пакет содержит описание структуры архива, разнообразных моментов, связанных с
|
| 158 |
построением операционной системы, «Стандарт иерархии файловой системы». Также (что
|
| 159 |
для вас важнее всего) пакет содержит требования, которым должен удовлетворять пакет Debian,
|
| 160 |
для того, чтобы он мог быть включен в дистрибутив (см.
|
| 161 |
<file>/usr/share/doc/debian-policy/policy.html/index.html</file>).
|
| 162 |
|
| 163 |
<tag><package>developers-reference</package>
|
| 164 |
<item>Данный пакет содержит информацию для разработчика пакетов, не относящуюся непосредственно
|
| 165 |
к техническим вопросам создания пакетов. В частности, вы найдете здесь информацию о структуре
|
| 166 |
архива, о том, как переименовывать пакеты, как переводить пакеты в «брошенное»
|
| 167 |
<comment editor="Alexey Vyskubov"><p>:-)</p></comment> состояние, как начать поддержку
|
| 168 |
«брошенного» пакета, как обновление пакета может быть произведено не его
|
| 169 |
разработчиком, как работать с ошибками в пакетах, когда и как обновлять пакеты и т.п. (см.
|
| 170 |
<file>/usr/share/doc/developers-reference/developers-reference.html/index.html</file>).
|
| 171 |
</taglist>
|
| 172 |
|
| 173 |
<p>Вам также понадобится (для создания цифровой подписи к пакету) программа зашифрования —
|
| 174 |
либо PGP (пакеты <package>pgp-*</package>), либо GPG (пакет <package>gnupg</package>). Это особенно
|
| 175 |
важно, если вы хотите предоставлять ваш пакет другим людям (вне всякого сомнения, вы будете делать
|
| 176 |
это после того, как ваша работа будет включена в дистрибутив Debian). Однако, в силу несколько
|
| 177 |
странного экспортного законодательства США, вы не можете загрузить необходимые программы
|
| 178 |
зашифрования с ближайшего зеркала Debian. Несмотря на это, Debian предоставляет эти пакеты через
|
| 179 |
сервер, физически находящийся в стране, отличной от США, и называемый <url name="non-US.debian.org"
|
| 180 |
id="ftp://non-us.debian.org/debian-non-US/">. На вашем зеркале вы можете найти файл
|
| 181 |
<file>README.non-US</file>, который описывает как вы можете найти ближайшее зеркало этого сервера.
|
| 182 |
|
| 183 |
<p>Перед началом работы над созданием пакета мы рекомендуем вам прочитать документацию на все
|
| 184 |
программы, которые вы будете использовать. Это может сначала показаться излишеством, но потом вы
|
| 185 |
будете <em>очень</em> рады, что прислушались к нашему совету…
|
| 186 |
|
| 187 |
<p><em>Внимание:</em> Пакет <package>debmake</package> содержит программы, аналогичные по
|
| 188 |
функциональности программам, входящим в пакет <package>dh-make</package>. Описание пакета
|
| 189 |
<package>debmake</package> <strong>не приводится</strong> в этом документе. Вы можете найти
|
| 190 |
дополнительную информацию на странице <url name="the Debmake manual"
|
| 191 |
id="http://www.debian.org/~jaldhar/">.
|
| 192 |
|
| 193 |
<sect id="otherinfo">Прочая информация
|
| 194 |
|
| 195 |
<p>Вы можете создавать пакеты двух типов: двоичные пакеты и пакеты с исходными текстами. Последние
|
| 196 |
содержат код, который позволяет скомпилировать программу и создать пакет. Двоичные пакеты содержат
|
| 197 |
только скомпилированную программу. Пожалуйста, не путайте исходные тексты программы и пакет с
|
| 198 |
исходными текстами.
|
| 199 |
|
| 200 |
<p>Debian использует термин <em>сопровождающий</em> либо <em>разработчик пакета</em> (maintainer)
|
| 201 |
для человека, который создает пакеты, <em>автор</em> (author) для человека, который создал
|
| 202 |
программу, и <em>активный автор</em> (upstream maintainer) для человека, осуществляющего работу над
|
| 203 |
программой в настоящий момент времени. Обычно автор и активный автор являются одним и тем же
|
| 204 |
человеком (а иногда тот же человек выступает и в роли сопровождающего). Если вы создали программу и
|
| 205 |
хотите, чтобы ее включили в Debian, вы можете сделать это, подав соответствующее заявление.
|
| 206 |
|
| 207 |
<p>Для того, чтобы ваш пакет попал в следующий выпуск Debian (почему бы и нет, если программа полезна?), вы
|
| 208 |
должны стать официальным разработчиком Debian. Этот процесс описан в «Руководстве
|
| 209 |
разработчика». Пожалуйста, прочитайте этот документ.
|
| 210 |
|
| 211 |
<chapt id="first">Первые шаги
|
| 212 |
|
| 213 |
<p>Так как на страницах <url name="Уголок разработчика"
|
| 214 |
id="http://www.debian.org/devel/"> нет достаточно четкой информации о том, где и как новые разработчики
|
| 215 |
должны начинать свою работу, ниже мы попытаемся объяснить каждый (что может показаться излишним)
|
| 216 |
шажок и помочь вам создать первый пакет, что позволит вам получить некий опыт для создания
|
| 217 |
последующих пакетов.
|
| 218 |
|
| 219 |
<sect id="choose">Выберите программу
|
| 220 |
|
| 221 |
<p>При выборе пакета, над которым вы собираетесь работать, вы должны иметь в виду следующие
|
| 222 |
моменты:<list>
|
| 223 |
<item>проверьте существует ли данный пакет в дистрибутиве. Если вы используете
|
| 224 |
‘стабильный’ выпуск, лучше всего будет посетить страницу <url name="Поиск пакетов"
|
| 225 |
id="http://www.debian.org/distrib/packages.html">. Если же вы используете
|
| 226 |
<strong>текущий</strong> ‘нестабильный’ выпуск, для проверки лучше использовать
|
| 227 |
следующие команды:
|
| 228 |
<example>
|
| 229 |
dpkg -s название_программы
|
| 230 |
dpkg -l '*название_программы*'
|
| 231 |
</example>
|
| 232 |
|
| 233 |
<item>Посмотрите в списке <url name="Будущие и требующие работы пакеты"
|
| 234 |
id="http://www.debian.org/devel/wnpp/"> и архивах списка рассылки debian-devel
|
| 235 |
— не работает ли уже кто-нибудь над этим пакетом. Если работа уже ведется, но вы
|
| 236 |
все-таки хотите работать над этим же пакетом, свяжитесь с текущим разработчиком. Если же вы
|
| 237 |
не против создать другой пакет, поищите другую интересную программу, над которой еще никто не
|
| 238 |
работает.
|
| 239 |
|
| 240 |
<item>Пакет должен содержать программу. Не пытайтесь пока создавать пакеты для библиотек.</item>
|
| 241 |
|
| 242 |
<item>У программы <strong>обязательно</strong> должна быть лицензия. Желательно, чтобы она
|
| 243 |
позволяла квалифицировать данную программу как свободно распространяемую в соответствии с <url
|
| 244 |
name="Debian Free Software Guidelines"
|
| 245 |
id="http://www.debian.org/social_contract.html#guidelines">. Если лицензия не соответствует
|
| 246 |
каким-либо пунктам этих правил, вы все равно можете включить ваш пакет в один из разделов
|
| 247 |
‘contrib’ или ‘non-free’. Если вы не уверены, в какой раздел данный
|
| 248 |
пакет должен быть помещен, спросите в списке рассылки
|
| 249 |
<email>debian-legal@lists.debian.org</email>.</item>
|
| 250 |
|
| 251 |
<item>Программа <strong>не должна</strong> требовать режима setuid root, а еще лучше —
|
| 252 |
вообще не требовать режима доступа setuid или setgid.</item>
|
| 253 |
|
| 254 |
<item>Программа не должна быть демоном или чем-то, что должно быть помещено в каталоги
|
| 255 |
<file>*/sbin</file>.</item>
|
| 256 |
|
| 257 |
<item>Программа должна быть хорошо документирована или, по крайней мере, понятна (всем).</item>
|
| 258 |
|
| 259 |
<item>Вы должны связаться с авторами программы, чтобы убедиться, что они не против создания
|
| 260 |
пакета с их программой. Возможность консультироваться с авторами программы по поводу тех или
|
| 261 |
иных моментов обычно очень важна, поэтому лучше не пытайтесь создавать пакеты для
|
| 262 |
неподдерживаемых программ.</item>
|
| 263 |
|
| 264 |
<item>И, наконец, программа должна использоваться вами в течение некоторого времени, чтобы вы
|
| 265 |
могли быть уверены, что она работает.</item>
|
| 266 |
</list>
|
| 267 |
|
| 268 |
<p>Разумеется, все перечисленное — это всего лишь меры безопасности, которые спасут вас от
|
| 269 |
разъяренных пользователей, если вы сделали что-то не так в ftp-демоне… Как только вы
|
| 270 |
приобретете определенный опыт, вы сможете создавать любые пакеты — но помните, что даже
|
| 271 |
опытные разработчики, если у них есть какие-то сомнения, обращаются за помощью в список рассылки
|
| 272 |
debian-devel. Подписчики этого списка рассылки всегда рады помочь.
|
| 273 |
|
| 274 |
<p>Дополнительную информацию вы можете найти в «Руководстве разработчика».
|
| 275 |
|
| 276 |
<sect id="getit">Возьмите программу и попробуйте ее
|
| 277 |
|
| 278 |
<p>Итак, первое, что вы должны сделать — это найти и загрузить исходные тексты программы.
|
| 279 |
Скорее всего, у вас уже есть исходные тексты, которые вы взяли с домашней странички автора.
|
| 280 |
Исходные тексты программ для Linux обычно предоставляются в виде архива в формате tar-gzip и имеют
|
| 281 |
расширение <file>.tar.gz</file> (или <file>.tgz</file>). Внутри архива обычно находится каталог
|
| 282 |
<var>программа</var>-<var>версия</var>, в котором находятся все файлы исходных текстов програмы. Если
|
| 283 |
исходные тексты выбранной вами программы поставляются в другом виде (например, имя файла
|
| 284 |
оканчивается на <file>.Z</file> или <file>.zip</file>), распакуйте его соответствующими средствами
|
| 285 |
или спросите в списке рассылки debian-mentors, если вы не знаете как это правильно сделать
|
| 286 |
(подсказка: выполните команду ‘file <var>архив.расширение</var>’).
|
| 287 |
|
| 288 |
<p>Для примера мы будем использовать программу <prgn>gentoo</prgn> — использующий библиотеку
|
| 289 |
GTK+ менеджер файлов для X11. Заметьте, что для этой программы уже создан пакет и он постоянно
|
| 290 |
обновляется.
|
| 291 |
|
| 292 |
<p>В вашем домашнем каталоге создайте подкаталог с именем <file>debian</file>, <file>deb</file> или
|
| 293 |
что-нибудь, что вы найдете подходящим (например, в нашем случае можно было бы использовать
|
| 294 |
<file>gentoo</file>). Поместите загруженный архив в этот каталог и распакуйте его при помощи
|
| 295 |
команды ‘tar -xzf gentoo-0.9.12.tar.gz’. Убедитесь, что при этом не возникло никаких
|
| 296 |
(даже, казалось бы, не относящихся к делу) ошибок (наличие каких-либо предупреждений на вашей машине
|
| 297 |
означает, что на машине, где для распаковки этого архива используются другие программ, данных архив
|
| 298 |
может и не распаковаться<comment editor="Michael Sobolev">очень плохая фраза!!</comment>).
|
| 299 |
|
| 300 |
<p>В результате вы получите подкаталог <file>gentoo-0.9.12</file>. Перейдите в этот каталог и
|
| 301 |
<strong>внимательно</strong> прочитайте имеющуюся информацию. Обычно полезными оказываются файлы
|
| 302 |
<file>README*</file>, <file>INSTALL*</file>, <file>*.lsm</file> и <file>*.html</file>. Здесь вы
|
| 303 |
найдете инструкции, которые позволят вам правильно скомпилировать и установить программу (скорее
|
| 304 |
всего в каталог <file>/usr/local/bin</file>; вы должны будете установить программу в другой каталог,
|
| 305 |
подробнее об этом в разделе <ref id="destdir">).
|
| 306 |
|
| 307 |
<p>Дальнейшая последовательность действий будет зависеть от конкртной программы. Однако современные
|
| 308 |
программы обычно поставляются со сценарием <prgn>configure</prgn>, который позволяет получить
|
| 309 |
параметры, необходимые для компиляции программы в вашей системе (также производится проверка, что в
|
| 310 |
вашей системе компиляция данной программы вообще возможна). После настройки (выполните команду
|
| 311 |
‘./configure’) вы можете скомпилировать вашу программу при помощи команды
|
| 312 |
‘make’. В некоторых случаях вы можете запустить внутренние тесты при помощи команды
|
| 313 |
‘make check’. Затем установите ее при помощи команды ‘make install’.
|
| 314 |
|
| 315 |
<p>Итак, скомпилируйте программу и попробуйте ее запустить, чтобы убедиться, что она правильно
|
| 316 |
работает и <comment editor="Michael Sobolev">что при установке и запуске</comment> ничто другое не
|
| 317 |
было испорчено.
|
| 318 |
|
| 319 |
<p>Вы также можете попытать воспользоваться командой ‘make uninstall’ для того, чтобы
|
| 320 |
удалить все установленные файлы. Команда ‘make clean’ позволит вам очистить ваш рабочий
|
| 321 |
каталог.
|
| 322 |
|
| 323 |
<sect id="namever">Перед запуском программы <prgn>dh_make</prgn>
|
| 324 |
|
| 325 |
<p>Свою работу вы должны начать в каталоге, свободном от временных и/или рабочих файлов.
|
| 326 |
|
| 327 |
<p>Для того, чтобы правильно построить пакет, вы должны поместить исходные тексты программы в
|
| 328 |
каталог <var>название пакета</var>-<var>версия</var>. Убедитесь, что название каталога содержит
|
| 329 |
буквы только нижнего регистра.
|
| 330 |
|
| 331 |
<p>Если название состоит из больше, чем одного слова, попробуйте сократить его или создать
|
| 332 |
какую-нибудь аббревиатуру<footnote>Я не совсем понимаю, зачем это может понадобится. <em>Прим.
|
| 333 |
переводчика</em>.</footnote>. Например, если название программы “John's little editor for
|
| 334 |
X”, название пакета может быть <package>johnledx</package>, <package>jle4x</package> или
|
| 335 |
что-нибудь, что вам покажется подходящим. Мы рекомендуем не превышать длину в 20 символов в
|
| 336 |
названии пакета.
|
| 337 |
|
| 338 |
<p>Вам также необходимо знать точную версию программы (эта информация будет использована в версии
|
| 339 |
пакета). Если программа нумеруется не как X.Y.Z, а датой, вы можете использовать эту дату,
|
| 340 |
приписав перед ней “0.0.” (на всякий случай, вдруг когда-нибудь авторы программы решать
|
| 341 |
выпустить версию 1.0). Таким образом, если программа была выпущена 19-го декабря 1999 года, вы
|
| 342 |
можете указать 0.0.19981219 в качестве версии. Версии некоторых программ вообще никак не
|
| 343 |
нумеруются. В таком случае мы рекомендуем вам связаться с авторами программы и выяснить, не
|
| 344 |
используют ли они какую-нибудь другую схему отслеживания версий.
|
| 345 |
|
| 346 |
<sect id="dh_make">Запуск программы <prgn>dh_make</prgn>
|
| 347 |
|
| 348 |
<p>Перейдите в каталог, в котором находятся исходные тексты программы и выполните команду
|
| 349 |
|
| 350 |
<example>
|
| 351 |
dh_make -e ваш@электронный.адрес -f ../gentoo-0.9.12.tar.gz
|
| 352 |
</example>
|
| 353 |
|
| 354 |
<p>Разумеется, вы должны заменить <var>ваш@электронный.адрес</var> на ваш реальный адрес, который
|
| 355 |
будет использован в различных служебных файлах пакета (<file>debian/changelog</file>,
|
| 356 |
<file>debian/control</file>, …), а имя файла — на имя архива, содержащего оригинальные
|
| 357 |
исходные тексты (см. <manref name="dh_make" section="1">).
|
| 358 |
|
| 359 |
<p>Теперь от вас понадобится дополнительная информация. Вы должны указать тип пакета, который вы
|
| 360 |
собираетесь создать. В случае программы <prgn>gentoo</prgn> мы хотим создать один пакет, содержащий
|
| 361 |
программу (single binary package), поэтому мы выберем первый пункт, нажав на клавишу
|
| 362 |
‘s’. Проверьте информацию, выведенную на экран и, если все правильно, нажмите на
|
| 363 |
клавишу Enter. Так как для вас это первый пакет, мы не рекомендуем вам создавать проект,
|
| 364 |
позволяющий построить сразу несколько пакетов (multi-binary package), или проект, содержащий
|
| 365 |
библиотеку. Это не сложно, нет, просто такая задача требует немного больше информации, поэтому мы
|
| 366 |
не будем это описывать в этом документе.
|
| 367 |
|
| 368 |
<p>Помните, что вам необходимо запускать программу <prgn>dh_make</prgn> <strong>только один
|
| 369 |
раз</strong>. Если вы попытаетесь запустить ее еще раз, она может сработать неправильно. Это также
|
| 370 |
означает, что для создания новой версии пакета, вы должны использовать другой подход. Это описано в
|
| 371 |
разделе <ref id="update">.
|
| 372 |
|
| 373 |
<chapt id="modify">Изменение исходных текстов
|
| 374 |
|
| 375 |
<p>Обычно программы устанавливаются в каталог <file>/usr/local</file>. Пакеты, входящие в состав
|
| 376 |
Debian, не должны использовать этот каталог, поскольку он зарезервирован для системного
|
| 377 |
администратора (или пользователей). Это означает, что вы обязательно должны изучить систему
|
| 378 |
построения вашей програмы, обычно вся необходимая информация содержится в файле
|
| 379 |
<file>Makefile</file>. В этом файле (для подробной информации см. <manref name="make" section="1">)
|
| 380 |
находятся команды, позволяющие автоматизировать процесс построения данной программы. Подробно об
|
| 381 |
этом файле мы говорим в разделе <ref id="rules">.
|
| 382 |
|
| 383 |
<p>Заметьте, что если выбранная вами программа использует GNU <manref name="automake" section="1">
|
| 384 |
и/или <manref name="autoconf" section="1"> (что означает у вас присутствуют файлы
|
| 385 |
<file>Makefile.am</file> или/и <file>Makefile.in</file> соответственно), вы должны будете изменять
|
| 386 |
именно эти файлы, так как программа <prgn>automake</prgn> использует информацию в файле
|
| 387 |
<file>Makefile.am</file> для создания нового файла <file>Makefile.in</file>, а сценарий
|
| 388 |
<prgn>configure</prgn> использует информацию в файле <file>Makefile.in</file> для создания нового
|
| 389 |
файла <file>Makefile</file>. Изменение файла <file>Makefile.am</file> требует определенных знаний о
|
| 390 |
программе <prgn>automake</prgn>, изменение же файла <file>Makefile.in</file> практически то же
|
| 391 |
самое, что и изменение файла <file>Makefile</file>, однако вы должны правильно использовать
|
| 392 |
переменные (имена, окруженные символом ‘@’), например <tt>@CFLAGS@</tt>,
|
| 393 |
<tt>@LN_S@</tt>; они будут заменены на значения, указанные при запуске сценария
|
| 394 |
<prgn>./configure</prgn>.
|
| 395 |
|
| 396 |
<p>Мы не можем охватить <em>все</em> проблемы, с которыми вы можете столкнуться, но все-таки мы
|
| 397 |
попытались перечислить те из них, с которыми вы, скорее всего, столкнетесь.
|
| 398 |
|
| 399 |
<sect id="destdir">Установка в необходимый каталог
|
| 400 |
|
| 401 |
<p>В большинстве случаев, программы устанавливаются в существующую иерархию каталогов вашей системы
|
| 402 |
таким образом, чтобы исполняемый файл попал в один из каталогов, указанных в переменной среды $PATH,
|
| 403 |
а файлы документации и страницы Руководства оказались в стандартных местах. Вы должны убедиться,
|
| 404 |
что операция установки выполняется правильно, но при этом вы должны сделать так, чтобы все
|
| 405 |
необходимые файлы могли быть установлены во временный каталог, который будет создан в каталоге
|
| 406 |
<file>debian/</file> (обычно этот временный каталог называется <file>debian/tmp</file>), это
|
| 407 |
позволит стандартным программам разработчика построить результирующий пакет. Все, что находится в
|
| 408 |
этом временном каталоге, появится в системе пользователя при установке вашего пакета. Единственное
|
| 409 |
отличие состоит в том, что программа <prgn>dpkg</prgn> будет устанавливать эти файлы по отношению к
|
| 410 |
корневому каталогу.
|
| 411 |
|
| 412 |
<p>Вообще говоря, вам нужно установить программу в каталог <file>debian/tmp</file>, но при этом она
|
| 413 |
должна себя правильно вести, если ее поместить в корневой каталог, то есть, если установить пакет.
|
| 414 |
Если процесс построения использует программы <prgn>GNU autoconf</prgn>, то программа
|
| 415 |
<prgn>dh_make</prgn> добавит необходимые команды с тем, чтобы необходимое действие выполнялось
|
| 416 |
автоматически, а вы можете пропустить данный раздел. В других случаях вам, скорее всего,
|
| 417 |
понадобится просмотреть и поправить <prgn>make</prgn>-файлы.
|
| 418 |
|
| 419 |
<p>Вот, например, соответствующая часть файла <file>Makefile</file> программы
|
| 420 |
<prgn>gentoo</prgn><footnote>Комментарии в файле <file>Makefile</file> были тоже переведены.
|
| 421 |
<em>Прим. переводчика</em></footnote>:
|
| 422 |
|
| 423 |
<example>
|
| 424 |
# Куда поместить исполняемые файлы по команде 'make install'?
|
| 425 |
BIN = /usr/local/bin
|
| 426 |
# Куда поместить значки по команде 'make install'? Внимание: если вы
|
| 427 |
# поменяете это значение, при старте программа gentoo может не найти
|
| 428 |
# этих значков. Вам придется поменять значение параметра 'путь к значкам'
|
| 429 |
# (в окне настроек страничка "Пути").
|
| 430 |
ICONS = /usr/local/lib/gentoo/
|
| 431 |
</example>
|
| 432 |
|
| 433 |
<p>Прежде всего вы должны добавить две строчки, которые говорят:
|
| 434 |
|
| 435 |
<example>
|
| 436 |
# Добавлено для Debian GNU/Linux.
|
| 437 |
DESTDIR =
|
| 438 |
</example>
|
| 439 |
|
| 440 |
так как процесс построения требует что-то подобное (об этом вы можете прочитать в раздел <ref
|
| 441 |
id="rules">).
|
| 442 |
|
| 443 |
<p>В файле <file>Makefile</file> был указан каталог, куда будет установлена программа. Вам
|
| 444 |
необходимо заменить ту строчку на:
|
| 445 |
|
| 446 |
<example>
|
| 447 |
# Куда поместить исполняемые файлы по команде 'make install'?
|
| 448 |
BIN = $(DESTDIR)/usr/X11R6/bin
|
| 449 |
</example>
|
| 450 |
|
| 451 |
<p>Вы можете спросить «почему в этот каталог, а не в какой-нибудь другой?» Потому что
|
| 452 |
существуют определенные правила, говорящие куда должны быть установлены программы. Об этом можно
|
| 453 |
почитать в стандарте «Иерархии файловой системы» (см.
|
| 454 |
<file>/usr/share/doc/debian-policy/fhs/</file>). Поэтому мы должны устанавливать программу в каталог
|
| 455 |
<file>/usr/X11R6/bin</file> вместо каталога <file>/usr/local/bin</file>, а страницу Руководства (в
|
| 456 |
нашем случае она отсутствует, но так как для большинства программ они существуют, мы создадим ее
|
| 457 |
позже) в каталог <file>/usr/share/man/man1</file>, а не в каталог <file>/usr/local/man/man1</file>.
|
| 458 |
|
| 459 |
<p>Следующий шаг несколько сложнее. Если вы произведете следующее изменение:
|
| 460 |
|
| 461 |
<example>
|
| 462 |
ICONS = $(DESTDIR)/usr/share/gentoo/
|
| 463 |
</example>
|
| 464 |
|
| 465 |
что соответствует стандарту, вам придется изменить исходные тексты программы. Но где и что искать?
|
| 466 |
Вы можете попробовать выполнить команду:
|
| 467 |
|
| 468 |
<example>
|
| 469 |
grep -n usr/local/lib *.[ch]
|
| 470 |
</example>
|
| 471 |
|
| 472 |
(ее нужно выполнить в каждом каталоге, в котором присутствуют файлы с расширением <file>.c</file>
|
| 473 |
или <file>.h</file>). Программа <prgn>grep</prgn> выведет названия файлов и номера строк, в которых
|
| 474 |
присутствует ‘usr/local/lib’. Теперь измените в этих строчках
|
| 475 |
‘usr/local/lib’ на ‘usr/share’ — и готово. Только будьте внимательны
|
| 476 |
и не измените что-нибудь другое, особенно, если вы не слишком много знаете о программировании на
|
| 477 |
языке C. :-)
|
| 478 |
|
| 479 |
<p>Теперь вам нужно найти цель ‘install’ (поищите в файле <file>Makefile</file> строчку,
|
| 480 |
содержащую ‘install:’) и переименуйте все ссылки на каталоги, не использующие
|
| 481 |
переменные, описанные в начале файла. В нашем случае, мы несколько улучшим то, что было. Если
|
| 482 |
раньше было:
|
| 483 |
|
| 484 |
<example>
|
| 485 |
# ----------------------------------------- Установка
|
| 486 |
|
| 487 |
# Для того, чтобы выполнить это, вы должны иметь права пользователя root!
|
| 488 |
install: gentoo
|
| 489 |
install ./gentoo $(BIN)
|
| 490 |
install icons $(ICONS)
|
| 491 |
install gentoorc-example $(HOME)/.gentoorc
|
| 492 |
</example>
|
| 493 |
|
| 494 |
<p>После необходимого изменения, он будет выглядеть так:
|
| 495 |
|
| 496 |
<example>
|
| 497 |
# ----------------------------------------- Установка
|
| 498 |
|
| 499 |
# Для того, чтобы выполнить это, вы должны иметь права пользователя root!
|
| 500 |
install: gentoo-target
|
| 501 |
install -d $(BIN) $(ICONS) $(DESTDIR)/etc
|
| 502 |
install ./gentoo $(BIN)
|
| 503 |
install -m644 icons/* $(ICONS)
|
| 504 |
install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc
|
| 505 |
install -d $(DESTDIR)/usr/share/doc/gentoo/html
|
| 506 |
cp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html
|
| 507 |
</example>
|
| 508 |
|
| 509 |
<p>Внимательный читатель заметит, что мы поменяли ‘gentoo’ на
|
| 510 |
‘gentoo-target’ в строчке, где указано ‘install:’. Это называется
|
| 511 |
исправлением ошибки. :-)
|
| 512 |
|
| 513 |
<p>Каждый раз, когда вы вносите изменения, не связанные непосредственно с созданием пакета Debian,
|
| 514 |
обязательно отправьте их авторам программы с тем, чтобы они могли быть включены в следующий выпуск
|
| 515 |
программы. Заметьте, что вы не должны посылать содержимое каталоге <file>debian</file>, однако вы
|
| 516 |
должны посылать любые другие изменения. И попытайтесь не создавать авторам лишних проблем, внося
|
| 517 |
изменения, имеющие отношения только к Linux (или даже Unix!).
|
| 518 |
|
| 519 |
<sect id="difflibs">Проблемы с библиотеками
|
| 520 |
|
| 521 |
<p>Существует общая проблема: библиотеки обычно различаются на разных платформах. Например, файл
|
| 522 |
<file>Makefile</file> может содержать ссылки на библиотеки, которые недоступны в Debian (или даже в
|
| 523 |
Linux!). В этом случае вы должны попытаться попробовать заменить библиотеку, служащую тем же самым
|
| 524 |
целям, но уже присутствующую в Debian. Наилучший способ — это попробовать закоментировать
|
| 525 |
строки, содержащие такие библиотеки (возможно, сообщения об ошибках помогут вам разобраться с тем,
|
| 526 |
как можно разрешить эту проблему).
|
| 527 |
|
| 528 |
<p>То есть, если в вашем файле <file>Makefile</file> (или <file>Makefile.in</file>) присутствует
|
| 529 |
строка, похожая на эту (а программа не компилируется):
|
| 530 |
|
| 531 |
<example>
|
| 532 |
LIBS = -lcurses -lчто-то -lчто-то-еще
|
| 533 |
</example>
|
| 534 |
|
| 535 |
<p>Попробуйте заменить ее на такую строчку (и, возможно, все заработает):
|
| 536 |
|
| 537 |
<example>
|
| 538 |
LIBS = -lncurses -lчто-то -lчто-то-еще
|
| 539 |
#LIBS = -lcurses -lчто-то -lчто-то-еще
|
| 540 |
</example>
|
| 541 |
|
| 542 |
<chapt id="crules">Обязательные файлы в каталоге <file>debian/</file>
|
| 543 |
|
| 544 |
<p>В основном каталоге программы (<file>gentoo-0.9.12</file>) появился новый подкаталог —
|
| 545 |
<file>debian</file>, в котором есть несколько файлов. Эти файлы определяют поведение пакета.
|
| 546 |
Наиболее важные из них — это файлы <file>control</file>, <file>changelog</file>,
|
| 547 |
<file>copyright</file> и <file>rules</file>, которые обязательны для всех пакетов.
|
| 548 |
|
| 549 |
<sect id="control">Файл <file>control</file>
|
| 550 |
|
| 551 |
<p>Этот файл содержит информацию, которая используется программами <prgn>dpkg</prgn> и
|
| 552 |
<prgn>dselect</prgn> (а также другими) для работы c пакетами. Вот, например, файл
|
| 553 |
<file>control</file>, который был создан программой <prgn>dh_make</prgn>.
|
| 554 |
|
| 555 |
<example>
|
| 556 |
1 Source: gentoo
|
| 557 |
2 Section: unknown
|
| 558 |
3 Priority: optional
|
| 559 |
4 Maintainer: Josip Rodin <jrodin@jagor.srce.hr>
|
| 560 |
5 Standards-Version: 3.0.1
|
| 561 |
6
|
| 562 |
7 Package: gentoo
|
| 563 |
8 Architecture: any
|
| 564 |
9 Depends: ${shlibs:Depends}
|
| 565 |
10 Description: <insert up to 60 chars description>
|
| 566 |
11 <insert long description, indented with spaces>
|
| 567 |
</example>
|
| 568 |
|
| 569 |
(номера строк добавлены)
|
| 570 |
|
| 571 |
<p>Строки 1-5 представляют собой управляющую информацию для пакета, содержащего исходные тексты, где
|
| 572 |
строка 1 — его название.
|
| 573 |
|
| 574 |
<p>Строка 2 — это название раздела, к которому относится данный пакет. Как, возможно, вы уже
|
| 575 |
заметили, Debian разбит на несколько разделов: раздел main (основной) содержит свободное программное
|
| 576 |
обеспечение, non-free (не-свободное) содержит пакеты, которые не совсем отвечают определению
|
| 577 |
свободного программного обеспечения, и contib, где находятся пакеты, которые, являясь свободным
|
| 578 |
программным обеспечением, зависят от не-свободного программного обесепеченя. В каждом разделе
|
| 579 |
существуют логические подразделы, определяющие что пакет из данного подраздела делает. Таким
|
| 580 |
образом, существует раздел ‘admin’, где находятся программы для администрирования
|
| 581 |
системы, раздел ‘base’ — для основных пакетов, раздел ‘devel’ содержит
|
| 582 |
инструменты разработки программного обеспечения, ‘doc’ — документацию,
|
| 583 |
‘libs’ — библиотеки, ‘mail’ — почтовых сервером и программ
|
| 584 |
чтения почты, ‘net’ — для сетевых приложений, ‘x11’ — программ,
|
| 585 |
работающих под X Window System, и много много других.
|
| 586 |
|
| 587 |
<p>В нашем случае мы должны указать ‘x11’.
|
| 588 |
|
| 589 |
<p>В строке 3 мы должны указать, насколько важен данный пакет. Значения полей <tt>Section</tt> и
|
| 590 |
<tt>Priority</tt> пока используется только программой <prgn>dselect</prgn>, которая позволяет
|
| 591 |
пользователю сортировать по значениям этих полей, они также могут (и, скорее всего, будут) замещены
|
| 592 |
сопровождающими ftp-сервер. Документ «Policy Manual» подробно описывает, чем нужно
|
| 593 |
руководствоваться при выборе значений для этих полей.
|
| 594 |
|
| 595 |
<p>В нашем случае мы оставим значение этого поля равным ‘optional’.
|
| 596 |
|
| 597 |
<p>В строке 4 указано имя и адрес разработчика пакета.
|
| 598 |
|
| 599 |
<p>Строка 5 — это версия документа «Debian Policy», стандартам которого следует
|
| 600 |
данный пакет (две основные версии пакета <package>debian-policy</package>).
|
| 601 |
|
| 602 |
<p>Если для построения программы используется нестандартный компилятор или какие-нибудь
|
| 603 |
дополнительные утилиты, вы должны перечислить их в специальной записи ‘Build-Depends’.
|
| 604 |
Дополнительная информация может быть найдена в «Руководстве по созданию пакетов» (раздел
|
| 605 |
8.7) и в документации, прилагаемой к пакету <package>build-essential</package>.
|
| 606 |
|
| 607 |
<p>В строке 7 указано имя двоичного пакета.
|
| 608 |
|
| 609 |
<p>В строке 8 указана архитектура процессора, для которого может быть скомпилирован двоичный пакет.
|
| 610 |
Мы можем оставить в качестве значения ‘any’, так как программа <manref
|
| 611 |
name="dpkg-gencontrol" section="1"> поместит в это поле значение, соответствующее процессору машины,
|
| 612 |
на которой компилировался пакет (см. в «Руководстве разработчика» объяснение понятия
|
| 613 |
‘перенос пакета’). Если ваш пакет не зависит от архитектуры процессора (например,
|
| 614 |
сценарий на языке Perl или же документ), измените значение этого поля на ‘all’ и
|
| 615 |
прочитайте раздел <ref id="rules">, который описывает цель ‘binary-indep’, используемую
|
| 616 |
при построении пакета.
|
| 617 |
|
| 618 |
<p>Одна из самых полезных возможностей системы управления пакетами Debian приведена в строке 9.
|
| 619 |
Пакеты могут зависеть друг от друга различным образом. Помимо зависимости <tt>Depends</tt>,
|
| 620 |
существуют также зависимости <tt>Recommends</tt>, <tt>Suggests</tt>, <tt>Pre-Depends</tt>,
|
| 621 |
<tt>Conflicts</tt>, <tt>Provides</tt>, и <tt>Replaces</tt> .
|
| 622 |
|
| 623 |
<p>Программы управления пакетами (такие как <prgn>dpkg</prgn>, <prgn>dselect</prgn> или
|
| 624 |
<prgn>apt</prgn>) обычно одинаковым образом обрабатывают эти зависимости. Мы попытались дать
|
| 625 |
объяснение тем случаям, когда поведение различается. (см. <manref name="dpkg" section="8">, <manref
|
| 626 |
name="dselect" section="8">, <manref name="apt" section="8">, <manref name="console-apt"
|
| 627 |
section="8">, <manref name="gnome-apt" section="8">)
|
| 628 |
|
| 629 |
<p>Ниже приведено описание того, что означает каждый тип зависимости:<taglist>
|
| 630 |
<tag><tt>Depends</tt></tag>
|
| 631 |
<item>Данный пакет не может быть установлен, если пакеты, указанные в списке зависимостей
|
| 632 |
<tt>Depends</tt>, также не установлены. Используйте этот тип зависимости, если ваша программа
|
| 633 |
гарантировано не будет работать (или вызовет какие-нибудь серьезные проблемы), если
|
| 634 |
соответствующий пакет не установлен.</item>
|
| 635 |
|
| 636 |
<tag><tt>Recommends</tt></tag>
|
| 637 |
<item>Программа <prgn>dselect</prgn> не установит ваш пакет, если пакеты, указанные в списке
|
| 638 |
зависимостей <tt>Recommends</tt>, не установлены. Однако программы <prgn>dpkg</prgn> и
|
| 639 |
<prgn>apt-get</prgn> должны позволить сделать это. Используйте данный тип зависимостей для
|
| 640 |
пакетов, которые бы не использовались вместе с вашим пакетом только в <em>нестандартных</em>
|
| 641 |
случаях.</item>
|
| 642 |
|
| 643 |
<tag><tt>Suggests</tt>
|
| 644 |
<item>Когда пользователь устанавливает ваш пакет, программа <prgn>dselect</prgn> предложит ему
|
| 645 |
также установить пакеты, перечисленные в списке зависимостей <tt>Suggests</tt>. Программы
|
| 646 |
<prgn>dpkg</prgn> и <prgn>apt</prgn> этого делать не будут. Используйте данный тип зависимостей
|
| 647 |
для пакетов, которые могут расширить функциональность вашего пакета, и, таким образом, увеличить
|
| 648 |
его полезность.</item>
|
| 649 |
|
| 650 |
<tag><tt>Pre-Depends</tt>
|
| 651 |
<item>Данный тип зависимостей строже, чем зависимости типа <tt>Depends</tt>. Данный пакет не
|
| 652 |
будет установлен, если пакеты, указанные в списке зависимостей <tt>Pre-Depends</tt>, уже не
|
| 653 |
установлены или <em>не настроены</em>. Используйте этот тип зависимостей <strong>очень</strong>
|
| 654 |
скупо и только после обсуждения в списке рассылки debian-devel. Другими словами, не используйте
|
| 655 |
его никогда! :-)</item>
|
| 656 |
|
| 657 |
<tag><tt>Conflicts</tt>
|
| 658 |
<item>Данный пакет не будет установлен пока пакеты, перечисленные в списке зависимостей
|
| 659 |
<tt>Conflicts</tt>, не удалены из системы. Используйте этот тип зависимостей, если ваша
|
| 660 |
программа гарантировано не будет работать (или же может вызвать серьезные повреждения системы),
|
| 661 |
если присутвует какой-нибудь определенный пакет.</item>
|
| 662 |
|
| 663 |
<tag><tt>Provides</tt>
|
| 664 |
<item>В случае, когда для какого-то типа пакетов существуют несколько альтернатив, вводятся так
|
| 665 |
называемый <em>виртуальные</em> пакеты. Полный список виртуальных пакетов приведен в файле
|
| 666 |
<file>/usr/share/doc/debian-policy/virtual-package-names-list.text.gz</file>. Вы должны
|
| 667 |
использовать данный тип зависимостей, если ваша программа реализует функциональность
|
| 668 |
существующего виртуального пакета.</item>
|
| 669 |
|
| 670 |
<tag><tt>Replaces</tt>
|
| 671 |
<item>Используйте данный тип зависимостей в случае, когда ваш пакет заменяет файлы из другого
|
| 672 |
пакета, или же полностью заменяет другой пакет (в этом случае, вы также должны использовать
|
| 673 |
зависимость типа <tt>Conflicts:</tt>). Тогда файлы из указанного пакета будут удалены перед
|
| 674 |
установкой вашего.</item>
|
| 675 |
</taglist>
|
| 676 |
|
| 677 |
<p>Формат этих полей одинаков: это список имен пакетов, разделенных запятой. Здесь также могут быть
|
| 678 |
указаны списки имен альтернативных пакетов, разделенных вертикальной чертой <tt>|</tt>. Для каждого
|
| 679 |
пакета в списке вы можете ограничить допустимость указанного пакета по версии. Версии указываются в
|
| 680 |
круглых скобках после имени пакета и должны состоять из символа сравнения, за которым следует номер
|
| 681 |
версии. Допустимыми символами сравнения являются: <tt><<</tt>, <tt><=</tt>, <tt>=</tt>,
|
| 682 |
<tt>>=</tt>, и <tt>>></tt> для “строго раньше чем”, “раньше или
|
| 683 |
равно”, “в точности равно”, “равно или позже” и “строго позже
|
| 684 |
чем” соответственно.
|
| 685 |
|
| 686 |
<p>Последнее, что мы хотели бы здесь показать, это $(shlibs:Depends). Данная конструкция позволяет
|
| 687 |
программе <manref name="dh_gencontrol" section="1"> заполнить данное поле названиями пакетов
|
| 688 |
разделяемых библиотек — например, <package>libc6</package> или <package>xlib6g</package>
|
| 689 |
— которыми пользуется ваша программа (список библиотек позволяет получить программа <manref
|
| 690 |
name="dh_shlibdeps" section="1">). Таким образом, вы можете их не указывать. В нашем случае, мы
|
| 691 |
оставляем строку 9 так как она есть.
|
| 692 |
|
| 693 |
<p>Мы добавим строчку (которая станет строкой номер 10) со списком зависимостей типа
|
| 694 |
<tt>Suggests</tt>. Здесь мы (пока только) укажем пакет <package>file</package> так как программа
|
| 695 |
<prgn>gentoo</prgn> может использовать некоторые из возможностей предоставляемых данным
|
| 696 |
пакетом/программой.
|
| 697 |
|
| 698 |
<p>Строка 11 — это короткое описание. У большинства людей ширина экрана составляет 80
|
| 699 |
колонок, поэтому мы рекомендуем вам не превышать этот предел. Здесь мы напишем “A fully GUI
|
| 700 |
configurable GTK+ file manager”.
|
| 701 |
|
| 702 |
<p>В строке 12 мы укажем длинное (более полное) описание пакета. В первой колонке должен быть
|
| 703 |
пробел. Пустых строк не должно быть. Если вам необходимо поместить в описание пустую строку,
|
| 704 |
поместите после пробела (!) символ ‘.’ (точка). После описания не должно быть
|
| 705 |
больше одной пустой строки.
|
| 706 |
|
| 707 |
<p>Вот обновленный файл <file>control</file>:
|
| 708 |
|
| 709 |
<example>
|
| 710 |
1 Source: gentoo
|
| 711 |
2 Section: x11
|
| 712 |
3 Priority: optional
|
| 713 |
4 Maintainer: Josip Rodin <jrodin@jagor.srce.hr>
|
| 714 |
5 Standards-Version: 3.0.1
|
| 715 |
6
|
| 716 |
7 Package: gentoo
|
| 717 |
8 Architecture: any
|
| 718 |
9 Depends: ${shlibs:Depends}
|
| 719 |
10 Suggests: file
|
| 720 |
11 Description: A fully GUI configurable GTK+ file manager
|
| 721 |
12 gentoo is a file manager for Linux written from scratch in pure C. It
|
| 722 |
13 uses the GTK+ toolkit for all of its interface needs. gentoo provides
|
| 723 |
14 100% GUI configurability; no need to edit config files by hand and re-
|
| 724 |
15 start the program. gentoo supports identifying the type of various
|
| 725 |
16 files (using extension, regular expressions, or the 'file' command),
|
| 726 |
17 and can display files of different types with different colors and icons.
|
| 727 |
18 .
|
| 728 |
19 gentoo borrows some of its look and feel from the classic Amiga file
|
| 729 |
20 manager "Directory OPUS" (written by Jonathan Potter).
|
| 730 |
</example>
|
| 731 |
|
| 732 |
(номера строк добавлены)
|
| 733 |
|
| 734 |
<sect id="copyright">Файл <file>copyright</file>
|
| 735 |
|
| 736 |
<p>Этот файл содержит информацию о местнонахождении исходной программы и авторских правах и
|
| 737 |
лицензионное соглашение. Документ «Политика Debian» диктует не формат этого файла, но
|
| 738 |
его содержание (см. раздел 6.5). Вот как выглядит файл, созданный программой <prgn>dh_make</prgn>:
|
| 739 |
|
| 740 |
<example>
|
| 741 |
1 This package was debianized by Josip Rodin <jrodin@jagor.srce.hr> on
|
| 742 |
2 Wed, 11 Nov 1998 21:02:14 +0100.
|
| 743 |
3
|
| 744 |
4 It was downloaded from <fill in ftp site>
|
| 745 |
5
|
| 746 |
6 Upstream Author(s): <put author(s) name and email here>
|
| 747 |
7
|
| 748 |
8 Copyright:
|
| 749 |
9
|
| 750 |
10 <Must follow here>
|
| 751 |
</example>
|
| 752 |
|
| 753 |
(номера строк добавлены)
|
| 754 |
|
| 755 |
<p>В этот файл необходимо добавить: место (ftp- или web-сервер), где вы взяли исходные пакет;
|
| 756 |
информацию об авторских правах и лицензионную информацию. Если лицензионное соглашение —
|
| 757 |
это одно из популярных “свободных” лицензий (например, GNU GPL, GNU LGPL, BSD или
|
| 758 |
Artistic), вы можете просто сослаться на соответствующий файл в существующем в каждой системе Debian
|
| 759 |
каталоге <file>/usr/share/common-licenses/</file>, в противном случае вы должны его включить
|
| 760 |
полностью. Программа <prgn>gentoo</prgn> лицензирована в соответствии с GNU General Public License,
|
| 761 |
поэтому измененный файл <file>copyright</file> будет выглядеть таким образом:
|
| 762 |
|
| 763 |
<example>
|
| 764 |
1 This package was debianized by Josip Rodin <jrodin@jagor.srce.hr> on
|
| 765 |
2 Wed, 11 Nov 1998 21:02:14 +0100.
|
| 766 |
3
|
| 767 |
4 It was downloaded from: ftp://ftp.obsession.se/gentoo/
|
| 768 |
5
|
| 769 |
6 Upstream author: Emil Brink <emil@obsession.se>
|
| 770 |
7
|
| 771 |
8 This software is copyright (c) 1998-99 by Emil Brink, Obsession
|
| 772 |
9 Development.
|
| 773 |
10
|
| 774 |
11 You are free to distribute this software under the terms of
|
| 775 |
12 the GNU General Public License.
|
| 776 |
13 On Debian systems, the complete text of the GNU General Public
|
| 777 |
14 License can be found in /usr/share/common-licenses/GPL file.
|
| 778 |
</example>
|
| 779 |
|
| 780 |
(номера строк добавлены)
|
| 781 |
|
| 782 |
<sect id="changelog">Файл <file>changelog</file>
|
| 783 |
|
| 784 |
<p>Это обязательный файл, имеющий специальный формат (описан в «Руководстве по созданию
|
| 785 |
пакетов» (раздел 3.2.3)). Этот файл используется программой <prgn>dpkg</prgn> и другими для
|
| 786 |
получения информации о версии, ревизии, разделе, и срочности для вашего пакета.
|
| 787 |
|
| 788 |
<p>Он также важен и для вас, так как регистрировать все изменения очень помогает в последствии. Он
|
| 789 |
также поможет людям, загрузившим ваш пакет, сразу понять, что именно изменилось в вашем пакете.
|
| 790 |
После установки пакета, этот файл будет доступен как
|
| 791 |
<file>/usr/share/doc/gentoo/changelog.Debian.gz</file>.
|
| 792 |
|
| 793 |
<p>Программа <prgn>dh_make</prgn> создала такой файл:
|
| 794 |
|
| 795 |
<example>
|
| 796 |
1 gentoo (0.9.12-1) unstable; urgency=low
|
| 797 |
2
|
| 798 |
3 * Initial Release.
|
| 799 |
4
|
| 800 |
5 -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 21:02:14 +0100
|
| 801 |
6
|
| 802 |
7 Local variables:
|
| 803 |
8 mode: debian-changelog
|
| 804 |
9 End:
|
| 805 |
</example>
|
| 806 |
|
| 807 |
(номера строк добавлены)
|
| 808 |
|
| 809 |
<p>В первой строке указаны название пакета, версия программы, ревизия пакета, раздел, и срочность.
|
| 810 |
Имя должно совпадать с названием пакета с исходными текстами. Раздел должен быть
|
| 811 |
‘unstable’ (нестабильный) или ‘experimental’ (экспериментальный). Срочность
|
| 812 |
не должна заменяться на что-либо большее, чем ‘low’ (низкая). :-)
|
| 813 |
|
| 814 |
<p>Строки 3-5 суть запись в журнале, это то, где вы регистрируете все сделанные над пакетом
|
| 815 |
изменения (это не изменения сделанные авторами программы — для регистрации этих изменений
|
| 816 |
используется отдельный файл, созданный авторами программы, и который устанавливается как
|
| 817 |
<file>/usr/share/doc/gentoo/changelog.gz</file>). Новые строки должны включаться
|
| 818 |
<strong>перед</strong> строкой, которая начинается с символа звездочка (‘*’). Программа
|
| 819 |
<manref name="dch" section="1"> упростит вам работу, вы также можете использовать программу <manref
|
| 820 |
name="emacs" section="1"> (строки 7-9 содержат информацию специально для нее). Либо вы можете
|
| 821 |
воспользоваться любым текстовым редактором. В результате у вас должно получиться что-то подобное:
|
| 822 |
|
| 823 |
<example>
|
| 824 |
1 gentoo (0.9.12-1) unstable; urgency=low
|
| 825 |
2
|
| 826 |
3 * Initial Release.
|
| 827 |
4 * This is my first Debian package.
|
| 828 |
5 * Adjusted the Makefile to fix $DESTDIR problems.
|
| 829 |
6
|
| 830 |
7 -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 21:02:14 +0100
|
| 831 |
8
|
| 832 |
9 Local variables:
|
| 833 |
10 mode: debian-changelog
|
| 834 |
11 End:
|
| 835 |
</example>
|
| 836 |
|
| 837 |
(номера строк добавлены)
|
| 838 |
|
| 839 |
<p>Когда вы выпускаете новую версию пакета, вы должны увеличить номер версии пакета. Вы можете
|
| 840 |
сделать это с помощью команды ‘dch -i’ или, если вам необходимо явно указать новую
|
| 841 |
версию, при помощи команды ‘dch -v <var>версия</var>-<var>ревизия</var>’, а затем
|
| 842 |
добавить комментарии при помощи вашего любимого текстового редактора. Совет: как получить дату в
|
| 843 |
необходимом формате? Используйте команду ‘822-date’ или команду ‘date -R’
|
| 844 |
|
| 845 |
<p>Информация о новой версии добавляется в начало файла <file>changelog</file>. Вот как может
|
| 846 |
выглядеть этот файл после изменений:
|
| 847 |
|
| 848 |
<example>
|
| 849 |
1 gentoo (0.9.12-2) unstable; urgency=low
|
| 850 |
2
|
| 851 |
3 * Fixed a glitch in the menu file.
|
| 852 |
4
|
| 853 |
5 -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 22:15:39 +0100
|
| 854 |
6
|
| 855 |
7 gentoo (0.9.12-1) unstable; urgency=low
|
| 856 |
8
|
| 857 |
9 * Initial Release.
|
| 858 |
10 * This is my first Debian package.
|
| 859 |
11 * Adjusted the Makefile to fix $DESTDIR problems.
|
| 860 |
12
|
| 861 |
13 -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 21:02:14 +0100
|
| 862 |
14
|
| 863 |
15 Local variables:
|
| 864 |
16 mode: debian-changelog
|
| 865 |
17 End:
|
| 866 |
</example>
|
| 867 |
|
| 868 |
(номера строк добавлены)
|
| 869 |
|
| 870 |
<p>Более подробную информацию о версия/обновлениях пакетов, вы можете найти в <ref id="update">.
|
| 871 |
|
| 872 |
<sect id="rules">Файл <file>rules</file>
|
| 873 |
|
| 874 |
<p>Теперь вернемся в каталог <file>debian</file> и взглянем на файл <file>rules</file>, который
|
| 875 |
используется программой <manref name="dpkg-buildpackage" section="1"> для создания пакета. Обычно
|
| 876 |
это просто еще один управляющий файл для программы <prgn>make</prgn>. Только он отличается от того,
|
| 877 |
что предлагается вместе с исходными текстами.
|
| 878 |
|
| 879 |
<p>Каждый файл <file>rules</file>, как и любой другой <file>Makefile</file>, содержит правила,
|
| 880 |
определяющие как необходимо выполнять те или иные действия. Правила состоят из имени цели, имен
|
| 881 |
файлов, и названий действий, которые необходимо выполнить (например, ‘build:’ или
|
| 882 |
‘install:’). Правила, которые вы хотите выполнить, должны быть указаны в командной
|
| 883 |
строке (например, ‘debian/rules build’ или ‘make -f debian/rules install’).
|
| 884 |
После имени цели вы можете указать имя другой цели, название программы или файла, от которых зависит
|
| 885 |
данная цель. Затем вы можете указать произвольной количество команд (первым символом в строке с
|
| 886 |
командой должен быть символ табуляции!), пустая строка завершает правило<footnote>Если я не
|
| 887 |
ошибаюсь, то правило завершается при нахождении названия следующей цели. <em>Прим.
|
| 888 |
переводчика</em></footnote> Комментарии начинаются с символа диеза (‘#’) и идут до конца
|
| 889 |
строки. Вы можете обращаться к правилам либо из других правил, либо из командной строки
|
| 890 |
‘debian/rules clean’).
|
| 891 |
|
| 892 |
<p>Возможное недопонимание должно уйти, после того, как вы посмотрите на содержимое файла
|
| 893 |
<file>rules</file>, который был создан программой <prgn>dh_make</prgn>. Вы также должны прочитать
|
| 894 |
документацию к программе <prgn>make</prgn>.
|
| 895 |
|
| 896 |
<p>Самое главное, что вы должны помнить о файле <file>rules</file>, созданном программой
|
| 897 |
<prgn>dh_make</prgn>, это то, что этот файл представляет собой рекомендацию. Он будет работать для
|
| 898 |
простых пакетов, но для более сложных вам, скорее всего, понадобится что-то добавить или удалить.
|
| 899 |
Единственное, что вы не должны менять, это имена правил, так как все инструменты используют эти
|
| 900 |
имена в соответствии с «Руководством по созданию пакетов».
|
| 901 |
|
| 902 |
<example>
|
| 903 |
1 #!/usr/bin/make -f
|
| 904 |
2 # Made with the aid of dh_make, by Craig Small
|
| 905 |
3 # Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess.
|
| 906 |
4 # Some lines taken from debmake, by Christoph Lameter.
|
| 907 |
5
|
| 908 |
6 # Uncomment this to turn on verbose mode.
|
| 909 |
7 #export DH_VERBOSE=1
|
| 910 |
8
|
| 911 |
9 # This is the debhelper compatability version to use.
|
| 912 |
10 export DH_COMPAT=1
|
| 913 |
11
|
| 914 |
12 build: build-stamp
|
| 915 |
13 build-stamp:
|
| 916 |
14 dh_testdir
|
| 917 |
15
|
| 918 |
16 # Add here commands to compile the package.
|
| 919 |
17 $(MAKE)
|
| 920 |
18
|
| 921 |
19 touch build-stamp
|
| 922 |
20
|
| 923 |
21 clean:
|
| 924 |
22 dh_testdir
|
| 925 |
23 dh_testroot
|
| 926 |
24 rm -f build-stamp
|
| 927 |
25
|
| 928 |
26 # Add here commands to clean up after the build process.
|
| 929 |
27 -$(MAKE) clean
|
| 930 |
28
|
| 931 |
29 dh_clean
|
| 932 |
30
|
| 933 |
31 install: build-stamp
|
| 934 |
32 dh_testdir
|
| 935 |
33 dh_testroot
|
| 936 |
34 dh_clean -k
|
| 937 |
35 dh_installdirs
|
| 938 |
36
|
| 939 |
37 # Add here commands to install the package into debian/tmp.
|
| 940 |
38 $(MAKE) install DESTDIR=`pwd`/debian/tmp
|
| 941 |
39
|
| 942 |
40 # Build architecture-independent files here.
|
| 943 |
41 binary-indep: build install
|
| 944 |
42 # We have nothing to do by default.
|
| 945 |
43
|
| 946 |
44 # Build architecture-dependent files here.
|
| 947 |
45 binary-arch: build install
|
| 948 |
46 # dh_testversion
|
| 949 |
47 dh_testdir
|
| 950 |
48 dh_testroot
|
| 951 |
49 # dh_installdebconf
|
| 952 |
50 dh_installdocs
|
| 953 |
51 dh_installexamples
|
| 954 |
52 dh_installmenu
|
| 955 |
53 # dh_installemacsen
|
| 956 |
54 # dh_installpam
|
| 957 |
55 # dh_installinit
|
| 958 |
56 dh_installcron
|
| 959 |
57 dh_installmanpages
|
| 960 |
58 dh_installinfo
|
| 961 |
59 # dh_undocumented
|
| 962 |
60 dh_installchangelogs
|
| 963 |
61 dh_link
|
| 964 |
62 dh_strip
|
| 965 |
63 dh_compress
|
| 966 |
64 dh_fixperms
|
| 967 |
65 # You may want to make some executables suid here.
|
| 968 |
66 dh_suidregister
|
| 969 |
67 # dh_makeshlibs
|
| 970 |
68 dh_installdeb
|
| 971 |
69 # dh_perl
|
| 972 |
70 dh_shlibdeps
|
| 973 |
71 dh_gencontrol
|
| 974 |
72 dh_md5sums
|
| 975 |
73 dh_builddeb
|
| 976 |
74
|
| 977 |
75 binary: binary-indep binary-arch
|
| 978 |
76 .PHONY: build clean binary-indep binary-arch binary install
|
| 979 |
</example>
|
| 980 |
|
| 981 |
(номера строк добавлены)
|
| 982 |
|
| 983 |
<p>Скорее всего, вы уже знакомы с форматом строки 1. Такая строка означает, что данный файл должен
|
| 984 |
обрабатываться программой <prgn>make</prgn>.
|
| 985 |
|
| 986 |
<p>Строки с 12-й по 19-ую описывают правило ‘build’ (и подчиненной правило
|
| 987 |
‘build-stamp’), которое выполняет <file>Makefile</file>, идущий вместе с программой, и
|
| 988 |
который позволяет скомпилировать программу.
|
| 989 |
|
| 990 |
<p>Правило ‘clean’, описанное в строках 21-29, удаляет все автоматически созданные
|
| 991 |
файлы. Это правило должно успешно выполняться всегда (даже, если файлов, которые нужно было бы
|
| 992 |
удалять, <strong>нет</strong>). Поэтому используйте форсирующие параметры (например, для программы
|
| 993 |
<prgn>rm</prgn> это ‘-f’) и игнорируйте результат выполнения команды (для этого
|
| 994 |
поместите ‘-’ перед ее названием).
|
| 995 |
|
| 996 |
<p>Процесс установки — правило ‘install’ — начинается в строке 31.
|
| 997 |
Основное, что оно выполняет, это цель ‘install’ из файла исходного файла
|
| 998 |
<file>Makefile</file> — установка происходит в каталог <file>debian/tmp</file> — вот
|
| 999 |
зачем мы использовали переменную $(DESTDIR) для указания корневого каталога при установке программы.
|
| 1000 |
|
| 1001 |
<p>Как указано в комментарии, правило ‘binary-indep’ в строках 41-43 используется для
|
| 1002 |
построения платформо-независимых пакетов, но в нашем примере такие отстутвуют. Если у вашего пакета
|
| 1003 |
в файле <file>debian/control</file> написано ‘Architecture: all’, то все команды для
|
| 1004 |
создания пакета вы должны поместить сюда, а правило ‘binary-arch’ должно быть пустым.
|
| 1005 |
|
| 1006 |
<p>Следующее правило — ‘binary-arch’ (строки 45-73) — использует несколько
|
| 1007 |
небольших утилит из пакета <package>debhelper</package>, которые выполняют действия, необходимые для
|
| 1008 |
того, чтобы ваш пакет удовлетворял требованиям Debian.
|
| 1009 |
|
| 1010 |
<p>Названия команд начинаются с <file>dh_</file>, здесь мы приводим список команд и описание того,
|
| 1011 |
что они делают:<taglist>
|
| 1012 |
<tag><manref name="dh_testdir" section="1">
|
| 1013 |
<item>проверяет, что вы находитесь в правильном каталоге
|
| 1014 |
(<file>/usr/local/gentoo/gentoo-0.9.12/</file>);
|
| 1015 |
<tag><manref name="dh_testroot" section="1">
|
| 1016 |
<item>проверяет, что вы обладаете необходимыми привилегиями (пользователя root);
|
| 1017 |
<tag><manref name="dh_installmanpages" section="1">
|
| 1018 |
<item>копирует страницы руководства; <!-- and links them correctly -->
|
| 1019 |
<tag><manref name="dh_strip" section="1">
|
| 1020 |
<item>удаляет отладочную информацию из исполняемых файлов, что позволяет сделать их меньше;
|
| 1021 |
<tag><manref name="dh_compress" section="1">
|
| 1022 |
<item>сжимает страницы Руководства и файлы документации программой <prgn>gzip</prgn>, если
|
| 1023 |
размер соответствующего файла превышает 4 Кбайт;
|
| 1024 |
<tag><manref name="dh_installdeb" section="1">
|
| 1025 |
<item>копирует управляющие файлы пакета в каталог <file>debian/tmp/DEBIAN</file>;
|
| 1026 |
<tag><manref name="dh_shlibdeps" section="1">
|
| 1027 |
<item>определяет зависимости для исполняемых файлов;
|
| 1028 |
<tag><manref name="dh_gencontrol" section="1">
|
| 1029 |
<item>создает и устанавливает файл <file>control</file>;
|
| 1030 |
<tag><manref name="dh_md5sums" section="1">
|
| 1031 |
<item>вычисляет MD5-суммы для всех файлов в пакете;
|
| 1032 |
</taglist>
|
| 1033 |
|
| 1034 |
<p>Для подробной информации о том, что делает и какие параметры допустимы для каждого из этих
|
| 1035 |
<prgn>dh_*</prgn> сценариев, мы рекомендуем вам прочитать соответствующие страницы Руководства. Мы
|
| 1036 |
упомянули не все сценарии из семейста <prgn>dh_*</prgn>, их описание вы можете найти в документации
|
| 1037 |
к пакету <package>debhelper</package>.
|
| 1038 |
|
| 1039 |
<p>Раздел ‘binary-arch’ — это то место, где вы должны закомментировать все те
|
| 1040 |
строки, отвечающие за дополнительные возможности, в которых вы не нуждаетесь. Например, для пакета
|
| 1041 |
<package>gentoo</package> были закомментированы строки со словами testversion, emacsen, pam, init,
|
| 1042 |
cron, manpages, info, undocumented, suidregister, makeshlibs, и perl. Это было сделано просто
|
| 1043 |
потому, что пакет <package>gentoo</package> в этом не нуждается. А в строке 60 было необходимо
|
| 1044 |
добавить ‘ FIXED’, так как это имя файла журнала изменений исходной программы.
|
| 1045 |
|
| 1046 |
<p>Две последние строки (как все другие строки, для которых у нас не нашлось комментариев)
|
| 1047 |
представляют собой более или менее обязательные вещи, о которых вы можете прочитать в руководстве к
|
| 1048 |
программе <prgn>make</prgn> и «Руководстве по созданию пакетов». Пока вы можете
|
| 1049 |
считать, что они недостаточно важны, чтобы о них знать.
|
| 1050 |
|
| 1051 |
<chapt id="dother">Другие файлы в каталоге <file>debian/</file>
|
| 1052 |
|
| 1053 |
<p>В каталоге <file>debian/</file> вы также можете найти другие файлы, большинство их которых имеет
|
| 1054 |
расширение <file>.ex</file>, который означает, что соответствущий файл является примером. Если вам
|
| 1055 |
необходимы те или иные дополнительные свойства у пакета, просмотрите эти файлы и прочитайте
|
| 1056 |
соответствующую документацию (подсказка: документ называется «Политика Debian»). Вы
|
| 1057 |
должны переименовать необходимые файлы, убрав расширение <file>.ex</file>, а затем изменить их и,
|
| 1058 |
если необходимо, файл <file>debian/rules</file>. Некоторые из этих файлов — те, что
|
| 1059 |
достаточно часто используются — описаны ниже.
|
| 1060 |
|
| 1061 |
<sect id="readdeb">Файл <file>README.Debian</file>
|
| 1062 |
|
| 1063 |
<p>Любая дополнительная информация, а также различия между программой в вашем пакете и исходной
|
| 1064 |
программой должны быть описаны в файле <file>README.Debian</file>. Программа <prgn>dh_make</prgn>
|
| 1065 |
создает файл, похожий на этот:
|
| 1066 |
|
| 1067 |
<example>
|
| 1068 |
gentoo for Debian
|
| 1069 |
----------------------
|
| 1070 |
|
| 1071 |
<possible notes regarding this package - if none, delete this file>
|
| 1072 |
|
| 1073 |
Josip Rodin <jrodin@jagor.srce.hr>, Wed, 11 Nov 1998 21:02:14 +0100
|
| 1074 |
</example>
|
| 1075 |
|
| 1076 |
<p>Так как в нашем примере нам нечего поместить в этот файл, мы его удалим.
|
| 1077 |
|
| 1078 |
<sect id="conffiles">Файл <file>conffiles</file>
|
| 1079 |
|
| 1080 |
<p>Одна из самых неприятных (и раздражающих) вещей, которая может случиться, это когда вы потратили
|
| 1081 |
очень много времени и усилий на то, чтобы настроить программу, а при очередном обновлении все ваши
|
| 1082 |
настройки исчезли. Debian предлагает решение этой проблемы, через специальный механизм работы с
|
| 1083 |
конфигурационными файлами: все конфигурационные файлы должны быть помечены как таковые, это позволит
|
| 1084 |
при обновлении проверить не изменились ли данные файлы, и, если они изменились, спросить у вас,
|
| 1085 |
нужно ли заменить старые конфигурационные файлы теми, что пришли в новом пакете. Для того, чтобы
|
| 1086 |
это сделать это, вы должны в файле <file>conffiles</file> указать <strong>полные</strong> пути к
|
| 1087 |
каждому конфигурационному файлу (обычно они находятся в каталоге <file>/etc</file>). Одни файл в
|
| 1088 |
одной строчке.
|
| 1089 |
|
| 1090 |
<p>У программы <prgn>gentoo</prgn> есть только один конфигурационный файл —
|
| 1091 |
<file>/etc/gentoorc</file> — и мы укажем его в файле <file>conffiles</file>. Если у вашей
|
| 1092 |
программы нет конфигурационных файлов, вам этот файл не нужен.
|
| 1093 |
|
| 1094 |
<sect id="dirs">Файл <file>dirs</file>
|
| 1095 |
|
| 1096 |
<p>Этот файл содержит названия каталогов, которые необходимы, но которые не создаются командой
|
| 1097 |
установки программы (‘make install’).
|
| 1098 |
|
| 1099 |
<p>По умолчанию, он содержит следующие строки:
|
| 1100 |
|
| 1101 |
<example>
|
| 1102 |
usr/bin
|
| 1103 |
usr/sbin
|
| 1104 |
</example>
|
| 1105 |
|
| 1106 |
<p>Заметьте, что начальный символ ‘косая черта’ отсутствует. В нашем случае, необходимо
|
| 1107 |
изменить этот файл следующим образом:
|
| 1108 |
|
| 1109 |
<example>
|
| 1110 |
usr/X11R6/bin
|
| 1111 |
usr/X11R6/man/man1
|
| 1112 |
</example>
|
| 1113 |
|
| 1114 |
но эти каталоги создаются командой ‘make install’, поэтому нам этот файл не нужен и мы
|
| 1115 |
можем его легко удалить.
|
| 1116 |
|
| 1117 |
<sect id="manpage">Файл <file>manpage.1.ex</file>
|
| 1118 |
|
| 1119 |
<p>Файлы, имеющие расширение <file>.ex</file>, представляют собой примеры тех дополнительных файлов,
|
| 1120 |
которые вам могут понадобится. Для того, чтобы воспользоваться ими, удалите расширение
|
| 1121 |
<file>.ex</file>. Если вы не собираетесь их использовать, просто удалите их!
|
| 1122 |
|
| 1123 |
<p>Для вашей программа должна присутствовать страница Руководства. Если ее нет, вы должны заполнить
|
| 1124 |
шаблон <file>manpage.1.ex</file>. Краткое описание того, как создавать страницы Руководства,
|
| 1125 |
смотрите в <manref name="man" section="7">. Не забудьте переименовать этот файл, чтобы его имя
|
| 1126 |
соответствовало имени программы, а расширение — разделу Руководства, в который должна попасть
|
| 1127 |
данная страница. Вот короткий список разделов:
|
| 1128 |
|
| 1129 |
<example>
|
| 1130 |
Раздел | Описание | Примечание
|
| 1131 |
1 Команды пользователя Программы и сценарии
|
| 1132 |
2 Системные вызовы Функции, предоставляемые ядром
|
| 1133 |
3 Библиотечные вызовы Функции, предоставляемые различными
|
| 1134 |
библиотеками
|
| 1135 |
4 Специальные файлы Обычно файлы в каталоге /dev
|
| 1136 |
5 Форматы файлов Например, формат файла /etc/passwd
|
| 1137 |
6 Игры Или другие развлекательный программы
|
| 1138 |
7 Макро пакеты Например, макросы пакета man
|
| 1139 |
8 Системное администрирование Программы, которые обычно запускаются
|
| 1140 |
только пользователем root
|
| 1141 |
9 Kernel routines Нестандартные вызовы и информация о
|
| 1142 |
внутреннем строении
|
| 1143 |
</example>
|
| 1144 |
|
| 1145 |
<p>Таким образом, страница Руководства для программы <prgn>gentoo</prgn> должна называться
|
| 1146 |
<file>gentoo.1</file> или <file>gentoo.1x</file>, так как это программа. В исходных текстах
|
| 1147 |
страница Руководства отсутствовала, поэтому нам пришлось написать собственную, используя информацию
|
| 1148 |
из файла примера и документации к программе.
|
| 1149 |
|
| 1150 |
<sect id="menu">Файл <file>menu.ex</file>
|
| 1151 |
|
| 1152 |
<p>Пользователи X Window System обычно используют диспетчеры окон, которые поддерживают меню
|
| 1153 |
программ. Если у них установлен пакет <package>menu</package>, им станет доступным набор
|
| 1154 |
стандартных меню для каждой установленной программы. Это не является обязательным с точки зрения
|
| 1155 |
«Политики Debian», но обычно пользователи с удовольствием используют данную возможность.
|
| 1156 |
Мы можем добавить меню для программы <prgn>gentoo</prgn>, соответствующим образом подправив данный
|
| 1157 |
файл. Вот, что создала программа <prgn>dh_make</prgn>:
|
| 1158 |
|
| 1159 |
<example>
|
| 1160 |
?package(gentoo):needs=X11|text|vc|wm section=Apps/see-menu-manual\
|
| 1161 |
title="gentoo" command="/usr/bin/gentoo"
|
| 1162 |
</example>
|
| 1163 |
|
| 1164 |
<p>Значение первого поля указывает тип интерфейса, требуемого для программы (например, текст (text)
|
| 1165 |
или X11). Затем перечислены путь в меню, где должна появиться соответствующая запись. Актуальный
|
| 1166 |
список разделов доступен в как
|
| 1167 |
<file>/usr/share/doc/debian-policy/menu-policy.html/ch2.html#s2.1</file>. Третье поле —
|
| 1168 |
название программы. Четвертое — название файла со значком для программ (или отсутствует, если
|
| 1169 |
значка нет). Пятое — текст, который появится в меню. И, наконец, шестое — команда,
|
| 1170 |
которая запускает программу.
|
| 1171 |
|
| 1172 |
<p>В нашем случае, данный файл будет выглядеть так:
|
| 1173 |
|
| 1174 |
<example>
|
| 1175 |
?package(gentoo):needs=X11 section=Apps/Misc \
|
| 1176 |
title="Gentoo" command="/usr/X11R6/bin/gentoo"
|
| 1177 |
</example>
|
| 1178 |
|
| 1179 |
<p>Для дополнительной информации смотрите <manref name="menufile" section="5">, <manref
|
| 1180 |
name="update-menus" section="1"> и <file>/usr/share/doc/debian-policy/menu-policy.html/</file>.
|
| 1181 |
|
| 1182 |
<sect id="watch">Файл <file>watch.ex</file>
|
| 1183 |
|
| 1184 |
<p>Данный файл может быть использован программами <manref name="uscan" section="1"> и <manref
|
| 1185 |
name="uupdate" section="1"> (они предоставляются пакетом <package>devscripts</package>) для
|
| 1186 |
отслеживания серверов, откуда вы загрузили исходные тексты программы. Вот, например, что находится
|
| 1187 |
в этом файле в пакете <package>gentoo</package>:
|
| 1188 |
|
| 1189 |
<example>
|
| 1190 |
# watch control file for uscan
|
| 1191 |
# Site Directory Pattern Version Script
|
| 1192 |
ftp.obsession.se /gentoo gentoo-(.*)\.tar\.gz debian uupdate
|
| 1193 |
</example>
|
| 1194 |
|
| 1195 |
<p>Совет: подсоединитесь к Интернету и попробуйте запустить программу <prgn>uscan</prgn>, находясь в
|
| 1196 |
каталоге программы <em>после</em> того, как вы создали этот файл. И прочитайте документацию на эту
|
| 1197 |
программу!
|
| 1198 |
|
| 1199 |
|
| 1200 |
<sect id="doc-base">Файл <file>ex.doc-base</file>
|
| 1201 |
|
| 1202 |
<p>Если ваш пакет содержит документацию (отличную от страниц Руководства или info-файлов), вы должны
|
| 1203 |
воспользоваться файлом <file>doc-base</file> для того, чтобы ее зарегистрировать в системе. Это
|
| 1204 |
позволит пользователю найти ее при помощи программ <manref name="dhelp" section="1">, <manref
|
| 1205 |
name="dwww" section="1"> и, возможно, другими.
|
| 1206 |
|
| 1207 |
<p>Вот как выглядит файл <file>doc-base</file>, входящий в пакет <package>gentoo</package>:
|
| 1208 |
|
| 1209 |
<example>
|
| 1210 |
Document: gentoo
|
| 1211 |
Title: Gentoo Manual
|
| 1212 |
Author: Emil Brink
|
| 1213 |
Abstract: This manual describes what Gentoo is, and how it can be used.
|
| 1214 |
Section: Apps/Tools
|
| 1215 |
|
| 1216 |
Format: HTML
|
| 1217 |
Index: /usr/share/doc/gentoo/html/index.html
|
| 1218 |
Files: /usr/share/doc/gentoo/html/*.html
|
| 1219 |
</example>
|
| 1220 |
|
| 1221 |
<p>Формат этого файла описан в странице Руководства <manref name="install-docs" section="8">, а
|
| 1222 |
также в документации, входящей в пакет <package>doc-base</package> (см. файл
|
| 1223 |
<file>/usr/doc/doc-base/doc-base.html/index.html</file>).
|
| 1224 |
|
| 1225 |
<sect id="maintscripts">Файлы <file>postinst.ex</file>, <file>preinst.ex</file>, <file>postrm.ex</file>, <file>prerm.ex</file>
|
| 1226 |
|
| 1227 |
<p>Эти файлы называются служебными сценариями, те сценариями, которые попадают в управляющую область
|
| 1228 |
пакета, и которые запускаются программой <prgn>dpkg</prgn> в момент, когда ваш пакет
|
| 1229 |
устанавливается, обновляется или удаляется.
|
| 1230 |
|
| 1231 |
<p>Возможно, пока вам следует избегать создания этих сценариев, так как они имеют тенденцию
|
| 1232 |
усложняться со временем. Подробную информацию вы можете найти в «Руководстве по созданию
|
| 1233 |
пакетов», раздел 6; также просмотрите файлы примеров, созданные программой
|
| 1234 |
<prgn>dh_make</prgn>.
|
| 1235 |
|
| 1236 |
<p>Теперь все должно быть готово к построению пакета.
|
| 1237 |
|
| 1238 |
<chapt id="final">Завершающие шаги
|
| 1239 |
|
| 1240 |
<sect id="build">Построение пакета
|
| 1241 |
|
| 1242 |
<p>Перейдите в основной каталог программы и выполните команду:
|
| 1243 |
|
| 1244 |
<example>
|
| 1245 |
dpkg-buildpackage -rfakeroot
|
| 1246 |
</example>
|
| 1247 |
|
| 1248 |
<p>Эта команды сделает все, что необходимо. Все, что вам необходимо будет сделать, это ввести
|
| 1249 |
фразу-пароль для вашего секретного PGP-ключа. <strong>Дважды!</strong> После того, как команда
|
| 1250 |
завершит свою работу, в каталоге, который вы создали в самом начале (<file>~/debian/</file>)
|
| 1251 |
следующие файлы:<taglist>
|
| 1252 |
<tag><file>gentoo_0.9.12-1_i386.deb</file>
|
| 1253 |
<item>это результат вашей работы — двоичный пакет. Вы можете воспользоваться программой
|
| 1254 |
<prgn>dpkg</prgn> или <prgn>dselect</prgn> для того, чтобы установить его (а затем и удалить)
|
| 1255 |
как любой другой каталог.
|
| 1256 |
|
| 1257 |
<tag><file>gentoo_0.9.12.orig.tar.gz</file>
|
| 1258 |
<item>Этот файл содержит оригинальные исходные тексты программы. Они необходимы для того, чтобы
|
| 1259 |
если кто-нибудь захочет перекомпилировать ваш пакет, мог это сделать. Или же, если он не
|
| 1260 |
используют систему управления пакетами Debian, но хочет загрузить исходные тексты программы и
|
| 1261 |
скомпилировать ее.
|
| 1262 |
|
| 1263 |
<tag><file>gentoo_0.9.12-1.dsc</file>
|
| 1264 |
<item>Этот файл содержит краткое описание исходных файлов для пакета. Этот файл создается с
|
| 1265 |
использованием информации из файла <file>gentoo-0.9.12/debian/control</file> и необходим для
|
| 1266 |
распаковки исходных текстов командой <manref name="dpkg-source" section="1">. Содержимое этого
|
| 1267 |
файла имеет вашу цифровую подпись, что позволяет другим людям удостовериться, что именно вы
|
| 1268 |
создали его.
|
| 1269 |
|
| 1270 |
<tag><file>gentoo_0.9.12-1.diff.gz</file>
|
| 1271 |
<item>Этот файл содержит (в формате ‘unified diff’) все изменения, которые вам
|
| 1272 |
понадобилось сделать с исходными текстами. Он был создал и используется программой <manref
|
| 1273 |
name="dpkg-source" section="1">.
|
| 1274 |
|
| 1275 |
<tag><file>gentoo_0.9.12-1_i386.changes</file>
|
| 1276 |
<item>Этот файл описывает изменения, сделанные в данной версии пакета по сравнению с предыдущей
|
| 1277 |
версией. Он используется программами поддержки ftp-архива Debian для помещения пакетов (как
|
| 1278 |
двоичных так и содержащих исходные тексты) в архив. Он содержит как информацию из файла
|
| 1279 |
<file>gentoo-0.9.12/debian/changelog</file> так и из файла <file>.dsc</file>.
|
| 1280 |
|
| 1281 |
<p>По мере того, как вы будете работать над вашим пакетом, вы можете добавлять новую
|
| 1282 |
функциональность или просто поменять его поведение. Люди, загружающие ваш пакет могут
|
| 1283 |
сразу увидеть в этом файле, что именно изменилось. Длинные строки цифр — это md5-суммы
|
| 1284 |
всех перечисленных файлов. Человек, которые загрузил ваши файлы, может проверить их при помощи
|
| 1285 |
программы <manref name="md5sum" section="1"> и, если значения контрольных сумм не совпадает, он
|
| 1286 |
точно будет знать, что это не те файлы, что создали вы (могла произойти ошибка при загрузке
|
| 1287 |
либо же кто-то “поправил” их). Этот файл также имеет цифровую подпись содержимого с
|
| 1288 |
тем, чтобы люди имели большую уверенность, что он был создан вами.
|
| 1289 |
</taglist>
|
| 1290 |
|
| 1291 |
<p>В случае, если процесс построения пакета длится значительное время, вы скорее всего захотите
|
| 1292 |
избежать пересборки с нуля каждый раз, пока вы отлаживаете содержимое файла
|
| 1293 |
<file>debian/rules</file>. В этом случае для построения <file>.deb</file>-файла мы рекомендуем вам
|
| 1294 |
использовать команду:
|
| 1295 |
|
| 1296 |
<example>
|
| 1297 |
fakeroot debian/rules binary
|
| 1298 |
</example>
|
| 1299 |
|
| 1300 |
<p>Убедитесь только, что цель ‘install’ <strong>не</strong> зависит от цели
|
| 1301 |
‘install-stamp’; в этом случае каждый раз будет выполнена команда ‘dh_clean
|
| 1302 |
-k’. После завершения отладки процедуры построения пакета, не забудьте построить пакет с
|
| 1303 |
нуля.
|
| 1304 |
|
| 1305 |
<sect id="checkit">
|
| 1306 |
<heading>Поиск ошибок в пакете</heading>
|
| 1307 |
|
| 1308 |
<p>Запустите программу <manref name="lintian" section="1"> на файл <file>.changes</file>; эта
|
| 1309 |
программа проверит пакет на наличие стандартных ошибок. Команда выглядит так:
|
| 1310 |
|
| 1311 |
<example>
|
| 1312 |
lintian -i gentoo_0.9.12-1_i386.changes
|
| 1313 |
</example>
|
| 1314 |
|
| 1315 |
<p>Разумеется, вы должны указать имя файла <file>.changes</file>, созданного для вашего пакета.
|
| 1316 |
Если окажется, что какие-то ошибки присутствуют (это все строки, начинающиеся с <tt>E:</tt>),
|
| 1317 |
внимательно прочитайте объяснение (строки, начинающиеся с <tt>N:</tt>), исправьте ошибки и
|
| 1318 |
попробуйте снова построить пакет, что описано в разделе <ref id="build">. Если вы увидели только
|
| 1319 |
строки, начинающиеся с <tt>W:</tt> (предупреждения), то вы можете быть уверены, что ваш пакет,
|
| 1320 |
скорее всего, правилен (но, разумеется, требует дополнительной работы).
|
| 1321 |
|
| 1322 |
<p>Заметьте, что программа <manref name="debuild" section="1"> поможет вам построить пакет при
|
| 1323 |
помощи программы <prgn>dpkg-buildpackage</prgn> и сразу проверить полученный пакет при помощи
|
| 1324 |
программы <prgn>lintian</prgn>.
|
| 1325 |
|
| 1326 |
<p>Проверьте содержимое пакета при помощи мэнеджера файлов (например, <manref name="mc"
|
| 1327 |
section="1">) или распакуйте его во временный каталог при помощи программы <manref name="dpkg-deb"
|
| 1328 |
section="1">. Убедитесь, что какие бы то ни было лишние файлы отсутсвуют как в двоичном пакете, так
|
| 1329 |
и в пакете с исходными текстами. Подсказка: команда
|
| 1330 |
|
| 1331 |
<example>
|
| 1332 |
zgrep ^+++ ../gentoo_0.9.12-1.diff.gz
|
| 1333 |
</example>
|
| 1334 |
|
| 1335 |
позволит вам получить список измененных исходных файлов, а команда
|
| 1336 |
|
| 1337 |
<example>
|
| 1338 |
dpkg-deb -c gentoo_0.9.12-1_i386.deb
|
| 1339 |
</example>
|
| 1340 |
|
| 1341 |
выведет список файлов в двоичном пакете.
|
| 1342 |
|
| 1343 |
<p>Теперь установите свой пакет (например, при помощи программы <manref name="debi" section="1">).
|
| 1344 |
Попробуйте установить его на машинах, отличной от той, на которой вы создавали ваш пакет, и
|
| 1345 |
тщательно проследите, что отсутствуют какие бы то ни было предупреждения или ошибки во время
|
| 1346 |
установки и при запуске программы.
|
| 1347 |
|
| 1348 |
<p>Позже, когда вы будет создавать новую версию пакета, для того, чтобы убедиться, что обновление
|
| 1349 |
будет происходить без ошибок, вы должны проверить следующее:<list>
|
| 1350 |
<item>попробуйте обновить предыдущую версию пакета (а также версию, включенную в последний
|
| 1351 |
выпуск Debian);
|
| 1352 |
<item>попробуйте установить предыдущую версию пакета,
|
| 1353 |
<item>установите пакет как новый (в систему, в которой отсутвуют предыдущие версии пакета);
|
| 1354 |
<item>удалите его, установите заново, и, наконец, вычистите его.
|
| 1355 |
</list>
|
| 1356 |
|
| 1357 |
<sect id="upload">
|
| 1358 |
<heading>Загрузка пакета</heading>
|
| 1359 |
|
| 1360 |
<p>Теперь, когда вы тщательно оттестировали свой пакет, настало время загрузить все необходимые
|
| 1361 |
файлы на сервер master.debian.org. Для этого вы должны воспользоваться программой <manref
|
| 1362 |
name="dupload" section="1">. Сначала вы должны создать конфигурационный файл
|
| 1363 |
<file>~/.dupload.conf</file>. Поместите в него что-нибудь похожее на:
|
| 1364 |
|
| 1365 |
<example>
|
| 1366 |
package config;
|
| 1367 |
$default_host = "master";
|
| 1368 |
|
| 1369 |
$cfg{"master"}{"method"} = "scpb";
|
| 1370 |
$cfg{"master"}{"login"} = "joy";
|
| 1371 |
$cfg{"master"}{"visibleuser"} = "jrodin";
|
| 1372 |
$cfg{"master"}{"visiblename"} = "jagor.srce.hr";
|
| 1373 |
$cfg{"master"}{"fullname"} = "Josip Rodin";
|
| 1374 |
|
| 1375 |
$cfg{"non-us"}{"method"} = "scpb";
|
| 1376 |
$cfg{"non-us"}{"login"} = "joy";
|
| 1377 |
$cfg{"non-us"}{"visibleuser"} = "jrodin";
|
| 1378 |
$cfg{"non-us"}{"visiblename"} = "jagor.srce.hr";
|
| 1379 |
$cfg{"non-us"}{"fullname"} = "Josip Rodin";
|
| 1380 |
|
| 1381 |
1;
|
| 1382 |
</example>
|
| 1383 |
|
| 1384 |
<p>Разумеется, измените информацию обо мне на вашу, для этого прочитайте страницу Руководства
|
| 1385 |
<manref name="dupload.conf" section="5">, что позволит вам понять, что означает каждый параметр.
|
| 1386 |
|
| 1387 |
<p>Теперь подсоединитесь к вашему Интернет-провайдеру и выполните команду:
|
| 1388 |
|
| 1389 |
<example>
|
| 1390 |
dupload --to master gentoo_0.9.12-1_i386.changes
|
| 1391 |
</example>
|
| 1392 |
|
| 1393 |
<p>Программа <prgn>dupload</prgn> проверяет, что md5-суммы ваших файлов совпадают с тем, что указано
|
| 1394 |
в файле <file>.changes</file>. Если будет обнаружено несовпадение, она вам предложит создать этот
|
| 1395 |
файл заново (о том, как правильно это сделать, смотрите раздел <ref id="build">).
|
| 1396 |
|
| 1397 |
<p>Программа <prgn>dupload</prgn> попросит ввести ваш пароль на машине master.debian.org, загрузит
|
| 1398 |
пакеты и пошлет, если необходимо, информацию о загруженных файлах в список рассылки
|
| 1399 |
<email>debian-devel-changes@lists.debian.org</email>.
|
| 1400 |
|
| 1401 |
<p>Если вы живете в Европе, вы можете воспользоваться другой машиной для загрузки ваших пакетов.
|
| 1402 |
Для дополнительной информации смотрите <manref name="dupload" section="1">, <manref
|
| 1403 |
name="dupload.conf" section="5"> и «Руководство разработчика».
|
| 1404 |
|
| 1405 |
<sect id="update">
|
| 1406 |
<heading>Обновление пакета</heading>
|
| 1407 |
|
| 1408 |
<p>Предположим, что в вашем пакете нашли ошибку, которую была зарегестрирована в системе
|
| 1409 |
отслеживания ошибок под номером #54321. Предположим также, что вы можете исправить эту ошибку. Для
|
| 1410 |
того, чтобы создать обновленный пакет Debian, вам необходимо сделать следующее:<list>
|
| 1411 |
<item>Разумеется, исправить ошибку.
|
| 1412 |
|
| 1413 |
<item>Добавить новую редакцию в файл <file>changelog</file> при помощи команды ‘dch
|
| 1414 |
-i’ и поместить в него краткое описание ошибки и то, как вы ее исправили. Обязательно в
|
| 1415 |
конце описания добавьте <tt>Closes: #54321</tt>. Этот позволит системе поддержки архива Debian
|
| 1416 |
автоматически послать сообщение о том, что данная ошибка была исправлена новой редакцией вашего
|
| 1417 |
пакета.
|
| 1418 |
|
| 1419 |
<item>Повторить действия описанные в разделах <ref id="build">, <ref id="checkit">, и <ref
|
| 1420 |
id="upload">. Отличие состоит в том, что в этот раз вы не должны включать архив, содержащий
|
| 1421 |
оригинальные исходные тексты, так как он уже присутствует в архиве Debian.
|
| 1422 |
</list>
|
| 1423 |
|
| 1424 |
<p>Теперь давайте рассмотрим случай, когда вышла новая версия программы и, разумеется, вы хотите
|
| 1425 |
создать для нее пакет. Вам необходимо сделать следующее:<list>
|
| 1426 |
<item>Загрузить исходные тексты программы и поместить этот архив (например,
|
| 1427 |
<file>gentoo-0.9.13.tar.gz</file>) в каталог, что мы создавали в самом начале (например,
|
| 1428 |
<file>~/debian</file>).
|
| 1429 |
|
| 1430 |
<item>Перейти в рабочий каталог (<file>gentoo-0.9.12</file>) и выполнить команду
|
| 1431 |
|
| 1432 |
<example>
|
| 1433 |
uupdate -u gentoo-0.9.13.tar.gz
|
| 1434 |
</example>
|
| 1435 |
|
| 1436 |
Вы должны заменить это имя именем файла, содержащего новую версию исходных тесктов программы.
|
| 1437 |
Программа <manref name="uupdate" section="1"> переименует его, попытается применить все
|
| 1438 |
изменения, что находятся в файле <file>.diff.gz</file> и обновит файл
|
| 1439 |
<file>debian/changelog</file>.
|
| 1440 |
|
| 1441 |
<item>Перейти в каталог с исходными текстами новой версии программы
|
| 1442 |
(<file>../genetool-0.9.13</file>) и повторить действия, описанный в разделах <ref id="build">,
|
| 1443 |
<ref id="checkit">, и <ref id="upload">.
|
| 1444 |
</list>
|
| 1445 |
|
| 1446 |
<p>Заметьте, что если создали файл <file>debian/watch</file> (это описано в разделе <ref
|
| 1447 |
id="watch">), вы можете запустить программу <manref name="uscan" section="1">, которая попытается
|
| 1448 |
найти новую версию программы, загрузить необходимый архив и запустит программу <prgn>uupdate</prgn>.
|
| 1449 |
|
| 1450 |
<sect id="helpme">
|
| 1451 |
<heading>Где искать помощь</heading>
|
| 1452 |
|
| 1453 |
<p>Прежде всего (перед тем, как задавать свой вопрос в одном из форумов!), пожалуйста, прочитайте
|
| 1454 |
документацию (RTFM!). Это включает документацию в каталогах <file>/usr/share/doc/dpkg</file>,
|
| 1455 |
<file>/usr/share/doc/debian</file>, <file>/usr/share/doc/package/*</file>, а также страницы
|
| 1456 |
Руководства и или info-страницы для всех упомянутых в этой статье программ. Если вы получили
|
| 1457 |
сообщение об ошибке (да, да, настоящее сообщение об ошибке!), это означает, что настало время
|
| 1458 |
посетить <url name="Debian Bug Tracking System" id="http://www.debian.org/Bugs/"> и ознакомиться с
|
| 1459 |
необходимой документацией. Это позволит вам эффективно работать с сообщениями об ошибках.
|
| 1460 |
|
| 1461 |
<p>Подписавшись на список рассылки <url name="Debian Mentors"
|
| 1462 |
id="mailto:debian-mentors@lists.debian.org">, вы можете попросить помощи у опытных разработчиков
|
| 1463 |
Debian. Для того, чтобы подписаться на этот список рассылки, пошлите письмо по адресу
|
| 1464 |
<email>debian-mentors-request@lists.debian.org</email>, указав слово ‘subscribe’ в поле
|
| 1465 |
темы письма.
|
| 1466 |
|
| 1467 |
<p>Если у вас остались вопросы, задайте их в список рассылки разработчиков Debian по адресу
|
| 1468 |
<email>debian-devel@lists.debian.org</email>. Вы можете подписаться на него, послав письмо по адресу
|
| 1469 |
<email>debian-devel-request@lists.debian.org</email>, в теме которого будет слово 'subscribe'.
|
| 1470 |
Если вы уже стали разработчиком Debian, вам следует подписаться на него в любом случае.
|
| 1471 |
|
| 1472 |
<p>Даже если все правильно работало, настало время молиться. Почему? Потому что через несколько
|
| 1473 |
часов или дней пользователи по всему миру начнут использовать ваш пакет, и, если вы допустили
|
| 1474 |
какую-нибудь <em>критическую</em> ошибку, многочисленные расстроенные пользователи Debian начнут
|
| 1475 |
наполнять ваш почтовый ящик злобными письмами… Шутка, шутка. :-)
|
| 1476 |
|
| 1477 |
<p>Расслабьтесь и приготовьтесь к получению сообщений об ошибках, так как много чего еще нужно
|
| 1478 |
сделать для того, чтобы пакет полностью соответствовал политике Debian (еще раз, прочитайте
|
| 1479 |
<em>полную документацию</em>). Успехов!
|
| 1480 |
|
| 1481 |
</book>
|
| 1482 |
|
| 1483 |
</debiandoc>
|
| 1484 |
|
| 1485 |
<!--
|
| 1486 |
vim:tw=100
|
| 1487 |
-->
|