/[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 8742 - (hide annotations) (download)
Thu Apr 28 13:23:38 2011 UTC (2 years ago) by osamu
File size: 208600 byte(s)
Use GPG
1 osamu 8601 <?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 osamu 8643 <!ENTITY % trans SYSTEM "po4a/maint-guide.en.ent"> %trans;
6 osamu 8601 <!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 osamu 8646 <!--
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 osamu 8601 <title>Debian New Maintainers' Guide</title>
30     <bookinfo>
31     <authorgroup>
32 osamu 8673 <!-- 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 osamu 8643 <!-- translator credits in po4a/translator.*.ent -->
36     &othercredit;
37 osamu 8601 </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 osamu 8650 <itemizedlist>
53     <listitem>
54 osamu 8601 <para>
55     Making a Debian Package (AKA the Debmake Manual), copyright © 1997 Jaldhar
56     Vyas.
57     </para>
58 osamu 8650 </listitem>
59     <listitem>
60 osamu 8601 <para>
61     The New-Maintainer's Debian Packaging Howto, copyright © 1997 Will Lowe.
62     </para>
63 osamu 8650 </listitem>
64     </itemizedlist>
65 osamu 8601 </legalnotice>
66     <!-- toc -->
67     </bookinfo>
68     <chapter id="start"><title>Getting started The Right Way</title>
69     <para>
70 osamu 8688 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 osamu 8601 </para>
77     <para>
78 osamu 8636 This document has been updated for the Debian <literal>&base-release;</literal>
79     release.
80 osamu 8688 <footnote><para> The document assumes you are using a
81     <literal>&base-release;</literal> or newer system. If you need to follow this
82 taffit-guest 8665 text in an older system (including an older Ubuntu system etc.), you must
83 osamu 8639 install backported <systemitem role="package">dpkg</systemitem> and
84     <systemitem role="package">debhelper</systemitem> packages, at least.
85     </para> </footnote>
86 osamu 8601 </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 osamu 8688 wondering how you can make your own packages; and perhaps you think it is a very
92 osamu 8601 difficult task. Well, if you are a real novice on Linux, it is hard, but if
93 osamu 8688 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 osamu 8639 <footnote><para>
97 osamu 8688 You can learn about the basic handling of a Debian system from the
98 osamu 8639 <ulink url="&debref;">Debian Reference</ulink>. It contains some pointers to
99     learn about Unix programming, too.
100     </para></footnote>
101 osamu 8601 </para>
102     <para>
103     One thing is certain, though: to properly create and maintain Debian packages
104 osamu 8688 takes many hours. Make no mistake, for our system to work the maintainers
105 osamu 8601 need to be both technically competent and diligent.
106     </para>
107     <para>
108 taffit-guest 8665 If you need some help on packaging, please read <xref linkend="helpme"/>.
109 osamu 8601 </para>
110     <para>
111 osamu 8636 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 osamu 8688 The translations may be available in packages such as
115 osamu 8639 <systemitem role="package">maint-guide-es</systemitem>.
116 osamu 8655 Please note that this documentation may be slightly outdated.
117 osamu 8601 </para>
118 osamu 8721 <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 osamu 8688 <section id="socialdynamism"><title>Social dynamics of Debian</title>
125 osamu 8651 <para>
126 osamu 8688 Here are some observations of Debian's social dynamics, presented in the hope
127     that it will prepare you for interactions with Debian.
128 osamu 8651 </para>
129     <itemizedlist>
130     <listitem><para>We all are volunteers.</para>
131     <itemizedlist>
132 osamu 8688 <listitem><para>You cannot impose on others what to do.</para></listitem>
133 osamu 8651 <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 osamu 8688 <listitem><para>Attention from other volunteers is a very scarce resource.</para></listitem>
144 osamu 8651 </itemizedlist></listitem>
145     <listitem><para>Debian is constantly improving.</para>
146     <itemizedlist>
147 osamu 8655 <listitem><para>You are expected to make high quality packages.</para></listitem>
148 osamu 8688 <listitem><para>You should adapt yourself to change.</para></listitem>
149 osamu 8651 </itemizedlist></listitem>
150     </itemizedlist>
151     <para>
152 osamu 8705 There are several types of people interacting around Debian with different
153     roles.
154 osamu 8651 </para>
155     <itemizedlist>
156 osamu 8705 <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 osamu 8651 </itemizedlist>
201     <para>
202 osamu 8705 Please note that you cannot become an official
203 osamu 8688 <emphasis role="strong">Debian Developer</emphasis> (DD) overnight, because it
204 osamu 8651 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 osamu 8688 path to becoming an official Debian Developer too. There are many packages
214 taffit-guest 8665 waiting for good maintainers (see <xref linkend="choose"/>).
215 osamu 8651 </para>
216 osamu 8705 <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 osamu 8737 <listitem><para><ulink url="&debianfaqhelp;">The Debian GNU/Linux FAQ, Chapter 13 - "Contributing to the Debian Project"</ulink> (semi-official) </para> </listitem>
224 osamu 8705 <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 osamu 8651 </section>
229 osamu 8601 <section id="needprogs"><title>Programs you need for development</title>
230     <para>
231     Before you start anything, you should make sure that you have properly
232     installed some additional packages needed for development. Note that the list
233     doesn't contain any packages marked <literal>essential</literal> or
234     <literal>required</literal> - we expect that you have those installed already.
235     </para>
236     <para>
237     The following packages come with the standard Debian installation, so you
238     probably have them already (along with any additional packages they depend on).
239     Still, you should check it with <literal>aptitude show
240 osamu 8621 <replaceable>package</replaceable></literal>
241     or with <literal>dpkg -s <replaceable>package</replaceable></literal>.
242 osamu 8601 </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 osamu 8688 to install that, it will <emphasis>pull in</emphasis> other packages required to
247 osamu 8601 have a basic build environment.
248     </para>
249     <para>
250 osamu 8688 For some types of packages, that is all you will require; however, there is
251 osamu 8601 another set of packages that while not essential for all package builds are
252 osamu 8688 useful to have installed or may be required by your package:
253 osamu 8601 </para>
254     <itemizedlist>
255     <listitem>
256     <para>
257 osamu 8688 <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 osamu 8601 </para>
266     </listitem>
267     <listitem>
268     <para>
269 osamu 8688 <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 osamu 8601 </para>
286     </listitem>
287     <listitem>
288     <para>
289 osamu 8688 <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 osamu 8601 </para>
294     </listitem>
295     <listitem>
296     <para>
297 osamu 8688 <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 osamu 8601 </para>
302     </listitem>
303     <listitem>
304     <para>
305 osamu 8688 <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 osamu 8601 </para>
309     </listitem>
310     <listitem>
311     <para>
312 osamu 8688 <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 osamu 8601 </para>
317     </listitem>
318     <listitem>
319     <para>
320 osamu 8688 <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 osamu 8601 </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 osamu 8688 when your work gets included in the Debian distribution. (See <citerefentry>
334     <refentrytitle>gpg</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.)
335 osamu 8601 </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 osamu 8688 which is also good at this task. (See <citerefentry>
343 osamu 8601 <refentrytitle>gpc</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>,
344 osamu 8688 <citerefentry> <refentrytitle>ppc386</refentrytitle>
345     <manvolnum>1</manvolnum> </citerefentry>.)
346 osamu 8601 </para>
347     </listitem>
348     <listitem>
349     <para>
350 osamu 8688 <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 osamu 8601 </para>
357     </listitem>
358     <listitem>
359     <para>
360 osamu 8688 <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 osamu 8601 </para>
366     </listitem>
367     <listitem>
368     <para>
369 osamu 8688 <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 osamu 8601 <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 osamu 8688 <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 osamu 8601 </para>
393     </listitem>
394     <listitem>
395     <para>
396 osamu 8688 <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 osamu 8601 <systemitem role="package">quilt</systemitem> - this package helps you to
405 taffit-guest 8695 manage large numbers of patches by keeping track of the changes each patch
406 osamu 8688 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 osamu 8601 </para>
410     </listitem>
411     <listitem>
412     <para>
413 osamu 8688 <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 osamu 8601 </para>
420     </listitem>
421     </itemizedlist>
422 osamu 8651 <para>
423     The short descriptions that are given above only serve to introduce you to what
424 osamu 8725 each package does. Before continuing please read the documentation
425 osamu 8719 of each relevant program including ones installed through the package dependency such as
426 osamu 8715 <command>make</command>, at least, for the standard usage. It may seem like heavy
427 osamu 8651 going now, but later on you'll be <emphasis>very</emphasis> glad you read it.
428 osamu 8688 If you have specific questions later, I would suggest re-reading the documents
429 osamu 8721 mentioned above.
430 osamu 8651 </para>
431 osamu 8646 </section>
432 osamu 8688 <section id="needdocs"><title>Documentation needed for development</title>
433 osamu 8601 <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 osamu 8628 <systemitem role="package">debian-policy</systemitem> - the <ulink url="&debian-policy;">Debian Policy
441 osamu 8601 Manual</ulink> includes explanations of the structure and contents of the
442 osamu 8688 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 osamu 8601 important thing is that it describes requirements that each package must
445 osamu 8737 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 osamu 8601 </para>
448     </listitem>
449     <listitem>
450     <para>
451 osamu 8642 <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 osamu 8601 details of packaging, like the structure of the archive, how to rename, orphan,
455 osamu 8688 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 osamu 8601 </para>
459     </listitem>
460 osamu 8725 </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 osamu 8601 <listitem>
467     <para>
468 osamu 8725 <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 osamu 8601 <systemitem role="package">gnu-standards</systemitem> - this package contains
477 osamu 8639 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 osamu 8688 be followed, these are still helpful as guidelines and common sense.
482     (See the local copies of
483 osamu 8639 <ulink url="&gnu-standard-pdf;">standards.pdf</ulink> and
484 osamu 8688 <ulink url="&gnu-maintainer-pdf;">maintain.pdf</ulink>.)
485 osamu 8601 </para>
486     </listitem>
487     </itemizedlist>
488     <para>
489 osamu 8688 If this document contradicts any of the documents mentioned above, they
490     are correct. Please file a bug report on the
491 osamu 8642 <systemitem role="package">maint-guide</systemitem> package using
492     <command>reportbug</command>.
493     </para>
494 osamu 8601 </section>
495     <section id="helpme"><title>Where to ask for help</title>
496     <para>
497 osamu 8621 Before you decide to ask your question in some public place, please read the fine documentation.
498 osamu 8601 </para>
499 osamu 8621 <itemizedlist>
500     <listitem>
501 osamu 8601 <para>
502 taffit-guest 8665 files in <filename>/usr/share/doc/<replaceable>package</replaceable></filename> for all pertinent packages
503 osamu 8621 </para>
504     </listitem>
505     <listitem>
506     <para>
507 osamu 8642 contents of <literal><command>man</command> <replaceable>command</replaceable></literal> for all pertinent commands
508 osamu 8621 </para>
509     </listitem>
510     <listitem>
511     <para>
512 osamu 8642 contents of <literal><command>info</command> <replaceable>command</replaceable></literal> for all pertinent commands
513 osamu 8621 </para>
514     </listitem>
515     <listitem>
516     <para>
517 osamu 8636 contents of <ulink url="&debian-mentors-ldo;">debian-mentors@lists.debian.org mailing list archive</ulink>
518 osamu 8621 </para>
519     </listitem>
520 osamu 8636 <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 osamu 8621 </itemizedlist>
526     <para>
527 osamu 8688 You can use web search engines more effectively by including search strings
528 osamu 8642 such as <literal>site:lists.debian.org</literal> to limit the domain.
529 osamu 8636 </para>
530     <para>
531 osamu 8688 Making a small test package is a good way to learn details of packaging.
532 osamu 8601 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 osamu 8636 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 osamu 8652 The more experienced Debian developers will gladly help you, if you ask
558     properly after making your required efforts.
559 osamu 8601 </para>
560     <para>
561     When you receive a bug report (yes, actual bug reports!), you will know that it
562 osamu 8636 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 taffit-guest 8722 <ulink url="&devref-bug-handling;">Debian Developer's Reference, 5.8.
567 osamu 8688 "Handling bugs"</ulink>.
568 osamu 8601 </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 osamu 8703 Let's start by creating a package of your own (or, even better,
586     adopting an existing one).
587 osamu 8601 </para>
588 osamu 8712 <section id="workflow"><title>Workflow of the Debian package building</title>
589 osamu 8705 <para>
590 osamu 8709 If you are making a Debian package with an upstream program,
591 osamu 8712 typical workflow of the Debian package building involves generating several
592 osamu 8707 specifically named files for each step as the following.
593 osamu 8705 </para>
594     <itemizedlist>
595     <listitem>
596     <para>We obtain an upstream program file usually in a compressed tar format.</para>
597     <itemizedlist>
598 osamu 8725 <listitem><literal><replaceable>package</replaceable>-<replaceable>version</replaceable>.tar.gz</literal></listitem>
599 osamu 8705 </itemizedlist>
600     </listitem>
601     <listitem>
602     <para>
603 taffit-guest 8722 We create a non-native Debian source package in the <literal>3.0 (quilt)</literal> format, which refers to the set of input files for
604 osamu 8709 the Debian package building, by adding Debian package modifications to the upstream program under the <filename>debian</filename> directory.
605 osamu 8705 </para>
606     <itemizedlist>
607 osamu 8725 <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>.orig.tar.gz</literal></listitem>
608     <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>-<replaceable>revision</replaceable>.debian.tar.gz</literal>
609 taffit-guest 8722 <footnote><para>For the older non-native Debian source package in the <literal>1.0</literal> format,
610 osamu 8725 <literal><replaceable>package</replaceable>_<replaceable>version</replaceable>-<replaceable>revision</replaceable>.diff.gz</literal>
611 osamu 8709 is used instead. </para></footnote></listitem>
612 osamu 8725 <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>-<replaceable>revision</replaceable>.dsc</literal></listitem>
613 osamu 8705 </itemizedlist>
614     </listitem>
615     <listitem>
616     <para>
617     We build Debian binary packages, which are ordinary installable package files in <literal>.deb</literal> format (or <literal>.udeb</literal> format, used by the Debian Installer), from the Debian source package.
618     </para>
619     <itemizedlist>
620 osamu 8725 <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>-<replaceable>revision</replaceable>_<replaceable>arch</replaceable>.deb</literal></listitem>
621 osamu 8705 </itemizedlist>
622     </listitem>
623     </itemizedlist>
624     <para>
625 osamu 8715 Please note that the character separating
626 osamu 8725 <literal><replaceable>package</replaceable></literal> and
627 osamu 8715 <literal><replaceable>version</replaceable></literal> was changed from
628     <literal>-</literal> (hyphen) to <literal>_</literal> (underscore).
629     </para>
630     <para>
631 taffit-guest 8722 Here,
632 osamu 8725 <literal><replaceable>package</replaceable></literal> part of the file name is substituted by the
633 taffit-guest 8722 <emphasis role="strong">package name</emphasis>,
634     <literal><replaceable>version</replaceable></literal> part of it is substituted by the
635     <emphasis role="strong">upstream version</emphasis>,
636     <literal><replaceable>revision</replaceable></literal> part of it is substituted by the
637     <emphasis role="strong">Debian revision</emphasis>,
638     <literal><replaceable>arch</replaceable></literal> part of it is substituted by the
639     <emphasis role="strong">package architecture</emphasis>.
640     <footnote><para>
641     The <emphasis role="strong">package name</emphasis>, <emphasis
642     role="strong">upstream version</emphasis>, and <emphasis role="strong">Debian
643 osamu 8725 revision</emphasis> must be adjusted to comply with the Debian Policy Manual:
644     <ulink url="&policy-source;">5.6.1 Source</ulink>,
645     <ulink url="&policy-package;">5.6.7 Package</ulink>, and
646     <ulink url="&policy-version;">5.6.12 Version</ulink>.
647 taffit-guest 8722 The <emphasis role="strong">package architecture</emphasis> follows the
648 osamu 8725 Debian Policy Manual: <ulink url="&policy-architecture;">5.6.8 Architecture</ulink>
649 taffit-guest 8722 and is automatically assigned by the package build process.</para></footnote>
650     </para>
651     <para>
652 osamu 8709 If you are making a Debian specific package without an upstream program instead,
653 osamu 8712 typical workflow of the Debian package building is simpler.
654 osamu 8709 </para>
655     <itemizedlist>
656     <listitem>
657     <para>
658 taffit-guest 8722 We create a native Debian source package in the <literal>3.0 (quilt)</literal> format using a compressed tar format in which required files under the <filename>debian</filename> directory are also included.
659 osamu 8709 </para>
660     <itemizedlist>
661 osamu 8725 <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>.tar.gz</literal></listitem>
662     <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>.dsc</literal></listitem>
663 osamu 8709 </itemizedlist>
664     </listitem>
665     <listitem>
666     <para>
667     We build Debian binary packages from the native Debian source package.
668     </para>
669     <itemizedlist>
670 osamu 8725 <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>_<replaceable>arch</replaceable>.deb</literal></listitem>
671 osamu 8709 </itemizedlist>
672     </listitem>
673     </itemizedlist>
674     <para>
675 osamu 8707 In the following, each step of this is explained with detailed examples.
676     </para>
677     </section>
678 osamu 8601 <section id="choose"><title>Choose your program</title>
679     <para>
680     You have probably chosen the package you want to create. The first thing you
681     need to do is check if the package is in the distribution archive already by
682 osamu 8636 using the following.
683 osamu 8601 </para>
684 osamu 8636 <itemizedlist>
685     <listitem>
686     <para>the <command>aptitude</command> command</para>
687     </listitem>
688     <listitem>
689 osamu 8703 <para>the <ulink url="&packages-do;">Debian packages</ulink> web page</para>
690 osamu 8636 </listitem>
691     <listitem>
692 osamu 8703 <para>the <ulink url="&packages-qa-do;">Debian Package Tracking System</ulink> web page</para>
693 osamu 8636 </listitem>
694     </itemizedlist>
695 osamu 8601 <para>
696     If the package already exists, well, install it! :-) If it happens to be
697 osamu 8703 <emphasis role="strong">orphaned</emphasis> (that is, if its
698     maintainer is set to <ulink url="&qa-do;">Debian QA Group</ulink>),
699     you may be able to pick it up if it's still available. You may also
700     adopt a package whose maintainer has filed a Request for Adoption
701 osamu 8676 (<emphasis role="strong">RFA</emphasis>).<footnote> <para>See
702 osamu 8703 <ulink url="&devref-adopt;">Debian Developer's Reference 5.9.5.
703     "Adopting a package"</ulink>.</para> </footnote>
704 osamu 8601 </para>
705     <para>
706 osamu 8648 There are several package ownership status resources.
707 osamu 8601 </para>
708     <itemizedlist>
709     <listitem>
710 osamu 8636 <para> <ulink url="&wnpp-do;">Work-Needing and Prospective Packages</ulink> </para>
711 osamu 8601 </listitem>
712     <listitem>
713 taffit-guest 8665 <para> <ulink url="&wnpp-bts;">Debian Bug report logs: Bugs in pseudo-package <systemitem role="package">wnpp</systemitem> in <literal>unstable</literal></ulink> </para>
714 osamu 8601 </listitem>
715     <listitem>
716 osamu 8636 <para> <ulink url="&wnpp-dn;">Debian Packages that Need Lovin'</ulink> </para>
717 osamu 8601 </listitem>
718 osamu 8636 <listitem>
719 taffit-guest 8665 <para> <ulink url="&wnpp-debtags;">Browse <systemitem role="package">wnpp</systemitem> bugs based on debtags</ulink> </para>
720 osamu 8636 </listitem>
721 osamu 8601 </itemizedlist>
722     <para>
723     As a side note, it's important to point out that Debian already has packages
724     for most kinds of programs, and the number of packages already in the Debian
725     archive is much larger than that of contributors with upload rights. Thus,
726     contributions to packages already in the archive are far more appreciated (and
727     more likely to receive sponsorship) by other developers <footnote><para> Having
728 osamu 8703 said that, there will of course always be new programs that are worth
729     packaging. </para> </footnote>. You can contribute in various ways.
730 osamu 8601 </para>
731     <itemizedlist>
732     <listitem>
733     <para>
734     taking over orphaned, yet actively used, packages
735     </para>
736     </listitem>
737     <listitem>
738     <para>
739 osamu 8628 joining <ulink url="&teams;">packaging teams</ulink>
740 osamu 8601 </para>
741     </listitem>
742     <listitem>
743     <para>
744     triaging bugs of very popular packages
745     </para>
746     </listitem>
747     <listitem>
748     <para>
749 osamu 8636 preparing <ulink url="&devref-nmu;">QA or NMU uploads</ulink>
750 osamu 8601 </para>
751     </listitem>
752     </itemizedlist>
753     <para>
754     If you are able to adopt the package, get the sources (with something like
755     <literal>apt-get source <replaceable>packagename</replaceable></literal>) and
756     examine them. This document unfortunately doesn't include comprehensive
757     information about adopting packages. Thankfully you shouldn't have a hard time
758     figuring out how the package works since someone has already done the initial
759 osamu 8703 setup for you. Keep reading, though; a lot of the advice below will still be
760 osamu 8601 applicable for your case.
761     </para>
762     <para>
763     If the package is new, and you decide you'd like to see it in Debian, proceed
764     as follows:
765     </para>
766     <itemizedlist>
767     <listitem>
768     <para>
769 osamu 8703 First, you must know that the program works, and have tried it for some time to
770 osamu 8601 confirm its usefulness.
771     </para>
772     </listitem>
773     <listitem>
774     <para>
775 osamu 8703 You must check that no one else is already working on the package on the
776 osamu 8636 <ulink url="&wnpp-do;">Work-Needing and Prospective Packages</ulink> site.
777     If no one else is working on it, file an ITP (Intent
778 osamu 8601 To Package) bug report to the <systemitem role="package">wnpp</systemitem>
779     pseudo-package using <command>reportbug</command>. If someone's already on it,
780     contact them if you feel you need to. If not - find another interesting
781 osamu 8703 program that nobody is maintaining.
782 osamu 8601 </para>
783     </listitem>
784     <listitem>
785     <para>
786 osamu 8703 The software <emphasis role="strong">must have a license</emphasis>.
787 osamu 8601 </para>
788     <itemizedlist>
789     <listitem>
790     <para>
791 osamu 8703 For the <literal>main</literal> section, Debian Policy requires it
792     <emphasis role="strong">to be fully compliant with the Debian Free Software
793     Guidelines</emphasis> (<ulink url="&dfsg;">DFSG</ulink>)
794     and <emphasis role="strong">not to require a package outside of
795     <literal>main</literal></emphasis> for compilation or execution. This
796     is the desired case.
797 osamu 8601 </para>
798     </listitem>
799     <listitem>
800     <para>
801 osamu 8703 For the <literal>contrib</literal> section, it must comply with the
802 osamu 8601 DFSG but it may require a package outside of <literal>main</literal> for
803     compilation or execution.
804     </para>
805     </listitem>
806     <listitem>
807     <para>
808 osamu 8703 For the <literal>non-free</literal> section, it may be non-compliant
809     with the DFSG but it <emphasis role="strong">must be distributable</emphasis>.
810 osamu 8601 </para>
811     </listitem>
812 osamu 8734 <listitem>
813 osamu 8601 <para>
814 osamu 8730 If you are unsure about where it should go, post the license text on
815     <ulink url="&debian-legal-ldo;">debian-legal@lists.debian.org</ulink>
816 osamu 8601 and ask for advice.
817     </para>
818 osamu 8734 </listitem>
819     </itemizedlist>
820 osamu 8730 <listitem>
821     <para>
822     The program should <emphasis role="strong">not</emphasis> introduce security
823 osamu 8734 and maintenance concerns to the Debian system.
824 osamu 8730 </para>
825 osamu 8601 </listitem>
826 osamu 8730 <itemizedlist>
827 osamu 8601 <listitem>
828     <para>
829 osamu 8734 The program should be well documented and its code needs to be understandable
830     (i.e. not obfuscated).
831 osamu 8601 </para>
832     </listitem>
833     <listitem>
834     <para>
835 osamu 8734 You should contact the program's author(s) to check if they agree with packaging it
836     and are amicable to Debian. It is important to be able to consult with the author(s)
837     in case of any problems with the program, so don't try to package
838     unmaintained software.
839 osamu 8601 </para>
840     </listitem>
841     <listitem>
842     <para>
843 osamu 8734 The program certainly should <emphasis role="strong">not</emphasis> run setuid
844     root, or even better, it shouldn't need to be setuid or setgid to anything.
845 osamu 8601 </para>
846     </listitem>
847     <listitem>
848     <para>
849 osamu 8734 The program should not be a daemon, or go in an
850     <filename>*/sbin</filename> directory, or open a port as root.
851 osamu 8601 </para>
852     </listitem>
853     </itemizedlist>
854 osamu 8730 </listitem>
855     </itemizedlist>
856 osamu 8601 <para>
857 osamu 8734 Of course, the last one is just a safety measures, and intended to save you from
858 osamu 8703 enraging users if you do something wrong in some setuid daemon... When you gain
859     more experience in packaging, you'll be able to package such software.
860 osamu 8601 </para>
861 osamu 8730 <para>
862     As a new maintainer, you are encouraged to get some experience in packaging
863     with easier packages and discouraged from creating complicated packages.
864     </para>
865     <itemizedlist>
866     <listitem><para>Simple packages</para>
867     <itemizedlist>
868     <listitem><para>single binary package, arch = all (collection of data such as wallpaper graphics)</para></listitem>
869     <listitem><para>single binary package, arch = all (executable written in the POSIX shell language)</para></listitem>
870     <listitem><para>single binary package, arch = all (executable written in interpreter languages)</para></listitem>
871     </itemizedlist>
872     </listitem>
873     <listitem><para>Intermediate complexity packages</para>
874     <itemizedlist>
875 osamu 8735 <listitem><para>single binary package, arch = any (executable compiled from a C source with <xref linkend="simplemake"/>)</para></listitem>
876     <listitem><para>single binary package, arch = any (executable compiled from a C source with <xref linkend="portable"/>)</para></listitem>
877 osamu 8730 <listitem><para>multiple binary packages, arch = any + all (executable package + documentation package)</para></listitem>
878     <listitem><para>upstream source in a format other than <filename>tar.gz</filename> or <filename>tar.bz2</filename></para></listitem>
879     <listitem><para>upstream source containing undistributable contents</para></listitem>
880     </itemizedlist>
881     </listitem>
882     <listitem><para>High complexity packages</para>
883     <itemizedlist>
884     <listitem><para>interpreter module packages used by other packages</para></listitem>
885     <listitem><para>multiple binary packages containing library package</para></listitem>
886 osamu 8735 <listitem><para>generic library package used by other packages</para></listitem>
887     <listitem><para>source package with multiple upstream sources</para></listitem>
888     <listitem><para>kernel module packages</para></listitem>
889 osamu 8730 <listitem><para>kernel patch packages</para></listitem>
890 osamu 8735 <listitem><para>any package with non-trivial maintainer scripts</para></listitem>
891 osamu 8730 </itemizedlist>
892     </listitem>
893     </itemizedlist>
894     <para>
895 osamu 8734 Packaging high complexity packages is not too hard, but it requires a bit more
896     knowledge. You should seek specific guidances for every complexities. For example, some interpreter languages have their policy.
897 osamu 8730 </para>
898 osamu 8734 <itemizedlist>
899     <listitem><para><ulink url="&policy-perl;">Perl policy</ulink></para></listitem>
900     <listitem><para><ulink url="&policy-python;">Python policy</ulink></para></listitem>
901     <listitem><para><ulink url="&policy-java;">Java policy</ulink></para></listitem>
902     </itemizedlist>
903 osamu 8601 </section>
904     <section id="getit"><title>Get the program, and try it out</title>
905     <para>
906 osamu 8703 So the first thing to do is to find and download the original source code.
907     Presumably you already have the source file that you picked up at the
908 osamu 8601 author's homepage. Sources for free Unix programs usually come in
909 osamu 8703 <command>tar</command>+<command>gzip</command> format with the extension
910 osamu 8709 <filename>.tar.gz</filename>,
911 osamu 8703 <command>tar</command>+<command>bzip2</command> format with the extension
912 osamu 8709 <filename>.tar.bz2</filename>, or
913     <command>tar</command>+<command>xz</command> format with the extension
914 osamu 8715 <filename>.tar.xz</filename>. These usually contain a directory called
915 osamu 8725 <filename><replaceable>package</replaceable>-<replaceable>version</replaceable></filename>
916 osamu 8703 with all the sources inside.
917 osamu 8601 </para>
918     <para>
919 osamu 8703 If the latest version of the source is available through a VCS such as Git,
920     Subversion, or CVS, you need to get it with <literal>git
921 osamu 8621 clone</literal>, <literal>svn co</literal>, or <literal>cvs co</literal> and
922 osamu 8703 repack it into <command>tar</command>+<command>gzip</command> format yourself
923     by using the <literal>--exclude-vcs</literal> option.
924 osamu 8601 </para>
925     <para>
926     If your program's source comes as some other sort of archive (for instance, the
927     filename ends in <filename>.Z</filename> or
928     <filename>.zip</filename><footnote><para> You can identify the archive format
929     using the <command>file</command> command when the file extension is not
930 osamu 8703 enough. </para> </footnote>), you should also unpack it with the
931     appropriate tools and repack it.
932 osamu 8601 </para>
933     <para>
934 osamu 8703 As an example, I'll use a program called <command>gentoo</command>, a GTK+
935 osamu 8648 file manager.
936 osamu 8703 <footnote><para> This program is already packaged. The
937 osamu 8648 <ulink url="&gentoo-package;">current version</ulink> uses Autotools as its
938 osamu 8703 build structure and is substantially different from the following examples,
939     which were based on version 0.9.12.</para>
940 osamu 8648 </footnote>
941 osamu 8601 </para>
942     <para>
943     Create a subdirectory under your home directory named
944     <filename>debian</filename> or <filename>deb</filename> or anything you find
945     appropriate (e.g. just <filename>~/gentoo</filename> would do fine in this
946     case). Place the downloaded archive in it, and extract it (with <literal>tar
947 osamu 8703 xzf gentoo-0.9.12.tar.gz</literal>). Make sure there are no warning
948     messages, even <emphasis>irrelevant</emphasis> ones, because other
949     people's unpacking tools may or may not ignore these anomalies, so they
950 taffit-guest 8717 may have problems unpacking them. Your shell command line may look
951 osamu 8703 something like this:
952 osamu 8601 </para>
953     <screen>
954     $ mkdir ~/gentoo ; cd ~/gentoo
955     $ wget http://<replaceable>www.example.org</replaceable>/gentoo-0.9.12.tar.gz
956     $ tar xvzf gentoo-0.9.12.tar.gz
957     $ ls -F
958     gentoo-0.9.12/
959     gentoo-0.9.12.tar.gz
960     </screen>
961     <para>
962     Now you have another subdirectory, called <filename>gentoo-0.9.12</filename>.
963     Change to that directory and <emphasis>thoroughly</emphasis> read the provided
964     documentation. Usually there are files named <filename>README*</filename>,
965     <filename>INSTALL*</filename>, <filename>*.lsm</filename> or
966 osamu 8703 <filename>*.html</filename>. You must find instructions on how to
967 osamu 8601 compile and install the program (most probably they'll assume you want to
968 osamu 8703 install to the <filename>/usr/local/bin</filename> directory; you won't be doing
969 taffit-guest 8665 that, but more on that later in <xref linkend="destdir"/>).
970 osamu 8601 </para>
971     <para>
972 osamu 8716 You should start packaging with a completely clean (pristine) source directory,
973     or simply with freshly unpacked sources.
974     </para>
975     </section>
976     <section id="simplemake"><title>Simple build systems</title>
977     <para>
978 osamu 8703 Simple programs come with a <filename>Makefile</filename> and can
979     be compiled just by invoking <literal>make</literal>.<footnote><para>
980 osamu 8621 Many modern programs come with a script <filename>configure</filename> which
981 osamu 8703 when executed creates a <filename>Makefile</filename> customized for
982     your system.</para></footnote> Some of them support
983     <literal>make check</literal>, which runs included self-tests. Installation
984 osamu 8601 to the destination directories is usually done with <literal>make
985     install</literal>.
986     </para>
987     <para>
988     Now try to compile and run your program, to make sure it works properly and
989     doesn't break something else while it's installing or running.
990     </para>
991     <para>
992     Also, you can usually run <literal>make clean</literal> (or better
993     <literal>make distclean</literal>) to clean up the build directory. Sometimes
994     there's even a <literal>make uninstall</literal> which can be used to remove
995     all the installed files.
996     </para>
997     </section>
998 osamu 8709 <section id="portable"><title>Popular portable build systems</title>
999 osamu 8601 <para>
1000 osamu 8714 A lot of free software programs are written in the <ulink url="&c-program;">C</ulink> and
1001 osamu 8716 <ulink url="&cxx;">C++</ulink> languages. Many of these use Autotools or
1002     CMake to make them portable across different platforms. These build tools need
1003     to be used to generate the <filename>Makefile</filename> and other
1004     required source files first. Then, such programs are built using the usual
1005 osamu 8703 <literal>make; make install</literal>.
1006 osamu 8601 </para>
1007     <para>
1008 osamu 8703 <ulink url="&gnu-build-system;">Autotools</ulink> is the GNU build
1009     system comprising <ulink url="&autoconf;">Autoconf</ulink>,
1010     <ulink url="&automake;">Automake</ulink>,
1011     <ulink url="&libtool;">Libtool</ulink>, and
1012     <ulink url="&gettext;">gettext</ulink>. You can recognize
1013 osamu 8601 such sources by the <filename>configure.ac</filename>,
1014     <filename>Makefile.am</filename>, and <filename>Makefile.in</filename> files.
1015 osamu 8716 <footnote><para>Autotools is too big to deal in this small tutorial. This
1016 taffit-guest 8722 section is meant to provide keywords and references only. Please make sure to read the
1017 osamu 8716 <ulink url="&autotools-tutorial;">Autotools Tutorial</ulink> and
1018     <ulink url="&autotools-readme;"/>, if you need to use it.</para></footnote>
1019 osamu 8601 </para>
1020     <para>
1021 osamu 8703 The first step of the Autotools workflow is usually that upstream runs
1022     <literal>autoreconf -i -f</literal> in the source directory and
1023     distributes the generated files along with the source.
1024 osamu 8601 </para>
1025     <screen>
1026     configure.ac-----+-&gt; autoreconf -+-&gt; configure
1027     Makefile.am -----+ | +-&gt; Makefile.in
1028     src/Makefile.am -+ | +-&gt; src/Makefile.in
1029     | +-&gt; config.h.in
1030     automake
1031     aclocal
1032     aclocal.m4
1033     autoheader
1034     </screen>
1035     <para>
1036     Editing <filename>configure.ac</filename> and <filename>Makefile.am</filename>
1037     files requires some knowledge of <command>autoconf</command> and
1038     <command>automake</command>. See <literal>info autoconf</literal> and
1039     <literal>info automake</literal>.
1040     </para>
1041     <para>
1042 osamu 8703 The second step of the Autotools workflow is usually that the user obtains this
1043 osamu 8601 distributed source and runs <literal>./configure &amp;&amp; make</literal> in
1044 osamu 8703 the source directory to compile the program into a
1045 taffit-guest 8722 <command><replaceable>binary</replaceable></command> executable.
1046 osamu 8601 </para>
1047     <screen>
1048     Makefile.in -----+ +-&gt; Makefile -----+-&gt; make -&gt; <replaceable>binary</replaceable>
1049     src/Makefile.in -+-&gt; ./configure -+-&gt; src/Makefile -+
1050     config.h.in -----+ +-&gt; config.h -----+
1051     |
1052     config.status -+
1053     config.guess --+
1054     </screen>
1055     <para>
1056 osamu 8703 You can change many things in the <filename>Makefile</filename>; for
1057     instance you can change the default location for file installation
1058     using the option <command>./configure --prefix=/usr</command>.
1059 osamu 8601 </para>
1060     <para>
1061     Although it is not required, updating the <filename>configure</filename> and
1062 osamu 8703 other files with <literal>autoreconf -i -f</literal> may improve
1063 osamu 8601 the compatibility of the source.
1064 osamu 8646 <footnote><para>You can automate this by using
1065 taffit-guest 8665 <systemitem role="package">dh-autoreconf</systemitem> package.
1066 osamu 8646 See <xref linkend="customrules"/>.</para></footnote>
1067 osamu 8601 </para>
1068     <para>
1069 osamu 8636 <ulink url="&cmake;">CMake</ulink> is an alternative
1070 osamu 8703 build system. You can recognize such sources by the
1071 osamu 8601 <filename>CMakeLists.txt</filename> file.
1072     </para>
1073     </section>
1074     <section id="namever"><title>Package name and version</title>
1075     <para>
1076 osamu 8718 If the upstream source comes as <filename>gentoo-0.9.12.tar.gz</filename>, you can
1077     consider
1078 osamu 8716 <emphasis role="strong">package name</emphasis> to be <literal>gentoo</literal> and
1079 osamu 8718 <emphasis role="strong">upstream version</emphasis> to be <literal>0.9.12</literal>.
1080     These are used in the <filename>debian/changelog</filename> file described later in
1081     <xref linkend="changelog"/>, too.
1082     </para>
1083     <para>
1084 osamu 8716 Although this simple approach works most of the times, you may need to adjust
1085     <emphasis role="strong">package name</emphasis> and
1086 osamu 8718 <emphasis role="strong">upstream version</emphasis> by renaming the upstream
1087 taffit-guest 8722 source to follow the Debian Policy and the existing convention.
1088 osamu 8601 </para>
1089     <para>
1090 osamu 8718 You must choose the <emphasis role="strong">package name</emphasis>
1091     to consist only of lower case letters (<literal>a-z</literal>), digits
1092 osamu 8716 (<literal>0-9</literal>), plus (<literal>+</literal>) and minus
1093     (<literal>-</literal>) signs, and periods (<literal>.</literal>). It must be
1094 osamu 8718 at least two characters long, must start with an alphanumeric character, and
1095     must not be the same as existing ones.
1096 osamu 8738 It is good idea to keep its length within 30 characters.
1097     <footnote><para>The package name field length of <command>aptitude</command> is 30. For more than 90% of packages, the package name is less than 24 characters.</para></footnote>
1098 osamu 8601 </para>
1099 osamu 8716 <!--
1100     Osamu's archive stat (2011-04-23, sid, kfreebsd-amd64):
1101     === stat for package name string length ===
1102     11 1947 36.9% mode
1103     14 1717 54.7% 50% median
1104     23 611 91.0% 90%
1105     32 89 99.0% 99%
1106     41 12 99.9% 99.9%
1107     52 1 100.0%
1108     Previous 20 chars is becoming too short for 17% of packages
1109 osamu 8718 Default aptitude setting display up to 30 chars (98.3%).
1110 osamu 8716 -->
1111 osamu 8601 <para>
1112 osamu 8718 If upstream source uses generic words such as <literal>test-suite</literal> as
1113     its name, it is good idea to rename it not to contaminate name space for the
1114     package name and to identify its contents explicitly.
1115     <footnote><para>If you follow the
1116 osamu 8725 <ulink url="&devref-newpackage;">Debian Developer's Reference 5.1. "New packages"</ulink>,
1117 taffit-guest 8722 the ITP process will usually catch this kind of issues.</para></footnote>
1118 osamu 8718 </para>
1119     <para>
1120 osamu 8716 You should choose the <emphasis role="strong">upstream version</emphasis>
1121 osamu 8718 to consist only of
1122     alphanumerics (<literal>0-9A-Za-z</literal>), plus (<literal>+</literal>),
1123 taffit-guest 8722 tildes (<literal>~</literal>), and periods (<literal>.</literal>). It must
1124 osamu 8716 start with a digit (<literal>0-9</literal>). <footnote><para>This stricter
1125     rule should help you avoid confusing file names.</para></footnote>
1126 osamu 8718 It is good idea to keep its length within 8 characters if possible.
1127 osamu 8738 <footnote><para>The version field length of <command>aptitude</command> is 10. The Debian revision with preceding hyphen usually consumes 2. For more than 80% of packages, the upstream version is less than 8 charactes and the Debian revision is less than 2 characters. For more than 90% of packages, the upstream version is less than 10 charactes and the Debian revision is less than 3 characters.</para></footnote>
1128 osamu 8601 </para>
1129 osamu 8716 <!--
1130 osamu 8718 Osamu's archive stat (2011-04-23, sid, kfreebsd-amd64):
1131     === stat for upstream version string length ===
1132     5 9765 60.2% 50% median and mode
1133     6 3765 73.3%
1134     7 2789 82.9%
1135     8 1158 86.9%
1136     9 501 88.6%
1137     10 773 91.3% 90%
1138     18 55 99.1% 99%
1139     27 11 99.9% 99.9
1140     35 6 100.0%
1141     === stat for debian revision string length ===
1142     1 22556 83.3% 50% median and mode
1143     2 1106 87.2%
1144     3 1312 91.7% 90%
1145     4 2127 99.1% 99%
1146     7 14 99.9% 99.9%
1147 osamu 8716
1148 osamu 8718 aptitude display 10 = 8char for up + 1char (for -) + 1char for deb
1149     90chars as max for file name of binary debs (package+up+deb+arch+.deb)
1150 osamu 8716 -->
1151 osamu 8601 <para>
1152 osamu 8718 If the upstream software does not use normal version system like
1153     <literal>2.30.32</literal> but uses some kind of date such as
1154 taffit-guest 8722 <literal>09Oct23</literal>, a random codename string or a VCS hash value as a part
1155 osamu 8718 of version, make sure to remove them from the
1156     <emphasis role="strong">upstream version</emphasis>. Such information can be
1157     recorded in the <filename>debian/changelog</filename> file. If you need to
1158     invent a version string, use the <literal>YYYYMMDD</literal> format such as
1159     <literal>20110429</literal> as upstream version. This ensures that
1160     <command>dpkg</command> properly sees later versions as upgrades.
1161 osamu 8601 </para>
1162 osamu 8718 <para>
1163     Version strings can be compared with <citerefentry> <refentrytitle>dpkg</refentrytitle> <manvolnum>1</manvolnum> </citerefentry> as the following.
1164     </para>
1165     <screen>
1166     $ dpkg --compare-versions <replaceable>ver1</replaceable> <replaceable>op</replaceable> <replaceable>ver2</replaceable>
1167     </screen>
1168     <para>
1169 taffit-guest 8722 The version comparison rule can be summarized as the following.
1170 osamu 8718 </para>
1171     <itemizedlist>
1172     <listitem><para>The strings are compared from the head to the tail.</para></listitem>
1173     <listitem><para>Alphabets are larger than numbers.</para></listitem>
1174     <listitem><para>Numbers are compared as the integer.</para></listitem>
1175     <listitem><para>Alphabets are compared in the ASCII code order.</para></listitem>
1176 taffit-guest 8722 <listitem><para>There are some special rules for periods (<literal>.</literal>), plus (<literal>+</literal>) and tildes (<literal>~</literal>) as the followings.</para>
1177 osamu 8718 <para>
1178     <literal>0.0</literal> &lt;
1179     <literal>0.5</literal> &lt;
1180     <literal>0.10</literal> &lt;
1181     <literal>0.99</literal> &lt;
1182     <literal>1</literal> &lt;
1183     <literal>1.0~rc1</literal> &lt;
1184     <literal>1.0</literal> &lt;
1185     <literal>1.0+b1</literal> &lt;
1186     <literal>1.0+nmu1</literal> &lt;
1187     <literal>1.1</literal> &lt;
1188     <literal>2.0</literal>
1189     </para>
1190     </listitem>
1191     </itemizedlist>
1192     <para>
1193     One of the tricky case happens when the upstream releases
1194     <filename>gentoo-0.9.12-ReleaseCandidate-99.tar.gz</filename> as the
1195     pre-release of <filename>gentoo-0.9.12.tar.gz</filename>. You need to make
1196     sure that the upgrade works properly by renaming the upstream source to
1197     <filename>gentoo-0.9.12~rc99.tar.gz</filename>.
1198     </para>
1199 osamu 8601 </section>
1200 osamu 8726 <section id="dh-make"><title>Setting up <command>dh_make</command></title>
1201 osamu 8601 <para>
1202 osamu 8703 Set up the shell environment variables <literal>$DEBEMAIL</literal> and
1203     <literal>$DEBFULLNAME</literal> so that various Debian maintenance
1204 taffit-guest 8717 tools recognize your email address and name to use for packages. <footnote><para> The
1205 osamu 8601 following text assumes you are using Bash as your login shell. If you use
1206 osamu 8703 some other login shell such as Z shell, use their corresponding
1207 taffit-guest 8717 configuration files instead of <filename>~/.bashrc</filename>. </para> </footnote>
1208 osamu 8601 </para>
1209     <screen>
1210     $ cat &gt;&gt;~/.bashrc &lt;&lt;EOF
1211     DEBEMAIL=your.email.address@example.org
1212     DEBFULLNAME=Firstname Lastname
1213     export DEBEMAIL DEBFULLNAME
1214     EOF
1215 osamu 8726 $ . ~/.bashrc
1216 osamu 8601 </screen>
1217 osamu 8726 </section>
1218     <section id="non-native-dh-make"><title>Initial non-native Debian package</title>
1219 osamu 8601 <para>
1220 osamu 8726 Normal Debian packages are non-native Debian packages made from upstream
1221     programs. If you wish to create a non-native Debian package of an upstream
1222     source <filename>gentoo-0.9.12.tar.gz</filename>, you can create an initial
1223     non-native Debian package for it by issuing the <command>dh_make</command>
1224     command as follows.
1225 osamu 8601 </para>
1226     <screen>
1227 osamu 8726 $ cd ~/gentoo
1228     $ wget http://example.org/gentoo-0.9.12.tar.gz
1229     $ tar -xvzf gentoo-0.9.12.tar.gz
1230     $ cd gentoo-0.9.12
1231 osamu 8601 $ dh_make -f ../gentoo-0.9.12.tar.gz
1232     </screen>
1233     <para>
1234     Of course, replace the filename with the name of your original source archive.
1235     <footnote><para> If the upstream source provides the
1236     <filename>debian</filename> directory and its contents, run the
1237 osamu 8703 <command>dh_make</command> command with the extra option
1238     <literal>--addmissing</literal>. The new source <literal>3.0 (quilt)</literal> format is
1239     robust enough not to break even for these packages. You may need to update the contents
1240 osamu 8601 provided by the upstream for your Debian package. </para> </footnote> See
1241     <citerefentry> <refentrytitle>dh_make</refentrytitle> <manvolnum>1</manvolnum>
1242     </citerefentry> for details.
1243     </para>
1244     <para>
1245 osamu 8703 You should see some output asking you what sort of package you want
1246 osamu 8725 to create. Gentoo is a single binary package - it creates only one binary package, i.e,
1247 osamu 8719 one <filename>.deb</filename> file - so we will select the first option
1248 osamu 8703 (with the <literal>s</literal> key), check the information on the screen, and
1249 osamu 8601 confirm by pressing <literal><replaceable>ENTER</replaceable></literal>.
1250 osamu 8719 <footnote><para> There are several choices here: <literal>s</literal> for
1251 osamu 8725 Single binary package, <literal>i</literal> for arch-Independent package, <literal>m</literal> for
1252     Multiple binary packages, <literal>l</literal> for Library package, <literal>k</literal> for
1253 osamu 8719 Kernel module package, <literal>n</literal> for kernel patch package, and <literal>b</literal>
1254     for <systemitem role="package">cdbs</systemitem> package. This document focuses on the
1255 osamu 8703 use of the <command>dh</command> command (from the package
1256 osamu 8725 <systemitem role="package">debhelper</systemitem>) to create a single binary package,
1257 osamu 8703 but also touches on how to use it for arch-independent or
1258 osamu 8725 multiple binary packages. The package
1259 osamu 8703 <systemitem role="package">cdbs</systemitem> offers an alternative packaging script
1260     infrastructure to the <command>dh</command> command and is outside the scope of
1261 osamu 8601 this document. </para> </footnote>
1262     </para>
1263     <para>
1264 osamu 8703 This execution of <command>dh_make</command> creates a copy of the upstream
1265     tarball as <filename>gentoo_0.9.12.orig.tar.gz</filename> in the
1266 osamu 8601 parent directory to accommodate the creation of the non-native Debian source
1267 osamu 8703 package with the name <filename>debian.tar.gz</filename> later.
1268 osamu 8601 </para>
1269     <screen>
1270     $ cd ~/gentoo ; ls -F
1271     gentoo-0.9.12/
1272     gentoo-0.9.12.tar.gz
1273     gentoo_0.9.12.orig.tar.gz
1274     </screen>
1275     <para>
1276 osamu 8703 Please note two key features of this filename
1277     <filename>gentoo_0.9.12.orig.tar.gz</filename>:
1278 osamu 8601 </para>
1279     <itemizedlist>
1280     <listitem>
1281     <para>
1282 osamu 8703 Package name and version are separated by the character <literal>_</literal>
1283 osamu 8601 (underscore).
1284     </para>
1285     </listitem>
1286     <listitem>
1287     <para>
1288 osamu 8703 The string <filename>.orig</filename> is inserted before the
1289 osamu 8601 <filename>.tar.gz</filename>.
1290     </para>
1291     </listitem>
1292     </itemizedlist>
1293     <para>
1294     You should also notice that many template files are created in the source under
1295 osamu 8703 the <filename>debian</filename> directory. These will be explained in
1296     <xref linkend="dreq"/> and <xref linkend="dother"/>. You should also understand
1297     that packaging cannot be a fully automated process. You will need to modify the upstream
1298     source for Debian (see <xref linkend="modify"/>). After this, you need to
1299     use the proper methods for building Debian packages (<xref linkend="build"/>),
1300     testing them (<xref linkend="checkit"/>), and uploading them (<xref linkend="upload"/>).
1301     All the steps will be explained.
1302 osamu 8601 </para>
1303     <para>
1304     If you accidentally erased some template files while working on them, you can
1305     recover them by running <command>dh_make</command> with the
1306     <literal>--addmissing</literal> option again in a Debian package source tree.
1307     </para>
1308     <para>
1309     Updating an existing package may get complicated since it may be using older
1310 osamu 8703 techniques. While learning the basics, please stick to creating a fresh
1311     package; further explanations are given in <xref linkend="update"/>.
1312 osamu 8601 </para>
1313 osamu 8726 <para>
1314 osamu 8728 Please note that the source file does not need to contain any build system
1315     discussed in <xref linkend="simplemake"/> and <xref linkend="portable"/>. It
1316     could be just a collection of graphics data etc. Installation of files may be
1317     enabled by <systemitem role="package">debhelper</systemitem> configuration
1318     files such as <filename>debian/install</filename> (see
1319     <xref linkend="install"/>) only.
1320 osamu 8726 </para>
1321 osamu 8601 </section>
1322 osamu 8726 <section id="native-dh-make"><title>Initial native Debian package</title>
1323     <para>
1324     Debian native packages are simpler to manage if they contain source files you
1325     manage only for Debian, possibly only for local uses. If you have source
1326     files in <filename>~/mypackage-1.0</filename>, you can create an initial native
1327     Debian package for it by issuing the <command>dh_make</command> command as
1328     follows.
1329     </para>
1330     <screen>
1331     $ cd ~/mypackage-1.0
1332     $ dh_make --native
1333     </screen>
1334     <para>
1335     Then the <filename>debian</filename> directory and its contents are created
1336     just like <xref linkend="non-native-dh-make"/>. This does not create a tarball
1337 osamu 8727 since this is a native Debian package. But that is the only difference.
1338     The rest of the packaging activities are practically the same.
1339 osamu 8726 </para>
1340     </section>
1341 osamu 8601 </chapter>
1342     <chapter id="modify"><title>Modifying the source</title>
1343     <para>
1344     Please note that there isn't space here to go into <emphasis>all</emphasis> the
1345     details of fixing upstream sources, but here are some basic steps and problems
1346     people often run across.
1347     </para>
1348 osamu 8709 <section id="quiltrc"><title>Setting up <command>quilt</command></title>
1349 osamu 8601 <para>
1350 osamu 8709 The program <command>quilt</command> offers a basic method for recording
1351     modifications to the upstream source for Debian packaging. It's
1352     useful to have a slightly customized default, so let's create an alias
1353     <command>dquilt</command> for Debian packaging by adding the following
1354     line to <filename>~/.bashrc</filename>.
1355 osamu 8601 </para>
1356     <screen>
1357 osamu 8688 alias dquilt="quilt --quiltrc=~/.quiltrc-dpkg"
1358 osamu 8646 </screen>
1359     <para>
1360     Then let's create <filename>~/.quiltrc-dpkg</filename> as follows.
1361     </para>
1362     <screen>
1363 osamu 8601 d=. ; while [ ! -d $d/debian -a `readlink -e $d` != / ]; do d=$d/..; done
1364     if [ -d $d/debian ] &amp;&amp; [ -z $QUILT_PATCHES ]; then
1365 osamu 8709 # if in Debian packaging tree with unset $QUILT_PATCHES
1366 osamu 8649 QUILT_PATCHES="debian/patches"
1367     QUILT_PATCH_OPTS="--reject-format=unified"
1368     QUILT_DIFF_ARGS="-p ab --no-timestamps --no-index --color=auto"
1369     QUILT_REFRESH_ARGS="-p ab --no-timestamps --no-index"
1370     QUILT_COLORS="diff_hdr=1;32:diff_add=1;34:diff_rem=1;31:diff_hunk=1;33:diff_ctx=35:diff_cctx=33"
1371 osamu 8601 if ! [ -d $d/debian/patches ]; then mkdir $d/debian/patches; fi
1372     fi
1373     </screen>
1374     <para>
1375     See <citerefentry> <refentrytitle>quilt</refentrytitle>
1376     <manvolnum>1</manvolnum> </citerefentry> and
1377 osamu 8709 <ulink url="&quilt-pdf;">quilt.pdf</ulink> on how to use
1378 osamu 8601 <command>quilt</command>.
1379     </para>
1380     </section>
1381 osamu 8709 <section id="fixupstream"><title>Fixing upstream bugs</title>
1382 osamu 8601 <para>
1383     Let's assume you find an error in the upstream <filename>Makefile</filename>
1384 osamu 8709 as follows where <literal>install: gentoo</literal> should have been
1385 osamu 8601 <literal>install: gentoo-target</literal>.
1386     </para>
1387     <screen>
1388     install: gentoo
1389     install ./gentoo $(BIN)
1390     install icons/* $(ICONS)
1391     install gentoorc-example $(HOME)/.gentoorc
1392     </screen>
1393     <para>
1394 osamu 8709 Let's fix this and record it with the <command>dquilt</command> command as
1395 osamu 8601 <filename>fix-gentoo-target.patch</filename>. <footnote><para> The
1396 osamu 8709 <filename>debian/patches</filename> directory should exist now if you ran
1397 osamu 8601 <command>dh_make</command> as described before. This example operation creates
1398 osamu 8709 it just in case you are updating an existing package. </para> </footnote>
1399 osamu 8601 </para>
1400     <screen>
1401     $ mkdir debian/patches
1402 osamu 8646 $ dquilt new fix-gentoo-target.patch
1403     $ dquilt add Makefile
1404 osamu 8601 </screen>
1405     <para>
1406     You change the <filename>Makefile</filename> file as follows.
1407     </para>
1408     <screen>
1409     install: gentoo-target
1410     install ./gentoo $(BIN)
1411     install icons/* $(ICONS)
1412     install gentoorc-example $(HOME)/.gentoorc
1413     </screen>
1414     <para>
1415 osamu 8709 Ask <command>dquilt</command> to generate the patch to create
1416 osamu 8601 <filename>debian/patches/fix-gentoo-target.patch</filename> and add its
1417 osamu 8621 description following <ulink url="&dep3;">DEP-3: Patch Tagging Guidelines</ulink>.
1418 osamu 8601 </para>
1419     <screen>
1420 osamu 8646 $ dquilt refresh
1421     $ dquilt header -e
1422 osamu 8601 ... describe patch
1423     </screen>
1424     </section>
1425 osamu 8709 <section id="destdir"><title>Installation of files to their destination</title>
1426 osamu 8601 <para>
1427 osamu 8709 Most third-party software installs itself in the <filename>/usr/local</filename>
1428     directory hierarchy. On Debian this is reserved for private use
1429     by the system administrator, so packages must not use directories such
1430     as <filename>/usr/local/bin</filename> but should instead use system
1431     directories such as <filename>/usr/bin</filename>, obeying the
1432     <ulink url="&fhs;">Filesystem Hierarchy Standard</ulink> (FHS).
1433 osamu 8601 </para>
1434     <para>
1435     Normally, <citerefentry> <refentrytitle>make</refentrytitle>
1436     <manvolnum>1</manvolnum> </citerefentry> is used to automate building the
1437 osamu 8709 program, and executing <literal>make install</literal> installs programs
1438     directly to the desired destination (following the
1439     <literal>install</literal> target in the
1440     <filename>Makefile</filename>). In order for Debian to provide
1441     pre-built installable packages, it modifies the build system to install
1442     programs into a file tree image created under a temporary directory
1443     instead of the actual destination.
1444 osamu 8601 </para>
1445     <para>
1446 osamu 8709 These two differences between normal program installation on one hand and the
1447     Debian packaging system on the other can be transparently addressed by the
1448     <systemitem role="package">debhelper</systemitem> package through the
1449 osamu 8601 <command>dh_auto_configure</command> and <command>dh_auto_install</command>
1450     commands if the following conditions are met.
1451     </para>
1452     <itemizedlist>
1453     <listitem>
1454     <para>
1455 osamu 8709 The <filename>Makefile</filename> must follow GNU conventions and
1456     support the <literal>$(DESTDIR)</literal> variable.
1457 osamu 8628 <footnote><para> See <ulink url="&gnu-destdir;">GNU Coding Standards: 7.2.4 DESTDIR: Support for Staged Installs</ulink>.</para></footnote>
1458 osamu 8601 </para>
1459     </listitem>
1460     <listitem>
1461     <para>
1462 osamu 8709 The source must follow the Filesystem Hierarchy Standard (FHS).
1463 osamu 8601 </para>
1464     </listitem>
1465     </itemizedlist>
1466     <para>
1467 osamu 8709 Programs that use GNU <command>autoconf</command> follow the GNU conventions
1468     automatically, so they can be trivial to package. On the basis of
1469     this and other heuristics, it is estimated that the
1470     <systemitem role="package">debhelper</systemitem> package will work for
1471     about 90% of packages without making any intrusive changes to their
1472     build system. So packaging is not as complicated as it may seem.
1473 osamu 8601 </para>
1474     <para>
1475 osamu 8709 If you need to make changes in the <filename>Makefile</filename>, you
1476     should be careful to support the <literal>$(DESTDIR)</literal>
1477     variable. Although it is unset by default, the <literal>$(DESTDIR)</literal>
1478     variable is prepended to each file path used for the program
1479     installation. The packaging script will set
1480     <literal>$(DESTDIR)</literal> to the temporary directory.
1481 osamu 8601 </para>
1482     <para>
1483 osamu 8725 For packages of the single binary type, the temporary directory used
1484 osamu 8709 by the <command>dh_auto_install</command> command will be set to
1485     <filename>debian/<replaceable>package</replaceable></filename>.
1486 osamu 8725 <footnote><para> For packages of the multiple binary type, the
1487 osamu 8601 <command>dh_auto_install</command> command uses <filename>debian/tmp</filename>
1488     as the temporary directory while the <command>dh_install</command> command with
1489     the help of
1490     <filename>debian/<replaceable>package-1</replaceable>.install</filename> and
1491     <filename>debian/<replaceable>package-2</replaceable>.install</filename> files
1492 osamu 8709 will split the contents of <filename>debian/tmp</filename> into
1493 osamu 8601 <filename>debian/<replaceable>package-1</replaceable></filename> and
1494     <filename>debian/<replaceable>package-2</replaceable></filename> temporary
1495 osamu 8709 directories, to create
1496     <filename><replaceable>package-1</replaceable>_*.deb</filename> and
1497     <filename><replaceable>package-2</replaceable>_*.deb</filename> binary
1498     packages.
1499 osamu 8601 </para> </footnote> Everything that is contained in the temporary directory
1500 osamu 8709 will be installed on users' systems when they install your package; the only
1501     difference is that <command>dpkg</command> will be installing the
1502     files to paths relative to the root directory rather than your working
1503     directory.
1504 osamu 8601 </para>
1505     <para>
1506     Bear in mind that even though your program installs in
1507     <filename>debian/<replaceable>package</replaceable></filename>, it still needs
1508 osamu 8709 to behave correctly when installed from the <filename>.deb</filename>
1509     package under the root directory. So you must not allow the build
1510 osamu 8601 system to hardcode strings like
1511     <literal>/home/me/deb/<replaceable>package</replaceable>-<replaceable>version</replaceable>/usr/share/<replaceable>package</replaceable></literal>
1512 osamu 8709 into files in the package.
1513 osamu 8601 </para>
1514     <para>
1515     Here's the relevant part of <systemitem role="package">gentoo</systemitem>'s
1516 osamu 8709 <filename>Makefile</filename><footnote><para> This is just an example to
1517     show what a <filename>Makefile</filename> should look like. If the
1518     <filename>Makefile</filename> is created by the
1519 osamu 8601 <command>./configure</command> command, the correct way to fix this kind of
1520 osamu 8709 <filename>Makefile</filename> is to execute <command>./configure</command>
1521     from the <command>dh_auto_configure</command> command with default
1522 osamu 8601 options including <literal>--prefix=/usr</literal>. </para> </footnote>:
1523     </para>
1524     <screen>
1525 osamu 8719 # Where to put binary executables on 'make install'?
1526 osamu 8601 BIN = /usr/local/bin
1527     # Where to put icons on 'make install'?
1528     ICONS = /usr/local/share/gentoo
1529     </screen>
1530     <para>
1531     We see that the files are set to install under <filename>/usr/local</filename>.
1532 osamu 8709 As explained above, that directory hierarchy is reserved for local use on
1533     Debian, so change those paths to:
1534 osamu 8601 </para>
1535     <screen>
1536 osamu 8719 # Where to put binary executables on 'make install'?
1537 osamu 8601 BIN = $(DESTDIR)/usr/bin
1538     # Where to put icons on 'make install'?
1539     ICONS = $(DESTDIR)/usr/share/gentoo
1540     </screen>
1541     <para>
1542 osamu 8709 The exact locations that should be used for binaries, icons,
1543     documentation, etc. are specified in the Filesystem Hierarchy Standard
1544     (FHS). You should browse through it and read the sections relevant to
1545     your package.
1546 osamu 8601 </para>
1547     <para>
1548 osamu 8719 So, we should install binary executables in <filename>/usr/bin</filename> instead of
1549 osamu 8601 <filename>/usr/local/bin</filename>, the manual page in
1550     <filename>/usr/share/man/man1</filename> instead of
1551 osamu 8709 <filename>/usr/local/man/man1</filename>, and so on. Notice how there's no manual
1552 osamu 8601 page mentioned in <systemitem role="package">gentoo</systemitem>'s
1553 osamu 8709 <filename>Makefile</filename>, but since Debian Policy requires that every
1554 osamu 8601 program has one, we'll make one later and install it in
1555     <filename>/usr/share/man/man1</filename>.
1556     </para>
1557     <para>
1558     Some programs don't use <filename>Makefile</filename> variables to define paths
1559     such as these. This means you might have to edit some real C sources in order
1560     to fix them to use the right locations. But where to search, and exactly what
1561     for? You can find this out by issuing:
1562     </para>
1563     <screen>
1564 osamu 8709 $ grep -nr --include='*.[c|h]' -e 'usr/local/lib' .
1565 osamu 8601 </screen>
1566     <para>
1567     <command>grep</command> will run recursively through the source tree and tell
1568     you the filename and the line number for all matches.
1569     </para>
1570     <para>
1571     Edit those files and in those lines replace <literal>usr/local/lib</literal>
1572 osamu 8621 with <literal>usr/lib</literal>. This can be done automatically as follows:
1573 osamu 8601 </para>
1574     <screen>
1575 osamu 8711 $ sed -i -e 's#usr/local/lib#usr/lib#g' \
1576 osamu 8601 $(find . -type f -name '*.[c|h]')
1577     </screen>
1578     <para>
1579 taffit-guest 8717 If you want to confirm each substitution instead, this can be done interactively as follows:
1580 osamu 8601 </para>
1581 osamu 8709 <screen>
1582     $ vim '+argdo %s#usr/local/lib#usr/lib#gce|update' +q \
1583     $(find . -type f -name '*.[c|h]')
1584     </screen>
1585    
1586 osamu 8601 <para>
1587 osamu 8709 Next you should find the <literal>install</literal> target (searching
1588     for the line that starts with <literal>install:</literal> will usually
1589     work) and rename all references to directories other than ones defined
1590     at the top of the <filename>Makefile</filename>.
1591 osamu 8601 </para>
1592     <para>
1593 osamu 8709 Originally, <systemitem role="package">gentoo</systemitem>'s
1594 osamu 8601 install target said:
1595     </para>
1596     <screen>
1597     install: gentoo-target
1598     install ./gentoo $(BIN)
1599     install icons/* $(ICONS)
1600     install gentoorc-example $(HOME)/.gentoorc
1601     </screen>
1602     <para>
1603 osamu 8709 Let's fix this upstream bug and record it with the <command>dquilt</command> command as
1604 osamu 8601 <filename>debian/patches/install.patch</filename>.
1605     </para>
1606     <screen>
1607 osamu 8646 $ dquilt new install.patch
1608     $ dquilt add Makefile
1609 osamu 8601 </screen>
1610     <para>
1611 osamu 8709 In your editor, change this for the Debian package as follows:
1612 osamu 8601 </para>
1613     <screen>
1614     install: gentoo-target
1615     install -d $(BIN) $(ICONS) $(DESTDIR)/etc
1616     install ./gentoo $(BIN)
1617     install -m644 icons/* $(ICONS)
1618     install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc
1619     </screen>
1620     <para>
1621 osamu 8709 You'll have noticed that there's now an <literal>install -d</literal> command
1622 osamu 8601 before the other commands in the rule. The original
1623 osamu 8709 <filename>Makefile</filename> didn't have it because usually
1624 osamu 8601 <literal>/usr/local/bin</literal> and other directories already exist on the
1625 osamu 8709 system where you are running <literal>make install</literal>. However, since we will
1626     be installing into a newly created private directory tree, we will have to
1627 osamu 8601 create each and every one of those directories.
1628     </para>
1629     <para>
1630     We can also add in other things at the end of the rule, like the installation
1631     of additional documentation that the upstream authors sometimes omit:
1632     </para>
1633     <screen>
1634     install -d $(DESTDIR)/usr/share/doc/gentoo/html
1635     cp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html
1636     </screen>
1637     <para>
1638 osamu 8709 Check carefully, and if everything is okay, ask <command>dquilt</command> to
1639     generate the patch to create <filename>debian/patches/install.patch</filename>
1640 osamu 8601 and add its description.
1641     </para>
1642     <screen>
1643 osamu 8646 $ dquilt refresh
1644     $ dquilt header -e
1645 osamu 8601 ... describe patch
1646     </screen>
1647     <para>
1648     Now you have a series of patches.
1649     </para>
1650     <orderedlist numeration="arabic">
1651     <listitem>
1652     <para>
1653     Upstream bug fix: <filename>debian/patches/fix-gentoo-target.patch</filename>
1654     </para>
1655     </listitem>
1656     <listitem>
1657     <para>
1658     Debian specific packaging modification:
1659     <filename>debian/patches/install.patch</filename>
1660     </para>
1661     </listitem>
1662     </orderedlist>
1663     <para>
1664     Whenever you make changes that are not specifically related to Debian package
1665     such as <filename>debian/patches/fix-gentoo-target.patch</filename>, be sure to
1666     send them to the upstream maintainer so they can be included in the next
1667 osamu 8709 revision of the program and be useful to everyone else. Also remember
1668     to avoid making your fixes specific to Debian or Linux - or even Unix!
1669     Make them portable. This will make your fixes much easier to apply.
1670 osamu 8601 </para>
1671     <para>
1672     Note that you don't have to send the <filename>debian/*</filename> files
1673     upstream.
1674     </para>
1675     </section>
1676     <section id="difflibs"><title>Differing libraries</title>
1677     <para>
1678     There is one other common problem: libraries are often different from platform
1679     to platform. For example, a <filename>Makefile</filename> can contain a
1680 osamu 8714 reference to a library which doesn't exist on the Debian system. In that case, we
1681 osamu 8601 need to change it to a library which does exist in Debian, and serves the same
1682     purpose.
1683     </para>
1684     <para>
1685 osamu 8714 Let's assume a line in your program's <filename>Makefile</filename> (or
1686     <filename>Makefile.in</filename>) as the following.
1687 osamu 8601 </para>
1688     <screen>
1689 osamu 8713 LIBS = -lfoo -lbar
1690 osamu 8601 </screen>
1691     <para>
1692 osamu 8714 If your program doesn't compile since the <literal>foo</literal> library
1693     doesn't exist and its equivalent is provided by the <literal>foo2</literal>
1694     library on the Debian system, you can fix this build problem as
1695     <filename>debian/patches/foo2.patch</filename> by changing
1696     <literal>foo</literal> into <literal>foo2</literal>.<footnote><para>If there
1697     are API changes from the <literal>foo</literal> library to the
1698     <literal>foo2</literal> library, required changes to the source code need to be
1699     made to match the new API.</para> </footnote>
1700 osamu 8601 </para>
1701     <screen>
1702 osamu 8713 $ dquilt new foo2.patch
1703 osamu 8646 $ dquilt add Makefile
1704 osamu 8713 $ sed -i -e 's/-lfoo/-lfoo2/g' Makefile
1705 osamu 8646 $ dquilt refresh
1706     $ dquilt header -e
1707 osamu 8601 ... describe patch
1708     </screen>
1709     </section>
1710     </chapter>
1711     <chapter id="dreq"><title>Required files under the <filename>debian</filename> directory</title>
1712     <para>
1713     There is a new subdirectory under the program's source directory, it's called
1714     <filename>debian</filename>. There are a number of files in this directory
1715     that we should edit in order to customize the behavior of the package. The
1716     most important of them are <filename>control</filename>,
1717     <filename>changelog</filename>, <filename>copyright</filename> and
1718     <filename>rules</filename>, which are required for all packages.
1719 osamu 8668 <footnote><para>
1720     In this chapter, files in the <filename>debian</filename> directory are
1721     referred without preceding <filename>debian/</filename> for simplicity whenever
1722     they are obvious.
1723     </para></footnote>
1724 osamu 8601 </para>
1725     <section id="control"><title><filename>control</filename> file</title>
1726     <para>
1727     This file contains various values which <command>dpkg</command>,
1728     <command>dselect</command>, <command>apt-get</command>,
1729     <command>apt-cache</command>, <command>aptitude</command>, and other package
1730 osamu 8737 management tools will use to manage the package. It is defined by the
1731     <ulink url="&policy-control;">Debian Policy Manual, 5 "Control files and their fields"</ulink>.
1732 osamu 8601 </para>
1733     <para>
1734     Here is the <filename>control</filename> file <command>dh_make</command>
1735     created for us:
1736     </para>
1737     <screen>
1738     1 Source: gentoo
1739     2 Section: unknown
1740     3 Priority: extra
1741     4 Maintainer: Josip Rodin &lt;joy-mg@debian.org&gt;
1742     5 Build-Depends: debhelper (&gt;= 7.0.50~)
1743     6 Standards-Version: 3.8.4
1744     7 Homepage: &lt;insert the upstream URL, if relevant&gt;
1745     8
1746     9 Package: gentoo
1747     10 Architecture: any
1748     11 Depends: ${shlibs:Depends}, ${misc:Depends}
1749     12 Description: &lt;insert up to 60 chars description&gt;
1750     13 &lt;insert long description, indented with spaces&gt;
1751     </screen>
1752     <para>
1753     (I've added the line numbers.)
1754     </para>
1755     <para>
1756 osamu 8621 Lines 1-7 are the control information for the source package.
1757     Lines 9-13 are the control information for the binary package.
1758 osamu 8601 </para>
1759     <para>
1760     Line 1 is the name of the source package.
1761     </para>
1762     <para>
1763     Line 2 is the section of the distribution the source package goes into.
1764     </para>
1765     <para>
1766     As you may have noticed, Debian archive is divided in sections:
1767     <literal>main</literal> (the free software), <literal>non-free</literal> (the
1768     not really free software) and <literal>contrib</literal> (free software that
1769     depends on non-free software). Under those, there are logical subsections that
1770     describe in short what packages are in. So we have <literal>admin</literal>
1771     for administrator-only programs, <literal>base</literal> for the basic tools,
1772     <literal>devel</literal> for programmer tools, <literal>doc</literal> for
1773     documentation, <literal>libs</literal> for libraries, <literal>mail</literal>
1774     for e-mail readers and daemons, <literal>net</literal> for network apps and
1775     daemons, <literal>x11</literal> for X11 programs that don't fit anywhere else,
1776 osamu 8648 and many more.
1777     <footnote> <para>See
1778 osamu 8737 <ulink url="&policy-subsections;">Debian Policy Manual, 2.4 "Sections"</ulink> and
1779 taffit-guest 8665 <ulink url="&sections-unstable;">List of sections in <literal>sid</literal></ulink>.</para>
1780 osamu 8648 </footnote>
1781 osamu 8601 </para>
1782     <para>
1783     Let's change it then to x11. (A <literal>main/</literal> prefix is implied so
1784     we can omit it.)
1785     </para>
1786     <para>
1787 osamu 8648 Line 3 describes how important it is that the user installs this package.
1788     <footnote> <para>See
1789 osamu 8737 <ulink url="&policy-priorities;">Debian Policy Manual, 2.5 "Priorities"</ulink>.
1790 osamu 8601 </para>
1791 osamu 8648 </footnote>
1792     </para>
1793 osamu 8601 <itemizedlist>
1794     <listitem>
1795     <para>
1796     The <literal>optional</literal> priority will usually work for new packages
1797     that do not conflict with others with <literal>required</literal>,
1798     <literal>important</literal> or <literal>standard</literal> priorities.
1799     </para>
1800     </listitem>
1801     <listitem>
1802     <para>
1803     The <literal>extra</literal> priority will usually work for new packages that
1804     conflict with others with non-<literal>extra</literal> priorities.
1805     </para>
1806     </listitem>
1807     </itemizedlist>
1808     <para>
1809     Section and priority are used by the frontends like <command>aptitude</command>
1810     when they sort packages and select defaults. Once you upload the package to
1811     Debian, the value of these two fields can be overridden by the archive
1812     maintainers, in which case you will be notified by email.
1813     </para>
1814     <para>
1815     As this is a normal priority package and doesn't conflict with anything else,
1816     we will change the priority to <literal>optional</literal>.
1817     </para>
1818     <para>
1819     Line 4 is the name and email address of the maintainer. Make sure that this
1820     field includes a valid <literal>To</literal> header for an email, because after
1821     you upload it, the bug tracking system will use it to deliver bug emails to
1822     you. Avoid using commas, ampersands and parenthesis.
1823     </para>
1824     <para>
1825     The 5th line includes the list of packages required to build your package as
1826     the <literal>Build-Depends</literal> field. You can also have the
1827 osamu 8648 <literal>Build-Depends-Indep</literal> field as an additional line, here.
1828 osamu 8737 <footnote><para>See
1829     <ulink url="&policy-relationships;#s-sourcebinarydeps">Debian Policy Manual, 7.7 "Relationships between source and binary packages - Build-Depends, Build-Depends-Indep, Build-Conflicts, Build-Conflicts-Indep"</ulink>.</para></footnote>
1830     Some packages like
1831 osamu 8642 <systemitem role="package">gcc</systemitem> and
1832     <systemitem role="package">make</systemitem> which are required by the
1833     <systemitem role="package">build-essential</systemitem> package are implied. If you need
1834 osamu 8601 to have other tools to build your package, you should add them to these fields.
1835     Multiple entries are separated with commas; read on for the explanation of
1836 osamu 8719 binary package dependencies to find out more about the syntax of these lines.
1837 osamu 8601 </para>
1838     <itemizedlist>
1839     <listitem>
1840     <para>
1841     For all packages packaged with the <command>dh</command> command in the
1842     <filename>debian/rules</filename> file, you must have <literal>debhelper
1843     (&gt;=7.0.50~)</literal> in the <literal>Build-Depends</literal> field to
1844     satisfy the Debian Policy requirement for the <literal>clean</literal> target.
1845     </para>
1846     </listitem>
1847     <listitem>
1848     <para>
1849     For source packages which have some binary packages with <literal>Architecture:
1850     any</literal>, they are rebuild by the autobuilder. Since this autobuilder
1851     procedure runs <literal>debian/rules build</literal> in it while installing
1852 taffit-guest 8665 only packages listed in the <literal>Build-Depends</literal> field (see <xref linkend="autobuilder"/>), the <literal>Build-Depends</literal> field needs to
1853 osamu 8601 list practically all the required packages and the
1854     <literal>Build-Depends-indep</literal> is rarely used.
1855     </para>
1856     </listitem>
1857     <listitem>
1858     <para>
1859     For source packages which have binary packages only with <literal>Architecture:
1860     all</literal>, the <literal>Build-Depends-Indep</literal> field may list all
1861     the required packages unless they are already listed in the
1862     <literal>Build-Depends</literal> field to satisfy the Debian Policy requirement
1863     for the <literal>clean</literal> target.
1864     </para>
1865     </listitem>
1866     </itemizedlist>
1867     <para>
1868     If you are not sure which one should be used, use the
1869     <literal>Build-Depends</literal> field to be on the safe side.
1870     <footnote><para> This somewhat strange situation is a feature well documented
1871 osamu 8628 in the <ulink url="&policy-build-depends-indep;">Debian Policy
1872 osamu 8601 Manual, Footnotes 48</ulink>. This is not due to the use of the
1873     <command>dh</command> command in the <filename>debian/rules</filename> file but
1874     due to how the <command>dpkg-buildpackage</command> works. The same situation
1875     applies to the <ulink url="https://bugs.launchpad.net/launchpad-buildd/+bug/238141">auto build system
1876     for Ubuntu</ulink>. </para> </footnote>
1877     </para>
1878     <para>
1879     To find out what packages your package needs to be built run the command:
1880     </para>
1881     <screen>
1882     $ dpkg-depcheck -d ./configure
1883     </screen>
1884     <para>
1885     To manually find exact build dependency for
1886     <command><replaceable>/usr/bin/foo</replaceable></command>, you execute
1887     </para>
1888     <screen>
1889     $ objdump -p <replaceable>/usr/bin/foo</replaceable> | grep NEEDED
1890     </screen>
1891     <para>
1892     and for each library listed, e.g., <command>libfoo.so.6</command>, execute
1893     </para>
1894     <screen>
1895     $ dpkg -S libfoo.so.6
1896     </screen>
1897     <para>
1898     Then you just take <literal>-dev</literal> version of every package as
1899     <literal>Build-Depends</literal> entry. If you use <command>ldd</command> for
1900     this purpose, it will report indirect lib dependencies as well, resulting in
1901     the problem of excessive build dependencies.
1902     </para>
1903     <para>
1904     <systemitem role="package">gentoo</systemitem> also happens to require
1905     <systemitem role="package">xlibs-dev</systemitem>, <systemitem role="package">libgtk1.2-dev</systemitem> and <systemitem role="package">libglib1.2-dev</systemitem> to build, so we'll add them here
1906     next to <systemitem role="package">debhelper</systemitem>.
1907     </para>
1908     <para>
1909 osamu 8628 Line 6 is the version of the <ulink url="&debian-policy;">Debian Policy
1910 osamu 8601 Manual</ulink> standards this package follows, the one you read while making
1911     your package.
1912     </para>
1913     <para>
1914     On line 7 you can put the URL of the homepage for the upstream program.
1915     </para>
1916     <para>
1917     Line 9 is the name of the binary package. This is usually the same as the name
1918     of the source package, but it doesn't necessarily have to be that way.
1919     </para>
1920     <para>
1921     Line 10 describes the CPU architecture the binary package can be compiled for.
1922     We'll leave this as <literal>any</literal> because <citerefentry>
1923     <refentrytitle>dpkg-gencontrol</refentrytitle> <manvolnum>1</manvolnum>
1924     </citerefentry> will fill in the appropriate value for any machine this package
1925     gets compiled on.
1926     </para>
1927     <para>
1928     If your package is architecture independent (for example, a shell or Perl
1929     script, or a document), change this to <literal>all</literal>, and read later
1930     in <xref linkend="rules"/> about using the <literal>binary-indep</literal> rule
1931     instead of <literal>binary-arch</literal> for building the package.
1932     </para>
1933     <para>
1934     Line 11 shows one of the most powerful features of the Debian packaging system.
1935     Packages can relate to each other in various ways. Apart from
1936     <literal>Depends</literal>, other relationship fields are
1937     <literal>Recommends</literal>, <literal>Suggests</literal>,
1938     <literal>Pre-Depends</literal>, <literal>Breaks</literal>,
1939     <literal>Conflicts</literal>, <literal>Provides</literal>, and
1940     <literal>Replaces</literal>.
1941     </para>
1942     <para>
1943     The package management tools usually behave the same way when dealing with
1944     these relations; if not, it will be explained. (see <citerefentry>
1945     <refentrytitle>dpkg</refentrytitle> <manvolnum>8</manvolnum> </citerefentry>,
1946     <citerefentry> <refentrytitle>dselect</refentrytitle> <manvolnum>8</manvolnum>
1947     </citerefentry>, <citerefentry> <refentrytitle>apt</refentrytitle>
1948     <manvolnum>8</manvolnum> </citerefentry>, <citerefentry>
1949     <refentrytitle>aptitude</refentrytitle> <manvolnum>1</manvolnum>
1950     </citerefentry> etc.)
1951     </para>
1952     <para>
1953 osamu 8648 Here is a simplified description of package relationships.
1954 osamu 8621 <footnote><para>See
1955 osamu 8737 <ulink url="&policy-relationships;">Debian Policy Manual, 7 "Declaring relationships between packages"</ulink>.
1956 osamu 8648 </para></footnote>
1957 osamu 8601 </para>
1958     <itemizedlist>
1959     <listitem>
1960     <para>
1961     <literal>Depends</literal>
1962     </para>
1963     <para>
1964     The package will not be installed unless the packages it depends on are
1965     installed. Use this if your program absolutely will not run (or will cause
1966     severe breakage) unless a particular package is present.
1967     </para>
1968     </listitem>
1969     <listitem>
1970     <para>
1971     <literal>Recommends</literal>
1972     </para>
1973     <para>
1974     Use this for packages that are not strictly necessary but are typically used
1975     with your program. When a user installs your program, all frontends will
1976     likely prompt them to install the recommended packages.
1977     <command>aptitude</command> and <command>apt-get</command> install recommended
1978     packages along with your package (but the user can disable this default
1979     behaviour). <command>dpkg</command> will ignore this field.
1980     </para>
1981     </listitem>
1982     <listitem>
1983     <para>
1984     <literal>Suggests</literal>
1985     </para>
1986     <para>
1987     Use this for packages which will work nicely with your program but are not at
1988     all necessary. When a user installs your program, all frontends will likely
1989     prompt them to install the suggested packages. <command>aptitude</command> can
1990     be configured to install suggested packages along with your package but this is
1991     not its default. <command>dpkg</command> and <command>apt-get</command> will
1992     ignore this field.
1993     </para>
1994     </listitem>
1995     <listitem>
1996     <para>
1997     <literal>Pre-Depends</literal>
1998     </para>
1999     <para>
2000     This is stronger than <literal>Depends</literal>. The package will not be
2001     installed unless the packages it pre-depends on are installed and
2002     <emphasis>correctly configured</emphasis>. Use this <emphasis>very</emphasis>
2003 osamu 8628 sparingly and only after discussing it on the <ulink url="&debian-devel-ldo;">debian-devel@lists.debian.org</ulink>
2004 osamu 8601 mailing list. Read: don't use it at all. :-)
2005     </para>
2006     </listitem>
2007     <listitem>
2008     <para>
2009     <literal>Conflicts</literal>
2010     </para>
2011     <para>
2012     The package will not be installed until all the packages it conflicts with have
2013     been removed. Use this if your program absolutely will not run or will cause
2014     severe problems if a particular package is present.
2015     </para>
2016     </listitem>
2017     <listitem>
2018     <para>
2019     <literal>Breaks</literal>
2020     </para>
2021     <para>
2022     The package will be installed while all the listed packages will be broken.
2023     Normally a <literal>Breaks</literal> entry has an earlier than version clause.
2024     The resolution is generally to upgrade the listed packages by the higher-level
2025     package management tools.
2026     </para>
2027     </listitem>
2028     <listitem>
2029     <para>
2030     <literal>Provides</literal>
2031     </para>
2032     <para>
2033     For some types of packages where there are multiple alternatives virtual names
2034     have been defined. You can get the full list in the
2035 osamu 8639 <ulink url="&virtual-package;">virtual-package-names-list.txt.gz</ulink>
2036 osamu 8601 file. Use this if your program provides a function of an existing virtual
2037     package.
2038     </para>
2039     </listitem>
2040     <listitem>
2041     <para>
2042     <literal>Replaces</literal>
2043     </para>
2044     <para>
2045     Use this when your program replaces files from another package, or completely
2046     replaces another package (used in conjunction with
2047     <literal>Conflicts</literal>). Files from the named packages will be
2048     overwritten with the files from your package.
2049     </para>
2050     </listitem>
2051     </itemizedlist>
2052     <para>
2053     All these fields have uniform syntax. They are a list of package names
2054     separated by commas. These package names may also be lists of alternative
2055     package names, separated by vertical bar symbols <literal>|</literal> (pipe
2056     symbols).
2057     </para>
2058     <para>
2059     The fields may restrict their applicability to particular versions of each
2060     named package. These versions are listed in parentheses after each individual
2061     package name, and they should contain a relation from the list below followed
2062     by the version number. The relations allowed are: <literal>&lt;&lt;</literal>,
2063     <literal>&lt;=</literal>, <literal>=</literal>, <literal>&gt;=</literal> and
2064     <literal>&gt;&gt;</literal> for strictly lower, lower or equal, exactly equal,
2065     greater or equal and strictly greater, respectively. For example,
2066     </para>
2067     <screen>
2068     Depends: foo (&gt;= 1.2), libbar1 (= 1.3.4)
2069     Conflicts: baz
2070     Recommends: libbaz4 (&gt;&gt; 4.0.7)
2071     Suggests: quux
2072     Replaces: quux (&lt;&lt; 5), quux-foo (&lt;= 7.6)
2073     </screen>
2074     <para>
2075     The last feature you need to know about is
2076     <literal>${shlibs:Depends}</literal>, <literal>${perl:Depends}</literal>,
2077 osamu 8648 <literal>${misc:Depends}</literal>, etc.
2078 osamu 8601 </para>
2079     <para>
2080     <citerefentry> <refentrytitle>dh_shlibdeps</refentrytitle>
2081 osamu 8648 <manvolnum>1</manvolnum> </citerefentry> calculates shared library dependencies
2082     for binary packages. It generates a list of ELF executables and shared
2083     libraries it has found for each binary package. Such list is used for
2084     substituting <literal>${shlibs:Depends}</literal>.
2085 osamu 8601 </para>
2086     <para>
2087 osamu 8648 <citerefentry> <refentrytitle>dh_perl</refentrytitle> <manvolnum>1</manvolnum>
2088 taffit-guest 8665 </citerefentry> calculates Perl dependencies. It generates a list of a
2089     dependency on <literal>perl</literal> or <literal>perlapi</literal> for each binary package. Such list is used for
2090 osamu 8648 substituting <literal>${perl:Depends}</literal>.
2091 osamu 8601 </para>
2092     <para>
2093     Some <systemitem role="package">debhelper</systemitem> commands may make the
2094 osamu 8648 generated package need to depend on some other packages. All such commands
2095     generate a list of required packages for each binary package.
2096     Such list is used for substituting <literal>${misc:Depends}</literal>.
2097 osamu 8601 </para>
2098     <para>
2099 osamu 8648 <citerefentry> <refentrytitle>dh_gencontrol</refentrytitle>
2100     <manvolnum>1</manvolnum> </citerefentry> generates
2101     <filename>DEBIAN/control</filename> for each binary package while
2102     substituting <literal>${shlibs:Depends}</literal>,
2103     <literal>${perl:Depends}</literal>, <literal>${misc:Depends}</literal>, etc.
2104     </para>
2105     <para>
2106 osamu 8601 Having said all that, we can leave the <literal>Depends</literal> field exactly
2107     as it is now, and insert another line after it saying <literal>Suggests:
2108     file</literal>, because <systemitem role="package">gentoo</systemitem> can use
2109     some features provided by that <systemitem role="package">file</systemitem>
2110     package.
2111     </para>
2112 osamu 8621 <para> Line 9 is the Homepage URL. Let's assume this to be at
2113 osamu 8637 <ulink url="&gentoo;"/>.
2114 osamu 8621 </para>
2115 osamu 8601 <para>
2116     Line 12 is the short description. Most people screens are 80 columns wide so
2117     this shouldn't be longer than about 60 characters. I'll change it to
2118     <literal>fully GUI-configurable, two-pane X file manager</literal>.
2119     </para>
2120     <para>
2121     Line 13 is where the long description goes. This should be a paragraph which
2122     gives more details about the package. Column 1 of each line should be empty.
2123     There must be no blank lines, but you can put a single <literal>.</literal>
2124     (dot) in a column to simulate that. Also, there must be no more than one blank
2125 osamu 8621 line after the long description. <footnote><para>These descriptions are in
2126     English. Translations of these descriptions are provided by
2127     <ulink url="&ddtp;">The Debian Description Translation Project - DDTP</ulink>.</para></footnote>
2128 osamu 8601 </para>
2129     <para>
2130 osamu 8648 Let's insert <literal>Vcs-*</literal> fields to document the Version Control
2131     System (VCS) location between line 6 and 7.
2132     <footnote><para>See
2133 osamu 8725 <ulink url="&devref-bpp-vcs;">Debian Developer's Reference, 6.2.5. "Version Control System location"</ulink>.
2134 osamu 8648 </para></footnote>
2135     Let's assume that the <systemitem role="package">gentoo</systemitem>
2136     package has its VCS located in Debian Alioth Git Service at
2137 osamu 8601 <literal>git://git.debian.org/git/collab-maint/gentoo.git</literal>.
2138     </para>
2139     <para>
2140     Finally, here is the updated <filename>control</filename> file:
2141     </para>
2142     <screen>
2143     1 Source: gentoo
2144     2 Section: x11
2145     3 Priority: optional
2146     4 Maintainer: Josip Rodin &lt;joy-mg@debian.org&gt;
2147     5 Build-Depends: debhelper (&gt;= 7.0.5), xlibs-dev, libgtk1.2-dev, libglib1.2-dev
2148     6 Standards-Version: 3.8.4
2149     7 Vcs-Git: git://git.debian.org/git/collab-maint/gentoo.git
2150     8 Vcs-browser: http://git.debian.org/?p=collab-maint/gentoo.git
2151 osamu 8628 9 Homepage: &gentoo;
2152 osamu 8601 10
2153     11 Package: gentoo
2154     12 Architecture: any
2155     13 Depends: ${shlibs:Depends}, ${misc:Depends}
2156     14 Suggests: file
2157     15 Description: fully GUI-configurable, two-pane X file manager
2158     16 gentoo is a two-pane file manager for the X Window System. gentoo lets the
2159     17 user do (almost) all of the configuration and customizing from within the
2160     18 program itself. If you still prefer to hand-edit configuration files,
2161     19 they're fairly easy to work with since they are written in an XML format.
2162     20 .
2163     21 gentoo features a fairly complex and powerful file identification system,
2164     22 coupled to a object-oriented style system, which together give you a lot
2165     23 of control over how files of different types are displayed and acted upon.
2166     24 Additionally, over a hundred pixmap images are available for use in file
2167     25 type descriptions.
2168     26 .
2169     29 gentoo was written from scratch in ANSI C, and it utilises the GTK+ toolkit
2170     30 for its interface.
2171     </screen>
2172     <para>
2173     (I've added the line numbers.)
2174     </para>
2175     </section>
2176     <section id="copyright"><title><filename>copyright</filename> file</title>
2177     <para>
2178     This file contains the information about package upstream resources, copyright
2179 osamu 8648 and license information.
2180 osamu 8737 <ulink url="&policy-copyright;">Debian Policy Manual, 12.5 "Copyright information"</ulink>
2181 osamu 8648 dictates its content and
2182 taffit-guest 8665 <ulink url="&dep5;">DEP-5: Machine-parseable <filename>debian/copyright</filename></ulink>
2183 osamu 8648 provides guidelines for its format.
2184 osamu 8601 </para>
2185     <para>
2186     <command>dh_make</command> can give you a template
2187     <filename>copyright</filename> file. Let's use the <literal>--copyright
2188     gpl2</literal> option here to get a template file for the <systemitem role="package">gentoo</systemitem> package released under GPL-2.
2189     </para>
2190     <para>
2191     You must fill in missing information such as the place you got the package
2192     from, the actual copyright notice and their license to complete this file. For
2193     the common free software licenses such as GNU GPL-1, GNU GPL-2, GNU GPL-3,
2194     LGPL-2, LGPL-2.1, LGPL-3, GNU FDL-1.2, GNU FDL-1.3, Apache-2.0 or the Artistic
2195     license, you can just refer to the appropriate file in
2196     <filename>/usr/share/common-licenses/</filename> directory that exists on every
2197     Debian system. Otherwise, you must include the complete license.
2198     </para>
2199     <para>
2200     In short, here's how <systemitem role="package">gentoo</systemitem>'s
2201     <filename>copyright</filename> file should look like:
2202     </para>
2203     <screen>
2204     1 Format-Specification: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?op=file&amp;rev=135
2205     2 Name: gentoo
2206     3 Maintainer: Josip Rodin &lt;joy-mg@debian.org&gt;
2207     4 Source: http://sourceforge.net/projects/gentoo/files/
2208     5
2209     6 Copyright: 1998-2010 Emil Brink &lt;emil@obsession.se&gt;
2210     7 License: GPL-2+
2211     8
2212     9 Files: icons/*
2213     10 Copyright: 1998 Johan Hanson &lt;johan@tiq.com&gt;
2214     11 License: GPL-2+
2215     12
2216     13 Files: debian/*
2217     14 Copyright: 1998-2010 Josip Rodin &lt;joy-mg@debian.org&gt;
2218     15 License: GPL-2+
2219     16
2220     17 License: GPL-2+
2221     18 This program is free software; you can redistribute it and/or modify
2222     19 it under the terms of the GNU General Public License as published by
2223     20 the Free Software Foundation; either version 2 of the License, or
2224     21 (at your option) any later version.
2225     22 .
2226     23 This program is distributed in the hope that it will be useful,
2227     24 but WITHOUT ANY WARRANTY; without even the implied warranty of
2228     25 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2229     26 GNU General Public License for more details.
2230     27 .
2231     28 You should have received a copy of the GNU General Public License along
2232     29 with this program; if not, write to the Free Software Foundation, Inc.,
2233     30 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
2234     31 .
2235     32 On Debian systems, the full text of the GNU General Public
2236     33 License version 2 can be found in the file
2237     34 `/usr/share/common-licenses/GPL-2'.
2238     </screen>
2239     <para>
2240     (I've added the line numbers.)
2241     </para>
2242     <para>
2243     Please follow the HOWTO provided by ftpmasters and sent to
2244 osamu 8637 debian-devel-announce: <ulink url="&howto-copyright;"/>.
2245 osamu 8601 </para>
2246     </section>
2247     <section id="changelog"><title><filename>changelog</filename> file</title>
2248     <para>
2249 osamu 8648 This is a required file, which has a special format described in the
2250 osamu 8737 <ulink url="&policy-dpkgchangelog;">Debian Policy Manual, 4.4 "debian/changelog"</ulink>.
2251 osamu 8648 This format is used by <command>dpkg</command> and other programs to obtain the
2252     version number, revision, distribution and urgency of your package.
2253 osamu 8601 </para>
2254     <para>
2255     For you, it is also important, since it is good to have documented all changes
2256     you have done. It will help people downloading your package to see whether
2257     there are issues with the package that they should know about. It will be
2258     saved as <filename>/usr/share/doc/gentoo/changelog.Debian.gz</filename> in the
2259     binary package.
2260     </para>
2261     <para>
2262     <command>dh_make</command> created a default one, and this is how it looks
2263     like:
2264     </para>
2265     <screen>
2266     1 gentoo (0.9.12-1) unstable; urgency=low
2267     2
2268     3 * Initial release (Closes: #<replaceable>nnnn</replaceable>) &lt;<replaceable>nnnn</replaceable> is the bug number of your ITP&gt;
2269     4
2270     5 -- Josip Rodin &lt;joy-mg@debian.org&gt; Mon, 22 Mar 2010 00:37:31 +0100
2271     6
2272     </screen>
2273     <para>
2274     (I've added the line numbers.)
2275     </para>
2276     <para>
2277     Line 1 is the package name, version, distribution, and urgency. The name must
2278     match the source package name, distribution should be either
2279     <literal>unstable</literal> (or even <literal>experimental</literal>)
2280     <footnote><para> Some people use invalid distribution values such as
2281     <literal>UNRELEASED</literal> to prevent a package to be accidentally uploaded
2282     when updating a package in a shared VCS. </para> </footnote>, and urgency
2283     shouldn't be changed to anything higher than <literal>low</literal>. :-)
2284     </para>
2285     <para>
2286     Lines 3-5 are a log entry, where you document changes made in this package
2287     revision (not the upstream changes - there is special file for that purpose,
2288     created by the upstream authors, which you will later install as
2289     <filename>/usr/share/doc/gentoo/changelog.gz</filename>). Let's assume your
2290     ITP (Intent To Package) bug report number was <literal>12345</literal>. New
2291     lines must be inserted just before the uppermost line that begins with
2292     <literal>*</literal> (asterisk). You can do it with <citerefentry>
2293     <refentrytitle>dch</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>, or
2294     manually with a text editor.
2295     </para>
2296     <para>
2297     You will end up with something like this:
2298     </para>
2299     <screen>
2300     1 gentoo (0.9.12-1) unstable; urgency=low
2301     2
2302     3 * Initial Release. Closes: #12345
2303     4 * This is my first Debian package.
2304     5 * Adjusted the Makefile to fix $(DESTDIR) problems.
2305     6
2306     7 -- Josip Rodin &lt;joy-mg@debian.org&gt; Mon, 22 Mar 2010 00:37:31 +0100
2307     8
2308     </screen>
2309     <para>
2310     (I've added the line numbers.)
2311     </para>
2312     <para>
2313     You can read more about updating the <filename>changelog</filename> file later
2314 taffit-guest 8665 in <xref linkend="update"/>.
2315 osamu 8601 </para>
2316     </section>
2317     <section id="rules"><title><filename>rules</filename> file</title>
2318     <para>
2319     Now we need to take a look at the exact rules which <citerefentry>
2320     <refentrytitle>dpkg-buildpackage</refentrytitle> <manvolnum>1</manvolnum>
2321     </citerefentry> will use to actually create the package. This file is actually
2322     another <filename>Makefile</filename>, but different from the one(s) in the
2323     upstream source. Unlike other files in <filename>debian</filename>, this one
2324     is marked as executable.
2325     </para>
2326     <section id="targets"><title>Targets of <filename>rules</filename> file</title>
2327     <para>
2328     Every <filename>rules</filename> file, as any other
2329     <filename>Makefile</filename>, consists of several targets and their rules
2330 osamu 8628 specifying how to handle the source. <ulink url="&policy-debianrules;">Debian
2331 osamu 8737 Policy Manual, 4.9 "Main building script: debian/rules"</ulink> explains its
2332 osamu 8601 details.
2333     </para>
2334     <para>
2335     The simplified explanation of targets are the following.
2336     </para>
2337     <itemizedlist>
2338     <listitem>
2339     <para>
2340     <literal>clean</literal> target: to clean all compiled, generated, and useless
2341     files in the build-tree. (required)
2342     </para>
2343     </listitem>
2344     <listitem>
2345     <para>
2346     <literal>build</literal> target: to build the source into compiled programs and
2347     formatted documents in the build-tree. (required)
2348     </para>
2349     </listitem>
2350     <listitem>
2351     <para>
2352     <literal>install</literal> target: to install files into a file tree for each
2353     binary package under the <filename>debian</filename> directory. If defined,
2354     <literal>binary*</literal> targets effectively depend on this target.
2355     (optional)
2356     </para>
2357     </listitem>
2358     <listitem>
2359     <para>
2360     <literal>binary</literal> target: to create all binary packages (effectively
2361     combination of <literal>binary-arch</literal> and
2362     <literal>binary-indep</literal> targets). (required)<footnote><para> This
2363 taffit-guest 8665 target is used by <literal>dpkg-buildpackage</literal> as in <xref linkend="completebuild"/>. </para> </footnote>
2364 osamu 8601 </para>
2365     </listitem>
2366     <listitem>
2367     <para>
2368     <literal>binary-arch</literal> target: to create arch-dependent
2369     (<literal>Architecture: any</literal>) binary packages in the parent directory.
2370     (required)<footnote><para> This target is used by <literal>dpkg-buildpackage
2371 taffit-guest 8665 -B</literal> as in <xref linkend="autobuilder"/>. </para> </footnote>
2372 osamu 8601 </para>
2373     </listitem>
2374     <listitem>
2375     <para>
2376     <literal>binary-indep</literal> target: to create arch-independent
2377     (<literal>Architecture: all</literal>) binary packages in the parent directory.
2378     (required)<footnote><para> This target is used by <literal>dpkg-buildpackage
2379     -A</literal>. </para> </footnote>
2380     </para>
2381     </listitem>
2382     <listitem>
2383     <para>
2384     <literal>get-orig-source</literal> target: to obtain the most recent version of
2385     the original source package from upstream archive site. (optional)
2386     </para>
2387     </listitem>
2388     </itemizedlist>
2389     <para>
2390     Rules that you want to execute are invoked as command line arguments (for
2391     example, <literal>./debian/rules build</literal> or <literal>fakeroot make -f
2392     debian/rules binary</literal>). After the target name, you can name the
2393     dependency, program or file that the rule depends on. After that, there can be
2394     any number of commands, indented with
2395     <literal><replaceable>TAB</replaceable></literal>. A new rule begins with the
2396     target declaration in the first column. Empty lines and lines beginning with
2397     <literal>#</literal> (hash) are treated as comments and ignored.
2398     </para>
2399     <para>
2400     You are probably confused now, but it will all be clear upon examination of the
2401     <filename>rules</filename> file that <command>dh_make</command> gives us as a
2402     default. You should also read <literal>info make</literal> for more
2403     information.
2404     </para>
2405     </section>
2406     <section id="defaultrules"><title>Default <filename>rules</filename> file</title>
2407     <para>
2408     Newer <command>dh_make</command> generates a very simple but powerful default
2409     <filename>rules</filename> file using the <command>dh</command> command:
2410     </para>
2411     <screen>
2412     1 #!/usr/bin/make -f
2413     2 # -*- makefile -*-
2414     3 # Sample debian/rules that uses debhelper.
2415     4 # This file was originally written by Joey Hess and Craig Small.
2416     5 # As a special exception, when this file is copied by dh-make into a
2417     6 # dh-make output file, you may use that output file without restriction.
2418     7 # This special exception was added by Craig Small in version 0.37 of dh-make.
2419     8
2420     9 # Uncomment this to turn on verbose mode.
2421     10 #export DH_VERBOSE=1
2422     11
2423     12 %:
2424     13 dh $@
2425     </screen>
2426     <para>
2427     (I've added the line numbers. In the actual <filename>rules</filename> file,
2428     the leading white spaces are TAB codes.)
2429     </para>
2430     <para>
2431     You are probably familiar with lines like line 1 from shell and Perl scripts.
2432     It tells the operating system that this file is to be processed with
2433     <filename>/usr/bin/make</filename>.
2434     </para>
2435     <para>
2436 taffit-guest 8665 Line 11 can be uncommented to set <literal>DH_VERBOSE</literal> variable to 1.
2437 osamu 8601 Then, the <command>dh</command> command will output which
2438     <command>dh_*</command> commands are executed by the <command>dh</command>
2439     command. You can also add <literal>export DH_OPTIONS=-v</literal> line here.
2440     Then each <command>dh_*</command> command will output which commands are
2441     executed by each <command>dh_*</command> command. This helps you to understand
2442     what exactly is going on behind this simple <filename>rules</filename> file and
2443     to debug its problems. This new <command>dh</command> is a core part of the
2444     <systemitem role="package">debhelper</systemitem> tools and does not hide
2445     anything from you.
2446     </para>
2447     <para>
2448     Lines 12 and 13 are where all the work is done. The percent sign means any
2449     targets which then call a single program, <command>dh</command> with the target
2450     name. <footnote><para> This uses the new <systemitem role="package">debhelper</systemitem> V7 features. Its design concepts are
2451 osamu 8628 explained in <ulink url="&debhelper-slides;">Not Your
2452 osamu 8601 Grandpa's Debhelper</ulink> presented at Debconf9 by the <systemitem role="package">debhelper</systemitem> upstream. Under
2453     <literal>lenny</literal>, <command>dh_make</command> created a much more
2454     complicated <filename>rules</filename> file with many <command>dh_*</command>
2455     scripts listed for each required explicit targets and frozen them to the state
2456     when it was initially packaged. This new <command>dh</command> command is
2457     simpler and frees us from this constrain. You still have full power to
2458 taffit-guest 8665 customize this with <literal>override_dh_*</literal> targets. See <xref linkend="customrules"/>. It is based only on the <systemitem role="package">debhelper</systemitem> package and does not obfuscate the
2459 osamu 8601 package building process like the <systemitem role="package">cdbs</systemitem>
2460     package. </para> </footnote> The <command>dh</command> command is a wrapper
2461     script which runs appropriate sequences of <command>dh_*</command> programs
2462     depending on its argument. <footnote><para> You can verify actual sequences of
2463     <command>dh_*</command> programs invoked for a given
2464     <literal><replaceable>target</replaceable></literal> as <literal>dh --no-act
2465     <replaceable>target</replaceable></literal> or <literal>debian/rules --
2466     '--no-act <replaceable>target</replaceable>'</literal> without really running
2467     them. </para> </footnote>
2468     </para>
2469     <itemizedlist>
2470     <listitem>
2471     <para>
2472     <literal>debian/rules clean</literal> runs <literal>dh clean</literal>; which
2473     in turn runs the following:
2474     </para>
2475     <screen>
2476     dh_testdir
2477     dh_auto_clean
2478     dh_clean
2479     </screen>
2480     </listitem>
2481     <listitem>
2482     <para>
2483     <literal>debian/rules build</literal> runs <literal>dh build</literal>; which
2484     in turn runs the following:
2485     </para>
2486     <screen>
2487     dh_testdir
2488     dh_auto_configure
2489     dh_auto_build
2490     dh_auto_test
2491     </screen>
2492     </listitem>
2493     <listitem>
2494     <para>
2495     <literal>fakeroot debian/rules binary</literal> runs <literal>fakeroot dh
2496     binary</literal>; which in turn runs the following<footnote><para> This assumes
2497     that the <systemitem role="package">python-support</systemitem> package is
2498     installed on the system. </para> </footnote>:
2499     </para>
2500     <screen>
2501     dh_testroot
2502     dh_prep
2503     dh_installdirs
2504     dh_auto_install
2505     dh_install
2506     dh_installdocs
2507     dh_installchangelogs
2508     dh_installexamples
2509     dh_installman
2510     dh_installcatalogs
2511     dh_installcron
2512     dh_installdebconf
2513     dh_installemacsen
2514     dh_installifupdown
2515     dh_installinfo
2516     dh_pysupport
2517     dh_installinit
2518     dh_installmenu
2519     dh_installmime
2520     dh_installmodules
2521     dh_installlogcheck
2522     dh_installlogrotate
2523     dh_installpam
2524     dh_installppp
2525     dh_installudev
2526     dh_installwm
2527     dh_installxfonts
2528     dh_bugfiles
2529     dh_lintian
2530     dh_gconf
2531     dh_icons
2532     dh_perl
2533     dh_usrlocal
2534     dh_link
2535     dh_compress
2536     dh_fixperms
2537     dh_strip
2538     dh_makeshlibs
2539     dh_shlibdeps
2540     dh_installdeb
2541     dh_gencontrol
2542     dh_md5sums
2543     dh_builddeb
2544     </screen>
2545     </listitem>
2546     <listitem>
2547     <para>
2548     <literal>fakeroot debian/rules binary-arch</literal> runs <literal>fakeroot dh
2549     binary-arch</literal>; which in turn runs the same sequence as
2550     <literal>fakeroot dh binary</literal> but with the <literal>-a</literal> option
2551     appended for each command.
2552     </para>
2553     </listitem>
2554     <listitem>
2555     <para>
2556     <literal>fakeroot debian/rules binary-indep</literal> runs <literal>fakeroot dh
2557     binary-indep</literal>; which in turn runs almost the same sequence as
2558     <literal>fakeroot dh binary</literal> but excluding
2559     <command>dh_strip</command>, <command>dh_makeshlibs</command>, and
2560     <command>dh_shlibdeps</command> with the <literal>-i</literal> option appended
2561     for each remaining command.
2562     </para>
2563     </listitem>
2564     </itemizedlist>
2565     <para>
2566     The function of <command>dh_*</command> commands are almost self-evident from
2567     their names. <footnote><para> For complete information on what do all these
2568     <command>dh_*</command> scripts exactly do, and what their other options are,
2569     please read their respective manual pages and the <systemitem role="package">debhelper</systemitem> documentation. </para> </footnote> There
2570     are few notable ones worth making (over)simplified explanation here assuming
2571     typical build environment based on <filename>Makefile</filename>.
2572     <footnote><para> These commands support other build environments such as
2573     <filename>setup.py</filename> which can be listed by executing
2574     <literal>dh_auto_build --list</literal> in a package source directory. </para>
2575     </footnote>
2576     </para>
2577     <itemizedlist>
2578     <listitem>
2579     <para>
2580     <command>dh_auto_clean</command> usually executes the following if
2581     <filename>Makefile</filename> exists with the <literal>distclean</literal>
2582     target. <footnote><para> It actually looks for the first available target of
2583     <literal>distclean</literal>, <literal>realclean</literal> or
2584     <literal>clean</literal> in <filename>Makefile</filename> and execute it.
2585     </para> </footnote>
2586     </para>
2587     <screen>
2588     make distclean
2589     </screen>
2590     </listitem>
2591     <listitem>
2592     <para>
2593     <command>dh_auto_configure</command> usually executes the following if
2594     <filename>./configure</filename> exists (arguments abbreviated for
2595     readability).
2596     </para>
2597     <screen>
2598     ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var ...
2599     </screen>
2600     </listitem>
2601     <listitem>
2602     <para>
2603     <command>dh_auto_build</command> usually executes the following to execute the
2604     first target of <filename>Makefile</filename> if it exists.
2605     </para>
2606     <screen>
2607     make
2608     </screen>
2609     </listitem>
2610     <listitem>
2611     <para>
2612     <command>dh_auto_test</command> usually executes the following if
2613     <filename>Makefile</filename> exists with the <literal>test</literal> target.
2614     <footnote><para> It actually looks for the first available target of
2615     <literal>test</literal> or <literal>check</literal> in
2616     <filename>Makefile</filename> and execute it. </para> </footnote>
2617     </para>
2618     <screen>
2619     make test
2620     </screen>
2621     </listitem>
2622     <listitem>
2623     <para>
2624     <command>dh_auto_install</command> usually executes the following if
2625     <filename>Makefile</filename> exists with the <literal>install</literal> target
2626     (line folded for readability).
2627     </para>
2628     <screen>
2629     make install \
2630     DESTDIR=<replaceable>/path/to</replaceable>/<replaceable>package</replaceable>_<replaceable>version</replaceable>-<replaceable>revision</replaceable>/debian/<replaceable>package</replaceable>
2631     </screen>
2632     </listitem>
2633     </itemizedlist>
2634     <para>
2635     Targets which require the <command>fakeroot</command> command contain
2636     <command>dh_testroot</command>. If you are not pretending to be root using
2637     this command, it exits with an error.
2638     </para>
2639     <para>
2640     The important part to know about the <filename>rules</filename> file created by
2641     <command>dh_make</command>, is that it is just a suggestion. It will work for
2642     most packages but for more complicated ones, don't be afraid to customize it to
2643     fit your needs. Only things that you must not change are the names of the
2644     rules, because all the tools use these names, as mandated by the Debian Policy.
2645     </para>
2646     <para>
2647     Although <literal>install</literal> is not required target, it is supported.
2648     <literal>fakeroot dh install</literal> behaves like <literal>fakeroot dh
2649     binary</literal> but stops after <command>dh_fixperms</command>.
2650     </para>
2651     </section>
2652     <section id="customrules"><title>Customization of <filename>rules</filename> file</title>
2653     <para>
2654     There are many ways to customize the <filename>rules</filename> file created
2655     with the new <command>dh</command> command.
2656     </para>
2657     <para>
2658     The <literal>dh $@</literal> command can be customized as follows.
2659     <footnote><para> If a package installs the
2660     <filename>/usr/share/perl5/Debian/Debhelper/Sequence/<replaceable>custom_name</replaceable>.pm</filename>
2661     file, you should activate its customization function by <literal>dh --with
2662     <replaceable>custom-name</replaceable> $@</literal>. </para> </footnote>
2663     </para>
2664     <itemizedlist>
2665     <listitem>
2666     <para>
2667     Add support of the <command>dh_pysupport</command> command. (The best choice
2668     for Python.) <footnote><para> Use of the <command>dh_pysupport</command>
2669     command is preferred over use of the <command>dh_pycentral</command> command.
2670     Do not use the <command>dh_python</command> command. </para> </footnote>
2671     </para>
2672     <itemizedlist>
2673     <listitem>
2674     <para>
2675     Install the <systemitem role="package">python-support</systemitem> package in
2676     <literal>Build-Depends</literal>.
2677     </para>
2678     </listitem>
2679     <listitem>
2680     <para>
2681     Use <literal>dh $@</literal> as usual. (This is enabled by default)
2682     </para>
2683     </listitem>
2684     <listitem>
2685     <para>
2686     This handles Python modules using the <systemitem role="package">python-support</systemitem> framework.
2687     </para>
2688     </listitem>
2689     </itemizedlist>
2690     </listitem>
2691     <listitem>
2692     <para>
2693     Add support of the <command>dh_pycentral</command> command.
2694     </para>
2695     <itemizedlist>
2696     <listitem>
2697     <para>
2698     Install the <systemitem role="package">python-central</systemitem> package in
2699     <literal>Build-Depends</literal>.
2700     </para>
2701     </listitem>
2702     <listitem>
2703     <para>
2704     Use <literal>dh --with python-central $@</literal> instead.
2705     </para>
2706     </listitem>
2707     <listitem>
2708     <para>
2709     This also deactivates the <command>dh_pysupport</command> command.
2710     </para>
2711     </listitem>
2712     <listitem>
2713     <para>
2714     This handles Python modules using the <systemitem role="package">python-central</systemitem> framework.
2715     </para>
2716     </listitem>
2717     </itemizedlist>
2718     </listitem>
2719     <listitem>
2720     <para>
2721     Add support of the <command>dh_installtex</command> command.
2722     </para>
2723     <itemizedlist>
2724     <listitem>
2725     <para>
2726     Install the <systemitem role="package">tex-common</systemitem> package in
2727     <literal>Build-Depends</literal>.
2728     </para>
2729     </listitem>
2730     <listitem>
2731     <para>
2732     Use <literal>dh --with tex $@</literal> instead.
2733     </para>
2734     </listitem>
2735     <listitem>
2736     <para>
2737     This registers Type 1 fonts, hyphenation patterns, or formats with TeX.
2738     </para>
2739     </listitem>
2740     </itemizedlist>
2741     </listitem>
2742     <listitem>
2743     <para>
2744     Add support of the <command>dh_quilt_patch</command> and
2745     <command>dh_quilt_unpatch</command> commands.
2746     </para>
2747     <itemizedlist>
2748     <listitem>
2749     <para>
2750     Install the <systemitem role="package">quilt</systemitem> package in
2751     <literal>Build-Depends</literal>.
2752     </para>
2753     </listitem>
2754     <listitem>
2755     <para>
2756     Use <literal>dh --with quilt $@</literal> instead.
2757     </para>
2758     </listitem>
2759     <listitem>
2760     <para>
2761     This applies and un-applies patches to the upstream source from files in the
2762     <filename>debian/patches</filename> directory for the <literal>1.0</literal>
2763     source package.
2764     </para>
2765     </listitem>
2766     <listitem>
2767     <para>
2768     This is not needed if you use the new <literal>3.0 (quilt)</literal> source
2769     package.
2770     </para>
2771     </listitem>
2772     </itemizedlist>
2773     </listitem>
2774     <listitem>
2775     <para>
2776     Add support of the <command>dh_dkms</command> command.
2777     </para>
2778     <itemizedlist>
2779     <listitem>
2780     <para>
2781     Install the <systemitem role="package">dkms</systemitem> package in
2782     <literal>Build-Depends</literal>.
2783     </para>
2784     </listitem>
2785     <listitem>
2786     <para>
2787     Use <literal>dh --with dkms $@</literal> instead.
2788     </para>
2789     </listitem>
2790     <listitem>
2791     <para>
2792     This correctly handles DKMS usage by the kernel module package.
2793     </para>
2794     </listitem>
2795     </itemizedlist>
2796     </listitem>
2797     <listitem>
2798     <para>
2799     Add support of the <command>dh_autotools-dev_updateconfig</command> and
2800     <command>dh_autotools-dev_restoreconfig</command> commands.
2801     </para>
2802     <itemizedlist>
2803     <listitem>
2804     <para>
2805     Install the <systemitem role="package">autotools-dev</systemitem> package in
2806     <literal>Build-Depends</literal>.
2807     </para>
2808     </listitem>
2809     <listitem>
2810     <para>
2811     Use <literal>dh --with autotools-dev $@</literal> instead.
2812     </para>
2813     </listitem>
2814     <listitem>
2815     <para>
2816     This updates and restores <filename>config.sub</filename> and
2817     <filename>config.guess</filename>.
2818     </para>
2819     </listitem>
2820     </itemizedlist>
2821     </listitem>
2822     <listitem>
2823     <para>
2824     Add support of the <command>dh_autoreconf</command> and
2825     <command>dh_autoreconf_clean</command> commands.
2826     </para>
2827     <itemizedlist>
2828     <listitem>
2829     <para>
2830     Install the <systemitem role="package">dh-autoreconf</systemitem> package in
2831     <literal>Build-Depends</literal>.
2832     </para>
2833     </listitem>
2834     <listitem>
2835     <para>
2836     Use <literal>dh --with autoreconf $@</literal> instead.
2837     </para>
2838     </listitem>
2839     <listitem>
2840     <para>
2841     This updates the GNU Build System files and restores them after the build.
2842     </para>
2843     </listitem>
2844     </itemizedlist>
2845     </listitem>
2846     <listitem>
2847     <para>
2848     Add support to the <command>bash</command> completion feature.
2849     </para>
2850     <itemizedlist>
2851     <listitem>
2852     <para>
2853     Install the <systemitem role="package">bash-completion</systemitem> package in
2854     <literal>Build-Depends</literal>.
2855     </para>
2856     </listitem>
2857     <listitem>
2858     <para>
2859     Use <literal>dh --with bash-completion $@</literal> instead.
2860     </para>
2861     </listitem>
2862     <listitem>
2863     <para>
2864     This installs <command>bash</command> completions using configuration file at
2865     <filename>debian/<replaceable>package</replaceable>.bash-completion</filename>.
2866     </para>
2867     </listitem>
2868     </itemizedlist>
2869     </listitem>
2870     </itemizedlist>
2871     <para>
2872     Many <command>dh_*</command> commands invoked by the new <command>dh</command>
2873     command can be customized by the corresponding configuration files in the
2874     <filename>debian</filename> directory. See <xref linkend="dother"/> and the
2875     manpage of each command for the customization of such features.
2876     </para>
2877     <para>
2878     Some <command>dh_*</command> commands invoked by the new <command>dh</command>
2879     command may require you to run it with some arguments or to run additional
2880     commands with them or to skip them. For such cases, you create an
2881     <literal>override_dh_<replaceable>foo</replaceable></literal> target with its
2882     rule in the <filename>rules</filename> file only for the
2883     <command>dh_<replaceable>foo</replaceable></command> command you want to
2884     change. It basically say <emphasis>run me instead</emphasis>.
2885     <footnote><para> Under <literal>lenny</literal>, if you wanted to change the
2886     behavior of a <command>dh_*</command> script you found the relevant line in the
2887     <filename>rules</filename> file and adjusted it. </para> </footnote>
2888     </para>
2889     <para>
2890     Please note that the <command>dh_auto_*</command> commands tend to do more than
2891     what has been discussed as (over)simplified explanation to take care all the
2892     corner cases. Use of simplified equivalent command instead of these in
2893     <literal>override_dh_*</literal> targets except the
2894     <literal>override_dh_auto_clean</literal> target is a bad idea since it may
2895     kill such <systemitem role="package">debhelper</systemitem>'s smart features.
2896     </para>
2897     <para>
2898 osamu 8650 If you want to store the system configuration data in the
2899 osamu 8601 <filename>/etc/gentoo</filename> directory instead of the usual
2900 osamu 8650 <filename>/etc</filename> directory for the recent
2901     <systemitem role="package">gentoo</systemitem> package using Autotools, you can override the default
2902 osamu 8601 <literal>--sysconfig=/etc</literal> argument given by the
2903     <command>dh_auto_configure</command> command to the
2904 osamu 8650 <command>./configure</command> command by the following.
2905 osamu 8601 </para>
2906     <screen>
2907     override_dh_auto_configure:
2908     dh_auto_configure -- --sysconfig=/etc/gentoo
2909     </screen>
2910     <para>
2911     The arguments given after <literal>--</literal> are appended to the default
2912     arguments of the auto-executed program to override them. Using the
2913     <command>dh_auto_configure</command> command is better than the
2914     <command>./configure</command> command here since it will only override the
2915     <literal>--sysconfig</literal> argument and keeps well intended other arguments
2916     to the <command>./configure</command> command.
2917     </para>
2918     <para>
2919     If <filename>Makefile</filename> of a source for <systemitem role="package">gentoo</systemitem> requires you to specify
2920     <literal>build</literal> as its target to build it <footnote><para>
2921     <command>dh_auto_build</command> without any arguments will execute the first
2922     target in the <filename>Makefile</filename> file. </para> </footnote>, you
2923     create an <literal>override_dh_auto_build</literal> target to enable it.
2924     </para>
2925     <screen>
2926     override_dh_auto_build:
2927     dh_auto_build -- build
2928     </screen>
2929     <para>
2930     This ensures to run $(MAKE) with all the default arguments given by the
2931     <command>dh_auto_build</command> command and <literal>build</literal> argument.
2932     </para>
2933     <para>
2934     If <filename>Makefile</filename> of a source for <systemitem role="package">gentoo</systemitem> requires you to specify the
2935     <literal>packageclean</literal> target to clean it for Debian package instead
2936     of the <literal>distclean</literal> or <literal>clean</literal> targets in the
2937     <filename>Makefile</filename> file, you create an
2938     <literal>override_dh_auto_clean</literal> target to enable it.
2939     </para>
2940     <screen>
2941     override_dh_auto_clean:
2942     $(MAKE) packageclean
2943     </screen>
2944     <para>
2945     If <filename>Makefile</filename> of a source for <systemitem role="package">gentoo</systemitem> contains <literal>test</literal> target
2946     which you do not want to run for the Debian package building process, you can
2947     use empty <literal>override_dh_auto_test</literal> target to skip it.
2948     </para>
2949     <screen>
2950     override_dh_auto_test:
2951     </screen>
2952     <para>
2953     If <systemitem role="package">gentoo</systemitem> has an unusual upstream
2954     changelog file called <filename>FIXES</filename>,
2955     <command>dh_installchangelogs</command> will not install that file by default.
2956     The <command>dh_installchangelogs</command> command requires
2957     <filename>FIXES</filename> as its argument to install it. <footnote><para> The
2958     <filename>debian/changelog</filename> and <filename>debian/NEWS</filename>
2959     files are always automatically installed. The upstream changelog is searched
2960     by converting filenames to the lower case and matching them with the
2961     <filename>changelog</filename>, <filename>changes</filename>,
2962     <filename>changelog.txt</filename>, and <filename>changes.txt</filename>.
2963     </para> </footnote>
2964     </para>
2965     <screen>
2966     override_dh_installchangelogs:
2967     dh_installchangelogs FIXES
2968     </screen>
2969     <para>
2970     When you use the new <command>dh</command> command, use of explicit targets
2971     such as the ones listed in <xref linkend="targets"/> except
2972     <literal>get-orig-source</literal> target may make it difficult to understand
2973     their exact effects. Please limit explicit targets to
2974     <literal>override_dh_*</literal> targets and completely independent ones, if
2975     possible.
2976     </para>
2977     </section>
2978     </section>
2979     </chapter>
2980     <chapter id="dother"><title>Other files under the <filename>debian</filename> directory</title>
2981     <para>
2982     To control most of what <systemitem role="package">debhelper</systemitem> does
2983     while building the package, you put optional configuration files under the
2984 osamu 8731 <filename>debian</filename> directory. This chapter will provide an overview of
2985     what each of these does and its format. Please read the <ulink url="&debian-policy;">Debian Policy
2986 osamu 8628 Manual</ulink> and <ulink url="&developers-reference;">Debian Developer's
2987 osamu 8731 Reference</ulink> for guidelines for packaging.
2988 osamu 8601 </para>
2989     <para>
2990     The <command>dh_make</command> command will create some template configuration
2991     files under the <filename>debian</filename> directory. Most of them come with
2992     filenames suffixed by <literal>.ex</literal>. Some of them come with filenames
2993     prefixed by the binary package name such as
2994     <literal><replaceable>package</replaceable></literal>. Take a look at all of
2995     them.
2996 osamu 8668 <footnote><para>
2997     In this chapter, files in the <filename>debian</filename> directory are
2998 osamu 8731 referred to without the preceding <filename>debian/</filename> for simplicity whenever
2999 osamu 8668 they are obvious.
3000     </para></footnote>
3001 osamu 8601 </para>
3002     <para>
3003 osamu 8731 Some template configuration files for <systemitem role="package">debhelper</systemitem>
3004     may not be created by the <command>dh_make</command> command. In
3005     such cases, you need to create them with an editor.
3006 osamu 8601 </para>
3007     <para>
3008 osamu 8731 If you wish or need to activate any of these, please do the following:
3009 osamu 8601 </para>
3010     <itemizedlist>
3011     <listitem>
3012     <para>
3013     rename template files by removing the <literal>.ex</literal> or
3014 osamu 8731 <literal>.EX</literal> suffix if they have one;
3015 osamu 8601 </para>
3016     </listitem>
3017     <listitem>
3018     <para>
3019 osamu 8731 rename the configuration files to use the actual binary package
3020     name in place of <literal><replaceable>package</replaceable></literal>;
3021 osamu 8601 </para>
3022     </listitem>
3023     <listitem>
3024     <para>
3025 osamu 8731 modify template file contents to suit your needs;
3026 osamu 8601 </para>
3027     </listitem>
3028     <listitem>
3029     <para>
3030 osamu 8731 remove template files which you do not need;
3031 osamu 8601 </para>
3032     </listitem>
3033     <listitem>
3034     <para>
3035 taffit-guest 8665 modify the <filename>control</filename> file (see <xref linkend="control"/>),
3036 osamu 8731 if necessary;
3037 osamu 8601 </para>
3038     </listitem>
3039     <listitem>
3040     <para>
3041 taffit-guest 8665 modify the <filename>rules</filename> file (see <xref linkend="rules"/>), if
3042 osamu 8601 necessary.
3043     </para>
3044     </listitem>
3045     </itemizedlist>
3046     <para>
3047 osamu 8731 Any <systemitem role="package">debhelper</systemitem> configuration files
3048     without a <filename><replaceable>package</replaceable></filename> prefix, such as
3049     <filename>install</filename>, apply to the first binary package. When there are
3050 osamu 8601 many binary packages, their configurations can be specified by prefixing their
3051     name to their configuration filenames such as
3052     <filename><replaceable>package-1</replaceable>.install</filename>,
3053     <filename><replaceable>package-2</replaceable>.install</filename>, etc.
3054     </para>
3055 osamu 8731 <section id="readme"><title><filename>README.Debian</filename></title>
3056 osamu 8601 <para>
3057     Any extra details or discrepancies between the original package and your Debian
3058     version should be documented here.
3059     </para>
3060     <para>
3061 osamu 8731 <command>dh_make</command> created a default one; this is what it looks like:
3062 osamu 8601 </para>
3063     <screen>
3064     gentoo for Debian
3065     -----------------
3066     &lt;possible notes regarding this package - if none, delete this file&gt;
3067     -- Josip Rodin &lt;joy-mg@debian.org&gt;, Wed, 11 Nov 1998 21:02:14 +0100
3068     </screen>
3069     <para>
3070     If you have nothing to be documented, remove this file. See <citerefentry>
3071     <refentrytitle>dh_installdocs</refentrytitle> <manvolnum>1</manvolnum>
3072     </citerefentry>.
3073     </para>
3074     </section>
3075 osamu 8731 <section id="compat"><title><filename>compat</filename></title>
3076 osamu 8601 <para>
3077     The <filename>compat</filename> file defines the <systemitem role="package">debhelper</systemitem> compatibility level. Currently, you
3078 osamu 8731 should set it to the <systemitem role="package">debhelper</systemitem> v7 as
3079     follows:
3080 osamu 8601 </para>
3081     <screen>
3082     $ echo 7 &gt; debian/compat
3083     </screen>
3084     </section>
3085 osamu 8731 <section id="conffiles"><title><filename>conffiles</filename></title>
3086 osamu 8601 <para>
3087     One of the most annoying things about software is when you spend a great deal
3088     of time and effort customizing a program, only to have an upgrade stomp all
3089 osamu 8622 over your changes. Debian solves this problem by marking such configuration files as conffiles.
3090     <footnote><para>See <citerefentry> <refentrytitle>dpkg</refentrytitle>
3091     <manvolnum>1</manvolnum> </citerefentry> and
3092 osamu 8737 <ulink url="&policy-conffiles;">Debian Policy Manual "D.2.5 Conffiles"</ulink>.
3093 osamu 8622 </para></footnote>
3094 osamu 8731 When you upgrade a package, you'll be asked whether you want to keep
3095 osamu 8622 your old configuration files or not.
3096 osamu 8601 </para>
3097     <para>
3098 osamu 8735 <citerefentry><refentrytitle>dh_installdeb</refentrytitle> <manvolnum>1</manvolnum>
3099     </citerefentry> <emphasis>automatically</emphasis> flags any files under
3100 osamu 8601 the <filename>/etc</filename> directory as conffiles, so if your program only
3101     has conffiles there you do not need to specify them in this file. For most
3102 osamu 8731 package types, the only place conffiles should ever be is under
3103     <filename>/etc</filename>, and so this file doesn't need to exist.
3104 osamu 8601 </para>
3105     <para>
3106     If your program uses configuration files but also rewrites them on its own,
3107 osamu 8731 it's best not to make them conffiles because <command>dpkg</command> will
3108 osamu 8601 then prompt users to verify the changes all the time.
3109     </para>
3110     <para>
3111     If the program you're packaging requires every user to modify the configuration
3112 osamu 8731 files in the <filename>/etc</filename> directory, there are two popular ways to
3113     arrange for them to not be conffiles, keeping <command>dpkg</command> quiet.
3114 osamu 8601 </para>
3115     <itemizedlist>
3116     <listitem>
3117     <para>
3118 osamu 8731 Create a symlink under the <filename>/etc</filename> directory pointing to a
3119 osamu 8601 file under the <filename>/var</filename> directory generated by the
3120 osamu 8731 maintainer scripts.
3121 osamu 8601 </para>
3122     </listitem>
3123     <listitem>
3124     <para>
3125 osamu 8731 Create a file generated by the maintainer scripts under the <filename>/etc</filename> directory.
3126 osamu 8601 </para>
3127     </listitem>
3128     </itemizedlist>
3129     <para>
3130 osamu 8731 For information on maintainer scripts, see <xref linkend="maintscripts"/>.
3131 osamu 8601 </para>
3132     </section>
3133 osamu 8731 <section id="crond"><title><filename><replaceable>package</replaceable>.cron.*</filename></title>
3134 osamu 8601 <para>
3135     If your package requires regularly scheduled tasks to operate properly, you can
3136 osamu 8731 use these files to set that up. You can set up regular tasks that either happen
3137     hourly, daily, weekly, or monthly, or alternatively happen at any other time that
3138 osamu 8601 you wish. The filenames are:
3139     </para>
3140     <itemizedlist>
3141     <listitem>
3142     <para>
3143 osamu 8731 <filename><replaceable>package</replaceable>.cron.hourly</filename> - Installed as
3144     <filename>/etc/cron.hourly/<replaceable>package</replaceable></filename>; run
3145     once an hour.
3146 osamu 8601 </para>
3147     </listitem>
3148     <listitem>
3149     <para>
3150 osamu 8731 <filename><replaceable>package</replaceable>.cron.daily</filename> - Installed as
3151     <filename>/etc/cron.daily/<replaceable>package</replaceable></filename>; run
3152     once a day.
3153 osamu 8601 </para>
3154     </listitem>
3155     <listitem>
3156     <para>
3157 osamu 8731 <filename><replaceable>package</replaceable>.cron.weekly</filename> - Installed as
3158     <filename>/etc/cron.weekly/<replaceable>package</replaceable></filename>; run
3159     once a week.
3160 osamu 8601 </para>
3161     </listitem>
3162     <listitem>
3163     <para>
3164 osamu 8731 <filename><replaceable>package</replaceable>.cron.monthly</filename> - Installed as
3165 osamu 8601 <filename>/etc/cron.monthly/<replaceable>package</replaceable></filename>: run
3166 osamu 8731 once a month.
3167 osamu 8601 </para>
3168     </listitem>
3169     <listitem>
3170     <para>
3171 osamu 8731 <filename><replaceable>package</replaceable>.cron.d</filename> - Installed as
3172 osamu 8601 <filename>/etc/cron.d/<replaceable>package</replaceable></filename>: for any
3173 osamu 8731 other time.
3174 osamu 8601 </para>
3175     </listitem>
3176     </itemizedlist>
3177     <para>
3178 osamu 8731 Most of these files are shell scripts, with the exception of
3179     <filename><replaceable>package</replaceable>.cron.d</filename> which follows
3180 osamu 8601 the format of <citerefentry> <refentrytitle>crontab</refentrytitle>
3181     <manvolnum>5</manvolnum> </citerefentry>.
3182     </para>
3183     <para>
3184 osamu 8731 No explicit <filename>cron.*</filename> file is needed to set up log rotation;
3185     for that, see
3186     <citerefentry><refentrytitle>dh_installlogrotate</refentrytitle>
3187     <manvolnum>1</manvolnum></citerefentry> and
3188     <citerefentry><refentrytitle>logrotate</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
3189 osamu 8601 </para>
3190     </section>
3191 osamu 8731 <section id="dirs"><title><filename>dirs</filename></title>
3192 osamu 8601 <para>
3193 osamu 8731 This file specifies any directories which we need but which are not created by the normal installation
3194 osamu 8601 procedure (<literal>make install DESTDIR=...</literal> invoked by
3195 osamu 8731 <literal>dh_auto_install</literal>). This generally
3196 osamu 8601 means there is a problem with the <filename>Makefile</filename>.
3197     </para>
3198     <para>
3199 osamu 8731 Files listed in an <filename>install</filename> file don't need their
3200 taffit-guest 8665 directories created first. See <xref linkend="install"/>.
3201 osamu 8601 </para>
3202     <para>
3203 osamu 8652 It is best to try to run the installation first and only use this if you
3204 osamu 8731 run into trouble. There is no preceding slash on the directory names listed in
3205 osamu 8622 the <filename>dirs</filename> file.
3206 osamu 8601 </para>
3207     </section>
3208 osamu 8731 <section id="doc-base"><title><filename><replaceable>package</replaceable>.doc-base</filename></title>
3209 osamu 8601 <para>
3210 osamu 8731 If your package has documentation other than manual and info pages, you
3211 osamu 8601 should use the <systemitem role="package">doc-base</systemitem> file to
3212     register it, so the user can find it with e.g. <citerefentry>
3213     <refentrytitle>dhelp</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>,
3214     <citerefentry> <refentrytitle>dwww</refentrytitle> <manvolnum>1</manvolnum>
3215 osamu 8731 </citerefentry>, or <citerefentry> <refentrytitle>doccentral</refentrytitle>
3216 osamu 8601 <manvolnum>1</manvolnum> </citerefentry>.
3217     </para>
3218     <para>
3219     This usually includes HTML, PS and PDF files, shipped in
3220     <filename>/usr/share/doc/<replaceable>packagename</replaceable>/</filename>.
3221     </para>
3222     <para>
3223 osamu 8731 This is what <systemitem role="package">gentoo</systemitem>'s doc-base file
3224 osamu 8601 <filename>gentoo.doc-base</filename> looks like:
3225     </para>
3226     <screen>
3227     Document: gentoo
3228     Title: Gentoo Manual
3229     Author: Emil Brink
3230     Abstract: This manual describes what Gentoo is, and how it can be used.
3231     Section: File Management
3232     Format: HTML
3233     Index: /usr/share/doc/gentoo/html/index.html
3234     Files: /usr/share/doc/gentoo/html/*.html
3235     </screen>
3236     <para>
3237     For information on the file format, see <citerefentry>
3238     <refentrytitle>install-docs</refentrytitle> <manvolnum>8</manvolnum>
3239     </citerefentry> and the <systemitem role="package">doc-base</systemitem>
3240 osamu 8639 manual, in <ulink url="&doc-base;">Debian doc-base Manual</ulink>.
3241 osamu 8601 </para>
3242     <para>
3243 taffit-guest 8665 For more details on installing additional documentation, look in <xref linkend="destdir"/>.
3244 osamu 8601 </para>
3245     </section>
3246 osamu 8731 <section id="docs"><title><filename>docs</filename></title>
3247 osamu 8601 <para>
3248     This file specifies the file names of documentation files we can have
3249     <citerefentry> <refentrytitle>dh_installdocs</refentrytitle>
3250     <manvolnum>1</manvolnum> </citerefentry> install into the temporary directory
3251     for us.
3252     </para>
3253     <para>
3254     By default, it will include all existing files in the top-level source
3255     directory that are called <filename>BUGS</filename>,
3256     <filename>README*</filename>, <filename>TODO</filename> etc.
3257     </para>
3258     <para>
3259 osamu 8731 For <systemitem role="package">gentoo</systemitem>, some other files
3260     are also included:
3261 osamu 8601 </para>
3262     <screen>
3263     BUGS
3264     CONFIG-CHANGES
3265     CREDITS
3266     NEWS
3267     README
3268     README.gtkrc
3269     TODO
3270     </screen>
3271     </section>
3272 osamu 8731 <section id="emacsen"><title><filename>emacsen-*</filename></title>
3273 osamu 8601 <para>
3274     If your package supplies Emacs files that can be bytecompiled at package
3275     installation time, you can use these files to set it up.
3276     </para>
3277     <para>
3278     They are installed into the temporary directory by <citerefentry>
3279     <refentrytitle>dh_installemacsen</refentrytitle> <manvolnum>1</manvolnum>
3280     </citerefentry>.
3281     </para>
3282     <para>
3283     If you don't need these, remove them.
3284     </para>
3285     </section>
3286 osamu 8731 <section id="examples"><title><filename><replaceable>package</replaceable>.examples</filename></title>
3287 osamu 8601 <para>
3288     The <citerefentry> <refentrytitle>dh_installexamples</refentrytitle>
3289     <manvolnum>1</manvolnum> </citerefentry> command installs files and directories
3290     listed in this file as example files.
3291     </para>
3292     </section>
3293 osamu 8731 <section id="initd"><title><filename><replaceable>package</replaceable>.init</filename> and <filename><replaceable>package</replaceable>.default</filename></title>
3294 osamu 8601 <para>
3295 osamu 8731 If your package is a daemon that needs to be run at system start-up, you've
3296 osamu 8601 obviously disregarded my initial recommendation, haven't you? :-)
3297     </para>
3298     <para>
3299     The <filename><replaceable>package</replaceable>.init</filename> file is
3300     installed as the
3301 osamu 8731 <filename>/etc/init.d/<replaceable>package</replaceable></filename> script
3302     which starts and stops the daemon.
3303 osamu 8601 Its fairly generic skeleton template is provided by the
3304     <command>dh_make</command> command as <filename>init.d.ex</filename>. You'll
3305     likely have to rename and edit it, a lot, while making sure to provide
3306 osamu 8642 <ulink url="&lsb;">Linux Standard Base</ulink> (LSB) compliant headers. It
3307 osamu 8601 gets installed into the temporary directory by <citerefentry>
3308     <refentrytitle>dh_installinit</refentrytitle> <manvolnum>1</manvolnum>
3309     </citerefentry>.
3310     </para>
3311     <para>
3312     The <filename><replaceable>package</replaceable>.default</filename> file will
3313 osamu 8731 be installed as
3314 osamu 8601 <filename>/etc/default/<replaceable>package</replaceable></filename>. This
3315 osamu 8731 file sets defaults that are sourced by the init script. This
3316     <filename><replaceable>package</replaceable>.default</filename> file
3317     is most often used to disable running a daemon, or to set some default flags or
3318     timeouts. If your init script has certain configurable
3319     features, you can set them in the <filename><replaceable>package</replaceable>.default</filename> file,
3320     instead of in the init script itself.
3321 osamu 8601 </para>
3322     <para>
3323 osamu 8731 If your upstream program provides a file for the init script, you can either use it or not. If you
3324     don't use their init script then create a new one in
3325 osamu 8668 <filename><replaceable>package</replaceable>.init</filename>. However
3326 osamu 8731 if the upstream init script looks fine and installs in the right place you
3327     still need to set up the <filename>rc*</filename> symlinks. To do this you will
3328 osamu 8601 need to override <command>dh_installinit</command> in the
3329     <filename>rules</filename> file with the following lines:
3330     </para>
3331     <screen>
3332     override_dh_installinit:
3333     dh_installinit --onlyscripts
3334     </screen>
3335     <para>
3336     If you don't need this, remove the files.
3337     </para>
3338     </section>
3339 osamu 8731 <section id="install"><title><filename>install</filename></title>
3340 osamu 8601 <para>
3341     If there are files that need to be installed into your package but your
3342 osamu 8731 standard <literal>make install</literal> won't do it, put the filenames and
3343 osamu 8601 destinations into this <filename>install</filename> file. They are installed
3344     by <citerefentry> <refentrytitle>dh_install</refentrytitle>
3345     <manvolnum>1</manvolnum> </citerefentry>.<footnote><para> This replaces the
3346     deprecated <citerefentry> <refentrytitle>dh_movefiles</refentrytitle>
3347     <manvolnum>1</manvolnum> </citerefentry> command which is configured by the
3348     <filename>files</filename> file. </para> </footnote> You should first check
3349     there is not a more specific tool to use. For example, documents should be in
3350     the <filename>docs</filename> file and not in this one.
3351     </para>
3352     <para>
3353     This <filename>install</filename> file has one line per file installed, with
3354     the name of the file (relative to the top build directory) then a space then
3355 osamu 8731 the installation directory (relative to the install directory). One example of where this is used is if a binary <filename>src/<replaceable>bar</replaceable></filename> is left uninstalled; the
3356     <filename>install</filename> file might look like:
3357 osamu 8601 </para>
3358     <screen>
3359 osamu 8731 src/<replaceable>bar</replaceable> usr/bin
3360 osamu 8601 </screen>
3361     <para>
3362 osamu 8731 This means when this package is installed, there will be a binary executable
3363     <filename>/usr/bin/<replaceable>bar</replaceable></filename>.
3364 osamu 8601 </para>
3365     <para>
3366     Alternatively, this <filename>install</filename> can have the name of the file
3367     only without the installation directory when the relative directory path does
3368 osamu 8731 not change. This format is usually used for a large package that splits the
3369     output of its build into multiple binary packages using
3370 osamu 8601 <filename><replaceable>package-1</replaceable>.install</filename>,
3371     <filename><replaceable>package-2</replaceable>.install</filename>, etc.
3372     </para>
3373     <para>
3374 osamu 8731 The <command>dh_install</command> command will fall back to looking in
3375 osamu 8601 <filename>debian/tmp</filename> for files, if it doesn't find them in the
3376     current directory (or wherever you've told it to look using
3377     <literal>--sourcedir</literal>).
3378     </para>
3379     </section>
3380 osamu 8731 <section id="info"><title><filename><replaceable>package</replaceable>.info</filename></title>
3381 osamu 8601 <para>
3382     If your package has info pages, you should install them using <citerefentry>
3383     <refentrytitle>dh_installinfo</refentrytitle> <manvolnum>1</manvolnum>
3384 osamu 8731 </citerefentry> by listing them in a
3385     <filename><replaceable>package</replaceable>.info</filename> file.
3386 osamu 8601 </para>
3387     </section>
3388 osamu 8731 <section id="lintian"><title><filename>{<replaceable>package</replaceable>.,source/}lintian-overrides</filename></title>
3389 osamu 8601 <para>
3390     If <systemitem role="package">lintian</systemitem> reports an erroneous
3391 osamu 8731 diagnostic for a case where Debian policy allows exceptions to some rule, you can
3392 osamu 8601 use <filename><replaceable>package</replaceable>.lintian-overrides</filename>
3393 osamu 8731 or <filename>source/lintian-overrides</filename> to quieten it. Please read
3394 osamu 8639 <ulink url="&lintian-doc;">Lintian User's Manual</ulink> and refrain
3395 osamu 8601 from abusing this.
3396     </para>
3397     <para>
3398     <filename><replaceable>package</replaceable>.lintian-overrides</filename> is
3399 osamu 8731 for the binary package named <systemitem role="package"><replaceable>package</replaceable></systemitem> and is installed
3400 osamu 8601 into
3401     <filename>usr/share/lintian/overrides/<replaceable>package</replaceable></filename>
3402     by the <command>dh_lintian</command> command.
3403     </para>
3404     <para>
3405     <filename>source/lintian-overrides</filename> is for the source package. This
3406     is not installed.
3407     </para>
3408     </section>
3409 osamu 8731 <section id="manpage"><title><filename>manpage.*</filename></title>
3410 osamu 8601 <para>
3411     Your program(s) should have a manual page. If they don't, you should create
3412 osamu 8731 them. The <command>dh_make</command> command creates some template files for
3413     manual pages. These need to be copied and edited for each command missing its
3414 osamu 8601 manual page. Please make sure to remove unused templates.
3415     </para>
3416 osamu 8731 <section id="manpage1"><title><filename>manpage.1.ex</filename></title>
3417 osamu 8601 <para>
3418     Manual pages are normally written in <citerefentry>
3419     <refentrytitle>nroff</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.
3420     The <filename>manpage.1.ex</filename> template is written in
3421     <command>nroff</command>, too. See the <citerefentry>
3422     <refentrytitle>man</refentrytitle> <manvolnum>7</manvolnum> </citerefentry>
3423     manual page for a brief description of how to edit such a file.
3424     </para>
3425     <para>
3426 osamu 8731 The final manual page file name should give the name of the program it is
3427 osamu 8601 documenting, so we will rename it from <literal>manpage</literal> to
3428     <literal>gentoo</literal>. The file name also includes <literal>.1</literal>
3429     as the first suffix, which means it's a manual page for a user command. Be
3430     sure to verify that this section is indeed the correct one. Here's a short
3431     list of manual page sections:
3432     </para>
3433 osamu 8732 <informaltable id="manpage-sections" pgwide="0" frame="topbot" rowsep="1" colsep="1">
3434 osamu 8636 <tgroup cols="3">
3435     <colspec colwidth="8*" align="left"/> <colspec colwidth="24*" align="left"/> <colspec colwidth="40*" align="left"/>
3436     <thead>
3437     <row> <entry>Section</entry> <entry>Description</entry> <entry>Notes</entry> </row>
3438     </thead>
3439     <tbody>
3440     <row> <entry>1</entry> <entry>User command</entry> <entry>Executable commands or scripts</entry> </row>
3441     <row> <entry>2</entry> <entry>System calls</entry> <entry>Functions provided by the kernel</entry> </row>
3442     <row> <entry>3</entry> <entry>Library calls</entry> <entry>Functions within system libraries</entry> </row>
3443 taffit-guest 8665 <row> <entry>4</entry> <entry>Special files</entry> <entry>Usually found in <filename>/dev</filename></entry> </row>
3444 osamu 8636 <row> <entry>5</entry> <entry>File formats</entry> <entry>E.g. <filename>/etc/passwd</filename>'s format</entry> </row>
3445     <row> <entry>6</entry> <entry>Games</entry> <entry>Games or other frivolous programs</entry> </row>
3446 taffit-guest 8665 <row> <entry>7</entry> <entry>Macro packages</entry> <entry>Such as <command>man</command> macros</entry> </row>
3447 osamu 8636 <row> <entry>8</entry> <entry>System administration</entry> <entry>Programs typically only run by root</entry> </row>
3448     <row> <entry>9</entry> <entry>Kernel routines</entry> <entry>Non-standard calls and internals</entry> </row>
3449     </tbody>
3450     </tgroup>
3451 osamu 8732 </informaltable>
3452 osamu 8601 <para>
3453     So <systemitem role="package">gentoo</systemitem>'s man page should be called
3454     <filename>gentoo.1</filename>. If there was no <filename>gentoo.1</filename>
3455     man page in the original source, you should create it by renaming the
3456     <filename>manpage.1.ex</filename> template to <filename>gentoo.1</filename> and
3457 osamu 8731 editing it using information from the example and from the upstream docs.
3458 osamu 8601 </para>
3459     <para>
3460     You can use the <command>help2man</command> command to generate a man page out
3461 osamu 8731 of the <literal>--help</literal> and <literal>--version</literal> output of each
3462     program, too. <footnote><para> Note that <command>help2man</command>'s
3463     placeholder man page will claim that more detailed documentation is
3464     available in the info system. If the command is missing an
3465     <command>info</command> page, you
3466     should manually edit the man page created by the
3467 osamu 8601 <command>help2man</command> command. </para> </footnote>
3468     </para>
3469     </section>
3470 osamu 8731 <section id="manpagesgml"><title><filename>manpage.sgml.ex</filename></title>
3471 osamu 8601 <para>
3472     If on the other hand you prefer writing SGML instead of
3473     <command>nroff</command>, you can use the <filename>manpage.sgml.ex</filename>
3474     template. If you do this, you have to:
3475     </para>
3476     <itemizedlist>
3477     <listitem>
3478     <para>
3479     rename the file to something like <filename>gentoo.sgml</filename>.
3480     </para>
3481     </listitem>
3482     <listitem>
3483     <para>
3484     install the <systemitem role="package">docbook-to-man</systemitem> package
3485     </para>
3486     </listitem>
3487     <listitem>
3488     <para>
3489     add <literal>docbook-to-man</literal> to the <literal>Build-Depends</literal>
3490     line in the <filename>control</filename> file
3491     </para>
3492     </listitem>
3493     <listitem>
3494     <para>
3495 osamu 8731 add an <literal>override_dh_auto_build</literal> target to your
3496 osamu 8601 <filename>rules</filename> file:
3497     </para>
3498     <screen>
3499     override_dh_auto_build:
3500     docbook-to-man debian/gentoo.sgml &gt; debian/gentoo.1
3501     dh_auto_build
3502     </screen>
3503     </listitem>
3504     </itemizedlist>
3505     </section>
3506 osamu 8731 <section id="manpagexml"><title><filename>manpage.xml.ex</filename></title>
3507 osamu 8601 <para>
3508     If you prefer XML over SGML, you can use the <literal>manpage.xml.ex</literal>
3509     template. If you do this, you have to:
3510     </para>
3511     <itemizedlist>
3512     <listitem>
3513     <para>
3514     rename the source file to something like <literal>gentoo.1.xml</literal>
3515     </para>
3516     </listitem>
3517     <listitem>
3518     <para>
3519     install the <systemitem role="package">docbook-xsl</systemitem> package and an
3520     XSLT processor like <systemitem role="package">xsltproc</systemitem>
3521     (recommended)
3522     </para>
3523     </listitem>
3524     <listitem>
3525     <para>
3526 osamu 8731 add the <literal>docbook-xsl</literal>, <literal>docbook-xml</literal>, and
3527 osamu 8601 <literal>xsltproc</literal> packages to the <literal>Build-Depends</literal>
3528     line in the <literal>control</literal> file
3529     </para>
3530     </listitem>
3531     <listitem>
3532     <para>
3533 osamu 8731 add an <literal>override_dh_auto_build</literal> target to your
3534 osamu 8601 <filename>rules</filename> file:
3535     </para>
3536     <screen>
3537     override_dh_auto_build:
3538     xsltproc --nonet \
3539     --param make.year.ranges 1 \
3540     --param make.single.year.ranges 1 \
3541     --param man.charmap.use.subset 0 \
3542     -o debian/ \
3543     http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl\
3544     debian/gentoo.1.xml
3545     dh_auto_build
3546     </screen>
3547     </listitem>
3548     </itemizedlist>
3549     </section>
3550     </section>
3551     <section id="manpages"><title><filename><replaceable>package</replaceable>.manpages</filename> file</title>
3552     <para>
3553     If your package has manual pages, you should install them using <citerefentry>
3554     <refentrytitle>dh_installman</refentrytitle> <manvolnum>1</manvolnum>
3555 osamu 8731 </citerefentry> by listing them in a
3556     <filename><replaceable>package</replaceable>.manpages</filename> file.
3557 osamu 8601 </para>
3558     <para>
3559 osamu 8731 To install <filename>docs/gentoo.1</filename> as a manpage for the <systemitem role="package">gentoo</systemitem> package, create a
3560     <filename>gentoo.manpages</filename> file as follows.
3561 osamu 8601 </para>
3562     <screen>
3563     docs/gentoo.1
3564     </screen>
3565     </section>
3566 osamu 8731 <section id="menu"><title><filename>menu</filename></title>
3567 osamu 8601 <para>
3568     X Window System users usually have a window manager with a menu that can be
3569     customized to launch programs. If they have installed the Debian <systemitem role="package">menu</systemitem> package, a set of menus for every program on
3570     the system will be created for them.
3571     </para>
3572     <para>
3573     Here's the default <filename>menu.ex</filename> file that
3574 osamu 8650 <command>dh_make</command> created.
3575 osamu 8601 </para>
3576     <screen>
3577     ?package(gentoo):needs=X11|text|vc|wm \
3578     section=Applications/see-menu-manual\
3579     title=gentoo command=/usr/bin/gentoo
3580     </screen>
3581     <para>
3582     The first field after the colon character is <literal>needs</literal>, and it
3583     specifies what kind of interface the program needs. Change this to one of the
3584     listed alternatives, e.g. <literal>text</literal> or <literal>X11</literal>.
3585     </para>
3586     <para>
3587 osamu 8731 The next is the <literal>section</literal> that the menu and submenu entry
3588     should appear in.
3589     <footnote><para> The current list of sections is in
3590 osamu 8737 <ulink url="&menu-structure;">The Debian Menu sub-policy 2.1 "Preferred menu structure"</ulink>.
3591 osamu 8731 There was a major reorganization of menu structure for <literal>squeeze</literal>.
3592 osamu 8642 </para> </footnote>
3593 osamu 8601 </para>
3594     <para>
3595     The <literal>title</literal> field is the name of the program. You can start
3596     this one in uppercase if you like. Just keep it short.
3597     </para>
3598     <para>
3599     Finally, the <literal>command</literal> field is the command that runs the
3600     program.
3601     </para>
3602     <para>
3603     Let's change the file name to <filename>menu</filename> and change the menu
3604     entry to this:
3605     </para>
3606     <screen>
3607     ?package(gentoo): needs=X11 \
3608     section=Applications/Tools \
3609     title=Gentoo command=gentoo
3610     </screen>
3611     <para>
3612     You can also add other fields like <literal>longtitle</literal>,
3613     <literal>icon</literal>, <literal>hints</literal> etc. See <citerefentry>
3614     <refentrytitle>dh_installmenu</refentrytitle> <manvolnum>1</manvolnum>
3615     </citerefentry>, <citerefentry> <refentrytitle>menufile</refentrytitle>
3616     <manvolnum>5</manvolnum> </citerefentry>, <citerefentry>
3617     <refentrytitle>update-menus</refentrytitle> <manvolnum>1</manvolnum>
3618 osamu 8731 </citerefentry>, and
3619 osamu 8734 <ulink url="&policy-menu;">The Debian Menu sub-policy</ulink> for more
3620 osamu 8601 information.
3621     </para>
3622     </section>
3623 osamu 8731 <section id="news"><title><filename>NEWS</filename></title>
3624 osamu 8601 <para>
3625     The <citerefentry> <refentrytitle>dh_installchangelogs</refentrytitle>
3626     <manvolnum>1</manvolnum> </citerefentry> command installs this.
3627     </para>
3628     </section>
3629 osamu 8731 <section id="maintscripts"><title><filename>{pre,post}{inst,rm}</filename></title>
3630 osamu 8601 <para>
3631     These <filename>postinst</filename>, <filename>preinst</filename>,
3632     <filename>postrm</filename>, and <filename>prerm</filename> files
3633 osamu 8731 <footnote><para> Despite this use of the <command>bash</command>
3634     shorthand expression <filename>{pre,post}{inst,rm}</filename> to indicate these
3635     filenames, you should use pure POSIX syntax for these maintainer scripts for
3636     compatibility with <command>dash</command> as the system shell. </para> </footnote> are
3637 osamu 8601 called <emphasis>maintainer scripts</emphasis>. They are scripts which are put
3638     in the control area of the package and run by <command>dpkg</command> when your
3639 osamu 8731 package is installed, upgraded, or removed.
3640 osamu 8601 </para>
3641     <para>
3642     As a novice maintainer, you should avoid any manual editing of
3643 osamu 8731 maintainer scripts because they are problematic. For more
3644     information refer to the <ulink url="&policy-mantainerscripts;">Debian
3645 osamu 8737 Policy Manual, 6 "Package maintainer scripts and installation
3646     procedure"</ulink>, and take a look at the example files provided by
3647 osamu 8601 <command>dh_make</command>.
3648     </para>
3649     <para>
3650 osamu 8731 If you did not listen to me and have created custom maintainer
3651     scripts for a package, you should make sure to test them not only
3652     for <emphasis role="strong">install</emphasis> and
3653     <emphasis role="strong">upgrade</emphasis> but also for
3654     <emphasis role="strong">remove</emphasis> and
3655     <emphasis role="strong">purge</emphasis>.
3656 osamu 8601 </para>
3657     <para>
3658     Upgrades to the new version should be silent and non-intrusive (existing users
3659     should not notice the upgrade except by discovering that old bugs have been
3660 osamu 8731 fixed and perhaps that there are new features).
3661 osamu 8601 </para>
3662     <para>
3663     When the upgrade is necessarily intrusive (eg., config files scattered through
3664 osamu 8731 various home directories with totally different structure), you may
3665     consider as the last resort switching the package to a safe fallback state
3666     (e.g., disabling a service) and providing the proper documentation
3667     required by policy (<filename>README.Debian</filename> and
3668     <filename>NEWS.Debian</filename>). Don't bother the user with
3669     <command>debconf</command> notes invoked from these maintainer scripts
3670     for upgrades.
3671 osamu 8601 </para>
3672     <para>
3673 osamu 8731 The <systemitem role="package">ucf</systemitem> package provides a
3674 osamu 8601 <emphasis>conffile-like</emphasis> handling infrastructure to preserve user
3675 osamu 8731 changes for files that may not be labeled as <emphasis>conffiles</emphasis> such
3676     as those managed by the maintainer scripts. This should
3677 osamu 8601 minimize issues associated with them.
3678     </para>
3679     <para>
3680 osamu 8731 These maintainer scripts are among the Debian enhancements that
3681 osamu 8601 explain <emphasis role="strong">why people choose Debian</emphasis>. You must
3682 osamu 8731 be very careful not to turn them into a source of annoyance.
3683 osamu 8601 </para>
3684     </section>
3685 osamu 8731 <section id="todo"><title><filename>TODO</filename></title>
3686 osamu 8601 <para>
3687     The <citerefentry> <refentrytitle>dh_installdocs</refentrytitle>
3688     <manvolnum>1</manvolnum> </citerefentry> command installs this.
3689     </para>
3690     </section>
3691 osamu 8731 <section id="watch"><title><filename>watch</filename></title>
3692 osamu 8601 <para>
3693     The <filename>watch</filename> file format is documented in the <citerefentry>
3694     <refentrytitle>uscan</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>
3695     manpage. The <filename>watch</filename> file configures the
3696     <command>uscan</command> program (in the <systemitem role="package">devscripts</systemitem> package) to watch the site where you
3697 osamu 8731 originally got the source from. This is also used by the
3698     <ulink url="&dehs;">Debian External Health Status (DEHS)</ulink> service.
3699 osamu 8601 </para>
3700     <para>
3701 osamu 8731 Here are its contents:
3702 osamu 8601 </para>
3703     <screen>
3704     # watch control file for uscan
3705     version=3
3706 osamu 8628 &sf-net;/gentoo/gentoo-(.+)\.tar\.gz debian uupdate
3707 osamu 8601 </screen>
3708     <para>
3709 osamu 8731 Normally with a <filename>watch</filename> file, the URL at
3710 osamu 8628 <literal>&sf-net;/gentoo</literal> is downloaded and searched for links of
3711 osamu 8731 the form <literal>&lt;a href=...&gt;</literal>. The basename (just the part
3712     after the final <literal>/</literal>) of each linked URL is compared against
3713     the Perl regular expression pattern (see <citerefentry> <refentrytitle>perlre</refentrytitle>
3714     <manvolnum>1</manvolnum> </citerefentry>)
3715     <literal>gentoo-(.+)\.tar\.gz</literal>. Out of the files that match, the one with
3716 osamu 8601 the greatest version number is downloaded and the <command>uupdate</command>
3717 osamu 8731 program is run to create an updated source tree.
3718 osamu 8601 </para>
3719     <para>
3720     Although this is true for other sites, the SourceForge download service at
3721 osamu 8642 <ulink url="&sf-net;"/> is an exception. When the
3722 osamu 8731 <filename>watch</filename> file has an URL matching the Perl regexp
3723 osamu 8601 <literal>^http://sf\.net/</literal>, the <command>uscan</command> program
3724 osamu 8731 replaces it with <literal>&qa-do;watch/sf.php/</literal> and
3725     then applies this rule. The URL redirector service at <ulink url="&qa-do;"/> is designed to offer
3726     a stable redirect service to the desired file for any
3727     <filename>watch</filename> pattern of the form
3728 osamu 8628 <literal>&sf-net;/<replaceable>project</replaceable>/<replaceable>tar-name</replaceable>-(.+)\.tar\.gz</literal>.
3729 osamu 8731 This solves issues related to periodically changing SourceForge URLs.
3730 osamu 8601 </para>
3731     </section>
3732 osamu 8731 <section id="sourcef"><title><filename>source/format</filename></title>
3733 osamu 8601 <para>
3734     In the <filename>debian/source/format</filename> file, there should be a single
3735     line indicating the desired format for the source package (check <citerefentry>
3736     <refentrytitle>dpkg-source</refentrytitle> <manvolnum>1</manvolnum>
3737     </citerefentry> for an exhaustive list). After <literal>squeeze</literal>, it
3738     should say either:
3739     </para>
3740     <itemizedlist>
3741     <listitem>
3742     <para>
3743     <literal>3.0 (native)</literal> for Debian native packages or
3744     </para>
3745     </listitem>
3746     <listitem>
3747     <para>
3748     <literal>3.0 (quilt)</literal> for everything else.
3749     </para>
3750     </listitem>
3751     </itemizedlist>
3752     <para>
3753     The newer <literal>3.0 (quilt)</literal> source format records modifications in
3754     a <command>quilt</command> patch series within
3755     <filename>debian/patches</filename>. Those changes are then automatically
3756 osamu 8731 applied during extraction of the source package. <footnote><para> See
3757     <ulink url="&debsrc3;">DebSrc3.0</ulink> for a summary on the switch to the new <literal>3.0
3758 osamu 8601 (quilt)</literal> and <literal>3.0 (native)</literal> source formats. </para>
3759     </footnote> The Debian modifications are simply stored in a
3760     <filename>debian.tar.gz</filename> archive containing all files under the
3761     <filename>debian</filename> directory. This new format supports inclusion of
3762     binary files such as PNG icons by the package maintainer without requiring
3763 osamu 8719 tricks. <footnote><para>Actually, this new format also supports multiple
3764 osamu 8601 upstream tarballs and more compression methods. These are beyond the scope of
3765 osamu 8719 this document.</para> </footnote>
3766 osamu 8601 </para>
3767     <para>
3768     When <command>dpkg-source</command> extracts a source package in <literal>3.0
3769     (quilt)</literal> source format, it automatically applies all patches listed in
3770     <filename>debian/patches/series</filename>. You can avoid applying patches at
3771     the end of the extraction with the <literal>--skip-patches</literal> option.
3772     </para>
3773     </section>
3774 osamu 8731 <section id="sourcel"><title><filename>source/local-options</filename></title>
3775 osamu 8601 <para>
3776     When you want to manage Debian packaging activities under a VCS, you typically
3777     create one branch (e.g. <literal>upstream</literal>) tracking the upstream
3778     source and another branch (e.g. typically <literal>master</literal> for Git)
3779     tracking the Debian package. For the latter, you usually want to have
3780     unpatched upstream source with your <filename>debian/*</filename> files for the
3781     Debian packaging to ease merging of the new upstream source.
3782     </para>
3783     <para>
3784     After you build a package, the source is normally left patched. You need to
3785 osamu 8646 unpatch it manually by running <literal>dquilt pop -a</literal> before
3786 osamu 8601 committing to the <literal>master</literal> branch. You can automate this by
3787     adding the optional <filename>debian/source/local-options</filename> file
3788     containing <literal>unapply-patches</literal>. This file is not included in
3789     the generated source package and changes the local build behavior only. This
3790     file may contain <literal>abort-on-upstream-changes</literal>, too (see
3791     <citerefentry> <refentrytitle>dpkg-source</refentrytitle>
3792     <manvolnum>1</manvolnum> </citerefentry>).
3793     </para>
3794 osamu 8624 <screen>
3795     unapply-patches
3796     abort-on-upstream-changes
3797     </screen>
3798 osamu 8601 </section>
3799 osamu 8731 <section id="sourceopt"><title><filename>source/options</filename></title>
3800 osamu 8624 <para>
3801 osamu 8637 The autogenerated files in the source tree can be quite annoying for packaging
3802     since they generate meaningless large patch files. There are custom modules
3803     such as <command>dh_autoreconf</command> to ease this problem as described in
3804     <xref linkend="customrules"/>.
3805     </para></