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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 8639 by osamu, Wed Apr 6 17:00:34 2011 UTC revision 8732 by osamu, Tue Apr 26 15:51:53 2011 UTC
# Line 2  Line 2 
2  <!-- -*- DocBook -*- -->  <!-- -*- DocBook -*- -->
3  <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"  <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
4   "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [   "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
5    <!ENTITY % trans    SYSTEM "po4a/maint-guide.en.ent">   %trans;
6  <!ENTITY % common   SYSTEM "common.ent">   %common;  <!ENTITY % common   SYSTEM "common.ent">   %common;
7  <!ENTITY % version  SYSTEM "version.ent">  %version;  <!ENTITY % version  SYSTEM "version.ent">  %version;
8  ]>  ]>
9  <book lang="en">  <book lang="en">
10  <!-- This is UTF-8 encoded. -->  <!-- This is UTF-8 encoded. -->
11  <!-- This is reorganized to make this document robust for translaion when some externally referenced information changes. -->  <!--
12  <title>Debian New Maintainers' Guide</title>  This is reorganized to make this document robust for translation
13  <bookinfo>  when some externally referenced information changes.
 <authorgroup>  
 <author> <personname> <firstname>Josip</firstname> <surname>Rodin</surname> </personname> <email>joy-mg@debian.org</email> <contrib>(original contents)</contrib> </author>  
 <author> <personname> <firstname>Osamu</firstname> <surname>Aoki</surname> </personname> <email>osamu@debian.org</email> <contrib>(updated contents)</contrib> </author>  
   
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  <!-- BEGIN: Add othercredit for translator via po4a/maint-guide.*.patch -->  Please understand to keep this document focused.  Not everything you think important
25  <!-- END: Add othercredit for translator via po4a/maint-guide.*.patch -->  for new maintainer should be written down.  Something social needs to be elsewhere.
26  <!-- dummy -->  Some thing should be left to the practice.  Something needs to be left for exercise
27  <!-- dummy -->  for people to check official documentations.
28    -->
29    <title>Debian New Maintainers' Guide</title>
30    <bookinfo>
31    <authorgroup>
32    <!-- do not use firstname and surname tags it braks Japanese.  The same with othercredit -->
33    <author> <personname>Josip Rodin</personname> <email>joy-mg@debian.org</email> <contrib>original contents</contrib> </author>
34    <author> <personname>Osamu Aoki</personname> <email>osamu@debian.org</email> <contrib>updated contents</contrib> </author>
35    <!-- translator credits in po4a/translator.*.ent -->
36    &othercredit;
37  </authorgroup>  </authorgroup>
38  <releaseinfo>version &docversion;</releaseinfo>  <releaseinfo>version &docversion;</releaseinfo>
39  <pubdate>&docisodate;</pubdate>  <pubdate>&docisodate;</pubdate>
# Line 36  version 2 or higher. Line 49  version 2 or higher.
49  <para>  <para>
50  This document was made using with these two documents as examples:  This document was made using with these two documents as examples:
51  </para>  </para>
52    <itemizedlist>
53    <listitem>
54  <para>  <para>
55  Making a Debian Package (AKA the Debmake Manual), copyright © 1997 Jaldhar  Making a Debian Package (AKA the Debmake Manual), copyright © 1997 Jaldhar
56  Vyas.  Vyas.
57  </para>  </para>
58    </listitem>
59    <listitem>
60  <para>  <para>
61  The New-Maintainer's Debian Packaging Howto, copyright © 1997 Will Lowe.  The New-Maintainer's Debian Packaging Howto, copyright © 1997 Will Lowe.
62  </para>  </para>
63    </listitem>
64    </itemizedlist>
65  </legalnotice>  </legalnotice>
66  <!-- toc -->  <!-- toc -->
67  </bookinfo>  </bookinfo>
68  <chapter id="start"><title>Getting started The Right Way</title>  <chapter id="start"><title>Getting started The Right Way</title>
69  <para>  <para>
70  This document tries to describe building of a Debian package to the common  This document tries to describe the building of a Debian package to ordinary
71  Debian user, and the prospectus developer.  It uses pretty common language, and  Debian users and prospective developers.  It uses fairly non-technical language, and
72  it's well covered with working examples.  There is an old Roman saying,  it's well covered with working examples.  There is an old Latin saying:
73  <emphasis>Longum iter est per preaecepta, breve et efficax per  <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  exempla</emphasis> (It's a long way by the rules, but short and efficient with
75  examples!).  examples).
76  </para>  </para>
77  <para>  <para>
78  This document has been updated for the Debian <literal>&base-release;</literal>  This document has been updated for the Debian <literal>&base-release;</literal>
79  release.  release.
80  <footnote><para> The document assumes you are using the  <footnote><para> The document assumes you are using a
81  <literal>&base-release;</literal> system or newer.  If you need to follow this  <literal>&base-release;</literal> or newer system.  If you need to follow this
82  text in the older system (including the older Ubuntu system etc.), you must  text in an older system (including an older Ubuntu system etc.), you must
83  install backported <systemitem role="package">dpkg</systemitem> and  install backported <systemitem role="package">dpkg</systemitem> and
84  <systemitem role="package">debhelper</systemitem> packages, at least.  <systemitem role="package">debhelper</systemitem> packages, at least.
85  </para> </footnote>  </para> </footnote>
# Line 69  install backported <systemitem role="pac Line 88  install backported <systemitem role="pac
88  One of the things that makes Debian such a top-notch distribution is its  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  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  Debian format, sometimes you need to install software that isn't.  You may be
91  wondering how you can make your own packages and perhaps you think it is a very  wondering how you can make your own packages; and perhaps you think it is a very
92  difficult task.  Well, if you are a real novice on Linux, it is hard, but if  difficult task.  Well, if you are a real novice on Linux, it is hard, but if
93  you were rookie, you wouldn't be reading this doc now.  :-) You do need to know  you were a rookie, you wouldn't be reading this document now&nbsp;:-)
94  a little about Unix programming but you certainly don't need to be a wizard.  You do need to know a little about Unix programming but you certainly
95    don't need to be a wizard.
96  <footnote><para>  <footnote><para>
97  You can learn basic operations of the Debian system from  You can learn about the basic handling of a Debian system from the
98  <ulink url="&debref;">Debian Reference</ulink>.  It contains some pointers to  <ulink url="&debref;">Debian Reference</ulink>.  It contains some pointers to
99  learn about Unix programming, too.  learn about Unix programming, too.
100  </para></footnote>  </para></footnote>
101  </para>  </para>
102  <para>  <para>
103  One thing is certain, though: to properly create and maintain Debian packages  One thing is certain, though: to properly create and maintain Debian packages
104  you need many hours.  Make no mistake, for our system to work the maintainers  takes many hours.  Make no mistake, for our system to work the maintainers
105  need to be both technically competent and diligent.  need to be both technically competent and diligent.
106  </para>  </para>
107  <para>  <para>
108  This document will explain every little (at first maybe irrelevant) step, and  If you need some help on packaging, please read <xref linkend="helpme"/>.
 help you create that first package, and to gain some experience in building  
 next releases of that and maybe other packages later on.  
 </para>  
 <para>  
 If you need some help on packaging, please read <xref linkend="helpme"/> .  
109  </para>  </para>
110  <para>  <para>
111  Newer versions of this document should always be available online at  Newer versions of this document should always be available online at
112  <ulink url="&maint-guide;"/> and in the  <ulink url="&maint-guide;"/> and in the
113  <systemitem role="package">maint-guide</systemitem> package.  <systemitem role="package">maint-guide</systemitem> package.
114  The translations may be available in packages such as  The translations may be available in packages such as
115  <systemitem role="package">maint-guide-es</systemitem>.  <systemitem role="package">maint-guide-es</systemitem>.
116    Please note that this documentation may be slightly outdated.
117    </para>
118    <para>
119    Since this is a tutorial, I choose to explain each detailed step for some
120    important topics.  Some of them may look irrelevant to you.  Please be patient.
121    I have also intentionally skipped some corner cases and provided only pointers
122    to keep this document simple.
123    </para>
124    <section id="socialdynamism"><title>Social dynamics of Debian</title>
125    <para>
126    Here are some observations of Debian's social dynamics, presented in the hope
127    that it will prepare you for interactions with Debian.
128    </para>
129    <itemizedlist>
130    <listitem><para>We all are volunteers.</para>
131        <itemizedlist>
132        <listitem><para>You cannot impose on others what to do.</para></listitem>
133        <listitem><para>You should be motivated to do things by yourself.</para></listitem>
134        </itemizedlist></listitem>
135    <listitem><para>Friendly cooperation is the driving force.</para>
136        <itemizedlist>
137        <listitem><para>Your contribution should not overstrain others.</para></listitem>
138        <listitem><para>Your contribution is valuable only when others appreciate it.</para></listitem>
139        </itemizedlist></listitem>
140    <listitem><para>Debian is not your school where you get automatic attention of teachers.</para>
141        <itemizedlist>
142        <listitem><para>You should be able to learn many things by yourself.</para></listitem>
143        <listitem><para>Attention from other volunteers is a very scarce resource.</para></listitem>
144        </itemizedlist></listitem>
145    <listitem><para>Debian is constantly improving.</para>
146        <itemizedlist>
147        <listitem><para>You are expected to make high quality packages.</para></listitem>
148        <listitem><para>You should adapt yourself to change.</para></listitem>
149        </itemizedlist></listitem>
150    </itemizedlist>
151    <para>
152    There are several types of people interacting around Debian with different
153    roles.
154    </para>
155    <itemizedlist>
156    <listitem>
157    <para>
158    <emphasis role="strong">upstream author</emphasis>: the person who made the
159    original program.
160    </para>
161    </listitem>
162    <listitem>
163    <para>
164    <emphasis role="strong">upstream maintainer</emphasis>: the person who
165    currently maintains the program.
166    </para>
167    </listitem>
168    <listitem>
169    <para>
170    <emphasis role="strong">maintainer</emphasis>: the person making the Debian
171    package of the program.
172    </para>
173    </listitem>
174    <listitem>
175    <para>
176    <emphasis role="strong">sponsor</emphasis>: a person who helps maintainers to
177    upload packages to the official Debian package archive (after checking their
178    contents).
179    </para>
180    </listitem>
181    <listitem>
182    <para>
183    <emphasis role="strong">mentor</emphasis>: a person who helps novice
184    maintainers with packaging etc.
185    </para>
186    </listitem>
187    <listitem>
188    <para>
189    <emphasis role="strong">Debian Developer</emphasis> (DD): a member of
190    the Debian project with full upload rights to the official Debian package
191    archive.
192    </para>
193    </listitem>
194    <listitem>
195    <para>
196    <emphasis role="strong">Debian Maintainer</emphasis> (DM): a person with
197    limited upload rights to the official Debian package archive.
198    </para>
199    </listitem>
200    </itemizedlist>
201    <para>
202    Please note that you cannot become an official
203    <emphasis role="strong">Debian Developer</emphasis> (DD) overnight, because it
204    takes more than technical skill.  Please do not be discouraged by this.  If it
205    is useful to others, you can still upload your package either as a
206    <emphasis role="strong">maintainer</emphasis> through a
207    <emphasis role="strong">sponsor</emphasis> or as a
208    <emphasis role="strong">Debian Maintainer</emphasis>.
209  </para>  </para>
210    <para>
211    Please note that you do not need to create any new package to become an
212    official Debian Developer.  Contributing to the existing packages can provide a
213    path to becoming an official Debian Developer too.  There are many packages
214    waiting for good maintainers (see <xref linkend="choose"/>).
215    </para>
216    <para>
217    Since we focus only on technical aspects of packaging in this document,
218    please refer to the following to learn how Debian functions and how you can get involved.
219    </para>
220    <itemizedlist>
221    <listitem><para><ulink url="&logiciellibre;">Debian: 17 years of Free Software, "do-ocracy", and democracy</ulink> (Introductory slides) </para> </listitem>
222    <listitem><para><ulink url="&debianorghelp;">How can you help Debian?</ulink> (official) </para> </listitem>
223    <listitem><para><ulink url="&debianfaqhelp;">The Debian GNU/Linux FAQ, Chapter 13 - 'Contributing to the Debian Project'</ulink> (semi-official) </para> </listitem>
224    <listitem><para><ulink url="&debianwikihelp;">Debian Wiki, HelpDebian</ulink> (supplemental) </para> </listitem>
225    <listitem><para><ulink url="&nm-do;">Debian New Maintainer site</ulink> (official) </para> </listitem>
226    <listitem><para><ulink url="&debianmentorfaq;">Debian Mentors FAQ</ulink> (supplemental) </para> </listitem>
227    </itemizedlist>
228    </section>
229  <section id="needprogs"><title>Programs you need for development</title>  <section id="needprogs"><title>Programs you need for development</title>
230  <para>  <para>
231  Before you start anything, you should make sure that you have properly  Before you start anything, you should make sure that you have properly
# Line 116  or with <literal>dpkg -s <replaceable>pa Line 243  or with <literal>dpkg -s <replaceable>pa
243  <para>  <para>
244  The most important package to install on your development system is the  The most important package to install on your development system is the
245  <systemitem role="package">build-essential</systemitem> package.  Once you try  <systemitem role="package">build-essential</systemitem> package.  Once you try
246  to install it, it will <emphasis>pull in</emphasis> other packages required to  to install that, it will <emphasis>pull in</emphasis> other packages required to
247  have a basic build environment.  have a basic build environment.
248  </para>  </para>
249  <para>  <para>
250  For some types of packages, that is all you will require, however there is  For some types of packages, that is all you will require; however, there is
251  another set of packages that while not essential for all package builds are  another set of packages that while not essential for all package builds are
252  useful to have install or may be required by your package:  useful to have installed or may be required by your package:
253  </para>  </para>
254  <itemizedlist>  <itemizedlist>
255  <listitem>  <listitem>
256  <para>  <para>
257  <systemitem role="package">file</systemitem> - this handy program can determine  <systemitem role="package">autoconf</systemitem>, <systemitem
258  what type a file is.  (see <citerefentry> <refentrytitle>file</refentrytitle>  role="package">automake</systemitem>, and <systemitem
259  <manvolnum>1</manvolnum> </citerefentry>)  role="package">autotools-dev</systemitem> - many newer programs use configure
260  </para>  scripts and <filename>Makefile</filename> files preprocessed with the help of
261  </listitem>  programs like these (see <literal>info autoconf</literal>, <literal>info
262  <listitem>  automake</literal>).  <systemitem role="package">autotools-dev</systemitem>
263  <para>  keeps up-to-date versions of certain auto files and has documentation about the
264  <systemitem role="package">patch</systemitem> - this very useful utility will  best way to use those files.
 take a file containing a difference listing (produced by the  
 <command>diff</command> program) and apply it to the original file, producing a  
 patched version.  (see <citerefentry> <refentrytitle>patch</refentrytitle>  
 <manvolnum>1</manvolnum> </citerefentry>)  
265  </para>  </para>
266  </listitem>  </listitem>
267  <listitem>  <listitem>
268  <para>  <para>
269  <systemitem role="package">perl</systemitem> - Perl is one of the most used  <systemitem role="package">debhelper</systemitem> and
270  interpreted scripting languages on today's Unix-like systems, often referred to  <systemitem role="package">dh-make</systemitem> -
271  as Unix's Swiss Army Chainsaw.  (see <citerefentry>  <systemitem role="package">dh-make</systemitem> is necessary to create
272  <refentrytitle>perl</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>)  the skeleton of our example package, and it will use some of the
273    <systemitem role="package">debhelper</systemitem> tools for creating
274    packages.  They are not essential for this purpose, but are
275    <emphasis>highly</emphasis> recommended for new maintainers.  It makes
276    the whole process very much easier to start, and to control afterwards.
277    (See <citerefentry> <refentrytitle>dh_make</refentrytitle>
278    <manvolnum>1</manvolnum> </citerefentry>, <citerefentry>
279    <refentrytitle>debhelper</refentrytitle> <manvolnum>1</manvolnum>
280    </citerefentry>.) <footnote><para> There are also some more specialized
281    but similar packages such as
282    <systemitem role="package">dh-make-perl</systemitem>,
283    <systemitem role="package">dh-make-php</systemitem>, etc.  </para>
284    </footnote>
285  </para>  </para>
286  </listitem>  </listitem>
287  <listitem>  <listitem>
288  <para>  <para>
289  <systemitem role="package">python</systemitem> - Python is another of the most  <systemitem role="package">devscripts</systemitem> - this package contains some
290  used interpreted scripting languages on the Debian system that combines  useful scripts that can be helpful for maintainers, but they are also
291  remarkable power with very clear syntax.  (see <citerefentry>  not necessary for building packages.  Packages recommended and suggested
292  <refentrytitle>python</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>)  by this package are worth looking into.  (See <ulink url="&devscripts-readme;"/>.)
293  </para>  </para>
294  </listitem>  </listitem>
295  <listitem>  <listitem>
296  <para>  <para>
297  <systemitem role="package">autoconf</systemitem>, <systemitem role="package">automake</systemitem> and <systemitem role="package">autotools-dev</systemitem> - many newer programs use configure  <systemitem role="package">fakeroot</systemitem> - this utility lets you
298  scripts and <filename>Makefile</filename> files preprocessed with help of  emulate being root which is necessary for some parts of the build process.
299  programs like these.  (see <literal>info autoconf</literal>, <literal>info  (See <citerefentry> <refentrytitle>fakeroot</refentrytitle>
300  automake</literal>).  The <systemitem role="package">autotools-dev</systemitem>  <manvolnum>1</manvolnum> </citerefentry>.)
 keeps up-to-date versions of certain auto files and has documentation about the  
 best way to use those files.  
301  </para>  </para>
302  </listitem>  </listitem>
303  <listitem>  <listitem>
304  <para>  <para>
305  <systemitem role="package">dh-make</systemitem> and <systemitem role="package">debhelper</systemitem> - <systemitem role="package">dh-make</systemitem> is necessary to create the skeleton of our  <systemitem role="package">file</systemitem> - this handy program can determine
306  example package, and it will use some of the <systemitem role="package">debhelper</systemitem> tools for creating packages.  They are  what type a file is.  (See <citerefentry> <refentrytitle>file</refentrytitle>
307  not essential for creation of packages, but are <emphasis>highly</emphasis>  <manvolnum>1</manvolnum> </citerefentry>.)
 recommended for new maintainers.  It makes the whole process very much easier  
 to start, and control afterwards.  (see <citerefentry>  
 <refentrytitle>dh_make</refentrytitle> <manvolnum>1</manvolnum>  
 </citerefentry>, <citerefentry> <refentrytitle>debhelper</refentrytitle>  
 <manvolnum>1</manvolnum> </citerefentry>) <footnote><para> There  
 are few similar but specialized packages such as <systemitem role="package">dh-make-perl</systemitem>, <systemitem role="package">dh-make-php</systemitem>, etc.  </para> </footnote>  
308  </para>  </para>
309  </listitem>  </listitem>
310  <listitem>  <listitem>
311  <para>  <para>
312  <systemitem role="package">devscripts</systemitem> - this package contains some  <systemitem role="package">gfortran</systemitem> - the GNU Fortran 95 compiler,
313  nice and useful scripts that can be helpful to the maintainers, but they are  necessary if your program is written in Fortran.  (See <citerefentry>
314  also not necessary for building packages.  Packages recommended and suggested  <refentrytitle>gfortran</refentrytitle> <manvolnum>1</manvolnum>
315  by this package are worth looking into.  (see  </citerefentry>.)
 <ulink url="&devscripts-readme;"/>.)  
316  </para>  </para>
317  </listitem>  </listitem>
318  <listitem>  <listitem>
319  <para>  <para>
320  <systemitem role="package">fakeroot</systemitem> - this utility lets you  <systemitem role="package">git</systemitem> - this package provides a popular
321  emulate being root which is necessary for some parts of the build process.  version control system designed to handle very large projects with speed and
322  (see <citerefentry> <refentrytitle>fakeroot</refentrytitle>  efficiency; it is used for many high profile open source projects, most notably
323  <manvolnum>1</manvolnum> </citerefentry>)  the Linux kernel.  (See <citerefentry> <refentrytitle>git</refentrytitle>
324    <manvolnum>1</manvolnum> </citerefentry>,
325    <ulink url="&git-doc;">git Manual</ulink>.)
326  </para>  </para>
327  </listitem>  </listitem>
328  <listitem>  <listitem>
# Line 202  emulate being root which is necessary fo Line 330  emulate being root which is necessary fo
330  <systemitem role="package">gnupg</systemitem> - a tool that enables you to  <systemitem role="package">gnupg</systemitem> - a tool that enables you to
331  digitally <emphasis>sign</emphasis> packages.  This is especially important if  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  you want to distribute it to other people, and you will certainly be doing that
333  when your work gets included in the Debian distribution.  (see <citerefentry>  when your work gets included in the Debian distribution.  (See <citerefentry>
334  <refentrytitle>gpg</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>)  <refentrytitle>gpg</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.)
 </para>  
 </listitem>  
 <listitem>  
 <para>  
 <systemitem role="package">gfortran</systemitem> - the GNU Fortran 95 compiler,  
 necessary if your program is written in Fortran.  (see <citerefentry>  
 <refentrytitle>gfortran</refentrytitle> <manvolnum>1</manvolnum>  
 </citerefentry>)  
335  </para>  </para>
336  </listitem>  </listitem>
337  <listitem>  <listitem>
# Line 219  necessary if your program is written in Line 339  necessary if your program is written in
339  <systemitem role="package">gpc</systemitem> - the GNU Pascal compiler,  <systemitem role="package">gpc</systemitem> - the GNU Pascal compiler,
340  necessary if your program is written in Pascal.  Worthy of note here is  necessary if your program is written in Pascal.  Worthy of note here is
341  <systemitem role="package">fp-compiler</systemitem>, the Free Pascal Compiler,  <systemitem role="package">fp-compiler</systemitem>, the Free Pascal Compiler,
342  which is also good at this task.  (see <citerefentry>  which is also good at this task.  (See <citerefentry>
343  <refentrytitle>gpc</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>,  <refentrytitle>gpc</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>,
344  <citerefentry> <refentrytitle>ppc386</refentrytitle> <manvolnum>1</manvolnum>  <citerefentry> <refentrytitle>ppc386</refentrytitle>
345  </citerefentry>)  <manvolnum>1</manvolnum> </citerefentry>.)
346  </para>  </para>
347  </listitem>  </listitem>
348  <listitem>  <listitem>
349  <para>  <para>
350  <systemitem role="package">xutils-dev</systemitem> - some programs, usually  <systemitem role="package">lintian</systemitem> - this is the Debian package
351  those made for X11, also use these programs to generate  checker, which can let you know of any common mistakes after you build the
352  <filename>Makefile</filename> files from sets of macro functions.  (see  package, and explains the errors found.  (See <citerefentry>
353  <citerefentry> <refentrytitle>imake</refentrytitle> <manvolnum>1</manvolnum>  <refentrytitle>lintian</refentrytitle> <manvolnum>1</manvolnum>
354  </citerefentry>, <citerefentry> <refentrytitle>xmkmf</refentrytitle>  </citerefentry>,
355  <manvolnum>1</manvolnum> </citerefentry>)  <ulink url="&lintian-doc;">Lintian User's Manual</ulink>.)
356  </para>  </para>
357  </listitem>  </listitem>
358  <listitem>  <listitem>
359  <para>  <para>
360  <systemitem role="package">lintian</systemitem> - this is the Debian package  <systemitem role="package">patch</systemitem> - this very useful utility will
361  checker that can let you know of any common mistakes after you build the  take a file containing a difference listing (produced by the
362  package, and explains the errors found.  (see <citerefentry>  <command>diff</command> program) and apply it to the original file, producing a
363  <refentrytitle>lintian</refentrytitle> <manvolnum>1</manvolnum>  patched version.  (See <citerefentry> <refentrytitle>patch</refentrytitle>
364  </citerefentry>,  <manvolnum>1</manvolnum> </citerefentry>.)
365  <ulink url="&lintian-doc;">Lintian User's Manual</ulink>)  </para>
366    </listitem>
367    <listitem>
368    <para>
369    <systemitem role="package">patchutils</systemitem> - this package contains some
370    utilities to work with patches such as the <command>lsdiff</command>,
371    <command>interdiff</command> and <command>filterdiff</command> commands.
372  </para>  </para>
373  </listitem>  </listitem>
374  <listitem>  <listitem>
# Line 259  Build From Source) bugs.  (see <citerefe Line 385  Build From Source) bugs.  (see <citerefe
385  </listitem>  </listitem>
386  <listitem>  <listitem>
387  <para>  <para>
388  <systemitem role="package">patchutils</systemitem> - this package contains some  <systemitem role="package">perl</systemitem> - Perl is one of the most used
389  utilities to work with patches such as the <command>lsdiff</command>,  interpreted scripting languages on today's Unix-like systems, often referred to
390  <command>interdiff</command> and <command>filterdiff</command> commands.  as Unix's Swiss Army Chainsaw. (See <citerefentry>
391    <refentrytitle>perl</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.)
392    </para>
393    </listitem>
394    <listitem>
395    <para>
396    <systemitem role="package">python</systemitem> - Python is another of the most
397    used interpreted scripting languages on the Debian system, combining
398    remarkable power with very clear syntax. (See <citerefentry>
399    <refentrytitle>python</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.)
400  </para>  </para>
401  </listitem>  </listitem>
402  <listitem>  <listitem>
403  <para>  <para>
404  <systemitem role="package">quilt</systemitem> - this package helps you to  <systemitem role="package">quilt</systemitem> - this package helps you to
405  manage a series of patches by keeping track of the changes each of them makes.  manage large numbers of patches by keeping track of the changes each patch
406  They are logically organized as a stack, and you can apply (=push), un-apply  makes. Patches can be applied, un-applied, refreshed, and more.  (See
407  (=pop), refresh them easily by traveling into the stack.  (see <citerefentry>  <citerefentry> <refentrytitle>quilt</refentrytitle> <manvolnum>1</manvolnum></citerefentry>,
408  <refentrytitle>quilt</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>,  <ulink url="&quilt-pdf;">quilt.pdf</ulink>.)
 <ulink url="&quilt-pdf;">quilt.pdf</ulink>)  
409  </para>  </para>
410  </listitem>  </listitem>
411  <listitem>  <listitem>
412  <para>  <para>
413  <systemitem role="package">git</systemitem> - this package provides popular  <systemitem role="package">xutils-dev</systemitem> - some programs, usually
414  version control system designed to handle very large projects with speed and  those made for X11, also use these programs to generate
415  efficiency; it is used for many high profile open source projects, most notably  <filename>Makefile</filename> files from sets of macro functions.  (See
416  the Linux kernel.  (see <citerefentry> <refentrytitle>git</refentrytitle>  <citerefentry> <refentrytitle>imake</refentrytitle> <manvolnum>1</manvolnum>
417  <manvolnum>1</manvolnum> </citerefentry>,  </citerefentry>, <citerefentry> <refentrytitle>xmkmf</refentrytitle>
418  <ulink url="&git-doc;">git Manual</ulink>)  <manvolnum>1</manvolnum> </citerefentry>.)
419  </para>  </para>
420  </listitem>  </listitem>
421  </itemizedlist>  </itemizedlist>
422  <para>  <para>
423    The short descriptions that are given above only serve to introduce you to what
424    each package does.  Before continuing please read the documentation
425    of each relevant program including ones installed through the package dependency such as
426    <command>make</command>, at least, for the standard usage.  It may seem like heavy
427    going now, but later on you'll be <emphasis>very</emphasis> glad you read it.
428    If you have specific questions later, I would suggest re-reading the documents
429    mentioned above.
430    </para>
431    </section>
432    <section id="needdocs"><title>Documentation needed for development</title>
433    <para>
434  The following is the <emphasis>very important</emphasis> documentation which  The following is the <emphasis>very important</emphasis> documentation which
435  you should read along with this document:  you should read along with this document:
436  </para>  </para>
# Line 294  you should read along with this document Line 439  you should read along with this document
439  <para>  <para>
440  <systemitem role="package">debian-policy</systemitem> - the <ulink url="&debian-policy;">Debian Policy  <systemitem role="package">debian-policy</systemitem> - the <ulink url="&debian-policy;">Debian Policy
441  Manual</ulink> includes explanations of the structure and contents of the  Manual</ulink> includes explanations of the structure and contents of the
442  Debian archive, several OS design issues, the Filesystem Hierarchy Standard  Debian archive, several OS design issues, the <ulink url="&fhs;">Filesystem Hierarchy Standard</ulink>
443  (which says where each file and directory should be) etc.  For you, the most  (FHS, which says where each file and directory should be), etc.  For you, the most
444  important thing is that it describes requirements that each package must  important thing is that it describes requirements that each package must
445  satisfy to be included in the distribution (see the local copy of  satisfy to be included in the distribution (see the local copies of
446  <ulink url="&policy-pdf;">policy.pdf</ulink>).  <ulink url="&policy-pdf;">policy.pdf</ulink> and <ulink url="&fhs-pdf;">fhs-2.3.pdf</ulink>).
447  </para>  </para>
448  </listitem>  </listitem>
449  <listitem>  <listitem>
450  <para>  <para>
451  <systemitem role="package">developers-reference</systemitem> - the <ulink url="&developers-reference;">Debian Developer's  <systemitem role="package">developers-reference</systemitem>
452  Reference</ulink> describes all matters not specifically about the technical  - the <ulink url="&developers-reference;">Debian Developer's Reference</ulink>
453    describes all matters not specifically about the technical
454  details of packaging, like the structure of the archive, how to rename, orphan,  details of packaging, like the structure of the archive, how to rename, orphan,
455  pick up packages, how to do NMUs, how to manage bugs, best packaging practices,  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  when and where to upload etc.  (See the local copy of
457  <ulink url="&developers-refpdf;">developers-reference.pdf</ulink>).  <ulink url="&developers-refpdf;">developers-reference.pdf</ulink>.)
458  </para>  </para>
459  </listitem>  </listitem>
460    </itemizedlist>
461    <para>
462    The following is the <emphasis>important</emphasis> documentation which
463    you should read along with this document:
464    </para>
465    <itemizedlist>
466  <listitem>  <listitem>
467  <para>  <para>
468  <ulink url="&autotools-tutorial;">Autotools  <ulink url="&autotools-tutorial;">Autotools
469  Tutorial</ulink> provides very good tutorial for <ulink url="&gnu-build-system;">the GNU Build System known  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,  as the GNU Autotools</ulink> whose most important components are Autoconf,
471  Automake, Libtool, and gettext.  Automake, Libtool, and gettext.
472  </para>  </para>
# Line 326  two pieces of documentation from the GNU Line 478  two pieces of documentation from the GNU
478  <ulink url="&gnu-standard;">GNU Coding Standards</ulink>, and  <ulink url="&gnu-standard;">GNU Coding Standards</ulink>, and
479  <ulink url="&gnu-maintainer;">Information for Maintainers of GNU Software</ulink>.  <ulink url="&gnu-maintainer;">Information for Maintainers of GNU Software</ulink>.
480  Although Debian does not require these to  Although Debian does not require these to
481  be followed, these are still helpful as guidelines and common sense.  (see the local copies of  be followed, these are still helpful as guidelines and common sense.
482    (See the local copies of
483  <ulink url="&gnu-standard-pdf;">standards.pdf</ulink> and  <ulink url="&gnu-standard-pdf;">standards.pdf</ulink> and
484  <ulink url="&gnu-maintainer-pdf;">maintain.pdf</ulink>).  <ulink url="&gnu-maintainer-pdf;">maintain.pdf</ulink>.)
485  </para>  </para>
486  </listitem>  </listitem>
487  </itemizedlist>  </itemizedlist>
488  <para>  <para>
489  If this document contradicts with any of the documents mentioned above, they  If this document contradicts any of the documents mentioned above, they
490  are correct.  Please file a bug report on the  are correct.  Please file a bug report on the
491  <systemitem role="package">maint-guide</systemitem> package using  <systemitem role="package">maint-guide</systemitem> package using
492  <command>reportbug</command>.  <command>reportbug</command>.
493  </para>  </para>
 <para>  
 The short descriptions that are given above only serve to introduce you to what  
 each package does.  Before continuing please thoroughly read the documentation  
 of each program, at least, for the standard usage.  It may seem like heavy  
 going now, but later on you'll be <emphasis>very</emphasis> glad you read it.  
 </para>  
