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

  ViewVC Help
Powered by ViewVC 1.1.5