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