494  </section>  </section>
495  <section id="terminology"><title>Basic terminology</title>  <section id="helpme"><title>Where to ask for help</title>
 <para>  
 There are two types of packages.  
 </para>  
 <itemizedlist>  
 <listitem>  
 <para>  
 <emphasis role="strong">source package</emphasis>: A source package is a set of  
 files which contain code and data which you can compile and process into  
 execution programs and formatted documents.  It usually comes as a combination  
 of <filename>*.orig.tar.gz</filename>, <filename>*.debian.tar.gz</filename> (or  
 <filename>*.diff.gz</filename>), and <filename>*.dsc</filename>.  Some other  
 archive and compression methods may be used, too.  
 </para>  
 </listitem>  
 <listitem>  
 <para>  
 <emphasis role="strong">binary package</emphasis>: A binary package contains  
 execution programs and formatted documents.  It usually comes as  
 <filename>*.deb</filename> for the normal Debian system and as  
 <filename>*.udeb</filename> for the Debian Installer.  
 </para>  
 </listitem>  
 </itemizedlist>  
 <para>  
 Don't mix terms like source of the program and the source package of the  
 program!  
 </para>  
496  <para>  <para>
497  There are several role names used around Debian.  Before you decide to ask your question in some public place, please read the fine documentation.
498  </para>  </para>
499  <itemizedlist>  <itemizedlist>
500  <listitem>  <listitem>
501  <para>  <para>
502  <emphasis role="strong">upstream author</emphasis>: The person who made the  files in <filename>/usr/share/doc/<replaceable>package</replaceable></filename> for all pertinent packages
 original program.  
503  </para>  </para>
504  </listitem>  </listitem>
505  <listitem>  <listitem>
506  <para>  <para>
507  <emphasis role="strong">upstream maintainer</emphasis>: The person who  contents of <literal><command>man</command> <replaceable>command</replaceable></literal> for all pertinent commands
 currently maintains the program.  
508  </para>  </para>
509  </listitem>  </listitem>
510  <listitem>  <listitem>
511  <para>  <para>
512  <emphasis role="strong">maintainer</emphasis>: The person who makes Debian  contents of <literal><command>info</command> <replaceable>command</replaceable></literal> for all pertinent commands
 package of the program.  
513  </para>  </para>
514  </listitem>  </listitem>
515  <listitem>  <listitem>
516  <para>  <para>
517  <emphasis role="strong">sponsor</emphasis>: The person who helps maintainers to  contents of <ulink url="&debian-mentors-ldo;">debian-mentors@lists.debian.org mailing list archive</ulink>
 upload packages to the official Debian Package Archive after checking their  
 contents.  
518  </para>  </para>
519  </listitem>  </listitem>
520  <listitem>  <listitem>
521  <para>  <para>
522  <emphasis role="strong">mentor</emphasis>: The person who helps novice  contents of <ulink url="&debian-devel-ldo;">debian-devel@lists.debian.org mailing list archive</ulink>
 maintainers on packaging etc.  
523  </para>  </para>
524  </listitem>  </listitem>
525  <listitem>  </itemizedlist>
526  <para>  <para>
527  <emphasis role="strong">Debian Developer</emphasis> (DD): The person who is a  You can use web search engines more effectively by including search strings
528  member of Debian.  He has full upload right to the official Debian Package  such as <literal>site:lists.debian.org</literal> to limit the domain.
 Archive.  
529  </para>  </para>
 </listitem>  
 <listitem>  
530  <para>  <para>
531  <emphasis role="strong">Debian Maintainer</emphasis> (DM): The person who has  Making a small test package is a good way to learn details of packaging.
532  limited upload right to the official Debian Package Archive.  Inspecting existing well maintained packages is the best way to learn how other
533    people make packages.
534  </para>  </para>
 </listitem>  
 </itemizedlist>  
535  <para>  <para>
536  There are several version names<footnote><para>see <ulink url="&policy-control;#s-f-Version">Debian Policy  Manual: 5.6.12 Version</ulink>.</para></footnote> used around Debian.  If you still have questions about packaging that you couldn't find answers to
537    in the available documentation and web resources, you can ask them interactively.
538  </para>  </para>
539  <itemizedlist>  <itemizedlist>
540  <listitem>  <listitem>
541  <para>  <para>
542  <emphasis role="strong">upstream source version</emphasis>: The upstream source  <ulink url="&debian-mentors-ldo;">debian-mentors@lists.debian.org mailing list</ulink>. (This mailing list is for the novice.)
 version is referred as <literal><replaceable>version</replaceable></literal>.  
 </para>  
 </listitem>  
 <listitem>  
 <para>  
 <emphasis role="strong">Debian revision</emphasis>: The revision by Debian on  
 package is referred as <literal><replaceable>revision</replaceable></literal>.  
543  </para>  </para>
544  </listitem>  </listitem>
545  <listitem>  <listitem>
546  <para>  <para>
547  <emphasis role="strong">Debian package version</emphasis>: The Debian package  <ulink url="&debian-devel-ldo;">debian-devel@lists.debian.org mailing list</ulink>. (This mailing list is for the expert.)
 version is referred as the following.  
 </para>  
 <itemizedlist>  
 <listitem>  
 <para>  
 <literal><replaceable>version</replaceable></literal> for the native Debian  
 binary package and for the Debian source package.  
548  </para>  </para>
549  </listitem>  </listitem>
550  <listitem>  <listitem>
551  <para>  <para>
552  <literal><replaceable>version</replaceable>-<replaceable>revision</replaceable></literal>  <ulink url="&irc-debian;">IRC</ulink> such as <literal>#debian-mentors</literal>.
 for the non-native Debian binary package.  
553  </para>  </para>
554  </listitem>  </listitem>
555  </itemizedlist>  </itemizedlist>
 </listitem>  
 </itemizedlist>  
556  <para>  <para>
557  Please read the other manuals if you need more details on terminology.  The more experienced Debian developers will gladly help you, if you ask
558    properly after making your required efforts.
559  </para>  </para>
 </section>  
 <section id="debiandeveloper"><title>Official Debian Developer</title>  
560  <para>  <para>
561  You can not become an official  When you receive a bug report (yes, actual bug reports!), you will know that it
562  <emphasis role="strong">Debian Developer</emphasis> (DD) over night because it  is time for you to dig into the
563  takes more than technical skill.  Please do not be discouraged by this.  If it  <ulink url="&bts;">Debian Bug Tracking System</ulink>
564  is useful to others, you can still upload your package either as a  and read the documentation there, to be able to
565  <emphasis role="strong">maintainer</emphasis> through a  deal with the reports efficiently.  I highly recommend reading the
566  <emphasis role="strong">sponsor</emphasis> or as a  <ulink url="&devref-bug-handling;">Debian Developer's Reference, 5.8.
567  <emphasis role="strong">Debian Maintainer</emphasis>.  "Handling bugs"</ulink>.
568  </para>  </para>
569  <para>  <para>
570  Please make sure to check the latest proper procedure to become an official Debian Developer.  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>  </para>
 <itemizedlist>  
 <listitem><para><ulink url="&nm-do;">Debian New Maintainer site</ulink> (official) </para> </listitem>  
 <listitem><para><ulink url="&debianmentorfaq;">Debian Mentors FAQ</ulink> (supplemental) </para> </listitem>  
 </itemizedlist>  
575  <para>  <para>
576  Please note that you do not need to create any new package to become an  Relax and be ready for bug reports, because there is a lot more work to be done
577  official Debian Developer.  Contributing to the existing packages can provide a  before your package will be fully in line with Debian policies and its best
578  path to become an official Debian Developer too.  There are many packages  practice guidelines (once again, read the <emphasis>real
579  waiting for good maintainers (see <xref linkend="choose"/> ).  documentation</emphasis> for details).  Good luck!
580  </para>  </para>
581  </section>  </section>
582  <section id="helpme"><title>Where to ask for help</title>  </chapter>
583  <para>  <chapter id="first"><title>First steps</title>
 Before you decide to ask your question in some public place, please read the fine documentation.  
 </para>  
 <itemizedlist>  
 <listitem>  
 <para>  
 files in <filename>/usr/share/doc/dpkg</filename>  
 </para>  
 </listitem>  
 <listitem>  
 <para>  
 files in <filename>/usr/share/doc/debian</filename>  
 <!-- /usr/share/doc/debian is used be doc-debian and debian-faq -->  
 </para>  
 </listitem>  
 <listitem>  
 <para>  
 files in <filename>/usr/share/doc/autotools-dev</filename>  
 </para>  
 </listitem>  
 <listitem>  
 <para>  
 files in <filename>/usr/share/doc/<replaceable>package</replaceable></filename> for all pertinent packages.  
 </para>  
 </listitem>  
 <listitem>  
 <para>  
 contents of "<literal><command>man</command> <replaceable>command</replaceable></literal>" for all pertinent commands  
 </para>  
 </listitem>  
 <listitem>  
584  <para>  <para>
585  contents of "<literal><command>info</command> <replaceable>command</replaceable></literal>" for all pertinent commands  Let's start by creating a package of your own (or, even better,
586    adopting an existing one).
587  </para>  </para>
588  </listitem>  <section id="workflow"><title>Workflow of the Debian package building</title>
 <listitem>  
589  <para>  <para>
590  contents of <ulink url="&nm-do;">Debian New Maintainer site</ulink>  If you are making a Debian package with an upstream program,
591    typical workflow of the Debian package building involves generating several
592    specifically named files for each step as the following.
593  </para>  </para>
594  </listitem>  <itemizedlist>
595  <listitem>  <listitem>
596  <para>  <para>We obtain an upstream program file usually in a compressed tar format.</para>
597  contents of <ulink url="&debianmentorfaq;">Debian Mentors FAQ</ulink>    <itemizedlist>
598  </para>    <listitem><literal><replaceable>package</replaceable>-<replaceable>version</replaceable>.tar.gz</literal></listitem>
599      </itemizedlist>
600  </listitem>  </listitem>
601  <listitem>  <listitem>
602  <para>  <para>
603  contents of <ulink url="&debian-mentors-ldo;">debian-mentors@lists.debian.org mailing list archive</ulink>  We create a non-native Debian source package in the <literal>3.0 (quilt)</literal> format, which refers to the set of input files for
604    the Debian package building, by adding Debian package modifications to the upstream program under the <filename>debian</filename> directory.
605  </para>  </para>
606      <itemizedlist>
607      <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>.orig.tar.gz</literal></listitem>
608      <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>-<replaceable>revision</replaceable>.debian.tar.gz</literal>
609        <footnote><para>For the older non-native Debian source package in the <literal>1.0</literal> format,
610        <literal><replaceable>package</replaceable>_<replaceable>version</replaceable>-<replaceable>revision</replaceable>.diff.gz</literal>
611        is used instead. </para></footnote></listitem>
612      <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>-<replaceable>revision</replaceable>.dsc</literal></listitem>
613      </itemizedlist>
614  </listitem>  </listitem>
615  <listitem>  <listitem>
616  <para>  <para>
617  contents of <ulink url="&debian-devel-ldo;">debian-devel@lists.debian.org mailing list archive</ulink>  We build Debian binary packages, which are ordinary installable package files in <literal>.deb</literal> format (or <literal>.udeb</literal> format, used by the Debian Installer), from the Debian source package.
618  </para>  </para>
619      <itemizedlist>
620      <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>-<replaceable>revision</replaceable>_<replaceable>arch</replaceable>.deb</literal></listitem>
621      </itemizedlist>
622  </listitem>  </listitem>
623  </itemizedlist>  </itemizedlist>
624  <para>  <para>
625  Please consider to use web search engine effectively by including search string  Please note that the character separating
626  such as "<literal>site:lists.debian.org</literal>" to limit the domain.  <literal><replaceable>package</replaceable></literal> and
627    <literal><replaceable>version</replaceable></literal> was changed from
628    <literal>-</literal> (hyphen) to <literal>_</literal> (underscore).
629  </para>  </para>
630  <para>  <para>
631  Making a small test package is good way to learn details of packaging.  Here,
632  Inspecting existing well maintained packages is the best way to learn how other  <literal><replaceable>package</replaceable></literal> part of the file name is substituted by the
633  people make packages.  <emphasis role="strong">package name</emphasis>,
634    <literal><replaceable>version</replaceable></literal> part of it is substituted by the
635    <emphasis role="strong">upstream version</emphasis>,
636    <literal><replaceable>revision</replaceable></literal> part of it is substituted by the
637    <emphasis role="strong">Debian revision</emphasis>,
638    <literal><replaceable>arch</replaceable></literal> part of it is substituted by the
639    <emphasis role="strong">package architecture</emphasis>.
640    <footnote><para>
641    The <emphasis role="strong">package name</emphasis>, <emphasis
642    role="strong">upstream version</emphasis>, and <emphasis role="strong">Debian
643    revision</emphasis> must be adjusted to comply with the Debian Policy Manual:
644    <ulink url="&policy-source;">5.6.1 Source</ulink>,
645    <ulink url="&policy-package;">5.6.7 Package</ulink>, and
646    <ulink url="&policy-version;">5.6.12 Version</ulink>.
647    The <emphasis role="strong">package architecture</emphasis> follows the
648    Debian Policy Manual: <ulink url="&policy-architecture;">5.6.8 Architecture</ulink>
649    and is automatically assigned by the package build process.</para></footnote>
650  </para>  </para>
651  <para>  <para>
652  If you still have questions about packaging that you couldn't find answers to  If you are making a Debian specific package without an upstream program instead,
653  in the available documentation and web resources, you can ask them interactively.  typical workflow of the Debian package building is simpler.
654  </para>  </para>
655  <itemizedlist>  <itemizedlist>
656  <listitem>  <listitem>
657  <para>  <para>
658  <ulink url="&debian-mentors-ldo;">debian-mentors@lists.debian.org mailing list</ulink>. (This mailing list is for the novice.)  We create a native Debian source package in the <literal>3.0 (quilt)</literal> format using a compressed tar format in which required files under the <filename>debian</filename> directory are also included.
 </para>  
 </listitem>  
 <listitem>  
 <para>  
 <ulink url="&debian-devel-ldo;">debian-devel@lists.debian.org mailing list</ulink>. (This mailing list is for the expert.)  
659  </para>  </para>
660      <itemizedlist>
661      <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>.tar.gz</literal></listitem>
662      <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>.dsc</literal></listitem>
663      </itemizedlist>
664  </listitem>  </listitem>
665  <listitem>  <listitem>
666  <para>  <para>
667  <ulink url="&irc-debian;">IRC</ulink> such as <literal>#debian-mentors</literal>.  We build Debian binary packages from the native Debian source package.
668  </para>  </para>
669      <itemizedlist>
670      <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>_<replaceable>arch</replaceable>.deb</literal></listitem>
671      </itemizedlist>
672  </listitem>  </listitem>
673  </itemizedlist>  </itemizedlist>
674  <para>  <para>
675  The more experienced Debian developers will gladly help you, but do read at  In the following, each step of this is explained with detailed examples.
 least some of the documentation before asking a question!  
 </para>  
 <para>  
 When you receive a bug report (yes, actual bug reports!), you will know that it  
 is time for you to dig into the  
 <ulink url="&bts;">Debian Bug Tracking System</ulink>  
 and read the documentation there, to be able to  
 deal with the reports efficiently.  I highly recommend reading the  
 <ulink url="&devref-bug-handling;">Debian Developer's Reference, 5.8.  'Handling bugs'</ulink>.  
 </para>  
 <para>  
 Even if it all worked well, it's time to start praying.  Why?  Because in just  
 a few hours (or days) users from all around the world will start to use your  
 package, and if you made some critical error you'll get mailbombed by numerous  
 angry Debian users...  Just kidding.  :-)  
 </para>  
 <para>  
 Relax and be ready for bug reports, because there is a lot more work to be done  
 before your package will be fully in line with Debian policies and its best  
 practice guidelines (once again, read the <emphasis>real  
 documentation</emphasis> for details).  Good luck!  
676  </para>  </para>
677  </section>  </section>
 </chapter>  
 <chapter id="first"><title>First steps</title>  
 <para>  
 Let's try to make your own package (or, better even, adopt an existing one).  
 </para>  
678  <section id="choose"><title>Choose your program</title>  <section id="choose"><title>Choose your program</title>
679  <para>  <para>
680  You have probably chosen the package you want to create.  The first thing you  You have probably chosen the package you want to create.  The first thing you
# Line 615  using the following. Line 686  using the following.
686  <para>the <command>aptitude</command> command</para>  <para>the <command>aptitude</command> command</para>
687  </listitem>  </listitem>
688  <listitem>  <listitem>
689  <para><ulink url="&packages-do;">Debian packages</ulink> web page</para>  <para>the <ulink url="&packages-do;">Debian packages</ulink> web page</para>
690  </listitem>  </listitem>
691  <listitem>  <listitem>
692  <para><ulink url="&packages-qa-do;">Debian Package Tracking System</ulink> web page</para>  <para>the <ulink url="&packages-qa-do;">Debian Package Tracking System</ulink> web page</para>
693  </listitem>  </listitem>
694  </itemizedlist>  </itemizedlist>
695  <para>  <para>
696  If the package already exists, well, install it!  :-) If it happens to be  If the package already exists, well, install it!  :-) If it happens to be
697  <emphasis role="strong">orphaned</emphasis> -- if its maintainer is set to  <emphasis role="strong">orphaned</emphasis> (that is, if its
698  <ulink url="&qa-do;">Debian QA Group</ulink>, you may be able to pick it up if  maintainer is set to <ulink url="&qa-do;">Debian QA Group</ulink>),
699  it's still available.  You may also adopt a package for which the corresponding  you may be able to pick it up if it's still available.  You may also
700  maintainer has filed a Request for Adoption  adopt a package whose maintainer has filed a Request for Adoption
701  (<emphasis role="strong">RFA</emphasis>).  (<emphasis role="strong">RFA</emphasis>).<footnote> <para>See
702    <ulink url="&devref-adopt;">Debian Developer's Reference 5.9.5.
703    "Adopting a package"</ulink>.</para> </footnote>
704  </para>  </para>
705  <para>  <para>
706  There are several package ownership status resorces.  There are several package ownership status resources.
707  </para>  </para>
708  <itemizedlist>  <itemizedlist>
709  <listitem>  <listitem>
710  <para> <ulink url="&wnpp-do;">Work-Needing and Prospective Packages</ulink> </para>  <para> <ulink url="&wnpp-do;">Work-Needing and Prospective Packages</ulink> </para>
711  </listitem>  </listitem>
712  <listitem>  <listitem>
713  <para> <ulink url="&wnpp-bts;">Debian Bug report logs: Bugs in package wnpp in unstable</ulink> </para>  <para> <ulink url="&wnpp-bts;">Debian Bug report logs: Bugs in pseudo-package <systemitem role="package">wnpp</systemitem> in <literal>unstable</literal></ulink> </para>
714  </listitem>  </listitem>
715  <listitem>  <listitem>
716  <para> <ulink url="&wnpp-dn;">Debian Packages that Need Lovin'</ulink> </para>  <para> <ulink url="&wnpp-dn;">Debian Packages that Need Lovin'</ulink> </para>
717  </listitem>  </listitem>
718  <listitem>  <listitem>
719  <para> <ulink url="&wnpp-debtags;">Browse WNPP bugs based on debtags</ulink> </para>  <para> <ulink url="&wnpp-debtags;">Browse <systemitem role="package">wnpp</systemitem> bugs based on debtags</ulink> </para>
720  </listitem>  </listitem>
721  </itemizedlist>  </itemizedlist>
722  <para>  <para>
# Line 652  for most kinds of programs, and the numb Line 725  for most kinds of programs, and the numb
725  archive is much larger than that of contributors with upload rights.  Thus,  archive is much larger than that of contributors with upload rights.  Thus,
726  contributions to packages already in the archive are far more appreciated (and  contributions to packages already in the archive are far more appreciated (and
727  more likely to receive sponsorship) by other developers <footnote><para> Having  more likely to receive sponsorship) by other developers <footnote><para> Having
728  said that, there will of course always be new programs that are worthwhile  said that, there will of course always be new programs that are worth
729  packaging.  </para> </footnote>.  You can do that in various ways.  packaging.  </para> </footnote>.  You can contribute in various ways.
730  </para>  </para>
731  <itemizedlist>  <itemizedlist>
732  <listitem>  <listitem>
# Line 683  If you are able to adopt the package, ge Line 756  If you are able to adopt the package, ge
756  examine them.  This document unfortunately doesn't include comprehensive  examine them.  This document unfortunately doesn't include comprehensive
757  information about adopting packages.  Thankfully you shouldn't have a hard time  information about adopting packages.  Thankfully you shouldn't have a hard time
758  figuring out how the package works since someone has already done the initial  figuring out how the package works since someone has already done the initial
759  set up for you.  Keep reading, though, a lot of the advice below will still be  setup for you.  Keep reading, though; a lot of the advice below will still be
760  applicable for your case.  applicable for your case.
761  </para>  </para>
762  <para>  <para>
# Line 693  as follows: Line 766  as follows:
766  <itemizedlist>  <itemizedlist>
767  <listitem>  <listitem>
768  <para>  <para>
769  First, you must know that program works, and have tried it for some time to  First, you must know that the program works, and have tried it for some time to
770  confirm its usefulness.  confirm its usefulness.
771  </para>  </para>
772  </listitem>  </listitem>
773  <listitem>  <listitem>
774  <para>  <para>
775  You must check if no one else is working on the package already at the  You must check that no one else is already working on the package on the
776  <ulink url="&wnpp-do;">Work-Needing and Prospective Packages</ulink> site.  <ulink url="&wnpp-do;">Work-Needing and Prospective Packages</ulink> site.
777  If no one else is working on it, file an ITP (Intent  If no one else is working on it, file an ITP (Intent
778  To Package) bug report to the <systemitem role="package">wnpp</systemitem>  To Package) bug report to the <systemitem role="package">wnpp</systemitem>
779  pseudo-package using <command>reportbug</command>.  If someone's already on it,  pseudo-package using <command>reportbug</command>.  If someone's already on it,
780  contact them if you feel you need to.  If not - find another interesting  contact them if you feel you need to.  If not - find another interesting
781  program that nobody maintains.  program that nobody is maintaining.
782  </para>  </para>
783  </listitem>  </listitem>
784  <listitem>  <listitem>
785  <para>  <para>
786  That program <emphasis role="strong">must have a license</emphasis>.  The software <emphasis role="strong">must have a license</emphasis>.
787  </para>  </para>
788  <itemizedlist>  <itemizedlist>
789  <listitem>  <listitem>
790  <para>  <para>
791  For the <literal>main</literal> section, it <emphasis role="strong">must be  For the <literal>main</literal> section, Debian Policy requires it
792  compliant to all the Debian Free Software Guidelines</emphasis> (<ulink url="&dfsg;">DFSG</ulink>)  <emphasis role="strong">to be fully compliant with the Debian Free Software
793  and <emphasis role="strong">that program must not require a package outside of  Guidelines</emphasis> (<ulink url="&dfsg;">DFSG</ulink>)
794  <literal>main</literal></emphasis> for compilation or execution as required by  and <emphasis role="strong">not to require a package outside of
795  the Debian Policy.  This is desired case.  <literal>main</literal></emphasis> for compilation or execution.  This
796    is the desired case.
797  </para>  </para>
798  </listitem>  </listitem>
799  <listitem>  <listitem>
800  <para>  <para>
801  For the <literal>contrib</literal> section, it must be compliant to all the  For the <literal>contrib</literal> section, it must comply with the
802  DFSG but it may require a package outside of <literal>main</literal> for  DFSG but it may require a package outside of <literal>main</literal> for
803  compilation or execution.  compilation or execution.
804  </para>  </para>
805  </listitem>  </listitem>
806  <listitem>  <listitem>
807  <para>  <para>
808  For the <literal>non-free</literal> section, it may not be compliant to some of  For the <literal>non-free</literal> section, it may be non-compliant
809  the DFSG but it <emphasis role="strong">must be distributable</emphasis>.  with the DFSG but it <emphasis role="strong">must be distributable</emphasis>.
810  </para>  </para>
811  </listitem>  </listitem>
812  </itemizedlist>  </itemizedlist>
813  <para>  <para>
814  If you are unsure about where it should go, post the license text on <ulink url="&debian-legal-ldo;">debian-legal@lists.debian.org</ulink>  If you are unsure about where it should go, post the license text on
815    <ulink url="&debian-legal-ldo;">debian-legal@lists.debian.org</ulink>
816  and ask for advice.  and ask for advice.
817  </para>  </para>
 </listitem>  
