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

  ViewVC Help
Powered by ViewVC 1.1.5