/[ddp]/manuals/trunk/maint-guide/maint-guide.ru.sgml
ViewVC logotype

Contents of /manuals/trunk/maint-guide/maint-guide.ru.sgml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1422 - (show annotations) (download) (as text)
Fri Feb 22 22:45:02 2002 UTC (11 years, 3 months ago) by joy
File MIME type: text/x-sgml
File size: 77845 byte(s)
added the ending slash
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 &copy; 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 &copy;
30 1997 Jaldhar Vyas <email>jaldhar@debian.org</email>.
31
32 <p>The New-Maintainer's Debian Packaging Howto, copyright &copy; 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>Хорошее начало &mdash; половина дела</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 &mdash; это
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 &mdash; в пакете <package>maint-guide</package></footnote>.
60
61 <sect id="needprogs">Программы, которые вам понадобятся
62
63 <p>Сначала вы должны установить все необходимые для разработки пакеты. Заметьте, что ниже
64 приведенный список не содержит пакеты приоритетов &lsquo;essential&rsquo; или &lsquo;required&rsquo;
65 &mdash; эти пакеты уже установлены на вашу машину.
66
67 <p>На момент написания этого документа официальной стабильной версией был выпуск 2.1
68 (&lsquo;slink&rsquo;), а выпуск 2.2 (&lsquo;potato&rsquo;) только создавался. Поэтому большинство
69 пакетов, упомянутых здесь, взяты из &lsquo;potato&rsquo;.
70
71 <p>Нижеперечисленные пакеты присутствуют в стандартной поставке Debian 2.1, что означает, что скорее
72 всего они уже установлены на вашей машине (как, впрочем, и пакеты, перечислинные в зависимостях к
73 этим<comment editor="Michael Sobolev">очень плохо!!!</comment>). Несмотря на это, мы рекомендуем
74 вам при помощи команды &lsquo;dpkg -s <var>имя-пакета</var>&rsquo; проверить, что они установлены.
75
76 <taglist>
77 <tag><package>binutils</package>
78 <item>Программы, входящие в этот пакет, позволяют работать с объектными файлами &mdash;
79 файлы, из которых &laquo;собираются&raquo; программы. (см. &lsquo;info binutils&rsquo;)
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). (см. &lsquo;info libc&rsquo;)
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>, поэтому вам также могут понадобиться эти утилиты (см. &lsquo;info
116 make&rsquo;, <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 &mdash; один из наиболее используемых интерпретируемых языков в Un*x-системах. Его
126 часто называют &ldquo;Unix's Swiss Army Chainsaw&rdquo; (Универсальная пила) (см. <manref
127 name="perl" section="1">).
128 </taglist>
129
130 <p>Из раздела &lsquo;devel&rsquo; вам могут понадобиться следующие пакеты:<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 создании пакета не было допущено ни одной из &laquo;стандартных&raquo; ошибок <!-- 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 построением операционной системы, &laquo;Стандарт иерархии файловой системы&raquo;. Также (что
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 архива, о том, как переименовывать пакеты, как переводить пакеты в &laquo;брошенное&raquo;
167 <comment editor="Alexey Vyskubov"><p>:-)</p></comment> состояние, как начать поддержку
168 &laquo;брошенного&raquo; пакета, как обновление пакета может быть произведено не его
169 разработчиком, как работать с ошибками в пакетах, когда и как обновлять пакеты и т.п. (см.
170 <file>/usr/share/doc/developers-reference/developers-reference.html/index.html</file>).
171 </taglist>
172
173 <p>Вам также понадобится (для создания цифровой подписи к пакету) программа зашифрования &mdash;
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> рады, что прислушались к нашему совету&hellip;
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. Этот процесс описан в &laquo;Руководстве
209 разработчика&raquo;. Пожалуйста, прочитайте этот документ.
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 &lsquo;стабильный&rsquo; выпуск, лучше всего будет посетить страницу <url name="Поиск пакетов"
225 id="http://www.debian.org/distrib/packages.html">. Если же вы используете
226 <strong>текущий</strong> &lsquo;нестабильный&rsquo; выпуск, для проверки лучше использовать
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 &mdash; не работает ли уже кто-нибудь над этим пакетом. Если работа уже ведется, но вы
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 &lsquo;contrib&rsquo; или &lsquo;non-free&rsquo;. Если вы не уверены, в какой раздел данный
248 пакет должен быть помещен, спросите в списке рассылки
249 <email>debian-legal@lists.debian.org</email>.</item>
250
251 <item>Программа <strong>не должна</strong> требовать режима setuid root, а еще лучше &mdash;
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>Разумеется, все перечисленное &mdash; это всего лишь меры безопасности, которые спасут вас от
269 разъяренных пользователей, если вы сделали что-то не так в ftp-демоне&hellip; Как только вы
270 приобретете определенный опыт, вы сможете создавать любые пакеты &mdash; но помните, что даже
271 опытные разработчики, если у них есть какие-то сомнения, обращаются за помощью в список рассылки
272 debian-devel. Подписчики этого списка рассылки всегда рады помочь.
273
274 <p>Дополнительную информацию вы можете найти в &laquo;Руководстве разработчика&raquo;.
275
276 <sect id="getit">Возьмите программу и попробуйте ее
277
278 <p>Итак, первое, что вы должны сделать &mdash; это найти и загрузить исходные тексты программы.
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 (подсказка: выполните команду &lsquo;file <var>архив.расширение</var>&rsquo;).
287
288 <p>Для примера мы будем использовать программу <prgn>gentoo</prgn> &mdash; использующий библиотеку
289 GTK+ менеджер файлов для X11. Заметьте, что для этой программы уже создан пакет и он постоянно
290 обновляется.
291
292 <p>В вашем домашнем каталоге создайте подкаталог с именем <file>debian</file>, <file>deb</file> или
293 что-нибудь, что вы найдете подходящим (например, в нашем случае можно было бы использовать
294 <file>gentoo</file>). Поместите загруженный архив в этот каталог и распакуйте его при помощи
295 команды &lsquo;tar -xzf gentoo-0.9.12.tar.gz&rsquo;. Убедитесь, что при этом не возникло никаких
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 &lsquo;./configure&rsquo;) вы можете скомпилировать вашу программу при помощи команды
312 &lsquo;make&rsquo;. В некоторых случаях вы можете запустить внутренние тесты при помощи команды
313 &lsquo;make check&rsquo;. Затем установите ее при помощи команды &lsquo;make install&rsquo;.
314
315 <p>Итак, скомпилируйте программу и попробуйте ее запустить, чтобы убедиться, что она правильно
316 работает и <comment editor="Michael Sobolev">что при установке и запуске</comment> ничто другое не
317 было испорчено.
318
319 <p>Вы также можете попытать воспользоваться командой &lsquo;make uninstall&rsquo; для того, чтобы
320 удалить все установленные файлы. Команда &lsquo;make clean&rsquo; позволит вам очистить ваш рабочий
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>. Например, если название программы &ldquo;John's little editor for
334 X&rdquo;, название пакета может быть <package>johnledx</package>, <package>jle4x</package> или
335 что-нибудь, что вам покажется подходящим. Мы рекомендуем не превышать длину в 20 символов в
336 названии пакета.
337
338 <p>Вам также необходимо знать точную версию программы (эта информация будет использована в версии
339 пакета). Если программа нумеруется не как X.Y.Z, а датой, вы можете использовать эту дату,
340 приписав перед ней &ldquo;0.0.&rdquo; (на всякий случай, вдруг когда-нибудь авторы программы решать
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>, &hellip;), а имя файла &mdash; на имя архива, содержащего оригинальные
357 исходные тексты (см. <manref name="dh_make" section="1">).
358
359 <p>Теперь от вас понадобится дополнительная информация. Вы должны указать тип пакета, который вы
360 собираетесь создать. В случае программы <prgn>gentoo</prgn> мы хотим создать один пакет, содержащий
361 программу (single binary package), поэтому мы выберем первый пункт, нажав на клавишу
362 &lsquo;s&rsquo;. Проверьте информацию, выведенную на экран и, если все правильно, нажмите на
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 переменные (имена, окруженные символом &lsquo;@&rsquo;), например <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>Вы можете спросить &laquo;почему в этот каталог, а не в какой-нибудь другой?&raquo; Потому что
452 существуют определенные правила, говорящие куда должны быть установлены программы. Об этом можно
453 почитать в стандарте &laquo;Иерархии файловой системы&raquo; (см.
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 присутствует &lsquo;usr/local/lib&rsquo;. Теперь измените в этих строчках
475 &lsquo;usr/local/lib&rsquo; на &lsquo;usr/share&rsquo; &mdash; и готово. Только будьте внимательны
476 и не измените что-нибудь другое, особенно, если вы не слишком много знаете о программировании на
477 языке C. :-)
478
479 <p>Теперь вам нужно найти цель &lsquo;install&rsquo; (поищите в файле <file>Makefile</file> строчку,
480 содержащую &lsquo;install:&rsquo;) и переименуйте все ссылки на каталоги, не использующие
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>Внимательный читатель заметит, что мы поменяли &lsquo;gentoo&rsquo; на
510 &lsquo;gentoo-target&rsquo; в строчке, где указано &lsquo;install:&rsquo;. Это называется
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. Наилучший способ &mdash; это попробовать закоментировать
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>) появился новый подкаталог &mdash;
545 <file>debian</file>, в котором есть несколько файлов. Эти файлы определяют поведение пакета.
546 Наиболее важные из них &mdash; это файлы <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 &lt;jrodin@jagor.srce.hr&gt;
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: &lt;insert up to 60 chars description&gt;
566 11 &lt;insert long description, indented with spaces&gt;
567 </example>
568
569 (номера строк добавлены)
570
571 <p>Строки 1-5 представляют собой управляющую информацию для пакета, содержащего исходные тексты, где
572 строка 1 &mdash; его название.
573
574 <p>Строка 2 &mdash; это название раздела, к которому относится данный пакет. Как, возможно, вы уже
575 заметили, Debian разбит на несколько разделов: раздел main (основной) содержит свободное программное
576 обеспечение, non-free (не-свободное) содержит пакеты, которые не совсем отвечают определению
577 свободного программного обеспечения, и contib, где находятся пакеты, которые, являясь свободным
578 программным обеспечением, зависят от не-свободного программного обесепеченя. В каждом разделе
579 существуют логические подразделы, определяющие что пакет из данного подраздела делает. Таким
580 образом, существует раздел &lsquo;admin&rsquo;, где находятся программы для администрирования
581 системы, раздел &lsquo;base&rsquo; &mdash; для основных пакетов, раздел &lsquo;devel&rsquo; содержит
582 инструменты разработки программного обеспечения, &lsquo;doc&rsquo; &mdash; документацию,
583 &lsquo;libs&rsquo; &mdash; библиотеки, &lsquo;mail&rsquo; &mdash; почтовых сервером и программ
584 чтения почты, &lsquo;net&rsquo; &mdash; для сетевых приложений, &lsquo;x11&rsquo; &mdash; программ,
585 работающих под X Window System, и много много других.
586
587 <p>В нашем случае мы должны указать &lsquo;x11&rsquo;.
588
589 <p>В строке 3 мы должны указать, насколько важен данный пакет. Значения полей <tt>Section</tt> и
590 <tt>Priority</tt> пока используется только программой <prgn>dselect</prgn>, которая позволяет
591 пользователю сортировать по значениям этих полей, они также могут (и, скорее всего, будут) замещены
592 сопровождающими ftp-сервер. Документ &laquo;Policy Manual&raquo; подробно описывает, чем нужно
593 руководствоваться при выборе значений для этих полей.
594
595 <p>В нашем случае мы оставим значение этого поля равным &lsquo;optional&rsquo;.
596
597 <p>В строке 4 указано имя и адрес разработчика пакета.
598
599 <p>Строка 5 &mdash; это версия документа &laquo;Debian Policy&raquo;, стандартам которого следует
600 данный пакет (две основные версии пакета <package>debian-policy</package>).
601
602 <p>Если для построения программы используется нестандартный компилятор или какие-нибудь
603 дополнительные утилиты, вы должны перечислить их в специальной записи &lsquo;Build-Depends&rsquo;.
604 Дополнительная информация может быть найдена в &laquo;Руководстве по созданию пакетов&raquo; (раздел
605 8.7) и в документации, прилагаемой к пакету <package>build-essential</package>.
606
607 <p>В строке 7 указано имя двоичного пакета.
608
609 <p>В строке 8 указана архитектура процессора, для которого может быть скомпилирован двоичный пакет.
610 Мы можем оставить в качестве значения &lsquo;any&rsquo;, так как программа <manref
611 name="dpkg-gencontrol" section="1"> поместит в это поле значение, соответствующее процессору машины,
612 на которой компилировался пакет (см. в &laquo;Руководстве разработчика&raquo; объяснение понятия
613 &lsquo;перенос пакета&rsquo;). Если ваш пакет не зависит от архитектуры процессора (например,
614 сценарий на языке Perl или же документ), измените значение этого поля на &lsquo;all&rsquo; и
615 прочитайте раздел <ref id="rules">, который описывает цель &lsquo;binary-indep&rsquo;, используемую
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>&lt;&lt;</tt>, <tt>&lt;=</tt>, <tt>=</tt>,
682 <tt>&gt;=</tt>, и <tt>&gt;&gt;</tt> для &ldquo;строго раньше чем&rdquo;, &ldquo;раньше или
683 равно&rdquo;, &ldquo;в точности равно&rdquo;, &ldquo;равно или позже&rdquo; и &ldquo;строго позже
684 чем&rdquo; соответственно.
685
686 <p>Последнее, что мы хотели бы здесь показать, это $(shlibs:Depends). Данная конструкция позволяет
687 программе <manref name="dh_gencontrol" section="1"> заполнить данное поле названиями пакетов
688 разделяемых библиотек &mdash; например, <package>libc6</package> или <package>xlib6g</package>
689 &mdash; которыми пользуется ваша программа (список библиотек позволяет получить программа <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 &mdash; это короткое описание. У большинства людей ширина экрана составляет 80
699 колонок, поэтому мы рекомендуем вам не превышать этот предел. Здесь мы напишем &ldquo;A fully GUI
700 configurable GTK+ file manager&rdquo;.
701
702 <p>В строке 12 мы укажем длинное (более полное) описание пакета. В первой колонке должен быть
703 пробел. Пустых строк не должно быть. Если вам необходимо поместить в описание пустую строку,
704 поместите после пробела (!) символ &lsquo;.&rsquo; (точка). После описания не должно быть
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 &lt;jrodin@jagor.srce.hr&gt;
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 лицензионное соглашение. Документ &laquo;Политика Debian&raquo; диктует не формат этого файла, но
738 его содержание (см. раздел 6.5). Вот как выглядит файл, созданный программой <prgn>dh_make</prgn>:
739
740 <example>
741 1 This package was debianized by Josip Rodin &lt;jrodin@jagor.srce.hr&gt; on
742 2 Wed, 11 Nov 1998 21:02:14 +0100.
743 3
744 4 It was downloaded from &lt;fill in ftp site&gt;
745 5
746 6 Upstream Author(s): &lt;put author(s) name and email here&gt;
747 7
748 8 Copyright:
749 9
750 10 &lt;Must follow here&gt;
751 </example>
752
753 (номера строк добавлены)
754
755 <p>В этот файл необходимо добавить: место (ftp- или web-сервер), где вы взяли исходные пакет;
756 информацию об авторских правах и лицензионную информацию. Если лицензионное соглашение &mdash;
757 это одно из популярных &ldquo;свободных&rdquo; лицензий (например, 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 &lt;jrodin@jagor.srce.hr&gt; 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 &lt;emil@obsession.se&gt;
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>Это обязательный файл, имеющий специальный формат (описан в &laquo;Руководстве по созданию
785 пакетов&raquo; (раздел 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 &lt;jrodin@jagor.srce.hr&gt; 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 &lsquo;unstable&rsquo; (нестабильный) или &lsquo;experimental&rsquo; (экспериментальный). Срочность
812 не должна заменяться на что-либо большее, чем &lsquo;low&rsquo; (низкая). :-)
813
814 <p>Строки 3-5 суть запись в журнале, это то, где вы регистрируете все сделанные над пакетом
815 изменения (это не изменения сделанные авторами программы &mdash; для регистрации этих изменений
816 используется отдельный файл, созданный авторами программы, и который устанавливается как
817 <file>/usr/share/doc/gentoo/changelog.gz</file>). Новые строки должны включаться
818 <strong>перед</strong> строкой, которая начинается с символа звездочка (&lsquo;*&rsquo;). Программа
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 &lt;jrodin@jagor.srce.hr&gt; 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 сделать это с помощью команды &lsquo;dch -i&rsquo; или, если вам необходимо явно указать новую
841 версию, при помощи команды &lsquo;dch -v <var>версия</var>-<var>ревизия</var>&rsquo;, а затем
842 добавить комментарии при помощи вашего любимого текстового редактора. Совет: как получить дату в
843 необходимом формате? Используйте команду &lsquo;822-date&rsquo; или команду &lsquo;date -R&rsquo;
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 &lt;jrodin@jagor.srce.hr&gt; 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 &lt;jrodin@jagor.srce.hr&gt; 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 файлов, и названий действий, которые необходимо выполнить (например, &lsquo;build:&rsquo; или
882 &lsquo;install:&rsquo;). Правила, которые вы хотите выполнить, должны быть указаны в командной
883 строке (например, &lsquo;debian/rules build&rsquo; или &lsquo;make -f debian/rules install&rsquo;).
884 После имени цели вы можете указать имя другой цели, название программы или файла, от которых зависит
885 данная цель. Затем вы можете указать произвольной количество команд (первым символом в строке с
886 командой должен быть символ табуляции!), пустая строка завершает правило<footnote>Если я не
887 ошибаюсь, то правило завершается при нахождении названия следующей цели. <em>Прим.
888 переводчика</em></footnote> Комментарии начинаются с символа диеза (&lsquo;#&rsquo;) и идут до конца
889 строки. Вы можете обращаться к правилам либо из других правил, либо из командной строки
890 &lsquo;debian/rules clean&rsquo;).
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 имена в соответствии с &laquo;Руководством по созданию пакетов&raquo;.
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-ую описывают правило &lsquo;build&rsquo; (и подчиненной правило
987 &lsquo;build-stamp&rsquo;), которое выполняет <file>Makefile</file>, идущий вместе с программой, и
988 который позволяет скомпилировать программу.
989
990 <p>Правило &lsquo;clean&rsquo;, описанное в строках 21-29, удаляет все автоматически созданные
991 файлы. Это правило должно успешно выполняться всегда (даже, если файлов, которые нужно было бы
992 удалять, <strong>нет</strong>). Поэтому используйте форсирующие параметры (например, для программы
993 <prgn>rm</prgn> это &lsquo;-f&rsquo;) и игнорируйте результат выполнения команды (для этого
994 поместите &lsquo;-&rsquo; перед ее названием).
995
996 <p>Процесс установки &mdash; правило &lsquo;install&rsquo; &mdash; начинается в строке 31.
997 Основное, что оно выполняет, это цель &lsquo;install&rsquo; из файла исходного файла
998 <file>Makefile</file> &mdash; установка происходит в каталог <file>debian/tmp</file> &mdash; вот
999 зачем мы использовали переменную $(DESTDIR) для указания корневого каталога при установке программы.
1000
1001 <p>Как указано в комментарии, правило &lsquo;binary-indep&rsquo; в строках 41-43 используется для
1002 построения платформо-независимых пакетов, но в нашем примере такие отстутвуют. Если у вашего пакета
1003 в файле <file>debian/control</file> написано &lsquo;Architecture: all&rsquo;, то все команды для
1004 создания пакета вы должны поместить сюда, а правило &lsquo;binary-arch&rsquo; должно быть пустым.
1005
1006 <p>Следующее правило &mdash; &lsquo;binary-arch&rsquo; (строки 45-73) &mdash; использует несколько
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>Раздел &lsquo;binary-arch&rsquo; &mdash; это то место, где вы должны закомментировать все те
1040 строки, отвечающие за дополнительные возможности, в которых вы не нуждаетесь. Например, для пакета
1041 <package>gentoo</package> были закомментированы строки со словами testversion, emacsen, pam, init,
1042 cron, manpages, info, undocumented, suidregister, makeshlibs, и perl. Это было сделано просто
1043 потому, что пакет <package>gentoo</package> в этом не нуждается. А в строке 60 было необходимо
1044 добавить &lsquo; FIXED&rsquo;, так как это имя файла журнала изменений исходной программы.
1045
1046 <p>Две последние строки (как все другие строки, для которых у нас не нашлось комментариев)
1047 представляют собой более или менее обязательные вещи, о которых вы можете прочитать в руководстве к
1048 программе <prgn>make</prgn> и &laquo;Руководстве по созданию пакетов&raquo;. Пока вы можете
1049 считать, что они недостаточно важны, чтобы о них знать.
1050
1051 <chapt id="dother">Другие файлы в каталоге <file>debian/</file>
1052
1053 <p>В каталоге <file>debian/</file> вы также можете найти другие файлы, большинство их которых имеет
1054 расширение <file>.ex</file>, который означает, что соответствущий файл является примером. Если вам
1055 необходимы те или иные дополнительные свойства у пакета, просмотрите эти файлы и прочитайте
1056 соответствующую документацию (подсказка: документ называется &laquo;Политика Debian&raquo;). Вы
1057 должны переименовать необходимые файлы, убрав расширение <file>.ex</file>, а затем изменить их и,
1058 если необходимо, файл <file>debian/rules</file>. Некоторые из этих файлов &mdash; те, что
1059 достаточно часто используются &mdash; описаны ниже.
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 &lt;possible notes regarding this package - if none, delete this file&gt;
1072
1073 Josip Rodin &lt;jrodin@jagor.srce.hr&gt;, 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> есть только один конфигурационный файл &mdash;
1091 <file>/etc/gentoorc</file> &mdash; и мы укажем его в файле <file>conffiles</file>. Если у вашей
1092 программы нет конфигурационных файлов, вам этот файл не нужен.
1093
1094 <sect id="dirs">Файл <file>dirs</file>
1095
1096 <p>Этот файл содержит названия каталогов, которые необходимы, но которые не создаются командой
1097 установки программы (&lsquo;make install&rsquo;).
1098
1099 <p>По умолчанию, он содержит следующие строки:
1100
1101 <example>
1102 usr/bin
1103 usr/sbin
1104 </example>
1105
1106 <p>Заметьте, что начальный символ &lsquo;косая черта&rsquo; отсутствует. В нашем случае, необходимо
1107 изменить этот файл следующим образом:
1108
1109 <example>
1110 usr/X11R6/bin
1111 usr/X11R6/man/man1
1112 </example>
1113
1114 но эти каталоги создаются командой &lsquo;make install&rsquo;, поэтому нам этот файл не нужен и мы
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 соответствовало имени программы, а расширение &mdash; разделу Руководства, в который должна попасть
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 &laquo;Политики Debian&raquo;, но обычно пользователи с удовольствием используют данную возможность.
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>. Третье поле &mdash;
1168 название программы. Четвертое &mdash; название файла со значком для программ (или отсутствует, если
1169 значка нет). Пятое &mdash; текст, который появится в меню. И, наконец, шестое &mdash; команда,
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 усложняться со временем. Подробную информацию вы можете найти в &laquo;Руководстве по созданию
1233 пакетов&raquo;, раздел 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>это результат вашей работы &mdash; двоичный пакет. Вы можете воспользоваться программой
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>Этот файл содержит (в формате &lsquo;unified diff&rsquo;) все изменения, которые вам
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 сразу увидеть в этом файле, что именно изменилось. Длинные строки цифр &mdash; это md5-суммы
1284 всех перечисленных файлов. Человек, которые загрузил ваши файлы, может проверить их при помощи
1285 программы <manref name="md5sum" section="1"> и, если значения контрольных сумм не совпадает, он
1286 точно будет знать, что это не те файлы, что создали вы (могла произойти ошибка при загрузке
1287 либо же кто-то &ldquo;поправил&rdquo; их). Этот файл также имеет цифровую подпись содержимого с
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>Убедитесь только, что цель &lsquo;install&rsquo; <strong>не</strong> зависит от цели
1301 &lsquo;install-stamp&rsquo;; в этом случае каждый раз будет выполнена команда &lsquo;dh_clean
1302 -k&rsquo;. После завершения отладки процедуры построения пакета, не забудьте построить пакет с
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"> и &laquo;Руководство разработчика&raquo;.
1404
1405 <sect id="update">
1406 <heading>Обновление пакета</heading>
1407
1408 <p>Предположим, что в вашем пакете нашли ошибку, которую была зарегестрирована в системе
1409 отслеживания ошибок под номером #54321. Предположим также, что вы можете исправить эту ошибку. Для
1410 того, чтобы создать обновленный пакет Debian, вам необходимо сделать следующее:<list>
1411 <item>Разумеется, исправить ошибку.
1412
1413 <item>Добавить новую редакцию в файл <file>changelog</file> при помощи команды &lsquo;dch
1414 -i&rsquo; и поместить в него краткое описание ошибки и то, как вы ее исправили. Обязательно в
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>, указав слово &lsquo;subscribe&rsquo; в поле
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 наполнять ваш почтовый ящик злобными письмами&hellip; Шутка, шутка. :-)
1476
1477 <p>Расслабьтесь и приготовьтесь к получению сообщений об ошибках, так как много чего еще нужно
1478 сделать для того, чтобы пакет полностью соответствовал политике Debian (еще раз, прочитайте
1479 <em>полную документацию</em>). Успехов!
1480
1481 </book>
1482
1483 </debiandoc>
1484
1485 <!--
1486 vim:tw=100
1487 -->

  ViewVC Help
Powered by ViewVC 1.1.5