818  <listitem>  <listitem>
819  <para>  <para>
820  That program certainly should <emphasis role="strong">not</emphasis> run setuid  The program should <emphasis role="strong">not</emphasis> introduce security
821  root, or even better - it shouldn't need to be setuid or setgid to anything.  and maintenance concerns to the Debian system. As a new maintainer with no
822    experience in the security audit, it is best to keep away from risky programs.
823  </para>  </para>
824  </listitem>  </listitem>
825    <itemizedlist>
826  <listitem>  <listitem>
827  <para>  <para>
828  That program should not be a daemon, or something that goes in  The program certainly should <emphasis role="strong">not</emphasis> run setuid
829  <filename>*/sbin</filename> directories, or open a port as root.  root, or even better, it shouldn't need to be setuid or setgid to anything.
830  </para>  </para>
831  </listitem>  </listitem>
832  <listitem>  <listitem>
833  <para>  <para>
834  That program should result in binary executable form, libraries are harder to  The program should not be a daemon, or go in an
835  handle.  <filename>*/sbin</filename> directory, or open a port as root.
836  </para>  </para>
837  </listitem>  </listitem>
838  <listitem>  <listitem>
839  <para>  <para>
840  That program should be well documented and its code needs to be understandable  The program should be well documented and its code needs to be understandable
841  (i.e.  not obfuscated).  (i.e.  not obfuscated).
842  </para>  </para>
843  </listitem>  </listitem>
844  <listitem>  <listitem>
845  <para>  <para>
846  You should contact program's author(s) to check if they agree with packaging it  You should contact the program's author(s) to check if they agree with packaging it
847  and amicable to Debian.  It is important to be able to consult with author(s)  and are amicable to Debian.  It is important to be able to consult with the author(s)
848  about the program in case of any program specific problems, so don't try to  in case of any problems with the program, so don't try to package
849  package unmaintained pieces of software.  unmaintained software.
850  </para>  </para>
851  </listitem>  </listitem>
852  </itemizedlist>  </itemizedlist>
853    </listitem>
854    </itemizedlist>
855    <para>
856    Of course, these are just safety measures, and intended to save you from
857    enraging users if you do something wrong in some setuid daemon...  When you gain
858    more experience in packaging, you'll be able to package such software.
859    </para>
860  <para>  <para>
861  Of course, these things are just safety measures, and intended to save you from  As a new maintainer, you are encouraged to get some experience in packaging
862  raging users if you do something wrong in some setuid daemon...  When you gain  with easier packages and discouraged from creating complicated packages.
863  some more experience in packaging, you'll be able to package such packages.  </para>
864    <itemizedlist>
865    <listitem><para>Simple packages</para>
866      <itemizedlist>
867      <listitem><para>single binary package, arch = all (collection of data such as wallpaper graphics)</para></listitem>
868      <listitem><para>single binary package, arch = all (executable written in the POSIX shell language)</para></listitem>
869      <listitem><para>single binary package, arch = all (executable written in interpreter languages)</para></listitem>
870      <listitem><para>single binary package, arch = any (executable compiled from a C source with <filename>Makefile</filename>)</para></listitem>
871      </itemizedlist>
872    </listitem>
873    <listitem><para>Intermediate complexity packages</para>
874      <itemizedlist>
875      <listitem><para>single binary package, arch = any (executable compiled from a C source with Autotools)</para></listitem>
876      <listitem><para>multiple binary packages, arch = any + all (executable package + documentation package)</para></listitem>
877      <listitem><para>upstream source in a format other than <filename>tar.gz</filename> or <filename>tar.bz2</filename></para></listitem>
878      <listitem><para>upstream source containing undistributable contents</para></listitem>
879      <listitem><para>source package with multiple upstream sources</para></listitem>
880      </itemizedlist>
881    </listitem>
882    <listitem><para>High complexity packages</para>
883      <itemizedlist>
884      <listitem><para>interpreter module packages used by other packages</para></listitem>
885      <listitem><para>multiple binary packages containing library package</para></listitem>
886      <listitem><para>generic library package used by other packages, arch = any</para></listitem>
887      <listitem><para>kernel module packages, arch = any</para></listitem>
888      <listitem><para>kernel patch packages</para></listitem>
889      </itemizedlist>
890    </listitem>
891    </itemizedlist>
892    <para>
893    Doing so is not too hard, but it requires a bit more knowledge. You should seek
894    specific guidances for every complexities.
895  </para>  </para>
896  </section>  </section>
897  <section id="getit"><title>Get the program, and try it out</title>  <section id="getit"><title>Get the program, and try it out</title>
898  <para>  <para>
899  So the first thing to do is to find and download the original source code.  I  So the first thing to do is to find and download the original source code.
900  presume that you already have the source file that you picked up at the  Presumably you already have the source file that you picked up at the
901  author's homepage.  Sources for free Unix programs usually come in  author's homepage.  Sources for free Unix programs usually come in
902  <command>tar</command>+<command>gzip</command> format with extension  <command>tar</command>+<command>gzip</command> format with the extension
903  <filename>.tar.gz</filename>, or  <filename>.tar.gz</filename>,
904  <command>tar</command>+<command>bzip2</command> format with extension  <command>tar</command>+<command>bzip2</command> format with the extension
905  <filename>.tar.bz2</filename>.  These usually contain the subdirectory called  <filename>.tar.bz2</filename>, or
906  <filename><replaceable>programname</replaceable>-<replaceable>version</replaceable></filename>  <command>tar</command>+<command>xz</command> format with the extension
907  in them and all the sources under it.  <filename>.tar.xz</filename>.  These usually contain a directory called
908    <filename><replaceable>package</replaceable>-<replaceable>version</replaceable></filename>
909    with all the sources inside.
910  </para>  </para>
911  <para>  <para>
912  If the latest version of such sources are available through VCS such as Git,  If the latest version of the source is available through a VCS such as Git,
913  Subversion, or CVS repository, you need to get it with <literal>git  Subversion, or CVS, you need to get it with <literal>git
914  clone</literal>, <literal>svn co</literal>, or <literal>cvs co</literal> and  clone</literal>, <literal>svn co</literal>, or <literal>cvs co</literal> and
915  repack it into <command>tar</command>+<command>gzip</command> format by  repack it into <command>tar</command>+<command>gzip</command> format yourself
916  yourself using the <literal>--exclude-vcs</literal> option.  by using the <literal>--exclude-vcs</literal> option.
917  </para>  </para>
918  <para>  <para>
919  If your program's source comes as some other sort of archive (for instance, the  If your program's source comes as some other sort of archive (for instance, the
920  filename ends in <filename>.Z</filename> or  filename ends in <filename>.Z</filename> or
921  <filename>.zip</filename><footnote><para> You can identify the archive format  <filename>.zip</filename><footnote><para> You can identify the archive format
922  using the <command>file</command> command when the file extension is not  using the <command>file</command> command when the file extension is not
923  enough.  </para> </footnote>), unpack it with appropriate tools and repack it,  enough.  </para> </footnote>), you should also unpack it with the
924  too.  appropriate tools and repack it.
925  </para>  </para>
926  <para>  <para>
927  As an example, I'll use a program called <command>gentoo</command>, an X GTK+  As an example, I'll use a program called <command>gentoo</command>, a GTK+
928  file manager.<footnote><para> This program is already packaged.  file manager.
929  <ulink url="&gentoo-package;">Current  <footnote><para> This program is already packaged. The
930  version</ulink> has changed substantially from the version 0.9.12 in the  <ulink url="&gentoo-package;">current version</ulink> uses Autotools as its
931  following examples.</para> </footnote>  build structure and is substantially different from the following examples,
932    which were based on version 0.9.12.</para>
933    </footnote>
934  </para>  </para>
935  <para>  <para>
936  Create a subdirectory under your home directory named  Create a subdirectory under your home directory named
937  <filename>debian</filename> or <filename>deb</filename> or anything you find  <filename>debian</filename> or <filename>deb</filename> or anything you find
938  appropriate (e.g.  just <filename>~/gentoo</filename> would do fine in this  appropriate (e.g.  just <filename>~/gentoo</filename> would do fine in this
939  case).  Place the downloaded archive in it, and extract it (with <literal>tar  case).  Place the downloaded archive in it, and extract it (with <literal>tar
940  xzf gentoo-0.9.12.tar.gz</literal>).  Make sure there are no errors, even some  xzf gentoo-0.9.12.tar.gz</literal>).  Make sure there are no warning
941  <emphasis>irrelevant</emphasis> ones, because there will most probably be  messages, even <emphasis>irrelevant</emphasis> ones, because other
942  problems unpacking on other people's systems, whose unpacking tools may or may  people's unpacking tools may or may not ignore these anomalies, so they
943  not ignore those anomalies.  On your console screen, you should see the  may have problems unpacking them.  Your shell command line may look
944  following.  something like this:
945  </para>  </para>
946  <screen>  <screen>
947  $ mkdir ~/gentoo ; cd ~/gentoo  $ mkdir ~/gentoo ; cd ~/gentoo
# Line 838  Now you have another subdirectory, calle Line 956  Now you have another subdirectory, calle
956  Change to that directory and <emphasis>thoroughly</emphasis> read the provided  Change to that directory and <emphasis>thoroughly</emphasis> read the provided
957  documentation.  Usually there are files named <filename>README*</filename>,  documentation.  Usually there are files named <filename>README*</filename>,
958  <filename>INSTALL*</filename>, <filename>*.lsm</filename> or  <filename>INSTALL*</filename>, <filename>*.lsm</filename> or
959  <filename>*.html</filename>.  You must find instructions on how to correctly  <filename>*.html</filename>.  You must find instructions on how to
960  compile and install the program (most probably they'll assume you want to  compile and install the program (most probably they'll assume you want to
961  install to <filename>/usr/local/bin</filename> directory; you won't be doing  install to the <filename>/usr/local/bin</filename> directory; you won't be doing
962  that, but more on that later in <xref linkend="destdir"/> ).  that, but more on that later in <xref linkend="destdir"/>).
963    </para>
964    <para>
965    You should start packaging with a completely clean (pristine) source directory,
966    or simply with freshly unpacked sources.
967  </para>  </para>
968    </section>
969    <section id="simplemake"><title>Simple build systems</title>
970  <para>  <para>
971  Simple programs come with a <filename>Makefile</filename> file in them and can  Simple programs come with a <filename>Makefile</filename> and can
972  be compiled simply with <literal>make</literal>.<footnote><para>  be compiled just by invoking <literal>make</literal>.<footnote><para>
973  Many modern programs come with a script <filename>configure</filename> which  Many modern programs come with a script <filename>configure</filename> which
974  creates a <filename>Makefile</filename> file customized for your system upon  when executed creates a <filename>Makefile</filename> customized for
975  its execution.</para></footnote> Some of them support  your system.</para></footnote> Some of them support
976  <literal>make check</literal>, which runs included self-checks.  Installation  <literal>make check</literal>, which runs included self-tests.  Installation
977  to the destination directories is usually done with <literal>make  to the destination directories is usually done with <literal>make
978  install</literal>.  install</literal>.
979  </para>  </para>
# Line 864  there's even a <literal>make uninstall</ Line 988  there's even a <literal>make uninstall</
988  all the installed files.  all the installed files.
989  </para>  </para>
990  </section>  </section>
991  <section id="portable"><title>Free portable programs</title>  <section id="portable"><title>Popular portable build systems</title>
992  <para>  <para>
993  A lot of Free programs are written in the <ulink url="&c-program;">C</ulink> and  A lot of free software programs are written in the <ulink url="&c-program;">C</ulink> and
994  <ulink url="&cxx;">C++</ulink> languages.  Many of  <ulink url="&cxx;">C++</ulink> languages.  Many of these use Autotools or
995  these use Autotools or CMake to make them portable across different platforms.  CMake to make them portable across different platforms.  These build tools need
996  These tools are used to generate <filename>Makefile</filename> and other  to be used to generate the <filename>Makefile</filename> and other
997  required source files.  Then, such programs are built with usual <literal>make;  required source files first.  Then, such programs are built using the usual
998  make install</literal>.  <literal>make; make install</literal>.
999  </para>  </para>
1000  <para>  <para>
1001  <ulink url="&gnu-build-system;">Autotools</ulink>  <ulink url="&gnu-build-system;">Autotools</ulink> is the GNU build
1002  are the GNU build system comprising <ulink url="&autoconf;">Autoconf</ulink>, <ulink url="&automake;">Automake</ulink>, <ulink url="&libtool;">Libtool</ulink>, and <ulink url="&gettext;">gettext</ulink>.  You can notice  system comprising <ulink url="&autoconf;">Autoconf</ulink>,
1003    <ulink url="&automake;">Automake</ulink>,
1004    <ulink url="&libtool;">Libtool</ulink>, and
1005    <ulink url="&gettext;">gettext</ulink>.  You can recognize
1006  such sources by the <filename>configure.ac</filename>,  such sources by the <filename>configure.ac</filename>,
1007  <filename>Makefile.am</filename>, and <filename>Makefile.in</filename> files.  <filename>Makefile.am</filename>, and <filename>Makefile.in</filename> files.
1008  <footnote><para> See <ulink url="&autotools-tutorial;">Autotools Tutorial</ulink>  <footnote><para>Autotools is too big to deal in this small tutorial. This
1009  and <ulink url="&autotools-readme;"/>.  </para> </footnote>  section is meant to provide keywords and references only.  Please make sure to read the
1010    <ulink url="&autotools-tutorial;">Autotools Tutorial</ulink> and
1011    <ulink url="&autotools-readme;"/>, if you need to use it.</para></footnote>
1012  </para>  </para>
1013  <para>  <para>
1014  The first step of Autotools work flow is usually that the upstream runs  The first step of the Autotools workflow is usually that upstream runs
1015  <literal>autoreconf -i -f</literal> in the source and distributes this source  <literal>autoreconf -i -f</literal> in the source directory and
1016  with generated files.  distributes the generated files along with the source.
1017  </para>  </para>
1018  <screen>  <screen>
1019  configure.ac-----+-&gt; autoreconf -+-&gt; configure  configure.ac-----+-&gt; autoreconf -+-&gt; configure
# Line 903  files requires some knowledge of <comman Line 1032  files requires some knowledge of <comman
1032  <literal>info automake</literal>.  <literal>info automake</literal>.
1033  </para>  </para>
1034  <para>  <para>
1035  The second step of Autotools work flow is usually that the user obtains this  The second step of the Autotools workflow is usually that the user obtains this
1036  distributed source and runs <literal>./configure &amp;&amp; make</literal> in  distributed source and runs <literal>./configure &amp;&amp; make</literal> in
1037  the source to compile program into a  the source directory to compile the program into a
1038  <command><replaceable>binary</replaceable></command>.  <command><replaceable>binary</replaceable></command> executable.
1039  </para>  </para>
1040  <screen>  <screen>
1041  Makefile.in -----+                +-&gt; Makefile -----+-&gt; make -&gt; <replaceable>binary</replaceable>  Makefile.in -----+                +-&gt; Makefile -----+-&gt; make -&gt; <replaceable>binary</replaceable>
# Line 917  config.h.in -----+                +-&gt; Line 1046  config.h.in -----+                +-&gt;
1046             config.guess --+             config.guess --+
1047  </screen>  </screen>
1048  <para>  <para>
1049  You can change many things in the <filename>Makefile</filename> file such as  You can change many things in the <filename>Makefile</filename>; for
1050  the default file install location using the command option, e.g.  instance you can change the default location for file installation
1051  <command>./configure --prefix=/usr</command>.  using the option <command>./configure --prefix=/usr</command>.
1052  </para>  </para>
1053  <para>  <para>
1054  Although it is not required, updating the <filename>configure</filename> and  Although it is not required, updating the <filename>configure</filename> and
1055  other files with <literal>autoreconf -i -f</literal> as the user may improve  other files with <literal>autoreconf -i -f</literal> may improve
1056  the compatibility of the source.  the compatibility of the source.
1057    <footnote><para>You can automate this by using
1058    <systemitem role="package">dh-autoreconf</systemitem> package.
1059    See <xref linkend="customrules"/>.</para></footnote>
1060  </para>  </para>
1061  <para>  <para>
1062  <ulink url="&cmake;">CMake</ulink> is an alternative  <ulink url="&cmake;">CMake</ulink> is an alternative
1063  build system.  You can notice such sources by the  build system.  You can recognize such sources by the
1064  <filename>CMakeLists.txt</filename> file.  <filename>CMakeLists.txt</filename> file.
1065  </para>  </para>
1066  </section>  </section>
1067  <section id="namever"><title>Package name and version</title>  <section id="namever"><title>Package name and version</title>
1068  <para>  <para>
1069  You should start packaging with a completely clean (pristine) source directory,  If the upstream source comes as <filename>gentoo-0.9.12.tar.gz</filename>, you can
1070  or simply with freshly unpacked sources.  consider
1071    <emphasis role="strong">package name</emphasis> to be <literal>gentoo</literal> and
1072    <emphasis role="strong">upstream version</emphasis> to be <literal>0.9.12</literal>.
1073    These are used in the <filename>debian/changelog</filename> file described later in
1074    <xref linkend="changelog"/>, too.
1075    </para>
1076    <para>
1077    Although this simple approach works most of the times, you may need to adjust
1078    <emphasis role="strong">package name</emphasis> and
1079    <emphasis role="strong">upstream version</emphasis> by renaming the upstream
1080    source to follow the Debian Policy and the existing convention.
1081    </para>
1082    <para>
1083    You must choose the <emphasis role="strong">package name</emphasis>
1084    to consist only of lower case letters (<literal>a-z</literal>), digits
1085    (<literal>0-9</literal>), plus (<literal>+</literal>) and minus
1086    (<literal>-</literal>) signs, and periods (<literal>.</literal>). It must be
1087    at least two characters long, must start with an alphanumeric character, and
1088    must not be the same as existing ones.
1089    It is good idea to keep its length within 30 characters and should not exceed
1090    40 characters.
1091    </para>
1092    <!--
1093    Osamu's archive stat (2011-04-23, sid, kfreebsd-amd64):
1094    === stat for package name string length ===
1095    11 1947 36.9%   mode
1096    14 1717 54.7%  50% median
1097    23 611 91.0%   90%
1098    32 89 99.0%    99%
1099    41 12 99.9%    99.9%
1100    52 1 100.0%
1101    Previous 20 chars is becoming too short for 17% of packages
1102    Default aptitude setting display up to 30 chars (98.3%).
1103    -->
1104    <para>
1105    If upstream source uses generic words such as <literal>test-suite</literal> as
1106    its name, it is good idea to rename it not to contaminate name space for the
1107    package name and to identify its contents explicitly.
1108    <footnote><para>If you follow the
1109    <ulink url="&devref-newpackage;">Debian Developer's Reference 5.1. "New packages"</ulink>,
1110    the ITP process will usually catch this kind of issues.</para></footnote>
1111    </para>
1112    <para>
1113    You should choose the <emphasis role="strong">upstream version</emphasis>
1114    to consist only of
1115    alphanumerics (<literal>0-9A-Za-z</literal>), plus (<literal>+</literal>),
1116    tildes (<literal>~</literal>), and periods (<literal>.</literal>). It must
1117    start with a digit (<literal>0-9</literal>).  <footnote><para>This stricter
1118    rule should help you avoid confusing file names.</para></footnote>
1119    It is good idea to keep its length within 8 characters if possible.
1120  </para>  </para>
1121    <!--
1122    Osamu's archive stat (2011-04-23, sid, kfreebsd-amd64):
1123    === stat for upstream version string length ===
1124    5 9765 60.2%  50% median and mode
1125    6 3765 73.3%
1126    7 2789 82.9%
1127    8 1158 86.9%
1128    9 501 88.6%
1129    10 773 91.3%  90%
1130    18 55 99.1%   99%
1131    27 11 99.9%    99.9
1132    35 6 100.0%
1133    === stat for debian revision string length ===
1134    1 22556 83.3%  50% median and mode
1135    2 1106 87.2%
1136    3 1312 91.7%   90%
1137    4 2127 99.1%   99%
1138    7 14 99.9%     99.9%
1139    
1140    aptitude display 10 = 8char for up + 1char (for -) + 1char for deb
1141    90chars as max for file name of binary debs (package+up+deb+arch+.deb)
1142    -->
1143  <para>  <para>
1144  For the package to be built correctly, you must make the program's original  If the upstream software does not use normal version system like
1145  name lowercase (if it isn't already), and you should move the source directory  <literal>2.30.32</literal> but uses some kind of date such as
1146  to  <literal>09Oct23</literal>, a random codename string or a VCS hash value as a part
1147  <filename><replaceable>packagename</replaceable>-<replaceable>version</replaceable></filename>.  of version, make sure to remove them from the
1148  </para>  <emphasis role="strong">upstream version</emphasis>.  Such information can be
1149  <para>  recorded in the <filename>debian/changelog</filename> file.  If you need to
1150  If the program name consists of more than one word, contract them to one word,  invent a version string, use the <literal>YYYYMMDD</literal> format such as
1151  or make an abbreviation.  For example, program John's little editor for X  <literal>20110429</literal> as upstream version.  This ensures that
1152  package would be named <systemitem role="package">johnledx</systemitem>, or  <command>dpkg</command> properly sees later versions as upgrades.
1153  <systemitem role="package">jle4x</systemitem>, or whatever you decide, as long  </para>
1154  as it's under some reasonable limit, e.g.  20 characters.  <para>
1155  </para>  Version strings can be compared with <citerefentry> <refentrytitle>dpkg</refentrytitle> <manvolnum>1</manvolnum> </citerefentry> as the following.
1156  <para>  </para>
1157  Also check for the exact version of the program (to be included in the package  <screen>
1158  version).  If that piece of software is not numbered with versions like   $ dpkg --compare-versions <replaceable>ver1</replaceable> <replaceable>op</replaceable> <replaceable>ver2</replaceable>
1159  <literal>X.Y.Z</literal>, but with some kind of date, feel free to use that  </screen>
1160  date as the version number, as long as newer version numbers will look larger.  <para>
1161  While it is best to use the same version number as what upstream uses, if it is  The version comparison rule can be summarized as the following.
1162  in the format of <literal>09Oct23</literal> you may need to convert it to  </para>
1163  <literal>YYYYMMDD</literal> format, which would be <literal>20091023</literal>,  <itemizedlist>
1164  to ensure proper order for upgrade with the <command>dpkg</command>  <listitem><para>The strings are compared from the head to the tail.</para></listitem>
1165  program.<footnote><para> Version string can be compared by <literal>dpkg  <listitem><para>Alphabets are larger than numbers.</para></listitem>
1166  --compare-versions <replaceable>ver1</replaceable>  <listitem><para>Numbers are compared as the integer.</para></listitem>
1167  <replaceable>op</replaceable> <replaceable>ver2</replaceable></literal>.  See  <listitem><para>Alphabets are compared in the ASCII code order.</para></listitem>
1168  <citerefentry> <refentrytitle>dpkg</refentrytitle> <manvolnum>1</manvolnum>  <listitem><para>There are some special rules for periods (<literal>.</literal>), plus (<literal>+</literal>) and tildes (<literal>~</literal>) as the followings.</para>
1169  </citerefentry> manpage.  </para> </footnote>    <para>
1170  </para>    <literal>0.0</literal> &lt;
1171  <para>    <literal>0.5</literal> &lt;
1172  Some programs won't be numbered at all, in which case you should contact the    <literal>0.10</literal> &lt;
1173  upstream maintainer to see if they've got some other revision-tracking method.    <literal>0.99</literal> &lt;
1174  </para>    <literal>1</literal> &lt;
1175  </section>    <literal>1.0~rc1</literal> &lt;
1176  <section id="dh-make"><title>Initial Debian package</title>    <literal>1.0</literal> &lt;
1177  <para>    <literal>1.0+b1</literal> &lt;
1178  Let's set up the shell environment variable <literal>$DEBEMAIL</literal> and    <literal>1.0+nmu1</literal> &lt;
1179  <literal>$DEBFULLNAME</literal> so many Debian maintenance tools recognize your    <literal>1.1</literal> &lt;
1180  name and email address to use for packages as follows.<footnote><para> The    <literal>2.0</literal>
1181      </para>
1182    </listitem>
1183    </itemizedlist>
1184    <para>
1185    One of the tricky case happens when the upstream releases
1186    <filename>gentoo-0.9.12-ReleaseCandidate-99.tar.gz</filename> as the
1187    pre-release of <filename>gentoo-0.9.12.tar.gz</filename>.  You need to make
1188    sure that the upgrade works properly by renaming the upstream source to
1189    <filename>gentoo-0.9.12~rc99.tar.gz</filename>.
1190    </para>
1191    </section>
1192    <section id="dh-make"><title>Setting up <command>dh_make</command></title>
1193    <para>
1194    Set up the shell environment variables <literal>$DEBEMAIL</literal> and
1195    <literal>$DEBFULLNAME</literal> so that various Debian maintenance
1196    tools recognize your email address and name to use for packages. <footnote><para> The
1197  following text assumes you are using Bash as your login shell.  If you use  following text assumes you are using Bash as your login shell.  If you use
1198  other login shells such as Z shell, use their pertinent configuration files  some other login shell such as Z shell, use their corresponding
1199  instead of <filename>~/.bashrc</filename>.  </para> </footnote>.  configuration files instead of <filename>~/.bashrc</filename>. </para> </footnote>
1200  </para>  </para>
1201  <screen>  <screen>
1202  $ cat &gt;&gt;~/.bashrc &lt;&lt;EOF  $ cat &gt;&gt;~/.bashrc &lt;&lt;EOF
# Line 985  DEBEMAIL=your.email.address@example.org Line 1204  DEBEMAIL=your.email.address@example.org
1204  DEBFULLNAME=Firstname Lastname  DEBFULLNAME=Firstname Lastname
1205  export DEBEMAIL DEBFULLNAME  export DEBEMAIL DEBFULLNAME
1206  EOF  EOF
1207    $ . ~/.bashrc
1208  </screen>  </screen>
1209    </section>
1210    <section id="non-native-dh-make"><title>Initial non-native Debian package</title>
1211  <para>  <para>
1212  Let's make an initial Debian package by issuing the <command>dh_make</command>  Normal Debian packages are non-native Debian packages made from upstream
1213    programs.  If you wish to create a non-native Debian package of an upstream
1214    source <filename>gentoo-0.9.12.tar.gz</filename>, you can create an initial
1215    non-native Debian package for it by issuing the <command>dh_make</command>
1216  command as follows.  command as follows.
1217  </para>  </para>
1218  <screen>  <screen>
1219  $ . ~/.bashrc  $ cd ~/gentoo
1220  $ cd ~/gentoo/gentoo-0.9.12  $ wget http://example.org/gentoo-0.9.12.tar.gz
1221    $ tar -xvzf gentoo-0.9.12.tar.gz
1222    $ cd gentoo-0.9.12
1223  $ dh_make -f ../gentoo-0.9.12.tar.gz  $ dh_make -f ../gentoo-0.9.12.tar.gz
1224  </screen>  </screen>
1225  <para>  <para>
1226  Of course, replace the filename with the name of your original source archive.  Of course, replace the filename with the name of your original source archive.
1227  <footnote><para> If the upstream source provides the  <footnote><para> If the upstream source provides the
1228  <filename>debian</filename> directory and its contents, run the  <filename>debian</filename> directory and its contents, run the
1229  <command>dh_make</command> command with the <literal>--addmissing</literal>  <command>dh_make</command> command with the extra option
1230  option, instead.  The new source <literal>3.0 (quilt)</literal> format is quite  <literal>--addmissing</literal>.  The new source <literal>3.0 (quilt)</literal> format is
1231  robust not to break even for these packages.  You may need to update contents  robust enough not to break even for these packages.  You may need to update the contents
1232  provided by the upstream for your Debian package.  </para> </footnote> See  provided by the upstream for your Debian package.  </para> </footnote> See
1233  <citerefentry> <refentrytitle>dh_make</refentrytitle> <manvolnum>1</manvolnum>  <citerefentry> <refentrytitle>dh_make</refentrytitle> <manvolnum>1</manvolnum>
1234  </citerefentry> for details.  </citerefentry> for details.
1235  </para>  </para>
1236  <para>  <para>
1237  Some information will come up.  It will ask you what sort of package you want  You should see some output asking you what sort of package you want
1238  to create.  Gentoo is a single binary package - it creates only one binary, and  to create.  Gentoo is a single binary package - it creates only one binary package, i.e,
1239  thus one <filename>.deb</filename> file - so we will select the first option,  one <filename>.deb</filename> file - so we will select the first option
1240  with the <literal>s</literal> key, check the information on the screen and  (with the <literal>s</literal> key), check the information on the screen, and
1241  confirm by pressing <literal><replaceable>ENTER</replaceable></literal>.  confirm by pressing <literal><replaceable>ENTER</replaceable></literal>.
1242  <footnote><para> There are few choices here: <literal>s</literal> for Single  <footnote><para> There are several choices here: <literal>s</literal> for
1243  binary, <literal>i</literal> for Arch-Independent, <literal>m</literal> for  Single binary package, <literal>i</literal> for arch-Independent package, <literal>m</literal> for
1244  Multiple binary, <literal>l</literal> for Library, <literal>k</literal> for  Multiple binary packages, <literal>l</literal> for Library package, <literal>k</literal> for
1245  Kernel module, <literal>n</literal> for Kernel patch and <literal>b</literal>  Kernel module package, <literal>n</literal> for kernel patch package, and <literal>b</literal>
1246  for <systemitem role="package">cdbs</systemitem>.  This document focuses on the  for <systemitem role="package">cdbs</systemitem> package.  This document focuses on the
1247  use of the <systemitem role="package">debhelper</systemitem> package with the  use of the <command>dh</command> command (from the package
1248  <command>dh</command> command.  This document focuses on the use of the new  <systemitem role="package">debhelper</systemitem>) to create a single binary package,
1249  <command>dh</command> command for Single binary and touches on it for  but also touches on how to use it for arch-independent or
1250  Arch-Independent and Multiple binary.  The <systemitem role="package">cdbs</systemitem> package offers alternative package script  multiple binary packages.  The package
1251  infrastructure to the <command>dh</command> command and outside of the scope of  <systemitem role="package">cdbs</systemitem> offers an alternative packaging script
1252    infrastructure to the <command>dh</command> command and is outside the scope of
1253  this document.  </para> </footnote>  this document.  </para> </footnote>
1254  </para>  </para>
1255  <para>  <para>
1256  After this execution of <command>dh_make</command>, a copy of the upstream  This execution of <command>dh_make</command> creates a copy of the upstream
1257  tarball is created as <filename>gentoo_0.9.12.orig.tar.gz</filename> in the  tarball as <filename>gentoo_0.9.12.orig.tar.gz</filename> in the
1258  parent directory to accommodate the creation of the non-native Debian source  parent directory to accommodate the creation of the non-native Debian source
1259  package with the <filename>debian.tar.gz</filename> later.  package with the name <filename>debian.tar.gz</filename> later.
1260  </para>  </para>
1261  <screen>  <screen>
1262  $ cd ~/gentoo ; ls -F  $ cd ~/gentoo ; ls -F
# Line 1037  gentoo-0.9.12.tar.gz Line 1265  gentoo-0.9.12.tar.gz
1265  gentoo_0.9.12.orig.tar.gz  gentoo_0.9.12.orig.tar.gz
1266  </screen>  </screen>
1267  <para>  <para>
1268  Please note 2 key features in this  Please note two key features of this filename
1269  <filename>gentoo_0.9.12.orig.tar.gz</filename> file name:  <filename>gentoo_0.9.12.orig.tar.gz</filename>:
1270  </para>  </para>
1271  <itemizedlist>  <itemizedlist>
1272  <listitem>  <listitem>
1273  <para>  <para>
1274  Package name and version are separated by the <literal>_</literal>  Package name and version are separated by the character <literal>_</literal>
1275  (underscore).  (underscore).
1276  </para>  </para>
1277  </listitem>  </listitem>
1278  <listitem>  <listitem>
1279  <para>  <para>
1280  There is the <filename>.orig</filename> before the  The string <filename>.orig</filename> is inserted before the
1281  <filename>.tar.gz</filename>.  <filename>.tar.gz</filename>.
1282  </para>  </para>
1283  </listitem>  </listitem>
1284  </itemizedlist>  </itemizedlist>
1285  <para>  <para>
1286  You should also notice that many template files are created in the source under  You should also notice that many template files are created in the source under
1287  the <filename>debian</filename> directory.  These will be explained in <xref linkend="dreq"/> and <xref linkend="dother"/> .  You should also understand  the <filename>debian</filename> directory.  These will be explained in
1288  that the packaging is not automatic process.  You need to modify the upstream  <xref linkend="dreq"/> and <xref linkend="dother"/>.  You should also understand
1289  source for Debian as <xref linkend="modify"/> .  After all these, you need to  that packaging cannot be a fully automated process.  You will need to modify the upstream
1290  build Debian packages under the proper method as <xref linkend="build"/> ,  source for Debian (see <xref linkend="modify"/>).  After this, you need to
1291  check them as <xref linkend="checkit"/> , and upload them as <xref linkend="upload"/> .  I will explain all these steps.  use the proper methods for building Debian packages (<xref linkend="build"/>),
1292  </para>  testing them (<xref linkend="checkit"/>), and uploading them (<xref linkend="upload"/>).
1293  <para>  All the steps will be explained.
 Once again, as a new maintainer you are discouraged from creating complicated  
 packages, e.g.,  
 </para>  
 <itemizedlist>  
 <listitem>  
 <para>  
 multiple binary packages,  
1294  </para>  </para>
 </listitem>  
 <listitem>  
 <para>  
 library packages,  
 </para>  
 </listitem>  
 <listitem>  
1295  <para>  <para>
1296  kernel module packages,  If you accidentally erased some template files while working on them, you can
1297  </para>  recover them by running <command>dh_make</command> with the
1298  </listitem>  <literal>--addmissing</literal> option again in a Debian package source tree.
 <listitem>  
 <para>  
 kernel patch packages,  
 </para>  
 </listitem>  
 <listitem>  
 <para>  
 the source file format being neither in <filename>tar.gz</filename> nor  
 <filename>tar.bz2</filename>, or  
1299  </para>  </para>
 </listitem>  
 <listitem>  
1300  <para>  <para>
1301  the source tarball containing undistributable contents.  Updating an existing package may get complicated since it may be using older
1302    techniques.  While learning the basics, please stick to creating a fresh
1303    package; further explanations are given in <xref linkend="update"/>.
1304  </para>  </para>
 </listitem>  
 </itemizedlist>  
1305  <para>  <para>
1306  It's not too hard, but it does require a bit more knowledge, so we won't  Please note that the source file does not need to contain any build system
1307  describe all of it here.  discussed in <xref linkend="simplemake"/> and <xref linkend="portable"/>.  It
1308    could be just a collection of graphics data etc.  Installation of files may be
1309    enabled by <systemitem role="package">debhelper</systemitem> configuration
1310    files such as <filename>debian/install</filename> (see
1311    <xref linkend="install"/>) only.
1312  </para>  </para>
1313    </section>
1314    <section id="native-dh-make"><title>Initial native Debian package</title>
1315  <para>  <para>
1316  If you accidentally erased some template files while working on them, you can  Debian native packages are simpler to manage if they contain source files you
1317  recover them by running <command>dh_make</command> with the  manage only for Debian, possibly only for local uses.  If you have source
1318  <literal>--addmissing</literal> option again in a Debian package source tree.  files in <filename>~/mypackage-1.0</filename>, you can create an initial native
1319    Debian package for it by issuing the <command>dh_make</command> command as
1320    follows.
1321  </para>  </para>
1322    <screen>
1323    $ cd ~/mypackage-1.0
1324    $ dh_make --native
1325    </screen>
1326  <para>  <para>
1327  Updating an existing package may get complicated since it may be using older  Then the <filename>debian</filename> directory and its contents are created
1328  techniques.  Please stick with fresh packaging cases for now to learn basics.  just like <xref linkend="non-native-dh-make"/>.  This does not create a tarball
1329  I will come back to explain it later in <xref linkend="update"/> .  since this is a native Debian package.  But that is the only difference.
1330    The rest of the packaging activities are practically the same.
1331  </para>  </para>
1332  </section>  </section>
1333  </chapter>  </chapter>
# Line 1121  Please note that there isn't space here Line 1337  Please note that there isn't space here
1337  details of fixing upstream sources, but here are some basic steps and problems  details of fixing upstream sources, but here are some basic steps and problems
1338  people often run across.  people often run across.
1339  </para>  </para>
1340  <section id="quiltrc"><title>Set up <command>quilt</command></title>  <section id="quiltrc"><title>Setting up <command>quilt</command></title>
1341  <para>  <para>
1342  The <command>quilt</command> program offers the basic method to record  The program <command>quilt</command> offers a basic method for recording
1343  modification to the source for the Debian packaging.  Since slightly different  modifications to the upstream source for Debian packaging.  It's
1344  default is desirable for Debian packaging, let's set up  useful to have a slightly customized default, so let's create an alias
1345  <filename>~/.quiltrc</filename> as follows.  <footnote><para> You can disable  <command>dquilt</command> for Debian packaging by adding the following
1346  this configuration by starting the <command>quilt</command> command as  line to <filename>~/.bashrc</filename>.
1347  <literal>quilt --quiltrc /dev/null ...</literal>.  </para> </footnote>  </para>
1348    <screen>
1349    alias dquilt="quilt --quiltrc=~/.quiltrc-dpkg"
1350    </screen>
1351    <para>
1352    Then let's create <filename>~/.quiltrc-dpkg</filename> as follows.
1353  </para>  </para>
1354  <screen>  <screen>
1355  d=. ; while [ ! -d $d/debian -a `readlink -e $d` != / ]; do d=$d/..; done  d=. ; while [ ! -d $d/debian -a `readlink -e $d` != / ]; do d=$d/..; done
1356  if [ -d $d/debian ] &amp;&amp; [ -z $QUILT_PATCHES ]; then  if [ -d $d/debian ] &amp;&amp; [ -z $QUILT_PATCHES ]; then
1357      # Debian packaging case and unset $QUILT_PATCHES      # if in Debian packaging tree with unset $QUILT_PATCHES
1358      QUILT_PATCHES=debian/patches      QUILT_PATCHES="debian/patches"
1359      QUILT_PATCH_OPTS=--reject-format=unified      QUILT_PATCH_OPTS="--reject-format=unified"
1360      QUILT_DIFF_ARGS=-p ab --no-timestamps --no-index --color=auto      QUILT_DIFF_ARGS="-p ab --no-timestamps --no-index --color=auto"
1361      QUILT_REFRESH_ARGS=-p ab --no-timestamps --no-index      QUILT_REFRESH_ARGS="-p ab --no-timestamps --no-index"
1362      QUILT_COLORS=diff_hdr=1;32:diff_add=1;34:diff_rem=1;31:diff_hunk=1;33:diff_ctx=35:diff_cctx=33      QUILT_COLORS="diff_hdr=1;32:diff_add=1;34:diff_rem=1;31:diff_hunk=1;33:diff_ctx=35:diff_cctx=33"
1363      if ! [ -d $d/debian/patches ]; then mkdir $d/debian/patches; fi      if ! [ -d $d/debian/patches ]; then mkdir $d/debian/patches; fi
1364  fi  fi
1365  </screen>  </screen>
1366  <para>  <para>
1367  See <citerefentry> <refentrytitle>quilt</refentrytitle>  See <citerefentry> <refentrytitle>quilt</refentrytitle>
1368  <manvolnum>1</manvolnum> </citerefentry> and  <manvolnum>1</manvolnum> </citerefentry> and
1369  <ulink url="&quilt-pdf;">quilt.pdf</ulink> for how to use  <ulink url="&quilt-pdf;">quilt.pdf</ulink> on how to use
1370  <command>quilt</command>.  <command>quilt</command>.
1371  </para>  </para>
1372  </section>  </section>
1373  <section id="fixupstream"><title>Fixing upstream bug</title>  <section id="fixupstream"><title>Fixing upstream bugs</title>
1374  <para>  <para>
1375  Let's assume you find an error in the upstream <filename>Makefile</filename>  Let's assume you find an error in the upstream <filename>Makefile</filename>
1376  file as follows where <literal>install: gentoo</literal> should have been  as follows where <literal>install: gentoo</literal> should have been
1377  <literal>install: gentoo-target</literal>.  <literal>install: gentoo-target</literal>.
1378  </para>  </para>
1379  <screen>  <screen>
# Line 1162  install: gentoo Line 1383  install: gentoo
1383          install gentoorc-example $(HOME)/.gentoorc          install gentoorc-example $(HOME)/.gentoorc
1384  </screen>  </screen>
1385  <para>  <para>
1386  Let's fix this and record this with the <command>quilt</command> command as  Let's fix this and record it with the <command>dquilt</command> command as
1387  <filename>fix-gentoo-target.patch</filename>.  <footnote><para> The  <filename>fix-gentoo-target.patch</filename>.  <footnote><para> The
1388  <filename>debian/patches</filename> directory should exist now if you run  <filename>debian/patches</filename> directory should exist now if you ran
1389  <command>dh_make</command> as described before.  This example operation creates  <command>dh_make</command> as described before.  This example operation creates
1390  it just in case you are updating the existing package.  </para> </footnote>  it just in case you are updating an existing package.  </para> </footnote>
1391  </para>  </para>
1392  <screen>  <screen>
1393  $ mkdir debian/patches  $ mkdir debian/patches
1394  $ quilt new fix-gentoo-target.patch  $ dquilt new fix-gentoo-target.patch
1395  $ quilt add Makefile  $ dquilt add Makefile
1396  </screen>  </screen>
1397  <para>  <para>
1398  You change the <filename>Makefile</filename> file as follows.  You change the <filename>Makefile</filename> file as follows.
# Line 1183  install: gentoo-target Line 1404  install: gentoo-target
1404          install gentoorc-example $(HOME)/.gentoorc          install gentoorc-example $(HOME)/.gentoorc
1405  </screen>  </screen>
1406  <para>  <para>
1407  Ask <command>quilt</command> to refresh the patch to create  Ask <command>dquilt</command> to generate the patch to create
1408  <filename>debian/patches/fix-gentoo-target.patch</filename> and add its  <filename>debian/patches/fix-gentoo-target.patch</filename> and add its
1409  description following <ulink url="&dep3;">DEP-3: Patch Tagging Guidelines</ulink>.  description following <ulink url="&dep3;">DEP-3: Patch Tagging Guidelines</ulink>.
1410  </para>  </para>
1411  <screen>  <screen>
1412  $ quilt refresh  $ dquilt refresh
1413  $ quilt header -e  $ dquilt header -e
1414  ... describe patch  ... describe patch
1415  </screen>  </screen>
1416  </section>  </section>
1417    <section id="destdir"><title>Installation of files to their destination</title>
 <section id="destdir"><title>Installation of files to the destination</title>  
1418  <para>  <para>
1419  Normally, programs install themselves in the <filename>/usr/local</filename>  Most third-party software installs itself in the <filename>/usr/local</filename>
1420  subdirectory.  Since it is reserved for system administrator's (or user's)  directory hierarchy.  On Debian this is reserved for private use
1421  private use, Debian packages must not use that directory but should use system  by the system administrator, so packages must not use directories such
1422  directories such as the <filename>/usr/bin</filename> subdirectory following  as <filename>/usr/local/bin</filename> but should instead use system
1423  the Filesystem Hierarchy Standard (<ulink url="&fhs;">FHS</ulink>,  directories such as <filename>/usr/bin</filename>, obeying the
1424  <ulink url="&fhs-pdf;">fhs-2.3.pdf</ulink>).  <ulink url="&fhs;">Filesystem Hierarchy Standard</ulink> (FHS).
1425  </para>  </para>
1426  <para>  <para>
1427  Normally, <citerefentry> <refentrytitle>make</refentrytitle>  Normally, <citerefentry> <refentrytitle>make</refentrytitle>
1428  <manvolnum>1</manvolnum> </citerefentry> is used to automate building the  <manvolnum>1</manvolnum> </citerefentry> is used to automate building the
1429  program and the execution of <literal>make install</literal> installs programs  program, and executing <literal>make install</literal> installs programs
1430  directly to the desired destination by the <literal>install</literal> target of  directly to the desired destination (following the
1431  the <filename>Makefile</filename> file.  In order for Debian to provide binary  <literal>install</literal> target in the
1432  packages, the build system installs programs to the file tree image created  <filename>Makefile</filename>).  In order for Debian to provide
1433  under a temporary directory instead to the actual destination.  pre-built installable packages, it modifies the build system to install
1434    programs into a file tree image created under a temporary directory
1435    instead of the actual destination.
1436  </para>  </para>
1437  <para>  <para>
1438  These 2 differences between (1) the normal program installation and (2) the  These two differences between normal program installation on one hand and the
1439  Debian packaging can be transparently addressed by the <systemitem role="package">debhelper</systemitem> package through the  Debian packaging system on the other can be transparently addressed by the
1440    <systemitem role="package">debhelper</systemitem> package through the
1441  <command>dh_auto_configure</command> and <command>dh_auto_install</command>  <command>dh_auto_configure</command> and <command>dh_auto_install</command>
1442  commands if the following conditions are met.  commands if the following conditions are met.
1443  </para>  </para>
1444  <itemizedlist>  <itemizedlist>
1445  <listitem>  <listitem>
1446  <para>  <para>
1447  The <filename>Makefile</filename> file follows the GNU conventions to support  The <filename>Makefile</filename> must follow GNU conventions and
1448  <literal>$(DESTDIR)</literal> variable.  support the <literal>$(DESTDIR)</literal> variable.
1449  <footnote><para> See <ulink url="&gnu-destdir;">GNU Coding Standards: 7.2.4 DESTDIR: Support for Staged Installs</ulink>.</para></footnote>  <footnote><para> See <ulink url="&gnu-destdir;">GNU Coding Standards: 7.2.4 DESTDIR: Support for Staged Installs</ulink>.</para></footnote>
1450  </para>  </para>
1451  </listitem>  </listitem>
1452  <listitem>  <listitem>
1453  <para>  <para>
1454  The source follows the Filesystem Hierarchy Standard (FHS).  The source must follow the Filesystem Hierarchy Standard (FHS).
1455  </para>  </para>
1456  </listitem>  </listitem>
1457  </itemizedlist>  </itemizedlist>
1458  <para>  <para>
1459  Programs that use GNU <command>autoconf</command>  Programs that use GNU <command>autoconf</command> follow the GNU conventions
1460  <emphasis>automatically</emphasis> follow the GNU conventions and their  automatically, so they can be trivial to package.  On the basis of
1461  packaging is almost <emphasis>automatic</emphasis>.  With this and other  this and other heuristics, it is estimated that the
1462  heuristics, the <systemitem role="package">debhelper</systemitem> package  <systemitem role="package">debhelper</systemitem> package will work for
1463  estimates that it works for about 90% of packages without making any intrusive  about 90% of packages without making any intrusive changes to their
1464  changes to their build system.  So the packaging is not as complicated as it  build system.  So packaging is not as complicated as it may seem.
 may seem.  
