/[ddp]/manuals/trunk/maint-guide/maint-guide.en.dbk
ViewVC logotype

Contents of /manuals/trunk/maint-guide/maint-guide.en.dbk

Parent Directory Parent Directory | Revision Log Revision Log


Revision 8740 - (show annotations) (download)
Thu Apr 28 12:42:20 2011 UTC (2 years ago) by osamu
File size: 208778 byte(s)
Justin B Rye: ch8 maint-guide
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- -*- DocBook -*- -->
3 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
4 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
5 <!ENTITY % trans SYSTEM "po4a/maint-guide.en.ent"> %trans;
6 <!ENTITY % common SYSTEM "common.ent"> %common;
7 <!ENTITY % version SYSTEM "version.ent"> %version;
8 ]>
9 <book lang="en">
10 <!-- This is UTF-8 encoded. -->
11 <!--
12 This is reorganized to make this document robust for translation
13 when some externally referenced information changes.
14
15 If you want to add extra contents to this document, please do so by
16 * adding tag like &othercredit; in English and provide it for each language.
17 * add extra content within msgstr but within <footnote>...</footnote>
18 Please note there will be content checker to match tags of msgid and msgstr.
19 The second rule is a way to get exception to this rule.
20
21 Please try to correct something in translation. If you think contents needs fix,
22 Let's fix it in the root cause.
23
24 Please understand to keep this document focused. Not everything you think important
25 for new maintainer should be written down. Something social needs to be elsewhere.
26 Some thing should be left to the practice. Something needs to be left for exercise
27 for people to check official documentations.
28 -->
29 <title>Debian New Maintainers' Guide</title>
30 <bookinfo>
31 <authorgroup>
32 <!-- do not use firstname and surname tags it braks Japanese. The same with othercredit -->
33 <author> <personname>Josip Rodin</personname> <email>joy-mg@debian.org</email> <contrib>original contents</contrib> </author>
34 <author> <personname>Osamu Aoki</personname> <email>osamu@debian.org</email> <contrib>updated contents</contrib> </author>
35 <!-- translator credits in po4a/translator.*.ent -->
36 &othercredit;
37 </authorgroup>
38 <releaseinfo>version &docversion;</releaseinfo>
39 <pubdate>&docisodate;</pubdate>
40 <copyright><year>1998-2002</year> <holder>Josip Rodin</holder></copyright>
41 <copyright><year>2005-2011</year> <holder>Osamu Aoki</holder></copyright>
42 <copyright><year>2010</year> <holder>Craig Small</holder></copyright>
43 <copyright><year>2010</year> <holder>Raphaël Hertzog</holder></copyright>
44 <legalnotice>
45 <para>
46 This document may be used under the terms the GNU General Public License
47 version 2 or higher.
48 </para>
49 <para>
50 This document was made using with these two documents as examples:
51 </para>
52 <itemizedlist>
53 <listitem>
54 <para>
55 Making a Debian Package (AKA the Debmake Manual), copyright © 1997 Jaldhar
56 Vyas.
57 </para>
58 </listitem>
59 <listitem>
60 <para>
61 The New-Maintainer's Debian Packaging Howto, copyright © 1997 Will Lowe.
62 </para>
63 </listitem>
64 </itemizedlist>
65 </legalnotice>
66 <!-- toc -->
67 </bookinfo>
68 <chapter id="start"><title>Getting started The Right Way</title>
69 <para>
70 This document tries to describe the building of a Debian package to ordinary
71 Debian users and prospective developers. It uses fairly non-technical language, and
72 it's well covered with working examples. There is an old Latin saying:
73 <emphasis>Longum iter est per praecepta, breve et efficax per
74 exempla</emphasis> (It's a long way by the rules, but short and efficient with
75 examples).
76 </para>
77 <para>
78 This document has been updated for the Debian <literal>&base-release;</literal>
79 release.
80 <footnote><para> The document assumes you are using a
81 <literal>&base-release;</literal> or newer system. If you need to follow this
82 text in an older system (including an older Ubuntu system etc.), you must
83 install backported <systemitem role="package">dpkg</systemitem> and
84 <systemitem role="package">debhelper</systemitem> packages, at least.
85 </para> </footnote>
86 </para>
87 <para>
88 One of the things that makes Debian such a top-notch distribution is its
89 package system. While there is a vast quantity of software already in the
90 Debian format, sometimes you need to install software that isn't. You may be
91 wondering how you can make your own packages; and perhaps you think it is a very
92 difficult task. Well, if you are a real novice on Linux, it is hard, but if
93 you were a rookie, you wouldn't be reading this document now&nbsp;:-)
94 You do need to know a little about Unix programming but you certainly
95 don't need to be a wizard.
96 <footnote><para>
97 You can learn about the basic handling of a Debian system from the
98 <ulink url="&debref;">Debian Reference</ulink>. It contains some pointers to
99 learn about Unix programming, too.
100 </para></footnote>
101 </para>
102 <para>
103 One thing is certain, though: to properly create and maintain Debian packages
104 takes many hours. Make no mistake, for our system to work the maintainers
105 need to be both technically competent and diligent.
106 </para>
107 <para>
108 If you need some help on packaging, please read <xref linkend="helpme"/>.
109 </para>
110 <para>
111 Newer versions of this document should always be available online at
112 <ulink url="&maint-guide;"/> and in the
113 <systemitem role="package">maint-guide</systemitem> package.
114 The translations may be available in packages such as
115 <systemitem role="package">maint-guide-es</systemitem>.
116 Please note that this documentation may be slightly outdated.
117 </para>
118 <para>
119 Since this is a tutorial, I choose to explain each detailed step for some
120 important topics. Some of them may look irrelevant to you. Please be patient.
121 I have also intentionally skipped some corner cases and provided only pointers
122 to keep this document simple.
123 </para>
124 <section id="socialdynamism"><title>Social dynamics of Debian</title>
125 <para>
126 Here are some observations of Debian's social dynamics, presented in the hope
127 that it will prepare you for interactions with Debian.
128 </para>
129 <itemizedlist>
130 <listitem><para>We all are volunteers.</para>
131 <itemizedlist>
132 <listitem><para>You cannot impose on others what to do.</para></listitem>
133 <listitem><para>You should be motivated to do things by yourself.</para></listitem>
134 </itemizedlist></listitem>
135 <listitem><para>Friendly cooperation is the driving force.</para>
136 <itemizedlist>
137 <listitem><para>Your contribution should not overstrain others.</para></listitem>
138 <listitem><para>Your contribution is valuable only when others appreciate it.</para></listitem>
139 </itemizedlist></listitem>
140 <listitem><para>Debian is not your school where you get automatic attention of teachers.</para>
141 <itemizedlist>
142 <listitem><para>You should be able to learn many things by yourself.</para></listitem>
143 <listitem><para>Attention from other volunteers is a very scarce resource.</para></listitem>
144 </itemizedlist></listitem>
145 <listitem><para>Debian is constantly improving.</para>
146 <itemizedlist>
147 <listitem><para>You are expected to make high quality packages.</para></listitem>
148 <listitem><para>You should adapt yourself to change.</para></listitem>
149 </itemizedlist></listitem>
150 </itemizedlist>
151 <para>
152 There are several types of people interacting around Debian with different
153 roles.
154 </para>
155 <itemizedlist>
156 <listitem>
157 <para>
158 <emphasis role="strong">upstream author</emphasis>: the person who made the
159 original program.
160 </para>
161 </listitem>
162 <listitem>
163 <para>
164 <emphasis role="strong">upstream maintainer</emphasis>: the person who
165 currently maintains the program.
166 </para>
167 </listitem>
168 <listitem>
169 <para>
170 <emphasis role="strong">maintainer</emphasis>: the person making the Debian
171 package of the program.
172 </para>
173 </listitem>
174 <listitem>
175 <para>
176 <emphasis role="strong">sponsor</emphasis>: a person who helps maintainers to
177 upload packages to the official Debian package archive (after checking their
178 contents).
179 </para>
180 </listitem>
181 <listitem>
182 <para>
183 <emphasis role="strong">mentor</emphasis>: a person who helps novice
184 maintainers with packaging etc.
185 </para>
186 </listitem>
187 <listitem>
188 <para>
189 <emphasis role="strong">Debian Developer</emphasis> (DD): a member of
190 the Debian project with full upload rights to the official Debian package
191 archive.
192 </para>
193 </listitem>
194 <listitem>
195 <para>
196 <emphasis role="strong">Debian Maintainer</emphasis> (DM): a person with
197 limited upload rights to the official Debian package archive.
198 </para>
199 </listitem>
200 </itemizedlist>
201 <para>
202 Please note that you cannot become an official
203 <emphasis role="strong">Debian Developer</emphasis> (DD) overnight, because it
204 takes more than technical skill. Please do not be discouraged by this. If it
205 is useful to others, you can still upload your package either as a
206 <emphasis role="strong">maintainer</emphasis> through a
207 <emphasis role="strong">sponsor</emphasis> or as a
208 <emphasis role="strong">Debian Maintainer</emphasis>.
209 </para>
210 <para>
211 Please note that you do not need to create any new package to become an
212 official Debian Developer. Contributing to the existing packages can provide a
213 path to becoming an official Debian Developer too. There are many packages
214 waiting for good maintainers (see <xref linkend="choose"/>).
215 </para>
216 <para>
217 Since we focus only on technical aspects of packaging in this document,
218 please refer to the following to learn how Debian functions and how you can get involved.
219 </para>
220 <itemizedlist>
221 <listitem><para><ulink url="&logiciellibre;">Debian: 17 years of Free Software, "do-ocracy", and democracy</ulink> (Introductory slides) </para> </listitem>
222 <listitem><para><ulink url="&debianorghelp;">How can you help Debian?</ulink> (official) </para> </listitem>
223 <listitem><para><ulink url="&debianfaqhelp;">The Debian GNU/Linux FAQ, Chapter 13 - "Contributing to the Debian Project"</ulink> (semi-official) </para> </listitem>
224 <listitem><para><ulink url="&debianwikihelp;">Debian Wiki, HelpDebian</ulink> (supplemental) </para> </listitem>
225 <listitem><para><ulink url="&nm-do;">Debian New Maintainer site</ulink> (official) </para> </listitem>
226 <listitem><para><ulink url="&debianmentorfaq;">Debian Mentors FAQ</ulink> (supplemental) </para> </listitem>
227 </itemizedlist>
228 </section>
229 <section id="needprogs"><title>Programs you need for development</title>
230 <para>
231 Before you start anything, you should make sure that you have properly
232 installed some additional packages needed for development. Note that the list
233 doesn't contain any packages marked <literal>essential</literal> or
234 <literal>required</literal> - we expect that you have those installed already.
235 </para>
236 <para>
237 The following packages come with the standard Debian installation, so you
238 probably have them already (along with any additional packages they depend on).
239 Still, you should check it with <literal>aptitude show
240 <replaceable>package</replaceable></literal>
241 or with <literal>dpkg -s <replaceable>package</replaceable></literal>.
242 </para>
243 <para>
244 The most important package to install on your development system is the
245 <systemitem role="package">build-essential</systemitem> package. Once you try
246 to install that, it will <emphasis>pull in</emphasis> other packages required to
247 have a basic build environment.
248 </para>
249 <para>
250 For some types of packages, that is all you will require; however, there is
251 another set of packages that while not essential for all package builds are
252 useful to have installed or may be required by your package:
253 </para>
254 <itemizedlist>
255 <listitem>
256 <para>
257 <systemitem role="package">autoconf</systemitem>, <systemitem
258 role="package">automake</systemitem>, and <systemitem
259 role="package">autotools-dev</systemitem> - many newer programs use configure
260 scripts and <filename>Makefile</filename> files preprocessed with the help of
261 programs like these (see <literal>info autoconf</literal>, <literal>info
262 automake</literal>). <systemitem role="package">autotools-dev</systemitem>
263 keeps up-to-date versions of certain auto files and has documentation about the
264 best way to use those files.
265 </para>
266 </listitem>
267 <listitem>
268 <para>
269 <systemitem role="package">debhelper</systemitem> and
270 <systemitem role="package">dh-make</systemitem> -
271 <systemitem role="package">dh-make</systemitem> is necessary to create
272 the skeleton of our example package, and it will use some of the
273 <systemitem role="package">debhelper</systemitem> tools for creating
274 packages. They are not essential for this purpose, but are
275 <emphasis>highly</emphasis> recommended for new maintainers. It makes
276 the whole process very much easier to start, and to control afterwards.
277 (See <citerefentry> <refentrytitle>dh_make</refentrytitle>
278 <manvolnum>1</manvolnum> </citerefentry>, <citerefentry>
279 <refentrytitle>debhelper</refentrytitle> <manvolnum>1</manvolnum>
280 </citerefentry>.) <footnote><para> There are also some more specialized
281 but similar packages such as
282 <systemitem role="package">dh-make-perl</systemitem>,
283 <systemitem role="package">dh-make-php</systemitem>, etc. </para>
284 </footnote>
285 </para>
286 </listitem>
287 <listitem>
288 <para>
289 <systemitem role="package">devscripts</systemitem> - this package contains some
290 useful scripts that can be helpful for maintainers, but they are also
291 not necessary for building packages. Packages recommended and suggested
292 by this package are worth looking into. (See <ulink url="&devscripts-readme;"/>.)
293 </para>
294 </listitem>
295 <listitem>
296 <para>
297 <systemitem role="package">fakeroot</systemitem> - this utility lets you
298 emulate being root which is necessary for some parts of the build process.
299 (See <citerefentry> <refentrytitle>fakeroot</refentrytitle>
300 <manvolnum>1</manvolnum> </citerefentry>.)
301 </para>
302 </listitem>
303 <listitem>
304 <para>
305 <systemitem role="package">file</systemitem> - this handy program can determine
306 what type a file is. (See <citerefentry> <refentrytitle>file</refentrytitle>
307 <manvolnum>1</manvolnum> </citerefentry>.)
308 </para>
309 </listitem>
310 <listitem>
311 <para>
312 <systemitem role="package">gfortran</systemitem> - the GNU Fortran 95 compiler,
313 necessary if your program is written in Fortran. (See <citerefentry>
314 <refentrytitle>gfortran</refentrytitle> <manvolnum>1</manvolnum>
315 </citerefentry>.)
316 </para>
317 </listitem>
318 <listitem>
319 <para>
320 <systemitem role="package">git</systemitem> - this package provides a popular
321 version control system designed to handle very large projects with speed and
322 efficiency; it is used for many high profile open source projects, most notably
323 the Linux kernel. (See <citerefentry> <refentrytitle>git</refentrytitle>
324 <manvolnum>1</manvolnum> </citerefentry>,
325 <ulink url="&git-doc;">git Manual</ulink>.)
326 </para>
327 </listitem>
328 <listitem>
329 <para>
330 <systemitem role="package">gnupg</systemitem> - a tool that enables you to
331 digitally <emphasis>sign</emphasis> packages. This is especially important if
332 you want to distribute it to other people, and you will certainly be doing that
333 when your work gets included in the Debian distribution. (See <citerefentry>
334 <refentrytitle>gpg</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.)
335 </para>
336 </listitem>
337 <listitem>
338 <para>
339 <systemitem role="package">gpc</systemitem> - the GNU Pascal compiler,
340 necessary if your program is written in Pascal. Worthy of note here is
341 <systemitem role="package">fp-compiler</systemitem>, the Free Pascal Compiler,
342 which is also good at this task. (See <citerefentry>
343 <refentrytitle>gpc</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>,
344 <citerefentry> <refentrytitle>ppc386</refentrytitle>
345 <manvolnum>1</manvolnum> </citerefentry>.)
346 </para>
347 </listitem>
348 <listitem>
349 <para>
350 <systemitem role="package">lintian</systemitem> - this is the Debian package
351 checker, which can let you know of any common mistakes after you build the
352 package, and explains the errors found. (See <citerefentry>
353 <refentrytitle>lintian</refentrytitle> <manvolnum>1</manvolnum>
354 </citerefentry>,
355 <ulink url="&lintian-doc;">Lintian User's Manual</ulink>.)
356 </para>
357 </listitem>
358 <listitem>
359 <para>
360 <systemitem role="package">patch</systemitem> - this very useful utility will
361 take a file containing a difference listing (produced by the
362 <command>diff</command> program) and apply it to the original file, producing a
363 patched version. (See <citerefentry> <refentrytitle>patch</refentrytitle>
364 <manvolnum>1</manvolnum> </citerefentry>.)
365 </para>
366 </listitem>
367 <listitem>
368 <para>
369 <systemitem role="package">patchutils</systemitem> - this package contains some
370 utilities to work with patches such as the <command>lsdiff</command>,
371 <command>interdiff</command> and <command>filterdiff</command> commands.
372 </para>
373 </listitem>
374 <listitem>
375 <para>
376 <systemitem role="package">pbuilder</systemitem> - this package contains
377 programs which are used for creating and maintaining <command>chroot</command>
378 environment. Building Debian package in this <command>chroot</command>
379 environment verifies the proper build dependency and avoid FTBFS (Fails To
380 Build From Source) bugs. (see <citerefentry>
381 <refentrytitle>pbuilder</refentrytitle> <manvolnum>8</manvolnum>
382 </citerefentry> and <citerefentry> <refentrytitle>pdebuild</refentrytitle>
383 <manvolnum>1</manvolnum> </citerefentry>)
384 </para>
385 </listitem>
386 <listitem>
387 <para>
388 <systemitem role="package">perl</systemitem> - Perl is one of the most used
389 interpreted scripting languages on today's Unix-like systems, often referred to
390 as Unix's Swiss Army Chainsaw. (See <citerefentry>
391 <refentrytitle>perl</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.)
392 </para>
393 </listitem>
394 <listitem>
395 <para>
396 <systemitem role="package">python</systemitem> - Python is another of the most
397 used interpreted scripting languages on the Debian system, combining
398 remarkable power with very clear syntax. (See <citerefentry>
399 <refentrytitle>python</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.)
400 </para>
401 </listitem>
402 <listitem>
403 <para>
404 <systemitem role="package">quilt</systemitem> - this package helps you to
405 manage large numbers of patches by keeping track of the changes each patch
406 makes. Patches can be applied, un-applied, refreshed, and more. (See
407 <citerefentry> <refentrytitle>quilt</refentrytitle> <manvolnum>1</manvolnum></citerefentry>,
408 <ulink url="&quilt-pdf;">quilt.pdf</ulink>.)
409 </para>
410 </listitem>
411 <listitem>
412 <para>
413 <systemitem role="package">xutils-dev</systemitem> - some programs, usually
414 those made for X11, also use these programs to generate
415 <filename>Makefile</filename> files from sets of macro functions. (See
416 <citerefentry> <refentrytitle>imake</refentrytitle> <manvolnum>1</manvolnum>
417 </citerefentry>, <citerefentry> <refentrytitle>xmkmf</refentrytitle>
418 <manvolnum>1</manvolnum> </citerefentry>.)
419 </para>
420 </listitem>
421 </itemizedlist>
422 <para>
423 The short descriptions that are given above only serve to introduce you to what
424 each package does. Before continuing please read the documentation
425 of each relevant program including ones installed through the package dependency such as
426 <command>make</command>, at least, for the standard usage. It may seem like heavy
427 going now, but later on you'll be <emphasis>very</emphasis> glad you read it.
428 If you have specific questions later, I would suggest re-reading the documents
429 mentioned above.
430 </para>
431 </section>
432 <section id="needdocs"><title>Documentation needed for development</title>
433 <para>
434 The following is the <emphasis>very important</emphasis> documentation which
435 you should read along with this document:
436 </para>
437 <itemizedlist>
438 <listitem>
439 <para>
440 <systemitem role="package">debian-policy</systemitem> - the <ulink url="&debian-policy;">Debian Policy
441 Manual</ulink> includes explanations of the structure and contents of the
442 Debian archive, several OS design issues, the <ulink url="&fhs;">Filesystem Hierarchy Standard</ulink>
443 (FHS, which says where each file and directory should be), etc. For you, the most
444 important thing is that it describes requirements that each package must
445 satisfy to be included in the distribution. (See the local copies of
446 <ulink url="&policy-pdf;">policy.pdf</ulink> and <ulink url="&fhs-pdf;">fhs-2.3.pdf</ulink>.)
447 </para>
448 </listitem>
449 <listitem>
450 <para>
451 <systemitem role="package">developers-reference</systemitem>
452 - the <ulink url="&developers-reference;">Debian Developer's Reference</ulink>
453 describes all matters not specifically about the technical
454 details of packaging, like the structure of the archive, how to rename, orphan,
455 or adopt packages, how to do NMUs, how to manage bugs, best packaging practices,
456 when and where to upload etc. (See the local copy of
457 <ulink url="&developers-refpdf;">developers-reference.pdf</ulink>.)
458 </para>
459 </listitem>
460 </itemizedlist>
461 <para>
462 The following is the <emphasis>important</emphasis> documentation which
463 you should read along with this document:
464 </para>
465 <itemizedlist>
466 <listitem>
467 <para>
468 <ulink url="&autotools-tutorial;">Autotools
469 Tutorial</ulink> provides a very good tutorial for <ulink url="&gnu-build-system;">the GNU Build System known
470 as the GNU Autotools</ulink> whose most important components are Autoconf,
471 Automake, Libtool, and gettext.
472 </para>
473 </listitem>
474 <listitem>
475 <para>
476 <systemitem role="package">gnu-standards</systemitem> - this package contains
477 two pieces of documentation from the GNU project:
478 <ulink url="&gnu-standard;">GNU Coding Standards</ulink>, and
479 <ulink url="&gnu-maintainer;">Information for Maintainers of GNU Software</ulink>.
480 Although Debian does not require these to
481 be followed, these are still helpful as guidelines and common sense.
482 (See the local copies of
483 <ulink url="&gnu-standard-pdf;">standards.pdf</ulink> and
484 <ulink url="&gnu-maintainer-pdf;">maintain.pdf</ulink>.)
485 </para>
486 </listitem>
487 </itemizedlist>
488 <para>
489 If this document contradicts any of the documents mentioned above, they
490 are correct. Please file a bug report on the
491 <systemitem role="package">maint-guide</systemitem> package using
492 <command>reportbug</command>.
493 </para>
494 </section>
495 <section id="helpme"><title>Where to ask for help</title>
496 <para>
497 Before you decide to ask your question in some public place, please read the fine documentation.
498 </para>
499 <itemizedlist>
500 <listitem>
501 <para>
502 files in <filename>/usr/share/doc/<replaceable>package</replaceable></filename> for all pertinent packages
503 </para>
504 </listitem>
505 <listitem>
506 <para>
507 contents of <literal><command>man</command> <replaceable>command</replaceable></literal> for all pertinent commands
508 </para>
509 </listitem>
510 <listitem>
511 <para>
512 contents of <literal><command>info</command> <replaceable>command</replaceable></literal> for all pertinent commands
513 </para>
514 </listitem>
515 <listitem>
516 <para>
517 contents of <ulink url="&debian-mentors-ldo;">debian-mentors@lists.debian.org mailing list archive</ulink>
518 </para>
519 </listitem>
520 <listitem>
521 <para>
522 contents of <ulink url="&debian-devel-ldo;">debian-devel@lists.debian.org mailing list archive</ulink>
523 </para>
524 </listitem>
525 </itemizedlist>
526 <para>
527 You can use web search engines more effectively by including search strings
528 such as <literal>site:lists.debian.org</literal> to limit the domain.
529 </para>
530 <para>
531 Making a small test package is a good way to learn details of packaging.
532 Inspecting existing well maintained packages is the best way to learn how other
533 people make packages.
534 </para>
535 <para>
536 If you still have questions about packaging that you couldn't find answers to
537 in the available documentation and web resources, you can ask them interactively.
538 </para>
539 <itemizedlist>
540 <listitem>
541 <para>
542 <ulink url="&debian-mentors-ldo;">debian-mentors@lists.debian.org mailing list</ulink>. (This mailing list is for the novice.)
543 </para>
544 </listitem>
545 <listitem>
546 <para>
547 <ulink url="&debian-devel-ldo;">debian-devel@lists.debian.org mailing list</ulink>. (This mailing list is for the expert.)
548 </para>
549 </listitem>
550 <listitem>
551 <para>
552 <ulink url="&irc-debian;">IRC</ulink> such as <literal>#debian-mentors</literal>.
553 </para>
554 </listitem>
555 </itemizedlist>
556 <para>
557 The more experienced Debian developers will gladly help you, if you ask
558 properly after making your required efforts.
559 </para>
560 <para>
561 When you receive a bug report (yes, actual bug reports!), you will know that it
562 is time for you to dig into the
563 <ulink url="&bts;">Debian Bug Tracking System</ulink>
564 and read the documentation there, to be able to
565 deal with the reports efficiently. I highly recommend reading the
566 <ulink url="&devref-bug-handling;">Debian Developer's Reference, 5.8.
567 "Handling bugs"</ulink>.
568 </para>
569 <para>
570 Even if it all worked well, it's time to start praying. Why? Because in just
571 a few hours (or days) users from all around the world will start to use your
572 package, and if you made some critical error you'll get mailbombed by numerous
573 angry Debian users... Just kidding. :-)
574 </para>
575 <para>
576 Relax and be ready for bug reports, because there is a lot more work to be done
577 before your package will be fully in line with Debian policies and its best
578 practice guidelines (once again, read the <emphasis>real
579 documentation</emphasis> for details). Good luck!
580 </para>
581 </section>
582 </chapter>
583 <chapter id="first"><title>First steps</title>
584 <para>
585 Let's start by creating a package of your own (or, even better,
586 adopting an existing one).
587 </para>
588 <section id="workflow"><title>Workflow of the Debian package building</title>
589 <para>
590 If you are making a Debian package with an upstream program,
591 typical workflow of the Debian package building involves generating several
592 specifically named files for each step as the following.
593 </para>
594 <itemizedlist>
595 <listitem>
596 <para>We obtain an upstream program file usually in a compressed tar format.</para>
597 <itemizedlist>
598 <listitem><literal><replaceable>package</replaceable>-<replaceable>version</replaceable>.tar.gz</literal></listitem>
599 </itemizedlist>
600 </listitem>
601 <listitem>
602 <para>
603 We create a non-native Debian source package in the <literal>3.0 (quilt)</literal> format, which refers to the set of input files for
604 the Debian package building, by adding Debian package modifications to the upstream program under the <filename>debian</filename> directory.
605 </para>
606 <itemizedlist>
607 <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>.orig.tar.gz</literal></listitem>
608 <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>-<replaceable>revision</replaceable>.debian.tar.gz</literal>
609 <footnote><para>For the older non-native Debian source package in the <literal>1.0</literal> format,
610 <literal><replaceable>package</replaceable>_<replaceable>version</replaceable>-<replaceable>revision</replaceable>.diff.gz</literal>
611 is used instead. </para></footnote></listitem>
612 <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>-<replaceable>revision</replaceable>.dsc</literal></listitem>
613 </itemizedlist>
614 </listitem>
615 <listitem>
616 <para>
617 We build Debian binary packages, which are ordinary installable package files in <literal>.deb</literal> format (or <literal>.udeb</literal> format, used by the Debian Installer), from the Debian source package.
618 </para>
619 <itemizedlist>
620 <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>-<replaceable>revision</replaceable>_<replaceable>arch</replaceable>.deb</literal></listitem>
621 </itemizedlist>
622 </listitem>
623 </itemizedlist>
624 <para>
625 Please note that the character separating
626 <literal><replaceable>package</replaceable></literal> and
627 <literal><replaceable>version</replaceable></literal> was changed from
628 <literal>-</literal> (hyphen) to <literal>_</literal> (underscore).
629 </para>
630 <para>
631 Here,
632 <literal><replaceable>package</replaceable></literal> part of the file name is substituted by the
633 <emphasis role="strong">package name</emphasis>,
634 <literal><replaceable>version</replaceable></literal> part of it is substituted by the
635 <emphasis role="strong">upstream version</emphasis>,
636 <literal><replaceable>revision</replaceable></literal> part of it is substituted by the
637 <emphasis role="strong">Debian revision</emphasis>,
638 <literal><replaceable>arch</replaceable></literal> part of it is substituted by the
639 <emphasis role="strong">package architecture</emphasis>.
640 <footnote><para>
641 The <emphasis role="strong">package name</emphasis>, <emphasis
642 role="strong">upstream version</emphasis>, and <emphasis role="strong">Debian
643 revision</emphasis> must be adjusted to comply with the Debian Policy Manual:
644 <ulink url="&policy-source;">5.6.1 Source</ulink>,
645 <ulink url="&policy-package;">5.6.7 Package</ulink>, and
646 <ulink url="&policy-version;">5.6.12 Version</ulink>.
647 The <emphasis role="strong">package architecture</emphasis> follows the
648 Debian Policy Manual: <ulink url="&policy-architecture;">5.6.8 Architecture</ulink>
649 and is automatically assigned by the package build process.</para></footnote>
650 </para>
651 <para>
652 If you are making a Debian specific package without an upstream program instead,
653 typical workflow of the Debian package building is simpler.
654 </para>
655 <itemizedlist>
656 <listitem>
657 <para>
658 We create a native Debian source package in the <literal>3.0 (quilt)</literal> format using a compressed tar format in which required files under the <filename>debian</filename> directory are also included.
659 </para>
660 <itemizedlist>
661 <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>.tar.gz</literal></listitem>
662 <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>.dsc</literal></listitem>
663 </itemizedlist>
664 </listitem>
665 <listitem>
666 <para>
667 We build Debian binary packages from the native Debian source package.
668 </para>
669 <itemizedlist>
670 <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>_<replaceable>arch</replaceable>.deb</literal></listitem>
671 </itemizedlist>
672 </listitem>
673 </itemizedlist>
674 <para>
675 In the following, each step of this is explained with detailed examples.
676 </para>
677 </section>
678 <section id="choose"><title>Choose your program</title>
679 <para>
680 You have probably chosen the package you want to create. The first thing you
681 need to do is check if the package is in the distribution archive already by
682 using the following.
683 </para>
684 <itemizedlist>
685 <listitem>
686 <para>the <command>aptitude</command> command</para>
687 </listitem>
688 <listitem>
689 <para>the <ulink url="&packages-do;">Debian packages</ulink> web page</para>
690 </listitem>
691 <listitem>
692 <para>the <ulink url="&packages-qa-do;">Debian Package Tracking System</ulink> web page</para>
693 </listitem>
694 </itemizedlist>
695 <para>
696 If the package already exists, well, install it! :-) If it happens to be
697 <emphasis role="strong">orphaned</emphasis> (that is, if its
698 maintainer is set to <ulink url="&qa-do;">Debian QA Group</ulink>),
699 you may be able to pick it up if it's still available. You may also
700 adopt a package whose maintainer has filed a Request for Adoption
701 (<emphasis role="strong">RFA</emphasis>).<footnote> <para>See
702 <ulink url="&devref-adopt;">Debian Developer's Reference 5.9.5.
703 "Adopting a package"</ulink>.</para> </footnote>
704 </para>
705 <para>
706 There are several package ownership status resources.
707 </para>
708 <itemizedlist>
709 <listitem>
710 <para> <ulink url="&wnpp-do;">Work-Needing and Prospective Packages</ulink> </para>
711 </listitem>
712 <listitem>
713 <para> <ulink url="&wnpp-bts;">Debian Bug report logs: Bugs in pseudo-package <systemitem role="package">wnpp</systemitem> in <literal>unstable</literal></ulink> </para>
714 </listitem>
715 <listitem>
716 <para> <ulink url="&wnpp-dn;">Debian Packages that Need Lovin'</ulink> </para>
717 </listitem>
718 <listitem>
719 <para> <ulink url="&wnpp-debtags;">Browse <systemitem role="package">wnpp</systemitem> bugs based on debtags</ulink> </para>
720 </listitem>
721 </itemizedlist>
722 <para>
723 As a side note, it's important to point out that Debian already has packages
724 for most kinds of programs, and the number of packages already in the Debian
725 archive is much larger than that of contributors with upload rights. Thus,
726 contributions to packages already in the archive are far more appreciated (and
727 more likely to receive sponsorship) by other developers <footnote><para> Having
728 said that, there will of course always be new programs that are worth
729 packaging. </para> </footnote>. You can contribute in various ways.
730 </para>
731 <itemizedlist>
732 <listitem>
733 <para>
734 taking over orphaned, yet actively used, packages
735 </para>
736 </listitem>
737 <listitem>
738 <para>
739 joining <ulink url="&teams;">packaging teams</ulink>
740 </para>
741 </listitem>
742 <listitem>
743 <para>
744 triaging bugs of very popular packages
745 </para>
746 </listitem>
747 <listitem>
748 <para>
749 preparing <ulink url="&devref-nmu;">QA or NMU uploads</ulink>
750 </para>
751 </listitem>
752 </itemizedlist>
753 <para>
754 If you are able to adopt the package, get the sources (with something like
755 <literal>apt-get source <replaceable>packagename</replaceable></literal>) and
756 examine them. This document unfortunately doesn't include comprehensive
757 information about adopting packages. Thankfully you shouldn't have a hard time
758 figuring out how the package works since someone has already done the initial
759 setup for you. Keep reading, though; a lot of the advice below will still be
760 applicable for your case.
761 </para>
762 <para>
763 If the package is new, and you decide you'd like to see it in Debian, proceed
764 as follows:
765 </para>
766 <itemizedlist>
767 <listitem>
768 <para>
769 First, you must know that the program works, and have tried it for some time to
770 confirm its usefulness.
771 </para>
772 </listitem>
773 <listitem>
774 <para>
775 You must check that no one else is already working on the package on the
776 <ulink url="&wnpp-do;">Work-Needing and Prospective Packages</ulink> site.
777 If no one else is working on it, file an ITP (Intent
778 To Package) bug report to the <systemitem role="package">wnpp</systemitem>
779 pseudo-package using <command>reportbug</command>. If someone's already on it,
780 contact them if you feel you need to. If not - find another interesting
781 program that nobody is maintaining.
782 </para>
783 </listitem>
784 <listitem>
785 <para>
786 The software <emphasis role="strong">must have a license</emphasis>.
787 </para>
788 <itemizedlist>
789 <listitem>
790 <para>
791 For the <literal>main</literal> section, Debian Policy requires it
792 <emphasis role="strong">to be fully compliant with the Debian Free Software
793 Guidelines</emphasis> (<ulink url="&dfsg;">DFSG</ulink>)
794 and <emphasis role="strong">not to require a package outside of
795 <literal>main</literal></emphasis> for compilation or execution. This
796 is the desired case.
797 </para>
798 </listitem>
799 <listitem>
800 <para>
801 For the <literal>contrib</literal> section, it must comply with the
802 DFSG but it may require a package outside of <literal>main</literal> for
803 compilation or execution.
804 </para>
805 </listitem>
806 <listitem>
807 <para>
808 For the <literal>non-free</literal> section, it may be non-compliant
809 with the DFSG but it <emphasis role="strong">must be distributable</emphasis>.
810 </para>
811 </listitem>
812 <listitem>
813 <para>
814 If you are unsure about where it should go, post the license text on
815 <ulink url="&debian-legal-ldo;">debian-legal@lists.debian.org</ulink>
816 and ask for advice.
817 </para>
818 </listitem>
819 </itemizedlist>
820 <listitem>
821 <para>
822 The program should <emphasis role="strong">not</emphasis> introduce security
823 and maintenance concerns to the Debian system.
824 </para>
825 </listitem>
826 <itemizedlist>
827 <listitem>
828 <para>
829 The program should be well documented and its code needs to be understandable
830 (i.e. not obfuscated).
831 </para>
832 </listitem>
833 <listitem>
834 <para>
835 You should contact the program's author(s) to check if they agree with packaging it
836 and are amicable to Debian. It is important to be able to consult with the author(s)
837 in case of any problems with the program, so don't try to package
838 unmaintained software.
839 </para>
840 </listitem>
841 <listitem>
842 <para>
843 The program certainly should <emphasis role="strong">not</emphasis> run setuid
844 root, or even better, it shouldn't need to be setuid or setgid to anything.
845 </para>
846 </listitem>
847 <listitem>
848 <para>
849 The program should not be a daemon, or go in an
850 <filename>*/sbin</filename> directory, or open a port as root.
851 </para>
852 </listitem>
853 </itemizedlist>
854 </listitem>
855 </itemizedlist>
856 <para>
857 Of course, the last one is just a safety measures, and intended to save you from
858 enraging users if you do something wrong in some setuid daemon... When you gain
859 more experience in packaging, you'll be able to package such software.
860 </para>
861 <para>
862 As a new maintainer, you are encouraged to get some experience in packaging
863 with easier packages and discouraged from creating complicated packages.
864 </para>
865 <itemizedlist>
866 <listitem><para>Simple packages</para>
867 <itemizedlist>
868 <listitem><para>single binary package, arch = all (collection of data such as wallpaper graphics)</para></listitem>
869 <listitem><para>single binary package, arch = all (executable written in the POSIX shell language)</para></listitem>
870 <listitem><para>single binary package, arch = all (executable written in interpreter languages)</para></listitem>
871 </itemizedlist>
872 </listitem>
873 <listitem><para>Intermediate complexity packages</para>
874 <itemizedlist>
875 <listitem><para>single binary package, arch = any (executable compiled from a C source with <xref linkend="simplemake"/>)</para></listitem>
876 <listitem><para>single binary package, arch = any (executable compiled from a C source with <xref linkend="portable"/>)</para></listitem>
877 <listitem><para>multiple binary packages, arch = any + all (executable package + documentation package)</para></listitem>
878 <listitem><para>upstream source in a format other than <filename>tar.gz</filename> or <filename>tar.bz2</filename></para></listitem>
879 <listitem><para>upstream source containing undistributable contents</para></listitem>
880 </itemizedlist>
881 </listitem>
882 <listitem><para>High complexity packages</para>
883 <itemizedlist>
884 <listitem><para>interpreter module packages used by other packages</para></listitem>
885 <listitem><para>multiple binary packages containing library package</para></listitem>
886 <listitem><para>generic library package used by other packages</para></listitem>
887 <listitem><para>source package with multiple upstream sources</para></listitem>
888 <listitem><para>kernel module packages</para></listitem>
889 <listitem><para>kernel patch packages</para></listitem>
890 <listitem><para>any package with non-trivial maintainer scripts</para></listitem>
891 </itemizedlist>
892 </listitem>
893 </itemizedlist>
894 <para>
895 Packaging high complexity packages is not too hard, but it requires a bit more
896 knowledge. You should seek specific guidances for every complexities. For example, some interpreter languages have their policy.
897 </para>
898 <itemizedlist>
899 <listitem><para><ulink url="&policy-perl;">Perl policy</ulink></para></listitem>
900 <listitem><para><ulink url="&policy-python;">Python policy</ulink></para></listitem>
901 <listitem><para><ulink url="&policy-java;">Java policy</ulink></para></listitem>
902 </itemizedlist>
903 </section>
904 <section id="getit"><title>Get the program, and try it out</title>
905 <para>
906 So the first thing to do is to find and download the original source code.
907 Presumably you already have the source file that you picked up at the
908 author's homepage. Sources for free Unix programs usually come in
909 <command>tar</command>+<command>gzip</command> format with the extension
910 <filename>.tar.gz</filename>,
911 <command>tar</command>+<command>bzip2</command> format with the extension
912 <filename>.tar.bz2</filename>, or
913 <command>tar</command>+<command>xz</command> format with the extension
914 <filename>.tar.xz</filename>. These usually contain a directory called
915 <filename><replaceable>package</replaceable>-<replaceable>version</replaceable></filename>
916 with all the sources inside.
917 </para>
918 <para>
919 If the latest version of the source is available through a VCS such as Git,
920 Subversion, or CVS, you need to get it with <literal>git
921 clone</literal>, <literal>svn co</literal>, or <literal>cvs co</literal> and
922 repack it into <command>tar</command>+<command>gzip</command> format yourself
923 by using the <literal>--exclude-vcs</literal> option.
924 </para>
925 <para>
926 If your program's source comes as some other sort of archive (for instance, the
927 filename ends in <filename>.Z</filename> or
928 <filename>.zip</filename><footnote><para> You can identify the archive format
929 using the <command>file</command> command when the file extension is not
930 enough. </para> </footnote>), you should also unpack it with the
931 appropriate tools and repack it.
932 </para>
933 <para>
934 As an example, I'll use a program called <command>gentoo</command>, a GTK+
935 file manager.
936 <footnote><para> This program is already packaged. The
937 <ulink url="&gentoo-package;">current version</ulink> uses Autotools as its
938 build structure and is substantially different from the following examples,
939 which were based on version 0.9.12.</para>
940 </footnote>
941 </para>
942 <para>
943 Create a subdirectory under your home directory named
944 <filename>debian</filename> or <filename>deb</filename> or anything you find
945 appropriate (e.g. just <filename>~/gentoo</filename> would do fine in this
946 case). Place the downloaded archive in it, and extract it (with <literal>tar
947 xzf gentoo-0.9.12.tar.gz</literal>). Make sure there are no warning
948 messages, even <emphasis>irrelevant</emphasis> ones, because other
949 people's unpacking tools may or may not ignore these anomalies, so they
950 may have problems unpacking them. Your shell command line may look
951 something like this:
952 </para>
953 <screen>
954 $ mkdir ~/gentoo ; cd ~/gentoo
955 $ wget http://<replaceable>www.example.org</replaceable>/gentoo-0.9.12.tar.gz
956 $ tar xvzf gentoo-0.9.12.tar.gz
957 $ ls -F
958 gentoo-0.9.12/
959 gentoo-0.9.12.tar.gz
960 </screen>
961 <para>
962 Now you have another subdirectory, called <filename>gentoo-0.9.12</filename>.
963 Change to that directory and <emphasis>thoroughly</emphasis> read the provided
964 documentation. Usually there are files named <filename>README*</filename>,
965 <filename>INSTALL*</filename>, <filename>*.lsm</filename> or
966 <filename>*.html</filename>. You must find instructions on how to
967 compile and install the program (most probably they'll assume you want to
968 install to the <filename>/usr/local/bin</filename> directory; you won't be doing
969 that, but more on that later in <xref linkend="destdir"/>).
970 </para>
971 <para>
972 You should start packaging with a completely clean (pristine) source directory,
973 or simply with freshly unpacked sources.
974 </para>
975 </section>
976 <section id="simplemake"><title>Simple build systems</title>
977 <para>
978 Simple programs come with a <filename>Makefile</filename> and can
979 be compiled just by invoking <literal>make</literal>.<footnote><para>
980 Many modern programs come with a script <filename>configure</filename> which
981 when executed creates a <filename>Makefile</filename> customized for
982 your system.</para></footnote> Some of them support
983 <literal>make check</literal>, which runs included self-tests. Installation
984 to the destination directories is usually done with <literal>make
985 install</literal>.
986 </para>
987 <para>
988 Now try to compile and run your program, to make sure it works properly and
989 doesn't break something else while it's installing or running.
990 </para>
991 <para>
992 Also, you can usually run <literal>make clean</literal> (or better
993 <literal>make distclean</literal>) to clean up the build directory. Sometimes
994 there's even a <literal>make uninstall</literal> which can be used to remove
995 all the installed files.
996 </para>
997 </section>
998 <section id="portable"><title>Popular portable build systems</title>
999 <para>
1000 A lot of free software programs are written in the <ulink url="&c-program;">C</ulink> and
1001 <ulink url="&cxx;">C++</ulink> languages. Many of these use Autotools or
1002 CMake to make them portable across different platforms. These build tools need
1003 to be used to generate the <filename>Makefile</filename> and other
1004 required source files first. Then, such programs are built using the usual
1005 <literal>make; make install</literal>.
1006 </para>
1007 <para>
1008 <ulink url="&gnu-build-system;">Autotools</ulink> is the GNU build
1009 system comprising <ulink url="&autoconf;">Autoconf</ulink>,
1010 <ulink url="&automake;">Automake</ulink>,
1011 <ulink url="&libtool;">Libtool</ulink>, and
1012 <ulink url="&gettext;">gettext</ulink>. You can recognize
1013 such sources by the <filename>configure.ac</filename>,
1014 <filename>Makefile.am</filename>, and <filename>Makefile.in</filename> files.
1015 <footnote><para>Autotools is too big to deal in this small tutorial. This
1016 section is meant to provide keywords and references only. Please make sure to read the
1017 <ulink url="&autotools-tutorial;">Autotools Tutorial</ulink> and
1018 <ulink url="&autotools-readme;"/>, if you need to use it.</para></footnote>
1019 </para>
1020 <para>
1021 The first step of the Autotools workflow is usually that upstream runs
1022 <literal>autoreconf -i -f</literal> in the source directory and
1023 distributes the generated files along with the source.
1024 </para>
1025 <screen>
1026 configure.ac-----+-&gt; autoreconf -+-&gt; configure
1027 Makefile.am -----+ | +-&gt; Makefile.in
1028 src/Makefile.am -+ | +-&gt; src/Makefile.in
1029 | +-&gt; config.h.in
1030 automake
1031 aclocal
1032 aclocal.m4
1033 autoheader
1034 </screen>
1035 <para>
1036 Editing <filename>configure.ac</filename> and <filename>Makefile.am</filename>
1037 files requires some knowledge of <command>autoconf</command> and
1038 <command>automake</command>. See <literal>info autoconf</literal> and
1039 <literal>info automake</literal>.
1040 </para>
1041 <para>
1042 The second step of the Autotools workflow is usually that the user obtains this
1043 distributed source and runs <literal>./configure &amp;&amp; make</literal> in
1044 the source directory to compile the program into a
1045 <command><replaceable>binary</replaceable></command> executable.
1046 </para>
1047 <screen>
1048 Makefile.in -----+ +-&gt; Makefile -----+-&gt; make -&gt; <replaceable>binary</replaceable>
1049 src/Makefile.in -+-&gt; ./configure -+-&gt; src/Makefile -+
1050 config.h.in -----+ +-&gt; config.h -----+
1051 |
1052 config.status -+
1053 config.guess --+
1054 </screen>
1055 <para>
1056 You can change many things in the <filename>Makefile</filename>; for
1057 instance you can change the default location for file installation
1058 using the option <command>./configure --prefix=/usr</command>.
1059 </para>
1060 <para>
1061 Although it is not required, updating the <filename>configure</filename> and
1062 other files with <literal>autoreconf -i -f</literal> may improve
1063 the compatibility of the source.
1064 <footnote><para>You can automate this by using
1065 <systemitem role="package">dh-autoreconf</systemitem> package.
1066 See <xref linkend="customrules"/>.</para></footnote>
1067 </para>
1068 <para>
1069 <ulink url="&cmake;">CMake</ulink> is an alternative
1070 build system. You can recognize such sources by the
1071 <filename>CMakeLists.txt</filename> file.
1072 </para>
1073 </section>
1074 <section id="namever"><title>Package name and version</title>
1075 <para>
1076 If the upstream source comes as <filename>gentoo-0.9.12.tar.gz</filename>, you can
1077 consider
1078 <emphasis role="strong">package name</emphasis> to be <literal>gentoo</literal> and
1079 <emphasis role="strong">upstream version</emphasis> to be <literal>0.9.12</literal>.
1080 These are used in the <filename>debian/changelog</filename> file described later in
1081 <xref linkend="changelog"/>, too.
1082 </para>
1083 <para>
1084 Although this simple approach works most of the times, you may need to adjust
1085 <emphasis role="strong">package name</emphasis> and
1086 <emphasis role="strong">upstream version</emphasis> by renaming the upstream
1087 source to follow the Debian Policy and the existing convention.
1088 </para>
1089 <para>
1090 You must choose the <emphasis role="strong">package name</emphasis>
1091 to consist only of lower case letters (<literal>a-z</literal>), digits
1092 (<literal>0-9</literal>), plus (<literal>+</literal>) and minus
1093 (<literal>-</literal>) signs, and periods (<literal>.</literal>). It must be
1094 at least two characters long, must start with an alphanumeric character, and
1095 must not be the same as existing ones.
1096 It is good idea to keep its length within 30 characters.
1097 <footnote><para>The package name field length of <command>aptitude</command> is 30. For more than 90% of packages, the package name is less than 24 characters.</para></footnote>
1098 </para>
1099 <!--
1100 Osamu's archive stat (2011-04-23, sid, kfreebsd-amd64):
1101 === stat for package name string length ===
1102 11 1947 36.9% mode
1103 14 1717 54.7% 50% median
1104 23 611 91.0% 90%
1105 32 89 99.0% 99%
1106 41 12 99.9% 99.9%
1107 52 1 100.0%
1108 Previous 20 chars is becoming too short for 17% of packages
1109 Default aptitude setting display up to 30 chars (98.3%).
1110 -->
1111 <para>
1112 If upstream source uses generic words such as <literal>test-suite</literal> as
1113 its name, it is good idea to rename it not to contaminate name space for the
1114 package name and to identify its contents explicitly.
1115 <footnote><para>If you follow the
1116 <ulink url="&devref-newpackage;">Debian Developer's Reference 5.1. "New packages"</ulink>,
1117 the ITP process will usually catch this kind of issues.</para></footnote>
1118 </para>
1119 <para>
1120 You should choose the <emphasis role="strong">upstream version</emphasis>
1121 to consist only of
1122 alphanumerics (<literal>0-9A-Za-z</literal>), plus (<literal>+</literal>),
1123 tildes (<literal>~</literal>), and periods (<literal>.</literal>). It must
1124 start with a digit (<literal>0-9</literal>). <footnote><para>This stricter
1125 rule should help you avoid confusing file names.</para></footnote>
1126 It is good idea to keep its length within 8 characters if possible.
1127 <footnote><para>The version field length of <command>aptitude</command> is 10. The Debian revision with preceding hyphen usually consumes 2. For more than 80% of packages, the upstream version is less than 8 charactes and the Debian revision is less than 2 characters. For more than 90% of packages, the upstream version is less than 10 charactes and the Debian revision is less than 3 characters.</para></footnote>
1128 </para>
1129 <!--
1130 Osamu's archive stat (2011-04-23, sid, kfreebsd-amd64):
1131 === stat for upstream version string length ===
1132 5 9765 60.2% 50% median and mode
1133 6 3765 73.3%
1134 7 2789 82.9%
1135 8 1158 86.9%
1136 9 501 88.6%
1137 10 773 91.3% 90%
1138 18 55 99.1% 99%
1139 27 11 99.9% 99.9
1140 35 6 100.0%
1141 === stat for debian revision string length ===
1142 1 22556 83.3% 50% median and mode
1143 2 1106 87.2%
1144 3 1312 91.7% 90%
1145 4 2127 99.1% 99%
1146 7 14 99.9% 99.9%
1147
1148 aptitude display 10 = 8char for up + 1char (for -) + 1char for deb
1149 90chars as max for file name of binary debs (package+up+deb+arch+.deb)
1150 -->
1151 <para>
1152 If the upstream software does not use normal version system like
1153 <literal>2.30.32</literal> but uses some kind of date such as
1154 <literal>09Oct23</literal>, a random codename string or a VCS hash value as a part
1155 of version, make sure to remove them from the
1156 <emphasis role="strong">upstream version</emphasis>. Such information can be
1157 recorded in the <filename>debian/changelog</filename> file. If you need to
1158 invent a version string, use the <literal>YYYYMMDD</literal> format such as
1159 <literal>20110429</literal> as upstream version. This ensures that
1160 <command>dpkg</command> properly sees later versions as upgrades.
1161 </para>
1162 <para>
1163 Version strings can be compared with <citerefentry> <refentrytitle>dpkg</refentrytitle> <manvolnum>1</manvolnum> </citerefentry> as the following.
1164 </para>
1165 <screen>
1166 $ dpkg --compare-versions <replaceable>ver1</replaceable> <replaceable>op</replaceable> <replaceable>ver2</replaceable>
1167 </screen>
1168 <para>
1169 The version comparison rule can be summarized as the following.
1170 </para>
1171 <itemizedlist>
1172 <listitem><para>The strings are compared from the head to the tail.</para></listitem>
1173 <listitem><para>Alphabets are larger than numbers.</para></listitem>
1174 <listitem><para>Numbers are compared as the integer.</para></listitem>
1175 <listitem><para>Alphabets are compared in the ASCII code order.</para></listitem>
1176 <listitem><para>There are some special rules for periods (<literal>.</literal>), plus (<literal>+</literal>) and tildes (<literal>~</literal>) as the followings.</para>
1177 <para>
1178 <literal>0.0</literal> &lt;
1179 <literal>0.5</literal> &lt;
1180 <literal>0.10</literal> &lt;
1181 <literal>0.99</literal> &lt;
1182 <literal>1</literal> &lt;
1183 <literal>1.0~rc1</literal> &lt;
1184 <literal>1.0</literal> &lt;
1185 <literal>1.0+b1</literal> &lt;
1186 <literal>1.0+nmu1</literal> &lt;
1187 <literal>1.1</literal> &lt;
1188 <literal>2.0</literal>
1189 </para>
1190 </listitem>
1191 </itemizedlist>
1192 <para>
1193 One of the tricky case happens when the upstream releases
1194 <filename>gentoo-0.9.12-ReleaseCandidate-99.tar.gz</filename> as the
1195 pre-release of <filename>gentoo-0.9.12.tar.gz</filename>. You need to make
1196 sure that the upgrade works properly by renaming the upstream source to
1197 <filename>gentoo-0.9.12~rc99.tar.gz</filename>.
1198 </para>
1199 </section>
1200 <section id="dh-make"><title>Setting up <command>dh_make</command></title>
1201 <para>
1202 Set up the shell environment variables <literal>$DEBEMAIL</literal> and
1203 <literal>$DEBFULLNAME</literal> so that various Debian maintenance
1204 tools recognize your email address and name to use for packages. <footnote><para> The
1205 following text assumes you are using Bash as your login shell. If you use
1206 some other login shell such as Z shell, use their corresponding
1207 configuration files instead of <filename>~/.bashrc</filename>. </para> </footnote>
1208 </para>
1209 <screen>
1210 $ cat &gt;&gt;~/.bashrc &lt;&lt;EOF
1211 DEBEMAIL=your.email.address@example.org
1212 DEBFULLNAME=Firstname Lastname
1213 export DEBEMAIL DEBFULLNAME
1214 EOF
1215 $ . ~/.bashrc
1216 </screen>
1217 </section>
1218 <section id="non-native-dh-make"><title>Initial non-native Debian package</title>
1219 <para>
1220 Normal Debian packages are non-native Debian packages made from upstream
1221 programs. If you wish to create a non-native Debian package of an upstream
1222 source <filename>gentoo-0.9.12.tar.gz</filename>, you can create an initial
1223 non-native Debian package for it by issuing the <command>dh_make</command>
1224 command as follows.
1225 </para>
1226 <screen>
1227 $ cd ~/gentoo
1228 $ wget http://example.org/gentoo-0.9.12.tar.gz
1229 $ tar -xvzf gentoo-0.9.12.tar.gz
1230 $ cd gentoo-0.9.12
1231 $ dh_make -f ../gentoo-0.9.12.tar.gz
1232 </screen>
1233 <para>
1234 Of course, replace the filename with the name of your original source archive.
1235 <footnote><para> If the upstream source provides the
1236 <filename>debian</filename> directory and its contents, run the
1237 <command>dh_make</command> command with the extra option
1238 <literal>--addmissing</literal>. The new source <literal>3.0 (quilt)</literal> format is
1239 robust enough not to break even for these packages. You may need to update the contents
1240 provided by the upstream for your Debian package. </para> </footnote> See
1241 <citerefentry> <refentrytitle>dh_make</refentrytitle> <manvolnum>1</manvolnum>
1242 </citerefentry> for details.
1243 </para>
1244 <para>
1245 You should see some output asking you what sort of package you want
1246 to create. Gentoo is a single binary package - it creates only one binary package, i.e,
1247 one <filename>.deb</filename> file - so we will select the first option
1248 (with the <literal>s</literal> key), check the information on the screen, and
1249 confirm by pressing <literal><replaceable>ENTER</replaceable></literal>.
1250 <footnote><para> There are several choices here: <literal>s</literal> for
1251 Single binary package, <literal>i</literal> for arch-Independent package, <literal>m</literal> for
1252 Multiple binary packages, <literal>l</literal> for Library package, <literal>k</literal> for
1253 Kernel module package, <literal>n</literal> for kernel patch package, and <literal>b</literal>
1254 for <systemitem role="package">cdbs</systemitem> package. This document focuses on the
1255 use of the <command>dh</command> command (from the package
1256 <systemitem role="package">debhelper</systemitem>) to create a single binary package,
1257 but also touches on how to use it for arch-independent or
1258 multiple binary packages. The package
1259 <systemitem role="package">cdbs</systemitem> offers an alternative packaging script
1260 infrastructure to the <command>dh</command> command and is outside the scope of
1261 this document. </para> </footnote>
1262 </para>
1263 <para>
1264 This execution of <command>dh_make</command> creates a copy of the upstream
1265 tarball as <filename>gentoo_0.9.12.orig.tar.gz</filename> in the
1266 parent directory to accommodate the creation of the non-native Debian source
1267 package with the name <filename>debian.tar.gz</filename> later.
1268 </para>
1269 <screen>
1270 $ cd ~/gentoo ; ls -F
1271 gentoo-0.9.12/
1272 gentoo-0.9.12.tar.gz
1273 gentoo_0.9.12.orig.tar.gz
1274 </screen>
1275 <para>
1276 Please note two key features of this filename
1277 <filename>gentoo_0.9.12.orig.tar.gz</filename>:
1278 </para>
1279 <itemizedlist>
1280 <listitem>
1281 <para>
1282 Package name and version are separated by the character <literal>_</literal>
1283 (underscore).
1284 </para>
1285 </listitem>
1286 <listitem>
1287 <para>
1288 The string <filename>.orig</filename> is inserted before the
1289 <filename>.tar.gz</filename>.
1290 </para>
1291 </listitem>
1292 </itemizedlist>
1293 <para>
1294 You should also notice that many template files are created in the source under
1295 the <filename>debian</filename> directory. These will be explained in
1296 <xref linkend="dreq"/> and <xref linkend="dother"/>. You should also understand
1297 that packaging cannot be a fully automated process. You will need to modify the upstream
1298 source for Debian (see <xref linkend="modify"/>). After this, you need to
1299 use the proper methods for building Debian packages (<xref linkend="build"/>),
1300 testing them (<xref linkend="checkit"/>), and uploading them (<xref linkend="upload"/>).
1301 All the steps will be explained.
1302 </para>
1303 <para>
1304 If you accidentally erased some template files while working on them, you can
1305 recover them by running <command>dh_make</command> with the
1306 <literal>--addmissing</literal> option again in a Debian package source tree.
1307 </para>
1308 <para>
1309 Updating an existing package may get complicated since it may be using older
1310 techniques. While learning the basics, please stick to creating a fresh
1311 package; further explanations are given in <xref linkend="update"/>.
1312 </para>
1313 <para>
1314 Please note that the source file does not need to contain any build system
1315 discussed in <xref linkend="simplemake"/> and <xref linkend="portable"/>. It
1316 could be just a collection of graphics data etc. Installation of files may be
1317 enabled by <systemitem role="package">debhelper</systemitem> configuration
1318 files such as <filename>debian/install</filename> (see
1319 <xref linkend="install"/>) only.
1320 </para>
1321 </section>
1322 <section id="native-dh-make"><title>Initial native Debian package</title>
1323 <para>
1324 Debian native packages are simpler to manage if they contain source files you
1325 manage only for Debian, possibly only for local uses. If you have source
1326 files in <filename>~/mypackage-1.0</filename>, you can create an initial native
1327 Debian package for it by issuing the <command>dh_make</command> command as
1328 follows.
1329 </para>
1330 <screen>
1331 $ cd ~/mypackage-1.0
1332 $ dh_make --native
1333 </screen>
1334 <para>
1335 Then the <filename>debian</filename> directory and its contents are created
1336 just like <xref linkend="non-native-dh-make"/>. This does not create a tarball
1337 since this is a native Debian package. But that is the only difference.
1338 The rest of the packaging activities are practically the same.
1339 </para>
1340 </section>
1341 </chapter>
1342 <chapter id="modify"><title>Modifying the source</title>
1343 <para>
1344 Please note that there isn't space here to go into <emphasis>all</emphasis> the
1345 details of fixing upstream sources, but here are some basic steps and problems
1346 people often run across.
1347 </para>
1348 <section id="quiltrc"><title>Setting up <command>quilt</command></title>
1349 <para>
1350 The program <command>quilt</command> offers a basic method for recording
1351 modifications to the upstream source for Debian packaging. It's
1352 useful to have a slightly customized default, so let's create an alias
1353 <command>dquilt</command> for Debian packaging by adding the following
1354 line to <filename>~/.bashrc</filename>.
1355 </para>
1356 <screen>
1357 alias dquilt="quilt --quiltrc=~/.quiltrc-dpkg"
1358 </screen>
1359 <para>
1360 Then let's create <filename>~/.quiltrc-dpkg</filename> as follows.
1361 </para>
1362 <screen>
1363 d=. ; while [ ! -d $d/debian -a `readlink -e $d` != / ]; do d=$d/..; done
1364 if [ -d $d/debian ] &amp;&amp; [ -z $QUILT_PATCHES ]; then
1365 # if in Debian packaging tree with unset $QUILT_PATCHES
1366 QUILT_PATCHES="debian/patches"
1367 QUILT_PATCH_OPTS="--reject-format=unified"
1368 QUILT_DIFF_ARGS="-p ab --no-timestamps --no-index --color=auto"
1369 QUILT_REFRESH_ARGS="-p ab --no-timestamps --no-index"
1370 QUILT_COLORS="diff_hdr=1;32:diff_add=1;34:diff_rem=1;31:diff_hunk=1;33:diff_ctx=35:diff_cctx=33"
1371 if ! [ -d $d/debian/patches ]; then mkdir $d/debian/patches; fi
1372 fi
1373 </screen>
1374 <para>
1375 See <citerefentry> <refentrytitle>quilt</refentrytitle>
1376 <manvolnum>1</manvolnum> </citerefentry> and
1377 <ulink url="&quilt-pdf;">quilt.pdf</ulink> on how to use
1378 <command>quilt</command>.
1379 </para>
1380 </section>
1381 <section id="fixupstream"><title>Fixing upstream bugs</title>
1382 <para>
1383 Let's assume you find an error in the upstream <filename>Makefile</filename>
1384 as follows where <literal>install: gentoo</literal> should have been
1385 <literal>install: gentoo-target</literal>.
1386 </para>
1387 <screen>
1388 install: gentoo
1389 install ./gentoo $(BIN)
1390 install icons/* $(ICONS)
1391 install gentoorc-example $(HOME)/.gentoorc
1392 </screen>
1393 <para>
1394 Let's fix this and record it with the <command>dquilt</command> command as
1395 <filename>fix-gentoo-target.patch</filename>. <footnote><para> The
1396 <filename>debian/patches</filename> directory should exist now if you ran
1397 <command>dh_make</command> as described before. This example operation creates
1398 it just in case you are updating an existing package. </para> </footnote>
1399 </para>
1400 <screen>
1401 $ mkdir debian/patches
1402 $ dquilt new fix-gentoo-target.patch
1403 $ dquilt add Makefile
1404 </screen>
1405 <para>
1406 You change the <filename>Makefile</filename> file as follows.
1407 </para>
1408 <screen>
1409 install: gentoo-target
1410 install ./gentoo $(BIN)
1411 install icons/* $(ICONS)
1412 install gentoorc-example $(HOME)/.gentoorc
1413 </screen>
1414 <para>
1415 Ask <command>dquilt</command> to generate the patch to create
1416 <filename>debian/patches/fix-gentoo-target.patch</filename> and add its
1417 description following <ulink url="&dep3;">DEP-3: Patch Tagging Guidelines</ulink>.
1418 </para>
1419 <screen>
1420 $ dquilt refresh
1421 $ dquilt header -e
1422 ... describe patch
1423 </screen>
1424 </section>
1425 <section id="destdir"><title>Installation of files to their destination</title>
1426 <para>
1427 Most third-party software installs itself in the <filename>/usr/local</filename>
1428 directory hierarchy. On Debian this is reserved for private use
1429 by the system administrator, so packages must not use directories such
1430 as <filename>/usr/local/bin</filename> but should instead use system
1431 directories such as <filename>/usr/bin</filename>, obeying the
1432 <ulink url="&fhs;">Filesystem Hierarchy Standard</ulink> (FHS).
1433 </para>
1434 <para>
1435 Normally, <citerefentry> <refentrytitle>make</refentrytitle>
1436 <manvolnum>1</manvolnum> </citerefentry> is used to automate building the
1437 program, and executing <literal>make install</literal> installs programs
1438 directly to the desired destination (following the
1439 <literal>install</literal> target in the
1440 <filename>Makefile</filename>). In order for Debian to provide
1441 pre-built installable packages, it modifies the build system to install
1442 programs into a file tree image created under a temporary directory
1443 instead of the actual destination.
1444 </para>
1445 <para>
1446 These two differences between normal program installation on one hand and the
1447 Debian packaging system on the other can be transparently addressed by the
1448 <systemitem role="package">debhelper</systemitem> package through the
1449 <command>dh_auto_configure</command> and <command>dh_auto_install</command>
1450 commands if the following conditions are met.
1451 </para>
1452 <itemizedlist>
1453 <listitem>
1454 <para>
1455 The <filename>Makefile</filename> must follow GNU conventions and
1456 support the <literal>$(DESTDIR)</literal> variable.
1457 <footnote><para> See <ulink url="&gnu-destdir;">GNU Coding Standards: 7.2.4 DESTDIR: Support for Staged Installs</ulink>.</para></footnote>
1458 </para>
1459 </listitem>
1460 <listitem>
1461 <para>
1462 The source must follow the Filesystem Hierarchy Standard (FHS).
1463 </para>
1464 </listitem>
1465 </itemizedlist>
1466 <para>
1467 Programs that use GNU <command>autoconf</command> follow the GNU conventions
1468 automatically, so they can be trivial to package. On the basis of
1469 this and other heuristics, it is estimated that the
1470 <systemitem role="package">debhelper</systemitem> package will work for
1471 about 90% of packages without making any intrusive changes to their
1472 build system. So packaging is not as complicated as it may seem.
1473 </para>
1474 <para>
1475 If you need to make changes in the <filename>Makefile</filename>, you
1476 should be careful to support the <literal>$(DESTDIR)</literal>
1477 variable. Although it is unset by default, the <literal>$(DESTDIR)</literal>
1478 variable is prepended to each file path used for the program
1479 installation. The packaging script will set
1480 <literal>$(DESTDIR)</literal> to the temporary directory.
1481 </para>
1482 <para>
1483 For packages of the single binary type, the temporary directory used
1484 by the <command>dh_auto_install</command> command will be set to
1485 <filename>debian/<replaceable>package</replaceable></filename>.
1486 <footnote><para> For packages of the multiple binary type, the
1487 <command>dh_auto_install</command> command uses <filename>debian/tmp</filename>
1488 as the temporary directory while the <command>dh_install</command> command with
1489 the help of
1490 <filename>debian/<replaceable>package-1</replaceable>.install</filename> and
1491 <filename>debian/<replaceable>package-2</replaceable>.install</filename> files
1492 will split the contents of <filename>debian/tmp</filename> into
1493 <filename>debian/<replaceable>package-1</replaceable></filename> and
1494 <filename>debian/<replaceable>package-2</replaceable></filename> temporary
1495 directories, to create
1496 <filename><replaceable>package-1</replaceable>_*.deb</filename> and
1497 <filename><replaceable>package-2</replaceable>_*.deb</filename> binary
1498 packages.
1499 </para> </footnote> Everything that is contained in the temporary directory
1500 will be installed on users' systems when they install your package; the only
1501 difference is that <command>dpkg</command> will be installing the
1502 files to paths relative to the root directory rather than your working
1503 directory.
1504 </para>
1505 <para>
1506 Bear in mind that even though your program installs in
1507 <filename>debian/<replaceable>package</replaceable></filename>, it still needs
1508 to behave correctly when installed from the <filename>.deb</filename>
1509 package under the root directory. So you must not allow the build
1510 system to hardcode strings like
1511 <literal>/home/me/deb/<replaceable>package</replaceable>-<replaceable>version</replaceable>/usr/share/<replaceable>package</replaceable></literal>
1512 into files in the package.
1513 </para>
1514 <para>
1515 Here's the relevant part of <systemitem role="package">gentoo</systemitem>'s
1516 <filename>Makefile</filename><footnote><para> This is just an example to
1517 show what a <filename>Makefile</filename> should look like. If the
1518 <filename>Makefile</filename> is created by the
1519 <command>./configure</command> command, the correct way to fix this kind of
1520 <filename>Makefile</filename> is to execute <command>./configure</command>
1521 from the <command>dh_auto_configure</command> command with default
1522 options including <literal>--prefix=/usr</literal>. </para> </footnote>:
1523 </para>
1524 <screen>
1525 # Where to put binary executables on 'make install'?
1526 BIN = /usr/local/bin
1527 # Where to put icons on 'make install'?
1528 ICONS = /usr/local/share/gentoo
1529 </screen>
1530 <para>
1531 We see that the files are set to install under <filename>/usr/local</filename>.
1532 As explained above, that directory hierarchy is reserved for local use on
1533 Debian, so change those paths to:
1534 </para>
1535 <screen>
1536 # Where to put binary executables on 'make install'?
1537 BIN = $(DESTDIR)/usr/bin
1538 # Where to put icons on 'make install'?
1539 ICONS = $(DESTDIR)/usr/share/gentoo
1540 </screen>
1541 <para>
1542 The exact locations that should be used for binaries, icons,
1543 documentation, etc. are specified in the Filesystem Hierarchy Standard
1544 (FHS). You should browse through it and read the sections relevant to
1545 your package.
1546 </para>
1547 <para>
1548 So, we should install binary executables in <filename>/usr/bin</filename> instead of
1549 <filename>/usr/local/bin</filename>, the manual page in
1550 <filename>/usr/share/man/man1</filename> instead of
1551 <filename>/usr/local/man/man1</filename>, and so on. Notice how there's no manual
1552 page mentioned in <systemitem role="package">gentoo</systemitem>'s
1553 <filename>Makefile</filename>, but since Debian Policy requires that every
1554 program has one, we'll make one later and install it in
1555 <filename>/usr/share/man/man1</filename>.
1556 </para>
1557 <para>
1558 Some programs don't use <filename>Makefile</filename> variables to define paths
1559 such as these. This means you might have to edit some real C sources in order
1560 to fix them to use the right locations. But where to search, and exactly what
1561 for? You can find this out by issuing:
1562 </para>
1563 <screen>
1564 $ grep -nr --include='*.[c|h]' -e 'usr/local/lib' .
1565 </screen>
1566 <para>
1567 <command>grep</command> will run recursively through the source tree and tell
1568 you the filename and the line number for all matches.
1569 </para>
1570 <para>
1571 Edit those files and in those lines replace <literal>usr/local/lib</literal>
1572 with <literal>usr/lib</literal>. This can be done automatically as follows:
1573 </para>
1574 <screen>
1575 $ sed -i -e 's#usr/local/lib#usr/lib#g' \
1576 $(find . -type f -name '*.[c|h]')
1577 </screen>
1578 <para>
1579 If you want to confirm each substitution instead, this can be done interactively as follows:
1580 </para>
1581 <screen>
1582 $ vim '+argdo %s#usr/local/lib#usr/lib#gce|update' +q \
1583 $(find . -type f -name '*.[c|h]')
1584 </screen>
1585
1586 <para>
1587 Next you should find the <literal>install</literal> target (searching
1588 for the line that starts with <literal>install:</literal> will usually
1589 work) and rename all references to directories other than ones defined
1590 at the top of the <filename>Makefile</filename>.
1591 </para>
1592 <para>
1593 Originally, <systemitem role="package">gentoo</systemitem>'s
1594 install target said:
1595 </para>
1596 <screen>
1597 install: gentoo-target
1598 install ./gentoo $(BIN)
1599 install icons/* $(ICONS)
1600 install gentoorc-example $(HOME)/.gentoorc
1601 </screen>
1602 <para>
1603 Let's fix this upstream bug and record it with the <command>dquilt</command> command as
1604 <filename>debian/patches/install.patch</filename>.
1605 </para>
1606 <screen>
1607 $ dquilt new install.patch
1608 $ dquilt add Makefile
1609 </screen>
1610 <para>
1611 In your editor, change this for the Debian package as follows:
1612 </para>
1613 <screen>
1614 install: gentoo-target
1615 install -d $(BIN) $(ICONS) $(DESTDIR)/etc
1616 install ./gentoo $(BIN)
1617 install -m644 icons/* $(ICONS)
1618 install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc
1619 </screen>
1620 <para>
1621 You'll have noticed that there's now an <literal>install -d</literal> command
1622 before the other commands in the rule. The original
1623 <filename>Makefile</filename> didn't have it because usually
1624 <literal>/usr/local/bin</literal> and other directories already exist on the
1625 system where you are running <literal>make install</literal>. However, since we will
1626 be installing into a newly created private directory tree, we will have to
1627 create each and every one of those directories.
1628 </para>
1629 <para>
1630 We can also add in other things at the end of the rule, like the installation
1631 of additional documentation that the upstream authors sometimes omit:
1632 </para>
1633 <screen>
1634 install -d $(DESTDIR)/usr/share/doc/gentoo/html
1635 cp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html
1636 </screen>
1637 <para>
1638 Check carefully, and if everything is okay, ask <command>dquilt</command> to
1639 generate the patch to create <filename>debian/patches/install.patch</filename>
1640 and add its description.
1641 </para>
1642 <screen>
1643 $ dquilt refresh
1644 $ dquilt header -e
1645 ... describe patch
1646 </screen>
1647 <para>
1648 Now you have a series of patches.
1649 </para>
1650 <orderedlist numeration="arabic">
1651 <listitem>
1652 <para>
1653 Upstream bug fix: <filename>debian/patches/fix-gentoo-target.patch</filename>
1654 </para>
1655 </listitem>
1656 <listitem>
1657 <para>
1658 Debian specific packaging modification:
1659 <filename>debian/patches/install.patch</filename>
1660 </para>
1661 </listitem>
1662 </orderedlist>
1663 <para>
1664 Whenever you make changes that are not specifically related to Debian package
1665 such as <filename>debian/patches/fix-gentoo-target.patch</filename>, be sure to
1666 send them to the upstream maintainer so they can be included in the next
1667 revision of the program and be useful to everyone else. Also remember
1668 to avoid making your fixes specific to Debian or Linux - or even Unix!
1669 Make them portable. This will make your fixes much easier to apply.
1670 </para>
1671 <para>
1672 Note that you don't have to send the <filename>debian/*</filename> files
1673 upstream.
1674 </para>
1675 </section>
1676 <section id="difflibs"><title>Differing libraries</title>
1677 <para>
1678 There is one other common problem: libraries are often different from platform
1679 to platform. For example, a <filename>Makefile</filename> can contain a
1680 reference to a library which doesn't exist on the Debian system. In that case, we
1681 need to change it to a library which does exist in Debian, and serves the same
1682 purpose.
1683 </para>
1684 <para>
1685 Let's assume a line in your program's <filename>Makefile</filename> (or
1686 <filename>Makefile.in</filename>) as the following.
1687 </para>
1688 <screen>
1689 LIBS = -lfoo -lbar
1690 </screen>
1691 <para>
1692 If your program doesn't compile since the <literal>foo</literal> library
1693 doesn't exist and its equivalent is provided by the <literal>foo2</literal>
1694 library on the Debian system, you can fix this build problem as
1695 <filename>debian/patches/foo2.patch</filename> by changing
1696 <literal>foo</literal> into <literal>foo2</literal>.<footnote><para>If there
1697 are API changes from the <literal>foo</literal> library to the
1698 <literal>foo2</literal> library, required changes to the source code need to be
1699 made to match the new API.</para> </footnote>
1700 </para>
1701 <screen>
1702 $ dquilt new foo2.patch
1703 $ dquilt add Makefile
1704 $ sed -i -e 's/-lfoo/-lfoo2/g' Makefile
1705 $ dquilt refresh
1706 $ dquilt header -e
1707 ... describe patch
1708 </screen>
1709 </section>
1710 </chapter>
1711 <chapter id="dreq"><title>Required files under the <filename>debian</filename> directory</title>
1712 <para>
1713 There is a new subdirectory under the program's source directory, it's called
1714 <filename>debian</filename>. There are a number of files in this directory
1715 that we should edit in order to customize the behavior of the package. The
1716 most important of them are <filename>control</filename>,
1717 <filename>changelog</filename>, <filename>copyright</filename> and
1718 <filename>rules</filename>, which are required for all packages.
1719 <footnote><para>
1720 In this chapter, files in the <filename>debian</filename> directory are
1721 referred without preceding <filename>debian/</filename> for simplicity whenever
1722 they are obvious.
1723 </para></footnote>
1724 </para>
1725 <section id="control"><title><filename>control</filename> file</title>
1726 <para>
1727 This file contains various values which <command>dpkg</command>,
1728 <command>dselect</command>, <command>apt-get</command>,
1729 <command>apt-cache</command>, <command>aptitude</command>, and other package
1730 management tools will use to manage the package. It is defined by the
1731 <ulink url="&policy-control;">Debian Policy Manual, 5 "Control files and their fields"</ulink>.
1732 </para>
1733 <para>
1734 Here is the <filename>control</filename> file <command>dh_make</command>
1735 created for us:
1736 </para>
1737 <screen>
1738 1 Source: gentoo
1739 2 Section: unknown
1740 3 Priority: extra
1741 4 Maintainer: Josip Rodin &lt;joy-mg@debian.org&gt;
1742 5 Build-Depends: debhelper (&gt;= 7.0.50~)
1743 6 Standards-Version: 3.8.4
1744 7 Homepage: &lt;insert the upstream URL, if relevant&gt;
1745 8
1746 9 Package: gentoo
1747 10 Architecture: any
1748 11 Depends: ${shlibs:Depends}, ${misc:Depends}
1749 12 Description: &lt;insert up to 60 chars description&gt;
1750 13 &lt;insert long description, indented with spaces&gt;
1751 </screen>
1752 <para>
1753 (I've added the line numbers.)
1754 </para>
1755 <para>
1756 Lines 1-7 are the control information for the source package.
1757 Lines 9-13 are the control information for the binary package.
1758 </para>
1759 <para>
1760 Line 1 is the name of the source package.
1761 </para>
1762 <para>
1763 Line 2 is the section of the distribution the source package goes into.
1764 </para>
1765 <para>
1766 As you may have noticed, Debian archive is divided in sections:
1767 <literal>main</literal> (the free software), <literal>non-free</literal> (the
1768 not really free software) and <literal>contrib</literal> (free software that
1769 depends on non-free software). Under those, there are logical subsections that
1770 describe in short what packages are in. So we have <literal>admin</literal>
1771 for administrator-only programs, <literal>base</literal> for the basic tools,
1772 <literal>devel</literal> for programmer tools, <literal>doc</literal> for
1773 documentation, <literal>libs</literal> for libraries, <literal>mail</literal>
1774 for e-mail readers and daemons, <literal>net</literal> for network apps and
1775 daemons, <literal>x11</literal> for X11 programs that don't fit anywhere else,
1776 and many more.
1777 <footnote> <para>See
1778 <ulink url="&policy-subsections;">Debian Policy Manual, 2.4 "Sections"</ulink> and
1779 <ulink url="&sections-unstable;">List of sections in <literal>sid</literal></ulink>.</para>
1780 </footnote>
1781 </para>
1782 <para>
1783 Let's change it then to x11. (A <literal>main/</literal> prefix is implied so
1784 we can omit it.)
1785 </para>
1786 <para>
1787 Line 3 describes how important it is that the user installs this package.
1788 <footnote> <para>See
1789 <ulink url="&policy-priorities;">Debian Policy Manual, 2.5 "Priorities"</ulink>.
1790 </para>
1791 </footnote>
1792 </para>
1793 <itemizedlist>
1794 <listitem>
1795 <para>
1796 The <literal>optional</literal> priority will usually work for new packages
1797 that do not conflict with others with <literal>required</literal>,
1798 <literal>important</literal> or <literal>standard</literal> priorities.
1799 </para>
1800 </listitem>
1801 <listitem>
1802 <para>
1803 The <literal>extra</literal> priority will usually work for new packages that
1804 conflict with others with non-<literal>extra</literal> priorities.
1805 </para>
1806 </listitem>
1807 </itemizedlist>
1808 <para>
1809 Section and priority are used by the frontends like <command>aptitude</command>
1810 when they sort packages and select defaults. Once you upload the package to
1811 Debian, the value of these two fields can be overridden by the archive
1812 maintainers, in which case you will be notified by email.
1813 </para>
1814 <para>
1815 As this is a normal priority package and doesn't conflict with anything else,
1816 we will change the priority to <literal>optional</literal>.
1817 </para>
1818 <para>
1819 Line 4 is the name and email address of the maintainer. Make sure that this
1820 field includes a valid <literal>To</literal> header for an email, because after
1821 you upload it, the bug tracking system will use it to deliver bug emails to
1822 you. Avoid using commas, ampersands and parenthesis.
1823 </para>
1824 <para>
1825 The 5th line includes the list of packages required to build your package as
1826 the <literal>Build-Depends</literal> field. You can also have the
1827 <literal>Build-Depends-Indep</literal> field as an additional line, here.
1828 <footnote><para>See
1829 <ulink url="&policy-relationships;#s-sourcebinarydeps">Debian Policy Manual, 7.7 "Relationships between source and binary packages - Build-Depends, Build-Depends-Indep, Build-Conflicts, Build-Conflicts-Indep"</ulink>.</para></footnote>
1830 Some packages like
1831 <systemitem role="package">gcc</systemitem> and
1832 <systemitem role="package">make</systemitem> which are required by the
1833 <systemitem role="package">build-essential</systemitem> package are implied. If you need
1834 to have other tools to build your package, you should add them to these fields.
1835 Multiple entries are separated with commas; read on for the explanation of
1836 binary package dependencies to find out more about the syntax of these lines.
1837 </para>
1838 <itemizedlist>
1839 <listitem>
1840 <para>
1841 For all packages packaged with the <command>dh</command> command in the
1842 <filename>debian/rules</filename> file, you must have <literal>debhelper
1843 (&gt;=7.0.50~)</literal> in the <literal>Build-Depends</literal> field to
1844 satisfy the Debian Policy requirement for the <literal>clean</literal> target.
1845 </para>
1846 </listitem>
1847 <listitem>
1848 <para>
1849 For source packages which have some binary packages with <literal>Architecture:
1850 any</literal>, they are rebuild by the autobuilder. Since this autobuilder
1851 procedure runs <literal>debian/rules build</literal> in it while installing
1852 only packages listed in the <literal>Build-Depends</literal> field (see <xref linkend="autobuilder"/>), the <literal>Build-Depends</literal> field needs to
1853 list practically all the required packages and the
1854 <literal>Build-Depends-indep</literal> is rarely used.
1855 </para>
1856 </listitem>
1857 <listitem>
1858 <para>
1859 For source packages which have binary packages only with <literal>Architecture:
1860 all</literal>, the <literal>Build-Depends-Indep</literal> field may list all
1861 the required packages unless they are already listed in the
1862 <literal>Build-Depends</literal> field to satisfy the Debian Policy requirement
1863 for the <literal>clean</literal> target.
1864 </para>
1865 </listitem>
1866 </itemizedlist>
1867 <para>
1868 If you are not sure which one should be used, use the
1869 <literal>Build-Depends</literal> field to be on the safe side.
1870 <footnote><para> This somewhat strange situation is a feature well documented
1871 in the <ulink url="&policy-build-depends-indep;">Debian Policy
1872 Manual, Footnotes 48</ulink>. This is not due to the use of the
1873 <command>dh</command> command in the <filename>debian/rules</filename> file but
1874 due to how the <command>dpkg-buildpackage</command> works. The same situation
1875 applies to the <ulink url="https://bugs.launchpad.net/launchpad-buildd/+bug/238141">auto build system
1876 for Ubuntu</ulink>. </para> </footnote>
1877 </para>
1878 <para>
1879 To find out what packages your package needs to be built run the command:
1880 </para>
1881 <screen>
1882 $ dpkg-depcheck -d ./configure
1883 </screen>
1884 <para>
1885 To manually find exact build dependency for
1886 <command><replaceable>/usr/bin/foo</replaceable></command>, you execute
1887 </para>
1888 <screen>
1889 $ objdump -p <replaceable>/usr/bin/foo</replaceable> | grep NEEDED
1890 </screen>
1891 <para>
1892 and for each library listed, e.g., <command>libfoo.so.6</command>, execute
1893 </para>
1894 <screen>
1895 $ dpkg -S libfoo.so.6
1896 </screen>
1897 <para>
1898 Then you just take <literal>-dev</literal> version of every package as
1899 <literal>Build-Depends</literal> entry. If you use <command>ldd</command> for
1900 this purpose, it will report indirect lib dependencies as well, resulting in
1901 the problem of excessive build dependencies.
1902 </para>
1903 <para>
1904 <systemitem role="package">gentoo</systemitem> also happens to require
1905 <systemitem role="package">xlibs-dev</systemitem>, <systemitem role="package">libgtk1.2-dev</systemitem> and <systemitem role="package">libglib1.2-dev</systemitem> to build, so we'll add them here
1906 next to <systemitem role="package">debhelper</systemitem>.
1907 </para>
1908 <para>
1909 Line 6 is the version of the <ulink url="&debian-policy;">Debian Policy
1910 Manual</ulink> standards this package follows, the one you read while making
1911 your package.
1912 </para>
1913 <para>
1914 On line 7 you can put the URL of the homepage for the upstream program.
1915 </para>
1916 <para>
1917 Line 9 is the name of the binary package. This is usually the same as the name
1918 of the source package, but it doesn't necessarily have to be that way.
1919 </para>
1920 <para>
1921 Line 10 describes the CPU architecture the binary package can be compiled for.
1922 We'll leave this as <literal>any</literal> because <citerefentry>
1923 <refentrytitle>dpkg-gencontrol</refentrytitle> <manvolnum>1</manvolnum>
1924 </citerefentry> will fill in the appropriate value for any machine this package
1925 gets compiled on.
1926 </para>
1927 <para>
1928 If your package is architecture independent (for example, a shell or Perl
1929 script, or a document), change this to <literal>all</literal>, and read later
1930 in <xref linkend="rules"/> about using the <literal>binary-indep</literal> rule
1931 instead of <literal>binary-arch</literal> for building the package.
1932 </para>
1933 <para>
1934 Line 11 shows one of the most powerful features of the Debian packaging system.
1935 Packages can relate to each other in various ways. Apart from
1936 <literal>Depends</literal>, other relationship fields are
1937 <literal>Recommends</literal>, <literal>Suggests</literal>,
1938 <literal>Pre-Depends</literal>, <literal>Breaks</literal>,
1939 <literal>Conflicts</literal>, <literal>Provides</literal>, and
1940 <literal>Replaces</literal>.
1941 </para>
1942 <para>
1943 The package management tools usually behave the same way when dealing with
1944 these relations; if not, it will be explained. (see <citerefentry>
1945 <refentrytitle>dpkg</refentrytitle> <manvolnum>8</manvolnum> </citerefentry>,
1946 <citerefentry> <refentrytitle>dselect</refentrytitle> <manvolnum>8</manvolnum>
1947 </citerefentry>, <citerefentry> <refentrytitle>apt</refentrytitle>
1948 <manvolnum>8</manvolnum> </citerefentry>, <citerefentry>
1949 <refentrytitle>aptitude</refentrytitle> <manvolnum>1</manvolnum>
1950 </citerefentry> etc.)
1951 </para>
1952 <para>
1953 Here is a simplified description of package relationships.
1954 <footnote><para>See
1955 <ulink url="&policy-relationships;">Debian Policy Manual, 7 "Declaring relationships between packages"</ulink>.
1956 </para></footnote>
1957 </para>
1958 <itemizedlist>
1959 <listitem>
1960 <para>
1961 <literal>Depends</literal>
1962 </para>
1963 <para>
1964 The package will not be installed unless the packages it depends on are
1965 installed. Use this if your program absolutely will not run (or will cause
1966 severe breakage) unless a particular package is present.
1967 </para>
1968 </listitem>
1969 <listitem>
1970 <para>
1971 <literal>Recommends</literal>
1972 </para>
1973 <para>
1974 Use this for packages that are not strictly necessary but are typically used
1975 with your program. When a user installs your program, all frontends will
1976 likely prompt them to install the recommended packages.
1977 <command>aptitude</command> and <command>apt-get</command> install recommended
1978 packages along with your package (but the user can disable this default
1979 behaviour). <command>dpkg</command> will ignore this field.
1980 </para>
1981 </listitem>
1982 <listitem>
1983 <para>
1984 <literal>Suggests</literal>
1985 </para>
1986 <para>
1987 Use this for packages which will work nicely with your program but are not at
1988 all necessary. When a user installs your program, all frontends will likely
1989 prompt them to install the suggested packages. <command>aptitude</command> can
1990 be configured to install suggested packages along with your package but this is
1991 not its default. <command>dpkg</command> and <command>apt-get</command> will
1992 ignore this field.
1993 </para>
1994 </listitem>
1995 <listitem>
1996 <para>
1997 <literal>Pre-Depends</literal>
1998 </para>
1999 <para>
2000 This is stronger than <literal>Depends</literal>. The package will not be
2001 installed unless the packages it pre-depends on are installed and
2002 <emphasis>correctly configured</emphasis>. Use this <emphasis>very</emphasis>
2003 sparingly and only after discussing it on the <ulink url="&debian-devel-ldo;">debian-devel@lists.debian.org</ulink>
2004 mailing list. Read: don't use it at all. :-)
2005 </para>
2006 </listitem>
2007 <listitem>
2008 <para>
2009 <literal>Conflicts</literal>
2010 </para>
2011 <para>
2012 The package will not be installed until all the packages it conflicts with have
2013 been removed. Use this if your program absolutely will not run or will cause
2014 severe problems if a particular package is present.
2015 </para>
2016 </listitem>
2017 <listitem>
2018 <para>
2019 <literal>Breaks</literal>
2020 </para>
2021 <para>
2022 The package will be installed while all the listed packages will be broken.
2023 Normally a <literal>Breaks</literal> entry has an earlier than version clause.
2024 The resolution is generally to upgrade the listed packages by the higher-level
2025 package management tools.
2026 </para>
2027 </listitem>
2028 <listitem>
2029 <para>
2030 <literal>Provides</literal>
2031 </para>
2032 <para>
2033 For some types of packages where there are multiple alternatives virtual names
2034 have been defined. You can get the full list in the
2035 <ulink url="&virtual-package;">virtual-package-names-list.txt.gz</ulink>
2036 file. Use this if your program provides a function of an existing virtual
2037 package.
2038 </para>
2039 </listitem>
2040 <listitem>
2041 <para>
2042 <literal>Replaces</literal>
2043 </para>
2044 <para>
2045 Use this when your program replaces files from another package, or completely
2046 replaces another package (used in conjunction with
2047 <literal>Conflicts</literal>). Files from the named packages will be
2048 overwritten with the files from your package.
2049 </para>
2050 </listitem>
2051 </itemizedlist>
2052 <para>
2053 All these fields have uniform syntax. They are a list of package names
2054 separated by commas. These package names may also be lists of alternative
2055 package names, separated by vertical bar symbols <literal>|</literal> (pipe
2056 symbols).
2057 </para>
2058 <para>
2059 The fields may restrict their applicability to particular versions of each
2060 named package. These versions are listed in parentheses after each individual
2061 package name, and they should contain a relation from the list below followed
2062 by the version number. The relations allowed are: <literal>&lt;&lt;</literal>,
2063 <literal>&lt;=</literal>, <literal>=</literal>, <literal>&gt;=</literal> and
2064 <literal>&gt;&gt;</literal> for strictly lower, lower or equal, exactly equal,
2065 greater or equal and strictly greater, respectively. For example,
2066 </para>
2067 <screen>
2068 Depends: foo (&gt;= 1.2), libbar1 (= 1.3.4)
2069 Conflicts: baz
2070 Recommends: libbaz4 (&gt;&gt; 4.0.7)
2071 Suggests: quux
2072 Replaces: quux (&lt;&lt; 5), quux-foo (&lt;= 7.6)
2073 </screen>
2074 <para>
2075 The last feature you need to know about is
2076 <literal>${shlibs:Depends}</literal>, <literal>${perl:Depends}</literal>,
2077 <literal>${misc:Depends}</literal>, etc.
2078 </para>
2079 <para>
2080 <citerefentry> <refentrytitle>dh_shlibdeps</refentrytitle>
2081 <manvolnum>1</manvolnum> </citerefentry> calculates shared library dependencies
2082 for binary packages. It generates a list of ELF executables and shared
2083 libraries it has found for each binary package. Such list is used for
2084 substituting <literal>${shlibs:Depends}</literal>.
2085 </para>
2086 <para>
2087 <citerefentry> <refentrytitle>dh_perl</refentrytitle> <manvolnum>1</manvolnum>
2088 </citerefentry> calculates Perl dependencies. It generates a list of a
2089 dependency on <literal>perl</literal> or <literal>perlapi</literal> for each binary package. Such list is used for
2090 substituting <literal>${perl:Depends}</literal>.
2091 </para>
2092 <para>
2093 Some <systemitem role="package">debhelper</systemitem> commands may make the
2094 generated package need to depend on some other packages. All such commands
2095 generate a list of required packages for each binary package.
2096 Such list is used for substituting <literal>${misc:Depends}</literal>.
2097 </para>
2098 <para>
2099 <citerefentry> <refentrytitle>dh_gencontrol</refentrytitle>
2100 <manvolnum>1</manvolnum> </citerefentry> generates
2101 <filename>DEBIAN/control</filename> for each binary package while
2102 substituting <literal>${shlibs:Depends}</literal>,
2103 <literal>${perl:Depends}</literal>, <literal>${misc:Depends}</literal>, etc.
2104 </para>
2105 <para>
2106 Having said all that, we can leave the <literal>Depends</literal> field exactly
2107 as it is now, and insert another line after it saying <literal>Suggests:
2108 file</literal>, because <systemitem role="package">gentoo</systemitem> can use
2109 some features provided by that <systemitem role="package">file</systemitem>
2110 package.
2111 </para>
2112 <para> Line 9 is the Homepage URL. Let's assume this to be at
2113 <ulink url="&gentoo;"/>.
2114 </para>
2115 <para>
2116 Line 12 is the short description. Most people screens are 80 columns wide so
2117 this shouldn't be longer than about 60 characters. I'll change it to
2118 <literal>fully GUI-configurable, two-pane X file manager</literal>.
2119 </para>
2120 <para>
2121 Line 13 is where the long description goes. This should be a paragraph which
2122 gives more details about the package. Column 1 of each line should be empty.
2123 There must be no blank lines, but you can put a single <literal>.</literal>
2124 (dot) in a column to simulate that. Also, there must be no more than one blank
2125 line after the long description. <footnote><para>These descriptions are in
2126 English. Translations of these descriptions are provided by
2127 <ulink url="&ddtp;">The Debian Description Translation Project - DDTP</ulink>.</para></footnote>
2128 </para>
2129 <para>
2130 Let's insert <literal>Vcs-*</literal> fields to document the Version Control
2131 System (VCS) location between line 6 and 7.
2132 <footnote><para>See
2133 <ulink url="&devref-bpp-vcs;">Debian Developer's Reference, 6.2.5. "Version Control System location"</ulink>.
2134 </para></footnote>
2135 Let's assume that the <systemitem role="package">gentoo</systemitem>
2136 package has its VCS located in Debian Alioth Git Service at
2137 <literal>git://git.debian.org/git/collab-maint/gentoo.git</literal>.
2138 </para>
2139 <para>
2140 Finally, here is the updated <filename>control</filename> file:
2141 </para>
2142 <screen>
2143 1 Source: gentoo
2144 2 Section: x11
2145 3 Priority: optional
2146 4 Maintainer: Josip Rodin &lt;joy-mg@debian.org&gt;
2147 5 Build-Depends: debhelper (&gt;= 7.0.5), xlibs-dev, libgtk1.2-dev, libglib1.2-dev
2148 6 Standards-Version: 3.8.4
2149 7 Vcs-Git: git://git.debian.org/git/collab-maint/gentoo.git
2150 8 Vcs-browser: http://git.debian.org/?p=collab-maint/gentoo.git
2151 9 Homepage: &gentoo;
2152 10
2153 11 Package: gentoo
2154 12 Architecture: any
2155 13 Depends: ${shlibs:Depends}, ${misc:Depends}
2156 14 Suggests: file
2157 15 Description: fully GUI-configurable, two-pane X file manager
2158 16 gentoo is a two-pane file manager for the X Window System. gentoo lets the
2159 17 user do (almost) all of the configuration and customizing from within the
2160 18 program itself. If you still prefer to hand-edit configuration files,
2161 19 they're fairly easy to work with since they are written in an XML format.
2162 20 .
2163 21 gentoo features a fairly complex and powerful file identification system,
2164 22 coupled to a object-oriented style system, which together give you a lot
2165 23 of control over how files of different types are displayed and acted upon.
2166 24 Additionally, over a hundred pixmap images are available for use in file
2167 25 type descriptions.
2168 26 .
2169 29 gentoo was written from scratch in ANSI C, and it utilises the GTK+ toolkit
2170 30 for its interface.
2171 </screen>
2172 <para>
2173 (I've added the line numbers.)
2174 </para>
2175 </section>
2176 <section id="copyright"><title><filename>copyright</filename> file</title>
2177 <para>
2178 This file contains the information about package upstream resources, copyright
2179 and license information.
2180 <ulink url="&policy-copyright;">Debian Policy Manual, 12.5 "Copyright information"</ulink>
2181 dictates its content and
2182 <ulink url="&dep5;">DEP-5: Machine-parseable <filename>debian/copyright</filename></ulink>
2183 provides guidelines for its format.
2184 </para>
2185 <para>
2186 <command>dh_make</command> can give you a template
2187 <filename>copyright</filename> file. Let's use the <literal>--copyright
2188 gpl2</literal> option here to get a template file for the <systemitem role="package">gentoo</systemitem> package released under GPL-2.
2189 </para>
2190 <para>
2191 You must fill in missing information such as the place you got the package
2192 from, the actual copyright notice and their license to complete this file. For
2193 the common free software licenses such as GNU GPL-1, GNU GPL-2, GNU GPL-3,
2194 LGPL-2, LGPL-2.1, LGPL-3, GNU FDL-1.2, GNU FDL-1.3, Apache-2.0 or the Artistic
2195 license, you can just refer to the appropriate file in
2196 <filename>/usr/share/common-licenses/</filename> directory that exists on every
2197 Debian system. Otherwise, you must include the complete license.
2198 </para>
2199 <para>
2200 In short, here's how <systemitem role="package">gentoo</systemitem>'s
2201 <filename>copyright</filename> file should look like:
2202 </para>
2203 <screen>
2204 1 Format-Specification: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?op=file&amp;rev=135
2205 2 Name: gentoo
2206 3 Maintainer: Josip Rodin &lt;joy-mg@debian.org&gt;
2207 4 Source: http://sourceforge.net/projects/gentoo/files/
2208 5
2209 6 Copyright: 1998-2010 Emil Brink &lt;emil@obsession.se&gt;
2210 7 License: GPL-2+
2211 8
2212 9 Files: icons/*
2213 10 Copyright: 1998 Johan Hanson &lt;johan@tiq.com&gt;
2214 11 License: GPL-2+
2215 12
2216 13 Files: debian/*
2217 14 Copyright: 1998-2010 Josip Rodin &lt;joy-mg@debian.org&gt;
2218 15 License: GPL-2+
2219 16
2220 17 License: GPL-2+
2221 18 This program is free software; you can redistribute it and/or modify
2222 19 it under the terms of the GNU General Public License as published by
2223 20 the Free Software Foundation; either version 2 of the License, or
2224 21 (at your option) any later version.
2225 22 .
2226 23 This program is distributed in the hope that it will be useful,
2227 24 but WITHOUT ANY WARRANTY; without even the implied warranty of
2228 25 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2229 26 GNU General Public License for more details.
2230 27 .
2231 28 You should have received a copy of the GNU General Public License along
2232 29 with this program; if not, write to the Free Software Foundation, Inc.,
2233 30 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
2234 31 .
2235 32 On Debian systems, the full text of the GNU General Public
2236 33 License version 2 can be found in the file
2237 34 `/usr/share/common-licenses/GPL-2'.
2238 </screen>
2239 <para>
2240 (I've added the line numbers.)
2241 </para>
2242 <para>
2243 Please follow the HOWTO provided by ftpmasters and sent to
2244 debian-devel-announce: <ulink url="&howto-copyright;"/>.
2245 </para>
2246 </section>
2247 <section id="changelog"><title><filename>changelog</filename> file</title>
2248 <para>
2249 This is a required file, which has a special format described in the
2250 <ulink url="&policy-dpkgchangelog;">Debian Policy Manual, 4.4 "debian/changelog"</ulink>.
2251 This format is used by <command>dpkg</command> and other programs to obtain the
2252 version number, revision, distribution and urgency of your package.
2253 </para>
2254 <para>
2255 For you, it is also important, since it is good to have documented all changes
2256 you have done. It will help people downloading your package to see whether
2257 there are issues with the package that they should know about. It will be
2258 saved as <filename>/usr/share/doc/gentoo/changelog.Debian.gz</filename> in the
2259 binary package.
2260 </para>
2261 <para>
2262 <command>dh_make</command> created a default one, and this is how it looks
2263 like:
2264 </para>
2265 <screen>
2266 1 gentoo (0.9.12-1) unstable; urgency=low
2267 2
2268 3 * Initial release (Closes: #<replaceable>nnnn</replaceable>) &lt;<replaceable>nnnn</replaceable> is the bug number of your ITP&gt;
2269 4
2270 5 -- Josip Rodin &lt;joy-mg@debian.org&gt; Mon, 22 Mar 2010 00:37:31 +0100
2271 6
2272 </screen>
2273 <para>
2274 (I've added the line numbers.)
2275 </para>
2276 <para>
2277 Line 1 is the package name, version, distribution, and urgency. The name must
2278 match the source package name, distribution should be either
2279 <literal>unstable</literal> (or even <literal>experimental</literal>)
2280 <footnote><para> Some people use invalid distribution values such as
2281 <literal>UNRELEASED</literal> to prevent a package to be accidentally uploaded
2282 when updating a package in a shared VCS. </para> </footnote>, and urgency
2283 shouldn't be changed to anything higher than <literal>low</literal>. :-)
2284 </para>
2285 <para>
2286 Lines 3-5 are a log entry, where you document changes made in this package
2287 revision (not the upstream changes - there is special file for that purpose,
2288 created by the upstream authors, which you will later install as
2289 <filename>/usr/share/doc/gentoo/changelog.gz</filename>). Let's assume your
2290 ITP (Intent To Package) bug report number was <literal>12345</literal>. New
2291 lines must be inserted just before the uppermost line that begins with
2292 <literal>*</literal> (asterisk). You can do it with <citerefentry>
2293 <refentrytitle>dch</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>, or
2294 manually with a text editor.
2295 </para>
2296 <para>
2297 You will end up with something like this:
2298 </para>
2299 <screen>
2300 1 gentoo (0.9.12-1) unstable; urgency=low
2301 2
2302 3 * Initial Release. Closes: #12345
2303 4 * This is my first Debian package.
2304 5 * Adjusted the Makefile to fix $(DESTDIR) problems.
2305 6
2306 7 -- Josip Rodin &lt;joy-mg@debian.org&gt; Mon, 22 Mar 2010 00:37:31 +0100
2307 8
2308 </screen>
2309 <para>
2310 (I've added the line numbers.)
2311 </para>
2312 <para>
2313 You can read more about updating the <filename>changelog</filename> file later
2314 in <xref linkend="update"/>.
2315 </para>
2316 </section>
2317 <section id="rules"><title><filename>rules</filename> file</title>
2318 <para>
2319 Now we need to take a look at the exact rules which <citerefentry>
2320 <refentrytitle>dpkg-buildpackage</refentrytitle> <manvolnum>1</manvolnum>
2321 </citerefentry> will use to actually create the package. This file is actually
2322 another <filename>Makefile</filename>, but different from the one(s) in the
2323 upstream source. Unlike other files in <filename>debian</filename>, this one
2324 is marked as executable.
2325 </para>
2326 <section id="targets"><title>Targets of <filename>rules</filename> file</title>
2327 <para>
2328 Every <filename>rules</filename> file, as any other
2329 <filename>Makefile</filename>, consists of several targets and their rules
2330 specifying how to handle the source. <ulink url="&policy-debianrules;">Debian
2331 Policy Manual, 4.9 "Main building script: debian/rules"</ulink> explains its
2332 details.
2333 </para>
2334 <para>
2335 The simplified explanation of targets are the following.
2336 </para>
2337 <itemizedlist>
2338 <listitem>
2339 <para>
2340 <literal>clean</literal> target: to clean all compiled, generated, and useless
2341 files in the build-tree. (required)
2342 </para>
2343 </listitem>
2344 <listitem>
2345 <para>
2346 <literal>build</literal> target: to build the source into compiled programs and
2347 formatted documents in the build-tree. (required)
2348 </para>
2349 </listitem>
2350 <listitem>
2351 <para>
2352 <literal>install</literal> target: to install files into a file tree for each
2353 binary package under the <filename>debian</filename> directory. If defined,
2354 <literal>binary*</literal> targets effectively depend on this target.
2355 (optional)
2356 </para>
2357 </listitem>
2358 <listitem>
2359 <para>
2360 <literal>binary</literal> target: to create all binary packages (effectively
2361 combination of <literal>binary-arch</literal> and
2362 <literal>binary-indep</literal> targets). (required)<footnote><para> This
2363 target is used by <literal>dpkg-buildpackage</literal> as in <xref linkend="completebuild"/>. </para> </footnote>
2364 </para>
2365 </listitem>
2366 <listitem>
2367 <para>
2368 <literal>binary-arch</literal> target: to create arch-dependent
2369 (<literal>Architecture: any</literal>) binary packages in the parent directory.
2370 (required)<footnote><para> This target is used by <literal>dpkg-buildpackage
2371 -B</literal> as in <xref linkend="autobuilder"/>. </para> </footnote>
2372 </para>
2373 </listitem>
2374 <listitem>
2375 <para>
2376 <literal>binary-indep</literal> target: to create arch-independent
2377 (<literal>Architecture: all</literal>) binary packages in the parent directory.
2378 (required)<footnote><para> This target is used by <literal>dpkg-buildpackage
2379 -A</literal>. </para> </footnote>
2380 </para>
2381 </listitem>
2382 <listitem>
2383 <para>
2384 <literal>get-orig-source</literal> target: to obtain the most recent version of
2385 the original source package from upstream archive site. (optional)
2386 </para>
2387 </listitem>
2388 </itemizedlist>
2389 <para>
2390 Rules that you want to execute are invoked as command line arguments (for
2391 example, <literal>./debian/rules build</literal> or <literal>fakeroot make -f
2392 debian/rules binary</literal>). After the target name, you can name the
2393 dependency, program or file that the rule depends on. After that, there can be
2394 any number of commands, indented with
2395 <literal><replaceable>TAB</replaceable></literal>. A new rule begins with the
2396 target declaration in the first column. Empty lines and lines beginning with
2397 <literal>#</literal> (hash) are treated as comments and ignored.
2398 </para>
2399 <para>
2400 You are probably confused now, but it will all be clear upon examination of the
2401 <filename>rules</filename> file that <command>dh_make</command> gives us as a
2402 default. You should also read <literal>info make</literal> for more
2403 information.
2404 </para>
2405 </section>
2406 <section id="defaultrules"><title>Default <filename>rules</filename> file</title>
2407 <para>
2408 Newer <command>dh_make</command> generates a very simple but powerful default
2409 <filename>rules</filename> file using the <command>dh</command> command:
2410 </para>
2411 <screen>
2412 1 #!/usr/bin/make -f
2413 2 # -*- makefile -*-
2414 3 # Sample debian/rules that uses debhelper.
2415 4 # This file was originally written by Joey Hess and Craig Small.
2416 5 # As a special exception, when this file is copied by dh-make into a
2417 6 # dh-make output file, you may use that output file without restriction.
2418 7 # This special exception was added by Craig Small in version 0.37 of dh-make.
2419 8
2420 9 # Uncomment this to turn on verbose mode.
2421 10 #export DH_VERBOSE=1
2422 11
2423 12 %:
2424 13 dh $@
2425 </screen>
2426 <para>
2427 (I've added the line numbers. In the actual <filename>rules</filename> file,
2428 the leading white spaces are TAB codes.)
2429 </para>
2430 <para>
2431 You are probably familiar with lines like line 1 from shell and Perl scripts.
2432 It tells the operating system that this file is to be processed with
2433 <filename>/usr/bin/make</filename>.
2434 </para>
2435 <para>
2436 Line 11 can be uncommented to set <literal>DH_VERBOSE</literal> variable to 1.
2437 Then, the <command>dh</command> command will output which
2438 <command>dh_*</command> commands are executed by the <command>dh</command>
2439 command. You can also add <literal>export DH_OPTIONS=-v</literal> line here.
2440 Then each <command>dh_*</command> command will output which commands are
2441 executed by each <command>dh_*</command> command. This helps you to understand
2442 what exactly is going on behind this simple <filename>rules</filename> file and
2443 to debug its problems. This new <command>dh</command> is a core part of the
2444 <systemitem role="package">debhelper</systemitem> tools and does not hide
2445 anything from you.
2446 </para>
2447 <para>
2448 Lines 12 and 13 are where all the work is done. The percent sign means any
2449 targets which then call a single program, <command>dh</command> with the target
2450 name. <footnote><para> This uses the new <systemitem role="package">debhelper</systemitem> V7 features. Its design concepts are
2451 explained in <ulink url="&debhelper-slides;">Not Your
2452 Grandpa's Debhelper</ulink> presented at Debconf9 by the <systemitem role="package">debhelper</systemitem> upstream. Under
2453 <literal>lenny</literal>, <command>dh_make</command> created a much more
2454 complicated <filename>rules</filename> file with many <command>dh_*</command>
2455 scripts listed for each required explicit targets and frozen them to the state
2456 when it was initially packaged. This new <command>dh</command> command is
2457 simpler and frees us from this constrain. You still have full power to
2458 customize this with <literal>override_dh_*</literal> targets. See <xref linkend="customrules"/>. It is based only on the <systemitem role="package">debhelper</systemitem> package and does not obfuscate the
2459 package building process like the <systemitem role="package">cdbs</systemitem>
2460 package. </para> </footnote> The <command>dh</command> command is a wrapper
2461 script which runs appropriate sequences of <command>dh_*</command> programs
2462 depending on its argument. <footnote><para> You can verify actual sequences of
2463 <command>dh_*</command> programs invoked for a given
2464 <literal><replaceable>target</replaceable></literal> as <literal>dh --no-act
2465 <replaceable>target</replaceable></literal> or <literal>debian/rules --
2466 '--no-act <replaceable>target</replaceable>'</literal> without really running
2467 them. </para> </footnote>
2468 </para>
2469 <itemizedlist>
2470 <listitem>
2471 <para>
2472 <literal>debian/rules clean</literal> runs <literal>dh clean</literal>; which
2473 in turn runs the following:
2474 </para>
2475 <screen>
2476 dh_testdir
2477 dh_auto_clean
2478 dh_clean
2479 </screen>
2480 </listitem>
2481 <listitem>
2482 <para>
2483 <literal>debian/rules build</literal> runs <literal>dh build</literal>; which
2484 in turn runs the following:
2485 </para>
2486 <screen>
2487 dh_testdir
2488 dh_auto_configure
2489 dh_auto_build
2490 dh_auto_test
2491 </screen>
2492 </listitem>
2493 <listitem>
2494 <para>
2495 <literal>fakeroot debian/rules binary</literal> runs <literal>fakeroot dh
2496 binary</literal>; which in turn runs the following<footnote><para> This assumes
2497 that the <systemitem role="package">python-support</systemitem> package is
2498 installed on the system. </para> </footnote>:
2499 </para>
2500 <screen>
2501 dh_testroot
2502 dh_prep
2503 dh_installdirs
2504 dh_auto_install
2505 dh_install
2506 dh_installdocs
2507 dh_installchangelogs
2508 dh_installexamples
2509 dh_installman
2510 dh_installcatalogs
2511 dh_installcron
2512 dh_installdebconf
2513 dh_installemacsen
2514 dh_installifupdown
2515 dh_installinfo
2516 dh_pysupport
2517 dh_installinit
2518 dh_installmenu
2519 dh_installmime
2520 dh_installmodules
2521 dh_installlogcheck
2522 dh_installlogrotate
2523 dh_installpam
2524 dh_installppp
2525 dh_installudev
2526 dh_installwm
2527 dh_installxfonts
2528 dh_bugfiles
2529 dh_lintian
2530 dh_gconf
2531 dh_icons
2532 dh_perl
2533 dh_usrlocal
2534 dh_link
2535 dh_compress
2536 dh_fixperms
2537 dh_strip
2538 dh_makeshlibs
2539 dh_shlibdeps
2540 dh_installdeb
2541 dh_gencontrol
2542 dh_md5sums
2543 dh_builddeb
2544 </screen>
2545 </listitem>
2546 <listitem>
2547 <para>
2548 <literal>fakeroot debian/rules binary-arch</literal> runs <literal>fakeroot dh
2549 binary-arch</literal>; which in turn runs the same sequence as
2550 <literal>fakeroot dh binary</literal> but with the <literal>-a</literal> option
2551 appended for each command.
2552 </para>
2553 </listitem>
2554 <listitem>
2555 <para>
2556 <literal>fakeroot debian/rules binary-indep</literal> runs <literal>fakeroot dh
2557 binary-indep</literal>; which in turn runs almost the same sequence as
2558 <literal>fakeroot dh binary</literal> but excluding
2559 <command>dh_strip</command>, <command>dh_makeshlibs</command>, and
2560 <command>dh_shlibdeps</command> with the <literal>-i</literal> option appended
2561 for each remaining command.
2562 </para>
2563 </listitem>
2564 </itemizedlist>
2565 <para>
2566 The function of <command>dh_*</command> commands are almost self-evident from
2567 their names. <footnote><para> For complete information on what do all these
2568 <command>dh_*</command> scripts exactly do, and what their other options are,
2569 please read their respective manual pages and the <systemitem role="package">debhelper</systemitem> documentation. </para> </footnote> There
2570 are few notable ones worth making (over)simplified explanation here assuming
2571 typical build environment based on <filename>Makefile</filename>.
2572 <footnote><para> These commands support other build environments such as
2573 <filename>setup.py</filename> which can be listed by executing
2574 <literal>dh_auto_build --list</literal> in a package source directory. </para>
2575 </footnote>
2576 </para>
2577 <itemizedlist>
2578 <listitem>
2579 <para>
2580 <command>dh_auto_clean</command> usually executes the following if
2581 <filename>Makefile</filename> exists with the <literal>distclean</literal>
2582 target. <footnote><para> It actually looks for the first available target of
2583 <literal>distclean</literal>, <literal>realclean</literal> or
2584 <literal>clean</literal> in <filename>Makefile</filename> and execute it.
2585 </para> </footnote>
2586 </para>
2587 <screen>
2588 make distclean
2589 </screen>
2590 </listitem>
2591 <listitem>
2592 <para>
2593 <command>dh_auto_configure</command> usually executes the following if
2594 <filename>./configure</filename> exists (arguments abbreviated for
2595 readability).
2596 </para>
2597 <screen>
2598 ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var ...
2599 </screen>
2600 </listitem>
2601 <listitem>
2602 <para>
2603 <command>dh_auto_build</command> usually executes the following to execute the
2604 first target of <filename>Makefile</filename> if it exists.
2605 </para>
2606 <screen>
2607 make
2608 </screen>
2609 </listitem>
2610 <listitem>
2611 <para>
2612 <command>dh_auto_test</command> usually executes the following if
2613 <filename>Makefile</filename> exists with the <literal>test</literal> target.
2614 <footnote><para> It actually looks for the first available target of
2615 <literal>test</literal> or <literal>check</literal> in
2616 <filename>Makefile</filename> and execute it. </para> </footnote>
2617 </para>
2618 <screen>
2619 make test
2620 </screen>
2621 </listitem>
2622 <listitem>
2623 <para>
2624 <command>dh_auto_install</command> usually executes the following if
2625 <filename>Makefile</filename> exists with the <literal>install</literal> target
2626 (line folded for readability).
2627 </para>
2628 <screen>
2629 make install \
2630 DESTDIR=<replaceable>/path/to</replaceable>/<replaceable>package</replaceable>_<replaceable>version</replaceable>-<replaceable>revision</replaceable>/debian/<replaceable>package</replaceable>
2631 </screen>
2632 </listitem>
2633 </itemizedlist>
2634 <para>
2635 Targets which require the <command>fakeroot</command> command contain
2636 <command>dh_testroot</command>. If you are not pretending to be root using
2637 this command, it exits with an error.
2638 </para>
2639 <para>
2640 The important part to know about the <filename>rules</filename> file created by
2641 <command>dh_make</command>, is that it is just a suggestion. It will work for
2642 most packages but for more complicated ones, don't be afraid to customize it to
2643 fit your needs. Only things that you must not change are the names of the
2644 rules, because all the tools use these names, as mandated by the Debian Policy.
2645 </para>
2646 <para>
2647 Although <literal>install</literal> is not required target, it is supported.
2648 <literal>fakeroot dh install</literal> behaves like <literal>fakeroot dh
2649 binary</literal> but stops after <command>dh_fixperms</command>.
2650 </para>
2651 </section>
2652 <section id="customrules"><title>Customization of <filename>rules</filename> file</title>
2653 <para>
2654 There are many ways to customize the <filename>rules</filename> file created
2655 with the new <command>dh</command> command.
2656 </para>
2657 <para>
2658 The <literal>dh $@</literal> command can be customized as follows.
2659 <footnote><para> If a package installs the
2660 <filename>/usr/share/perl5/Debian/Debhelper/Sequence/<replaceable>custom_name</replaceable>.pm</filename>
2661 file, you should activate its customization function by <literal>dh --with
2662 <replaceable>custom-name</replaceable> $@</literal>. </para> </footnote>
2663 </para>
2664 <itemizedlist>
2665 <listitem>
2666 <para>
2667 Add support of the <command>dh_pysupport</command> command. (The best choice
2668 for Python.) <footnote><para> Use of the <command>dh_pysupport</command>
2669 command is preferred over use of the <command>dh_pycentral</command> command.
2670 Do not use the <command>dh_python</command> command. </para> </footnote>
2671 </para>
2672 <itemizedlist>
2673 <listitem>
2674 <para>
2675 Install the <systemitem role="package">python-support</systemitem> package in
2676 <literal>Build-Depends</literal>.
2677 </para>
2678 </listitem>
2679 <listitem>
2680 <para>
2681 Use <literal>dh $@</literal> as usual. (This is enabled by default)
2682 </para>
2683 </listitem>
2684 <listitem>
2685 <para>
2686 This handles Python modules using the <systemitem role="package">python-support</systemitem> framework.
2687 </para>
2688 </listitem>
2689 </itemizedlist>
2690 </listitem>
2691 <listitem>
2692 <para>
2693 Add support of the <command>dh_pycentral</command> command.
2694 </para>
2695 <itemizedlist>
2696 <listitem>
2697 <para>
2698 Install the <systemitem role="package">python-central</systemitem> package in
2699 <literal>Build-Depends</literal>.
2700 </para>
2701 </listitem>
2702 <listitem>
2703 <para>
2704 Use <literal>dh --with python-central $@</literal> instead.
2705 </para>
2706 </listitem>
2707 <listitem>
2708 <para>
2709 This also deactivates the <command>dh_pysupport</command> command.
2710 </para>
2711 </listitem>
2712 <listitem>
2713 <para>
2714 This handles Python modules using the <systemitem role="package">python-central</systemitem> framework.
2715 </para>
2716 </listitem>
2717 </itemizedlist>
2718 </listitem>
2719 <listitem>
2720 <para>
2721 Add support of the <command>dh_installtex</command> command.
2722 </para>
2723 <itemizedlist>
2724 <listitem>
2725 <para>
2726 Install the <systemitem role="package">tex-common</systemitem> package in
2727 <literal>Build-Depends</literal>.
2728 </para>
2729 </listitem>
2730 <listitem>
2731 <para>
2732 Use <literal>dh --with tex $@</literal> instead.
2733 </para>
2734 </listitem>
2735 <listitem>
2736 <para>
2737 This registers Type 1 fonts, hyphenation patterns, or formats with TeX.
2738 </para>
2739 </listitem>
2740 </itemizedlist>
2741 </listitem>
2742 <listitem>
2743 <para>
2744 Add support of the <command>dh_quilt_patch</command> and
2745 <command>dh_quilt_unpatch</command> commands.
2746 </para>
2747 <itemizedlist>
2748 <listitem>
2749 <para>
2750 Install the <systemitem role="package">quilt</systemitem> package in
2751 <literal>Build-Depends</literal>.
2752 </para>
2753 </listitem>
2754 <listitem>
2755 <para>
2756 Use <literal>dh --with quilt $@</literal> instead.
2757 </para>
2758 </listitem>
2759 <listitem>
2760 <para>
2761 This applies and un-applies patches to the upstream source from files in the
2762 <filename>debian/patches</filename> directory for the <literal>1.0</literal>
2763 source package.
2764 </para>
2765 </listitem>
2766 <listitem>
2767 <para>
2768 This is not needed if you use the new <literal>3.0 (quilt)</literal> source
2769 package.
2770 </para>
2771 </listitem>
2772 </itemizedlist>
2773 </listitem>
2774 <listitem>
2775 <para>
2776 Add support of the <command>dh_dkms</command> command.
2777 </para>
2778 <itemizedlist>
2779 <listitem>
2780 <para>
2781 Install the <systemitem role="package">dkms</systemitem> package in
2782 <literal>Build-Depends</literal>.
2783 </para>
2784 </listitem>
2785 <listitem>
2786 <para>
2787 Use <literal>dh --with dkms $@</literal> instead.
2788 </para>
2789 </listitem>
2790 <listitem>
2791 <para>
2792 This correctly handles DKMS usage by the kernel module package.
2793 </para>
2794 </listitem>
2795 </itemizedlist>
2796 </listitem>
2797 <listitem>
2798 <para>
2799 Add support of the <command>dh_autotools-dev_updateconfig</command> and
2800 <command>dh_autotools-dev_restoreconfig</command> commands.
2801 </para>
2802 <itemizedlist>
2803 <listitem>
2804 <para>
2805 Install the <systemitem role="package">autotools-dev</systemitem> package in
2806 <literal>Build-Depends</literal>.
2807 </para>
2808 </listitem>
2809 <listitem>
2810 <para>
2811 Use <literal>dh --with autotools-dev $@</literal> instead.
2812 </para>
2813 </listitem>
2814 <listitem>
2815 <para>
2816 This updates and restores <filename>config.sub</filename> and
2817 <filename>config.guess</filename>.
2818 </para>
2819 </listitem>
2820 </itemizedlist>
2821 </listitem>
2822 <listitem>
2823 <para>
2824 Add support of the <command>dh_autoreconf</command> and
2825 <command>dh_autoreconf_clean</command> commands.
2826 </para>
2827 <itemizedlist>
2828 <listitem>
2829 <para>
2830 Install the <systemitem role="package">dh-autoreconf</systemitem> package in
2831 <literal>Build-Depends</literal>.
2832 </para>
2833 </listitem>
2834 <listitem>
2835 <para>
2836 Use <literal>dh --with autoreconf $@</literal> instead.
2837 </para>
2838 </listitem>
2839 <listitem>
2840 <para>
2841 This updates the GNU Build System files and restores them after the build.
2842 </para>
2843 </listitem>
2844 </itemizedlist>
2845 </listitem>
2846 <listitem>
2847 <para>
2848 Add support to the <command>bash</command> completion feature.
2849 </para>
2850 <itemizedlist>
2851 <listitem>
2852 <para>
2853 Install the <systemitem role="package">bash-completion</systemitem> package in
2854 <literal>Build-Depends</literal>.
2855 </para>
2856 </listitem>
2857 <listitem>
2858 <para>
2859 Use <literal>dh --with bash-completion $@</literal> instead.
2860 </para>
2861 </listitem>
2862 <listitem>
2863 <para>
2864 This installs <command>bash</command> completions using configuration file at
2865 <filename>debian/<replaceable>package</replaceable>.bash-completion</filename>.
2866 </para>
2867 </listitem>
2868 </itemizedlist>
2869 </listitem>
2870 </itemizedlist>
2871 <para>
2872 Many <command>dh_*</command> commands invoked by the new <command>dh</command>
2873 command can be customized by the corresponding configuration files in the
2874 <filename>debian</filename> directory. See <xref linkend="dother"/> and the
2875 manpage of each command for the customization of such features.
2876 </para>
2877 <para>
2878 Some <command>dh_*</command> commands invoked by the new <command>dh</command>
2879 command may require you to run it with some arguments or to run additional
2880 commands with them or to skip them. For such cases, you create an
2881 <literal>override_dh_<replaceable>foo</replaceable></literal> target with its
2882 rule in the <filename>rules</filename> file only for the
2883 <command>dh_<replaceable>foo</replaceable></command> command you want to
2884 change. It basically say <emphasis>run me instead</emphasis>.
2885 <footnote><para> Under <literal>lenny</literal>, if you wanted to change the
2886 behavior of a <command>dh_*</command> script you found the relevant line in the
2887 <filename>rules</filename> file and adjusted it. </para> </footnote>
2888 </para>
2889 <para>
2890 Please note that the <command>dh_auto_*</command> commands tend to do more than
2891 what has been discussed as (over)simplified explanation to take care all the
2892 corner cases. Use of simplified equivalent command instead of these in
2893 <literal>override_dh_*</literal> targets except the
2894 <literal>override_dh_auto_clean</literal> target is a bad idea since it may
2895 kill such <systemitem role="package">debhelper</systemitem>'s smart features.
2896 </para>
2897 <para>
2898 If you want to store the system configuration data in the
2899 <filename>/etc/gentoo</filename> directory instead of the usual
2900 <filename>/etc</filename> directory for the recent
2901 <systemitem role="package">gentoo</systemitem> package using Autotools, you can override the default
2902 <literal>--sysconfig=/etc</literal> argument given by the
2903 <command>dh_auto_configure</command> command to the
2904 <command>./configure</command> command by the following.
2905 </para>
2906 <screen>
2907 override_dh_auto_configure:
2908 dh_auto_configure -- --sysconfig=/etc/gentoo
2909 </screen>
2910 <para>
2911 The arguments given after <literal>--</literal> are appended to the default
2912 arguments of the auto-executed program to override them. Using the
2913 <command>dh_auto_configure</command> command is better than the
2914 <command>./configure</command> command here since it will only override the
2915 <literal>--sysconfig</literal> argument and keeps well intended other arguments
2916 to the <command>./configure</command> command.
2917 </para>
2918 <para>
2919 If <filename>Makefile</filename> of a source for <systemitem role="package">gentoo</systemitem> requires you to specify
2920 <literal>build</literal> as its target to build it <footnote><para>
2921 <command>dh_auto_build</command> without any arguments will execute the first
2922 target in the <filename>Makefile</filename> file. </para> </footnote>, you
2923 create an <literal>override_dh_auto_build</literal> target to enable it.
2924 </para>
2925 <screen>
2926 override_dh_auto_build:
2927 dh_auto_build -- build
2928 </screen>
2929 <para>
2930 This ensures to run $(MAKE) with all the default arguments given by the
2931 <command>dh_auto_build</command> command and <literal>build</literal> argument.
2932 </para>
2933 <para>
2934 If <filename>Makefile</filename> of a source for <systemitem role="package">gentoo</systemitem> requires you to specify the
2935 <literal>packageclean</literal> target to clean it for Debian package instead
2936 of the <literal>distclean</literal> or <literal>clean</literal> targets in the
2937 <filename>Makefile</filename> file, you create an
2938 <literal>override_dh_auto_clean</literal> target to enable it.
2939 </para>
2940 <screen>
2941 override_dh_auto_clean:
2942 $(MAKE) packageclean
2943 </screen>
2944 <para>
2945 If <filename>Makefile</filename> of a source for <systemitem role="package">gentoo</systemitem> contains <literal>test</literal> target
2946 which you do not want to run for the Debian package building process, you can
2947 use empty <literal>override_dh_auto_test</literal> target to skip it.
2948 </para>
2949 <screen>
2950 override_dh_auto_test:
2951 </screen>
2952 <para>
2953 If <systemitem role="package">gentoo</systemitem> has an unusual upstream
2954 changelog file called <filename>FIXES</filename>,
2955 <command>dh_installchangelogs</command> will not install that file by default.
2956 The <command>dh_installchangelogs</command> command requires
2957 <filename>FIXES</filename> as its argument to install it. <footnote><para> The
2958 <filename>debian/changelog</filename> and <filename>debian/NEWS</filename>
2959 files are always automatically installed. The upstream changelog is searched
2960 by converting filenames to the lower case and matching them with the
2961 <filename>changelog</filename>, <filename>changes</filename>,
2962 <filename>changelog.txt</filename>, and <filename>changes.txt</filename>.
2963 </para> </footnote>
2964 </para>
2965 <screen>
2966 override_dh_installchangelogs:
2967 dh_installchangelogs FIXES
2968 </screen>
2969 <para>
2970 When you use the new <command>dh</command> command, use of explicit targets
2971 such as the ones listed in <xref linkend="targets"/> except
2972 <literal>get-orig-source</literal> target may make it difficult to understand
2973 their exact effects. Please limit explicit targets to
2974 <literal>override_dh_*</literal> targets and completely independent ones, if
2975 possible.
2976 </para>
2977 </section>
2978 </section>
2979 </chapter>
2980 <chapter id="dother"><title>Other files under the <filename>debian</filename> directory</title>
2981 <para>
2982 To control most of what <systemitem role="package">debhelper</systemitem> does
2983 while building the package, you put optional configuration files under the
2984 <filename>debian</filename> directory. This chapter will provide an overview of
2985 what each of these does and its format. Please read the <ulink url="&debian-policy;">Debian Policy
2986 Manual</ulink> and <ulink url="&developers-reference;">Debian Developer's
2987 Reference</ulink> for guidelines for packaging.
2988 </para>
2989 <para>
2990 The <command>dh_make</command> command will create some template configuration
2991 files under the <filename>debian</filename> directory. Most of them come with
2992 filenames suffixed by <literal>.ex</literal>. Some of them come with filenames
2993 prefixed by the binary package name such as
2994 <literal><replaceable>package</replaceable></literal>. Take a look at all of
2995 them.
2996 <footnote><para>
2997 In this chapter, files in the <filename>debian</filename> directory are
2998 referred to without the preceding <filename>debian/</filename> for simplicity whenever
2999 they are obvious.
3000 </para></footnote>
3001 </para>
3002 <para>
3003 Some template configuration files for <systemitem role="package">debhelper</systemitem>
3004 may not be created by the <command>dh_make</command> command. In
3005 such cases, you need to create them with an editor.
3006 </para>
3007 <para>
3008 If you wish or need to activate any of these, please do the following:
3009 </para>
3010 <itemizedlist>
3011 <listitem>
3012 <para>
3013 rename template files by removing the <literal>.ex</literal> or
3014 <literal>.EX</literal> suffix if they have one;
3015 </para>
3016 </listitem>
3017 <listitem>
3018 <para>
3019 rename the configuration files to use the actual binary package
3020 name in place of <literal><replaceable>package</replaceable></literal>;
3021 </para>
3022 </listitem>
3023 <listitem>
3024 <para>
3025 modify template file contents to suit your needs;
3026 </para>
3027 </listitem>
3028 <listitem>
3029 <para>
3030 remove template files which you do not need;
3031 </para>
3032 </listitem>
3033 <listitem>
3034 <para>
3035 modify the <filename>control</filename> file (see <xref linkend="control"/>),
3036 if necessary;
3037 </para>
3038 </listitem>
3039 <listitem>
3040 <para>
3041 modify the <filename>rules</filename> file (see <xref linkend="rules"/>), if
3042 necessary.
3043 </para>
3044 </listitem>
3045 </itemizedlist>
3046 <para>
3047 Any <systemitem role="package">debhelper</systemitem> configuration files
3048 without a <filename><replaceable>package</replaceable></filename> prefix, such as
3049 <filename>install</filename>, apply to the first binary package. When there are
3050 many binary packages, their configurations can be specified by prefixing their
3051 name to their configuration filenames such as
3052 <filename><replaceable>package-1</replaceable>.install</filename>,
3053 <filename><replaceable>package-2</replaceable>.install</filename>, etc.
3054 </para>
3055 <section id="readme"><title><filename>README.Debian</filename></title>
3056 <para>
3057 Any extra details or discrepancies between the original package and your Debian
3058 version should be documented here.
3059 </para>
3060 <para>
3061 <command>dh_make</command> created a default one; this is what it looks like:
3062 </para>
3063 <screen>
3064 gentoo for Debian
3065 -----------------
3066 &lt;possible notes regarding this package - if none, delete this file&gt;
3067 -- Josip Rodin &lt;joy-mg@debian.org&gt;, Wed, 11 Nov 1998 21:02:14 +0100
3068 </screen>
3069 <para>
3070 If you have nothing to be documented, remove this file. See <citerefentry>
3071 <refentrytitle>dh_installdocs</refentrytitle> <manvolnum>1</manvolnum>
3072 </citerefentry>.
3073 </para>
3074 </section>
3075 <section id="compat"><title><filename>compat</filename></title>
3076 <para>
3077 The <filename>compat</filename> file defines the <systemitem role="package">debhelper</systemitem> compatibility level. Currently, you
3078 should set it to the <systemitem role="package">debhelper</systemitem> v7 as
3079 follows:
3080 </para>
3081 <screen>
3082 $ echo 7 &gt; debian/compat
3083 </screen>
3084 </section>
3085 <section id="conffiles"><title><filename>conffiles</filename></title>
3086 <para>
3087 One of the most annoying things about software is when you spend a great deal
3088 of time and effort customizing a program, only to have an upgrade stomp all
3089 over your changes. Debian solves this problem by marking such configuration files as conffiles.
3090 <footnote><para>See <citerefentry> <refentrytitle>dpkg</refentrytitle>
3091 <manvolnum>1</manvolnum> </citerefentry> and
3092 <ulink url="&policy-conffiles;">Debian Policy Manual "D.2.5 Conffiles"</ulink>.
3093 </para></footnote>
3094 When you upgrade a package, you'll be asked whether you want to keep
3095 your old configuration files or not.
3096 </para>
3097 <para>
3098 <citerefentry><refentrytitle>dh_installdeb</refentrytitle> <manvolnum>1</manvolnum>
3099 </citerefentry> <emphasis>automatically</emphasis> flags any files under
3100 the <filename>/etc</filename> directory as conffiles, so if your program only
3101 has conffiles there you do not need to specify them in this file. For most
3102 package types, the only place conffiles should ever be is under
3103 <filename>/etc</filename>, and so this file doesn't need to exist.
3104 </para>
3105 <para>
3106 If your program uses configuration files but also rewrites them on its own,
3107 it's best not to make them conffiles because <command>dpkg</command> will
3108 then prompt users to verify the changes all the time.
3109 </para>
3110 <para>
3111 If the program you're packaging requires every user to modify the configuration
3112 files in the <filename>/etc</filename> directory, there are two popular ways to
3113 arrange for them to not be conffiles, keeping <command>dpkg</command> quiet.
3114 </para>
3115 <itemizedlist>
3116 <listitem>
3117 <para>
3118 Create a symlink under the <filename>/etc</filename> directory pointing to a
3119 file under the <filename>/var</filename> directory generated by the
3120 maintainer scripts.
3121 </para>
3122 </listitem>
3123 <listitem>
3124 <para>
3125 Create a file generated by the maintainer scripts under the <filename>/etc</filename> directory.
3126 </para>
3127 </listitem>
3128 </itemizedlist>
3129 <para>
3130 For information on maintainer scripts, see <xref linkend="maintscripts"/>.
3131 </para>
3132 </section>
3133 <section id="crond"><title><filename><replaceable>package</replaceable>.cron.*</filename></title>
3134 <para>
3135 If your package requires regularly scheduled tasks to operate properly, you can
3136 use these files to set that up. You can set up regular tasks that either happen
3137 hourly, daily, weekly, or monthly, or alternatively happen at any other time that
3138 you wish. The filenames are:
3139 </para>
3140 <itemizedlist>
3141 <listitem>
3142 <para>
3143 <filename><replaceable>package</replaceable>.cron.hourly</filename> - Installed as
3144 <filename>/etc/cron.hourly/<replaceable>package</replaceable></filename>; run
3145 once an hour.
3146 </para>
3147 </listitem>
3148 <listitem>
3149 <para>
3150 <filename><replaceable>package</replaceable>.cron.daily</filename> - Installed as
3151 <filename>/etc/cron.daily/<replaceable>package</replaceable></filename>; run
3152 once a day.
3153 </para>
3154 </listitem>
3155 <listitem>
3156 <para>
3157 <filename><replaceable>package</replaceable>.cron.weekly</filename> - Installed as
3158 <filename>/etc/cron.weekly/<replaceable>package</replaceable></filename>; run
3159 once a week.
3160 </para>
3161 </listitem>
3162 <listitem>
3163 <para>
3164 <filename><replaceable>package</replaceable>.cron.monthly</filename> - Installed as
3165 <filename>/etc/cron.monthly/<replaceable>package</replaceable></filename>: run
3166 once a month.
3167 </para>
3168 </listitem>
3169 <listitem>
3170 <para>
3171 <filename><replaceable>package</replaceable>.cron.d</filename> - Installed as
3172 <filename>/etc/cron.d/<replaceable>package</replaceable></filename>: for any
3173 other time.
3174 </para>
3175 </listitem>
3176 </itemizedlist>
3177 <para>
3178 Most of these files are shell scripts, with the exception of
3179 <filename><replaceable>package</replaceable>.cron.d</filename> which follows
3180 the format of <citerefentry> <refentrytitle>crontab</refentrytitle>
3181 <manvolnum>5</manvolnum> </citerefentry>.
3182 </para>
3183 <para>
3184 No explicit <filename>cron.*</filename> file is needed to set up log rotation;
3185 for that, see
3186 <citerefentry><refentrytitle>dh_installlogrotate</refentrytitle>
3187 <manvolnum>1</manvolnum></citerefentry> and
3188 <citerefentry><refentrytitle>logrotate</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
3189 </para>
3190 </section>
3191 <section id="dirs"><title><filename>dirs</filename></title>
3192 <para>
3193 This file specifies any directories which we need but which are not created by the normal installation
3194 procedure (<literal>make install DESTDIR=...</literal> invoked by
3195 <literal>dh_auto_install</literal>). This generally
3196 means there is a problem with the <filename>Makefile</filename>.
3197 </para>
3198 <para>
3199 Files listed in an <filename>install</filename> file don't need their
3200 directories created first. See <xref linkend="install"/>.
3201 </para>
3202 <para>
3203 It is best to try to run the installation first and only use this if you
3204 run into trouble. There is no preceding slash on the directory names listed in
3205 the <filename>dirs</filename> file.
3206 </para>
3207 </section>
3208 <section id="doc-base"><title><filename><replaceable>package</replaceable>.doc-base</filename></title>
3209 <para>
3210 If your package has documentation other than manual and info pages, you
3211 should use the <systemitem role="package">doc-base</systemitem> file to
3212 register it, so the user can find it with e.g. <citerefentry>
3213 <refentrytitle>dhelp</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>,
3214 <citerefentry> <refentrytitle>dwww</refentrytitle> <manvolnum>1</manvolnum>
3215 </citerefentry>, or <citerefentry> <refentrytitle>doccentral</refentrytitle>
3216 <manvolnum>1</manvolnum> </citerefentry>.
3217 </para>
3218 <para>
3219 This usually includes HTML, PS and PDF files, shipped in
3220 <filename>/usr/share/doc/<replaceable>packagename</replaceable>/</filename>.
3221 </para>
3222 <para>
3223 This is what <systemitem role="package">gentoo</systemitem>'s doc-base file
3224 <filename>gentoo.doc-base</filename> looks like:
3225 </para>
3226 <screen>
3227 Document: gentoo
3228 Title: Gentoo Manual
3229 Author: Emil Brink
3230 Abstract: This manual describes what Gentoo is, and how it can be used.
3231 Section: File Management
3232 Format: HTML
3233 Index: /usr/share/doc/gentoo/html/index.html
3234 Files: /usr/share/doc/gentoo/html/*.html
3235 </screen>
3236 <para>
3237 For information on the file format, see <citerefentry>
3238 <refentrytitle>install-docs</refentrytitle> <manvolnum>8</manvolnum>
3239 </citerefentry> and the <systemitem role="package">doc-base</systemitem>
3240 manual, in <ulink url="&doc-base;">Debian doc-base Manual</ulink>.
3241 </para>
3242 <para>
3243 For more details on installing additional documentation, look in <xref linkend="destdir"/>.
3244 </para>
3245 </section>
3246 <section id="docs"><title><filename>docs</filename></title>
3247 <para>
3248 This file specifies the file names of documentation files we can have
3249 <citerefentry> <refentrytitle>dh_installdocs</refentrytitle>
3250 <manvolnum>1</manvolnum> </citerefentry> install into the temporary directory
3251 for us.
3252 </para>
3253 <para>
3254 By default, it will include all existing files in the top-level source
3255 directory that are called <filename>BUGS</filename>,
3256 <filename>README*</filename>, <filename>TODO</filename> etc.
3257 </para>
3258 <para>
3259 For <systemitem role="package">gentoo</systemitem>, some other files
3260 are also included:
3261 </para>
3262 <screen>
3263 BUGS
3264 CONFIG-CHANGES
3265 CREDITS
3266 NEWS
3267 README
3268 README.gtkrc
3269 TODO
3270 </screen>
3271 </section>
3272 <section id="emacsen"><title><filename>emacsen-*</filename></title>
3273 <para>
3274 If your package supplies Emacs files that can be bytecompiled at package
3275 installation time, you can use these files to set it up.
3276 </para>
3277 <para>
3278 They are installed into the temporary directory by <citerefentry>
3279 <refentrytitle>dh_installemacsen</refentrytitle> <manvolnum>1</manvolnum>
3280 </citerefentry>.
3281 </para>
3282 <para>
3283 If you don't need these, remove them.
3284 </para>
3285 </section>
3286 <section id="examples"><title><filename><replaceable>package</replaceable>.examples</filename></title>
3287 <para>
3288 The <citerefentry> <refentrytitle>dh_installexamples</refentrytitle>
3289 <manvolnum>1</manvolnum> </citerefentry> command installs files and directories
3290 listed in this file as example files.
3291 </para>
3292 </section>
3293 <section id="initd"><title><filename><replaceable>package</replaceable>.init</filename> and <filename><replaceable>package</replaceable>.default</filename></title>
3294 <para>
3295 If your package is a daemon that needs to be run at system start-up, you've
3296 obviously disregarded my initial recommendation, haven't you? :-)
3297 </para>
3298 <para>
3299 The <filename><replaceable>package</replaceable>.init</filename> file is
3300 installed as the
3301 <filename>/etc/init.d/<replaceable>package</replaceable></filename> script
3302 which starts and stops the daemon.
3303 Its fairly generic skeleton template is provided by the
3304 <command>dh_make</command> command as <filename>init.d.ex</filename>. You'll
3305 likely have to rename and edit it, a lot, while making sure to provide
3306 <ulink url="&lsb;">Linux Standard Base</ulink> (LSB) compliant headers. It
3307 gets installed into the temporary directory by <citerefentry>
3308 <refentrytitle>dh_installinit</refentrytitle> <manvolnum>1</manvolnum>
3309 </citerefentry>.
3310 </para>
3311 <para>
3312 The <filename><replaceable>package</replaceable>.default</filename> file will
3313 be installed as
3314 <filename>/etc/default/<replaceable>package</replaceable></filename>. This
3315 file sets defaults that are sourced by the init script. This
3316 <filename><replaceable>package</replaceable>.default</filename> file
3317 is most often used to disable running a daemon, or to set some default flags or
3318 timeouts. If your init script has certain configurable
3319 features, you can set them in the <filename><replaceable>package</replaceable>.default</filename> file,
3320 instead of in the init script itself.
3321 </para>
3322 <para>
3323 If your upstream program provides a file for the init script, you can either use it or not. If you
3324 don't use their init script then create a new one in
3325 <filename><replaceable>package</replaceable>.init</filename>. However
3326 if the upstream init script looks fine and installs in the right place you
3327 still need to set up the <filename>rc*</filename> symlinks. To do this you will
3328 need to override <command>dh_installinit</command> in the
3329 <filename>rules</filename> file with the following lines:
3330 </para>
3331 <screen>
3332 override_dh_installinit:
3333 dh_installinit --onlyscripts
3334 </screen>
3335 <para>
3336 If you don't need this, remove the files.
3337 </para>
3338 </section>
3339 <section id="install"><title><filename>install</filename></title>
3340 <para>
3341 If there are files that need to be installed into your package but your
3342 standard <literal>make install</literal> won't do it, put the filenames and
3343 destinations into this <filename>install</filename> file. They are installed
3344 by <citerefentry> <refentrytitle>dh_install</refentrytitle>
3345 <manvolnum>1</manvolnum> </citerefentry>.<footnote><para> This replaces the
3346 deprecated <citerefentry> <refentrytitle>dh_movefiles</refentrytitle>
3347 <manvolnum>1</manvolnum> </citerefentry> command which is configured by the
3348 <filename>files</filename> file. </para> </footnote> You should first check
3349 there is not a more specific tool to use. For example, documents should be in
3350 the <filename>docs</filename> file and not in this one.
3351 </para>
3352 <para>
3353 This <filename>install</filename> file has one line per file installed, with
3354 the name of the file (relative to the top build directory) then a space then
3355 the installation directory (relative to the install directory). One example of where this is used is if a binary <filename>src/<replaceable>bar</replaceable></filename> is left uninstalled; the
3356 <filename>install</filename> file might look like:
3357 </para>
3358 <screen>
3359 src/<replaceable>bar</replaceable> usr/bin
3360 </screen>
3361 <para>
3362 This means when this package is installed, there will be a binary executable
3363 <filename>/usr/bin/<replaceable>bar</replaceable></filename>.
3364 </para>
3365 <para>
3366 Alternatively, this <filename>install</filename> can have the name of the file
3367 only without the installation directory when the relative directory path does
3368 not change. This format is usually used for a large package that splits the
3369 output of its build into multiple binary packages using
3370 <filename><replaceable>package-1</replaceable>.install</filename>,
3371 <filename><replaceable>package-2</replaceable>.install</filename>, etc.
3372 </para>
3373 <para>
3374 The <command>dh_install</command> command will fall back to looking in
3375 <filename>debian/tmp</filename> for files, if it doesn't find them in the
3376 current directory (or wherever you've told it to look using
3377 <literal>--sourcedir</literal>).
3378 </para>
3379 </section>
3380 <section id="info"><title><filename><replaceable>package</replaceable>.info</filename></title>
3381 <para>
3382 If your package has info pages, you should install them using <citerefentry>
3383 <refentrytitle>dh_installinfo</refentrytitle> <manvolnum>1</manvolnum>
3384 </citerefentry> by listing them in a
3385 <filename><replaceable>package</replaceable>.info</filename> file.
3386 </para>
3387 </section>
3388 <section id="lintian"><title><filename>{<replaceable>package</replaceable>.,source/}lintian-overrides</filename></title>
3389 <para>
3390 If <systemitem role="package">lintian</systemitem> reports an erroneous
3391 diagnostic for a case where Debian policy allows exceptions to some rule, you can
3392 use <filename><replaceable>package</replaceable>.lintian-overrides</filename>
3393 or <filename>source/lintian-overrides</filename> to quieten it. Please read
3394 <ulink url="&lintian-doc;">Lintian User's Manual</ulink> and refrain
3395 from abusing this.
3396 </para>
3397 <para>
3398 <filename><replaceable>package</replaceable>.lintian-overrides</filename> is
3399 for the binary package named <systemitem role="package"><replaceable>package</replaceable></systemitem> and is installed
3400 into
3401 <filename>usr/share/lintian/overrides/<replaceable>package</replaceable></filename>
3402 by the <command>dh_lintian</command> command.
3403 </para>
3404 <para>
3405 <filename>source/lintian-overrides</filename> is for the source package. This
3406 is not installed.
3407 </para>
3408 </section>
3409 <section id="manpage"><title><filename>manpage.*</filename></title>
3410 <para>
3411 Your program(s) should have a manual page. If they don't, you should create
3412 them. The <command>dh_make</command> command creates some template files for
3413 manual pages. These need to be copied and edited for each command missing its
3414 manual page. Please make sure to remove unused templates.
3415 </para>
3416 <section id="manpage1"><title><filename>manpage.1.ex</filename></title>
3417 <para>
3418 Manual pages are normally written in <citerefentry>
3419 <refentrytitle>nroff</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.
3420 The <filename>manpage.1.ex</filename> template is written in
3421 <command>nroff</command>, too. See the <citerefentry>
3422 <refentrytitle>man</refentrytitle> <manvolnum>7</manvolnum> </citerefentry>
3423 manual page for a brief description of how to edit such a file.
3424 </para>
3425 <para>
3426 The final manual page file name should give the name of the program it is
3427 documenting, so we will rename it from <literal>manpage</literal> to
3428 <literal>gentoo</literal>. The file name also includes <literal>.1</literal>
3429 as the first suffix, which means it's a manual page for a user command. Be
3430 sure to verify that this section is indeed the correct one. Here's a short
3431 list of manual page sections:
3432 </para>
3433 <informaltable id="manpage-sections" pgwide="0" frame="topbot" rowsep="1" colsep="1">
3434 <tgroup cols="3">
3435 <colspec colwidth="8*" align="left"/> <colspec colwidth="24*" align="left"/> <colspec colwidth="40*" align="left"/>
3436 <thead>
3437 <row> <entry>Section</entry> <entry>Description</entry> <entry>Notes</entry> </row>
3438 </thead>
3439 <tbody>
3440 <row> <entry>1</entry> <entry>User command</entry> <entry>Executable commands or scripts</entry> </row>
3441 <row> <entry>2</entry> <entry>System calls</entry> <entry>Functions provided by the kernel</entry> </row>
3442 <row> <entry>3</entry> <entry>Library calls</entry> <entry>Functions within system libraries</entry> </row>
3443 <row> <entry>4</entry> <entry>Special files</entry> <entry>Usually found in <filename>/dev</filename></entry> </row>
3444 <row> <entry>5</entry> <entry>File formats</entry> <entry>E.g. <filename>/etc/passwd</filename>'s format</entry> </row>
3445 <row> <entry>6</entry> <entry>Games</entry> <entry>Games or other frivolous programs</entry> </row>
3446 <row> <entry>7</entry> <entry>Macro packages</entry> <entry>Such as <command>man</command> macros</entry> </row>
3447 <row> <entry>8</entry> <entry>System administration</entry> <entry>Programs typically only run by root</entry> </row>
3448 <row> <entry>9</entry> <entry>Kernel routines</entry> <entry>Non-standard calls and internals</entry> </row>
3449 </tbody>
3450 </tgroup>
3451 </informaltable>
3452 <para>
3453 So <systemitem role="package">gentoo</systemitem>'s man page should be called
3454 <filename>gentoo.1</filename>. If there was no <filename>gentoo.1</filename>
3455 man page in the original source, you should create it by renaming the
3456 <filename>manpage.1.ex</filename> template to <filename>gentoo.1</filename> and
3457 editing it using information from the example and from the upstream docs.
3458 </para>
3459 <para>
3460 You can use the <command>help2man</command> command to generate a man page out
3461 of the <literal>--help</literal> and <literal>--version</literal> output of each
3462 program, too. <footnote><para> Note that <command>help2man</command>'s
3463 placeholder man page will claim that more detailed documentation is
3464 available in the info system. If the command is missing an
3465 <command>info</command> page, you
3466 should manually edit the man page created by the
3467 <command>help2man</command> command. </para> </footnote>
3468 </para>
3469 </section>
3470 <section id="manpagesgml"><title><filename>manpage.sgml.ex</filename></title>
3471 <para>
3472 If on the other hand you prefer writing SGML instead of
3473 <command>nroff</command>, you can use the <filename>manpage.sgml.ex</filename>
3474 template. If you do this, you have to:
3475 </para>
3476 <itemizedlist>
3477 <listitem>
3478 <para>
3479 rename the file to something like <filename>gentoo.sgml</filename>.
3480 </para>
3481 </listitem>
3482 <listitem>
3483 <para>
3484 install the <systemitem role="package">docbook-to-man</systemitem> package
3485 </para>
3486 </listitem>
3487 <listitem>
3488 <para>
3489 add <literal>docbook-to-man</literal> to the <literal>Build-Depends</literal>
3490 line in the <filename>control</filename> file
3491 </para>
3492 </listitem>
3493 <listitem>
3494 <para>
3495 add an <literal>override_dh_auto_build</literal> target to your
3496 <filename>rules</filename> file:
3497 </para>
3498 <screen>
3499 override_dh_auto_build:
3500 docbook-to-man debian/gentoo.sgml &gt; debian/gentoo.1
3501 dh_auto_build
3502 </screen>
3503 </listitem>
3504 </itemizedlist>
3505 </section>
3506 <section id="manpagexml"><title><filename>manpage.xml.ex</filename></title>
3507 <para>
3508 If you prefer XML over SGML, you can use the <literal>manpage.xml.ex</literal>
3509 template. If you do this, you have to:
3510 </para>
3511 <itemizedlist>
3512 <listitem>
3513 <para>
3514 rename the source file to something like <literal>gentoo.1.xml</literal>
3515 </para>
3516 </listitem>
3517 <listitem>
3518 <para>
3519 install the <systemitem role="package">docbook-xsl</systemitem> package and an
3520 XSLT processor like <systemitem role="package">xsltproc</systemitem>
3521 (recommended)
3522 </para>
3523 </listitem>
3524 <listitem>
3525 <para>
3526 add the <literal>docbook-xsl</literal>, <literal>docbook-xml</literal>, and
3527 <literal>xsltproc</literal> packages to the <literal>Build-Depends</literal>
3528 line in the <literal>control</literal> file
3529 </para>
3530 </listitem>
3531 <listitem>
3532 <para>
3533 add an <literal>override_dh_auto_build</literal> target to your
3534 <filename>rules</filename> file:
3535 </para>
3536 <screen>
3537 override_dh_auto_build:
3538 xsltproc --nonet \
3539 --param make.year.ranges 1 \
3540 --param make.single.year.ranges 1 \
3541 --param man.charmap.use.subset 0 \
3542 -o debian/ \
3543 http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl\
3544 debian/gentoo.1.xml
3545 dh_auto_build
3546 </screen>
3547 </listitem>
3548 </itemizedlist>
3549 </section>
3550 </section>
3551 <section id="manpages"><title><filename><replaceable>package</replaceable>.manpages</filename> file</title>
3552 <para>
3553 If your package has manual pages, you should install them using <citerefentry>
3554 <refentrytitle>dh_installman</refentrytitle> <manvolnum>1</manvolnum>
3555 </citerefentry> by listing them in a
3556 <filename><replaceable>package</replaceable>.manpages</filename> file.
3557 </para>
3558 <para>
3559 To install <filename>docs/gentoo.1</filename> as a manpage for the <systemitem role="package">gentoo</systemitem> package, create a
3560 <filename>gentoo.manpages</filename> file as follows.
3561 </para>
3562 <screen>
3563 docs/gentoo.1
3564 </screen>
3565 </section>
3566 <section id="menu"><title><filename>menu</filename></title>
3567 <para>
3568 X Window System users usually have a window manager with a menu that can be
3569 customized to launch programs. If they have installed the Debian <systemitem role="package">menu</systemitem> package, a set of menus for every program on
3570 the system will be created for them.
3571 </para>
3572 <para>
3573 Here's the default <filename>menu.ex</filename> file that
3574 <command>dh_make</command> created.
3575 </para>
3576 <screen>
3577 ?package(gentoo):needs=X11|text|vc|wm \
3578 section=Applications/see-menu-manual\
3579 title=gentoo command=/usr/bin/gentoo
3580 </screen>
3581 <para>
3582 The first field after the colon character is <literal>needs</literal>, and it
3583 specifies what kind of interface the program needs. Change this to one of the
3584 listed alternatives, e.g. <literal>text</literal> or <literal>X11</literal>.
3585 </para>
3586 <para>
3587 The next is the <literal>section</literal> that the menu and submenu entry
3588 should appear in.
3589 <footnote><para> The current list of sections is in
3590 <ulink url="&menu-structure;">The Debian Menu sub-policy 2.1 "Preferred menu structure"</ulink>.
3591 There was a major reorganization of menu structure for <literal>squeeze</literal>.
3592 </para> </footnote>
3593 </para>
3594 <para>
3595 The <literal>title</literal> field is the name of the program. You can start
3596 this one in uppercase if you like. Just keep it short.
3597 </para>
3598 <para>
3599 Finally, the <literal>command</literal> field is the command that runs the
3600 program.
3601 </para>
3602 <para>
3603 Let's change the file name to <filename>menu</filename> and change the menu
3604 entry to this:
3605 </para>
3606 <screen>
3607 ?package(gentoo): needs=X11 \
3608 section=Applications/Tools \
3609 title=Gentoo command=gentoo
3610 </screen>
3611 <para>
3612 You can also add other fields like <literal>longtitle</literal>,
3613 <literal>icon</literal>, <literal>hints</literal> etc. See <citerefentry>
3614 <refentrytitle>dh_installmenu</refentrytitle> <manvolnum>1</manvolnum>
3615 </citerefentry>, <citerefentry> <refentrytitle>menufile</refentrytitle>
3616 <manvolnum>5</manvolnum> </citerefentry>, <citerefentry>
3617 <refentrytitle>update-menus</refentrytitle> <manvolnum>1</manvolnum>
3618 </citerefentry>, and
3619 <ulink url="&policy-menu;">The Debian Menu sub-policy</ulink> for more
3620 information.
3621 </para>
3622 </section>
3623 <section id="news"><title><filename>NEWS</filename></title>
3624 <para>
3625 The <citerefentry> <refentrytitle>dh_installchangelogs</refentrytitle>
3626 <manvolnum>1</manvolnum> </citerefentry> command installs this.
3627 </para>
3628 </section>
3629 <section id="maintscripts"><title><filename>{pre,post}{inst,rm}</filename></title>
3630 <para>
3631 These <filename>postinst</filename>, <filename>preinst</filename>,
3632 <filename>postrm</filename>, and <filename>prerm</filename> files
3633 <footnote><para> Despite this use of the <command>bash</command>
3634 shorthand expression <filename>{pre,post}{inst,rm}</filename> to indicate these
3635 filenames, you should use pure POSIX syntax for these maintainer scripts for
3636 compatibility with <command>dash</command> as the system shell. </para> </footnote> are
3637 called <emphasis>maintainer scripts</emphasis>. They are scripts which are put
3638 in the control area of the package and run by <command>dpkg</command> when your
3639 package is installed, upgraded, or removed.
3640 </para>
3641 <para>
3642 As a novice maintainer, you should avoid any manual editing of
3643 maintainer scripts because they are problematic. For more
3644 information refer to the <ulink url="&policy-mantainerscripts;">Debian
3645 Policy Manual, 6 "Package maintainer scripts and installation
3646 procedure"</ulink>, and take a look at the example files provided by
3647 <command>dh_make</command>.
3648 </para>
3649 <para>
3650 If you did not listen to me and have created custom maintainer
3651 scripts for a package, you should make sure to test them not only
3652 for <emphasis role="strong">install</emphasis> and
3653 <emphasis role="strong">upgrade</emphasis> but also for
3654 <emphasis role="strong">remove</emphasis> and
3655 <emphasis role="strong">purge</emphasis>.
3656 </para>
3657 <para>
3658 Upgrades to the new version should be silent and non-intrusive (existing users
3659 should not notice the upgrade except by discovering that old bugs have been
3660 fixed and perhaps that there are new features).
3661 </para>
3662 <para>
3663 When the upgrade is necessarily intrusive (eg., config files scattered through
3664 various home directories with totally different structure), you may
3665 consider as the last resort switching the package to a safe fallback state
3666 (e.g., disabling a service) and providing the proper documentation
3667 required by policy (<filename>README.Debian</filename> and
3668 <filename>NEWS.Debian</filename>). Don't bother the user with
3669 <command>debconf</command> notes invoked from these maintainer scripts
3670 for upgrades.
3671 </para>
3672 <para>
3673 The <systemitem role="package">ucf</systemitem> package provides a
3674 <emphasis>conffile-like</emphasis> handling infrastructure to preserve user
3675 changes for files that may not be labeled as <emphasis>conffiles</emphasis> such
3676 as those managed by the maintainer scripts. This should
3677 minimize issues associated with them.
3678 </para>
3679 <para>
3680 These maintainer scripts are among the Debian enhancements that
3681 explain <emphasis role="strong">why people choose Debian</emphasis>. You must
3682 be very careful not to turn them into a source of annoyance.
3683 </para>
3684 </section>
3685 <section id="todo"><title><filename>TODO</filename></title>
3686 <para>
3687 The <citerefentry> <refentrytitle>dh_installdocs</refentrytitle>
3688 <manvolnum>1</manvolnum> </citerefentry> command installs this.
3689 </para>
3690 </section>
3691 <section id="watch"><title><filename>watch</filename></title>
3692 <para>
3693 The <filename>watch</filename> file format is documented in the <citerefentry>
3694 <refentrytitle>uscan</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>
3695 manpage. The <filename>watch</filename> file configures the
3696 <command>uscan</command> program (in the <systemitem role="package">devscripts</systemitem> package) to watch the site where you
3697 originally got the source from. This is also used by the
3698 <ulink url="&dehs;">Debian External Health Status (DEHS)</ulink> service.
3699 </para>
3700 <para>
3701 Here are its contents:
3702 </para>
3703 <screen>
3704 # watch control file for uscan
3705 version=3
3706 &sf-net;/gentoo/gentoo-(.+)\.tar\.gz debian uupdate
3707 </screen>
3708 <para>
3709 Normally with a <filename>watch</filename> file, the URL at
3710 <literal>&sf-net;/gentoo</literal> is downloaded and searched for links of
3711 the form <literal>&lt;a href=...&gt;</literal>. The basename (just the part
3712 after the final <literal>/</literal>) of each linked URL is compared against
3713 the Perl regular expression pattern (see <citerefentry> <refentrytitle>perlre</refentrytitle>
3714 <manvolnum>1</manvolnum> </citerefentry>)
3715 <literal>gentoo-(.+)\.tar\.gz</literal>. Out of the files that match, the one with
3716 the greatest version number is downloaded and the <command>uupdate</command>
3717 program is run to create an updated source tree.
3718 </para>
3719 <para>
3720 Although this is true for other sites, the SourceForge download service at
3721 <ulink url="&sf-net;"/> is an exception. When the
3722 <filename>watch</filename> file has an URL matching the Perl regexp
3723 <literal>^http://sf\.net/</literal>, the <command>uscan</command> program
3724 replaces it with <literal>&qa-do;watch/sf.php/</literal> and
3725 then applies this rule. The URL redirector service at <ulink url="&qa-do;"/> is designed to offer
3726 a stable redirect service to the desired file for any
3727 <filename>watch</filename> pattern of the form
3728 <literal>&sf-net;/<replaceable>project</replaceable>/<replaceable>tar-name</replaceable>-(.+)\.tar\.gz</literal>.
3729 This solves issues related to periodically changing SourceForge URLs.
3730 </para>
3731 </section>
3732 <section id="sourcef"><title><filename>source/format</filename></title>
3733 <para>
3734 In the <filename>debian/source/format</filename> file, there should be a single
3735 line indicating the desired format for the source package (check <citerefentry>
3736 <refentrytitle>dpkg-source</refentrytitle> <manvolnum>1</manvolnum>
3737 </citerefentry> for an exhaustive list). After <literal>squeeze</literal>, it
3738 should say either:
3739 </para>
3740 <itemizedlist>
3741 <listitem>
3742 <para>
3743 <literal>3.0 (native)</literal> for Debian native packages or
3744 </para>
3745 </listitem>
3746 <listitem>
3747 <para>
3748 <literal>3.0 (quilt)</literal> for everything else.
3749 </para>
3750 </listitem>
3751 </itemizedlist>
3752 <para>
3753 The newer <literal>3.0 (quilt)</literal> source format records modifications in
3754 a <command>quilt</command> patch series within
3755 <filename>debian/patches</filename>. Those changes are then automatically
3756 applied during extraction of the source package. <footnote><para> See
3757 <ulink url="&debsrc3;">DebSrc3.0</ulink> for a summary on the switch to the new <literal>3.0
3758 (quilt)</literal> and <literal>3.0 (native)</literal> source formats. </para>
3759 </footnote> The Debian modifications are simply stored in a
3760 <filename>debian.tar.gz</filename> archive containing all files under the
3761 <filename>debian</filename> directory. This new format supports inclusion of
3762 binary files such as PNG icons by the package maintainer without requiring
3763 tricks. <footnote><para>Actually, this new format also supports multiple
3764 upstream tarballs and more compression methods. These are beyond the scope of
3765 this document.</para> </footnote>
3766 </para>
3767 <para>
3768 When <command>dpkg-source</command> extracts a source package in <literal>3.0
3769 (quilt)</literal> source format, it automatically applies all patches listed in
3770 <filename>debian/patches/series</filename>. You can avoid applying patches at
3771 the end of the extraction with the <literal>--skip-patches</literal> option.
3772 </para>
3773 </section>
3774 <section id="sourcel"><title><filename>source/local-options</filename></title>
3775 <para>
3776 When you want to manage Debian packaging activities under a VCS, you typically
3777 create one branch (e.g. <literal>upstream</literal>) tracking the upstream
3778 source and another branch (e.g. typically <literal>master</literal> for Git)
3779 tracking the Debian package. For the latter, you usually want to have
3780 unpatched upstream source with your <filename>debian/*</filename> files for the
3781 Debian packaging to ease merging of the new upstream source.
3782 </para>
3783 <para>
3784 After you build a package, the source is normally left patched. You need to
3785 unpatch it manually by running <literal>dquilt pop -a</literal> before
3786 committing to the <literal>master</literal> branch. You can automate this by
3787 adding the optional <filename>debian/source/local-options</filename> file
3788 containing <literal>unapply-patches</literal>. This file is not included in
3789 the generated source package and changes the local build behavior only. This
3790 file may contain <literal>abort-on-upstream-changes</literal>, too (see
3791 <citerefentry> <refentrytitle>dpkg-source</refentrytitle>
3792 <manvolnum>1</manvolnum> </citerefentry>).
3793 </para>
3794 <screen>
3795 unapply-patches
3796 abort-on-upstream-changes
3797 </screen>
3798 </section>
3799 <section id="sourceopt"><title><filename>source/options</filename></title>
3800 <para>
3801 The autogenerated files in the source tree can be quite annoying for packaging
3802 since they generate meaningless large patch files. There are custom modules
3803 such as <command>dh_autoreconf</command> to ease this problem as described in
3804 <xref linkend="customrules"/>.
3805 </para>
3806 <para>
3807 You can provide a Perl regular expression to the
3808 <literal>--extend-diff-ignore</literal> option argument of <citerefentry>
3809 <refentrytitle>dpkg-source</refentrytitle><manvolnum>1</manvolnum>
3810 </citerefentry> to ignore changes made to the autogenerated files while
3811 creating the source package.
3812 </para>
3813 <para>
3814 As a general solution to address this problem of the autogenerated files,
3815 you can store such a <command>dpkg-source</command> option argument in the
3816 <filename>source/options</filename> file of the source package. The following
3817 will skip creating patch files for <filename>config.sub</filename>,
3818 <filename>config.guess</filename>, and <filename>Makefile</filename>.
3819 </para>
3820 <screen>
3821 extend-diff-ignore = "(^|/)(config\.sub|config\.guess|Makefile)$"
3822 </screen>
3823 </section>
3824 <section id="patches"><title><filename>patches/*</filename></title>
3825 <para>
3826 The old <literal>1.0</literal> source format created a single large
3827 <filename>diff.gz</filename> file containing package maintenance files in
3828 <filename>debian</filename> and patch files for the source. Such a package is a
3829 bit cumbersome to inspect and understand for each source tree modification
3830 later. This is not so nice.
3831 </para>
3832 <para>
3833 The newer <literal>3.0 (quilt)</literal> source format stores patches in
3834 <filename>debian/patches/*</filename> files using the <command>quilt</command>
3835 command. These patches and other package data which are all contained under
3836 the <filename>debian</filename> directory are packaged as the
3837 <filename>debian.tar.gz</filename> file. Since the
3838 <command>dpkg-source</command> command can handle <command>quilt</command>
3839 formatted patch data in the <literal>3.0 (quilt)</literal> source without the
3840 <systemitem role="package">quilt</systemitem> package, it does not need a
3841 <literal>Build-Depends</literal> on <systemitem role="package">quilt</systemitem>.
3842 <footnote><para> Several methods of patch set maintenance have been proposed and are in use for Debian
3843 packages. The <command>quilt</command> system is the preferred maintenance
3844 system in use. Others include <command>dpatch</command>,
3845 <command>dbs</command>, and <command>cdbs</command>. Many of these keep such
3846 patches as <filename>debian/patches/*</filename> files. </para> </footnote>
3847 </para>
3848 <para>
3849 The <command>quilt</command> command is explained in <citerefentry>
3850 <refentrytitle>quilt</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.
3851 It records modifications to the source as a stack of <literal>-p1</literal>
3852 patch files in the <filename>debian/patches</filename> directory and the source
3853 tree is untouched outside of the <filename>debian</filename> directory. The
3854 order of these patches is recorded in the
3855 <filename>debian/patches/series</filename> file. You can apply (=push),
3856 un-apply (=pop), and refresh patches easily. <footnote><para> If you are
3857 asking a sponsor to upload your package, this kind of clear separation and
3858 documentation of your changes is very important to expedite the package review
3859 by your sponsor. </para> </footnote>
3860 </para>
3861 <para>
3862 For <xref linkend="modify"/>, we created three patches in
3863 <filename>debian/patches</filename>.
3864 </para>
3865 <para>
3866 Since Debian patches are located in <filename>debian/patches</filename>, please
3867 make sure to set up the <command>dquilt</command> command properly as described
3868 in <xref linkend="quiltrc"/>.
3869 </para>
3870 <para>
3871 When anyone (including yourself) provides a patch
3872 <filename><replaceable>foo</replaceable>.patch</filename> to the source later,
3873 modifying a <literal>3.0 (quilt)</literal> source package is
3874 quite simple:
3875 </para>
3876 <screen>
3877 $ dpkg-source -x gentoo_0.9.12.dsc
3878 $ cd gentoo-0.9.12
3879 $ dquilt import ../<replaceable>foo</replaceable>.patch
3880 $ dquilt push
3881 $ dquilt refresh
3882 $ dquilt header -e
3883 ... describe patch
3884 </screen>
3885 <para>
3886 The patches stored in the newer <literal>3.0 (quilt)</literal> source format
3887 must be <emphasis>fuzz</emphasis> free. You can ensure this with <literal>dquilt
3888 pop -a; while dquilt push; do dquilt refresh; done</literal>.
3889 </para>
3890 </section>
3891 </chapter>
3892 <chapter id="build"><title>Building the package</title>
3893 <para>
3894 We should now be ready to build the package.
3895 </para>
3896 <section id="completebuild"><title>Complete (re)build</title>
3897 <para>
3898 In order to perform a complete (re)build of a package properly, you
3899 need to make sure you have installed
3900 </para>
3901 <itemizedlist>
3902 <listitem>
3903 <para>
3904 the <systemitem role="package">build-essential</systemitem> package,
3905 </para>
3906 </listitem>
3907 <listitem>
3908 <para>
3909 packages listed in the <literal>Build-Depends</literal> field (see <xref linkend="control"/>), and
3910 </para>
3911 </listitem>
3912 <listitem>
3913 <para>
3914 packages listed in the <literal>Build-Depends-indep</literal> field (see <xref linkend="control"/>).
3915 </para>
3916 </listitem>
3917 </itemizedlist>
3918 <para>
3919 Then you issue the following command in the source directory:
3920 </para>
3921 <screen>
3922 $ dpkg-buildpackage
3923 </screen>
3924 <para>
3925 This will do everything to make full binary and source packages for you. It
3926 will:
3927 </para>
3928 <itemizedlist>
3929 <listitem>
3930 <para>
3931 clean the source tree (<literal>debian/rules clean</literal>)
3932 </para>
3933 </listitem>
3934 <listitem>
3935 <para>
3936 build the source package (<literal>dpkg-source -b</literal>)
3937 </para>
3938 </listitem>
3939 <listitem>
3940 <para>
3941 build the program (<literal>debian/rules build</literal>)
3942 </para>
3943 </listitem>
3944 <listitem>
3945 <para>
3946 build binary packages (<literal>fakeroot debian/rules binary</literal>)
3947 </para>
3948 </listitem>
3949 <listitem>
3950 <para>
3951 sign the source <filename>.dsc</filename> file, using <command>gpg</command>
3952 </para>
3953 </listitem>
3954 <listitem>
3955 <para>
3956 create and sign the upload <filename>.changes</filename> file, using
3957 <command>dpkg-genchanges</command> and <command>gpg</command>
3958 </para>
3959 </listitem>
3960 </itemizedlist>
3961 <para>
3962 The only input that will be required of you is your GPG secret pass phrase,
3963 twice.
3964 <footnote><para>
3965 This GPG key must be signed by a Debian developer to get connected to the web
3966 of trust and must be registered to <ulink url="&keyring;">the Debian
3967 keyring</ulink>. This enables your uploaded packages to be accepted to the
3968 Debian archives. See
3969 <ulink url="&keycreate;">Creating a new GPG key</ulink> and
3970 <ulink url="&keysigning; ">Debian Wiki on Keysigning</ulink>.
3971 </para></footnote>
3972 </para>
3973 <para>
3974 After all this is done for the non-native Debian package, you will see the following files in the directory above
3975 (<filename>~/gentoo</filename>):
3976 </para>
3977 <itemizedlist>
3978 <listitem>
3979 <para>
3980 <filename>gentoo_0.9.12.orig.tar.gz</filename>
3981 </para>
3982 <para>
3983 This is the original upstream source code tarball, merely renamed to the above so that
3984 it adheres to the Debian standard. Note that this was created initially by the
3985 <literal>dh_make -f ../gentoo-0.9.12.tar.gz</literal>.
3986 </para>
3987 </listitem>
3988 <listitem>
3989 <para>
3990 <filename>gentoo_0.9.12-1.dsc</filename>
3991 </para>
3992 <para>
3993 This is a summary of the contents of the source code. The file is generated
3994 from your <filename>control</filename> file, and is used when unpacking the
3995 source with <citerefentry> <refentrytitle>dpkg-source</refentrytitle>
3996 <manvolnum>1</manvolnum> </citerefentry>. This file is GPG signed, so that
3997 people can be sure that it's really yours.
3998 </para>
3999 </listitem>
4000 <listitem>
4001 <para>
4002 <filename>gentoo_0.9.12-1.debian.tar.gz</filename>
4003 </para>
4004 <para>
4005 This compressed tarball contains your <filename>debian</filename> directory
4006 contents. Each and every addition you made to the original source code is
4007 stored as a <command>quilt</command> patch in
4008 <filename>debian/patches</filename>.
4009 </para>
4010 <para>
4011 If someone else wants to re-create your package from scratch, they can easily
4012 do so using the above three files. The extraction procedure is trivial: just
4013 copy the three files somewhere else and run <literal>dpkg-source -x
4014 gentoo_0.9.12-1.dsc</literal>. <footnote><para> You can avoid applying
4015 <command>quilt</command> patches in the <literal>3.0 (quilt)</literal> source
4016 format at the end of the extraction with the <literal>--skip-patches</literal>
4017 option. Alternatively, you can run <literal>dquilt pop -a</literal> after
4018 normal operation. </para> </footnote>
4019 </para>
4020 </listitem>
4021 <listitem>
4022 <para>
4023 <filename>gentoo_0.9.12-1_i386.deb</filename>
4024 </para>
4025 <para>
4026 This is your completed binary package. You can use <command>dpkg</command> to
4027 install and remove this just like any other package.
4028 </para>
4029 </listitem>
4030 <listitem>
4031 <para>
4032 <filename>gentoo_0.9.12-1_i386.changes</filename>
4033 </para>
4034 <para>
4035 This file describes all the changes made in the current package revision;
4036 it is used by the Debian FTP archive maintenance programs to install the binary
4037 and source packages. It is partly generated from the
4038 <filename>changelog</filename> file and the <filename>.dsc</filename> file.
4039 This file is GPG signed, so that people can be sure that it's really yours.
4040 </para>
4041 <para>
4042 As you keep working on the package, its behavior will change and new features will
4043 be added. People downloading your package can look at this file and quickly
4044 see what has changed. Debian archive maintenance programs will also post the
4045 contents of this file to the <ulink url="&debian-devel-announce-ldo;">debian-devel-announce@lists.debian.org</ulink>
4046 mailing list.
4047 </para>
4048 </listitem>
4049 </itemizedlist>
4050 <para>
4051 The long strings of numbers in the <filename>.dsc</filename> and
4052 <filename>.changes</filename> files are SHA1/SHA256 checksums for the files
4053 mentioned. Anyone downloading your files can test them with <citerefentry>
4054 <refentrytitle>sha1sum</refentrytitle> <manvolnum>1</manvolnum>
4055 </citerefentry> or <citerefentry> <refentrytitle>sha256sum</refentrytitle>
4056 <manvolnum>1</manvolnum> </citerefentry> and if the numbers don't match,
4057 they'll know the file is corrupt or has been tampered with.
4058 </para>
4059 </section>
4060 <section id="autobuilder"><title>Autobuilder</title>
4061 <para>
4062 Debian supports many <ulink url="&ports;">ports</ulink>
4063 with the <ulink url="&buildd;">autobuilder
4064 network</ulink> running <command>buildd</command> daemons on computers
4065 of many different architectures. Although you do not need to do this yourself, you
4066 should be aware of what will happen to your packages. Let's look into roughly
4067 how they rebuild your packages for multiple architectures.
4068 <footnote><para> The actual autobuilder system involves much more complicated
4069 schemes than the one documented here. Such details are beyond the scope of
4070 this document. </para> </footnote>
4071 </para>
4072 <para>
4073 For <literal>Architecture: any</literal> packages, the autobuilder system
4074 performs a rebuild. It ensures the installation of
4075 </para>
4076 <itemizedlist>
4077 <listitem>
4078 <para>
4079 the <systemitem role="package">build-essential</systemitem> package, and
4080 </para>
4081 </listitem>
4082 <listitem>
4083 <para>
4084 packages listed in the <literal>Build-Depends</literal> field (see <xref linkend="control"/>).
4085 </para>
4086 </listitem>
4087 </itemizedlist>
4088 <para>
4089 Then it issues the following command in the source directory:
4090 </para>
4091 <screen>
4092 $ dpkg-buildpackage -B
4093 </screen>
4094 <para>
4095 This will do everything to make architecture dependent binary packages on
4096 another architecture. It will:
4097 </para>
4098 <itemizedlist>
4099 <listitem>
4100 <para>
4101 clean the source tree (<literal>debian/rules clean</literal>)
4102 </para>
4103 </listitem>
4104 <listitem>
4105 <para>
4106 build the program (<literal>debian/rules build</literal>)
4107 </para>
4108 </listitem>
4109 <listitem>
4110 <para>
4111 build architecture dependent binary packages (<literal>fakeroot debian/rules
4112 binary-arch</literal>)
4113 </para>
4114 </listitem>
4115 <listitem>
4116 <para>
4117 sign the source <filename>.dsc</filename> file, using <command>gpg</command>
4118 </para>
4119 </listitem>
4120 <listitem>
4121 <para>
4122 create and sign the upload <filename>.changes</filename> file, using
4123 <command>dpkg-genchanges</command> and <command>gpg</command>
4124 </para>
4125 </listitem>
4126 </itemizedlist>
4127 <para>
4128 This is why you see your package for other architectures.
4129 </para>
4130 <para>
4131 Although packages listed in the <literal>Build-Depends-Indep</literal> field
4132 are required to be installed for our normal packaging work (see
4133 <xref linkend="completebuild"/>), they are not required to be installed for the
4134 autobuilder system since it builds only architecture dependent binary packages.
4135 <footnote><para> Unlike under the <systemitem role="package">pbuilder</systemitem> package, the <command>chroot</command>
4136 environment under the <systemitem role="package">sbuild</systemitem> package
4137 used by the autobuilder system does not enforce the use of a minimal
4138 system and may have many leftover packages installed. </para>
4139 </footnote> This distinction between normal packaging and autobuilding
4140 procedures is what dictates whether you should record such required
4141 packages in the <literal>Build-Depends</literal> or
4142 <literal>Build-Depends-Indep</literal> fields of the
4143 <filename>debian/control</filename> file (see <xref linkend="control"/>).
4144 </para>
4145 </section>
4146 <section id="option-sa"><title>Including <filename>orig.tar.gz</filename> for upload</title>
4147 <para>
4148 When you first upload the package to the archive, you need to include the
4149 original <filename>orig.tar.gz</filename> source, too. If the Debian revision
4150 number of this package is neither <literal>1</literal> nor
4151 <literal>0</literal>, you must provide the <command>dpkg-buildpackage</command>
4152 command with the <literal>-sa</literal> option. On the other hand, the
4153 <literal>-sd</literal> option will force the exclusion of the original
4154 <filename>orig.tar.gz</filename> source.
4155 </para>
4156 </section>
4157 <section id="debuild"><title><command>debuild</command> command</title>
4158 <para>
4159 You can automate the <command>dpkg-buildpackage</command> command's
4160 package build process further with the
4161 <command>debuild</command> command. See <citerefentry>
4162 <refentrytitle>debuild</refentrytitle> <manvolnum>1</manvolnum>
4163 </citerefentry>.
4164 </para>
4165 <para>
4166 Customization of the <command>debuild</command> command can be done through
4167 <filename>/etc/devscripts.conf</filename> or
4168 <filename>~/.devscripts</filename>. I would suggest at least the following items:
4169 </para>
4170 <screen>
4171 DEBSIGN_KEYID=Your_GPG_keyID
4172 DEBUILD_LINTIAN_OPTS=-i -I --show-overrides
4173 </screen>
4174 <para>
4175 With these, packages are signed by your specified GPG key ID (good for
4176 sponsoring packages) and checked in detail by the <command>lintian</command> command.
4177 </para>
4178 <para>
4179 Cleaning the source and rebuilding the package from your user account is as simple as:
4180 </para>
4181 <screen>
4182 $ debuild
4183 </screen>
4184 <para>
4185 Please note that the <command>dpkg-buildpackage</command> option
4186 <literal>-sa</literal> to include the original <filename>orig.tar.gz</filename>
4187 source can be specified as:
4188 </para>
4189 <screen>
4190 $ debuild -sa
4191 </screen>
4192 <para>
4193 You can clean the source tree as simply as:
4194 </para>
4195 <screen>
4196 $ debuild clean
4197 </screen>
4198 </section>
4199 <section id="pbuilder"><title><systemitem role="package">pbuilder</systemitem> package</title>
4200 <para>
4201 For a clean room (<command>chroot</command>) build environment to verify the
4202 build dependencies, the <systemitem role="package">pbuilder</systemitem>
4203 package is very useful. <footnote><para> Since the <systemitem
4204 role="package">pbuilder</systemitem> package is still evolving, you should
4205 check the actual configuration situation by consulting the latest official
4206 documentation.</para> </footnote> This ensures a clean build from the source
4207 under the <literal>sid</literal> auto-builder for different architectures and
4208 avoids a severity serious FTBFS (Fails To Build From Source) bug which is
4209 always in the RC (release critical) category.
4210 <footnote><para>See <ulink url="&buildd-do;"/> for more on
4211 Debian package auto-building.
4212 .</para></footnote>
4213 </para>
4214 <para>
4215 Let's customize the <systemitem role="package">pbuilder</systemitem> package as
4216 follows:
4217 </para>
4218 <itemizedlist>
4219 <listitem>
4220 <para>
4221 setting the <filename>/var/cache/pbuilder/result</filename> directory writable by
4222 for your user account.
4223 </para>
4224 </listitem>
4225 <listitem>
4226 <para>
4227 creating a directory, e.g.
4228 <filename><replaceable>/var/cache/pbuilder/hooks</replaceable></filename>,
4229 writable by the user, to place hook scripts in.
4230 </para>
4231 </listitem>
4232 <listitem>
4233 <para>
4234 configuring <filename>~/.pbuilderrc</filename> or
4235 <filename>/etc/pbuilderrc</filename> to include the followsing.
4236 </para>
4237 <screen>
4238 AUTO_DEBSIGN=yes
4239 HOOKDIR=<replaceable>/var/cache/pbuilder/hooks</replaceable>
4240 </screen>
4241 </listitem>
4242 </itemizedlist>
4243 <para>
4244 This will allow you to sign generated packages with your secret GPG key in the
4245 <filename>~/.gnupg/</filename> directory.
4246 </para>
4247 <para>
4248 First let's initialize the local <systemitem role="package">pbuilder</systemitem> <command>chroot</command> system as
4249 follows.
4250 </para>
4251 <screen>
4252 $ sudo pbuilder create
4253 </screen>
4254 <para>
4255 If you already have a completed source package, issue the following commands
4256 in the directory where the
4257 <filename><replaceable>foo</replaceable>.orig.tar.gz</filename>,
4258 <filename><replaceable>foo</replaceable>.debian.tar.gz</filename>, and
4259 <filename><replaceable>foo</replaceable>.dsc</filename> files exist to update
4260 the local <systemitem role="package">pbuilder</systemitem>
4261 <command>chroot</command> system and to build binary packages in it.
4262 </para>
4263 <screen>
4264 $ sudo pbuilder --update
4265 $ sudo pbuilder --build <replaceable>foo</replaceable>.dsc
4266 </screen>
4267 <para>
4268 Please note that the <command>dpkg-buildpackage</command> option
4269 <literal>-sa</literal> to include the original <filename>orig.tar.gz</filename>
4270 source can be specified as:
4271 </para>
4272 <screen>
4273 $ sudo pbuilder --build --debbuildopts -sa <replaceable>foo</replaceable>.dsc
4274 </screen>
4275 <para>
4276 The newly built packages will be located in
4277 <filename>/var/cache/pbuilder/result/</filename> with non-root ownership.
4278 </para>
4279 <para>
4280 If you have an updated source tree but have not generated the matching
4281 source package, issue the following commands in the source directory where the
4282 <filename>debian</filename> directory exists, instead.
4283 </para>
4284 <screen>
4285 $ sudo pbuilder --update
4286 $ pdebuild
4287 </screen>
4288 <para>
4289 Please note that the <command>dpkg-buildpackage</command> option
4290 <literal>-sa</literal> to include the original <filename>orig.tar.gz</filename>
4291 source can be specified as:
4292 </para>
4293 <screen>
4294 $ pdebuild --debbuildopts -sa
4295 </screen>
4296 <para>
4297 You can log into its <command>chroot</command> environment with the
4298 <literal>pbuilder --login --save-after-login</literal> command and configure it
4299 as you wish. This environment can be saved by leaving its shell prompt with
4300 <literal>^D</literal> (Control-D).
4301 </para>
4302 <para>
4303 The latest version of the <command>lintian</command> command can be executed in
4304 the <literal>chroot</literal> environment using the hook script
4305 <filename><replaceable>/var/cache/pbuilder/hooks</replaceable>/B90lintian</filename>
4306 configured as follows. <footnote><para> This assumes
4307 <literal>HOOKDIR=/var/cache/pbuilder/hooks</literal>. You can find many
4308 examples of hook scripts in the
4309 <filename>/usr/share/doc/pbuilder/examples</filename> directory. </para>
4310 </footnote>
4311 </para>
4312 <screen>
4313 #!/bin/sh
4314 set -e
4315 install_packages() {
4316 apt-get -y --force-yes install $@
4317 }
4318 install_packages lintian
4319 echo +++ lintian output +++
4320 su -c lintian -i -I --show-overrides /tmp/buildd/*.changes - pbuilder
4321 # use this version if you don't want lintian to fail the build
4322 #su -c lintian -i -I --show-overrides /tmp/buildd/*.changes; : - pbuilder
4323 echo +++ end of lintian output +++
4324 </screen>
4325 <para>
4326 You need to have access to the latest <literal>sid</literal> environment to
4327 build packages properly for <literal>sid</literal>. In practice,
4328 <literal>sid</literal> may be experiencing issues which makes it undesirable
4329 for you to migrate your whole system. The <systemitem role="package">pbuilder</systemitem> package can help you to cope with this
4330 kind of situation.
4331 </para>
4332 <para>
4333 You may need to update your <literal>stable</literal> packages after their
4334 release for <literal>stable-proposed-updates</literal>,
4335 <literal>stable/updates</literal>, etc. <footnote><para> There are some
4336 restrictions for such updates of your <literal>stable</literal> package.
4337 </para> </footnote> For such occasions, the fact you may be running a <literal>sid</literal>
4338 system is not a good enough excuse for failing to update them promptly. The <systemitem role="package">pbuilder</systemitem> package can help you to access
4339 environments of almost any Debian derivative distribution of the same CPU
4340 architecture.
4341 </para>
4342 <para>
4343 See <ulink url="&pbuilder;"/>,
4344 <citerefentry> <refentrytitle>pdebuild</refentrytitle> <manvolnum>1</manvolnum>
4345 </citerefentry>, <citerefentry> <refentrytitle>pbuilderrc</refentrytitle>
4346 <manvolnum>5</manvolnum> </citerefentry>, and <citerefentry>
4347 <refentrytitle>pbuilder</refentrytitle> <manvolnum>8</manvolnum>
4348 </citerefentry>.
4349 </para>
4350 </section>
4351 <section id="git-buildpackage"><title><command>git-buildpackage</command> command and similars</title>
4352 <para>
4353 If your upstream uses a source code management system (VCS)
4354 <footnote><para>See <ulink url="&debref-vcs;">Version control systems</ulink> for more.</para></footnote>
4355 to maintain their code, you should consider using it as well. This makes merging
4356 and cherry-picking upstream patches much easier. There are several specialized
4357 wrapper script packages for Debian package building for each VCS.
4358 </para>
4359 <itemizedlist>
4360 <listitem>
4361 <para>
4362 <systemitem role="package">git-buildpackage</systemitem>: a suite to help with
4363 Debian packages in Git repositories.
4364 </para>
4365 </listitem>
4366 <listitem>
4367 <para>
4368 <systemitem role="package">svn-buildpackage</systemitem>: helper programs to
4369 maintain Debian packages with Subversion.
4370 </para>
4371 </listitem>
4372 <listitem>
4373 <para>
4374 <systemitem role="package">cvs-buildpackage</systemitem>: a set of Debian
4375 package scripts for CVS source trees.
4376 </para>
4377 </listitem>
4378 </itemizedlist>
4379 <para>
4380 For advanced audiences, there are packages which <emphasis>automate</emphasis>
4381 the building of packages under a VCS-managed source tree. I will not explain them
4382 in this tutorial.
4383 <footnote><para> Here are some web resources available for advanced audiences. </para>
4384 <itemizedlist>
4385 <listitem> <para> <ulink url="&git-buildpackage-doc;">Building Debian Packages with git-buildpackage</ulink> </para> </listitem>
4386 <listitem> <para> <ulink url="&debian-packages-git;">debian packages in git</ulink> </para> </listitem>
4387 <listitem> <para> <ulink url="&git-debian-packaging;">Using Git for Debian Packaging</ulink> </para> </listitem>
4388 <listitem> <para> <ulink url="&git-dpm;">git-dpm: Debian packages in Git manager</ulink> </para> </listitem>
4389 <listitem> <para> <ulink url="&topgit;">Using TopGit to generate quilt series for Debian packaging</ulink> </para> </listitem>
4390 </itemizedlist>
4391 </footnote>
4392 </para>
4393 </section>
4394 <section id="quickrebuild"><title>Quick rebuild</title>
4395 <para>
4396 With a large package, you may not want to rebuild from scratch every time while
4397 you're tuning details in <filename>debian/rules</filename>. For testing purposes,
4398 you can make a <filename>.deb</filename> file without rebuilding the upstream
4399 sources like this<footnote><para> Environment variables which are normally
4400 configured to proper values are not set by this method. Never create real
4401 packages to be uploaded using this <emphasis role="strong">quick</emphasis>
4402 method. </para> </footnote>:
4403 </para>
4404 <screen>
4405 $ fakeroot debian/rules binary
4406 </screen>
4407 <para>
4408 Or simply do the following to see if it builds or not:
4409 </para>
4410 <screen>
4411 $ fakeroot debian/rules build
4412 </screen>
4413 <para>
4414 Once you are finished with your tuning, remember to rebuild following the
4415 proper procedure. You may not be able to upload correctly if you try to upload
4416 <filename>.deb</filename> files built this way.
4417 </para>
4418 </section>
4419 </chapter>
4420 <chapter id="checkit"><title>Checking the package for errors</title>
4421 <para>
4422 There are some techniques you should know for checking a package for errors
4423 before uploading it to the public archives.
4424 </para>
4425 <para>
4426 It's also a good idea to carry out testing on a machine other than your own. You must watch
4427 closely for any warnings or errors for all the tests described here.
4428 </para>
4429 <section id="pinstall"><title>Verifying a package's installation</title>
4430 <para>
4431 You must test your package for whether it installs without problem. The <citerefentry>
4432 <refentrytitle>debi</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>
4433 command helps you to test installing all the generated binary packages.
4434 </para>
4435 <screen>
4436 $ sudo debi gentoo_0.9.12-1_i386.changes
4437 </screen>
4438 <para>
4439 To prevent installation problem on different systems, you must make
4440 sure that there are no filenames conflicting with other existing packages,
4441 using the
4442 <filename>Contents-<replaceable>i386</replaceable></filename> file downloaded
4443 from the Debian archive,
4444 The <command>apt-file</command> command may be handy for this task. If there
4445 are collisions, please take action to avoid this real problem, whether by
4446 renaming the file, moving a common file to a separate package that
4447 multiple packages can depend on, using the alternatives mechanism (see
4448 <citerefentry><refentrytitle>update-alternatives</refentrytitle>
4449 <manvolnum>1</manvolnum></citerefentry>) in coordination with the
4450 maintainers of other affected packages, or declaring a
4451 <literal>Conflicts</literal> relationship in the
4452 <filename>debian/control</filename> file.
4453 </para>
4454 </section>
4455 <section id="pmaintscripts"><title>Verifying a package's maintainer scripts</title>
4456 <para>
4457 All maintainer scripts (that is,
4458 <filename>preinst</filename>, <filename>prerm</filename>,
4459 <filename>postinst</filename>, and <filename>postrm</filename> files) are
4460 hard to write correctly unless they are auto-generated by the
4461 <systemitem role="package">debhelper</systemitem> programs. So do not use them if you are
4462 a novice maintainer (see <xref linkend="maintscripts"/>).
4463 </para>
4464 <para>
4465 If the package makes use of these non-trivial maintainer scripts, be sure to test not only for install but also for remove,
4466 purge, and upgrade processes. Many maintainer script bugs show up
4467 when packages are removed or purged. Use the <command>dpkg</command> command
4468 as follows to test them.
4469 </para>
4470 <screen>
4471 $ sudo dpkg -r gentoo
4472 $ sudo dpkg -P gentoo
4473 $ sudo dpkg -i gentoo_<replaceable>version</replaceable>-<replaceable>revision</replaceable>_<replaceable>i386</replaceable>.deb
4474 </screen>
4475 <para>
4476 This should be done with sequences such as the following.
4477 </para>
4478 <itemizedlist>
4479 <listitem>
4480 <para>
4481 install the previous version (if needed).
4482 </para>
4483 </listitem>
4484 <listitem>
4485 <para>
4486 upgrade it from the previous version.
4487 </para>
4488 </listitem>
4489 <listitem>
4490 <para>
4491 downgrade it back to the previous version (optional).
4492 </para>
4493 </listitem>
4494 <listitem>
4495 <para>
4496 purge it.
4497 </para>
4498 </listitem>
4499 <listitem>
4500 <para>
4501 install the new package.
4502 </para>
4503 </listitem>
4504 <listitem>
4505 <para>
4506 remove it.
4507 </para>
4508 </listitem>
4509 <listitem>
4510 <para>
4511 install it again.
4512 </para>
4513 </listitem>
4514 <listitem>
4515 <para>
4516 purge it.
4517 </para>
4518 </listitem>
4519 </itemizedlist>
4520 <para>
4521 If this is your first package, you should create dummy packages with different
4522 versions to test your package in advance to prevent future problems.
4523 </para>
4524 <para>
4525 Bear in mind that if your package has previously been released in Debian,
4526 people will often be upgrading to your package from the version that was in the
4527 last Debian release. Remember to test upgrades from that version too.
4528 </para>
4529 <para>
4530 Although downgrading is not officially supported, supporting it is a
4531 friendly gesture.
4532 </para>
4533 </section>
4534 <section id="lintians"><title>Using <systemitem role="package">lintian</systemitem></title>
4535 <para>
4536 Run <citerefentry> <refentrytitle>lintian</refentrytitle>
4537 <manvolnum>1</manvolnum> </citerefentry> on your <filename>.changes</filename>
4538 file. The <command>lintian</command> command runs many test scripts to check
4539 for many common packaging errors. <footnote><para> You do not need to provide
4540 the <command>lintian</command> option <literal>-i -I --show-overrides</literal>
4541 if you customized <filename>/etc/devscripts.conf</filename> or
4542 <filename>~/.devscripts</filename> as described in <xref linkend="debuild"/>.
4543 </para> </footnote>
4544 </para>
4545 <screen>
4546 $ lintian -i -I --show-overrides gentoo_0.9.12-1_i386.changes
4547 </screen>
4548 <para>
4549 Of course, replace the filename with the name of the
4550 <filename>.changes</filename> file generated for your package. The output of
4551 the <command>lintian</command> command uses the following flags.
4552 </para>
4553 <itemizedlist>
4554 <listitem>
4555 <para>
4556 <literal>E:</literal> for error; a sure policy violation or packaging error.
4557 </para>
4558 </listitem>
4559 <listitem>
4560 <para>
4561 <literal>W:</literal> for warning; a possible policy violation or packaging
4562 error.
4563 </para>
4564 </listitem>
4565 <listitem>
4566 <para>
4567 <literal>I:</literal> for info; information on certain aspects of packaging.
4568 </para>
4569 </listitem>
4570 <listitem>
4571 <para>
4572 <literal>N:</literal> for note; a detailed message to help your debugging.
4573 </para>
4574 </listitem>
4575 <listitem>
4576 <para>
4577 <literal>O:</literal> for overridden; a message overridden by the
4578 <filename>lintian-overrides</filename> files but displayed by the
4579 <literal>--show-overrides</literal> option.
4580 </para>
4581 </listitem>
4582 </itemizedlist>
4583 <para>
4584 When you see warnings, tune the package to avoid them or verify that the warnings are
4585 spurious. If spurious, set up <filename>lintian-overrides</filename> files as
4586 described in <xref linkend="lintian"/>.
4587 </para>
4588 <para>
4589 Note that you can build the package with <command>dpkg-buildpackage</command>
4590 and run <command>lintian</command> on it in one command, if you use <citerefentry>
4591 <refentrytitle>debuild</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>
4592 or <citerefentry> <refentrytitle>pdebuild</refentrytitle>
4593 <manvolnum>1</manvolnum> </citerefentry>.
4594 </para>
4595 </section>
4596 <section id="debc"><title>The <command>debc</command> command</title>
4597 <para>
4598 You can list files in the binary Debian package with the <citerefentry>
4599 <refentrytitle>debc</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>
4600 command.
4601 </para>
4602 <screen>
4603 $ debc <replaceable>package</replaceable>.changes
4604 </screen>
4605 </section>
4606 <section id="debdiff"><title>The <command>debdiff</command> command</title>
4607 <para>
4608 You can compare file contents in two source Debian packages with the
4609 <citerefentry> <refentrytitle>debdiff</refentrytitle> <manvolnum>1</manvolnum>
4610 </citerefentry> command.
4611 </para>
4612 <screen>
4613 $ debdiff <replaceable>old-package</replaceable>.dsc <replaceable>new-package</replaceable>.dsc
4614 </screen>
4615 <para>
4616 You can also compare file lists in two sets of binary Debian packages with the
4617 <citerefentry> <refentrytitle>debdiff</refentrytitle> <manvolnum>1</manvolnum>
4618 </citerefentry> command.
4619 </para>
4620 <screen>
4621 $ debdiff <replaceable>old-package</replaceable>.changes <replaceable>new-package</replaceable>.changes
4622 </screen>
4623 <para>
4624 These are useful to identify what has been changed in the source packages
4625 and to check for inadvertent changes made when updating binary
4626 packages, such as unintentionally misplacing or removing files.
4627 </para>
4628 </section>
4629 <section id="interdiff"><title>The <command>interdiff</command> command</title>
4630 <para>
4631 You can compare two <filename>diff.gz</filename> files with the <citerefentry>
4632 <refentrytitle>interdiff</refentrytitle> <manvolnum>1</manvolnum>
4633 </citerefentry> command. This is useful for verifying that no inadvertent
4634 changes were made to the source by the maintainer when updating packages in the
4635 old <literal>1.0</literal> source format.
4636 </para>
4637 <screen>
4638 $ interdiff -z <replaceable>old-package</replaceable>.diff.gz <replaceable>new-package</replaceable>.diff.gz
4639 </screen>
4640 <para>
4641 The new <literal>3.0</literal> source format stores changes in multiple patch
4642 files as described in <xref linkend="patches"/>. You can trace changes of each
4643 <filename>debian/patches/*</filename> file using <command>interdiff</command>, too.
4644 </para>
4645 </section>
4646 <section id="mc"><title>The <command>mc</command> command</title>
4647 <para>
4648 Many of these file inspection operations can be made into an intuitive process
4649 by using a file manager like <citerefentry> <refentrytitle>mc</refentrytitle>
4650 <manvolnum>1</manvolnum> </citerefentry> which will let you browse not only the
4651 contents of <filename>*.deb</filename> package files but also
4652 <filename>*.udeb</filename>, <filename>*.debian.tar.gz</filename>,
4653 <filename>*.diff.gz</filename>, and <filename>*.orig.tar.gz</filename> files.
4654 </para>
4655 <para>
4656 Be on the lookout for extra unneeded files or zero length files, both in the
4657 binary and source package. Often cruft doesn't get cleaned up properly; adjust
4658 your <filename>rules</filename> file to compensate for this.
4659 </para>
4660 </section>
4661 </chapter>
4662 <chapter id="upload"><title>Uploading the package</title>
4663 <para>
4664 Now that you have tested your new package thoroughly, you want to release it to
4665 a public archive to share it.
4666 </para>
4667 <section id="upload-debian"><title>Uploading to the Debian archive</title>
4668 <para>
4669 Once you become an official developer,
4670 <footnote><para>
4671 See <xref linkend="socialdynamism"/>.
4672 </para></footnote>
4673 you can upload the package to the Debian archive.
4674 <footnote><para>
4675 There are publicly accessible archives such as <ulink url="&mentors-dn;"/>
4676 which work almost the same way as the Debian archive and provide an upload area for
4677 non-DDs. You can set up an equivalent archive by yourself using the tools
4678 listed at <ulink url="&deb-archive;"/>. So this section is useful for
4679 non-DDs, too.
4680 </para></footnote>
4681 You can do this manually, but it's easier to use the existing
4682 automated tools, like <citerefentry> <refentrytitle>dupload</refentrytitle>
4683 <manvolnum>1</manvolnum> </citerefentry> or <citerefentry>
4684 <refentrytitle>dput</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.
4685 We'll describe how it's done with <command>dupload</command>. <footnote><para>
4686 The <systemitem role="package">dput</systemitem> package seems to come with
4687 more features and to be becoming more popular than the <systemitem role="package">dupload</systemitem> package. It uses the
4688 file <filename>/etc/dput</filename> for its global configuration and the
4689 file <filename>~/.dput.cf</filename> for per-user configuration. It supports
4690 Ubuntu-related services out-of-the-box, too. </para> </footnote>
4691 </para>
4692 <para>
4693 First you have to set up <command>dupload</command>'s config file. You can
4694 either edit the system-wide <filename>/etc/dupload.conf</filename> file, or
4695 have your own <filename>~/.dupload.conf</filename> file override the few things
4696 you want to change.
4697 </para>
4698 <para>
4699 You can read the <citerefentry> <refentrytitle>dupload.conf</refentrytitle>
4700 <manvolnum>5</manvolnum> </citerefentry> manual page to understand what each of
4701 these options means.
4702 </para>
4703 <para>
4704 The <literal>$default_host</literal> option determines which of the upload
4705 queues will be used by default. <literal>anonymous-ftp-master</literal> is the
4706 primary one, but it's possible that you will want to use another one.
4707 <footnote><para>See <ulink url="&devref-upload;">Debian Developer's Reference 5.6. "Uploading a package"</ulink>.</para></footnote>
4708 </para>
4709 <para>
4710 While connected to the Internet, you can upload your package as follows:
4711 </para>
4712 <screen>
4713 $ dupload gentoo_0.9.12-1_i386.changes
4714 </screen>
4715 <para>
4716 <command>dupload</command> checks that the SHA1/SHA256 file checksums
4717 match those listed in the <filename>.changes</filename> file. If they do not
4718 match, it will warn you to rebuild it as described in <xref linkend="completebuild"/> so it can be properly uploaded.
4719 </para>
4720 <!--
4721 No more use of ftp-master nor faster queue. It is not so
4722 useful these days. If you upload to ftp-master, <command>dupload</command>
4723 will ask for your password on Debian machines, and then upload the packages.
4724 -->
4725 <para>
4726 If you encounter an upload problem at <ulink url="&uploadqueue;"/>, you can fix this
4727 by manually uploading a GPG-signed <filename>*.commands</filename> file to there
4728 with <command>ftp</command>. <footnote><para> See <ulink url="&uploadqueue-readme;"/>. Alternatively, you can
4729 use the <command>dcut</command> command from the <systemitem
4730 role="package">dput</systemitem> package. </para> </footnote> For example, using
4731 <filename>hello.commands</filename>:
4732 </para>
4733 <screen>
4734 -----BEGIN PGP SIGNED MESSAGE-----
4735 Uploader: Foo Bar &lt;Foo.Bar@example.org&gt;
4736 Commands:
4737 rm hello_1.0-1_i386.deb
4738 mv hello_1.0-1.dsx hello_1.0-1.dsc
4739 -----BEGIN PGP SIGNATURE-----
4740 Version: 2.6.3ia
4741 iQCVAwUBNFiQSXVhJ0HiWnvJAQG58AP+IDJVeSWmDvzMUphScg1EK0mvChgnuD7h
4742 BRiVQubXkB2DphLJW5UUSRnjw1iuFcYwH/lFpNpl7XP95LkLX3iFza9qItw4k2/q
4743 tvylZkmIA9jxCyv/YB6zZCbHmbvUnL473eLRoxlnYZd3JFaCZMJ86B0Ph4GFNPAf
4744 Z4jxNrgh7Bc=
4745 =pH94
4746 -----END PGP SIGNATURE-----
4747 </screen>
4748 </section>
4749 <section id="skipped-uploads"><title>Skipped uploads</title>
4750 <para>
4751 If you created multiple entries in <filename>debian/changelog</filename> by
4752 skipping uploads, you must create a proper <filename>*_.changes</filename> file
4753 which includes all changes from the last upload.
4754 </para>
4755 <para>
4756 This can be done by specifying the <literal>-v</literal> option to the package
4757 building programs such as <command>dpkg-buildpackage</command>,
4758 <command>debuild</command>, <command>pdebuild</command>, etc.
4759 </para>
4760 </section>
4761 </chapter>
4762 <chapter id="update"><title>Updating the package</title>
4763 <para>
4764 Once you release a package, you need to update it soon.
4765 </para>
4766 <section id="newrevision"><title>New Debian revision</title>
4767 <para>
4768 Let's say that a bug report was filed against your package as
4769 <literal>#54321</literal>, and it describes a problem that you can solve. To
4770 create a new Debian revision of the package, you need to:
4771 </para>
4772 <itemizedlist>
4773 <listitem>
4774 <para>
4775 If this is to be recorded as a new patch, do the following.
4776 </para>
4777 <itemizedlist>
4778 <listitem>
4779 <para>
4780 <literal>dquilt new <replaceable>bugname.patch</replaceable></literal> to set
4781 patch name;
4782 </para>
4783 </listitem>
4784 <listitem>
4785 <para>
4786 <literal>dquilt add <replaceable>buggy-file</replaceable></literal> to declare
4787 file to be modified;
4788 </para>
4789 </listitem>
4790 <listitem>
4791 <para>
4792 Correct the problem in the package source for the upstream bug;
4793 </para>
4794 </listitem>
4795 <listitem>
4796 <para>
4797 <literal>dquilt refresh</literal> to record to
4798 <filename><replaceable>bugname.patch</replaceable></filename>;
4799 </para>
4800 </listitem>
4801 <listitem>
4802 <para>
4803 <literal>dquilt header -e</literal> to add its description;
4804 </para>
4805 </listitem>
4806 </itemizedlist>
4807 </listitem>
4808 <listitem>
4809 <para>
4810 If this is to update an existing patch, do the following.
4811 </para>
4812 <itemizedlist>
4813 <listitem>
4814 <para>
4815 <literal>dquilt pop <replaceable>foo.patch</replaceable></literal> to recall
4816 existing <filename><replaceable>foo.patch</replaceable></filename>;
4817 </para>
4818 </listitem>
4819 <listitem>
4820 <para>
4821 Correct the problem in the old
4822 <filename><replaceable>foo.patch</replaceable></filename>;
4823 </para>
4824 </listitem>
4825 <listitem>
4826 <para>
4827 <literal>dquilt refresh</literal> to update
4828 <filename><replaceable>foo.patch</replaceable></filename>;
4829 </para>
4830 </listitem>
4831 <listitem>
4832 <para>
4833 <literal>dquilt header -e</literal> to update its description;
4834 </para>
4835 </listitem>
4836 <listitem>
4837 <para>
4838 <literal>while dquilt push; do dquilt refresh; done</literal> to apply all
4839 patches while removing <emphasis>fuzz</emphasis>;
4840 </para>
4841 </listitem>
4842 </itemizedlist>
4843 </listitem>
4844 <listitem>
4845 <para>
4846 Add a new revision at the top of the Debian <filename>changelog</filename>
4847 file, for example with <literal>dch -i</literal>, or explicitly with
4848 <literal>dch -v
4849 <replaceable>version</replaceable>-<replaceable>revision</replaceable></literal>
4850 and then insert the comments using your preferred editor. <footnote><para> To
4851 get the date in the required format, use <literal>LANG=C date -R</literal>.
4852 </para> </footnote>
4853 </para>
4854 </listitem>
4855 <listitem>
4856 <para>
4857 Include a short description of the bug and the solution in the changelog entry,
4858 followed by <literal>Closes: #54321</literal>. That way, the bug report will
4859 be <emphasis>automagically</emphasis> closed by the archive maintenance
4860 software the moment your package gets accepted in the Debian archive.
4861 </para>
4862 </listitem>
4863 <listitem>
4864 <para>
4865 Repeat what you did in the above to fix more bugs while updating the Debian
4866 <filename>changelog</filename> file with <literal>dch</literal> as needed.
4867 </para>
4868 </listitem>
4869 <listitem>
4870 <para>
4871 Repeat what you did in <xref linkend="completebuild"/>, <xref linkend="checkit"/>, and <xref linkend="upload"/>. The difference is that
4872 this time, the original source archive won't be included, as it hasn't been
4873 changed and it already exists in the Debian archive.
4874 </para>
4875 </listitem>
4876 </itemizedlist>
4877 </section>
4878 <section id="inspectnewupstream"><title>Inspection of the new upstream release</title>
4879 <para>
4880 When preparing packages of the new upstream release for the Debian archive, you
4881 must check the new upstream release, first.
4882 </para>
4883 <para>
4884 You start this by reading the upstream <filename>changelog</filename>,
4885 <filename>NEWS</filename>, and whatever other documentations they may have
4886 released with the new version.
4887 </para>
4888 <para>
4889 You then inspect changes between the old and new upstream sources as follow to
4890 watch out for anything suspicious.
4891 </para>
4892 <screen>
4893 $ diff -urN <replaceable>foo</replaceable>-<replaceable>oldversion</replaceable> <replaceable>foo</replaceable>-<replaceable>newversion</replaceable>
4894 </screen>
4895 <para>
4896 Changes to some auto-generated files by Autotools such as
4897 <filename>missing</filename>, <filename>aclocal.m4</filename>,
4898 <filename>config.guess</filename>, <filename>config.h.in</filename>,
4899 <filename>config.sub</filename>, <filename>configure</filename>,
4900 <filename>depcomp</filename>, <filename>install-sh</filename>,
4901 <filename>ltmain.sh</filename>, and <filename>Makefile.in</filename> may be
4902 ignored. You may erase them before running <command>diff</command> to the
4903 source for inspection.
4904 </para>
4905 </section>
4906 <section id="newupstream"><title>New upstream release</title>
4907 <para>
4908 If a package <systemitem role="package"><replaceable>foo</replaceable></systemitem> is properly packaged
4909 in the newer <literal>3.0 (native)</literal> or <literal>3.0 (quilt)</literal>
4910 formats, packaging a new upstream version is essentially moving the old
4911 <filename>debian</filename> directory to the new source. This can be done by
4912 running <literal>tar xvzf
4913 /<replaceable>path</replaceable>/<replaceable>to</replaceable>/<replaceable>foo</replaceable>_<replaceable>oldversion</replaceable>.debian.tar.gz</literal>
4914 in the new extracted source. <footnote><para> If a package <systemitem role="package"><replaceable>foo</replaceable></systemitem> is packaged in the
4915 old <literal>1.0</literal> format, this can be done by running <literal>zcat
4916 /<replaceable>path</replaceable>/<replaceable>to</replaceable>/<replaceable>foo</replaceable>_<replaceable>oldversion</replaceable>.diff.gz|patch
4917 -p1</literal> in the new extracted source, instead. </para> </footnote> Of
4918 course, you need to do few obvious chores.
4919 </para>
4920 <itemizedlist>
4921 <listitem>
4922 <para>
4923 Create a copy of upstream source as the
4924 <filename>foo_<replaceable>newversion</replaceable>.tar.gz</filename> file.
4925 </para>
4926 </listitem>
4927 <listitem>
4928 <para>
4929 Update the Debian <filename>changelog</filename> file with <literal>dch -v
4930 <replaceable>newversion</replaceable>-<replaceable>1</replaceable></literal>.
4931 </para>
4932 <itemizedlist>
4933 <listitem>
4934 <para>
4935 Add an entry with <literal>New upstream release</literal>.
4936 </para>
4937 </listitem>
4938 <listitem>
4939 <para>
4940 Describe concisely the changes <emphasis>in the new upstream release</emphasis>
4941 that fix reported bugs and close those bugs by adding <literal>Closes: #<replaceable>bug_number</replaceable></literal>.
4942 </para>
4943 </listitem>
4944 <listitem>
4945 <para>
4946 Describe concisely the changes <emphasis>to the new upstream release</emphasis>
4947 by the maintainer that fix reported bugs and close those bugs by adding <literal>Closes: #<replaceable>bug_number</replaceable></literal>.
4948 </para>
4949 </listitem>
4950 </itemizedlist>
4951 </listitem>
4952 <listitem>
4953 <para>
4954 <literal>while dquilt push; do dquilt refresh; done</literal> to apply all
4955 patches while removing <emphasis>fuzz</emphasis>.
4956 </para>
4957 </listitem>
4958 </itemizedlist>
4959 <para>
4960 If the patch/merge did not apply cleanly, inspect the situation (clues are left
4961 in <filename>.rej</filename> files).
4962 </para>
4963 <itemizedlist>
4964 <listitem>
4965 <para>
4966 If a patch you applied to the source was integrated to the upstream source,
4967 </para>
4968 <itemizedlist>
4969 <listitem>
4970 <para>
4971 <literal>dquilt delete</literal> to remove it.
4972 </para>
4973 </listitem>
4974 </itemizedlist>
4975 </listitem>
4976 <listitem>
4977 <para>
4978 If a patch you applied to the source conflicted with new changes in the
4979 upstream source,
4980 </para>
4981 <itemizedlist>
4982 <listitem>
4983 <para>
4984 <literal>dquilt push -f</literal> to apply old patches while forcing rejects as
4985 <filename><replaceable>baz</replaceable>.rej</filename>.
4986 </para>
4987 </listitem>
4988 <listitem>
4989 <para>
4990 Edit the <filename><replaceable>baz</replaceable></filename> file manually to
4991 realize intended effect of
4992 <filename><replaceable>baz</replaceable>.rej</filename>.
4993 </para>
4994 </listitem>
4995 <listitem>
4996 <para>
4997 <literal>dquilt refresh</literal> to update the patch.
4998 </para>
4999 </listitem>
5000 </itemizedlist>
5001 </listitem>
5002 <listitem>
5003 <para>
5004 Continue back to <literal>while dquilt push; do dquilt refresh; done</literal>.
5005 </para>
5006 </listitem>
5007 </itemizedlist>
5008 <para>
5009 This process can be automated using the <citerefentry>
5010 <refentrytitle>uupdate</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>
5011 command as follows:
5012 </para>
5013 <screen>
5014 $ apt-get source <replaceable>foo</replaceable>
5015 ...
5016 dpkg-source: info: extracting <replaceable>foo</replaceable> in <replaceable>foo</replaceable>-<replaceable>oldversion</replaceable>
5017 dpkg-source: info: unpacking <replaceable>foo</replaceable>_<replaceable>oldversion</replaceable>.orig.tar.gz
5018 dpkg-source: info: applying <replaceable>foo</replaceable>_<replaceable>oldversion</replaceable>-1.debian.tar.gz
5019 $ ls -F
5020 <replaceable>foo</replaceable>-<replaceable>oldversion</replaceable>/
5021 <replaceable>foo</replaceable>_<replaceable>oldversion</replaceable>-1.debian.tar.gz
5022 <replaceable>foo</replaceable>_<replaceable>oldversion</replaceable>-1.dsc
5023 <replaceable>foo</replaceable>_<replaceable>oldversion</replaceable>.orig.tar.gz
5024 $ wget http://example.org/<replaceable>foo</replaceable>/<replaceable>foo</replaceable>-<replaceable>newversion</replaceable>.tar.gz
5025 $ cd <replaceable>foo</replaceable>-<replaceable>oldversion</replaceable>
5026 $ uupdate -v <replaceable>newversion</replaceable> ../<replaceable>foo</replaceable>-<replaceable>newversion</replaceable>.tar.gz
5027 $ cd ../<replaceable>foo</replaceable>-<replaceable>newversion</replaceable>
5028 $ while dquilt push; do dquilt refresh; done
5029 $ dch
5030 ... document changes made
5031 </screen>
5032 <para>
5033 If you set up a <filename>debian/watch</filename> file as described in <xref linkend="watch"/>, you can skip the <command>wget</command> command. You
5034 simply run <citerefentry> <refentrytitle>uscan</refentrytitle>
5035 <manvolnum>1</manvolnum> </citerefentry> in the
5036 <filename><replaceable>foo</replaceable>-<replaceable>oldversion</replaceable></filename>
5037 directory instead of the <command>uupdate</command> command. This will
5038 <emphasis>automagically</emphasis> look for the updated source, download it,
5039 and run the <command>uupdate</command> command. <footnote><para> If the
5040 <command>uscan</command> command downloads the updated source but it does not
5041 run the <command>uupdate</command> command, you should correct the
5042 <filename>debian/watch</filename> file to have <literal>debian
5043 uupdate</literal> at the end of the URL. </para> </footnote>
5044 </para>
5045 <para>
5046 You can release this updated source by repeating what you did in <xref linkend="completebuild"/>, <xref linkend="checkit"/>, and <xref linkend="upload"/>.
5047 </para>
5048 </section>
5049 <section id="packagestyle"><title>Updating the packaging style</title>
5050 <para>
5051 Updating the package style is not a required activity for the update of a
5052 package. But, you can use the full capability of the modern <systemitem role="package">debhelper</systemitem> system and the <literal>3.0</literal>
5053 source format by doing this. <footnote><para> If your sponsor or other
5054 maintainers object to updating the existing packaging style, it is not worth
5055 bothering nor arguing. There are more important things to do. </para>
5056 </footnote>
5057 </para>
5058 <itemizedlist>
5059 <listitem>
5060 <para>
5061 If you need to add erased template files for any reason, you may run
5062 <command>dh_make</command> again in the same Debian package source tree with
5063 <literal>--addmissing</literal> option. Then edit them properly.
5064 </para>
5065 </listitem>
5066 <listitem>
5067 <para>
5068 If the package has not updated to use the <systemitem role="package">debhelper</systemitem> V7 <command>dh</command> syntax for the
5069 <filename>debian/rules</filename> file, update it to use <command>dh</command>.
5070 Update the <filename>debian/control</filename> file accordingly.
5071 </para>
5072 </listitem>
5073 <listitem>
5074 <para>
5075 If you want to update the <filename>rules</filename> file created with the
5076 <filename>Makefile</filename> inclusion mechanism of the Common Debian Build
5077 System (<systemitem role="package">cdbs</systemitem>) to the
5078 <command>dh</command> syntax, see
5079 <ulink url="&cdbs-doc;">cdbs-doc.pdf.gz</ulink> and understand its
5080 <literal>DEB_*</literal> configuration variables. <footnote><para> In the
5081 <systemitem role="package">cdbs</systemitem> (0.4.74) package, there are some
5082 negative descriptions of the <filename>rules</filename> file created by the
5083 <command>dh_make</command> command for the non-<systemitem role="package">cdbs</systemitem> choices. Do not worry about it. It applies
5084 only for <literal>lenny</literal> which created explicit targets with long list
5085 of <command>dh_*</command> commands. </para> </footnote>
5086 </para>
5087 </listitem>
5088 <listitem>
5089 <para>
5090 If you have a <literal>1.0</literal> source package without the
5091 <filename><replaceable>foo</replaceable>.diff.gz</filename> file, you can
5092 update it to the newer <literal>3.0 (native)</literal> source format by
5093 creating <filename>debian/source/format</filename> with <literal>3.0
5094 (native)</literal>. The rest of <filename>debian/*</filename> files can be
5095 just copied.
5096 </para>
5097 </listitem>
5098 <listitem>
5099 <para>
5100 If you have a <literal>1.0</literal> source package with the
5101 <filename><replaceable>foo</replaceable>.diff.gz</filename> file, you can
5102 update it to the newer <literal>3.0 (quilt)</literal> source format by creating
5103 <filename>debian/source/format</filename> with <literal>3.0 (quilt)</literal>.
5104 The rest of <filename>debian/*</filename> files can be just copied. Import the
5105 <filename>big.diff</filename> file generated by the <literal>filterdiff -z -x
5106 '*/debian/*' <replaceable>foo</replaceable>.diff.gz &gt; big.diff</literal>
5107 command to your <command>quilt</command> system, if needed. <footnote><para>
5108 You may split <filename>big.diff</filename> into many small incremental patches
5109 using the <command>splitdiff</command> command. </para> </footnote>
5110 </para>
5111 </listitem>
5112 <listitem>
5113 <para>
5114 If it was packaged with another patch system such as <systemitem role="package">dpatch</systemitem>, <systemitem role="package">dbs</systemitem>, or <systemitem role="package">cdbs</systemitem> with <literal>-p0</literal>,
5115 <literal>-p1</literal>, or <literal>-p2</literal>, convert it to the
5116 <systemitem role="package">quilt</systemitem> command using
5117 <filename>deb3</filename> at <ulink url="&deb3;"/>.
5118 </para>
5119 </listitem>
5120 <listitem>
5121 <para>
5122 If it was packaged with the <command>dh</command> command with the
5123 <literal>--with quilt</literal> option or with the
5124 <command>dh_quilt_patch</command> and <command>dh_quilt_unpatch</command>
5125 commands, remove such things and make it use the newer <literal>3.0
5126 (native)</literal> source format.
5127 </para>
5128 </listitem>
5129 </itemizedlist>
5130 <para>
5131 You need to do other tasks described in <xref linkend="newupstream"/>, too.
5132 </para>
5133 </section>
5134 <section id="reminders"><title>Reminders for updating packages</title>
5135 <para>
5136 Here are few reminders for updating packages.
5137 </para>
5138 <itemizedlist>
5139 <listitem>
5140 <para>
5141 Preserve old <filename>changelog</filename> entries (sounds obvious, but there
5142 have been incidents to type <literal>dch</literal> when you should have typed
5143 <literal>dch -i</literal>.)
5144 </para>
5145 </listitem>
5146 <listitem>
5147 <para>
5148 Existing Debian changes need to be reevaluated; throw away stuff that upstream
5149 has incorporated (in one form or another) and remember to keep stuff that
5150 hasn't been incorporated by upstream, unless there is a compelling reason not
5151 to.
5152 </para>
5153 </listitem>
5154 <listitem>
5155 <para>
5156 If any changes were made to the build system (hopefully you'd know from
5157 inspecting upstream changes) then update the <filename>debian/rules</filename>
5158 and <filename>debian/control</filename> build dependencies if necessary.
5159 </para>
5160 </listitem>
5161 <listitem>
5162 <para>
5163 Check to see <ulink url="&bts;">Debian Bug Tracking
5164 System (BTS)</ulink> if someone have provided patches to bugs that are
5165 currently open in it.
5166 </para>
5167 </listitem>
5168 <listitem>
5169 <para>
5170 Check the contents of the <filename>.changes</filename> file to make sure you
5171 are uploading to the correct distribution, the proper bugs closures are listed
5172 in the <literal>Closes</literal> field, the <literal>Maintainer</literal> and
5173 <literal>Changed-By</literal> fields match, the file is GPG-signed, etc.
5174 </para>
5175 </listitem>
5176 </itemizedlist>
5177 </section>
5178 </chapter>
5179 </book>

  ViewVC Help
Powered by ViewVC 1.1.5