1465  </para>  </para>
1466  <para>  <para>
1467  If you need to make changes in the <filename>Makefile</filename> file, you  If you need to make changes in the <filename>Makefile</filename>, you
1468  should make sure to support these <literal>$(DESTDIR)</literal> variable.  The  should be careful to support the <literal>$(DESTDIR)</literal>
1469  <literal>$(DESTDIR)</literal> variable is unset in it and is prepended to each  variable.  Although it is unset by default, the <literal>$(DESTDIR)</literal>
1470  file path used for the program installation.  The packaging script will set  variable is prepended to each file path used for the program
1471  <literal>$(DESTDIR)</literal> to the temporary directory.  installation.  The packaging script will set
1472    <literal>$(DESTDIR)</literal> to the temporary directory.
1473  </para>  </para>
1474  <para>  <para>
1475  The temporary directory used by the <command>dh_auto_install</command> command  For packages of the single binary type, the temporary directory used
1476  is chosen as <filename>debian/<replaceable>package</replaceable></filename> for  by the <command>dh_auto_install</command> command will be set to
1477  single binary packages.  <footnote><para> For multiple binary packages, the  <filename>debian/<replaceable>package</replaceable></filename>.
1478    <footnote><para> For packages of the multiple binary type, the
1479  <command>dh_auto_install</command> command uses <filename>debian/tmp</filename>  <command>dh_auto_install</command> command uses <filename>debian/tmp</filename>
1480  as the temporary directory while the <command>dh_install</command> command with  as the temporary directory while the <command>dh_install</command> command with
1481  the help of  the help of
1482  <filename>debian/<replaceable>package-1</replaceable>.install</filename> and  <filename>debian/<replaceable>package-1</replaceable>.install</filename> and
1483  <filename>debian/<replaceable>package-2</replaceable>.install</filename> files  <filename>debian/<replaceable>package-2</replaceable>.install</filename> files
1484  will split contents of <filename>debian/tmp</filename> into  will split the contents of <filename>debian/tmp</filename> into
1485  <filename>debian/<replaceable>package-1</replaceable></filename> and  <filename>debian/<replaceable>package-1</replaceable></filename> and
1486  <filename>debian/<replaceable>package-2</replaceable></filename> temporary  <filename>debian/<replaceable>package-2</replaceable></filename> temporary
1487  directories to create multiple binary <filename>*.deb</filename> packages.  directories, to create
1488    <filename><replaceable>package-1</replaceable>_*.deb</filename> and
1489    <filename><replaceable>package-2</replaceable>_*.deb</filename> binary
1490    packages.
1491  </para> </footnote> Everything that is contained in the temporary directory  </para> </footnote> Everything that is contained in the temporary directory
1492  will be installed on a user's system when they install your package, the only  will be installed on users' systems when they install your package; the only
1493  difference is that <command>dpkg</command> will be installing the files in the  difference is that <command>dpkg</command> will be installing the
1494  root directory.  files to paths relative to the root directory rather than your working
1495    directory.
1496  </para>  </para>
1497  <para>  <para>
1498  Bear in mind that even though your program installs in  Bear in mind that even though your program installs in
1499  <filename>debian/<replaceable>package</replaceable></filename>, it still needs  <filename>debian/<replaceable>package</replaceable></filename>, it still needs
1500  to behave correctly when placed in the root directory, i.e.  when installed  to behave correctly when installed from the <filename>.deb</filename>
1501  from the <filename>.deb</filename> package.  So you must not allow the build  package under the root directory.  So you must not allow the build
1502  system to hardcode strings like  system to hardcode strings like
1503  <literal>/home/me/deb/<replaceable>package</replaceable>-<replaceable>version</replaceable>/usr/share/<replaceable>package</replaceable></literal>  <literal>/home/me/deb/<replaceable>package</replaceable>-<replaceable>version</replaceable>/usr/share/<replaceable>package</replaceable></literal>
1504  into the package file.  into files in the package.
1505  </para>  </para>
1506  <para>  <para>
1507  Here's the relevant part of <systemitem role="package">gentoo</systemitem>'s  Here's the relevant part of <systemitem role="package">gentoo</systemitem>'s
1508  <filename>Makefile</filename> file <footnote><para> This is just an example to  <filename>Makefile</filename><footnote><para> This is just an example to
1509  show how the <filename>Makefile</filename> file should look like.  If the  show what a <filename>Makefile</filename> should look like.  If the
1510  <filename>Makefile</filename> file is created by the  <filename>Makefile</filename> is created by the
1511  <command>./configure</command> command, the correct way to fix this kind of  <command>./configure</command> command, the correct way to fix this kind of
1512  <filename>Makefile</filename> is to executed the <command>./configure</command>  <filename>Makefile</filename> is to execute <command>./configure</command>
1513  command from the <command>dh_auto_configure</command> command with default  from the <command>dh_auto_configure</command> command with default
1514  options including <literal>--prefix=/usr</literal>.  </para> </footnote>:  options including <literal>--prefix=/usr</literal>.  </para> </footnote>:
1515  </para>  </para>
1516  <screen>  <screen>
1517  # Where to put binary on 'make install'?  # Where to put binary executables on 'make install'?
1518  BIN     = /usr/local/bin  BIN     = /usr/local/bin
1519  # Where to put icons on 'make install'?  # Where to put icons on 'make install'?
1520  ICONS   = /usr/local/share/gentoo  ICONS   = /usr/local/share/gentoo
1521  </screen>  </screen>
1522  <para>  <para>
1523  We see that the files are set to install under <filename>/usr/local</filename>.  We see that the files are set to install under <filename>/usr/local</filename>.
1524  Change those paths to:  As explained above, that directory hierarchy is reserved for local use on
1525    Debian, so change those paths to:
1526  </para>  </para>
1527  <screen>  <screen>
1528  # Where to put binary on 'make install'?  # Where to put binary executables on 'make install'?
1529  BIN     = $(DESTDIR)/usr/bin  BIN     = $(DESTDIR)/usr/bin
1530  # Where to put icons on 'make install'?  # Where to put icons on 'make install'?
1531  ICONS   = $(DESTDIR)/usr/share/gentoo  ICONS   = $(DESTDIR)/usr/share/gentoo
1532  </screen>  </screen>
1533  <para>  <para>
1534  But why in that directory, and not some other?  Because Debian packages never  The exact locations that should be used for binaries, icons,
1535  install files beneath <filename>/usr/local</filename> -- that tree is reserved  documentation, etc. are specified in the Filesystem Hierarchy Standard
1536  for the system administrator's use.  Such files on Debian systems go under  (FHS).  You should browse through it and read the sections relevant to
1537  <filename>/usr</filename> instead.  your package.
 </para>  
 <para>  
 The more exact locations for binaries, icons, documentation etc.  are specified  
 in the Filesystem Hierarchy Standard (see  
 <ulink url="&fhs;">FHS</ulink>).  I recommend you  
 browse it and read the sections that might concern your package.  
1538  </para>  </para>
1539  <para>  <para>
1540  So, we should install the binary in <filename>/usr/bin</filename> instead of  So, we should install binary executables in <filename>/usr/bin</filename> instead of
1541  <filename>/usr/local/bin</filename>, the manual page in  <filename>/usr/local/bin</filename>, the manual page in
1542  <filename>/usr/share/man/man1</filename> instead of  <filename>/usr/share/man/man1</filename> instead of
1543  <filename>/usr/local/man/man1</filename> etc.  Notice how there's no manual  <filename>/usr/local/man/man1</filename>, and so on.  Notice how there's no manual
1544  page mentioned in <systemitem role="package">gentoo</systemitem>'s  page mentioned in <systemitem role="package">gentoo</systemitem>'s
1545  <filename>Makefile</filename>, but since the Debian Policy requires that every  <filename>Makefile</filename>, but since Debian Policy requires that every
1546  program has one, we'll make one later and install it in  program has one, we'll make one later and install it in
1547  <filename>/usr/share/man/man1</filename>.  <filename>/usr/share/man/man1</filename>.
1548  </para>  </para>
# Line 1330  to fix them to use the right locations. Line 1553  to fix them to use the right locations.
1553  for?  You can find this out by issuing:  for?  You can find this out by issuing:
1554  </para>  </para>
1555  <screen>  <screen>
1556  $ grep -nr -e 'usr/local/lib' --include='*.[c|h]' .  $ grep -nr --include='*.[c|h]' -e 'usr/local/lib' .
1557  </screen>  </screen>
1558  <para>  <para>
1559  <command>grep</command> will run recursively through the source tree and tell  <command>grep</command> will run recursively through the source tree and tell
# Line 1341  Edit those files and in those lines repl Line 1564  Edit those files and in those lines repl
1564  with <literal>usr/lib</literal>.  This can be done automatically as follows:  with <literal>usr/lib</literal>.  This can be done automatically as follows:
1565  </para>  </para>
1566  <screen>  <screen>
1567  $ vim '+argdo %s/usr\/local\/lib/usr\/lib/gce|update' +q \  $ sed -i -e 's#usr/local/lib#usr/lib#g' \
1568        $(find . -type f -name '*.[c|h]')        $(find . -type f -name '*.[c|h]')
1569  </screen>  </screen>
1570  <para>  <para>
1571  Be careful that you don't mess up the rest of the code!  :-)  If you want to confirm each substitution instead, this can be done interactively as follows:
1572  </para>  </para>
1573    <screen>
1574    $ vim '+argdo %s#usr/local/lib#usr/lib#gce|update' +q \
1575          $(find . -type f -name '*.[c|h]')
1576    </screen>
1577    
1578  <para>  <para>
1579  After that you should find the install target (search for line that starts with  Next you should find the <literal>install</literal> target (searching
1580  <literal>install:</literal>, that will usually work) and rename all references  for the line that starts with <literal>install:</literal> will usually
1581  to directories other than ones defined at the top of the  work) and rename all references to directories other than ones defined
1582  <filename>Makefile</filename>.  at the top of the <filename>Makefile</filename>.
1583  </para>  </para>
1584  <para>  <para>
1585  Before your upstream bug fix, <systemitem role="package">gentoo</systemitem>'s  Originally, <systemitem role="package">gentoo</systemitem>'s
1586  install target said:  install target said:
1587  </para>  </para>
1588  <screen>  <screen>
# Line 1364  install: gentoo-target Line 1592  install: gentoo-target
1592          install gentoorc-example $(HOME)/.gentoorc          install gentoorc-example $(HOME)/.gentoorc
1593  </screen>  </screen>
1594  <para>  <para>
1595  Let's fix this and record this with the <command>quilt</command> command as  Let's fix this upstream bug and record it with the <command>dquilt</command> command as
1596  <filename>debian/patches/install.patch</filename>.  <filename>debian/patches/install.patch</filename>.
1597  </para>  </para>
1598  <screen>  <screen>
1599  $ quilt new install.patch  $ dquilt new install.patch
1600  $ quilt add Makefile  $ dquilt add Makefile
1601  </screen>  </screen>
1602  <para>  <para>
1603  Let's change this for Debian package as following using the editor:  In your editor, change this for the Debian package as follows:
1604  </para>  </para>
1605  <screen>  <screen>
1606  install: gentoo-target  install: gentoo-target
# Line 1382  install: gentoo-target Line 1610  install: gentoo-target
1610          install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc          install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc
1611  </screen>  </screen>
1612  <para>  <para>
1613  You've surely noticed that there's now a <literal>install -d</literal> command  You'll have noticed that there's now an <literal>install -d</literal> command
1614  before the other commands in the rule.  The original  before the other commands in the rule.  The original
1615  <filename>Makefile</filename> didn't have it because usually the  <filename>Makefile</filename> didn't have it because usually
1616  <literal>/usr/local/bin</literal> and other directories already exist on the  <literal>/usr/local/bin</literal> and other directories already exist on the
1617  system where one runs <literal>make install</literal>.  However, since we will  system where you are running <literal>make install</literal>.  However, since we will
1618  install into our own empty (or even nonexistent) directory, we will have to  be installing into a newly created private directory tree, we will have to
1619  create each and every one of those directories.  create each and every one of those directories.
1620  </para>  </para>
1621  <para>  <para>
# Line 1399  of additional documentation that the ups Line 1627  of additional documentation that the ups
1627          cp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html          cp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html
1628  </screen>  </screen>
1629  <para>  <para>
1630  After careful check, if everything is fine, ask <command>quilt</command> to  Check carefully, and if everything is okay, ask <command>dquilt</command> to
1631  refresh the patch to create <filename>debian/patches/install.patch</filename>  generate the patch to create <filename>debian/patches/install.patch</filename>
1632  and add its description.  and add its description.
1633  </para>  </para>
1634  <screen>  <screen>
1635  $ quilt refresh  $ dquilt refresh
1636  $ quilt header -e  $ dquilt header -e
1637  ... describe patch  ... describe patch
1638  </screen>  </screen>
1639  <para>  <para>
# Line 1428  Debian specific packaging modification: Line 1656  Debian specific packaging modification:
1656  Whenever you make changes that are not specifically related to Debian package  Whenever you make changes that are not specifically related to Debian package
1657  such as <filename>debian/patches/fix-gentoo-target.patch</filename>, be sure to  such as <filename>debian/patches/fix-gentoo-target.patch</filename>, be sure to
1658  send them to the upstream maintainer so they can be included in the next  send them to the upstream maintainer so they can be included in the next
1659  program revision and be useful to everyone else.  Also remember to make your  revision of the program and be useful to everyone else.  Also remember
1660  fixes not specific to Debian or Linux (or even Unix!) prior to sending them --  to avoid making your fixes specific to Debian or Linux - or even Unix!
1661  make them portable.  This will make your fixes much easier to apply.  Make them portable.  This will make your fixes much easier to apply.
1662  </para>  </para>
1663  <para>  <para>
1664  Note that you don't have to send the <filename>debian/*</filename> files  Note that you don't have to send the <filename>debian/*</filename> files
# Line 1441  upstream. Line 1669  upstream.
1669  <para>  <para>
1670  There is one other common problem: libraries are often different from platform  There is one other common problem: libraries are often different from platform
1671  to platform.  For example, a <filename>Makefile</filename> can contain a  to platform.  For example, a <filename>Makefile</filename> can contain a
1672  reference to a library which doesn't exist on Debian systems.  In that case, we  reference to a library which doesn't exist on the Debian system.  In that case, we
1673  need to change it to a library which does exist in Debian, and serves the same  need to change it to a library which does exist in Debian, and serves the same
1674  purpose.  purpose.
1675  </para>  </para>
1676  <para>  <para>
1677  So, if there is a line in your program's <filename>Makefile</filename> (or  Let's assume a line in your program's <filename>Makefile</filename> (or
1678  <filename>Makefile.in</filename>) that says something like this (and your  <filename>Makefile.in</filename>) as the following.
 program doesn't compile) <footnote><para> The author realizes that this is not  
 the best example considering our <systemitem role="package">libncurses</systemitem> package now ships with a  
 <filename>libcurses.so</filename> symlink, but he couldn't think of a better  
 one.  Suggestions very welcome :-) </para> </footnote>:  
1679  </para>  </para>
1680  <screen>  <screen>
1681  LIBS = -lcurses -lsomething -lsomethingelse  LIBS = -lfoo -lbar
1682  </screen>  </screen>
1683  <para>  <para>
1684  Let's fix this as <filename>debian/patches/ncurse.patch</filename> by changing  If your program doesn't compile since the <literal>foo</literal> library
1685  <literal>curses</literal> into <literal>ncurses</literal>.  doesn't exist and its equivalent is provided by the <literal>foo2</literal>
1686    library on the Debian system, you can fix this build problem as
1687    <filename>debian/patches/foo2.patch</filename> by changing
1688    <literal>foo</literal> into <literal>foo2</literal>.<footnote><para>If there
1689    are API changes from the <literal>foo</literal> library to the
1690    <literal>foo2</literal> library, required changes to the source code need to be
1691    made to match the new API.</para> </footnote>
1692  </para>  </para>
1693  <screen>  <screen>
1694  $ quilt new ncurse.patch  $ dquilt new foo2.patch
1695  $ quilt add Makefile  $ dquilt add Makefile
1696  $ sed -i -e s/-lcurses/-lncurses/g Makefile  $ sed -i -e 's/-lfoo/-lfoo2/g' Makefile
1697  $ quilt refresh  $ dquilt refresh
1698  $ quilt header -e  $ dquilt header -e
1699  ... describe patch  ... describe patch
1700  </screen>  </screen>
1701  </section>  </section>
# Line 1478  that we should edit in order to customiz Line 1708  that we should edit in order to customiz
1708  most important of them are <filename>control</filename>,  most important of them are <filename>control</filename>,
1709  <filename>changelog</filename>, <filename>copyright</filename> and  <filename>changelog</filename>, <filename>copyright</filename> and
1710  <filename>rules</filename>, which are required for all packages.  <filename>rules</filename>, which are required for all packages.
1711    <footnote><para>
1712    In this chapter, files in the <filename>debian</filename> directory are
1713    referred without preceding <filename>debian/</filename> for simplicity whenever
1714    they are obvious.
1715    </para></footnote>
1716  </para>  </para>
1717  <section id="control"><title><filename>control</filename> file</title>  <section id="control"><title><filename>control</filename> file</title>
1718  <para>  <para>
# Line 1530  for administrator-only programs, <litera Line 1765  for administrator-only programs, <litera
1765  documentation, <literal>libs</literal> for libraries, <literal>mail</literal>  documentation, <literal>libs</literal> for libraries, <literal>mail</literal>
1766  for e-mail readers and daemons, <literal>net</literal> for network apps and  for e-mail readers and daemons, <literal>net</literal> for network apps and
1767  daemons, <literal>x11</literal> for X11 programs that don't fit anywhere else,  daemons, <literal>x11</literal> for X11 programs that don't fit anywhere else,
1768  and many more.  See the <ulink url="&policy-subsections;">Debian  and many more.
1769  Policy Manual, 2.4 'Sections'</ulink> and <ulink url="&sections-unstable;">List of sections in 'sid'</ulink>  <footnote> <para>See
1770  for the guidance.  <ulink url="&policy-subsections;">Debian Policy Manual, 2.4 'Sections'</ulink> and
1771    <ulink url="&sections-unstable;">List of sections in <literal>sid</literal></ulink>.</para>
1772    </footnote>
1773  </para>  </para>
1774  <para>  <para>
1775  Let's change it then to x11.  (A <literal>main/</literal> prefix is implied so  Let's change it then to x11.  (A <literal>main/</literal> prefix is implied so
1776  we can omit it.)  we can omit it.)
1777  </para>  </para>
1778  <para>  <para>
1779  Line 3 describes how important it is that the user installs this package.  See  Line 3 describes how important it is that the user installs this package.
1780  the <ulink url="&policy-priorities;">Debian  <footnote> <para>See
1781  Policy Manual, 2.5 'Priorities'</ulink> for the guidance.  <ulink url="&policy-priorities;">Debian Policy Manual, 2.5 'Priorities'</ulink>.
1782    </para>
1783    </footnote>
1784  </para>  </para>
1785  <itemizedlist>  <itemizedlist>
1786  <listitem>  <listitem>
# Line 1577  you.  Avoid using commas, ampersands and Line 1816  you.  Avoid using commas, ampersands and
1816  <para>  <para>
1817  The 5th line includes the list of packages required to build your package as  The 5th line includes the list of packages required to build your package as
1818  the <literal>Build-Depends</literal> field.  You can also have the  the <literal>Build-Depends</literal> field.  You can also have the
1819  <literal>Build-Depends-Indep</literal> field as an additional line, here (see  <literal>Build-Depends-Indep</literal> field as an additional line, here.
1820  the <ulink url="&policy-relationships;#s-sourcebinarydeps">Debian  <footnote><para>See <ulink url="&policy-relationships;#s-sourcebinarydeps">Debian
1821  Policy Manual, 7.7 'Relationships between source and binary packages -  Policy Manual, 7.7 'Relationships between source and binary packages -
1822  Build-Depends, Build-Depends-Indep, Build-Conflicts,  Build-Depends, Build-Depends-Indep, Build-Conflicts,
1823  Build-Conflicts-Indep'</ulink>).  Some packages like <systemitem role="package">gcc</systemitem> and <systemitem role="package">make</systemitem> which are required by the <systemitem role="package">build-essential</systemitem> package are implied.  If you need  Build-Conflicts-Indep'</ulink>.</para></footnote>  Some packages like
1824    <systemitem role="package">gcc</systemitem> and
1825    <systemitem role="package">make</systemitem> which are required by the
1826    <systemitem role="package">build-essential</systemitem> package are implied.  If you need
1827  to have other tools to build your package, you should add them to these fields.  to have other tools to build your package, you should add them to these fields.
1828  Multiple entries are separated with commas; read on for the explanation of  Multiple entries are separated with commas; read on for the explanation of
1829  binary dependencies to find out more about the syntax of these lines.  binary package dependencies to find out more about the syntax of these lines.
1830  </para>  </para>
1831  <itemizedlist>  <itemizedlist>
1832  <listitem>  <listitem>
# Line 1600  satisfy the Debian Policy requirement fo Line 1842  satisfy the Debian Policy requirement fo
1842  For source packages which have some binary packages with <literal>Architecture:  For source packages which have some binary packages with <literal>Architecture:
1843  any</literal>, they are rebuild by the autobuilder.  Since this autobuilder  any</literal>, they are rebuild by the autobuilder.  Since this autobuilder
1844  procedure runs <literal>debian/rules build</literal> in it while installing  procedure runs <literal>debian/rules build</literal> in it while installing
1845  only packages listed in the <literal>Build-Depends</literal> field (see <xref linkend="autobuilder"/> ), the <literal>Build-Depends</literal> field needs to  only packages listed in the <literal>Build-Depends</literal> field (see <xref linkend="autobuilder"/>), the <literal>Build-Depends</literal> field needs to
1846  list practically all the required packages and the  list practically all the required packages and the
1847  <literal>Build-Depends-indep</literal> is rarely used.  <literal>Build-Depends-indep</literal> is rarely used.
1848  </para>  </para>
# Line 1701  these relations; if not, it will be expl Line 1943  these relations; if not, it will be expl
1943  </citerefentry> etc.)  </citerefentry> etc.)
1944  </para>  </para>
1945  <para>  <para>
1946  Here is a simplified description of package relationships.  Here is a simplified description of package relationships.
1947  <footnote><para>See  <footnote><para>See
1948  <ulink url="&policy-relationships;">Debian Policy Manual, 7 'Declaring relationships between packages'</ulink>  <ulink url="&policy-relationships;">Debian Policy Manual, 7 'Declaring relationships between packages'</ulink>.
1949  </para></footnote>:  </para></footnote>
1950  </para>  </para>
1951  <itemizedlist>  <itemizedlist>
1952  <listitem>  <listitem>
# Line 1825  Replaces: quux (&lt;&lt; 5), quux-foo (& Line 2067  Replaces: quux (&lt;&lt; 5), quux-foo (&
2067  <para>  <para>
2068  The last feature you need to know about is  The last feature you need to know about is
2069  <literal>${shlibs:Depends}</literal>, <literal>${perl:Depends}</literal>,  <literal>${shlibs:Depends}</literal>, <literal>${perl:Depends}</literal>,
2070  <literal>${misc:Depends}</literal>, etc.  These entries are substituted by the  <literal>${misc:Depends}</literal>, etc.
 list generated by other <systemitem role="package">debhelper</systemitem>  
 components when the <citerefentry> <refentrytitle>dh_gencontrol</refentrytitle>  
 <manvolnum>1</manvolnum> </citerefentry> command is executed.  
2071  </para>  </para>
2072  <para>  <para>
2073  <citerefentry> <refentrytitle>dh_shlibdeps</refentrytitle>  <citerefentry> <refentrytitle>dh_shlibdeps</refentrytitle>
2074  <manvolnum>1</manvolnum> </citerefentry> will scan it for binaries and  <manvolnum>1</manvolnum> </citerefentry> calculates shared library dependencies
2075  libraries determine their shared library dependencies and detect which packages  for binary packages.  It generates a list of ELF executables and shared
2076  they are in, such as <systemitem role="package">libc6</systemitem> or  libraries it has found for each binary package.  Such list is used for
2077  <systemitem role="package">xlib6g</systemitem>, after your package has been  substituting <literal>${shlibs:Depends}</literal>.
 built and installed into the temporary directory.  This package list is used  
 for substituting <literal>${shlibs:Depends}</literal>.  
2078  </para>  </para>
2079  <para>  <para>
2080  The package list generated by <citerefentry>  <citerefentry> <refentrytitle>dh_perl</refentrytitle> <manvolnum>1</manvolnum>
2081  <refentrytitle>dh_perl</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>  </citerefentry> calculates Perl dependencies.  It generates a list of a
2082  is used for substituting <literal>${perl:Depends}</literal>.  dependency on <literal>perl</literal> or <literal>perlapi</literal> for each binary package.  Such list is used for
2083    substituting <literal>${perl:Depends}</literal>.
2084  </para>  </para>
2085  <para>  <para>
2086  Some <systemitem role="package">debhelper</systemitem> commands may make the  Some <systemitem role="package">debhelper</systemitem> commands may make the
2087  generated package need to depend on some other packages.  This list of required  generated package need to depend on some other packages.  All such commands
2088  packages is used for substituting <literal>${misc:Depends}</literal>.  generate a list of required packages for each binary package.
2089    Such list is used for substituting <literal>${misc:Depends}</literal>.
2090    </para>
2091    <para>
2092    <citerefentry> <refentrytitle>dh_gencontrol</refentrytitle>
2093    <manvolnum>1</manvolnum> </citerefentry> generates
2094    <filename>DEBIAN/control</filename> for each binary package while
2095    substituting <literal>${shlibs:Depends}</literal>,
2096    <literal>${perl:Depends}</literal>, <literal>${misc:Depends}</literal>, etc.
2097  </para>  </para>
2098  <para>  <para>
2099  Having said all that, we can leave the <literal>Depends</literal> field exactly  Having said all that, we can leave the <literal>Depends</literal> field exactly
# Line 1874  English.  Translations of these descript Line 2120  English.  Translations of these descript
2120  <ulink url="&ddtp;">The Debian Description Translation Project - DDTP</ulink>.</para></footnote>  <ulink url="&ddtp;">The Debian Description Translation Project - DDTP</ulink>.</para></footnote>
2121  </para>  </para>
2122  <para>  <para>
2123  Let's insert <literal>Vcs-*</literal> fields documented in <ulink url="&devref-bpp-vcs;">Developer's  Let's insert <literal>Vcs-*</literal> fields to document the Version Control
2124  Reference, 6.2.5.  'Version Control System location'</ulink> between line 6 and  System (VCS) location between line 6 and 7.
2125  7.  Let's assume that the <systemitem role="package">gentoo</systemitem>  <footnote><para>See
2126  package is located in Debian Alioth Git Service at  <ulink url="&devref-bpp-vcs;">Debian Developer's Reference, 6.2.5. "Version Control System location"</ulink>.
2127    </para></footnote>
2128    Let's assume that the <systemitem role="package">gentoo</systemitem>
2129    package has its VCS located in Debian Alioth Git Service at
2130  <literal>git://git.debian.org/git/collab-maint/gentoo.git</literal>.  <literal>git://git.debian.org/git/collab-maint/gentoo.git</literal>.
2131  </para>  </para>
2132  <para>  <para>
# Line 1920  Finally, here is the updated <filename>c Line 2169  Finally, here is the updated <filename>c
2169  <section id="copyright"><title><filename>copyright</filename> file</title>  <section id="copyright"><title><filename>copyright</filename> file</title>
2170  <para>  <para>
2171  This file contains the information about package upstream resources, copyright  This file contains the information about package upstream resources, copyright
2172  and license information.  Its format is not dictated by the Debian Policy  and license information.
2173  Manual, but the content is (<ulink url="&policy-copyright;">Debian  <ulink url="&policy-copyright;">Debian Policy Manual, 12.5 'Copyright information'</ulink>
2174  Policy Manual, 12.5 'Copyright information'</ulink>).  You may also consult  dictates its content and
2175  <ulink url="&dep5;">DEP-5: Machine-parseable  <ulink url="&dep5;">DEP-5: Machine-parseable <filename>debian/copyright</filename></ulink>
2176  debian/copyright</ulink>.  provides guidelines for its format.
2177  </para>  </para>
2178  <para>  <para>
2179  <command>dh_make</command> can give you a template  <command>dh_make</command> can give you a template
# Line 1990  debian-devel-announce: <ulink url="&howt Line 2239  debian-devel-announce: <ulink url="&howt
2239  </section>  </section>
2240  <section id="changelog"><title><filename>changelog</filename> file</title>  <section id="changelog"><title><filename>changelog</filename> file</title>
2241  <para>  <para>
2242  This is a required file, which has a special format described in the <ulink url="&policy-dpkgchangelog;">Debian  This is a required file, which has a special format described in the
2243  Policy Manual, 4.4 'debian/changelog'</ulink>.  This format is used by  <ulink url="&policy-dpkgchangelog;">Debian Policy Manual, 4.4 'debian/changelog'</ulink>.
2244  <command>dpkg</command> and other programs to obtain the version number,  This format is used by <command>dpkg</command> and other programs to obtain the
2245  revision, distribution and urgency of your package.  version number, revision, distribution and urgency of your package.
2246  </para>  </para>
2247  <para>  <para>
2248  For you, it is also important, since it is good to have documented all changes  For you, it is also important, since it is good to have documented all changes
# Line 2055  You will end up with something like this Line 2304  You will end up with something like this
2304  </para>  </para>
2305  <para>  <para>
2306  You can read more about updating the <filename>changelog</filename> file later  You can read more about updating the <filename>changelog</filename> file later
2307  in <xref linkend="update"/> .  in <xref linkend="update"/>.
2308  </para>  </para>
2309  </section>  </section>
2310  <section id="rules"><title><filename>rules</filename> file</title>  <section id="rules"><title><filename>rules</filename> file</title>
# Line 2104  binary package under the <filename>debia Line 2353  binary package under the <filename>debia
2353  <literal>binary</literal> target: to create all binary packages (effectively  <literal>binary</literal> target: to create all binary packages (effectively
2354  combination of <literal>binary-arch</literal> and  combination of <literal>binary-arch</literal> and
2355  <literal>binary-indep</literal> targets).  (required)<footnote><para> This  <literal>binary-indep</literal> targets).  (required)<footnote><para> This
2356  target is used by <literal>dpkg-buildpackage</literal> as in <xref linkend="completebuild"/> .  </para> </footnote>  target is used by <literal>dpkg-buildpackage</literal> as in <xref linkend="completebuild"/>.  </para> </footnote>
2357  </para>  </para>
2358  </listitem>  </listitem>
2359  <listitem>  <listitem>
# Line 2112  target is used by <literal>dpkg-buildpac Line 2361  target is used by <literal>dpkg-buildpac
2361  <literal>binary-arch</literal> target: to create arch-dependent  <literal>binary-arch</literal> target: to create arch-dependent
2362  (<literal>Architecture: any</literal>) binary packages in the parent directory.  (<literal>Architecture: any</literal>) binary packages in the parent directory.
2363  (required)<footnote><para> This target is used by <literal>dpkg-buildpackage  (required)<footnote><para> This target is used by <literal>dpkg-buildpackage
2364  -B</literal> as in <xref linkend="autobuilder"/> .  </para> </footnote>  -B</literal> as in <xref linkend="autobuilder"/>.  </para> </footnote>
2365  </para>  </para>
2366  </listitem>  </listitem>
2367  <listitem>  <listitem>
# Line 2177  It tells the operating system that this Line 2426  It tells the operating system that this
2426  <filename>/usr/bin/make</filename>.  <filename>/usr/bin/make</filename>.
2427  </para>  </para>
2428  <para>  <para>
2429  Line 10 can be uncommented to set <literal>DH_VERBOSE</literal> variable to 1.  Line 11 can be uncommented to set <literal>DH_VERBOSE</literal> variable to 1.
2430  Then, the <command>dh</command> command will output which  Then, the <command>dh</command> command will output which
2431  <command>dh_*</command> commands are executed by the <command>dh</command>  <command>dh_*</command> commands are executed by the <command>dh</command>
2432  command.  You can also add <literal>export DH_OPTIONS=-v</literal> line here.  command.  You can also add <literal>export DH_OPTIONS=-v</literal> line here.
# Line 2199  complicated <filename>rules</filename> f Line 2448  complicated <filename>rules</filename> f
2448  scripts listed for each required explicit targets and frozen them to the state  scripts listed for each required explicit targets and frozen them to the state
2449  when it was initially packaged.  This new <command>dh</command> command is  when it was initially packaged.  This new <command>dh</command> command is
2450  simpler and frees us from this constrain.  You still have full power to  simpler and frees us from this constrain.  You still have full power to
2451  customize this with <literal>override_dh_*</literal> targets.  See <xref linkend="customrules"/> .  It is based only on the <systemitem role="package">debhelper</systemitem> package and does not obfuscate the  customize this with <literal>override_dh_*</literal> targets.  See <xref linkend="customrules"/>.  It is based only on the <systemitem role="package">debhelper</systemitem> package and does not obfuscate the
2452  package building process like the <systemitem role="package">cdbs</systemitem>  package building process like the <systemitem role="package">cdbs</systemitem>
2453  package.  </para> </footnote> The <command>dh</command> command is a wrapper  package.  </para> </footnote> The <command>dh</command> command is a wrapper
2454  script which runs appropriate sequences of <command>dh_*</command> programs  script which runs appropriate sequences of <command>dh_*</command> programs
# Line 2613  This installs <command>bash</command> co Line 2862  This installs <command>bash</command> co
2862  </listitem>  </listitem>
2863  </itemizedlist>  </itemizedlist>
2864  <para>  <para>
 For sources using Autotools, use combination of above as <literal>dh --with  
 autotools-dev --with autoreconf $@</literal> to be most current with the GNU  
 Build System.  
 </para>  
 <para>  
2865  Many <command>dh_*</command> commands invoked by the new <command>dh</command>  Many <command>dh_*</command> commands invoked by the new <command>dh</command>
2866  command can be customized by the corresponding configuration files in the  command can be customized by the corresponding configuration files in the
2867  <filename>debian</filename> directory.  See <xref linkend="dother"/> and the  <filename>debian</filename> directory.  See <xref linkend="dother"/> and the
# Line 2644  corner cases.  Use of simplified equival Line 2888  corner cases.  Use of simplified equival
2888  kill such <systemitem role="package">debhelper</systemitem>'s smart features.  kill such <systemitem role="package">debhelper</systemitem>'s smart features.
2889  </para>  </para>
2890  <para>  <para>
2891  If you want to store the system configuration data for the <systemitem role="package">gentoo</systemitem> package in the  If you want to store the system configuration data in the
2892  <filename>/etc/gentoo</filename> directory instead of the usual  <filename>/etc/gentoo</filename> directory instead of the usual
2893  <filename>/etc</filename> directory, you can override the default  <filename>/etc</filename> directory for the recent
2894    <systemitem role="package">gentoo</systemitem> package using Autotools, you can override the default
2895  <literal>--sysconfig=/etc</literal> argument given by the  <literal>--sysconfig=/etc</literal> argument given by the
2896  <command>dh_auto_configure</command> command to the  <command>dh_auto_configure</command> command to the
2897  <command>./configure</command> command by the following.  <footnote><para> The  <command>./configure</command> command by the following.
 <systemitem role="package">gentoo</systemitem> package uses the <ulink url="&gnu-build-system;">GNU build  
 system</ulink>, also known as the Autotools.  
 </para> </footnote>  
2898  </para>  </para>
2899  <screen>  <screen>
2900  override_dh_auto_configure:  override_dh_auto_configure:
# Line 2732  possible. Line 2974  possible.
2974  <para>  <para>
2975  To control most of what <systemitem role="package">debhelper</systemitem> does  To control most of what <systemitem role="package">debhelper</systemitem> does
2976  while building the package, you put optional configuration files under the  while building the package, you put optional configuration files under the
2977  <filename>debian</filename> directory.  This chapter will make an overview of  <filename>debian</filename> directory.  This chapter will provide an overview of
2978  what each of these does and its format.  Please read <ulink url="&debian-policy;">Debian Policy  what each of these does and its format.  Please read the <ulink url="&debian-policy;">Debian Policy
2979  Manual</ulink> and <ulink url="&developers-reference;">Debian Developer's  Manual</ulink> and <ulink url="&developers-reference;">Debian Developer's
2980  Reference</ulink> for guidelines for the packaging.  Reference</ulink> for guidelines for packaging.
2981  </para>  </para>
2982  <para>  <para>
2983  The <command>dh_make</command> command will create some template configuration  The <command>dh_make</command> command will create some template configuration
# Line 2744  filenames suffixed by <literal>.ex</lite Line 2986  filenames suffixed by <literal>.ex</lite
2986  prefixed by the binary package name such as  prefixed by the binary package name such as
2987  <literal><replaceable>package</replaceable></literal>.  Take a look at all of  <literal><replaceable>package</replaceable></literal>.  Take a look at all of
2988  them.  them.
2989    <footnote><para>
2990    In this chapter, files in the <filename>debian</filename> directory are
2991    referred to without the preceding <filename>debian/</filename> for simplicity whenever
2992    they are obvious.
2993    </para></footnote>
2994  </para>  </para>
2995  <para>  <para>
2996  The <command>dh_make</command> command may not create some template  Some template configuration files for <systemitem role="package">debhelper</systemitem>
2997  configuration files for <systemitem role="package">debhelper</systemitem>.  In  may not be created by the <command>dh_make</command> command.  In
2998  such cases, you need to create them with the editor.  such cases, you need to create them with an editor.
2999  </para>  </para>
3000  <para>  <para>
3001  If you wish or need to activate any of those, please do the following.  If you wish or need to activate any of these, please do the following:
3002  </para>  </para>
3003  <itemizedlist>  <itemizedlist>
3004  <listitem>  <listitem>
3005  <para>  <para>
3006  rename template files by removing the <literal>.ex</literal> or  rename template files by removing the <literal>.ex</literal> or
3007  <literal>.EX</literal> suffix if the template files have one.  <literal>.EX</literal> suffix if they have one;
3008  </para>  </para>
3009  </listitem>  </listitem>
3010  <listitem>  <listitem>
3011  <para>  <para>
3012  rename the name of these configuration files using the actual binary package  rename the configuration files to use the actual binary package
3013  name in place of <literal><replaceable>package</replaceable></literal>.  name in place of <literal><replaceable>package</replaceable></literal>;
3014  </para>  </para>
3015  </listitem>  </listitem>
3016  <listitem>  <listitem>
3017  <para>  <para>
3018  modify template file contents to suit your needs.  modify template file contents to suit your needs;
3019  </para>  </para>
3020  </listitem>  </listitem>
3021  <listitem>  <listitem>
3022  <para>  <para>
3023  remove template files which you do not need.  remove template files which you do not need;
3024  </para>  </para>
3025  </listitem>  </listitem>
3026  <listitem>  <listitem>
3027  <para>  <para>
3028  modify the <filename>control</filename> file (see <xref linkend="control"/> ),  modify the <filename>control</filename> file (see <xref linkend="control"/>),
3029  if necessary.  if necessary;
3030  </para>  </para>
3031  </listitem>  </listitem>
3032  <listitem>  <listitem>
3033  <para>  <para>
3034  modify the <filename>rules</filename> file (see <xref linkend="rules"/> ), if  modify the <filename>rules</filename> file (see <xref linkend="rules"/>), if
3035  necessary.  necessary.
3036  </para>  </para>
3037  </listitem>  </listitem>
3038  </itemizedlist>  </itemizedlist>
3039  <para>  <para>
3040  Those <systemitem role="package">debhelper</systemitem> configuration files  Any <systemitem role="package">debhelper</systemitem> configuration files
3041  without <filename><replaceable>package</replaceable></filename> prefix such as  without a <filename><replaceable>package</replaceable></filename> prefix, such as
3042  <filename>install</filename> apply to the first binary package.  When there are  <filename>install</filename>, apply to the first binary package.  When there are
3043  many binary packages, their configurations can be specified by prefixing their  many binary packages, their configurations can be specified by prefixing their
3044  name to their configuration filenames such as  name to their configuration filenames such as
3045  <filename><replaceable>package-1</replaceable>.install</filename>,  <filename><replaceable>package-1</replaceable>.install</filename>,
3046  <filename><replaceable>package-2</replaceable>.install</filename>, etc.  <filename><replaceable>package-2</replaceable>.install</filename>, etc.
3047  </para>  </para>
3048  <section id="readme"><title><filename>README.Debian</filename> file</title>  <section id="readme"><title><filename>README.Debian</filename></title>
3049  <para>  <para>
3050  Any extra details or discrepancies between the original package and your Debian  Any extra details or discrepancies between the original package and your Debian
3051  version should be documented here.  version should be documented here.
3052  </para>  </para>
3053  <para>  <para>
3054  <command>dh_make</command> created a default one, this is what it looks like:  <command>dh_make</command> created a default one; this is what it looks like:
3055  </para>  </para>
3056  <screen>  <screen>
3057  gentoo for Debian  gentoo for Debian
# Line 2818  If you have nothing to be documented, re Line 3065  If you have nothing to be documented, re
3065  </citerefentry>.  </citerefentry>.
3066  </para>  </para>
3067  </section>  </section>
3068  <section id="compat"><title><filename>compat</filename> file</title>  <section id="compat"><title><filename>compat</filename></title>
3069  <para>  <para>
3070  The <filename>compat</filename> file defines the <systemitem role="package">debhelper</systemitem> compatibility level.  Currently, you  The <filename>compat</filename> file defines the <systemitem role="package">debhelper</systemitem> compatibility level.  Currently, you
3071  should set it to the <systemitem role="package">debhelper</systemitem> V7 by  should set it to the <systemitem role="package">debhelper</systemitem> v7 as
3072  the following.  follows:
3073  </para>  </para>
3074  <screen>  <screen>
3075  $ echo 7 &gt; debian/compat  $ echo 7 &gt; debian/compat
3076  </screen>  </screen>
3077  </section>  </section>
3078  <section id="conffiles"><title><filename>conffiles</filename> file</title>  <section id="conffiles"><title><filename>conffiles</filename></title>
3079  <para>  <para>
3080  One of the most annoying things about software is when you spend a great deal  One of the most annoying things about software is when you spend a great deal
3081  of time and effort customizing a program, only to have an upgrade stomp all  of time and effort customizing a program, only to have an upgrade stomp all
# Line 2837  over your changes.  Debian solves this p Line 3084  over your changes.  Debian solves this p
3084  <manvolnum>1</manvolnum> </citerefentry> and  <manvolnum>1</manvolnum> </citerefentry> and
3085  <ulink url="&policy-conffiles;">Debian Policy Manual 'D.2.5 Conffiles'</ulink>.  <ulink url="&policy-conffiles;">Debian Policy Manual 'D.2.5 Conffiles'</ulink>.
3086  </para></footnote>  </para></footnote>
3087  When you upgrade a package, you'll be prompted whether you want to keep  When you upgrade a package, you'll be asked whether you want to keep
3088  your old configuration files or not.  your old configuration files or not.
3089  </para>  </para>
3090  <para>  <para>
3091  Since <systemitem role="package">debhelper</systemitem> V3, <citerefentry>  Since <systemitem role="package">debhelper</systemitem> v3, <citerefentry>
3092  <refentrytitle>dh_installdeb</refentrytitle> <manvolnum>1</manvolnum>  <refentrytitle>dh_installdeb</refentrytitle> <manvolnum>1</manvolnum>
3093  </citerefentry> will <emphasis>automatically</emphasis> flag any files under  </citerefentry> will <emphasis>automatically</emphasis> flag any files under
3094  the <filename>/etc</filename> directory as conffiles, so if your program only  the <filename>/etc</filename> directory as conffiles, so if your program only
3095  has conffiles there you do not need to specify them in this file.  For most  has conffiles there you do not need to specify them in this file.  For most
3096  package types, the only place there is (and should be conffiles) is under  package types, the only place conffiles should ever be is under
3097  <filename>/etc</filename> and so this file doesn't need to exist.  <filename>/etc</filename>, and so this file doesn't need to exist.
3098  </para>  </para>
3099  <para>  <para>
3100  If your program uses configuration files but also rewrites them on its own,  If your program uses configuration files but also rewrites them on its own,
3101  it's best not to make them as conffiles because <command>dpkg</command> will  it's best not to make them conffiles because <command>dpkg</command> will
3102  then prompt users to verify the changes all the time.  then prompt users to verify the changes all the time.
3103  </para>  </para>
3104  <para>  <para>
3105  If the program you're packaging requires every user to modify the configuration  If the program you're packaging requires every user to modify the configuration
3106  files in the <filename>/etc</filename> directory, there are 2 popular ways to  files in the <filename>/etc</filename> directory, there are two popular ways to
3107  make them not as conffiles to keep <command>dpkg</command> quiet.  arrange for them to not be conffiles, keeping <command>dpkg</command> quiet.
3108  </para>  </para>
3109  <itemizedlist>  <itemizedlist>
3110  <listitem>  <listitem>
3111  <para>  <para>
3112  You make a symlink under the <filename>/etc</filename> directory pointing to a  Create a symlink under the <filename>/etc</filename> directory pointing to a
3113  file under the <filename>/var</filename> directory generated by the  file under the <filename>/var</filename> directory generated by the
3114  <emphasis>maintainer scripts</emphasis>.  maintainer scripts.
3115  </para>  </para>
3116  </listitem>  </listitem>
3117  <listitem>  <listitem>
3118  <para>  <para>
3119  You make a file generated by the <emphasis>maintainer scripts</emphasis> under  Create a file generated by the maintainer scripts under the <filename>/etc</filename> directory.
 the <filename>/etc</filename> directory.  
3120  </para>  </para>
3121  </listitem>  </listitem>
3122  </itemizedlist>  </itemizedlist>
3123  <para>  <para>
3124  For more information on the <emphasis>maintainer scripts</emphasis>, see <xref linkend="maintscripts"/> .  For information on maintainer scripts, see <xref linkend="maintscripts"/>.
3125  </para>  </para>
3126  </section>  </section>
3127  <section id="crond"><title><filename><replaceable>package</replaceable>.cron.*</filename> files</title>  <section id="crond"><title><filename><replaceable>package</replaceable>.cron.*</filename></title>
3128  <para>  <para>
3129  If your package requires regularly scheduled tasks to operate properly, you can  If your package requires regularly scheduled tasks to operate properly, you can
3130  use this file to set it up.  You can either setup regular tasks that happen  use these files to set that up.  You can set up regular tasks that either happen
3131  hourly, daily, weekly or monthly or alternatively happen any other time that  hourly, daily, weekly, or monthly, or alternatively happen at any other time that
3132  you wish.  The filenames are:  you wish.  The filenames are:
3133  </para>  </para>
3134  <itemizedlist>  <itemizedlist>
3135  <listitem>  <listitem>
3136  <para>  <para>
3137  <filename>cron.hourly</filename> - Installed as  <filename><replaceable>package</replaceable>.cron.hourly</filename> - Installed as
3138  <filename>/etc/cron.hourly/<replaceable>package</replaceable></filename>: run  <filename>/etc/cron.hourly/<replaceable>package</replaceable></filename>; run
3139  once an hour every hour.  once an hour.
3140  </para>  </para>
3141  </listitem>  </listitem>
3142  <listitem>  <listitem>
3143  <para>  <para>
3144  <filename>cron.daily</filename> - Installed as  <filename><replaceable>package</replaceable>.cron.daily</filename> - Installed as
3145  <filename>/etc/cron.daily/<replaceable>package</replaceable></filename>: run  <filename>/etc/cron.daily/<replaceable>package</replaceable></filename>; run
3146  once a day, usually early morning.  once a day.
3147  </para>  </para>
3148  </listitem>  </listitem>
3149  <listitem>  <listitem>
3150  <para>  <para>
3151  <filename>cron.weekly</filename> - Installed as  <filename><replaceable>package</replaceable>.cron.weekly</filename> - Installed as
3152  <filename>/etc/cron.weekly/<replaceable>package</replaceable></filename>: run  <filename>/etc/cron.weekly/<replaceable>package</replaceable></filename>; run
3153  once a week, usually early Sunday morning.  once a week.
3154  </para>  </para>
3155  </listitem>  </listitem>
3156  <listitem>  <listitem>
3157  <para>  <para>
3158  <filename>cron.monthly</filename> - Installed as  <filename><replaceable>package</replaceable>.cron.monthly</filename> - Installed as
3159  <filename>/etc/cron.monthly/<replaceable>package</replaceable></filename>: run  <filename>/etc/cron.monthly/<replaceable>package</replaceable></filename>: run
3160  once a month, usually early morning on the first of the month.  once a month.
3161  </para>  </para>
3162  </listitem>  </listitem>
3163  <listitem>  <listitem>
3164  <para>  <para>
3165  <filename>cron.d</filename> - Installed as  <filename><replaceable>package</replaceable>.cron.d</filename> - Installed as
3166  <filename>/etc/cron.d/<replaceable>package</replaceable></filename>: for any  <filename>/etc/cron.d/<replaceable>package</replaceable></filename>: for any
3167  other time  other time.
3168  </para>  </para>
3169  </listitem>  </listitem>
3170  </itemizedlist>  </itemizedlist>
3171  <para>  <para>
3172  For the named files, the format of them is the shell script.  The different one  Most of these files are shell scripts, with the exception of
3173  is <filename><replaceable>package</replaceable>.cron.d</filename> which follows  <filename><replaceable>package</replaceable>.cron.d</filename> which follows
3174  the format of <citerefentry> <refentrytitle>crontab</refentrytitle>  the format of <citerefentry> <refentrytitle>crontab</refentrytitle>
3175  <manvolnum>5</manvolnum> </citerefentry>.  <manvolnum>5</manvolnum> </citerefentry>.
3176  </para>  </para>
3177  <para>  <para>
3178  Note that this doesn't include log rotation; for that, see <citerefentry>  No explicit <filename>cron.*</filename> file is needed to set up log rotation;
3179  <refentrytitle>dh_installlogrotate</refentrytitle> <manvolnum>1</manvolnum>  for that, see
3180  </citerefentry> and <citerefentry> <refentrytitle>logrotate</refentrytitle>  <citerefentry><refentrytitle>dh_installlogrotate</refentrytitle>
3181  <manvolnum>8</manvolnum> </citerefentry>.  <manvolnum>1</manvolnum></citerefentry> and
3182    <citerefentry><refentrytitle>logrotate</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
3183  </para>  </para>
3184  </section>  </section>
3185  <section id="dirs"><title><filename>dirs</filename> file</title>  <section id="dirs"><title><filename>dirs</filename></title>
3186  <para>  <para>
3187  This file specifies the directories which we need but the normal installation  This file specifies any directories which we need but which are not created by the normal installation
3188  procedure (<literal>make install DESTDIR=...</literal> invoked by  procedure (<literal>make install DESTDIR=...</literal> invoked by
3189  <literal>dh_auto_install</literal>) somehow doesn't create.  This generally  <literal>dh_auto_install</literal>).  This generally
3190  means there is a problem with the <filename>Makefile</filename>.  means there is a problem with the <filename>Makefile</filename>.
3191  </para>  </para>
3192  <para>  <para>
3193  Files listed in the <filename>install</filename> file doesn't need the  Files listed in an <filename>install</filename> file don't need their
3194  directories created first.  See <xref linkend="install"/> .  directories created first.  See <xref linkend="install"/>.
3195  </para>  </para>
3196  <para>  <para>
3197  It is best to first try to run the installation first and only use this if you  It is best to try to run the installation first and only use this if you
3198  run into trouble.  There is no preceding slash on the directory names listed in  run into trouble.  There is no preceding slash on the directory names listed in
3199  the <filename>dirs</filename> file.  the <filename>dirs</filename> file.
3200  </para>  </para>
3201  </section>  </section>
3202  <section id="doc-base"><title><filename><replaceable>package</replaceable>.doc-base</filename> file</title>  <section id="doc-base"><title><filename><replaceable>package</replaceable>.doc-base</filename></title>
3203  <para>  <para>
3204  If your package has documentation other than manual pages and info docs, you  If your package has documentation other than manual and info pages, you
3205  should use the <systemitem role="package">doc-base</systemitem> file to  should use the <systemitem role="package">doc-base</systemitem> file to
3206  register it, so the user can find it with e.g.  <citerefentry>  register it, so the user can find it with e.g.  <citerefentry>
3207  <refentrytitle>dhelp</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>,  <refentrytitle>dhelp</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>,
3208  <citerefentry> <refentrytitle>dwww</refentrytitle> <manvolnum>1</manvolnum>  <citerefentry> <refentrytitle>dwww</refentrytitle> <manvolnum>1</manvolnum>
3209  </citerefentry> or <citerefentry> <refentrytitle>doccentral</refentrytitle>  </citerefentry>, or <citerefentry> <refentrytitle>doccentral</refentrytitle>
3210  <manvolnum>1</manvolnum> </citerefentry>.  <manvolnum>1</manvolnum> </citerefentry>.
3211  </para>  </para>
3212  <para>  <para>
# Line 2967  This usually includes HTML, PS and PDF f Line 3214  This usually includes HTML, PS and PDF f
3214  <filename>/usr/share/doc/<replaceable>packagename</replaceable>/</filename>.  <filename>/usr/share/doc/<replaceable>packagename</replaceable>/</filename>.
3215  </para>  </para>
3216  <para>  <para>
3217  This is how <systemitem role="package">gentoo</systemitem>'s doc-base file  This is what <systemitem role="package">gentoo</systemitem>'s doc-base file
3218  <filename>gentoo.doc-base</filename> looks like:  <filename>gentoo.doc-base</filename> looks like:
3219  </para>  </para>
3220  <screen>  <screen>
# Line 2987  For information on the file format, see Line 3234  For information on the file format, see
3234  manual, in <ulink url="&doc-base;">Debian doc-base Manual</ulink>.  manual, in <ulink url="&doc-base;">Debian doc-base Manual</ulink>.
3235  </para>  </para>
3236  <para>  <para>
3237  For more details on installing additional documentation, look in <xref linkend="destdir"/> .  For more details on installing additional documentation, look in <xref linkend="destdir"/>.
3238  </para>  </para>
3239  </section>  </section>
3240  <section id="docs"><title><filename>docs</filename> file</title>  <section id="docs"><title><filename>docs</filename></title>
3241  <para>  <para>
3242  This file specifies the file names of documentation files we can have  This file specifies the file names of documentation files we can have
3243  <citerefentry> <refentrytitle>dh_installdocs</refentrytitle>  <citerefentry> <refentrytitle>dh_installdocs</refentrytitle>
# Line 3003  directory that are called <filename>BUGS Line 3250  directory that are called <filename>BUGS
3250  <filename>README*</filename>, <filename>TODO</filename> etc.  <filename>README*</filename>, <filename>TODO</filename> etc.
3251  </para>  </para>
3252  <para>  <para>
3253  For <systemitem role="package">gentoo</systemitem>, I also included some other  For <systemitem role="package">gentoo</systemitem>, some other files
3254  files:  are also included:
3255  </para>  </para>
3256  <screen>  <screen>
3257  BUGS  BUGS
# Line 3016  README.gtkrc Line 3263  README.gtkrc
3263  TODO  TODO
3264  </screen>  </screen>
3265  </section>  </section>
3266  <section id="emacsen"><title><filename>emacsen-*</filename> file</title>  <section id="emacsen"><title><filename>emacsen-*</filename></title>
3267  <para>  <para>
3268  If your package supplies Emacs files that can be bytecompiled at package  If your package supplies Emacs files that can be bytecompiled at package
3269  installation time, you can use these files to set it up.  installation time, you can use these files to set it up.
# Line 3030  They are installed into the temporary di Line 3277  They are installed into the temporary di
3277  If you don't need these, remove them.  If you don't need these, remove them.
3278  </para>  </para>
3279  </section>  </section>
3280  <section id="examples"><title><filename><replaceable>package</replaceable>.examples</filename> file</title>  <section id="examples"><title><filename><replaceable>package</replaceable>.examples</filename></title>
3281  <para>  <para>
3282  The <citerefentry> <refentrytitle>dh_installexamples</refentrytitle>  The <citerefentry> <refentrytitle>dh_installexamples</refentrytitle>
3283  <manvolnum>1</manvolnum> </citerefentry> command installs files and directories  <manvolnum>1</manvolnum> </citerefentry> command installs files and directories
3284  listed in this file as example files.  listed in this file as example files.
3285  </para>  </para>
3286  </section>  </section>
3287  <section id="initd"><title><filename><replaceable>package</replaceable>.init</filename> and <filename><replaceable>package</replaceable>.default</filename> files</title>  <section id="initd"><title><filename><replaceable>package</replaceable>.init</filename> and <filename><replaceable>package</replaceable>.default</filename></title>
3288  <para>  <para>
3289  If your package is a daemon that needs to be run at the system start-up, you've  If your package is a daemon that needs to be run at system start-up, you've
3290  obviously disregarded my initial recommendation, haven't you?  :-)  obviously disregarded my initial recommendation, haven't you?  :-)
3291  </para>  </para>
3292  <para>  <para>
3293  The <filename><replaceable>package</replaceable>.init</filename> file is  The <filename><replaceable>package</replaceable>.init</filename> file is
3294  installed as the  installed as the
3295  <filename>/etc/init.d/<replaceable>package</replaceable></filename> script.  <filename>/etc/init.d/<replaceable>package</replaceable></filename> script
3296    which starts and stops the daemon.
3297  Its fairly generic skeleton template is provided by the  Its fairly generic skeleton template is provided by the
3298  <command>dh_make</command> command as <filename>init.d.ex</filename>.  You'll  <command>dh_make</command> command as <filename>init.d.ex</filename>.  You'll
3299  likely have to rename and edit it, a lot, while making sure to provide  likely have to rename and edit it, a lot, while making sure to provide
3300  Filesystem Hierarchy Standard (see <ulink url="&fhs;">FHS</ulink>) compliant headers.  It  <ulink url="&lsb;">Linux Standard Base</ulink> (LSB) compliant headers.  It
3301  gets installed into the temporary directory by <citerefentry>  gets installed into the temporary directory by <citerefentry>
3302  <refentrytitle>dh_installinit</refentrytitle> <manvolnum>1</manvolnum>  <refentrytitle>dh_installinit</refentrytitle> <manvolnum>1</manvolnum>
3303  </citerefentry>.  </citerefentry>.
3304  </para>  </para>
3305  <para>  <para>
3306  The <filename><replaceable>package</replaceable>.default</filename> file will  The <filename><replaceable>package</replaceable>.default</filename> file will
3307  be installed into  be installed as
3308  <filename>/etc/default/<replaceable>package</replaceable></filename>.  This  <filename>/etc/default/<replaceable>package</replaceable></filename>.  This
3309  file sets defaults that are sourced by the init script.  Most times this  file sets defaults that are sourced by the init script.  This
3310  default file is used to disable running a daemon, set some default flags or  <filename><replaceable>package</replaceable>.default</filename> file
3311  timeouts.  If your init script has certain <emphasis>settable</emphasis>  is most often used to disable running a daemon, or to set some default flags or
3312  features you want to install these into the default file, not the init script.  timeouts.  If your init script has certain configurable
3313    features, you can set them in the <filename><replaceable>package</replaceable>.default</filename> file,
3314    instead of in the init script itself.
3315  </para>  </para>
3316  <para>  <para>
3317  If your upstream program has an init file you can either use it or not.  If you  If your upstream program provides a file for the init script, you can either use it or not.  If you
3318  don't use their init.d script then create a new one in  don't use their init script then create a new one in
3319  <filename>debian/<replaceable>package</replaceable>.init</filename>.  However  <filename><replaceable>package</replaceable>.init</filename>.  However
3320  if the upstream init script looks fine and installs in the right place you  if the upstream init script looks fine and installs in the right place you
3321  still need to setup the <filename>rc*</filename> symlinks.  To do this you will  still need to set up the <filename>rc*</filename> symlinks.  To do this you will
3322  need to override <command>dh_installinit</command> in the  need to override <command>dh_installinit</command> in the
3323  <filename>rules</filename> file with the following lines:  <filename>rules</filename> file with the following lines:
3324  </para>  </para>
# Line 3080  override_dh_installinit: Line 3330  override_dh_installinit:
3330  If you don't need this, remove the files.  If you don't need this, remove the files.
3331  </para>  </para>
3332  </section>  </section>
3333  <section id="install"><title><filename>install</filename> file</title>  <section id="install"><title><filename>install</filename></title>
3334  <para>  <para>
3335  If there are files that need to be installed into your package but your  If there are files that need to be installed into your package but your
3336  standard <literal>make install</literal> won't do it, you put the filenames and  standard <literal>make install</literal> won't do it, put the filenames and
3337  destinations into this <filename>install</filename> file.  They are installed  destinations into this <filename>install</filename> file.  They are installed
3338  by <citerefentry> <refentrytitle>dh_install</refentrytitle>  by <citerefentry> <refentrytitle>dh_install</refentrytitle>
3339  <manvolnum>1</manvolnum> </citerefentry>.<footnote><para> This replaces the  <manvolnum>1</manvolnum> </citerefentry>.<footnote><para> This replaces the
# Line 3096  the <filename>docs</filename> file and n Line 3346  the <filename>docs</filename> file and n
3346  <para>  <para>
3347  This <filename>install</filename> file has one line per file installed, with  This <filename>install</filename> file has one line per file installed, with
3348  the name of the file (relative to the top build directory) then a space then  the name of the file (relative to the top build directory) then a space then
3349  the installation directory (relative to the install directory).  One example of  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
3350  where this is used is where a binary is forgotten to be installed, the  <filename>install</filename> file might look like:
 <filename>install</filename> file would look like:  
3351  </para>  </para>
3352  <screen>  <screen>
3353  src/foo/mybin usr/bin  src/<replaceable>bar</replaceable> usr/bin
3354  </screen>  </screen>
3355  <para>  <para>
3356  This will mean when this package is installed, there will be a binary file  This means when this package is installed, there will be a binary executable
3357  <filename>/usr/bin/mybin</filename>.  <filename>/usr/bin/<replaceable>bar</replaceable></filename>.
3358  </para>  </para>
3359  <para>  <para>
3360  Alternatively, this <filename>install</filename> can have the name of the file  Alternatively, this <filename>install</filename> can have the name of the file
3361  only without the installation directory when the relative directory path does  only without the installation directory when the relative directory path does
3362  not change.  This format is usually used for a large package that splits build  not change.  This format is usually used for a large package that splits the
3363  result into multiple binary packages using  output of its build into multiple binary packages using
3364  <filename><replaceable>package-1</replaceable>.install</filename>,  <filename><replaceable>package-1</replaceable>.install</filename>,
3365  <filename><replaceable>package-2</replaceable>.install</filename>, etc.  <filename><replaceable>package-2</replaceable>.install</filename>, etc.
3366  </para>  </para>
3367  <para>  <para>
3368  The <command>dh_install</command> command will fall back to look in  The <command>dh_install</command> command will fall back to looking in
3369  <filename>debian/tmp</filename> for files, if it doesn't find them in the  <filename>debian/tmp</filename> for files, if it doesn't find them in the
3370  current directory (or wherever you've told it to look using  current directory (or wherever you've told it to look using
3371  <literal>--sourcedir</literal>).  <literal>--sourcedir</literal>).
3372  </para>  </para>
3373  </section>  </section>
3374  <section id="info"><title><filename><replaceable>package</replaceable>.info</filename> file</title>  <section id="info"><title><filename><replaceable>package</replaceable>.info</filename></title>
3375  <para>  <para>
3376  If your package has info pages, you should install them using <citerefentry>  If your package has info pages, you should install them using <citerefentry>
3377  <refentrytitle>dh_installinfo</refentrytitle> <manvolnum>1</manvolnum>  <refentrytitle>dh_installinfo</refentrytitle> <manvolnum>1</manvolnum>
3378  </citerefentry> by listing them in the  </citerefentry> by listing them in a
3379  <filename><replaceable>package</replaceable>.info</filename> files.  <filename><replaceable>package</replaceable>.info</filename> file.
3380  </para>  </para>
3381  </section>  </section>
3382  <section id="lintian"><title><filename>{<replaceable>package</replaceable>.|source/}lintian-overrides</filename> files</title>  <section id="lintian"><title><filename>{<replaceable>package</replaceable>.,source/}lintian-overrides</filename></title>
3383  <para>  <para>
3384  If <systemitem role="package">lintian</systemitem> reports an erroneous  If <systemitem role="package">lintian</systemitem> reports an erroneous
3385  diagnostics for a case when the policy allows exceptions to some rule, you can  diagnostic for a case where Debian policy allows exceptions to some rule, you can
3386  use <filename><replaceable>package</replaceable>.lintian-overrides</filename>  use <filename><replaceable>package</replaceable>.lintian-overrides</filename>
3387  or <filename>source/lintian-overrides</filename> to quiet it.  Please read  or <filename>source/lintian-overrides</filename> to quieten it.  Please read
3388  <ulink url="&lintian-doc;">Lintian User's Manual</ulink> and refrain  <ulink url="&lintian-doc;">Lintian User's Manual</ulink> and refrain
3389  from abusing this.  from abusing this.
3390  </para>  </para>
3391  <para>  <para>
3392  <filename><replaceable>package</replaceable>.lintian-overrides</filename> is  <filename><replaceable>package</replaceable>.lintian-overrides</filename> is
3393  for the binary package named as <systemitem role="package"><replaceable>package</replaceable></systemitem> and is installed  for the binary package named <systemitem role="package"><replaceable>package</replaceable></systemitem> and is installed
3394  into  into
3395  <filename>usr/share/lintian/overrides/<replaceable>package</replaceable></filename>  <filename>usr/share/lintian/overrides/<replaceable>package</replaceable></filename>
3396  by the <command>dh_lintian</command> command.  by the <command>dh_lintian</command> command.
# Line 3151  by the <command>dh_lintian</command> com Line 3400  by the <command>dh_lintian</command> com
3400  is not installed.  is not installed.
3401  </para>  </para>
3402  </section>  </section>
3403  <section id="manpage"><title><filename>manpage.*</filename> files</title>  <section id="manpage"><title><filename>manpage.*</filename></title>
3404  <para>  <para>
3405  Your program(s) should have a manual page.  If they don't, you should create  Your program(s) should have a manual page.  If they don't, you should create
3406  them.  The <command>dh_make</command> command creates few template files for a  them.  The <command>dh_make</command> command creates some template files for
3407  manual page.  These need to be copied and edited for each command without its  manual pages.  These need to be copied and edited for each command missing its
3408  manual page.  Please make sure to remove unused templates.  manual page.  Please make sure to remove unused templates.
3409  </para>  </para>
3410  <section id="manpage1"><title><filename>manpage.1.ex</filename> file</title>  <section id="manpage1"><title><filename>manpage.1.ex</filename></title>
3411  <para>  <para>
3412  Manual pages are normally written in <citerefentry>  Manual pages are normally written in <citerefentry>
3413  <refentrytitle>nroff</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.  <refentrytitle>nroff</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.
# Line 3168  The <filename>manpage.1.ex</filename> te Line 3417  The <filename>manpage.1.ex</filename> te
3417  manual page for a brief description of how to edit such a file.  manual page for a brief description of how to edit such a file.
3418  </para>  </para>
3419  <para>  <para>
3420  The final manual page file name should include the name of the program it is  The final manual page file name should give the name of the program it is
3421  documenting, so we will rename it from <literal>manpage</literal> to  documenting, so we will rename it from <literal>manpage</literal> to
3422  <literal>gentoo</literal>.  The file name also includes <literal>.1</literal>  <literal>gentoo</literal>.  The file name also includes <literal>.1</literal>
3423  as the first suffix, which means it's a manual page for a user command.  Be  as the first suffix, which means it's a manual page for a user command.  Be
3424  sure to verify that this section is indeed the correct one.  Here's a short  sure to verify that this section is indeed the correct one.  Here's a short
3425  list of manual page sections:  list of manual page sections:
3426  </para>  </para>
3427  <table id="manpage-sections" pgwide="0" frame="topbot" rowsep="1" colsep="1">  <informaltable id="manpage-sections" pgwide="0" frame="topbot" rowsep="1" colsep="1">
 <title>manual page sections</title>  
3428  <tgroup cols="3">  <tgroup cols="3">
3429    <colspec colwidth="8*" align="left"/> <colspec colwidth="24*" align="left"/> <colspec colwidth="40*" align="left"/>    <colspec colwidth="8*" align="left"/> <colspec colwidth="24*" align="left"/> <colspec colwidth="40*" align="left"/>
3430    <thead>    <thead>
# Line 3186  list of manual page sections: Line 3434  list of manual page sections:
3434      <row> <entry>1</entry> <entry>User command</entry> <entry>Executable commands or scripts</entry> </row>      <row> <entry>1</entry> <entry>User command</entry> <entry>Executable commands or scripts</entry> </row>
3435      <row> <entry>2</entry> <entry>System calls</entry> <entry>Functions provided by the kernel</entry> </row>      <row> <entry>2</entry> <entry>System calls</entry> <entry>Functions provided by the kernel</entry> </row>
3436      <row> <entry>3</entry> <entry>Library calls</entry> <entry>Functions within system libraries</entry> </row>      <row> <entry>3</entry> <entry>Library calls</entry> <entry>Functions within system libraries</entry> </row>
3437      <row> <entry>4</entry> <entry>Special files</entry> <entry>Usually found in /dev</entry> </row>      <row> <entry>4</entry> <entry>Special files</entry> <entry>Usually found in <filename>/dev</filename></entry> </row>
3438      <row> <entry>5</entry> <entry>File formats</entry> <entry>E.g. <filename>/etc/passwd</filename>'s format</entry> </row>      <row> <entry>5</entry> <entry>File formats</entry> <entry>E.g. <filename>/etc/passwd</filename>'s format</entry> </row>
3439      <row> <entry>6</entry> <entry>Games</entry> <entry>Games or other frivolous programs</entry> </row>      <row> <entry>6</entry> <entry>Games</entry> <entry>Games or other frivolous programs</entry> </row>
3440      <row> <entry>7</entry> <entry>Macro packages</entry> <entry>Such as man macros</entry> </row>      <row> <entry>7</entry> <entry>Macro packages</entry> <entry>Such as <command>man</command> macros</entry> </row>
3441      <row> <entry>8</entry> <entry>System administration</entry> <entry>Programs typically only run by root</entry> </row>      <row> <entry>8</entry> <entry>System administration</entry> <entry>Programs typically only run by root</entry> </row>
3442      <row> <entry>9</entry> <entry>Kernel routines</entry> <entry>Non-standard calls and internals</entry> </row>      <row> <entry>9</entry> <entry>Kernel routines</entry> <entry>Non-standard calls and internals</entry> </row>
3443    </tbody>    </tbody>
3444  </tgroup>  </tgroup>
3445  </table>  </informaltable>
3446  <para>  <para>
3447  So <systemitem role="package">gentoo</systemitem>'s man page should be called  So <systemitem role="package">gentoo</systemitem>'s man page should be called
3448  <filename>gentoo.1</filename>.  If there was no <filename>gentoo.1</filename>  <filename>gentoo.1</filename>.  If there was no <filename>gentoo.1</filename>
3449  man page in the original source, you should create it by renaming the  man page in the original source, you should create it by renaming the
3450  <filename>manpage.1.ex</filename> template to <filename>gentoo.1</filename> and  <filename>manpage.1.ex</filename> template to <filename>gentoo.1</filename> and
3451  edit it by using information from the example and from upstream docs.  editing it using information from the example and from the upstream docs.
3452  </para>  </para>
3453  <para>  <para>
3454  You can use the <command>help2man</command> command to generate a man page out  You can use the <command>help2man</command> command to generate a man page out
3455  of <literal>--help</literal> and <literal>--version</literal> output of each  of the <literal>--help</literal> and <literal>--version</literal> output of each
3456  program, too.  <footnote><para> If the command is missing  program, too.  <footnote><para> Note that <command>help2man</command>'s
3457  <command>info</command> page but have documentation files in the  placeholder man page will claim that more detailed documentation is
3458  <filename>/usr/share/<replaceable>package</replaceable></filename> directory,  available in the info system. If the command is missing an
3459  you should manually edit generated the man page created by the  <command>info</command> page, you
3460    should manually edit the man page created by the
3461  <command>help2man</command> command.  </para> </footnote>  <command>help2man</command> command.  </para> </footnote>
3462  </para>  </para>
3463  </section>  </section>
3464  <section id="manpagesgml"><title><filename>manpage.sgml.ex</filename> file</title>  <section id="manpagesgml"><title><filename>manpage.sgml.ex</filename></title>
3465  <para>  <para>
3466  If on the other hand you prefer writing SGML instead of  If on the other hand you prefer writing SGML instead of
3467  <command>nroff</command>, you can use the <filename>manpage.sgml.ex</filename>  <command>nroff</command>, you can use the <filename>manpage.sgml.ex</filename>
# Line 3237  line in the <filename>control</filename> Line 3486  line in the <filename>control</filename>
3486  </listitem>  </listitem>
3487  <listitem>  <listitem>
3488  <para>  <para>
3489  add a <literal>override_dh_auto_build</literal> target to your  add an <literal>override_dh_auto_build</literal> target to your
3490  <filename>rules</filename> file:  <filename>rules</filename> file:
3491  </para>  </para>
3492  <screen>  <screen>
# Line 3248  override_dh_auto_build: Line 3497  override_dh_auto_build:
3497  </listitem>  </listitem>
3498  </itemizedlist>  </itemizedlist>
3499  </section>  </section>
3500  <section id="manpagexml"><title><filename>manpage.xml.ex</filename> file</title>  <section id="manpagexml"><title><filename>manpage.xml.ex</filename></title>
3501  <para>  <para>
3502  If you prefer XML over SGML, you can use the <literal>manpage.xml.ex</literal>  If you prefer XML over SGML, you can use the <literal>manpage.xml.ex</literal>
3503  template.  If you do this, you have to:  template.  If you do this, you have to:
# Line 3268  XSLT processor like <systemitem role="pa Line 3517  XSLT processor like <systemitem role="pa
3517  </listitem>  </listitem>
3518  <listitem>  <listitem>
3519  <para>  <para>
3520  add the <literal>docbook-xsl</literal>, <literal>docbook-xml</literal> and  add the <literal>docbook-xsl</literal>, <literal>docbook-xml</literal>, and
3521  <literal>xsltproc</literal> packages to the <literal>Build-Depends</literal>  <literal>xsltproc</literal> packages to the <literal>Build-Depends</literal>
3522  line in the <literal>control</literal> file  line in the <literal>control</literal> file
3523  </para>  </para>
3524  </listitem>  </listitem>
3525  <listitem>  <listitem>
3526  <para>  <para>
3527  add a <literal>override_dh_auto_build</literal> target to your  add an <literal>override_dh_auto_build</literal> target to your
3528  <filename>rules</filename> file:  <filename>rules</filename> file:
3529  </para>  </para>
3530  <screen>  <screen>
# Line 3297  override_dh_auto_build: Line 3546  override_dh_auto_build:
3546  <para>  <para>
3547  If your package has manual pages, you should install them using <citerefentry>  If your package has manual pages, you should install them using <citerefentry>
3548  <refentrytitle>dh_installman</refentrytitle> <manvolnum>1</manvolnum>  <refentrytitle>dh_installman</refentrytitle> <manvolnum>1</manvolnum>
3549  </citerefentry> by listing them in the  </citerefentry> by listing them in a
3550  <filename><replaceable>package</replaceable>.manpages</filename> files.  <filename><replaceable>package</replaceable>.manpages</filename> file.
3551  </para>  </para>
3552  <para>  <para>
3553  To install <filename>docs/gentoo.1</filename> for the <systemitem role="package">gentoo</systemitem> package as its manpage, you create a  To install <filename>docs/gentoo.1</filename> as a manpage for the <systemitem role="package">gentoo</systemitem> package, create a
3554  <filename>gentoo.manpages</filename> file as:  <filename>gentoo.manpages</filename> file as follows.
3555  </para>  </para>
3556  <screen>  <screen>
3557  docs/gentoo.1  docs/gentoo.1
3558  </screen>  </screen>
3559  </section>  </section>
3560  <section id="menu"><title><filename>menu</filename> file</title>  <section id="menu"><title><filename>menu</filename></title>
3561  <para>  <para>
3562  X Window System users usually have a window manager with a menu that can be  X Window System users usually have a window manager with a menu that can be
3563  customized to launch programs.  If they have installed the Debian <systemitem role="package">menu</systemitem> package, a set of menus for every program on  customized to launch programs.  If they have installed the Debian <systemitem role="package">menu</systemitem> package, a set of menus for every program on
# Line 3316  the system will be created for them. Line 3565  the system will be created for them.
3565  </para>  </para>
3566  <para>  <para>
3567  Here's the default <filename>menu.ex</filename> file that  Here's the default <filename>menu.ex</filename> file that
3568  <command>dh_make</command> created:  <command>dh_make</command> created.
3569  </para>  </para>
3570  <screen>  <screen>
3571  ?package(gentoo):needs=X11|text|vc|wm \  ?package(gentoo):needs=X11|text|vc|wm \
# Line 3329  specifies what kind of interface the pro Line 3578  specifies what kind of interface the pro
3578  listed alternatives, e.g.  <literal>text</literal> or <literal>X11</literal>.  listed alternatives, e.g.  <literal>text</literal> or <literal>X11</literal>.
3579  </para>  </para>
3580  <para>  <para>
3581  The next is <literal>section</literal>, where the menu and submenu the entry  The next is the <literal>section</literal> that the menu and submenu entry
3582  should appear in.  The current list of sections <footnote><para> There were a  should appear in.
3583  major reorganization of menu structure for <literal>squeeze</literal>.  </para>  <footnote><para> The current list of sections is in
3584  </footnote> is at <ulink url="&menu-structure;">The Debian Menu sub-policy 2.1 'Preferred menu structure'</ulink>.  <ulink url="&menu-structure;">The Debian Menu sub-policy 2.1 'Preferred menu structure'</ulink>.
3585    There was a major reorganization of menu structure for <literal>squeeze</literal>.
3586    </para> </footnote>
3587  </para>  </para>
3588  <para>  <para>
3589  The <literal>title</literal> field is the name of the program.  You can start  The <literal>title</literal> field is the name of the program.  You can start
# Line 3358  You can also add other fields like <lite Line 3609  You can also add other fields like <lite
3609  </citerefentry>, <citerefentry> <refentrytitle>menufile</refentrytitle>  </citerefentry>, <citerefentry> <refentrytitle>menufile</refentrytitle>
3610  <manvolnum>5</manvolnum> </citerefentry>, <citerefentry>  <manvolnum>5</manvolnum> </citerefentry>, <citerefentry>
3611  <refentrytitle>update-menus</refentrytitle> <manvolnum>1</manvolnum>  <refentrytitle>update-menus</refentrytitle> <manvolnum>1</manvolnum>
3612  </citerefentry> and  </citerefentry>, and
3613  <ulink url="&menu-policy;">The Debian Menu sub-policy</ulink> for more  <ulink url="&menu-policy;">The Debian Menu sub-policy</ulink> for more
3614  information.  information.
3615  </para>  </para>
3616  </section>  </section>
3617  <section id="news"><title><filename>NEWS</filename> file</title>  <section id="news"><title><filename>NEWS</filename></title>
3618  <para>  <para>
3619  The <citerefentry> <refentrytitle>dh_installchangelogs</refentrytitle>  The <citerefentry> <refentrytitle>dh_installchangelogs</refentrytitle>
3620  <manvolnum>1</manvolnum> </citerefentry> command installs this.  <manvolnum>1</manvolnum> </citerefentry> command installs this.
3621  </para>  </para>
3622  </section>  </section>
3623  <section id="maintscripts"><title><filename>{post|pre}{inst|rm}</filename> files</title>  <section id="maintscripts"><title><filename>{pre,post}{inst,rm}</filename></title>
3624  <para>  <para>
3625  These <filename>postinst</filename>, <filename>preinst</filename>,  These <filename>postinst</filename>, <filename>preinst</filename>,
3626  <filename>postrm</filename>, and <filename>prerm</filename> files  <filename>postrm</filename>, and <filename>prerm</filename> files
3627  <footnote><para> Although I used Bash short hand expression to indicate these  <footnote><para> Despite this use of the <command>bash</command>
3628  files as <filename>{post|pre}{inst|rm}</filename> here, I recommend you to use  shorthand expression <filename>{pre,post}{inst,rm}</filename> to indicate these
3629  pure POSIX (non-Bash) shell for these <emphasis>maintainer scripts</emphasis>  filenames, you should use pure POSIX syntax for these maintainer scripts for
3630  as much as possible for the better compatibility.  </para> </footnote> are  compatibility with <command>dash</command> as the system shell.  </para> </footnote> are
3631  called <emphasis>maintainer scripts</emphasis>.  They are scripts which are put  called <emphasis>maintainer scripts</emphasis>.  They are scripts which are put
3632  in the control area of the package and run by <command>dpkg</command> when your  in the control area of the package and run by <command>dpkg</command> when your
3633  package is installed, upgraded or removed.  package is installed, upgraded, or removed.
3634  </para>  </para>
3635  <para>  <para>
3636  As a novice maintainer, you should avoid any manual editing of  As a novice maintainer, you should avoid any manual editing of
3637  <emphasis>maintainer scripts</emphasis> because they are problematic.  For more  maintainer scripts because they are problematic.  For more
3638  information look in the <ulink url="&policy-mantainerscripts;">Debian  information refer to the <ulink url="&policy-mantainerscripts;">Debian
3639  Policy Manual, 6 'Package maintainer scripts and installation  Policy Manual, 6 'Package maintainer scripts and installation
3640  procedure'</ulink>, and take a look at these example files provided by  procedure'</ulink>, and take a look at the example files provided by
3641  <command>dh_make</command>.  <command>dh_make</command>.
3642  </para>  </para>
3643  <para>  <para>
3644  If you did not listen to me and made your custom <emphasis>maintainer  If you did not listen to me and have created custom maintainer
3645  scripts</emphasis> for a package, you should make sure to test them not only  scripts for a package, you should make sure to test them not only
3646  for <emphasis role="strong">install</emphasis> and <emphasis role="strong">upgrade</emphasis> but also for <emphasis role="strong">remove</emphasis> and <emphasis role="strong">purge</emphasis>.  for <emphasis role="strong">install</emphasis> and
3647    <emphasis role="strong">upgrade</emphasis> but also for
3648    <emphasis role="strong">remove</emphasis> and
3649    <emphasis role="strong">purge</emphasis>.
3650  </para>  </para>
3651  <para>  <para>
3652  Upgrades to the new version should be silent and non-intrusive (existing users  Upgrades to the new version should be silent and non-intrusive (existing users
3653  should not notice the upgrade except by discovering that old bugs have been  should not notice the upgrade except by discovering that old bugs have been
3654  fixed and there perhaps are new features).  fixed and perhaps that there are new features).
3655  </para>  </para>
3656  <para>  <para>
3657  When the upgrade is necessarily intrusive (eg., config files scattered through  When the upgrade is necessarily intrusive (eg., config files scattered through
3658  various home directories with totally different structure), you may consider to  various home directories with totally different structure), you may
3659  set package to the safe default (e.g., disabled service) and provide proper  consider as the last resort switching the package to a safe fallback state
3660  documentations required by the policy (<filename>README.Debian</filename> and  (e.g., disabling a service) and providing the proper documentation
3661  <filename>NEWS.Debian</filename>) as the last resort.  Don't bother user with  required by policy (<filename>README.Debian</filename> and
3662  the <command>debconf</command> note invoked from these <emphasis>maintainer  <filename>NEWS.Debian</filename>).  Don't bother the user with
3663  scripts</emphasis> for upgrades.  <command>debconf</command> notes invoked from these maintainer scripts
3664    for upgrades.
3665  </para>  </para>
3666  <para>  <para>
3667  The <systemitem role="package">ucf</systemitem> package provides  The <systemitem role="package">ucf</systemitem> package provides a
3668  <emphasis>conffile-like</emphasis> handling infrastructure to preserve user  <emphasis>conffile-like</emphasis> handling infrastructure to preserve user
3669  changes for files that may not be labeled <emphasis>conffiles</emphasis> such  changes for files that may not be labeled as <emphasis>conffiles</emphasis> such
3670  as ones managed by the <emphasis>maintainer scripts</emphasis>.  This should  as those managed by the maintainer scripts.  This should
3671  minimize issues associated with them.  minimize issues associated with them.
3672  </para>  </para>
3673  <para>  <para>
3674  These <emphasis>maintainer scripts</emphasis> are the Debian enhancements that  These maintainer scripts are among the Debian enhancements that
3675  explain <emphasis role="strong">why people choose Debian</emphasis>.  You must  explain <emphasis role="strong">why people choose Debian</emphasis>.  You must
3676  be very careful not to annoy them with these.  be very careful not to turn them into a source of annoyance.
3677  </para>  </para>
3678  </section>  </section>
3679  <section id="todo"><title><filename>TODO</filename> file</title>  <section id="todo"><title><filename>TODO</filename></title>
3680  <para>  <para>
3681  The <citerefentry> <refentrytitle>dh_installdocs</refentrytitle>  The <citerefentry> <refentrytitle>dh_installdocs</refentrytitle>
3682  <manvolnum>1</manvolnum> </citerefentry> command installs this.  <manvolnum>1</manvolnum> </citerefentry> command installs this.
3683  </para>  </para>
3684  </section>  </section>
3685  <section id="watch"><title><filename>watch</filename> file</title>  <section id="watch"><title><filename>watch</filename></title>
3686  <para>  <para>
3687  The <filename>watch</filename> file format is documented in the <citerefentry>  The <filename>watch</filename> file format is documented in the <citerefentry>
3688  <refentrytitle>uscan</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>  <refentrytitle>uscan</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>
3689  manpage.  The <filename>watch</filename> file configures the  manpage.  The <filename>watch</filename> file configures the
3690  <command>uscan</command> program (in the <systemitem role="package">devscripts</systemitem> package) to watch the site where you  <command>uscan</command> program (in the <systemitem role="package">devscripts</systemitem> package) to watch the site where you
3691  originally got the source from.  This is also used by <ulink url="&dehs;">Debian External Health Status (DEHS)</ulink>.  originally got the source from.  This is also used by the
3692    <ulink url="&dehs;">Debian External Health Status (DEHS)</ulink> service.
3693  </para>  </para>
3694  <para>  <para>
3695  Here's what I put in it:  Here are its contents:
3696  </para>  </para>
3697  <screen>  <screen>
3698  # watch control file for uscan  # watch control file for uscan
# Line 3444  version=3 Line 3700  version=3
3700  &sf-net;/gentoo/gentoo-(.+)\.tar\.gz debian uupdate  &sf-net;/gentoo/gentoo-(.+)\.tar\.gz debian uupdate
3701  </screen>  </screen>
3702  <para>  <para>
3703  Normally with this <filename>watch</filename> file, the URL at  Normally with a <filename>watch</filename> file, the URL at
3704  <literal>&sf-net;/gentoo</literal> is downloaded and searched for links of  <literal>&sf-net;/gentoo</literal> is downloaded and searched for links of
3705  the form <literal>&lt;a href=...&gt;</literal>.  The base name (just the part  the form <literal>&lt;a href=...&gt;</literal>.  The basename (just the part
3706  after the final <literal>/</literal>) of these linked URLs are matched against  after the final <literal>/</literal>) of each linked URL is compared against
3707  Perl regexp (see <citerefentry> <refentrytitle>perlre</refentrytitle>  the Perl regular expression pattern (see <citerefentry> <refentrytitle>perlre</refentrytitle>
3708  <manvolnum>1</manvolnum> </citerefentry>) pattern  <manvolnum>1</manvolnum> </citerefentry>)
3709  <literal>gentoo-(.+)\.tar\.gz</literal>.  Out of matched files, the file with  <literal>gentoo-(.+)\.tar\.gz</literal>.  Out of the files that match, the one with
3710  the greatest version number is downloaded and the <command>uupdate</command>  the greatest version number is downloaded and the <command>uupdate</command>
3711  program is run to create the updated source tree from them.  program is run to create an updated source tree.
3712  </para>  </para>
3713  <para>  <para>
3714  Although this is true for other sites, the SourceForge download service at  Although this is true for other sites, the SourceForge download service at
3715  <ulink url="&sf-net;">&sf-net;</ulink> is an exception.  When the  <ulink url="&sf-net;"/> is an exception.  When the
3716  <filename>watch</filename> file has an URL matching with the Perl regexp  <filename>watch</filename> file has an URL matching the Perl regexp
3717  <literal>^http://sf\.net/</literal>, the <command>uscan</command> program  <literal>^http://sf\.net/</literal>, the <command>uscan</command> program
3718  substitutes it with <literal>&qa-do;watch/sf.php/</literal> and  replaces it with <literal>&qa-do;watch/sf.php/</literal> and
3719  then applies this rule.  The URL redirector service at this <ulink url="&qa-do;"/> is designed to offer  then applies this rule.  The URL redirector service at <ulink url="&qa-do;"/> is designed to offer
3720  a stable redirect service to the desired file for the  a stable redirect service to the desired file for any
3721  <filename>watch</filename> file having  <filename>watch</filename> pattern of the form
3722  <literal>&sf-net;/<replaceable>project</replaceable>/<replaceable>tar-name</replaceable>-(.+)\.tar\.gz</literal>.  <literal>&sf-net;/<replaceable>project</replaceable>/<replaceable>tar-name</replaceable>-(.+)\.tar\.gz</literal>.
3723  This solves issues related to the periodically changing URL there.  This solves issues related to periodically changing SourceForge URLs.
3724  </para>  </para>
3725  </section>  </section>
3726  <section id="sourcef"><title><filename>source/format</filename> file</title>  <section id="sourcef"><title><filename>source/format</filename></title>
3727  <para>  <para>
3728  In the <filename>debian/source/format</filename> file, there should be a single  In the <filename>debian/source/format</filename> file, there should be a single
3729  line indicating the desired format for the source package (check <citerefentry>  line indicating the desired format for the source package (check <citerefentry>
# Line 3491  should say either: Line 3747  should say either:
3747  The newer <literal>3.0 (quilt)</literal> source format records modifications in  The newer <literal>3.0 (quilt)</literal> source format records modifications in
3748  a <command>quilt</command> patch series within  a <command>quilt</command> patch series within
3749  <filename>debian/patches</filename>.  Those changes are then automatically  <filename>debian/patches</filename>.  Those changes are then automatically
3750  applied during extraction of the source package.  <footnote><para> See <ulink url="&debsrc3;">DebSrc3.0</ulink> for the  applied during extraction of the source package.  <footnote><para> See
3751  summary information concerning the switch to the new <literal>3.0  <ulink url="&debsrc3;">DebSrc3.0</ulink> for a summary on the switch to the new <literal>3.0
3752  (quilt)</literal> and <literal>3.0 (native)</literal> source formats.  </para>  (quilt)</literal> and <literal>3.0 (native)</literal> source formats.  </para>
3753  </footnote> The Debian modifications are simply stored in a  </footnote> The Debian modifications are simply stored in a
3754  <filename>debian.tar.gz</filename> archive containing all files under the  <filename>debian.tar.gz</filename> archive containing all files under the
3755  <filename>debian</filename> directory.  This new format supports inclusion of  <filename>debian</filename> directory.  This new format supports inclusion of
3756  binary files such as PNG icons by the package maintainer without requiring  binary files such as PNG icons by the package maintainer without requiring
3757  tricks.  <footnote><para> Actually, this new format also supports multiple  tricks.  <footnote><para>Actually, this new format also supports multiple
3758  upstream tarballs and more compression methods.  These are beyond the scope of  upstream tarballs and more compression methods.  These are beyond the scope of
3759  this document.  </para> </footnote>  this document.</para> </footnote>
3760  </para>  </para>
3761  <para>  <para>
3762  When <command>dpkg-source</command> extracts a source package in <literal>3.0  When <command>dpkg-source</command> extracts a source package in <literal>3.0
# Line 3509  When <command>dpkg-source</command> extr Line 3765  When <command>dpkg-source</command> extr
3765  the end of the extraction with the <literal>--skip-patches</literal> option.  the end of the extraction with the <literal>--skip-patches</literal> option.
3766  </para>  </para>
3767  </section>  </section>
3768  <section id="sourcel"><title><filename>source/local-options</filename> file</title>  <section id="sourcel"><title><filename>source/local-options</filename></title>
3769  <para>  <para>
3770  When you want to manage Debian packaging activities under a VCS, you typically  When you want to manage Debian packaging activities under a VCS, you typically
3771  create one branch (e.g.  <literal>upstream</literal>) tracking the upstream  create one branch (e.g.  <literal>upstream</literal>) tracking the upstream
# Line 3520  Debian packaging to ease merging of the Line 3776  Debian packaging to ease merging of the
3776  </para>  </para>
3777  <para>  <para>
3778  After you build a package, the source is normally left patched.  You need to  After you build a package, the source is normally left patched.  You need to
3779  unpatch it manually by running <literal>quilt pop -a</literal> before  unpatch it manually by running <literal>dquilt pop -a</literal> before
3780  committing to the <literal>master</literal> branch.  You can automate this by  committing to the <literal>master</literal> branch.  You can automate this by
3781  adding the optional <filename>debian/source/local-options</filename> file  adding the optional <filename>debian/source/local-options</filename> file
3782  containing <literal>unapply-patches</literal>.  This file is not included in  containing <literal>unapply-patches</literal>.  This file is not included in
# Line 3534  unapply-patches Line 3790  unapply-patches
3790  abort-on-upstream-changes  abort-on-upstream-changes
3791  </screen>  </screen>
3792  </section>  </section>
3793  <section id="sourceopt"><title><filename>source/options</filename> file</title>  <section id="sourceopt"><title><filename>source/options</filename></title>
3794  <para>  <para>
3795  The autogenerated files in the source tree can be quite annoying for packaging  The autogenerated files in the source tree can be quite annoying for packaging
3796  since they generate meaningless large patch files.  There are custom modules  since they generate meaningless large patch files.  There are custom modules
# Line 3542  such as <command>dh_autoreconf</command> Line 3798  such as <command>dh_autoreconf</command>
3798  <xref linkend="customrules"/>.  <xref linkend="customrules"/>.
3799  </para>  </para>
3800  <para>  <para>
3801  You can provide a Perl regular expression argument to the  You can provide a Perl regular expression to the
3802  <literal>--extend-diff-ignore</literal> option of <citerefentry>  <literal>--extend-diff-ignore</literal> option argument of <citerefentry>
3803  <refentrytitle>dpkg-source</refentrytitle><manvolnum>1</manvolnum>  <refentrytitle>dpkg-source</refentrytitle><manvolnum>1</manvolnum>
3804  </citerefentry> to ignore changes made to the autogenerated files while  </citerefentry> to ignore changes made to the autogenerated files while
3805  creating the source package.  creating the source package.
3806  </para>  </para>
3807  <para>  <para>
3808  You can store such <command>dpkg-source</command> option argument in the  As a general solution to address this problem of the autogenerated files,
3809  <filename>source/options</filename> file of the source package as the generic  you can store such a <command>dpkg-source</command> option argument in the
3810  solution to address this problem of the autogenerated files.  The following  <filename>source/options</filename> file of the source package.  The following
3811  will skip creating patch files for <filename>config.sub</filename>  will skip creating patch files for <filename>config.sub</filename>,
3812  <filename>config.guess</filename> and <filename>Makefile</filename>.  <filename>config.guess</filename>, and <filename>Makefile</filename>.
3813  </para>  </para>
3814  <screen>  <screen>
3815  extend-diff-ignore = "(^|/)(config\.sub|config\.guess|Makefile)$"  extend-diff-ignore = "(^|/)(config\.sub|config\.guess|Makefile)$"
3816  </screen>  </screen>
3817  </section>  </section>
3818  <section id="patches"><title><filename>patches/*</filename> files</title>  <section id="patches"><title><filename>patches/*</filename></title>
3819  <para>  <para>
3820  The old <literal>1.0</literal> source format created a single large  The old <literal>1.0</literal> source format created a single large
3821  <filename>diff.gz</filename> file which contains package maintenance files in  <filename>diff.gz</filename> file containing package maintenance files in
3822  <filename>debian</filename> and patch files to the source.  Such a package is a  <filename>debian</filename> and patch files for the source.  Such a package is a
3823  bit cumbersome to inspect and understand for each source tree modification  bit cumbersome to inspect and understand for each source tree modification
3824  later.  This is not so nice.  later.  This is not so nice.
3825  </para>  </para>
3826  <para>  <para>
3827  The newer <literal>3.0 (quilt)</literal> source format stores patches in  The newer <literal>3.0 (quilt)</literal> source format stores patches in
3828  <filename>debian/patches/*</filename> files using the <command>quilt</command>  <filename>debian/patches/*</filename> files using the <command>quilt</command>
3829  command.  These patches and other package data which are all constrained under  command.  These patches and other package data which are all contained under
3830  the <filename>debian</filename> directory are packaged as the  the <filename>debian</filename> directory are packaged as the
3831  <filename>debian.tar.gz</filename> file.  Since the  <filename>debian.tar.gz</filename> file.  Since the
3832  <command>dpkg-source</command> command can handle <command>quilt</command>  <command>dpkg-source</command> command can handle <command>quilt</command>
3833  formatted patch data in the <literal>3.0 (quilt)</literal> source without the  formatted patch data in the <literal>3.0 (quilt)</literal> source without the
3834  <systemitem role="package">quilt</systemitem> package, it does not need to  <systemitem role="package">quilt</systemitem> package, it does not need a
3835  <literal>Build-Depends</literal> on the <systemitem role="package">quilt</systemitem> package.  <footnote><para> Several methods  <literal>Build-Depends</literal> on <systemitem role="package">quilt</systemitem>.
3836  for the patch set maintenance have been proposed and are in use with Debian  <footnote><para> Several methods of patch set maintenance have been proposed and are in use for Debian
3837  packages.  The <command>quilt</command> system is the preferred maintenance  packages.  The <command>quilt</command> system is the preferred maintenance
3838  system in use.  Other ones are <command>dpatch</command>,  system in use.  Others include <command>dpatch</command>,
3839  <command>dbs</command>, <command>cdbs</command>, etc.  Many of these keep such  <command>dbs</command>, and <command>cdbs</command>.  Many of these keep such
3840  patches as <filename>debian/patches/*</filename> files.  </para> </footnote>  patches as <filename>debian/patches/*</filename> files.  </para> </footnote>
3841  </para>  </para>
3842  <para>  <para>
# Line 3589  The <command>quilt</command> command is Line 3845  The <command>quilt</command> command is
3845  It records modifications to the source as a stack of <literal>-p1</literal>  It records modifications to the source as a stack of <literal>-p1</literal>
3846  patch files in the <filename>debian/patches</filename> directory and the source  patch files in the <filename>debian/patches</filename> directory and the source
3847  tree is untouched outside of the <filename>debian</filename> directory.  The  tree is untouched outside of the <filename>debian</filename> directory.  The
3848  order of these patches are recorded in the  order of these patches is recorded in the
3849  <filename>debian/patches/series</filename> file.  You can apply (=push),  <filename>debian/patches/series</filename> file.  You can apply (=push),
3850  un-apply (=pop), and refresh patches easily.  <footnote><para> If you are  un-apply (=pop), and refresh patches easily.  <footnote><para> If you are
3851  asking a sponsor to upload your package, this kind of clear separation and  asking a sponsor to upload your package, this kind of clear separation and
3852  documentation of your changes are very important to expedite the package review  documentation of your changes is very important to expedite the package review
3853  by your sponsor.  </para> </footnote>  by your sponsor.  </para> </footnote>
3854  </para>  </para>
3855  <para>  <para>
3856  For <xref linkend="modify"/> , we created 3 patches in  For <xref linkend="modify"/>, we created three patches in
3857  <filename>debian/patches</filename>.  <filename>debian/patches</filename>.
3858  </para>  </para>
3859  <para>  <para>
3860  Since Debian patches are located in <filename>debian/patches</filename>, please  Since Debian patches are located in <filename>debian/patches</filename>, please
3861  make sure to setup the <command>quilt</command> command properly as described  make sure to set up the <command>dquilt</command> command properly as described
3862  in <xref linkend="quiltrc"/> .  in <xref linkend="quiltrc"/>.
3863  </para>  </para>
3864  <para>  <para>
3865  When someone (including yourself) provides you with a patch  When anyone (including yourself) provides a patch
3866  <filename><replaceable>foo</replaceable>.patch</filename> to the source later,  <filename><replaceable>foo</replaceable>.patch</filename> to the source later,
3867  then the modification of a <literal>3.0 (quilt)</literal> source package is  modifying a <literal>3.0 (quilt)</literal> source package is
3868  quite simple:  quite simple:
3869  </para>  </para>
3870  <screen>  <screen>
3871  $ dpkg-source -x gentoo_0.9.12.dsc  $ dpkg-source -x gentoo_0.9.12.dsc
3872  $ cd gentoo-0.9.12  $ cd gentoo-0.9.12
3873  $ quilt import ../<replaceable>foo</replaceable>.patch  $ dquilt import ../<replaceable>foo</replaceable>.patch
3874  $ quilt push  $ dquilt push
3875  $ quilt refresh  $ dquilt refresh
3876  $ quilt header -e  $ dquilt header -e
3877  ... describe patch  ... describe patch
3878  </screen>  </screen>
3879  <para>  <para>
3880  The patches stored in the newer <literal>3.0 (quilt)</literal> source format  The patches stored in the newer <literal>3.0 (quilt)</literal> source format
3881  must be <emphasis>fuzz</emphasis> free.  You should ensure it as <literal>quilt  must be <emphasis>fuzz</emphasis> free.  You can ensure this with <literal>dquilt
3882  pop -a; while quilt push; do quilt refresh; done</literal>.  pop -a; while dquilt push; do dquilt refresh; done</literal>.
3883  </para>  </para>
3884  </section>  </section>
3885  </chapter>  </chapter>
# Line 3633  We should now be ready to build the pack Line 3889  We should now be ready to build the pack
3889  </para>  </para>
3890  <section id="completebuild"><title>Complete (re)build</title>  <section id="completebuild"><title>Complete (re)build</title>
3891  <para>  <para>
3892  In order to properly make complete (re)build of a package, you have to ensure  In order to perform a complete (re)build of a package properly, you
3893  to install  need to make sure you have installed
3894  </para>  </para>
3895  <itemizedlist>  <itemizedlist>
3896  <listitem>  <listitem>
# Line 3644  the <systemitem role="package">build-ess Line 3900  the <systemitem role="package">build-ess
3900  </listitem>  </listitem>
3901  <listitem>  <listitem>
3902  <para>  <para>
3903  packages listed in the <literal>Build-Depends</literal> field (see <xref linkend="control"/> ), and  packages listed in the <literal>Build-Depends</literal> field (see <xref linkend="control"/>), and
3904  </para>  </para>
3905  </listitem>  </listitem>
3906  <listitem>  <listitem>
3907  <para>  <para>
3908  packages listed in the <literal>Build-Depends-indep</literal> field (see <xref linkend="control"/> ).  packages listed in the <literal>Build-Depends-indep</literal> field (see <xref linkend="control"/>).
3909  </para>  </para>
3910  </listitem>  </listitem>
3911  </itemizedlist>  </itemizedlist>
# Line 3700  create and sign the upload <filename>.ch Line 3956  create and sign the upload <filename>.ch
3956  The only input that will be required of you is your GPG secret pass phrase,  The only input that will be required of you is your GPG secret pass phrase,
3957  twice.  twice.
3958  <footnote><para>  <footnote><para>
3959  This GPG key must be signed by the Debian developer to get connected to the web  This GPG key must be signed by a Debian developer to get connected to the web
3960  of trust.  This enables your uploaded packages to be accepted to the Debian  of trust and must be registered to <ulink url="&keyring;">the Debian
3961  archives.  See  keyring</ulink>.  This enables your uploaded packages to be accepted to the
3962    Debian archives.  See
3963    <ulink url="&keycreate;">Creating a new GPG key</ulink> and
3964  <ulink url="&keysigning; ">Debian Wiki on Keysigning</ulink>.  <ulink url="&keysigning; ">Debian Wiki on Keysigning</ulink>.
3965  </para></footnote>  </para></footnote>
3966  </para>  </para>
# Line 3739  people can be sure that it's really your Line 3997  people can be sure that it's really your
3997  </para>  </para>
3998  <para>  <para>
3999  This compressed tarball contains your <filename>debian</filename> directory  This compressed tarball contains your <filename>debian</filename> directory
4000  contents.  Each and every addition you made to the original source code are  contents.  Each and every addition you made to the original source code is
4001  stored as <command>quilt</command> patches in  stored as a <command>quilt</command> patch in
4002  <filename>debian/patches</filename>.  <filename>debian/patches</filename>.
4003  </para>  </para>
4004  <para>  <para>
# Line 3750  copy the three files somewhere else and Line 4008  copy the three files somewhere else and
4008  gentoo_0.9.12-1.dsc</literal>.  <footnote><para> You can avoid applying  gentoo_0.9.12-1.dsc</literal>.  <footnote><para> You can avoid applying
4009  <command>quilt</command> patches in the <literal>3.0 (quilt)</literal> source  <command>quilt</command> patches in the <literal>3.0 (quilt)</literal> source
4010  format at the end of the extraction with the <literal>--skip-patches</literal>  format at the end of the extraction with the <literal>--skip-patches</literal>
4011  option.  Alternatively, you can run <literal>quilt pop -a</literal> after  option.  Alternatively, you can run <literal>dquilt pop -a</literal> after
4012  normal operation.  </para> </footnote>  normal operation.  </para> </footnote>
4013  </para>  </para>
4014  </listitem>  </listitem>
# Line 3768  install and remove this just like any ot Line 4026  install and remove this just like any ot
4026  <filename>gentoo_0.9.12-1_i386.changes</filename>  <filename>gentoo_0.9.12-1_i386.changes</filename>
4027  </para>  </para>
4028  <para>  <para>
4029  This file describes all the changes made in the current package revision, and  This file describes all the changes made in the current package revision;
4030  it is used by the Debian FTP archive maintenance programs to install the binary  it is used by the Debian FTP archive maintenance programs to install the binary
4031  and source packages in it.  It is partly generated from the  and source packages.  It is partly generated from the
4032  <filename>changelog</filename> file and the <filename>.dsc</filename> file.  <filename>changelog</filename> file and the <filename>.dsc</filename> file.
4033  This file is GPG signed, so that people can be sure that it's really yours.  This file is GPG signed, so that people can be sure that it's really yours.
4034  </para>  </para>
4035  <para>  <para>
4036  As you keep working on the package, behavior will change and new features will  As you keep working on the package, its behavior will change and new features will
4037  be added.  People downloading your package can look at this file and quickly  be added.  People downloading your package can look at this file and quickly
4038  see what has changed.  Debian archive maintenance programs will also post the  see what has changed.  Debian archive maintenance programs will also post the
4039  contents of this file to the <ulink url="&debian-devel-announce-ldo;">debian-devel-announce@lists.debian.org</ulink>  contents of this file to the <ulink url="&debian-devel-announce-ldo;">debian-devel-announce@lists.debian.org</ulink>
# Line 3785  mailing list. Line 4043  mailing list.
4043  </itemizedlist>  </itemizedlist>
4044  <para>  <para>
4045  The long strings of numbers in the <filename>.dsc</filename> and  The long strings of numbers in the <filename>.dsc</filename> and
4046  <filename>.changes</filename> files are MD5/SHA1/SHA256 checksums for the files  <filename>.changes</filename> files are SHA1/SHA256 checksums for the files
4047  mentioned.  A person downloading your files can test them with <citerefentry>  mentioned.  Anyone downloading your files can test them with <citerefentry>
4048  <refentrytitle>md5sum</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>,  <refentrytitle>sha1sum</refentrytitle> <manvolnum>1</manvolnum>
4049  <citerefentry> <refentrytitle>sha1sum</refentrytitle> <manvolnum>1</manvolnum>  </citerefentry> or <citerefentry> <refentrytitle>sha256sum</refentrytitle>
 </citerefentry>, or <citerefentry> <refentrytitle>sha256sum</refentrytitle>  
4050  <manvolnum>1</manvolnum> </citerefentry> and if the numbers don't match,  <manvolnum>1</manvolnum> </citerefentry> and if the numbers don't match,
4051  they'll know the file is corrupt or has been tampered with.  they'll know the file is corrupt or has been tampered with.
4052  </para>  </para>
# Line 3798  they'll know the file is corrupt or has Line 4055  they'll know the file is corrupt or has
4055  <para>  <para>
4056  Debian supports many <ulink url="&ports;">ports</ulink>  Debian supports many <ulink url="&ports;">ports</ulink>
4057  with the <ulink url="&buildd;">autobuilder  with the <ulink url="&buildd;">autobuilder
4058  network</ulink> running <command>buildd</command> daemons on many different  network</ulink> running <command>buildd</command> daemons on computers
4059  architecture computers.  Although you do not need to do this by yourself, you  of many different architectures.  Although you do not need to do this yourself, you
4060  should be aware of what will happen on your packages.  Let's look into roughly  should be aware of what will happen to your packages.  Let's look into roughly
4061  how your packages are rebuild for many different architectures by them.  how they rebuild your packages for multiple architectures.
4062  <footnote><para> The actual autobuilder system involves much more complicated  <footnote><para> The actual autobuilder system involves much more complicated
4063  schemes than the one documented here.  Such details are beyond the scope of  schemes than the one documented here.  Such details are beyond the scope of
4064  this document.  </para> </footnote>  this document.  </para> </footnote>
4065  </para>  </para>
4066  <para>  <para>
4067  For <literal>Architecture: any</literal> packages, the autobuilder system  For <literal>Architecture: any</literal> packages, the autobuilder system
4068  rebuild them.  It ensures to install  performs a rebuild.  It ensures the installation of
4069  </para>  </para>
4070  <itemizedlist>  <itemizedlist>
4071  <listitem>  <listitem>
# Line 3818  the <systemitem role="package">build-ess Line 4075  the <systemitem role="package">build-ess
4075  </listitem>  </listitem>
4076  <listitem>  <listitem>
4077  <para>  <para>
4078  packages listed in the <literal>Build-Depends</literal> field (see <xref linkend="control"/> ).  packages listed in the <literal>Build-Depends</literal> field (see <xref linkend="control"/>).
4079  </para>  </para>
4080  </listitem>  </listitem>
4081  </itemizedlist>  </itemizedlist>
# Line 3865  create and sign the upload <filename>.ch Line 4122  create and sign the upload <filename>.ch
4122  This is why you see your package for other architectures.  This is why you see your package for other architectures.
4123  </para>  </para>
4124  <para>  <para>
4125  Although packages listed in the <literal>Build-Depends-indep</literal> field  Although packages listed in the <literal>Build-Depends-Indep</literal> field
4126  are required to be installed for the normal packaging by us (see <xref linkend="completebuild"/> ), they are not required to be installed for the  are required to be installed for our normal packaging work (see
4127  autobuilder system since it build only architecture dependent binary packages.  <xref linkend="completebuild"/>), they are not required to be installed for the
4128    autobuilder system since it builds only architecture dependent binary packages.
4129  <footnote><para> Unlike under the <systemitem role="package">pbuilder</systemitem> package, the <command>chroot</command>  <footnote><para> Unlike under the <systemitem role="package">pbuilder</systemitem> package, the <command>chroot</command>
4130  environment under the <systemitem role="package">sbuild</systemitem> package  environment under the <systemitem role="package">sbuild</systemitem> package
4131  used by the autobuilder system does not force the minimal system and may leave  used by the autobuilder system does not enforce the use of a minimal
4132  many packages installed.  </para> </footnote> This difference between normal  system and may have many leftover packages installed.  </para>
4133  packaging and autobuilder situation dictates whether you record such required  </footnote> This distinction between normal packaging and autobuilding
4134    procedures is what dictates whether you should record such required
4135  packages in the <literal>Build-Depends</literal> or  packages in the <literal>Build-Depends</literal> or
4136  <literal>Build-Depends-indep</literal> fields of the  <literal>Build-Depends-Indep</literal> fields of the
4137  <filename>debian/control</filename> file (see <xref linkend="control"/> ).  <filename>debian/control</filename> file (see <xref linkend="control"/>).
4138  </para>  </para>
4139  </section>  </section>
4140  <section id="option-sa"><title>Including <filename>orig.tar.gz</filename> for upload</title>  <section id="option-sa"><title>Including <filename>orig.tar.gz</filename> for upload</title>
4141  <para>  <para>
4142  When you first upload the package to the archive, you need to include the  When you first upload the package to the archive, you need to include the
4143  original <filename>orig.tar.gz</filename> source, too.  If the Debian revision  original <filename>orig.tar.gz</filename> source, too.  If the Debian revision
4144  number of such package is neither <literal>1</literal> nor  number of this package is neither <literal>1</literal> nor
4145  <literal>0</literal>, you must provide <command>dpkg-buildpackage</command>  <literal>0</literal>, you must provide the <command>dpkg-buildpackage</command>
4146  command with the <literal>-sa</literal> option.  On the other hand, the  command with the <literal>-sa</literal> option.  On the other hand, the
4147  <literal>-sd</literal> option will force to exclude the original  <literal>-sd</literal> option will force the exclusion of the original
4148  <filename>orig.tar.gz</filename> source.  <filename>orig.tar.gz</filename> source.
4149  </para>  </para>
4150  </section>  </section>
4151  <section id="debuild"><title><command>debuild</command> command</title>  <section id="debuild"><title><command>debuild</command> command</title>
4152  <para>  <para>
4153  You can automate package build process of the  You can automate the <command>dpkg-buildpackage</command> command's
4154  <command>dpkg-buildpackage</command> command further with the  package build process further with the
4155  <command>debuild</command> command.  See <citerefentry>  <command>debuild</command> command.  See <citerefentry>
4156  <refentrytitle>debuild</refentrytitle> <manvolnum>1</manvolnum>  <refentrytitle>debuild</refentrytitle> <manvolnum>1</manvolnum>
4157  </citerefentry>.  </citerefentry>.
# Line 3900  You can automate package build process o Line 4159  You can automate package build process o
4159  <para>  <para>
4160  Customization of the <command>debuild</command> command can be done through  Customization of the <command>debuild</command> command can be done through
4161  <filename>/etc/devscripts.conf</filename> or  <filename>/etc/devscripts.conf</filename> or
4162  <filename>~/.devscripts</filename>.  I would suggest at least following items:  <filename>~/.devscripts</filename>.  I would suggest at least the following items:
4163  </para>  </para>
4164  <screen>  <screen>
4165  DEBSIGN_KEYID=Your_GPG_keyID  DEBSIGN_KEYID=Your_GPG_keyID
# Line 3909  DEBUILD_LINTIAN_OPTS=-i -I --show-overri Line 4168  DEBUILD_LINTIAN_OPTS=-i -I --show-overri
4168  </screen>  </screen>
4169  <para>  <para>
4170  With these, packages are signed by your specified GPG key ID (good for  With these, packages are signed by your specified GPG key ID (good for
4171  sponsoring packages) and checked by the <command>lintian</command> command in  sponsoring packages) and checked in detail by the <command>lintian</command> command.
 details.  
4172  </para>  </para>
4173  <para>  <para>
4174  Cleaning source and rebuilding package from a user account is as simple as:  Cleaning the source and rebuilding the package from your user account is as simple as:
4175  </para>  </para>
4176  <screen>  <screen>
4177  $ debuild  $ debuild
# Line 3927  source can be specified as: Line 4185  source can be specified as:
4185  $ debuild -sa  $ debuild -sa
4186  </screen>  </screen>
4187  <para>  <para>
4188  You can clean source tree as simple as:  You can clean the source tree as simply as:
4189  </para>  </para>
4190  <screen>  <screen>
4191  $ debuild clean  $ debuild clean
# Line 3937  $ debuild clean Line 4195  $ debuild clean
4195  <para>  <para>
4196  For a clean room (<command>chroot</command>) build environment to verify the  For a clean room (<command>chroot</command>) build environment to verify the
4197  build dependencies, the <systemitem role="package">pbuilder</systemitem>  build dependencies, the <systemitem role="package">pbuilder</systemitem>
4198  package is very useful.  <footnote><para> Since the <systemitem role="package">pbuilder</systemitem> package is still evolving, you have to  package is very useful.  <footnote><para> Since the <systemitem
4199    role="package">pbuilder</systemitem> package is still evolving, you should
4200  check the actual configuration situation by consulting the latest official  check the actual configuration situation by consulting the latest official
4201  documentation.  </para> </footnote> This ensures a clean build from the source  documentation.</para> </footnote> This ensures a clean build from the source
4202  under the <literal>sid</literal> auto-builder for different architectures and  under the <literal>sid</literal> auto-builder for different architectures and
4203  avoids the severity serious FTBFS (Fails To Build From Source) bug which is  avoids a severity serious FTBFS (Fails To Build From Source) bug which is
4204  always in the RC (release critical) category.  See <ulink url="&buildd-do;"/> for more on the Debian  always in the RC (release critical) category.
4205  package <systemitem role="package">auto-builder</systemitem>.  <footnote><para>See <ulink url="&buildd-do;"/> for more on
4206    Debian package auto-building.
4207    .</para></footnote>
4208  </para>  </para>
4209  <para>  <para>
4210  Let's customize the <systemitem role="package">pbuilder</systemitem> package by  Let's customize the <systemitem role="package">pbuilder</systemitem> package as
4211  the following.  follows:
4212  </para>  </para>
4213  <itemizedlist>  <itemizedlist>
4214  <listitem>  <listitem>
4215  <para>  <para>
4216  setting <filename>/var/cache/pbuilder/result</filename> directory writable by  setting the <filename>/var/cache/pbuilder/result</filename> directory writable by
4217  the user.  for your user account.
4218  </para>  </para>
4219  </listitem>  </listitem>
4220  <listitem>  <listitem>
4221  <para>  <para>
4222  creating a directory, e.g.  creating a directory, e.g.
4223  <filename><replaceable>/var/cache/pbuilder/hooks</replaceable></filename>,  <filename><replaceable>/var/cache/pbuilder/hooks</replaceable></filename>,
4224  writable by the user to place hook scripts.  writable by the user, to place hook scripts in.
4225  </para>  </para>
4226  </listitem>  </listitem>
4227  <listitem>  <listitem>
4228  <para>  <para>
4229  setting <filename>~/.pbuilderrc</filename> or  configuring <filename>~/.pbuilderrc</filename> or
4230  <filename>/etc/pbuilderrc</filename> to include as follows.  <filename>/etc/pbuilderrc</filename> to include the followsing.
4231  </para>  </para>
4232  <screen>  <screen>
4233  AUTO_DEBSIGN=yes  AUTO_DEBSIGN=yes
# Line 3979  This will allow you to sign generated pa Line 4240  This will allow you to sign generated pa
4240  <filename>~/.gnupg/</filename> directory.  <filename>~/.gnupg/</filename> directory.
4241  </para>  </para>
4242  <para>  <para>
4243  Let's then initialize the local <systemitem role="package">pbuilder</systemitem> <command>chroot</command> system first as  First let's initialize the local <systemitem role="package">pbuilder</systemitem> <command>chroot</command> system as
4244  follows.  follows.
4245  </para>  </para>
4246  <screen>  <screen>
4247  $ sudo pbuilder create  $ sudo pbuilder create
4248  </screen>  </screen>
4249  <para>  <para>
4250  If you already have the completed source packages, issue the following commands  If you already have a completed source package, issue the following commands
4251  in the directory where the  in the directory where the
4252  <filename><replaceable>foo</replaceable>.orig.tar.gz</filename>,  <filename><replaceable>foo</replaceable>.orig.tar.gz</filename>,
4253  <filename><replaceable>foo</replaceable>.debian.tar.gz</filename>, and  <filename><replaceable>foo</replaceable>.debian.tar.gz</filename>, and
# Line 4011  The newly built packages will be located Line 4272  The newly built packages will be located
4272  <filename>/var/cache/pbuilder/result/</filename> with non-root ownership.  <filename>/var/cache/pbuilder/result/</filename> with non-root ownership.
4273  </para>  </para>
4274  <para>  <para>
4275  If you already have the updated source tree without generating the matching  If you have an updated source tree but have not generated the matching
4276  source packages, issue the following commands in the source directory where the  source package, issue the following commands in the source directory where the
4277  <filename>debian</filename> directory exists, instead.  <filename>debian</filename> directory exists, instead.
4278  </para>  </para>
4279  <screen>  <screen>
# Line 4039  the <literal>chroot</literal> environmen Line 4300  the <literal>chroot</literal> environmen
4300  <filename><replaceable>/var/cache/pbuilder/hooks</replaceable>/B90lintian</filename>  <filename><replaceable>/var/cache/pbuilder/hooks</replaceable>/B90lintian</filename>
4301  configured as follows.  <footnote><para> This assumes  configured as follows.  <footnote><para> This assumes
4302  <literal>HOOKDIR=/var/cache/pbuilder/hooks</literal>.  You can find many  <literal>HOOKDIR=/var/cache/pbuilder/hooks</literal>.  You can find many
4303  examples of the hook script in the  examples of hook scripts in the
4304  <filename>/usr/share/doc/pbuilder/examples</filename> directory.  </para>  <filename>/usr/share/doc/pbuilder/examples</filename> directory.  </para>
4305  </footnote>  </footnote>
4306  </para>  </para>
# Line 4058  echo +++ end of lintian output +++ Line 4319  echo +++ end of lintian output +++
4319  </screen>  </screen>
4320  <para>  <para>
4321  You need to have access to the latest <literal>sid</literal> environment to  You need to have access to the latest <literal>sid</literal> environment to
4322  build packages properly for <literal>sid</litera