/[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 8636 by osamu, Tue Apr 5 17:00:59 2011 UTC revision 8769 by taffit-guest, Sun May 1 02:09:52 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  <title>Debian New Maintainers' Guide</title>  <!--
12  <bookinfo>  This is reorganized to make this document robust for translation
13  <authorgroup>  when some externally referenced information changes.
 <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 35  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), you must install  text in an older system (including an older Ubuntu system etc.), you must
83  backported <systemitem role="package">dpkg</systemitem> and <systemitem  install backported <systemitem role="package">dpkg</systemitem> and
84  role="package">debhelper</systemitem> packages, at least.  </para> </footnote>  <systemitem role="package">debhelper</systemitem> packages, at least.
85    </para> </footnote>
86  </para>  </para>
87  <para>  <para>
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>
97    You can learn about the basic handling of a Debian system from the
98    <ulink url="&debref;">Debian Reference</ulink>.  It contains some pointers to
99    learn about Unix programming, too.
100    </para></footnote>
101  </para>  </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.  
109  </para>  </para>
110  <para>  <para>
111  You must be familiar with <ulink url="&debref;">basic Debian system  Newer versions of this document should always be available online at
112  operations</ulink> before reading this document.  <ulink url="&maint-guide;"/> and in the
113    <systemitem role="package">maint-guide</systemitem> package.
114    The translations may be available in packages such as
115    <systemitem role="package">maint-guide-es</systemitem>.
116    Please note that this documentation may be slightly outdated.
117  </para>  </para>
118  <para>  <para>
119  If you need some help on packaging, please read <xref linkend="helpme"/> .  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>  </para>
124    <section id="socialdynamics"><title>Social dynamics of Debian</title>
125  <para>  <para>
126  Newer versions of this document should always be available online at  Here are some observations of Debian's social dynamics, presented in the hope
127  <ulink url="&maint-guide;"/> and in the  that it will prepare you for interactions with Debian.
128  <systemitem role="package">maint-guide</systemitem> package.  </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>  </para>
155    <itemizedlist>
156    <listitem>
157  <para>  <para>
158  The translations may be available in packages such as <systemitem role="package">maint-guide-es</systemitem>.  <emphasis role="strong">upstream author</emphasis>: the person who made the
159    original program.
160  </para>  </para>
161  <section id="needprogs"><title>Programs you need for development</title>  </listitem>
162    <listitem>
163    <para>
164    <emphasis role="strong">upstream maintainer</emphasis>: the person who
165    currently maintains the program.
166    </para>
167    </listitem>
168    <listitem>
169    <para>
170    <emphasis role="strong">maintainer</emphasis>: the person making the Debian
171    package of the program.
172    </para>
173    </listitem>
174    <listitem>
175    <para>
176    <emphasis role="strong">sponsor</emphasis>: a person who helps maintainers to
177    upload packages to the official Debian package archive (after checking their
178    contents).
179    </para>
180    </listitem>
181    <listitem>
182    <para>
183    <emphasis role="strong">mentor</emphasis>: a person who helps novice
184    maintainers with packaging etc.
185    </para>
186    </listitem>
187    <listitem>
188    <para>
189    <emphasis role="strong">Debian Developer</emphasis> (DD): a member of
190    the Debian project with full upload rights to the official Debian package
191    archive.
192    </para>
193    </listitem>
194    <listitem>
195    <para>
196    <emphasis role="strong">Debian Maintainer</emphasis> (DM): a person with
197    limited upload rights to the official Debian package archive.
198    </para>
199    </listitem>
200    </itemizedlist>
201    <para>
202    Please note that you cannot become an official
203    <emphasis role="strong">Debian Developer</emphasis> (DD) overnight, because it
204    takes more than technical skill.  Please do not be discouraged by this.  If it
205    is useful to others, you can still upload your package either as a
206    <emphasis role="strong">maintainer</emphasis> through a
207    <emphasis role="strong">sponsor</emphasis> or as a
208    <emphasis role="strong">Debian Maintainer</emphasis>.
209    </para>
210    <para>
211    Please note that you do not need to create any new package to become an
212    official Debian Developer.  Contributing to the existing packages can provide a
213    path to becoming an official Debian Developer too.  There are many packages
214    waiting for good maintainers (see <xref linkend="choose"/>).
215    </para>
216    <para>
217    Since we focus only on technical aspects of packaging in this document,
218    please refer to the following to learn how Debian functions and how you can get involved.
219    </para>
220    <itemizedlist>
221    <listitem><para><ulink url="&logiciellibre;">Debian: 17 years of Free Software, "do-ocracy", and democracy</ulink> (Introductory slides) </para> </listitem>
222    <listitem><para><ulink url="&debianorghelp;">How can you help Debian?</ulink> (official) </para> </listitem>
223    <listitem><para><ulink url="&debianfaqhelp;">The Debian GNU/Linux FAQ, Chapter 13 - "Contributing to the Debian Project"</ulink> (semi-official) </para> </listitem>
224    <listitem><para><ulink url="&debianwikihelp;">Debian Wiki, HelpDebian</ulink> (supplemental) </para> </listitem>
225    <listitem><para><ulink url="&nm-do;">Debian New Maintainer site</ulink> (official) </para> </listitem>
226    <listitem><para><ulink url="&debianmentorfaq;">Debian Mentors FAQ</ulink> (supplemental) </para> </listitem>
227    </itemizedlist>
228    </section>
229    <section id="needprogs"><title>Programs needed for development</title>
230  <para>  <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
232  installed some additional packages needed for development.  Note that the list  installed some additional packages needed for development.  Note that the list
# Line 114  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>,  
 <filename>/usr/share/doc/debhelper/README</filename>) <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>.)
 <filename>/usr/share/doc/devscripts/README.gz</filename>)  
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 201  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 218  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>.)
 </para>  
 </listitem>  
 <listitem>  
 <para>  
 <systemitem role="package">xutils-dev</systemitem> - some programs, usually  
 those made for X11, also use these programs to generate  
 <filename>Makefile</filename> files from sets of macro functions.  (see  
 <citerefentry> <refentrytitle>imake</refentrytitle> <manvolnum>1</manvolnum>  
 </citerefentry>, <citerefentry> <refentrytitle>xmkmf</refentrytitle>  
 <manvolnum>1</manvolnum> </citerefentry>)  
346  </para>  </para>
347  </listitem>  </listitem>
348  <listitem>  <listitem>
349  <para>  <para>
350  <systemitem role="package">lintian</systemitem> - this is the Debian package  <systemitem role="package">lintian</systemitem> - this is the Debian package
351  checker that can let you know of any common mistakes after you build the  checker, which can let you know of any common mistakes after you build the
352  package, and explains the errors found.  (see <citerefentry>  package, and explains the errors found.  (See <citerefentry>
353  <refentrytitle>lintian</refentrytitle> <manvolnum>1</manvolnum>  <refentrytitle>lintian</refentrytitle> <manvolnum>1</manvolnum>
354  </citerefentry>,  </citerefentry>,
355  <filename>/usr/share/doc/lintian/lintian.html/index.html</filename>)  <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">pbuilder</systemitem> - this package contains  <systemitem role="package">patch</systemitem> - this very useful utility will
361  programs which are used for creating and maintaining <command>chroot</command>  take a file containing a difference listing (produced by the
362  environment.  Building Debian package in this <command>chroot</command>  <command>diff</command> program) and apply it to the original file, producing a
363  environment verifies the proper build dependency and avoid FTBFS (Fails To  patched version.  (See <citerefentry> <refentrytitle>patch</refentrytitle>
364  Build From Source) bugs.  (see <citerefentry>  <manvolnum>1</manvolnum> </citerefentry>.)
 <refentrytitle>pbuilder</refentrytitle> <manvolnum>8</manvolnum>  
 </citerefentry> and <citerefentry> <refentrytitle>pdebuild</refentrytitle>  
 <manvolnum>1</manvolnum> </citerefentry>)  
365  </para>  </para>
366  </listitem>  </listitem>
367  <listitem>  <listitem>
# Line 265  utilities to work with patches such as t Line 373  utilities to work with patches such as t
373  </listitem>  </listitem>
374  <listitem>  <listitem>
375  <para>  <para>
376  <systemitem role="package">quilt</systemitem> - this package helps you to  <systemitem role="package">pbuilder</systemitem> - this package contains
377  manage a series of patches by keeping track of the changes each of them makes.  programs which are used for creating and maintaining <command>chroot</command>
378  They are logically organized as a stack, and you can apply (=push), un-apply  environment.  Building Debian package in this <command>chroot</command>
379  (=pop), refresh them easily by traveling into the stack.  (see <citerefentry>  environment verifies the proper build dependency and avoid FTBFS (Fails To
380  <refentrytitle>quilt</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>,  Build From Source) bugs.  (see <citerefentry>
381  <filename>/usr/share/doc/quilt/README.Debian</filename>)  <refentrytitle>pbuilder</refentrytitle> <manvolnum>8</manvolnum>
382  </para>  </citerefentry> and <citerefentry> <refentrytitle>pdebuild</refentrytitle>
383  </listitem>  <manvolnum>1</manvolnum> </citerefentry>)
 <listitem>  
 <para>  
 <systemitem role="package">git</systemitem> - this package provides popular  
 version control system designed to handle very large projects with speed and  
 efficiency; it is used for many high profile open source projects, most notably  
 the Linux kernel.  (see <citerefentry> <refentrytitle>git</refentrytitle>  
 <manvolnum>1</manvolnum> </citerefentry>,  
 <filename>/usr/share/doc/git-doc/index.html</filename>)  
384  </para>  </para>
385  </listitem>  </listitem>
 </itemizedlist>  
 <para>  
 The following is the <emphasis>very important</emphasis> documentation which  
 you should read along with this document:  
 </para>  
 <itemizedlist>  
386  <listitem>  <listitem>
387  <para>  <para>
388  <systemitem role="package">debian-policy</systemitem> - the <ulink url="&debian-policy;">Debian Policy  <systemitem role="package">perl</systemitem> - Perl is one of the most used
389  Manual</ulink> includes explanations of the structure and contents of the  interpreted scripting languages on today's Unix-like systems, often referred to
390  Debian archive, several OS design issues, the Filesystem Hierarchy Standard  as Unix's Swiss Army Chainsaw. (See <citerefentry>
391  (which says where each file and directory should be) etc.  For you, the most  <refentrytitle>perl</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.)
 important thing is that it describes requirements that each package must  
 satisfy to be included in the distribution (see  
 <ulink url="&policy-pdf;">local PDF copy</ulink>).  
392  </para>  </para>
393  </listitem>  </listitem>
394  <listitem>  <listitem>
395  <para>  <para>
396  <systemitem role="package">developers-reference</systemitem> - the <ulink url="&developers-reference;">Debian Developer's  <systemitem role="package">python</systemitem> - Python is another of the most
397  Reference</ulink> describes all matters not specifically about the technical  used interpreted scripting languages on the Debian system, combining
398  details of packaging, like the structure of the archive, how to rename, orphan,  remarkable power with very clear syntax. (See <citerefentry>
399  pick up packages, how to do NMUs, how to manage bugs, best packaging practices,  <refentrytitle>python</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.)
 when and where to upload etc.  (see  
 <ulink url="&developers-reference-pdf;">local PDF copy</ulink>).  
400  </para>  </para>
401  </listitem>  </listitem>
402  <listitem>  <listitem>
403  <para>  <para>
404  <ulink url="&autotools-tutorial;">Autotools  <systemitem role="package">quilt</systemitem> - this package helps you to
405  Tutorial</ulink> provides very good tutorial for <ulink url="&gnu-build-system;">the GNU Build System known  manage large numbers of patches by keeping track of the changes each patch
406  as the GNU Autotools</ulink> whose most important components are Autoconf,  makes. Patches can be applied, un-applied, refreshed, and more.  (See
407  Automake, Libtool, and gettext.  <citerefentry> <refentrytitle>quilt</refentrytitle> <manvolnum>1</manvolnum></citerefentry>,
408    <ulink url="&quilt-pdf;">quilt.pdf</ulink>.)
409  </para>  </para>
410  </listitem>  </listitem>
411  <listitem>  <listitem>
412  <para>  <para>
413  <systemitem role="package">gnu-standards</systemitem> - this package contains  <systemitem role="package">xutils-dev</systemitem> - some programs, usually
414  two pieces of documentation from the GNU project: <ulink url="&gnu-standard;">GNU Coding  those made for X11, also use these programs to generate
415  Standards</ulink>, and <ulink url="&gnu-maintainer;">Information for  <filename>Makefile</filename> files from sets of macro functions.  (See
416  Maintainers of GNU Software</ulink>.  Although Debian does not require these to  <citerefentry> <refentrytitle>imake</refentrytitle> <manvolnum>1</manvolnum>
417  be followed, these are still helpful as guidelines and common sense.  (see  </citerefentry>, <citerefentry> <refentrytitle>xmkmf</refentrytitle>
418  <filename>/usr/share/doc/gnu-standards/standards.html</filename> and  <manvolnum>1</manvolnum> </citerefentry>.)
 <filename>/usr/share/doc/gnu-standards/maintain.html</filename>).  
419  </para>  </para>
420  </listitem>  </listitem>
421  </itemizedlist>  </itemizedlist>
422  <para>  <para>
 If this document contradicts with what the Debian Policy Manual and Debian  
 Developer's Reference describes, they are correct.  Please file a bug report on  
 the <systemitem role="package">maint-guide</systemitem> package.  
 </para>  
 <para>  
423  The short descriptions that are given above only serve to introduce you to what  The short descriptions that are given above only serve to introduce you to what
424  each package does.  Before continuing please thoroughly read the documentation  each package does.  Before continuing please read the documentation
425  of each program, at least, for the standard usage.  It may seem like heavy  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.  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>  </para>
431  </section>  </section>
432  <section id="terminology"><title>Basic terminology</title>  <section id="needdocs"><title>Documentation needed for development</title>
433  <para>  <para>
434  There are two types of packages.  The following is the <emphasis>very important</emphasis> documentation which
435    you should read along with this document:
436  </para>  </para>
437  <itemizedlist>  <itemizedlist>
438  <listitem>  <listitem>
439  <para>  <para>
440  <emphasis role="strong">source package</emphasis>: A source package is a set of  <systemitem role="package">debian-policy</systemitem> - the <ulink url="&debian-policy;">Debian Policy
441  files which contain code and data which you can compile and process into  Manual</ulink> includes explanations of the structure and contents of the
442  execution programs and formatted documents.  It usually comes as a combination  Debian archive, several OS design issues, the <ulink url="&fhs;">Filesystem Hierarchy Standard</ulink>
443  of <filename>*.orig.tar.gz</filename>, <filename>*.debian.tar.gz</filename> (or  (FHS, which says where each file and directory should be), etc.  For you, the most
444  <filename>*.diff.gz</filename>), and <filename>*.dsc</filename>.  Some other  important thing is that it describes requirements that each package must
445  archive and compression methods may be used, too.  satisfy to be included in the distribution. (See the local copies of
446    <ulink url="&policy-pdf;">policy.pdf</ulink> and <ulink url="&fhs-pdf;">fhs-2.3.pdf</ulink>.)
447  </para>  </para>
448  </listitem>  </listitem>
449  <listitem>  <listitem>
450  <para>  <para>
451  <emphasis role="strong">binary package</emphasis>: A binary package contains  <systemitem role="package">developers-reference</systemitem>
452  execution programs and formatted documents.  It usually comes as  - the <ulink url="&developers-reference;">Debian Developer's Reference</ulink>
453  <filename>*.deb</filename> for the normal Debian system and as  describes all matters not specifically about the technical
454  <filename>*.udeb</filename> for the Debian Installer.  details of packaging, like the structure of the archive, how to rename, orphan,
455    or adopt packages, how to do NMUs, how to manage bugs, best packaging practices,
456    when and where to upload etc.  (See the local copy of
457    <ulink url="&developers-refpdf;">developers-reference.pdf</ulink>.)
458  </para>  </para>
459  </listitem>  </listitem>
460  </itemizedlist>  </itemizedlist>
461  <para>  <para>
462  Don't mix terms like source of the program and the source package of the  The following is the <emphasis>important</emphasis> documentation which
463  program!  you should read along with this document:
 </para>  
 <para>  
 There are several role names used around Debian.  
464  </para>  </para>
465  <itemizedlist>  <itemizedlist>
466  <listitem>  <listitem>
467  <para>  <para>
468  <emphasis role="strong">upstream author</emphasis>: The person who made the  <ulink url="&autotools-tutorial;">Autotools
469  original program.  Tutorial</ulink> provides a very good tutorial for <ulink url="&gnu-build-system;">the GNU Build System known
470  </para>  as the GNU Autotools</ulink> whose most important components are Autoconf,
471  </listitem>  Automake, Libtool, and gettext.
 <listitem>  
 <para>  
 <emphasis role="strong">upstream maintainer</emphasis>: The person who  
 currently maintains the program.  
 </para>  
 </listitem>  
 <listitem>  
 <para>  
 <emphasis role="strong">maintainer</emphasis>: The person who makes Debian  
 package of the program.  
 </para>  
 </listitem>  
 <listitem>  
 <para>  
 <emphasis role="strong">sponsor</emphasis>: The person who helps maintainers to  
 upload packages to the official Debian Package Archive after checking their  
 contents.  
 </para>  
 </listitem>  
 <listitem>  
 <para>  
 <emphasis role="strong">mentor</emphasis>: The person who helps novice  
 maintainers on packaging etc.  
472  </para>  </para>
473  </listitem>  </listitem>
474  <listitem>  <listitem>
475  <para>  <para>
476  <emphasis role="strong">Debian Developer</emphasis> (DD): The person who is a  <systemitem role="package">gnu-standards</systemitem> - this package contains
477  member of Debian.  He has full upload right to the official Debian Package  two pieces of documentation from the GNU project:
478  Archive.  <ulink url="&gnu-standard;">GNU Coding Standards</ulink>, and
479    <ulink url="&gnu-maintainer;">Information for Maintainers of GNU Software</ulink>.
480    Although Debian does not require these to
481    be followed, these are still helpful as guidelines and common sense.
482    (See the local copies of
483    <ulink url="&gnu-standard-pdf;">standards.pdf</ulink> and
484    <ulink url="&gnu-maintainer-pdf;">maintain.pdf</ulink>.)
485  </para>  </para>
486  </listitem>  </listitem>
487  <listitem>  </itemizedlist>
488  <para>  <para>
489  <emphasis role="strong">Debian Maintainer</emphasis> (DM): The person who has  If this document contradicts any of the documents mentioned above, they
490  limited upload right to the official Debian Package Archive.  are correct.  Please file a bug report on the
491    <systemitem role="package">maint-guide</systemitem> package using
492    <command>reportbug</command>.
493  </para>  </para>
494  </listitem>  </section>
495  </itemizedlist>  <section id="helpme"><title>Where to ask for help</title>
496  <para>  <para>
497  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.  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 source version</emphasis>: The upstream source  files in <filename>/usr/share/doc/<replaceable>package</replaceable></filename> for all pertinent packages
 version is referred as <literal><replaceable>version</replaceable></literal>.  
503  </para>  </para>
504  </listitem>  </listitem>
505  <listitem>  <listitem>
506  <para>  <para>
507  <emphasis role="strong">Debian revision</emphasis>: The revision by Debian on  contents of <literal><command>man</command> <replaceable>command</replaceable></literal> for all pertinent commands
 package is referred as <literal><replaceable>revision</replaceable></literal>.  
508  </para>  </para>
509  </listitem>  </listitem>
510  <listitem>  <listitem>
511  <para>  <para>
512  <emphasis role="strong">Debian package version</emphasis>: The Debian package  contents of <literal><command>info</command> <replaceable>command</replaceable></literal> for all pertinent commands
 version is referred as the following.  
513  </para>  </para>
514  <itemizedlist>  </listitem>
515  <listitem>  <listitem>
516  <para>  <para>
517  <literal><replaceable>version</replaceable></literal> for the native Debian  contents of <ulink url="&debian-mentors-ldo;">debian-mentors@lists.debian.org mailing list archive</ulink>
 binary package and for the Debian source package.  
518  </para>  </para>
519  </listitem>  </listitem>
520  <listitem>  <listitem>
521  <para>  <para>
522  <literal><replaceable>version</replaceable>-<replaceable>revision</replaceable></literal>  contents of <ulink url="&debian-devel-ldo;">debian-devel@lists.debian.org mailing list archive</ulink>
 for the non-native Debian binary package.  
523  </para>  </para>
524  </listitem>  </listitem>
525  </itemizedlist>  </itemizedlist>
 </listitem>  
 </itemizedlist>  
526  <para>  <para>
527  Please read the other manuals if you need more details on terminology.  You can use web search engines more effectively by including search strings
528  </para>  such as <literal>site:lists.debian.org</literal> to limit the domain.
 </section>  
 <section id="debiandeveloper"><title>Official Debian Developer</title>  
 <para>  
 You can not become an official  
 <emphasis role="strong">Debian Developer</emphasis> (DD) over night because it  
 takes more than technical skill.  Please do not be discouraged by this.  If it  
 is useful to others, you can still upload your package either as a  
 <emphasis role="strong">maintainer</emphasis> through a  
 <emphasis role="strong">sponsor</emphasis> or as a  
 <emphasis role="strong">Debian Maintainer</emphasis>.  
 </para>  
 <para>  
 See  
 <ulink url="&nm-do;">Debian New Maintainer site</ulink> and  
 <ulink url="&debianmentorfaq;">Debian Mentors FAQ</ulink> for more.  
529  </para>  </para>
530  <para>  <para>
531  Please note that you do not need to create any new package to become an  Making a small test package is a good way to learn details of packaging.
532  official Debian Developer.  Contributing to the existing packages can provide a  Inspecting existing well maintained packages is the best way to learn how other
533  path to become an official Debian Developer too.  There are many packages  people make packages.
 waiting for good maintainers (see <xref linkend="choose"/> ).  
534  </para>  </para>
 </section>  
 <section id="helpme"><title>Where to ask for help</title>  
535  <para>  <para>
536  Before you decide to ask your question in some public place, please read the fine documentation.  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  files in <filename>/usr/share/doc/dpkg</filename>  <ulink url="&debian-mentors-ldo;">debian-mentors@lists.debian.org mailing list</ulink>. (This mailing list is for the novice.)
 </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  
543  </para>  </para>
544  </listitem>  </listitem>
545  <listitem>  <listitem>
546  <para>  <para>
547  contents of "<literal><command>info</command> <replaceable>command</replaceable></literal>" for all pertinent commands  <ulink url="&debian-devel-ldo;">debian-devel@lists.debian.org mailing list</ulink>. (This mailing list is for the expert.)
548  </para>  </para>
549  </listitem>  </listitem>
550  <listitem>  <listitem>
551  <para>  <para>
552  contents of <ulink url="&nm-do;">Debian New Maintainer site</ulink>  <ulink url="&irc-debian;">IRC</ulink> such as <literal>#debian-mentors</literal>.
553  </para>  </para>
554  </listitem>  </listitem>
555  <listitem>  </itemizedlist>
556  <para>  <para>
557  contents of <ulink url="&debianmentorfaq;">Debian Mentors FAQ</ulink>  The more experienced Debian developers will gladly help you, if you ask
558    properly after making your required efforts.
559  </para>  </para>
 </listitem>  
 <listitem>  
560  <para>  <para>
561  contents of <ulink url="&debian-mentors-ldo;">debian-mentors@lists.debian.org mailing list archive</ulink>  When you receive a bug report (yes, actual bug reports!), you will know that it
562    is time for you to dig into the
563    <ulink url="&bts;">Debian Bug Tracking System</ulink>
564    and read the documentation there, to be able to
565    deal with the reports efficiently.  I highly recommend reading the
566    <ulink url="&devref-bug-handling;">Debian Developer's Reference, 5.8.
567    "Handling bugs"</ulink>.
568  </para>  </para>
 </listitem>  
 <listitem>  
569  <para>  <para>
570  contents of <ulink url="&debian-devel-ldo;">debian-devel@lists.debian.org mailing list archive</ulink>  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>
 </listitem>  
 </itemizedlist>  
575  <para>  <para>
576  Please consider to use web search engine effectively by including search string  Relax and be ready for bug reports, because there is a lot more work to be done
577  such as "<literal>site:lists.debian.org</literal>" to limit the domain.  before your package will be fully in line with Debian policies and its best
578    practice guidelines (once again, read the <emphasis>real
579    documentation</emphasis> for details).  Good luck!
580  </para>  </para>
581    </section>
582    </chapter>
583    <chapter id="first"><title>First steps</title>
584  <para>  <para>
585  Making a small test package is good way to learn details of packaging.  Let's start by creating a package of your own (or, even better,
586  Inspecting existing well maintained packages is the best way to learn how other  adopting an existing one).
 people make packages.  
587  </para>  </para>
588    <section id="workflow"><title>Workflow of the Debian package building</title>
589  <para>  <para>
590  If you still have questions about packaging that you couldn't find answers to  If you are making a Debian package with an upstream program,
591  in the available documentation and web resources, you can ask them interactively.  typical workflow of the Debian package building involves generating several
592    specifically named files for each step as the following.
593  </para>  </para>
594  <itemizedlist>  <itemizedlist>
595  <listitem>  <listitem>
596  <para>  <para>We obtain an upstream program file usually in a compressed tar format.</para>
597  <ulink url="&debian-mentors-ldo;">debian-mentors@lists.debian.org mailing list</ulink>. (This mailing list is for the novice.)    <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  <ulink url="&debian-devel-ldo;">debian-devel@lists.debian.org mailing list</ulink>. (This mailing list is for the expert.)  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  <ulink url="&irc-debian;">IRC</ulink> such as <literal>#debian-mentors</literal>.  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  The more experienced Debian developers will gladly help you, but do read at  Please note that the character separating
626  least some of the documentation before asking a question!  <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  When you receive a bug report (yes, actual bug reports!), you will know that it  Here,
632  is time for you to dig into the  <literal><replaceable>package</replaceable></literal> part of the file name is substituted by the
633  <ulink url="&bts;">Debian Bug Tracking System</ulink>  <emphasis role="strong">package name</emphasis>,
634  and read the documentation there, to be able to  <literal><replaceable>version</replaceable></literal> part of it is substituted by the
635  deal with the reports efficiently.  I highly recommend reading the  <emphasis role="strong">upstream version</emphasis>,
636  <ulink url="&devref-bug-handling;">Debian Developer's Reference, 5.8.  'Handling bugs'</ulink>.  <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  Even if it all worked well, it's time to start praying.  Why?  Because in just  If you are making a Debian specific package without an upstream program instead,
653  a few hours (or days) users from all around the world will start to use your  typical workflow of the Debian package building is simpler.
 package, and if you made some critical error you'll get mailbombed by numerous  
 angry Debian users...  Just kidding.  :-)  
654  </para>  </para>
655    <itemizedlist>
656    <listitem>
657  <para>  <para>
658  Relax and be ready for bug reports, because there is a lot more work to be done  We create a native Debian source package in the <literal>3.0 (native)</literal>
659  before your package will be fully in line with Debian policies and its best  format using a single compressed tar file in which all files are included.
 practice guidelines (once again, read the <emphasis>real  
 documentation</emphasis> for details).  Good luck!  
660  </para>  </para>
661  </section>    <itemizedlist>
662  </chapter>    <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>.tar.gz</literal></listitem>
663  <chapter id="first"><title>First steps</title>    <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>.dsc</literal></listitem>
664      </itemizedlist>
665    </listitem>
666    <listitem>
667    <para>
668    We build Debian binary packages from the native Debian source package.
669    </para>
670      <itemizedlist>
671      <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>_<replaceable>arch</replaceable>.deb</literal></listitem>
672      </itemizedlist>
673    </listitem>
674    </itemizedlist>
675  <para>  <para>
676  Let's try to make your own package (or, better even, adopt an existing one).  In the following, each step of this is explained with detailed examples.
677  </para>  </para>
678    </section>
679  <section id="choose"><title>Choose your program</title>  <section id="choose"><title>Choose your program</title>
680  <para>  <para>
681  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 610  using the following. Line 687  using the following.
687  <para>the <command>aptitude</command> command</para>  <para>the <command>aptitude</command> command</para>
688  </listitem>  </listitem>
689  <listitem>  <listitem>
690  <para><ulink url="&packages-do;">Debian packages</ulink> web page</para>  <para>the <ulink url="&packages-do;">Debian packages</ulink> web page</para>
691  </listitem>  </listitem>
692  <listitem>  <listitem>
693  <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>
694  </listitem>  </listitem>
695  </itemizedlist>  </itemizedlist>
696  <para>  <para>
697  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
698  <emphasis role="strong">orphaned</emphasis> -- if its maintainer is set to  <emphasis role="strong">orphaned</emphasis> (that is, if its
699  <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>),
700  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
701  maintainer has filed a Request for Adoption  adopt a package whose maintainer has filed a Request for Adoption
702  (<emphasis role="strong">RFA</emphasis>).  (<emphasis role="strong">RFA</emphasis>).<footnote> <para>See
703    <ulink url="&devref-adopt;">Debian Developer's Reference 5.9.5.
704    "Adopting a package"</ulink>.</para> </footnote>
705  </para>  </para>
706  <para>  <para>
707  There are several package ownership status resorces.  There are several package ownership status resources.
708  </para>  </para>
709  <itemizedlist>  <itemizedlist>
710  <listitem>  <listitem>
711  <para> <ulink url="&wnpp-do;">Work-Needing and Prospective Packages</ulink> </para>  <para> <ulink url="&wnpp-do;">Work-Needing and Prospective Packages</ulink> </para>
712  </listitem>  </listitem>
713  <listitem>  <listitem>
714  <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>
715  </listitem>  </listitem>
716  <listitem>  <listitem>
717  <para> <ulink url="&wnpp-dn;">Debian Packages that Need Lovin'</ulink> </para>  <para> <ulink url="&wnpp-dn;">Debian Packages that Need Lovin'</ulink> </para>
718  </listitem>  </listitem>
719  <listitem>  <listitem>
720  <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>
721  </listitem>  </listitem>
722  </itemizedlist>  </itemizedlist>
723  <para>  <para>
# Line 647  for most kinds of programs, and the numb Line 726  for most kinds of programs, and the numb
726  archive is much larger than that of contributors with upload rights.  Thus,  archive is much larger than that of contributors with upload rights.  Thus,
727  contributions to packages already in the archive are far more appreciated (and  contributions to packages already in the archive are far more appreciated (and
728  more likely to receive sponsorship) by other developers <footnote><para> Having  more likely to receive sponsorship) by other developers <footnote><para> Having
729  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
730  packaging.  </para> </footnote>.  You can do that in various ways.  packaging.  </para> </footnote>.  You can contribute in various ways.
731  </para>  </para>
732  <itemizedlist>  <itemizedlist>
733  <listitem>  <listitem>
# Line 678  If you are able to adopt the package, ge Line 757  If you are able to adopt the package, ge
757  examine them.  This document unfortunately doesn't include comprehensive  examine them.  This document unfortunately doesn't include comprehensive
758  information about adopting packages.  Thankfully you shouldn't have a hard time  information about adopting packages.  Thankfully you shouldn't have a hard time
759  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
760  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
761  applicable for your case.  applicable for your case.
762  </para>  </para>
763  <para>  <para>
# Line 688  as follows: Line 767  as follows:
767  <itemizedlist>  <itemizedlist>
768  <listitem>  <listitem>
769  <para>  <para>
770  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
771  confirm its usefulness.  confirm its usefulness.
772  </para>  </para>
773  </listitem>  </listitem>
774  <listitem>  <listitem>
775  <para>  <para>
776  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
777  <ulink url="&wnpp-do;">Work-Needing and Prospective Packages</ulink> site.  <ulink url="&wnpp-do;">Work-Needing and Prospective Packages</ulink> site.
778  If no one else is working on it, file an ITP (Intent  If no one else is working on it, file an ITP (Intent
779  To Package) bug report to the <systemitem role="package">wnpp</systemitem>  To Package) bug report to the <systemitem role="package">wnpp</systemitem>
780  pseudo-package using <command>reportbug</command>.  If someone's already on it,  pseudo-package using <command>reportbug</command>.  If someone's already on it,
781  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
782  program that nobody maintains.  program that nobody is maintaining.
783  </para>  </para>
784  </listitem>  </listitem>
785  <listitem>  <listitem>
786  <para>  <para>
787  That program <emphasis role="strong">must have a license</emphasis>.  The software <emphasis role="strong">must have a license</emphasis>.
788  </para>  </para>
789  <itemizedlist>  <itemizedlist>
790  <listitem>  <listitem>
791  <para>  <para>
792  For the <literal>main</literal> section, it <emphasis role="strong">must be  For the <literal>main</literal> section, Debian Policy requires it
793  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
794  and <emphasis role="strong">that program must not require a package outside of  Guidelines</emphasis> (<ulink url="&dfsg;">DFSG</ulink>)
795  <literal>main</literal></emphasis> for compilation or execution as required by  and <emphasis role="strong">not to require a package outside of
796  the Debian Policy.  This is desired case.  <literal>main</literal></emphasis> for compilation or execution.  This
797    is the desired case.
798  </para>  </para>
799  </listitem>  </listitem>
800  <listitem>  <listitem>
801  <para>  <para>
802  For the <literal>contrib</literal> section, it must be compliant to all the  For the <literal>contrib</literal> section, it must comply with the
803  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
804  compilation or execution.  compilation or execution.
805  </para>  </para>
806  </listitem>  </listitem>
807  <listitem>  <listitem>
808  <para>  <para>
809  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
810  the DFSG but it <emphasis role="strong">must be distributable</emphasis>.  with the DFSG but it <emphasis role="strong">must be distributable</emphasis>.
811  </para>  </para>
812  </listitem>  </listitem>
813  </itemizedlist>  <listitem>
814  <para>  <para>
815  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
816    <ulink url="&debian-legal-ldo;">debian-legal@lists.debian.org</ulink>
817  and ask for advice.  and ask for advice.
818  </para>  </para>
819  </listitem>  </listitem>
820    </itemizedlist>
821    </listitem>
822  <listitem>  <listitem>
823  <para>  <para>
824  That program certainly should <emphasis role="strong">not</emphasis> run setuid  The program should <emphasis role="strong">not</emphasis> introduce security
825  root, or even better - it shouldn't need to be setuid or setgid to anything.  and maintenance concerns to the Debian system.
826  </para>  </para>
827  </listitem>  <itemizedlist>
828  <listitem>  <listitem>
829  <para>  <para>
830  That program should not be a daemon, or something that goes in  The program should be well documented and its code needs to be understandable
831  <filename>*/sbin</filename> directories, or open a port as root.  (i.e.  not obfuscated).
832  </para>  </para>
833  </listitem>  </listitem>
834  <listitem>  <listitem>
835  <para>  <para>
836  That program should result in binary executable form, libraries are harder to  You should contact the program's author(s) to check if they agree with packaging it
837  handle.  and are amicable to Debian.  It is important to be able to consult with the author(s)
838    in case of any problems with the program, so don't try to package
839    unmaintained software.
840  </para>  </para>
841  </listitem>  </listitem>
842  <listitem>  <listitem>
843  <para>  <para>
844  That program should be well documented and its code needs to be understandable  The program certainly should <emphasis role="strong">not</emphasis> run setuid
845  (i.e.  not obfuscated).  root, or even better, it shouldn't need to be setuid or setgid to anything.
846  </para>  </para>
847  </listitem>  </listitem>
848  <listitem>  <listitem>
849  <para>  <para>
850  You should contact program's author(s) to check if they agree with packaging it  The program should not be a daemon, or go in an
851  and amicable to Debian.  It is important to be able to consult with author(s)  <filename>*/sbin</filename> directory, or open a port as root.
852  about the program in case of any program specific problems, so don't try to  </para>
853  package unmaintained pieces of software.  </listitem>
854    </itemizedlist>
855    </listitem>
856    </itemizedlist>
857    <para>
858    Of course, the last one is just a safety measures, and intended to save you from
859    enraging users if you do something wrong in some setuid daemon...  When you gain
860    more experience in packaging, you'll be able to package such software.
861    </para>
862    <para>
863    As a new maintainer, you are encouraged to get some experience in packaging
864    with easier packages and discouraged from creating complicated packages.
865  </para>  </para>
866    <itemizedlist>
867    <listitem><para>Simple packages</para>
868    <itemizedlist>
869      <listitem><para>single binary package, arch = all (collection of data such as wallpaper graphics)</para></listitem>
870      <listitem><para>single binary package, arch = all (executables written in the POSIX shell language)</para></listitem>
871      <listitem><para>single binary package, arch = all (executables written in interpreter languages)</para></listitem>
872    </itemizedlist>
873    </listitem>
874    <listitem><para>Intermediate complexity packages</para>
875    <itemizedlist>
876      <listitem><para>single binary package, arch = any (executables written in compiler languages such as C and C++)</para></listitem>
877      <listitem><para>multiple binary packages, arch = any + all (packages for executables + documentation)</para></listitem>
878      <listitem><para>upstream source in a format other than <filename>tar.gz</filename> or <filename>tar.bz2</filename></para></listitem>
879      <listitem><para>upstream source containing undistributable contents</para></listitem>
880    </itemizedlist>
881    </listitem>
882    <listitem><para>High complexity packages</para>
883    <itemizedlist>
884      <listitem><para>interpreter module package used by other packages</para></listitem>
885      <listitem><para>generic library package used by other packages</para></listitem>
886      <listitem><para>multiple binary packages containing a library package</para></listitem>
887      <listitem><para>source package with multiple upstream sources</para></listitem>
888      <listitem><para>kernel module packages</para></listitem>
889      <listitem><para>kernel patch packages</para></listitem>
890      <listitem><para>any package with non-trivial maintainer scripts</para></listitem>
891    </itemizedlist>
892  </listitem>  </listitem>
893  </itemizedlist>  </itemizedlist>
894  <para>  <para>
895  Of course, these things are just safety measures, and intended to save you from  Packaging high complexity packages is not too hard, but it requires a bit more
896  raging users if you do something wrong in some setuid daemon...  When you gain  knowledge. You should seek specific guidances for every complexity. For
897  some more experience in packaging, you'll be able to package such packages.  example, some interpreter languages have their policy.
898    </para>
899    <itemizedlist>
900    <listitem><para><ulink url="&policy-perl;">Perl policy</ulink></para></listitem>
901    <listitem><para><ulink url="&policy-python;">Python policy</ulink></para></listitem>
902    <listitem><para><ulink url="&policy-java;">Java policy</ulink></para></listitem>
903    </itemizedlist>
904    <para>
905    There is another old Latin saying: <emphasis>Fabricando fit faber</emphasis>
906    (Practice makes perfect).  It is <emphasis>highly</emphasis> recommended to
907    practice and experiment all the steps of Debian packaging with simple packages
908    while reading this tutorial.  A trivial upstream tarball
909    <filename>hello-sh-1.0.tar.gz</filename> created with the following may offer
910    you a good starting point.<footnote><para>Do not worry about missing
911    <filename>Makefile</filename>.  You can install the <command>hello</command>
912    command by simply using <command>debhelper</command> as in
913    <xref linkend="install"/>, or by modifying the upstream source to add a new
914    <filename>Makefile</filename> with the <literal>install</literal> target as in
915    <xref linkend="modify"/>.</para></footnote>
916  </para>  </para>
917    <screen>
918    $ mkdir -p hello-sh/hello-sh-1.0; cd hello-sh/hello-sh-1.0
919    $ cat &gt; hello &lt;&lt;EOF
920    #!/bin/sh
921    # (C) 2011 Foo Bar, GPL2+
922    echo "Hello!"
923    EOF
924    $ chmod 755 hello
925    $ cd ..
926    $ tar -cvzf hello-sh-1.0.tar.gz hello-sh-1.0
927    </screen>
928  </section>  </section>
929  <section id="getit"><title>Get the program, and try it out</title>  <section id="getit"><title>Get the program, and try it out</title>
930  <para>  <para>
931  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.
932  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
933  author's homepage.  Sources for free Unix programs usually come in  author's homepage.  Sources for free Unix programs usually come in
934  <command>tar</command>+<command>gzip</command> format with extension  <command>tar</command>+<command>gzip</command> format with the extension
935  <filename>.tar.gz</filename>, or  <filename>.tar.gz</filename>,
936  <command>tar</command>+<command>bzip2</command> format with extension  <command>tar</command>+<command>bzip2</command> format with the extension
937  <filename>.tar.bz2</filename>.  These usually contain the subdirectory called  <filename>.tar.bz2</filename>, or
938  <filename><replaceable>programname</replaceable>-<replaceable>version</replaceable></filename>  <command>tar</command>+<command>xz</command> format with the extension
939  in them and all the sources under it.  <filename>.tar.xz</filename>.  These usually contain a directory called
940    <filename><replaceable>package</replaceable>-<replaceable>version</replaceable></filename>
941    with all the sources inside.
942  </para>  </para>
943  <para>  <para>
944  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,
945  Subversion, or CVS repository, you need to get it with <literal>git  Subversion, or CVS, you need to get it with <literal>git
946  clone</literal>, <literal>svn co</literal>, or <literal>cvs co</literal> and  clone</literal>, <literal>svn co</literal>, or <literal>cvs co</literal> and
947  repack it into <command>tar</command>+<command>gzip</command> format by  repack it into <command>tar</command>+<command>gzip</command> format yourself
948  yourself using the <literal>--exclude-vcs</literal> option.  by using the <literal>--exclude-vcs</literal> option.
949  </para>  </para>
950  <para>  <para>
951  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
952  filename ends in <filename>.Z</filename> or  filename ends in <filename>.Z</filename> or
953  <filename>.zip</filename><footnote><para> You can identify the archive format  <filename>.zip</filename><footnote><para> You can identify the archive format
954  using the <command>file</command> command when the file extension is not  using the <command>file</command> command when the file extension is not
955  enough.  </para> </footnote>), unpack it with appropriate tools and repack it,  enough.  </para> </footnote>), you should also unpack it with the
956  too.  appropriate tools and repack it.
957  </para>  </para>
958  <para>  <para>
959  As an example, I'll use a program called <command>gentoo</command>, an X GTK+  If your program's source comes with some contents which do not comply with
960  file manager.<footnote><para> This program is already packaged.  DFSG, you should also unpack it to remove such contents and repack it with a
961  <ulink url="&gentoo-package;">Current  modified upstream version containg <literal>dfsg</literal>.
962  version</ulink> has changed substantially from the version 0.9.12 in the  </para>
963  following examples.</para> </footnote>  <para>
964    As an example, I'll use a program called <command>gentoo</command>, a GTK+
965    file manager.
966    <footnote><para> This program is already packaged. The
967    <ulink url="&gentoo-package;">current version</ulink> uses Autotools as its
968    build structure and is substantially different from the following examples,
969    which were based on version 0.9.12.</para>
970    </footnote>
971  </para>  </para>
972  <para>  <para>
973  Create a subdirectory under your home directory named  Create a subdirectory under your home directory named
974  <filename>debian</filename> or <filename>deb</filename> or anything you find  <filename>debian</filename> or <filename>deb</filename> or anything you find
975  appropriate (e.g.  just <filename>~/gentoo</filename> would do fine in this  appropriate (e.g.  just <filename>~/gentoo</filename> would do fine in this
976  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
977  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
978  <emphasis>irrelevant</emphasis> ones, because there will most probably be  messages, even <emphasis>irrelevant</emphasis> ones, because other
979  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
980  not ignore those anomalies.  On your console screen, you should see the  may have problems unpacking them.  Your shell command line may look
981  following.  something like this:
982  </para>  </para>
983  <screen>  <screen>
984  $ mkdir ~/gentoo ; cd ~/gentoo  $ mkdir ~/gentoo ; cd ~/gentoo
# Line 833  Now you have another subdirectory, calle Line 993  Now you have another subdirectory, calle
993  Change to that directory and <emphasis>thoroughly</emphasis> read the provided  Change to that directory and <emphasis>thoroughly</emphasis> read the provided
994  documentation.  Usually there are files named <filename>README*</filename>,  documentation.  Usually there are files named <filename>README*</filename>,
995  <filename>INSTALL*</filename>, <filename>*.lsm</filename> or  <filename>INSTALL*</filename>, <filename>*.lsm</filename> or
996  <filename>*.html</filename>.  You must find instructions on how to correctly  <filename>*.html</filename>.  You must find instructions on how to
997  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
998  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
999  that, but more on that later in <xref linkend="destdir"/> ).  that, but more on that later in <xref linkend="destdir"/>).
1000    </para>
1001    <para>
1002    You should start packaging with a completely clean (pristine) source directory,
1003    or simply with freshly unpacked sources.
1004  </para>  </para>
1005    </section>
1006    <section id="simplemake"><title>Simple build systems</title>
1007  <para>  <para>
1008  Simple programs come with a <filename>Makefile</filename> file in them and can  Simple programs usually come with a <filename>Makefile</filename> and can
1009  be compiled simply with <literal>make</literal>.<footnote><para>  be compiled just by invoking <literal>make</literal>.<footnote><para>
1010  Many modern programs come with a script <filename>configure</filename> which  Many modern programs come with a script <filename>configure</filename> which
1011  creates a <filename>Makefile</filename> file customized for your system upon  when executed creates a <filename>Makefile</filename> customized for
1012  its execution.</para></footnote> Some of them support  your system.</para></footnote> Some of them support
1013  <literal>make check</literal>, which runs included self-checks.  Installation  <literal>make check</literal>, which runs included self-tests.  Installation
1014  to the destination directories is usually done with <literal>make  to the destination directories is usually done with <literal>make
1015  install</literal>.  install</literal>.
1016  </para>  </para>
# Line 859  there's even a <literal>make uninstall</ Line 1025  there's even a <literal>make uninstall</
1025  all the installed files.  all the installed files.
1026  </para>  </para>
1027  </section>  </section>
1028  <section id="portable"><title>Free portable programs</title>  <section id="portable"><title>Popular portable build systems</title>
1029  <para>  <para>
1030  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
1031  <ulink url="&cxx;">C++</ulink> languages.  Many of  <ulink url="&cxx;">C++</ulink> languages.  Many of these use Autotools or
1032  these use Autotools or CMake to make them portable across different platforms.  CMake to make them portable across different platforms.  These build tools need
1033  These tools are used to generate <filename>Makefile</filename> and other  to be used to generate the <filename>Makefile</filename> and other
1034  required source files.  Then, such programs are built with usual <literal>make;  required source files first.  Then, such programs are built using the usual
1035  make install</literal>.  <literal>make; make install</literal>.
1036  </para>  </para>
1037  <para>  <para>
1038  <ulink url="&gnu-build-system;">Autotools</ulink>  <ulink url="&gnu-build-system;">Autotools</ulink> is the GNU build
1039  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>,
1040    <ulink url="&automake;">Automake</ulink>,
1041    <ulink url="&libtool;">Libtool</ulink>, and
1042    <ulink url="&gettext;">gettext</ulink>.  You can recognize
1043  such sources by the <filename>configure.ac</filename>,  such sources by the <filename>configure.ac</filename>,
1044  <filename>Makefile.am</filename>, and <filename>Makefile.in</filename> files.  <filename>Makefile.am</filename>, and <filename>Makefile.in</filename> files.
1045  <footnote><para> See <ulink url="&autotools-tutorial;">Autotools Tutorial</ulink>  <footnote><para>Autotools is too big to deal in this small tutorial. This
1046  and <filename>/usr/share/doc/autotools-dev/README.Debian.gz</filename>.  </para> </footnote>  section is meant to provide keywords and references only.  Please make sure to read the
1047    <ulink url="&autotools-tutorial;">Autotools Tutorial</ulink> and
1048    <ulink url="&autotools-readme;"/>, if you need to use it.</para></footnote>
1049  </para>  </para>
1050  <para>  <para>
1051  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
1052  <literal>autoreconf -i -f</literal> in the source and distributes this source  <literal>autoreconf -i -f</literal> in the source directory and
1053  with generated files.  distributes the generated files along with the source.
1054  </para>  </para>
1055  <screen>  <screen>
1056  configure.ac-----+-&gt; autoreconf -+-&gt; configure  configure.ac-----+-&gt; autoreconf -+-&gt; configure
# Line 898  files requires some knowledge of <comman Line 1069  files requires some knowledge of <comman
1069  <literal>info automake</literal>.  <literal>info automake</literal>.
1070  </para>  </para>
1071  <para>  <para>
1072  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
1073  distributed source and runs <literal>./configure &amp;&amp; make</literal> in  distributed source and runs <literal>./configure &amp;&amp; make</literal> in
1074  the source to compile program into a  the source directory to compile the program into a
1075  <command><replaceable>binary</replaceable></command>.  <command><replaceable>binary</replaceable></command> executable.
1076  </para>  </para>
1077  <screen>  <screen>
1078  Makefile.in -----+                +-&gt; Makefile -----+-&gt; make -&gt; <replaceable>binary</replaceable>  Makefile.in -----+                +-&gt; Makefile -----+-&gt; make -&gt; <replaceable>binary</replaceable>
# Line 912  config.h.in -----+                +-&gt; Line 1083  config.h.in -----+                +-&gt;
1083             config.guess --+             config.guess --+
1084  </screen>  </screen>
1085  <para>  <para>
1086  You can change many things in the <filename>Makefile</filename> file such as  You can change many things in the <filename>Makefile</filename>; for
1087  the default file install location using the command option, e.g.  instance you can change the default location for file installation
1088  <command>./configure --prefix=/usr</command>.  using the option <command>./configure --prefix=/usr</command>.
1089  </para>  </para>
1090  <para>  <para>
1091  Although it is not required, updating the <filename>configure</filename> and  Although it is not required, updating the <filename>configure</filename> and
1092  other files with <literal>autoreconf -i -f</literal> as the user may improve  other files with <literal>autoreconf -i -f</literal> may improve
1093  the compatibility of the source.  the compatibility of the source.
1094    <footnote><para>You can automate this by using
1095    <systemitem role="package">dh-autoreconf</systemitem> package.
1096    See <xref linkend="customrules"/>.</para></footnote>
1097  </para>  </para>
1098  <para>  <para>
1099  <ulink url="&cmake;">CMake</ulink> is an alternative  <ulink url="&cmake;">CMake</ulink> is an alternative
1100  build system.  You can notice such sources by the  build system.  You can recognize such sources by the
1101  <filename>CMakeLists.txt</filename> file.  <filename>CMakeLists.txt</filename> file.
1102  </para>  </para>
1103  </section>  </section>
1104  <section id="namever"><title>Package name and version</title>  <section id="namever"><title>Package name and version</title>
1105  <para>  <para>
1106  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
1107  or simply with freshly unpacked sources.  consider
1108    <emphasis role="strong">package name</emphasis> to be <literal>gentoo</literal> and
1109    <emphasis role="strong">upstream version</emphasis> to be <literal>0.9.12</literal>.
1110    These are used in the <filename>debian/changelog</filename> file described later in
1111    <xref linkend="changelog"/>, too.
1112    </para>
1113    <para>
1114    Although this simple approach works most of the times, you may need to adjust
1115    <emphasis role="strong">package name</emphasis> and
1116    <emphasis role="strong">upstream version</emphasis> by renaming the upstream
1117    source to follow the Debian Policy and the existing convention.
1118    </para>
1119    <para>
1120    You must choose the <emphasis role="strong">package name</emphasis>
1121    to consist only of lower case letters (<literal>a-z</literal>), digits
1122    (<literal>0-9</literal>), plus (<literal>+</literal>) and minus
1123    (<literal>-</literal>) signs, and periods (<literal>.</literal>). It must be
1124    at least two characters long, must start with an alphanumeric character, and
1125    must not be the same as existing ones.
1126    It is good idea to keep its length within 30 characters.
1127    <footnote><para>The default package name field length of <command>aptitude</command> is 30.  For more than 90% of packages, the package name is less than 24 characters.</para></footnote>
1128    </para>
1129    <!--
1130    Osamu's archive stat (2011-04-23, sid, kfreebsd-amd64):
1131    === stat for package name string length ===
1132    11 1947 36.9%   mode
1133    14 1717 54.7%  50% median
1134    23 611 91.0%   90%
1135    32 89 99.0%    99%
1136    41 12 99.9%    99.9%
1137    52 1 100.0%
1138    Previous 20 chars is becoming too short for 17% of packages
1139    Default aptitude setting display up to 30 chars (98.3%).
1140    -->
1141    <para>
1142    If upstream source uses generic words such as <literal>test-suite</literal> as
1143    its name, it is good idea to rename it not to contaminate name space for the
1144    package name and to identify its contents explicitly.
1145    <footnote><para>If you follow the
1146    <ulink url="&devref-newpackage;">Debian Developer's Reference 5.1. "New packages"</ulink>,
1147    the ITP process will usually catch this kind of issues.</para></footnote>
1148    </para>
1149    <para>
1150    You should choose the <emphasis role="strong">upstream version</emphasis>
1151    to consist only of
1152    alphanumerics (<literal>0-9A-Za-z</literal>), plus (<literal>+</literal>),
1153    tildes (<literal>~</literal>), and periods (<literal>.</literal>). It must
1154    start with a digit (<literal>0-9</literal>).  <footnote><para>This stricter
1155    rule should help you avoid confusing file names.</para></footnote>
1156    It is good idea to keep its length within 8 characters if possible.
1157    <footnote><para>The default version field length of <command>aptitude</command> is 10.  The Debian revision with preceding hyphen usually consumes 2.  For more than 80% of packages, the upstream version is less than 8 characters and the Debian revision is less than 2 characters.  For more than 90% of packages, the upstream version is less than 10 characters and the Debian revision is less than 3 characters.</para></footnote>
1158    </para>
1159    <!--
1160    Osamu's archive stat (2011-04-23, sid, kfreebsd-amd64):
1161    === stat for upstream version string length ===
1162    5 9765 60.2%  50% median and mode
1163    6 3765 73.3%
1164    7 2789 82.9%
1165    8 1158 86.9%
1166    9 501 88.6%
1167    10 773 91.3%  90%
1168    18 55 99.1%   99%
1169    27 11 99.9%    99.9
1170    35 6 100.0%
1171    === stat for debian revision string length ===
1172    1 22556 83.3%  50% median and mode
1173    2 1106 87.2%
1174    3 1312 91.7%   90%
1175    4 2127 99.1%   99%
1176    7 14 99.9%     99.9%
1177    
1178    aptitude display 10 = 8char for up + 1char (for -) + 1char for deb
1179    90chars as max for file name of binary debs (package+up+deb+arch+.deb)
1180    -->
1181    <para>
1182    If the upstream software does not use normal version system like
1183    <literal>2.30.32</literal> but uses some kind of date such as
1184    <literal>09Oct23</literal>, a random codename string or a VCS hash value as a part
1185    of version, make sure to remove them from the
1186    <emphasis role="strong">upstream version</emphasis>.  Such information can be
1187    recorded in the <filename>debian/changelog</filename> file.  If you need to
1188    invent a version string, use the <literal>YYYYMMDD</literal> format such as
1189    <literal>20110429</literal> as upstream version.  This ensures that
1190    <command>dpkg</command> properly sees later versions as upgrades.
1191    </para>
1192    <para>
1193    Version strings <footnote><para>Version strings may be
1194    <emphasis role="strong">upstream version</emphasis>
1195    (<literal><replaceable>version</replaceable></literal>),
1196    <emphasis role="strong">Debian revision</emphasis>
1197    (<literal><replaceable>revision</replaceable></literal>), or
1198    <emphasis role="strong">version</emphasis>
1199    (<literal><replaceable>version</replaceable>-<replaceable>revision</replaceable></literal>).
1200    See <xref linkend="newrevision"/> for how the
1201    <emphasis role="strong">Debian revision</emphasis> is incremented.
1202    </para></footnote>
1203    can be compared with <citerefentry> <refentrytitle>dpkg</refentrytitle> <manvolnum>1</manvolnum> </citerefentry> as the following.
1204  </para>  </para>
1205    <screen>
1206     $ dpkg --compare-versions <replaceable>ver1</replaceable> <replaceable>op</replaceable> <replaceable>ver2</replaceable>
1207    </screen>
1208    <para>
1209    The version comparison rule can be summarized as the following.
1210    </para>
1211    <itemizedlist>
1212    <listitem><para>The strings are compared from the head to the tail.</para></listitem>
1213    <listitem><para>Alphabets are larger than numbers.</para></listitem>
1214    <listitem><para>Numbers are compared as the integer.</para></listitem>
1215    <listitem><para>Alphabets are compared in the ASCII code order.</para></listitem>
1216    <listitem><para>There are some special rules for periods (<literal>.</literal>), plus (<literal>+</literal>) and tildes (<literal>~</literal>) as the followings.</para>
1217      <para>
1218      <literal>0.0</literal> &lt;
1219      <literal>0.5</literal> &lt;
1220      <literal>0.10</literal> &lt;
1221      <literal>0.99</literal> &lt;
1222      <literal>1</literal> &lt;
1223      <literal>1.0~rc1</literal> &lt;
1224      <literal>1.0</literal> &lt;
1225      <literal>1.0+b1</literal> &lt;
1226      <literal>1.0+nmu1</literal> &lt;
1227      <literal>1.1</literal> &lt;
1228      <literal>2.0</literal>
1229      </para>
1230    </listitem>
1231    </itemizedlist>
1232    <para>
1233    One of the tricky case happens when the upstream releases
1234    <filename>gentoo-0.9.12-ReleaseCandidate-99.tar.gz</filename> as the
1235    pre-release of <filename>gentoo-0.9.12.tar.gz</filename>.  You need to make
1236    sure that the upgrade works properly by renaming the upstream source to
1237    <filename>gentoo-0.9.12~rc99.tar.gz</filename>.
1238    </para>
1239    </section>
1240    <section id="dh-make"><title>Setting up <command>dh_make</command></title>
1241  <para>  <para>
1242  For the package to be built correctly, you must make the program's original  Set up the shell environment variables <literal>$DEBEMAIL</literal> and
1243  name lowercase (if it isn't already), and you should move the source directory  <literal>$DEBFULLNAME</literal> so that various Debian maintenance
1244  to  tools recognize your email address and name to use for packages. <footnote><para> The
 <filename><replaceable>packagename</replaceable>-<replaceable>version</replaceable></filename>.  
 </para>  
 <para>  
 If the program name consists of more than one word, contract them to one word,  
 or make an abbreviation.  For example, program John's little editor for X  
 package would be named <systemitem role="package">johnledx</systemitem>, or  
 <systemitem role="package">jle4x</systemitem>, or whatever you decide, as long  
 as it's under some reasonable limit, e.g.  20 characters.  
 </para>  
 <para>  
 Also check for the exact version of the program (to be included in the package  
 version).  If that piece of software is not numbered with versions like  
 <literal>X.Y.Z</literal>, but with some kind of date, feel free to use that  
 date as the version number, as long as newer version numbers will look larger.  
 While it is best to use the same version number as what upstream uses, if it is  
 in the format of <literal>09Oct23</literal> you may need to convert it to  
 <literal>YYYYMMDD</literal> format, which would be <literal>20091023</literal>,  
 to ensure proper order for upgrade with the <command>dpkg</command>  
 program.<footnote><para> Version string can be compared by <literal>dpkg  
 --compare-versions <replaceable>ver1</replaceable>  
 <replaceable>op</replaceable> <replaceable>ver2</replaceable></literal>.  See  
 <citerefentry> <refentrytitle>dpkg</refentrytitle> <manvolnum>1</manvolnum>  
 </citerefentry> manpage.  </para> </footnote>  
 </para>  
 <para>  
 Some programs won't be numbered at all, in which case you should contact the  
 upstream maintainer to see if they've got some other revision-tracking method.  
 </para>  
 </section>  
 <section id="dh-make"><title>Initial Debian package</title>  
 <para>  
 Let's set up the shell environment variable <literal>$DEBEMAIL</literal> and  
 <literal>$DEBFULLNAME</literal> so many Debian maintenance tools recognize your  
 name and email address to use for packages as follows.<footnote><para> The  
1245  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
1246  other login shells such as Z shell, use their pertinent configuration files  some other login shell such as Z shell, use their corresponding
1247  instead of <filename>~/.bashrc</filename>.  </para> </footnote>.  configuration files instead of <filename>~/.bashrc</filename>. </para> </footnote>
1248  </para>  </para>
1249  <screen>  <screen>
1250  $ cat &gt;&gt;~/.bashrc &lt;&lt;EOF  $ cat &gt;&gt;~/.bashrc &lt;&lt;EOF
# Line 980  DEBEMAIL=your.email.address@example.org Line 1252  DEBEMAIL=your.email.address@example.org
1252  DEBFULLNAME=Firstname Lastname  DEBFULLNAME=Firstname Lastname
1253  export DEBEMAIL DEBFULLNAME  export DEBEMAIL DEBFULLNAME
1254  EOF  EOF
1255    $ . ~/.bashrc
1256  </screen>  </screen>
1257    </section>
1258    <section id="non-native-dh-make"><title>Initial non-native Debian package</title>
1259  <para>  <para>
1260  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
1261    programs.  If you wish to create a non-native Debian package of an upstream
1262    source <filename>gentoo-0.9.12.tar.gz</filename>, you can create an initial
1263    non-native Debian package for it by issuing the <command>dh_make</command>
1264  command as follows.  command as follows.
1265  </para>  </para>
1266  <screen>  <screen>
1267  $ . ~/.bashrc  $ cd ~/gentoo
1268  $ cd ~/gentoo/gentoo-0.9.12  $ wget http://example.org/gentoo-0.9.12.tar.gz
1269    $ tar -xvzf gentoo-0.9.12.tar.gz
1270    $ cd gentoo-0.9.12
1271  $ dh_make -f ../gentoo-0.9.12.tar.gz  $ dh_make -f ../gentoo-0.9.12.tar.gz
1272  </screen>  </screen>
1273  <para>  <para>
1274  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.
1275  <footnote><para> If the upstream source provides the  <footnote><para> If the upstream source provides the
1276  <filename>debian</filename> directory and its contents, run the  <filename>debian</filename> directory and its contents, run the
1277  <command>dh_make</command> command with the <literal>--addmissing</literal>  <command>dh_make</command> command with the extra option
1278  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
1279  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
1280  provided by the upstream for your Debian package.  </para> </footnote> See  provided by the upstream for your Debian package.  </para> </footnote> See
1281  <citerefentry> <refentrytitle>dh_make</refentrytitle> <manvolnum>1</manvolnum>  <citerefentry> <refentrytitle>dh_make</refentrytitle> <manvolnum>1</manvolnum>
1282  </citerefentry> for details.  </citerefentry> for details.
1283  </para>  </para>
1284  <para>  <para>
1285  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
1286  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,
1287  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
1288  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
1289  confirm by pressing <literal><replaceable>ENTER</replaceable></literal>.  confirm by pressing <literal><replaceable>ENTER</replaceable></literal>.
1290  <footnote><para> There are few choices here: <literal>s</literal> for Single  <footnote><para> There are several choices here: <literal>s</literal> for
1291  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
1292  Multiple binary, <literal>l</literal> for Library, <literal>k</literal> for  Multiple binary packages, <literal>l</literal> for Library package, <literal>k</literal> for
1293  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>
1294  for <systemitem role="package">cdbs</systemitem>.  This document focuses on the  for <systemitem role="package">cdbs</systemitem> package.  This document focuses on the
1295  use of the <systemitem role="package">debhelper</systemitem> package with the  use of the <command>dh</command> command (from the package
1296  <command>dh</command> command.  This document focuses on the use of the new  <systemitem role="package">debhelper</systemitem>) to create a single binary package,
1297  <command>dh</command> command for Single binary and touches on it for  but also touches on how to use it for arch-independent or
1298  Arch-Independent and Multiple binary.  The <systemitem role="package">cdbs</systemitem> package offers alternative package script  multiple binary packages.  The package
1299  infrastructure to the <command>dh</command> command and outside of the scope of  <systemitem role="package">cdbs</systemitem> offers an alternative packaging script
1300    infrastructure to the <command>dh</command> command and is outside the scope of
1301  this document.  </para> </footnote>  this document.  </para> </footnote>
1302  </para>  </para>
1303  <para>  <para>
1304  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
1305  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
1306  parent directory to accommodate the creation of the non-native Debian source  parent directory to accommodate the creation of the non-native Debian source
1307  package with the <filename>debian.tar.gz</filename> later.  package with the name <filename>debian.tar.gz</filename> later.
1308  </para>  </para>
1309  <screen>  <screen>
1310  $ cd ~/gentoo ; ls -F  $ cd ~/gentoo ; ls -F
# Line 1032  gentoo-0.9.12.tar.gz Line 1313  gentoo-0.9.12.tar.gz
1313  gentoo_0.9.12.orig.tar.gz  gentoo_0.9.12.orig.tar.gz
1314  </screen>  </screen>
1315  <para>  <para>
1316  Please note 2 key features in this  Please note two key features of this filename
1317  <filename>gentoo_0.9.12.orig.tar.gz</filename> file name:  <filename>gentoo_0.9.12.orig.tar.gz</filename>:
1318  </para>  </para>
1319  <itemizedlist>  <itemizedlist>
1320  <listitem>  <listitem>
1321  <para>  <para>
1322  Package name and version are separated by the <literal>_</literal>  Package name and version are separated by the character <literal>_</literal>
1323  (underscore).  (underscore).
1324  </para>  </para>
1325  </listitem>  </listitem>
1326  <listitem>  <listitem>
1327  <para>  <para>
1328  There is the <filename>.orig</filename> before the  The string <filename>.orig</filename> is inserted before the
1329  <filename>.tar.gz</filename>.  <filename>.tar.gz</filename>.
1330  </para>  </para>
1331  </listitem>  </listitem>
1332  </itemizedlist>  </itemizedlist>
1333  <para>  <para>
1334  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
1335  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
1336  that the packaging is not automatic process.  You need to modify the upstream  <xref linkend="dreq"/> and <xref linkend="dother"/>.  You should also understand
1337  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
1338  build Debian packages under the proper method as <xref linkend="build"/> ,  source for Debian (see <xref linkend="modify"/>).  After this, you need to
1339  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"/>),
1340  </para>  testing them (<xref linkend="checkit"/>), and uploading them (<xref linkend="upload"/>).
1341  <para>  All the steps will be explained.
 Once again, as a new maintainer you are discouraged from creating complicated  
 packages, e.g.,  
1342  </para>  </para>
 <itemizedlist>  
 <listitem>  
 <para>  
 multiple binary packages,  
 </para>  
 </listitem>  
 <listitem>  
 <para>  
 library packages,  
 </para>  
 </listitem>  
 <listitem>  
 <para>  
 kernel module packages,  
 </para>  
 </listitem>  
 <listitem>  
 <para>  
 kernel patch packages,  
 </para>  
 </listitem>  
 <listitem>  
1343  <para>  <para>
1344  the source file format being neither in <filename>tar.gz</filename> nor  If you accidentally erased some template files while working on them, you can
1345  <filename>tar.bz2</filename>, or  recover them by running <command>dh_make</command> with the
1346    <literal>--addmissing</literal> option again in a Debian package source tree.
1347  </para>  </para>
 </listitem>  
 <listitem>  
1348  <para>  <para>
1349  the source tarball containing undistributable contents.  Updating an existing package may get complicated since it may be using older
1350    techniques.  While learning the basics, please stick to creating a fresh
1351    package; further explanations are given in <xref linkend="update"/>.
1352  </para>  </para>
 </listitem>  
 </itemizedlist>  
1353  <para>  <para>
1354  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
1355  describe all of it here.  discussed in <xref linkend="simplemake"/> and <xref linkend="portable"/>.  It
1356    could be just a collection of graphics data etc.  Installation of files may be
1357    enabled by <systemitem role="package">debhelper</systemitem> configuration
1358    files such as <filename>debian/install</filename> (see
1359    <xref linkend="install"/>) only.
1360  </para>  </para>
1361    </section>
1362    <section id="native-dh-make"><title>Initial native Debian package</title>
1363  <para>  <para>
1364  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
1365  recover them by running <command>dh_make</command> with the  manage only for Debian, possibly only for local uses.  If you have source
1366  <literal>--addmissing</literal> option again in a Debian package source tree.  files in <filename>~/mypackage-1.0</filename>, you can create an initial native
1367    Debian package for it by issuing the <command>dh_make</command> command as
1368    follows.
1369  </para>  </para>
1370    <screen>
1371    $ cd ~/mypackage-1.0
1372    $ dh_make --native
1373    </screen>
1374  <para>  <para>
1375  Updating an existing package may get complicated since it may be using older  Then the <filename>debian</filename> directory and its contents are created
1376  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
1377  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.
1378    The rest of the packaging activities are practically the same.
1379  </para>  </para>
1380  </section>  </section>
1381  </chapter>  </chapter>
# Line 1116  Please note that there isn't space here Line 1385  Please note that there isn't space here
1385  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
1386  people often run across.  people often run across.
1387  </para>  </para>
1388  <section id="quiltrc"><title>Set up <command>quilt</command></title>  <section id="quiltrc"><title>Setting up <command>quilt</command></title>
1389    <para>
1390    The program <command>quilt</command> offers a basic method for recording
1391    modifications to the upstream source for Debian packaging.  It's
1392    useful to have a slightly customized default, so let's create an alias
1393    <command>dquilt</command> for Debian packaging by adding the following
1394    line to <filename>~/.bashrc</filename>.
1395    </para>
1396    <screen>
1397    alias dquilt="quilt --quiltrc=~/.quiltrc-dpkg"
1398    </screen>
1399  <para>  <para>
1400  The <command>quilt</command> program offers the basic method to record  Then let's create <filename>~/.quiltrc-dpkg</filename> as follows.
 modification to the source for the Debian packaging.  Since slightly different  
 default is desirable for Debian packaging, let's set up  
 <filename>~/.quiltrc</filename> as follows.  <footnote><para> You can disable  
 this configuration by starting the <command>quilt</command> command as  
 <literal>quilt --quiltrc /dev/null ...</literal>.  </para> </footnote>  
1401  </para>  </para>
1402  <screen>  <screen>
1403  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
1404  if [ -d $d/debian ] &amp;&amp; [ -z $QUILT_PATCHES ]; then  if [ -d $d/debian ] &amp;&amp; [ -z $QUILT_PATCHES ]; then
1405      # Debian packaging case and unset $QUILT_PATCHES      # if in Debian packaging tree with unset $QUILT_PATCHES
1406      QUILT_PATCHES=debian/patches      QUILT_PATCHES="debian/patches"
1407      QUILT_PATCH_OPTS=--reject-format=unified      QUILT_PATCH_OPTS="--reject-format=unified"
1408      QUILT_DIFF_ARGS=-p ab --no-timestamps --no-index --color=auto      QUILT_DIFF_ARGS="-p ab --no-timestamps --no-index --color=auto"
1409      QUILT_REFRESH_ARGS=-p ab --no-timestamps --no-index      QUILT_REFRESH_ARGS="-p ab --no-timestamps --no-index"
1410      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"
1411      if ! [ -d $d/debian/patches ]; then mkdir $d/debian/patches; fi      if ! [ -d $d/debian/patches ]; then mkdir $d/debian/patches; fi
1412  fi  fi
1413  </screen>  </screen>
1414  <para>  <para>
1415  See <citerefentry> <refentrytitle>quilt</refentrytitle>  See <citerefentry> <refentrytitle>quilt</refentrytitle>
1416  <manvolnum>1</manvolnum> </citerefentry> and  <manvolnum>1</manvolnum> </citerefentry> and
1417  <filename>/usr/share/doc/quilt/quilt.html</filename> for how to use  <ulink url="&quilt-pdf;">quilt.pdf</ulink> on how to use
1418  <command>quilt</command>.  <command>quilt</command>.
1419  </para>  </para>
1420  </section>  </section>
1421  <section id="fixupstream"><title>Fixing upstream bug</title>  <section id="fixupstream"><title>Fixing upstream bugs</title>
1422  <para>  <para>
1423  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>
1424  file as follows where <literal>install: gentoo</literal> should have been  as follows where <literal>install: gentoo</literal> should have been
1425  <literal>install: gentoo-target</literal>.  <literal>install: gentoo-target</literal>.
1426  </para>  </para>
1427  <screen>  <screen>
# Line 1157  install: gentoo Line 1431  install: gentoo
1431          install gentoorc-example $(HOME)/.gentoorc          install gentoorc-example $(HOME)/.gentoorc
1432  </screen>  </screen>
1433  <para>  <para>
1434  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
1435  <filename>fix-gentoo-target.patch</filename>.  <footnote><para> The  <filename>fix-gentoo-target.patch</filename>.  <footnote><para> The
1436  <filename>debian/patches</filename> directory should exist now if you run  <filename>debian/patches</filename> directory should exist now if you ran
1437  <command>dh_make</command> as described before.  This example operation creates  <command>dh_make</command> as described before.  This example operation creates
1438  it just in case you are updating the existing package.  </para> </footnote>  it just in case you are updating an existing package.  </para> </footnote>
1439  </para>  </para>
1440  <screen>  <screen>
1441  $ mkdir debian/patches  $ mkdir debian/patches
1442  $ quilt new fix-gentoo-target.patch  $ dquilt new fix-gentoo-target.patch
1443  $ quilt add Makefile  $ dquilt add Makefile
1444  </screen>  </screen>
1445  <para>  <para>
1446  You change the <filename>Makefile</filename> file as follows.  You change the <filename>Makefile</filename> file as follows.
# Line 1178  install: gentoo-target Line 1452  install: gentoo-target
1452          install gentoorc-example $(HOME)/.gentoorc          install gentoorc-example $(HOME)/.gentoorc
1453  </screen>  </screen>
1454  <para>  <para>
1455  Ask <command>quilt</command> to refresh the patch to create  Ask <command>dquilt</command> to generate the patch to create
1456  <filename>debian/patches/fix-gentoo-target.patch</filename> and add its  <filename>debian/patches/fix-gentoo-target.patch</filename> and add its
1457  description following <ulink url="&dep3;">DEP-3: Patch Tagging Guidelines</ulink>.  description following <ulink url="&dep3;">DEP-3: Patch Tagging Guidelines</ulink>.
1458  </para>  </para>
1459  <screen>  <screen>
1460  $ quilt refresh  $ dquilt refresh
1461  $ quilt header -e  $ dquilt header -e
1462  ... describe patch  ... describe patch
1463  </screen>  </screen>
1464  </section>  </section>
1465    <section id="destdir"><title>Installation of files to their destination</title>
 <section id="destdir"><title>Installation of files to the destination</title>  
1466  <para>  <para>
1467  Normally, programs install themselves in the <filename>/usr/local</filename>  Most third-party software installs itself in the <filename>/usr/local</filename>
1468  subdirectory.  Since it is reserved for system administrator's (or user's)  directory hierarchy.  On Debian this is reserved for private use
1469  private use, Debian packages must not use that directory but should use system  by the system administrator, so packages must not use directories such
1470  directories such as the <filename>/usr/bin</filename> subdirectory following  as <filename>/usr/local/bin</filename> but should instead use system
1471  the Filesystem Hierarchy Standard (<ulink url="&fhs;">FHS</ulink>,  directories such as <filename>/usr/bin</filename>, obeying the
1472  <filename>/usr/share/doc/debian-policy/fhs/fhs-2.3.html</filename>).  <ulink url="&fhs;">Filesystem Hierarchy Standard</ulink> (FHS).
1473  </para>  </para>
1474  <para>  <para>
1475  Normally, <citerefentry> <refentrytitle>make</refentrytitle>  Normally, <citerefentry> <refentrytitle>make</refentrytitle>
1476  <manvolnum>1</manvolnum> </citerefentry> is used to automate building the  <manvolnum>1</manvolnum> </citerefentry> is used to automate building the
1477  program and the execution of <literal>make install</literal> installs programs  program, and executing <literal>make install</literal> installs programs
1478  directly to the desired destination by the <literal>install</literal> target of  directly to the desired destination (following the
1479  the <filename>Makefile</filename> file.  In order for Debian to provide binary  <literal>install</literal> target in the
1480  packages, the build system installs programs to the file tree image created  <filename>Makefile</filename>).  In order for Debian to provide
1481  under a temporary directory instead to the actual destination.  pre-built installable packages, it modifies the build system to install
1482    programs into a file tree image created under a temporary directory
1483    instead of the actual destination.
1484  </para>  </para>
1485  <para>  <para>
1486  These 2 differences between (1) the normal program installation and (2) the  These two differences between normal program installation on one hand and the
1487  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
1488    <systemitem role="package">debhelper</systemitem> package through the
1489  <command>dh_auto_configure</command> and <command>dh_auto_install</command>  <command>dh_auto_configure</command> and <command>dh_auto_install</command>
1490  commands if the following conditions are met.  commands if the following conditions are met.
1491  </para>  </para>
1492  <itemizedlist>  <itemizedlist>
1493  <listitem>  <listitem>
1494  <para>  <para>
1495  The <filename>Makefile</filename> file follows the GNU conventions to support  The <filename>Makefile</filename> must follow GNU conventions and
1496  <literal>$(DESTDIR)</literal> variable.  support the <literal>$(DESTDIR)</literal> variable.
1497  <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>
1498  </para>  </para>
1499  </listitem>  </listitem>
1500  <listitem>  <listitem>
1501  <para>  <para>
1502  The source follows the Filesystem Hierarchy Standard (FHS).  The source must follow the Filesystem Hierarchy Standard (FHS).
1503  </para>  </para>
1504  </listitem>  </listitem>
1505  </itemizedlist>  </itemizedlist>
1506  <para>  <para>
1507  Programs that use GNU <command>autoconf</command>  Programs that use GNU <command>autoconf</command> follow the GNU conventions
1508  <emphasis>automatically</emphasis> follow the GNU conventions and their  automatically, so they can be trivial to package.  On the basis of
1509  packaging is almost <emphasis>automatic</emphasis>.  With this and other  this and other heuristics, it is estimated that the
1510  heuristics, the <systemitem role="package">debhelper</systemitem> package  <systemitem role="package">debhelper</systemitem> package will work for
1511  estimates that it works for about 90% of packages without making any intrusive  about 90% of packages without making any intrusive changes to their
1512  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.  
1513  </para>  </para>
1514  <para>  <para>
1515  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
1516  should make sure to support these <literal>$(DESTDIR)</literal> variable.  The  should be careful to support the <literal>$(DESTDIR)</literal>
1517  <literal>$(DESTDIR)</literal> variable is unset in it and is prepended to each  variable.  Although it is unset by default, the <literal>$(DESTDIR)</literal>
1518  file path used for the program installation.  The packaging script will set  variable is prepended to each file path used for the program
1519  <literal>$(DESTDIR)</literal> to the temporary directory.  installation.  The packaging script will set
1520    <literal>$(DESTDIR)</literal> to the temporary directory.
1521  </para>  </para>
1522  <para>  <para>
1523  The temporary directory used by the <command>dh_auto_install</command> command  For packages of the single binary type, the temporary directory used
1524  is chosen as <filename>debian/<replaceable>package</replaceable></filename> for  by the <command>dh_auto_install</command> command will be set to
1525  single binary packages.  <footnote><para> For multiple binary packages, the  <filename>debian/<replaceable>package</replaceable></filename>.
1526    <footnote><para> For packages of the multiple binary type, the
1527  <command>dh_auto_install</command> command uses <filename>debian/tmp</filename>  <command>dh_auto_install</command> command uses <filename>debian/tmp</filename>
1528  as the temporary directory while the <command>dh_install</command> command with  as the temporary directory while the <command>dh_install</command> command with
1529  the help of  the help of
1530  <filename>debian/<replaceable>package-1</replaceable>.install</filename> and  <filename>debian/<replaceable>package-1</replaceable>.install</filename> and
1531  <filename>debian/<replaceable>package-2</replaceable>.install</filename> files  <filename>debian/<replaceable>package-2</replaceable>.install</filename> files
1532  will split contents of <filename>debian/tmp</filename> into  will split the contents of <filename>debian/tmp</filename> into
1533  <filename>debian/<replaceable>package-1</replaceable></filename> and  <filename>debian/<replaceable>package-1</replaceable></filename> and
1534  <filename>debian/<replaceable>package-2</replaceable></filename> temporary  <filename>debian/<replaceable>package-2</replaceable></filename> temporary
1535  directories to create multiple binary <filename>*.deb</filename> packages.  directories, to create
1536    <filename><replaceable>package-1</replaceable>_*.deb</filename> and
1537    <filename><replaceable>package-2</replaceable>_*.deb</filename> binary
1538    packages.
1539  </para> </footnote> Everything that is contained in the temporary directory  </para> </footnote> Everything that is contained in the temporary directory
1540  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
1541  difference is that <command>dpkg</command> will be installing the files in the  difference is that <command>dpkg</command> will be installing the
1542  root directory.  files to paths relative to the root directory rather than your working
1543    directory.
1544  </para>  </para>
1545  <para>  <para>
1546  Bear in mind that even though your program installs in  Bear in mind that even though your program installs in
1547  <filename>debian/<replaceable>package</replaceable></filename>, it still needs  <filename>debian/<replaceable>package</replaceable></filename>, it still needs
1548  to behave correctly when placed in the root directory, i.e.  when installed  to behave correctly when installed from the <filename>.deb</filename>
1549  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
1550  system to hardcode strings like  system to hardcode strings like
1551  <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>
1552  into the package file.  into files in the package.
1553  </para>  </para>
1554  <para>  <para>
1555  Here's the relevant part of <systemitem role="package">gentoo</systemitem>'s  Here's the relevant part of <systemitem role="package">gentoo</systemitem>'s
1556  <filename>Makefile</filename> file <footnote><para> This is just an example to  <filename>Makefile</filename><footnote><para> This is just an example to
1557  show how the <filename>Makefile</filename> file should look like.  If the  show what a <filename>Makefile</filename> should look like.  If the
1558  <filename>Makefile</filename> file is created by the  <filename>Makefile</filename> is created by the
1559  <command>./configure</command> command, the correct way to fix this kind of  <command>./configure</command> command, the correct way to fix this kind of
1560  <filename>Makefile</filename> is to executed the <command>./configure</command>  <filename>Makefile</filename> is to execute <command>./configure</command>
1561  command from the <command>dh_auto_configure</command> command with default  from the <command>dh_auto_configure</command> command with default
1562  options including <literal>--prefix=/usr</literal>.  </para> </footnote>:  options including <literal>--prefix=/usr</literal>.  </para> </footnote>:
1563  </para>  </para>
1564  <screen>  <screen>
1565  # Where to put binary on 'make install'?  # Where to put binary executables on 'make install'?
1566  BIN     = /usr/local/bin  BIN     = /usr/local/bin
1567  # Where to put icons on 'make install'?  # Where to put icons on 'make install'?
1568  ICONS   = /usr/local/share/gentoo  ICONS   = /usr/local/share/gentoo
1569  </screen>  </screen>
1570  <para>  <para>
1571  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>.
1572  Change those paths to:  As explained above, that directory hierarchy is reserved for local use on
1573    Debian, so change those paths to:
1574  </para>  </para>
1575  <screen>  <screen>
1576  # Where to put binary on 'make install'?  # Where to put binary executables on 'make install'?
1577  BIN     = $(DESTDIR)/usr/bin  BIN     = $(DESTDIR)/usr/bin
1578  # Where to put icons on 'make install'?  # Where to put icons on 'make install'?
1579  ICONS   = $(DESTDIR)/usr/share/gentoo  ICONS   = $(DESTDIR)/usr/share/gentoo
1580  </screen>  </screen>
1581  <para>  <para>
1582  But why in that directory, and not some other?  Because Debian packages never  The exact locations that should be used for binaries, icons,
1583  install files beneath <filename>/usr/local</filename> -- that tree is reserved  documentation, etc. are specified in the Filesystem Hierarchy Standard
1584  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
1585  <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  
 <filename>/usr/share/doc/debian-policy/fhs/</filename>).  I recommend you  
 browse it and read the sections that might concern your package.  
1586  </para>  </para>
1587  <para>  <para>
1588  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
1589  <filename>/usr/local/bin</filename>, the manual page in  <filename>/usr/local/bin</filename>, the manual page in
1590  <filename>/usr/share/man/man1</filename> instead of  <filename>/usr/share/man/man1</filename> instead of
1591  <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
1592  page mentioned in <systemitem role="package">gentoo</systemitem>'s  page mentioned in <systemitem role="package">gentoo</systemitem>'s
1593  <filename>Makefile</filename>, but since the Debian Policy requires that every  <filename>Makefile</filename>, but since Debian Policy requires that every
1594  program has one, we'll make one later and install it in  program has one, we'll make one later and install it in
1595  <filename>/usr/share/man/man1</filename>.  <filename>/usr/share/man/man1</filename>.
1596  </para>  </para>
# Line 1325  to fix them to use the right locations. Line 1601  to fix them to use the right locations.
1601  for?  You can find this out by issuing:  for?  You can find this out by issuing:
1602  </para>  </para>
1603  <screen>  <screen>
1604  $ grep -nr -e 'usr/local/lib' --include='*.[c|h]' .  $ grep -nr --include='*.[c|h]' -e 'usr/local/lib' .
1605  </screen>  </screen>
1606  <para>  <para>
1607  <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 1336  Edit those files and in those lines repl Line 1612  Edit those files and in those lines repl
1612  with <literal>usr/lib</literal>.  This can be done automatically as follows:  with <literal>usr/lib</literal>.  This can be done automatically as follows:
1613  </para>  </para>
1614  <screen>  <screen>
1615  $ vim '+argdo %s/usr\/local\/lib/usr\/lib/gce|update' +q \  $ sed -i -e 's#usr/local/lib#usr/lib#g' \
1616        $(find . -type f -name '*.[c|h]')        $(find . -type f -name '*.[c|h]')
1617  </screen>  </screen>
1618  <para>  <para>
1619  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:
1620  </para>  </para>
1621    <screen>
1622    $ vim '+argdo %s#usr/local/lib#usr/lib#gce|update' +q \
1623          $(find . -type f -name '*.[c|h]')
1624    </screen>
1625    
1626  <para>  <para>
1627  After that you should find the install target (search for line that starts with  Next you should find the <literal>install</literal> target (searching
1628  <literal>install:</literal>, that will usually work) and rename all references  for the line that starts with <literal>install:</literal> will usually
1629  to directories other than ones defined at the top of the  work) and rename all references to directories other than ones defined
1630  <filename>Makefile</filename>.  at the top of the <filename>Makefile</filename>.
1631  </para>  </para>
1632  <para>  <para>
1633  Before your upstream bug fix, <systemitem role="package">gentoo</systemitem>'s  Originally, <systemitem role="package">gentoo</systemitem>'s
1634  install target said:  install target said:
1635  </para>  </para>
1636  <screen>  <screen>
# Line 1359  install: gentoo-target Line 1640  install: gentoo-target
1640          install gentoorc-example $(HOME)/.gentoorc          install gentoorc-example $(HOME)/.gentoorc
1641  </screen>  </screen>
1642  <para>  <para>
1643  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
1644  <filename>debian/patches/install.patch</filename>.  <filename>debian/patches/install.patch</filename>.
1645  </para>  </para>
1646  <screen>  <screen>
1647  $ quilt new install.patch  $ dquilt new install.patch
1648  $ quilt add Makefile  $ dquilt add Makefile
1649  </screen>  </screen>
1650  <para>  <para>
1651  Let's change this for Debian package as following using the editor:  In your editor, change this for the Debian package as follows:
1652  </para>  </para>
1653  <screen>  <screen>
1654  install: gentoo-target  install: gentoo-target
# Line 1377  install: gentoo-target Line 1658  install: gentoo-target
1658          install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc          install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc
1659  </screen>  </screen>
1660  <para>  <para>
1661  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
1662  before the other commands in the rule.  The original  before the other commands in the rule.  The original
1663  <filename>Makefile</filename> didn't have it because usually the  <filename>Makefile</filename> didn't have it because usually
1664  <literal>/usr/local/bin</literal> and other directories already exist on the  <literal>/usr/local/bin</literal> and other directories already exist on the
1665  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
1666  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
1667  create each and every one of those directories.  create each and every one of those directories.
1668  </para>  </para>
1669  <para>  <para>
# Line 1394  of additional documentation that the ups Line 1675  of additional documentation that the ups
1675          cp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html          cp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html
1676  </screen>  </screen>
1677  <para>  <para>
1678  After careful check, if everything is fine, ask <command>quilt</command> to  Check carefully, and if everything is okay, ask <command>dquilt</command> to
1679  refresh the patch to create <filename>debian/patches/install.patch</filename>  generate the patch to create <filename>debian/patches/install.patch</filename>
1680  and add its description.  and add its description.
1681  </para>  </para>
1682  <screen>  <screen>
1683  $ quilt refresh  $ dquilt refresh
1684  $ quilt header -e  $ dquilt header -e
1685  ... describe patch  ... describe patch
1686  </screen>  </screen>
1687  <para>  <para>
# Line 1423  Debian specific packaging modification: Line 1704  Debian specific packaging modification:
1704  Whenever you make changes that are not specifically related to Debian package  Whenever you make changes that are not specifically related to Debian package
1705  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
1706  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
1707  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
1708  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!
1709  make them portable.  This will make your fixes much easier to apply.  Make them portable.  This will make your fixes much easier to apply.
1710  </para>  </para>
1711  <para>  <para>
1712  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 1436  upstream. Line 1717  upstream.
1717  <para>  <para>
1718  There is one other common problem: libraries are often different from platform  There is one other common problem: libraries are often different from platform
1719  to platform.  For example, a <filename>Makefile</filename> can contain a  to platform.  For example, a <filename>Makefile</filename> can contain a
1720  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
1721  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
1722  purpose.  purpose.
1723  </para>  </para>
1724  <para>  <para>
1725  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
1726  <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>:  
1727  </para>  </para>
1728  <screen>  <screen>
1729  LIBS = -lcurses -lsomething -lsomethingelse  LIBS = -lfoo -lbar
1730  </screen>  </screen>
1731  <para>  <para>
1732  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
1733  <literal>curses</literal> into <literal>ncurses</literal>.  doesn't exist and its equivalent is provided by the <literal>foo2</literal>
1734    library on the Debian system, you can fix this build problem as
1735    <filename>debian/patches/foo2.patch</filename> by changing
1736    <literal>foo</literal> into <literal>foo2</literal>.<footnote><para>If there
1737    are API changes from the <literal>foo</literal> library to the
1738    <literal>foo2</literal> library, required changes to the source code need to be
1739    made to match the new API.</para> </footnote>
1740  </para>  </para>
1741  <screen>  <screen>
1742  $ quilt new ncurse.patch  $ dquilt new foo2.patch
1743  $ quilt add Makefile  $ dquilt add Makefile
1744  $ sed -i -e s/-lcurses/-lncurses/g Makefile  $ sed -i -e 's/-lfoo/-lfoo2/g' Makefile
1745  $ quilt refresh  $ dquilt refresh
1746  $ quilt header -e  $ dquilt header -e
1747  ... describe patch  ... describe patch
1748  </screen>  </screen>
1749  </section>  </section>
# Line 1473  that we should edit in order to customiz Line 1756  that we should edit in order to customiz
1756  most important of them are <filename>control</filename>,  most important of them are <filename>control</filename>,
1757  <filename>changelog</filename>, <filename>copyright</filename> and  <filename>changelog</filename>, <filename>copyright</filename> and
1758  <filename>rules</filename>, which are required for all packages.  <filename>rules</filename>, which are required for all packages.
1759    <footnote><para>
1760    In this chapter, files in the <filename>debian</filename> directory are
1761    referred without preceding <filename>debian/</filename> for simplicity whenever
1762    they are obvious.
1763    </para></footnote>
1764  </para>  </para>
1765  <section id="control"><title><filename>control</filename> file</title>  <section id="control"><title><filename>control</filename> file</title>
1766  <para>  <para>
1767  This file contains various values which <command>dpkg</command>,  This file contains various values which <command>dpkg</command>,
1768  <command>dselect</command>, <command>apt-get</command>,  <command>dselect</command>, <command>apt-get</command>,
1769  <command>apt-cache</command>, <command>aptitude</command>, and other package  <command>apt-cache</command>, <command>aptitude</command>, and other package
1770  management tools will use to manage the package.  It is defined by the <ulink url="&policy-control;">Debian  management tools will use to manage the package.  It is defined by the
1771  Policy Manual, 5 'Control files and their fields'</ulink>.  <ulink url="&policy-control;">Debian Policy Manual, 5 "Control files and their fields"</ulink>.
1772  </para>  </para>
1773  <para>  <para>
1774  Here is the <filename>control</filename> file <command>dh_make</command>  Here is the <filename>control</filename> file <command>dh_make</command>
# Line 1525  for administrator-only programs, <litera Line 1813  for administrator-only programs, <litera
1813  documentation, <literal>libs</literal> for libraries, <literal>mail</literal>  documentation, <literal>libs</literal> for libraries, <literal>mail</literal>
1814  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
1815  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,
1816  and many more.  See the <ulink url="&policy-subsections;">Debian  and many more.
1817  Policy Manual, 2.4 'Sections'</ulink> and <ulink url="&sections-unstable;">List of sections in 'sid'</ulink>  <footnote> <para>See
1818  for the guidance.  <ulink url="&policy-subsections;">Debian Policy Manual, 2.4 "Sections"</ulink> and
1819    <ulink url="&sections-unstable;">List of sections in <literal>sid</literal></ulink>.</para>
1820    </footnote>
1821  </para>  </para>
1822  <para>  <para>
1823  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
1824  we can omit it.)  we can omit it.)
1825  </para>  </para>
1826  <para>  <para>
1827  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.
1828  the <ulink url="&policy-priorities;">Debian  <footnote> <para>See
1829  Policy Manual, 2.5 'Priorities'</ulink> for the guidance.  <ulink url="&policy-priorities;">Debian Policy Manual, 2.5 "Priorities"</ulink>.
1830    </para>
1831    </footnote>
1832  </para>  </para>
1833  <itemizedlist>  <itemizedlist>
1834  <listitem>  <listitem>
# Line 1572  you.  Avoid using commas, ampersands and Line 1864  you.  Avoid using commas, ampersands and
1864  <para>  <para>
1865  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
1866  the <literal>Build-Depends</literal> field.  You can also have the  the <literal>Build-Depends</literal> field.  You can also have the
1867  <literal>Build-Depends-Indep</literal> field as an additional line, here (see  <literal>Build-Depends-Indep</literal> field as an additional line, here.
1868  the <ulink url="&policy-relationships;#s-sourcebinarydeps">Debian  <footnote><para>See
1869  Policy Manual, 7.7 'Relationships between source and binary packages -  <ulink url="&policy-relationships;#s-sourcebinarydeps">Debian Policy Manual, 7.7 "Relationships between source and binary packages - Build-Depends, Build-Depends-Indep, Build-Conflicts, Build-Conflicts-Indep"</ulink>.</para></footnote>
1870  Build-Depends, Build-Depends-Indep, Build-Conflicts,  Some packages like
1871  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  <systemitem role="package">gcc</systemitem> and
1872    <systemitem role="package">make</systemitem> which are required by the
1873    <systemitem role="package">build-essential</systemitem> package are implied.  If you need
1874  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.
1875  Multiple entries are separated with commas; read on for the explanation of  Multiple entries are separated with commas; read on for the explanation of
1876  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.
1877  </para>  </para>
1878  <itemizedlist>  <itemizedlist>
1879  <listitem>  <listitem>
# Line 1595  satisfy the Debian Policy requirement fo Line 1889  satisfy the Debian Policy requirement fo
1889  For source packages which have some binary packages with <literal>Architecture:  For source packages which have some binary packages with <literal>Architecture:
1890  any</literal>, they are rebuild by the autobuilder.  Since this autobuilder  any</literal>, they are rebuild by the autobuilder.  Since this autobuilder
1891  procedure runs <literal>debian/rules build</literal> in it while installing  procedure runs <literal>debian/rules build</literal> in it while installing
1892  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
1893  list practically all the required packages and the  list practically all the required packages and the
1894  <literal>Build-Depends-indep</literal> is rarely used.  <literal>Build-Depends-indep</literal> is rarely used.
1895  </para>  </para>
# Line 1696  these relations; if not, it will be expl Line 1990  these relations; if not, it will be expl
1990  </citerefentry> etc.)  </citerefentry> etc.)
1991  </para>  </para>
1992  <para>  <para>
1993  Here is a simplified description of package relationships.  Here is a simplified description of package relationships.
1994  <footnote><para>See  <footnote><para>See
1995  <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>.
1996  </para></footnote>:  </para></footnote>
1997  </para>  </para>
1998  <itemizedlist>  <itemizedlist>
1999  <listitem>  <listitem>
# Line 1778  package management tools. Line 2072  package management tools.
2072  <para>  <para>
2073  For some types of packages where there are multiple alternatives virtual names  For some types of packages where there are multiple alternatives virtual names
2074  have been defined.  You can get the full list in the  have been defined.  You can get the full list in the
2075  <filename>/usr/share/doc/debian-policy/virtual-package-names-list.txt.gz</filename>  <ulink url="&virtual-package;">virtual-package-names-list.txt.gz</ulink>
2076  file.  Use this if your program provides a function of an existing virtual  file.  Use this if your program provides a function of an existing virtual
2077  package.  package.
2078  </para>  </para>
# Line 1820  Replaces: quux (&lt;&lt; 5), quux-foo (& Line 2114  Replaces: quux (&lt;&lt; 5), quux-foo (&
2114  <para>  <para>
2115  The last feature you need to know about is  The last feature you need to know about is
2116  <literal>${shlibs:Depends}</literal>, <literal>${perl:Depends}</literal>,  <literal>${shlibs:Depends}</literal>, <literal>${perl:Depends}</literal>,
2117  <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.  
2118  </para>  </para>
2119  <para>  <para>
2120  <citerefentry> <refentrytitle>dh_shlibdeps</refentrytitle>  <citerefentry> <refentrytitle>dh_shlibdeps</refentrytitle>
2121  <manvolnum>1</manvolnum> </citerefentry> will scan it for binaries and  <manvolnum>1</manvolnum> </citerefentry> calculates shared library dependencies
2122  libraries determine their shared library dependencies and detect which packages  for binary packages.  It generates a list of ELF executables and shared
2123  they are in, such as <systemitem role="package">libc6</systemitem> or  libraries it has found for each binary package.  Such list is used for
2124  <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>.  
2125  </para>  </para>
2126  <para>  <para>
2127  The package list generated by <citerefentry>  <citerefentry> <refentrytitle>dh_perl</refentrytitle> <manvolnum>1</manvolnum>
2128  <refentrytitle>dh_perl</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>  </citerefentry> calculates Perl dependencies.  It generates a list of a
2129  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
2130    substituting <literal>${perl:Depends}</literal>.
2131  </para>  </para>
2132  <para>  <para>
2133  Some <systemitem role="package">debhelper</systemitem> commands may make the  Some <systemitem role="package">debhelper</systemitem> commands may make the
2134  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
2135  packages is used for substituting <literal>${misc:Depends}</literal>.  generate a list of required packages for each binary package.
2136    Such list is used for substituting <literal>${misc:Depends}</literal>.
2137    </para>
2138    <para>
2139    <citerefentry> <refentrytitle>dh_gencontrol</refentrytitle>
2140    <manvolnum>1</manvolnum> </citerefentry> generates
2141    <filename>DEBIAN/control</filename> for each binary package while
2142    substituting <literal>${shlibs:Depends}</literal>,
2143    <literal>${perl:Depends}</literal>, <literal>${misc:Depends}</literal>, etc.
2144  </para>  </para>
2145  <para>  <para>
2146  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 1852  some features provided by that <systemit Line 2150  some features provided by that <systemit
2150  package.  package.
2151  </para>  </para>
2152  <para> Line 9 is the Homepage URL.  Let's assume this to be at  <para> Line 9 is the Homepage URL.  Let's assume this to be at
2153  <ulink url="&gentoo;">&gentoo;</ulink>.  <ulink url="&gentoo;"/>.
2154  </para>  </para>
2155  <para>  <para>
2156  Line 12 is the short description.  Most people screens are 80 columns wide so  Line 12 is the short description.  Most people screens are 80 columns wide so
# Line 1869  English.  Translations of these descript Line 2167  English.  Translations of these descript
2167  <ulink url="&ddtp;">The Debian Description Translation Project - DDTP</ulink>.</para></footnote>  <ulink url="&ddtp;">The Debian Description Translation Project - DDTP</ulink>.</para></footnote>
2168  </para>  </para>
2169  <para>  <para>
2170  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
2171  Reference, 6.2.5.  'Version Control System location'</ulink> between line 6 and  System (VCS) location between line 6 and 7.
2172  7.  Let's assume that the <systemitem role="package">gentoo</systemitem>  <footnote><para>See
2173  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>.
2174    </para></footnote>
2175    Let's assume that the <systemitem role="package">gentoo</systemitem>
2176    package has its VCS located in Debian Alioth Git Service at
2177  <literal>git://git.debian.org/git/collab-maint/gentoo.git</literal>.  <literal>git://git.debian.org/git/collab-maint/gentoo.git</literal>.
2178  </para>  </para>
2179  <para>  <para>
# Line 1915  Finally, here is the updated <filename>c Line 2216  Finally, here is the updated <filename>c
2216  <section id="copyright"><title><filename>copyright</filename> file</title>  <section id="copyright"><title><filename>copyright</filename> file</title>
2217  <para>  <para>
2218  This file contains the information about package upstream resources, copyright  This file contains the information about package upstream resources, copyright
2219  and license information.  Its format is not dictated by the Debian Policy  and license information.
2220  Manual, but the content is (<ulink url="&policy-copyright;">Debian  <ulink url="&policy-copyright;">Debian Policy Manual, 12.5 "Copyright information"</ulink>
2221  Policy Manual, 12.5 'Copyright information'</ulink>).  You may also consult  dictates its content and
2222  <ulink url="&dep5;">DEP-5: Machine-parseable  <ulink url="&dep5;">DEP-5: Machine-parseable <filename>debian/copyright</filename></ulink>
2223  debian/copyright</ulink>.  provides guidelines for its format.
2224  </para>  </para>
2225  <para>  <para>
2226  <command>dh_make</command> can give you a template  <command>dh_make</command> can give you a template
# Line 1980  In short, here's how <systemitem role="p Line 2281  In short, here's how <systemitem role="p
2281  </para>  </para>
2282  <para>  <para>
2283  Please follow the HOWTO provided by ftpmasters and sent to  Please follow the HOWTO provided by ftpmasters and sent to
2284  debian-devel-announce: <ulink url="&debian-devel-announce-ldo;2006/03/msg00023.html">&debian-devel-announce-ldo;2006/03/msg00023.html</ulink>.  debian-devel-announce: <ulink url="&howto-copyright;"/>.
2285  </para>  </para>
2286  </section>  </section>
2287  <section id="changelog"><title><filename>changelog</filename> file</title>  <section id="changelog"><title><filename>changelog</filename> file</title>
2288  <para>  <para>
2289  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
2290  Policy Manual, 4.4 'debian/changelog'</ulink>.  This format is used by  <ulink url="&policy-dpkgchangelog;">Debian Policy Manual, 4.4 "debian/changelog"</ulink>.
2291  <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
2292  revision, distribution and urgency of your package.  version number, revision, distribution and urgency of your package.
2293  </para>  </para>
2294  <para>  <para>
2295  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 2050  You will end up with something like this Line 2351  You will end up with something like this
2351  </para>  </para>
2352  <para>  <para>
2353  You can read more about updating the <filename>changelog</filename> file later  You can read more about updating the <filename>changelog</filename> file later
2354  in <xref linkend="update"/> .  in <xref linkend="update"/>.
2355  </para>  </para>
2356  </section>  </section>
2357  <section id="rules"><title><filename>rules</filename> file</title>  <section id="rules"><title><filename>rules</filename> file</title>
# Line 2067  is marked as executable. Line 2368  is marked as executable.
2368  Every <filename>rules</filename> file, as any other  Every <filename>rules</filename> file, as any other
2369  <filename>Makefile</filename>, consists of several targets and their rules  <filename>Makefile</filename>, consists of several targets and their rules
2370  specifying how to handle the source.  <ulink url="&policy-debianrules;">Debian  specifying how to handle the source.  <ulink url="&policy-debianrules;">Debian
2371  Policy Manual, 4.9 'Main building script: debian/rules'</ulink> explains its  Policy Manual, 4.9 "Main building script: debian/rules"</ulink> explains its
2372  details.  details.
2373  </para>  </para>
2374  <para>  <para>
# Line 2099  binary package under the <filename>debia Line 2400  binary package under the <filename>debia
2400  <literal>binary</literal> target: to create all binary packages (effectively  <literal>binary</literal> target: to create all binary packages (effectively
2401  combination of <literal>binary-arch</literal> and  combination of <literal>binary-arch</literal> and
2402  <literal>binary-indep</literal> targets).  (required)<footnote><para> This  <literal>binary-indep</literal> targets).  (required)<footnote><para> This
2403  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>
2404  </para>  </para>
2405  </listitem>  </listitem>
2406  <listitem>  <listitem>
# Line 2107  target is used by <literal>dpkg-buildpac Line 2408  target is used by <literal>dpkg-buildpac
2408  <literal>binary-arch</literal> target: to create arch-dependent  <literal>binary-arch</literal> target: to create arch-dependent
2409  (<literal>Architecture: any</literal>) binary packages in the parent directory.  (<literal>Architecture: any</literal>) binary packages in the parent directory.
2410  (required)<footnote><para> This target is used by <literal>dpkg-buildpackage  (required)<footnote><para> This target is used by <literal>dpkg-buildpackage
2411  -B</literal> as in <xref linkend="autobuilder"/> .  </para> </footnote>  -B</literal> as in <xref linkend="autobuilder"/>.  </para> </footnote>
2412  </para>  </para>
2413  </listitem>  </listitem>
2414  <listitem>  <listitem>
# Line 2172  It tells the operating system that this Line 2473  It tells the operating system that this
2473  <filename>/usr/bin/make</filename>.  <filename>/usr/bin/make</filename>.
2474  </para>  </para>
2475  <para>  <para>
2476  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.
2477  Then, the <command>dh</command> command will output which  Then, the <command>dh</command> command will output which
2478  <command>dh_*</command> commands are executed by the <command>dh</command>  <command>dh_*</command> commands are executed by the <command>dh</command>
2479  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 2194  complicated <filename>rules</filename> f Line 2495  complicated <filename>rules</filename> f
2495  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
2496  when it was initially packaged.  This new <command>dh</command> command is  when it was initially packaged.  This new <command>dh</command> command is
2497  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
2498  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
2499  package building process like the <systemitem role="package">cdbs</systemitem>  package building process like the <systemitem role="package">cdbs</systemitem>
2500  package.  </para> </footnote> The <command>dh</command> command is a wrapper  package.  </para> </footnote> The <command>dh</command> command is a wrapper
2501  script which runs appropriate sequences of <command>dh_*</command> programs  script which runs appropriate sequences of <command>dh_*</command> programs
# Line 2608  This installs <command>bash</command> co Line 2909  This installs <command>bash</command> co
2909  </listitem>  </listitem>
2910  </itemizedlist>  </itemizedlist>
2911  <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>  
2912  Many <command>dh_*</command> commands invoked by the new <command>dh</command>  Many <command>dh_*</command> commands invoked by the new <command>dh</command>
2913  command can be customized by the corresponding configuration files in the  command can be customized by the corresponding configuration files in the
2914  <filename>debian</filename> directory.  See <xref linkend="dother"/> and the  <filename>debian</filename> directory.  See <xref linkend="dother"/> and the
# Line 2639  corner cases.  Use of simplified equival Line 2935  corner cases.  Use of simplified equival
2935  kill such <systemitem role="package">debhelper</systemitem>'s smart features.  kill such <systemitem role="package">debhelper</systemitem>'s smart features.
2936  </para>  </para>
2937  <para>  <para>
2938  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
2939  <filename>/etc/gentoo</filename> directory instead of the usual  <filename>/etc/gentoo</filename> directory instead of the usual
2940  <filename>/etc</filename> directory, you can override the default  <filename>/etc</filename> directory for the recent
2941    <systemitem role="package">gentoo</systemitem> package using Autotools, you can override the default
2942  <literal>--sysconfig=/etc</literal> argument given by the  <literal>--sysconfig=/etc</literal> argument given by the
2943  <command>dh_auto_configure</command> command to the  <command>dh_auto_configure</command> command to the
2944  <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 GNU build  
 system, also known as the Autotools.  See <ulink url="&gnu-build-system;">&gnu-build-system;</ulink>.  
 </para> </footnote>  
2945  </para>  </para>
2946  <screen>  <screen>
2947  override_dh_auto_configure:  override_dh_auto_configure:
# Line 2727  possible. Line 3021  possible.
3021  <para>  <para>
3022  To control most of what <systemitem role="package">debhelper</systemitem> does  To control most of what <systemitem role="package">debhelper</systemitem> does
3023  while building the package, you put optional configuration files under the  while building the package, you put optional configuration files under the
3024  <filename>debian</filename> directory.  This chapter will make an overview of  <filename>debian</filename> directory.  This chapter will provide an overview of
3025  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
3026  Manual</ulink> and <ulink url="&developers-reference;">Debian Developer's  Manual</ulink> and <ulink url="&developers-reference;">Debian Developer's
3027  Reference</ulink> for guidelines for the packaging.  Reference</ulink> for guidelines for packaging.
3028  </para>  </para>
3029  <para>  <para>
3030  The <command>dh_make</command> command will create some template configuration  The <command>dh_make</command> command will create some template configuration
# Line 2739  filenames suffixed by <literal>.ex</lite Line 3033  filenames suffixed by <literal>.ex</lite
3033  prefixed by the binary package name such as  prefixed by the binary package name such as
3034  <literal><replaceable>package</replaceable></literal>.  Take a look at all of  <literal><replaceable>package</replaceable></literal>.  Take a look at all of
3035  them.  them.
3036    <footnote><para>
3037    In this chapter, files in the <filename>debian</filename> directory are
3038    referred to without the preceding <filename>debian/</filename> for simplicity whenever
3039    they are obvious.
3040    </para></footnote>
3041  </para>  </para>
3042  <para>  <para>
3043  The <command>dh_make</command> command may not create some template  Some template configuration files for <systemitem role="package">debhelper</systemitem>
3044  configuration files for <systemitem role="package">debhelper</systemitem>.  In  may not be created by the <command>dh_make</command> command.  In
3045  such cases, you need to create them with the editor.  such cases, you need to create them with an editor.
3046  </para>  </para>
3047  <para>  <para>
3048  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:
3049  </para>  </para>
3050  <itemizedlist>  <itemizedlist>
3051  <listitem>  <listitem>
3052  <para>  <para>
3053  rename template files by removing the <literal>.ex</literal> or  rename template files by removing the <literal>.ex</literal> or
3054  <literal>.EX</literal> suffix if the template files have one.  <literal>.EX</literal> suffix if they have one;
3055  </para>  </para>
3056  </listitem>  </listitem>
3057  <listitem>  <listitem>
3058  <para>  <para>
3059  rename the name of these configuration files using the actual binary package  rename the configuration files to use the actual binary package
3060  name in place of <literal><replaceable>package</replaceable></literal>.  name in place of <literal><replaceable>package</replaceable></literal>;
3061  </para>  </para>
3062  </listitem>  </listitem>
3063  <listitem>  <listitem>
3064  <para>  <para>
3065  modify template file contents to suit your needs.  modify template file contents to suit your needs;
3066  </para>  </para>
3067  </listitem>  </listitem>
3068  <listitem>  <listitem>
3069  <para>  <para>
3070  remove template files which you do not need.  remove template files which you do not need;
3071  </para>  </para>
3072  </listitem>  </listitem>
3073  <listitem>  <listitem>
3074  <para>  <para>
3075  modify the <filename>control</filename> file (see <xref linkend="control"/> ),  modify the <filename>control</filename> file (see <xref linkend="control"/>),
3076  if necessary.  if necessary;
3077  </para>  </para>
3078  </listitem>  </listitem>
3079  <listitem>  <listitem>
3080  <para>  <para>
3081  modify the <filename>rules</filename> file (see <xref linkend="rules"/> ), if  modify the <filename>rules</filename> file (see <xref linkend="rules"/>), if
3082  necessary.  necessary.
3083  </para>  </para>
3084  </listitem>  </listitem>
3085  </itemizedlist>  </itemizedlist>
3086  <para>  <para>
3087  Those <systemitem role="package">debhelper</systemitem> configuration files  Any <systemitem role="package">debhelper</systemitem> configuration files
3088  without <filename><replaceable>package</replaceable></filename> prefix such as  without a <filename><replaceable>package</replaceable></filename> prefix, such as
3089  <filename>install</filename> apply to the first binary package.  When there are  <filename>install</filename>, apply to the first binary package.  When there are
3090  many binary packages, their configurations can be specified by prefixing their  many binary packages, their configurations can be specified by prefixing their
3091  name to their configuration filenames such as  name to their configuration filenames such as
3092  <filename><replaceable>package-1</replaceable>.install</filename>,  <filename><replaceable>package-1</replaceable>.install</filename>,
3093  <filename><replaceable>package-2</replaceable>.install</filename>, etc.  <filename><replaceable>package-2</replaceable>.install</filename>, etc.
3094  </para>  </para>
3095  <section id="readme"><title><filename>README.Debian</filename> file</title>  <section id="readme"><title><filename>README.Debian</filename></title>
3096  <para>  <para>
3097  Any extra details or discrepancies between the original package and your Debian  Any extra details or discrepancies between the original package and your Debian
3098  version should be documented here.  version should be documented here.
3099  </para>  </para>
3100  <para>  <para>
3101  <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:
3102  </para>  </para>
3103  <screen>  <screen>
3104  gentoo for Debian  gentoo for Debian
# Line 2813  If you have nothing to be documented, re Line 3112  If you have nothing to be documented, re
3112  </citerefentry>.  </citerefentry>.
3113  </para>  </para>
3114  </section>  </section>
3115  <section id="compat"><title><filename>compat</filename> file</title>  <section id="compat"><title><filename>compat</filename></title>
3116  <para>  <para>
3117  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
3118  should set it to the <systemitem role="package">debhelper</systemitem> V7 by  should set it to the <systemitem role="package">debhelper</systemitem> v7 as
3119  the following.  follows:
3120  </para>  </para>
3121  <screen>  <screen>
3122  $ echo 7 &gt; debian/compat  $ echo 7 &gt; debian/compat
3123  </screen>  </screen>
3124  </section>  </section>
3125  <section id="conffiles"><title><filename>conffiles</filename> file</title>  <section id="conffiles"><title><filename>conffiles</filename></title>
3126  <para>  <para>
3127  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
3128  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
3129  over your changes.  Debian solves this problem by marking such configuration files as conffiles.  over your changes.  Debian solves this problem by marking such configuration files as conffiles.
3130  <footnote><para>See <citerefentry> <refentrytitle>dpkg</refentrytitle>  <footnote><para>See <citerefentry> <refentrytitle>dpkg</refentrytitle>
3131  <manvolnum>1</manvolnum> </citerefentry> and  <manvolnum>1</manvolnum> </citerefentry> and
3132  <ulink url="&policy-conffiles;">Debian Policy Manual 'D.2.5 Conffiles'</ulink>.  <ulink url="&policy-conffiles;">Debian Policy Manual "D.2.5 Conffiles"</ulink>.
3133  </para></footnote>  </para></footnote>
3134  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
3135  your old configuration files or not.  your old configuration files or not.
3136  </para>  </para>
3137  <para>  <para>
3138  Since <systemitem role="package">debhelper</systemitem> V3, <citerefentry>  <citerefentry><refentrytitle>dh_installdeb</refentrytitle> <manvolnum>1</manvolnum>
3139  <refentrytitle>dh_installdeb</refentrytitle> <manvolnum>1</manvolnum>  </citerefentry> <emphasis>automatically</emphasis> flags any files under
 </citerefentry> will <emphasis>automatically</emphasis> flag any files under  
3140  the <filename>/etc</filename> directory as conffiles, so if your program only  the <filename>/etc</filename> directory as conffiles, so if your program only
3141  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
3142  package types, the only place there is (and should be conffiles) is under  package types, the only place conffiles should ever be is under
3143  <filename>/etc</filename> and so this file doesn't need to exist.  <filename>/etc</filename>, and so this file doesn't need to exist.
3144  </para>  </para>
3145  <para>  <para>
3146  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,
3147  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
3148  then prompt users to verify the changes all the time.  then prompt users to verify the changes all the time.
3149  </para>  </para>
3150  <para>  <para>
3151  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
3152  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
3153  make them not as conffiles to keep <command>dpkg</command> quiet.  arrange for them to not be conffiles, keeping <command>dpkg</command> quiet.
3154  </para>  </para>
3155  <itemizedlist>  <itemizedlist>
3156  <listitem>  <listitem>
3157  <para>  <para>
3158  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
3159  file under the <filename>/var</filename> directory generated by the  file under the <filename>/var</filename> directory generated by the
3160  <emphasis>maintainer scripts</emphasis>.  maintainer scripts.
3161  </para>  </para>
3162  </listitem>  </listitem>
3163  <listitem>  <listitem>
3164  <para>  <para>
3165  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.  
3166  </para>  </para>
3167  </listitem>  </listitem>
3168  </itemizedlist>  </itemizedlist>
3169  <para>  <para>
3170  For more information on the <emphasis>maintainer scripts</emphasis>, see <xref linkend="maintscripts"/> .  For information on maintainer scripts, see <xref linkend="maintscripts"/>.
3171  </para>  </para>
3172  </section>  </section>
3173  <section id="crond"><title><filename><replaceable>package</replaceable>.cron.*</filename> files</title>  <section id="crond"><title><filename><replaceable>package</replaceable>.cron.*</filename></title>
3174  <para>  <para>
3175  If your package requires regularly scheduled tasks to operate properly, you can  If your package requires regularly scheduled tasks to operate properly, you can
3176  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
3177  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
3178  you wish.  The filenames are:  you wish.  The filenames are:
3179  </para>  </para>
3180  <itemizedlist>  <itemizedlist>
3181  <listitem>  <listitem>
3182  <para>  <para>
3183  <filename>cron.hourly</filename> - Installed as  <filename><replaceable>package</replaceable>.cron.hourly</filename> - Installed as
3184  <filename>/etc/cron.hourly/<replaceable>package</replaceable></filename>: run  <filename>/etc/cron.hourly/<replaceable>package</replaceable></filename>; run
3185  once an hour every hour.  once an hour.
3186  </para>  </para>
3187  </listitem>  </listitem>
3188  <listitem>  <listitem>
3189  <para>  <para>
3190  <filename>cron.daily</filename> - Installed as  <filename><replaceable>package</replaceable>.cron.daily</filename> - Installed as
3191  <filename>/etc/cron.daily/<replaceable>package</replaceable></filename>: run  <filename>/etc/cron.daily/<replaceable>package</replaceable></filename>; run
3192  once a day, usually early morning.  once a day.
3193  </para>  </para>
3194  </listitem>  </listitem>
3195  <listitem>  <listitem>
3196  <para>  <para>
3197  <filename>cron.weekly</filename> - Installed as  <filename><replaceable>package</replaceable>.cron.weekly</filename> - Installed as
3198  <filename>/etc/cron.weekly/<replaceable>package</replaceable></filename>: run  <filename>/etc/cron.weekly/<replaceable>package</replaceable></filename>; run
3199  once a week, usually early Sunday morning.  once a week.
3200  </para>  </para>
3201  </listitem>  </listitem>
3202  <listitem>  <listitem>
3203  <para>  <para>
3204  <filename>cron.monthly</filename> - Installed as  <filename><replaceable>package</replaceable>.cron.monthly</filename> - Installed as
3205  <filename>/etc/cron.monthly/<replaceable>package</replaceable></filename>: run  <filename>/etc/cron.monthly/<replaceable>package</replaceable></filename>: run
3206  once a month, usually early morning on the first of the month.  once a month.
3207  </para>  </para>
3208  </listitem>  </listitem>
3209  <listitem>  <listitem>
3210  <para>  <para>
3211  <filename>cron.d</filename> - Installed as  <filename><replaceable>package</replaceable>.cron.d</filename> - Installed as
3212  <filename>/etc/cron.d/<replaceable>package</replaceable></filename>: for any  <filename>/etc/cron.d/<replaceable>package</replaceable></filename>: for any
3213  other time  other time.
3214  </para>  </para>
3215  </listitem>  </listitem>
3216  </itemizedlist>  </itemizedlist>
3217  <para>  <para>
3218  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
3219  is <filename><replaceable>package</replaceable>.cron.d</filename> which follows  <filename><replaceable>package</replaceable>.cron.d</filename> which follows
3220  the format of <citerefentry> <refentrytitle>crontab</refentrytitle>  the format of <citerefentry> <refentrytitle>crontab</refentrytitle>
3221  <manvolnum>5</manvolnum> </citerefentry>.  <manvolnum>5</manvolnum> </citerefentry>.
3222  </para>  </para>
3223  <para>  <para>
3224  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;
3225  <refentrytitle>dh_installlogrotate</refentrytitle> <manvolnum>1</manvolnum>  for that, see
3226  </citerefentry> and <citerefentry> <refentrytitle>logrotate</refentrytitle>  <citerefentry><refentrytitle>dh_installlogrotate</refentrytitle>
3227  <manvolnum>8</manvolnum> </citerefentry>.  <manvolnum>1</manvolnum></citerefentry> and
3228    <citerefentry><refentrytitle>logrotate</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
3229  </para>  </para>
3230  </section>  </section>
3231  <section id="dirs"><title><filename>dirs</filename> file</title>  <section id="dirs"><title><filename>dirs</filename></title>
3232  <para>  <para>
3233  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
3234  procedure (<literal>make install DESTDIR=...</literal> invoked by  procedure (<literal>make install DESTDIR=...</literal> invoked by
3235  <literal>dh_auto_install</literal>) somehow doesn't create.  This generally  <literal>dh_auto_install</literal>).  This generally
3236  means there is a problem with the <filename>Makefile</filename>.  means there is a problem with the <filename>Makefile</filename>.
3237  </para>  </para>
3238  <para>  <para>
3239  Files listed in the <filename>install</filename> file doesn't need the  Files listed in an <filename>install</filename> file don't need their
3240  directories created first.  See <xref linkend="install"/> .  directories created first.  See <xref linkend="install"/>.
3241  </para>  </para>
3242  <para>  <para>
3243  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
3244  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
3245  the <filename>dirs</filename> file.  the <filename>dirs</filename> file.
3246  </para>  </para>
3247  </section>  </section>
3248  <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>
3249  <para>  <para>
3250  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
3251  should use the <systemitem role="package">doc-base</systemitem> file to  should use the <systemitem role="package">doc-base</systemitem> file to
3252  register it, so the user can find it with e.g.  <citerefentry>  register it, so the user can find it with e.g.  <citerefentry>
3253  <refentrytitle>dhelp</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>,  <refentrytitle>dhelp</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>,
3254  <citerefentry> <refentrytitle>dwww</refentrytitle> <manvolnum>1</manvolnum>  <citerefentry> <refentrytitle>dwww</refentrytitle> <manvolnum>1</manvolnum>
3255  </citerefentry> or <citerefentry> <refentrytitle>doccentral</refentrytitle>  </citerefentry>, or <citerefentry> <refentrytitle>doccentral</refentrytitle>
3256  <manvolnum>1</manvolnum> </citerefentry>.  <manvolnum>1</manvolnum> </citerefentry>.
3257  </para>  </para>
3258  <para>  <para>
# Line 2962  This usually includes HTML, PS and PDF f Line 3260  This usually includes HTML, PS and PDF f
3260  <filename>/usr/share/doc/<replaceable>packagename</replaceable>/</filename>.  <filename>/usr/share/doc/<replaceable>packagename</replaceable>/</filename>.
3261  </para>  </para>
3262  <para>  <para>
3263  This is how <systemitem role="package">gentoo</systemitem>'s doc-base file  This is what <systemitem role="package">gentoo</systemitem>'s doc-base file
3264  <filename>gentoo.doc-base</filename> looks like:  <filename>gentoo.doc-base</filename> looks like:
3265  </para>  </para>
3266  <screen>  <screen>
# Line 2979  Files: /usr/share/doc/gentoo/html/*.html Line 3277  Files: /usr/share/doc/gentoo/html/*.html
3277  For information on the file format, see <citerefentry>  For information on the file format, see <citerefentry>
3278  <refentrytitle>install-docs</refentrytitle> <manvolnum>8</manvolnum>  <refentrytitle>install-docs</refentrytitle> <manvolnum>8</manvolnum>
3279  </citerefentry> and the <systemitem role="package">doc-base</systemitem>  </citerefentry> and the <systemitem role="package">doc-base</systemitem>
3280  manual, in <filename>/usr/share/doc/doc-base/doc-base.html/</filename>.  manual, in <ulink url="&doc-base;">Debian doc-base Manual</ulink>.
3281  </para>  </para>
3282  <para>  <para>
3283  For more details on installing additional documentation, look in <xref linkend="destdir"/> .  For more details on installing additional documentation, look in <xref linkend="destdir"/>.
3284  </para>  </para>
3285  </section>  </section>
3286  <section id="docs"><title><filename>docs</filename> file</title>  <section id="docs"><title><filename>docs</filename></title>
3287  <para>  <para>
3288  This file specifies the file names of documentation files we can have  This file specifies the file names of documentation files we can have
3289  <citerefentry> <refentrytitle>dh_installdocs</refentrytitle>  <citerefentry> <refentrytitle>dh_installdocs</refentrytitle>
# Line 2998  directory that are called <filename>BUGS Line 3296  directory that are called <filename>BUGS
3296  <filename>README*</filename>, <filename>TODO</filename> etc.  <filename>README*</filename>, <filename>TODO</filename> etc.
3297  </para>  </para>
3298  <para>  <para>
3299  For <systemitem role="package">gentoo</systemitem>, I also included some other  For <systemitem role="package">gentoo</systemitem>, some other files
3300  files:  are also included:
3301  </para>  </para>
3302  <screen>  <screen>
3303  BUGS  BUGS
# Line 3011  README.gtkrc Line 3309  README.gtkrc
3309  TODO  TODO
3310  </screen>  </screen>
3311  </section>  </section>
3312  <section id="emacsen"><title><filename>emacsen-*</filename> file</title>  <section id="emacsen"><title><filename>emacsen-*</filename></title>
3313  <para>  <para>
3314  If your package supplies Emacs files that can be bytecompiled at package  If your package supplies Emacs files that can be bytecompiled at package
3315  installation time, you can use these files to set it up.  installation time, you can use these files to set it up.
# Line 3025  They are installed into the temporary di Line 3323  They are installed into the temporary di
3323  If you don't need these, remove them.  If you don't need these, remove them.
3324  </para>  </para>
3325  </section>  </section>
3326  <section id="examples"><title><filename><replaceable>package</replaceable>.examples</filename> file</title>  <section id="examples"><title><filename><replaceable>package</replaceable>.examples</filename></title>
3327  <para>  <para>
3328  The <citerefentry> <refentrytitle>dh_installexamples</refentrytitle>  The <citerefentry> <refentrytitle>dh_installexamples</refentrytitle>
3329  <manvolnum>1</manvolnum> </citerefentry> command installs files and directories  <manvolnum>1</manvolnum> </citerefentry> command installs files and directories
3330  listed in this file as example files.  listed in this file as example files.
3331  </para>  </para>
3332  </section>  </section>
3333  <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>
3334  <para>  <para>
3335  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
3336  obviously disregarded my initial recommendation, haven't you?  :-)  obviously disregarded my initial recommendation, haven't you?  :-)
3337  </para>  </para>
3338  <para>  <para>
3339  The <filename><replaceable>package</replaceable>.init</filename> file is  The <filename><replaceable>package</replaceable>.init</filename> file is
3340  installed as the  installed as the
3341  <filename>/etc/init.d/<replaceable>package</replaceable></filename> script.  <filename>/etc/init.d/<replaceable>package</replaceable></filename> script
3342    which starts and stops the daemon.
3343  Its fairly generic skeleton template is provided by the  Its fairly generic skeleton template is provided by the
3344  <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
3345  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
3346  Filesystem Hierarchy Standard (see  <ulink url="&lsb;">Linux Standard Base</ulink> (LSB) compliant headers.  It
 <filename>/usr/share/doc/debian-policy/fhs/</filename>) compliant headers.  It  
3347  gets installed into the temporary directory by <citerefentry>  gets installed into the temporary directory by <citerefentry>
3348  <refentrytitle>dh_installinit</refentrytitle> <manvolnum>1</manvolnum>  <refentrytitle>dh_installinit</refentrytitle> <manvolnum>1</manvolnum>
3349  </citerefentry>.  </citerefentry>.
3350  </para>  </para>
3351  <para>  <para>
3352  The <filename><replaceable>package</replaceable>.default</filename> file will  The <filename><replaceable>package</replaceable>.default</filename> file will
3353  be installed into  be installed as
3354  <filename>/etc/default/<replaceable>package</replaceable></filename>.  This  <filename>/etc/default/<replaceable>package</replaceable></filename>.  This
3355  file sets defaults that are sourced by the init script.  Most times this  file sets defaults that are sourced by the init script.  This
3356  default file is used to disable running a daemon, set some default flags or  <filename><replaceable>package</replaceable>.default</filename> file
3357  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
3358  features you want to install these into the default file, not the init script.  timeouts.  If your init script has certain configurable
3359    features, you can set them in the <filename><replaceable>package</replaceable>.default</filename> file,
3360    instead of in the init script itself.
3361  </para>  </para>
3362  <para>  <para>
3363  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
3364  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
3365  <filename>debian/<replaceable>package</replaceable>.init</filename>.  However  <filename><replaceable>package</replaceable>.init</filename>.  However
3366  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
3367  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
3368  need to override <command>dh_installinit</command> in the  need to override <command>dh_installinit</command> in the
3369  <filename>rules</filename> file with the following lines:  <filename>rules</filename> file with the following lines:
3370  </para>  </para>
# Line 3076  override_dh_installinit: Line 3376  override_dh_installinit:
3376  If you don't need this, remove the files.  If you don't need this, remove the files.
3377  </para>  </para>
3378  </section>  </section>
3379  <section id="install"><title><filename>install</filename> file</title>  <section id="install"><title><filename>install</filename></title>
3380  <para>  <para>
3381  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
3382  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
3383  destinations into this <filename>install</filename> file.  They are installed  destinations into this <filename>install</filename> file.  They are installed
3384  by <citerefentry> <refentrytitle>dh_install</refentrytitle>  by <citerefentry> <refentrytitle>dh_install</refentrytitle>
3385  <manvolnum>1</manvolnum> </citerefentry>.<footnote><para> This replaces the  <manvolnum>1</manvolnum> </citerefentry>.<footnote><para> This replaces the
# Line 3092  the <filename>docs</filename> file and n Line 3392  the <filename>docs</filename> file and n
3392  <para>  <para>
3393  This <filename>install</filename> file has one line per file installed, with  This <filename>install</filename> file has one line per file installed, with
3394  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
3395  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
3396  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:  
3397  </para>  </para>
3398  <screen>  <screen>
3399  src/foo/mybin usr/bin  src/<replaceable>bar</replaceable> usr/bin
3400  </screen>  </screen>
3401  <para>  <para>
3402  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
3403  <filename>/usr/bin/mybin</filename>.  <filename>/usr/bin/<replaceable>bar</replaceable></filename>.
3404  </para>  </para>
3405  <para>  <para>
3406  Alternatively, this <filename>install</filename> can have the name of the file  Alternatively, this <filename>install</filename> can have the name of the file
3407  only without the installation directory when the relative directory path does  only without the installation directory when the relative directory path does
3408  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
3409  result into multiple binary packages using  output of its build into multiple binary packages using
3410  <filename><replaceable>package-1</replaceable>.install</filename>,  <filename><replaceable>package-1</replaceable>.install</filename>,
3411  <filename><replaceable>package-2</replaceable>.install</filename>, etc.  <filename><replaceable>package-2</replaceable>.install</filename>, etc.
3412  </para>  </para>
3413  <para>  <para>
3414  The <command>dh_install</command> command will fall back to look in  The <command>dh_install</command> command will fall back to looking in
3415  <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
3416  current directory (or wherever you've told it to look using  current directory (or wherever you've told it to look using
3417  <literal>--sourcedir</literal>).  <literal>--sourcedir</literal>).
3418  </para>  </para>
3419  </section>  </section>
3420  <section id="info"><title><filename><replaceable>package</replaceable>.info</filename> file</title>  <section id="info"><title><filename><replaceable>package</replaceable>.info</filename></title>
3421  <para>  <para>
3422  If your package has info pages, you should install them using <citerefentry>  If your package has info pages, you should install them using <citerefentry>
3423  <refentrytitle>dh_installinfo</refentrytitle> <manvolnum>1</manvolnum>  <refentrytitle>dh_installinfo</refentrytitle> <manvolnum>1</manvolnum>
3424  </citerefentry> by listing them in the  </citerefentry> by listing them in a
3425  <filename><replaceable>package</replaceable>.info</filename> files.  <filename><replaceable>package</replaceable>.info</filename> file.
3426  </para>  </para>
3427  </section>  </section>
3428  <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>
3429  <para>  <para>
3430  If <systemitem role="package">lintian</systemitem> reports an erroneous  If <systemitem role="package">lintian</systemitem> reports an erroneous
3431  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
3432  use <filename><replaceable>package</replaceable>.lintian-overrides</filename>  use <filename><replaceable>package</replaceable>.lintian-overrides</filename>
3433  or <filename>source/lintian-overrides</filename> to quiet it.  Please read  or <filename>source/lintian-overrides</filename> to quieten it.  Please read
3434  <filename>/usr/share/doc/lintian/lintian.html/index.html</filename> and refrain  <ulink url="&lintian-doc;">Lintian User's Manual</ulink> and refrain
3435  from abusing this.  from abusing this.
3436  </para>  </para>
3437  <para>  <para>
3438  <filename><replaceable>package</replaceable>.lintian-overrides</filename> is  <filename><replaceable>package</replaceable>.lintian-overrides</filename> is
3439  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
3440  into  into
3441  <filename>usr/share/lintian/overrides/<replaceable>package</replaceable></filename>  <filename>usr/share/lintian/overrides/<replaceable>package</replaceable></filename>
3442  by the <command>dh_lintian</command> command.  by the <command>dh_lintian</command> command.
# Line 3147  by the <command>dh_lintian</command> com Line 3446  by the <command>dh_lintian</command> com
3446  is not installed.  is not installed.
3447  </para>  </para>
3448  </section>  </section>
3449  <section id="manpage"><title><filename>manpage.*</filename> files</title>  <section id="manpage"><title><filename>manpage.*</filename></title>
3450  <para>  <para>
3451  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
3452  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
3453  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
3454  manual page.  Please make sure to remove unused templates.  manual page.  Please make sure to remove unused templates.
3455  </para>  </para>
3456  <section id="manpage1"><title><filename>manpage.1.ex</filename> file</title>  <section id="manpage1"><title><filename>manpage.1.ex</filename></title>
3457  <para>  <para>
3458  Manual pages are normally written in <citerefentry>  Manual pages are normally written in <citerefentry>
3459  <refentrytitle>nroff</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.  <refentrytitle>nroff</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.
# Line 3164  The <filename>manpage.1.ex</filename> te Line 3463  The <filename>manpage.1.ex</filename> te
3463  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.
3464  </para>  </para>
3465  <para>  <para>
3466  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
3467  documenting, so we will rename it from <literal>manpage</literal> to  documenting, so we will rename it from <literal>manpage</literal> to
3468  <literal>gentoo</literal>.  The file name also includes <literal>.1</literal>  <literal>gentoo</literal>.  The file name also includes <literal>.1</literal>
3469  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
3470  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
3471  list of manual page sections:  list of manual page sections:
3472  </para>  </para>
3473  <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>  
3474  <tgroup cols="3">  <tgroup cols="3">
3475    <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"/>
3476    <thead>    <thead>
# Line 3182  list of manual page sections: Line 3480  list of manual page sections:
3480      <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>
3481      <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>
3482      <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>
3483      <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>
3484      <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>
3485      <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>
3486      <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>
3487      <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>
3488      <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>
3489    </tbody>    </tbody>
3490  </tgroup>  </tgroup>
3491  </table>  </informaltable>
3492  <para>  <para>
3493  So <systemitem role="package">gentoo</systemitem>'s man page should be called  So <systemitem role="package">gentoo</systemitem>'s man page should be called
3494  <filename>gentoo.1</filename>.  If there was no <filename>gentoo.1</filename>  <filename>gentoo.1</filename>.  If there was no <filename>gentoo.1</filename>
3495  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
3496  <filename>manpage.1.ex</filename> template to <filename>gentoo.1</filename> and  <filename>manpage.1.ex</filename> template to <filename>gentoo.1</filename> and
3497  edit it by using information from the example and from upstream docs.  editing it using information from the example and from the upstream docs.
3498  </para>  </para>
3499  <para>  <para>
3500  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
3501  of <literal>--help</literal> and <literal>--version</literal> output of each  of the <literal>--help</literal> and <literal>--version</literal> output of each
3502  program, too.  <footnote><para> If the command is missing  program, too.  <footnote><para> Note that <command>help2man</command>'s
3503  <command>info</command> page but have documentation files in the  placeholder man page will claim that more detailed documentation is
3504  <filename>/usr/share/<replaceable>package</replaceable></filename> directory,  available in the info system. If the command is missing an
3505  you should manually edit generated the man page created by the  <command>info</command> page, you
3506    should manually edit the man page created by the
3507  <command>help2man</command> command.  </para> </footnote>  <command>help2man</command> command.  </para> </footnote>
3508  </para>  </para>
3509  </section>  </section>
3510  <section id="manpagesgml"><title><filename>manpage.sgml.ex</filename> file</title>  <section id="manpagesgml"><title><filename>manpage.sgml.ex</filename></title>
3511  <para>  <para>
3512  If on the other hand you prefer writing SGML instead of  If on the other hand you prefer writing SGML instead of
3513  <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 3233  line in the <filename>control</filename> Line 3532  line in the <filename>control</filename>
3532  </listitem>  </listitem>
3533  <listitem>  <listitem>
3534  <para>  <para>
3535  add a <literal>override_dh_auto_build</literal> target to your  add an <literal>override_dh_auto_build</literal> target to your
3536  <filename>rules</filename> file:  <filename>rules</filename> file:
3537  </para>  </para>
3538  <screen>  <screen>
# Line 3244  override_dh_auto_build: Line 3543  override_dh_auto_build:
3543  </listitem>  </listitem>
3544  </itemizedlist>  </itemizedlist>
3545  </section>  </section>
3546  <section id="manpagexml"><title><filename>manpage.xml.ex</filename> file</title>  <section id="manpagexml"><title><filename>manpage.xml.ex</filename></title>
3547  <para>  <para>
3548  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>
3549  template.  If you do this, you have to:  template.  If you do this, you have to:
# Line 3264  XSLT processor like <systemitem role="pa Line 3563  XSLT processor like <systemitem role="pa
3563  </listitem>  </listitem>
3564  <listitem>  <listitem>
3565  <para>  <para>
3566  add the <literal>docbook-xsl</literal>, <literal>docbook-xml</literal> and  add the <literal>docbook-xsl</literal>, <literal>docbook-xml</literal>, and
3567  <literal>xsltproc</literal> packages to the <literal>Build-Depends</literal>  <literal>xsltproc</literal> packages to the <literal>Build-Depends</literal>
3568  line in the <literal>control</literal> file  line in the <literal>control</literal> file
3569  </para>  </para>
3570  </listitem>  </listitem>
3571  <listitem>  <listitem>
3572  <para>  <para>
3573  add a <literal>override_dh_auto_build</literal> target to your  add an <literal>override_dh_auto_build</literal> target to your
3574  <filename>rules</filename> file:  <filename>rules</filename> file:
3575  </para>  </para>
3576  <screen>  <screen>
# Line 3293  override_dh_auto_build: Line 3592  override_dh_auto_build:
3592  <para>  <para>
3593  If your package has manual pages, you should install them using <citerefentry>  If your package has manual pages, you should install them using <citerefentry>
3594  <refentrytitle>dh_installman</refentrytitle> <manvolnum>1</manvolnum>  <refentrytitle>dh_installman</refentrytitle> <manvolnum>1</manvolnum>
3595  </citerefentry> by listing them in the  </citerefentry> by listing them in a
3596  <filename><replaceable>package</replaceable>.manpages</filename> files.  <filename><replaceable>package</replaceable>.manpages</filename> file.
3597  </para>  </para>
3598  <para>  <para>
3599  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
3600  <filename>gentoo.manpages</filename> file as:  <filename>gentoo.manpages</filename> file as follows.
3601  </para>  </para>
3602  <screen>  <screen>
3603  docs/gentoo.1  docs/gentoo.1
3604  </screen>  </screen>
3605  </section>  </section>
3606  <section id="menu"><title><filename>menu</filename> file</title>  <section id="menu"><title><filename>menu</filename></title>
3607  <para>  <para>
3608  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
3609  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 3312  the system will be created for them. Line 3611  the system will be created for them.
3611  </para>  </para>
3612  <para>  <para>
3613  Here's the default <filename>menu.ex</filename> file that  Here's the default <filename>menu.ex</filename> file that
3614  <command>dh_make</command> created:  <command>dh_make</command> created.
3615  </para>  </para>
3616  <screen>  <screen>
3617  ?package(gentoo):needs=X11|text|vc|wm \  ?package(gentoo):needs=X11|text|vc|wm \
# Line 3325  specifies what kind of interface the pro Line 3624  specifies what kind of interface the pro
3624  listed alternatives, e.g.  <literal>text</literal> or <literal>X11</literal>.  listed alternatives, e.g.  <literal>text</literal> or <literal>X11</literal>.
3625  </para>  </para>
3626  <para>  <para>
3627  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
3628  should appear in.  The current list of sections <footnote><para> There were a  should appear in.
3629  major reorganization of menu structure for <literal>squeeze</literal>.  </para>  <footnote><para> The current list of sections is in
3630  </footnote> is at:  <ulink url="&menu-structure;">The Debian Menu sub-policy 2.1 "Preferred menu structure"</ulink>.
3631  <filename>/usr/share/doc/debian-policy/menu-policy.html/ch2.html#s2.1</filename>  There was a major reorganization of menu structure for <literal>squeeze</literal>.
3632    </para> </footnote>
3633  </para>  </para>
3634  <para>  <para>
3635  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 3355  You can also add other fields like <lite Line 3655  You can also add other fields like <lite
3655  </citerefentry>, <citerefentry> <refentrytitle>menufile</refentrytitle>  </citerefentry>, <citerefentry> <refentrytitle>menufile</refentrytitle>
3656  <manvolnum>5</manvolnum> </citerefentry>, <citerefentry>  <manvolnum>5</manvolnum> </citerefentry>, <citerefentry>
3657  <refentrytitle>update-menus</refentrytitle> <manvolnum>1</manvolnum>  <refentrytitle>update-menus</refentrytitle> <manvolnum>1</manvolnum>
3658  </citerefentry> and  </citerefentry>, and
3659  <filename>/usr/share/doc/debian-policy/menu-policy.html/</filename> for more  <ulink url="&policy-menu;">The Debian Menu sub-policy</ulink> for more
3660  information.  information.
3661  </para>  </para>
3662  </section>  </section>
3663  <section id="news"><title><filename>NEWS</filename> file</title>  <section id="news"><title><filename>NEWS</filename></title>
3664  <para>  <para>
3665  The <citerefentry> <refentrytitle>dh_installchangelogs</refentrytitle>  The <citerefentry> <refentrytitle>dh_installchangelogs</refentrytitle>
3666  <manvolnum>1</manvolnum> </citerefentry> command installs this.  <manvolnum>1</manvolnum> </citerefentry> command installs this.
3667  </para>  </para>
3668  </section>  </section>
3669  <section id="maintscripts"><title><filename>{post|pre}{inst|rm}</filename> files</title>  <section id="maintscripts"><title><filename>{pre,post}{inst,rm}</filename></title>
3670  <para>  <para>
3671  These <filename>postinst</filename>, <filename>preinst</filename>,  These <filename>postinst</filename>, <filename>preinst</filename>,
3672  <filename>postrm</filename>, and <filename>prerm</filename> files  <filename>postrm</filename>, and <filename>prerm</filename> files
3673  <footnote><para> Although I used Bash short hand expression to indicate these  <footnote><para> Despite this use of the <command>bash</command>
3674  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
3675  pure POSIX (non-Bash) shell for these <emphasis>maintainer scripts</emphasis>  filenames, you should use pure POSIX syntax for these maintainer scripts for
3676  as much as possible for the better compatibility.  </para> </footnote> are  compatibility with <command>dash</command> as the system shell.  </para> </footnote> are
3677  called <emphasis>maintainer scripts</emphasis>.  They are scripts which are put  called <emphasis>maintainer scripts</emphasis>.  They are scripts which are put
3678  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
3679  package is installed, upgraded or removed.  package is installed, upgraded, or removed.
3680  </para>  </para>
3681  <para>  <para>
3682  As a novice maintainer, you should avoid any manual editing of  As a novice maintainer, you should avoid any manual editing of
3683  <emphasis>maintainer scripts</emphasis> because they are problematic.  For more  maintainer scripts because they are problematic.  For more
3684  information look in the <ulink url="&policy-mantainerscripts;">Debian  information refer to the <ulink url="&policy-mantainerscripts;">Debian
3685  Policy Manual, 6 'Package maintainer scripts and installation  Policy Manual, 6 "Package maintainer scripts and installation
3686  procedure'</ulink>, and take a look at these example files provided by  procedure"</ulink>, and take a look at the example files provided by
3687  <command>dh_make</command>.  <command>dh_make</command>.
3688  </para>  </para>
3689  <para>  <para>
3690  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
3691  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
3692  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
3693    <emphasis role="strong">upgrade</emphasis> but also for
3694    <emphasis role="strong">remove</emphasis> and
3695    <emphasis role="strong">purge</emphasis>.
3696  </para>  </para>
3697  <para>  <para>
3698  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
3699  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
3700  fixed and there perhaps are new features).  fixed and perhaps that there are new features).
3701  </para>  </para>
3702  <para>  <para>
3703  When the upgrade is necessarily intrusive (eg., config files scattered through  When the upgrade is necessarily intrusive (eg., config files scattered through
3704  various home directories with totally different structure), you may consider to  various home directories with totally different structure), you may
3705  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
3706  documentations required by the policy (<filename>README.Debian</filename> and  (e.g., disabling a service) and providing the proper documentation
3707  <filename>NEWS.Debian</filename>) as the last resort.  Don't bother user with  required by policy (<filename>README.Debian</filename> and
3708  the <command>debconf</command> note invoked from these <emphasis>maintainer  <filename>NEWS.Debian</filename>).  Don't bother the user with
3709  scripts</emphasis> for upgrades.  <command>debconf</command> notes invoked from these maintainer scripts
3710    for upgrades.
3711  </para>  </para>
3712  <para>  <para>
3713  The <systemitem role="package">ucf</systemitem> package provides  The <systemitem role="package">ucf</systemitem> package provides a
3714  <emphasis>conffile-like</emphasis> handling infrastructure to preserve user  <emphasis>conffile-like</emphasis> handling infrastructure to preserve user
3715  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
3716  as ones managed by the <emphasis>maintainer scripts</emphasis>.  This should  as those managed by the maintainer scripts.  This should
3717  minimize issues associated with them.  minimize issues associated with them.
3718  </para>  </para>
3719  <para>  <para>
3720  These <emphasis>maintainer scripts</emphasis> are the Debian enhancements that  These maintainer scripts are among the Debian enhancements that
3721  explain <emphasis role="strong">why people choose Debian</emphasis>.  You must  explain <emphasis role="strong">why people choose Debian</emphasis>.  You must
3722  be very careful not to annoy them with these.  be very careful not to turn them into a source of annoyance.
3723  </para>  </para>
3724  </section>  </section>
3725  <section id="todo"><title><filename>TODO</filename> file</title>  <section id="todo"><title><filename>TODO</filename></title>
3726  <para>  <para>
3727  The <citerefentry> <refentrytitle>dh_installdocs</refentrytitle>  The <citerefentry> <refentrytitle>dh_installdocs</refentrytitle>
3728  <manvolnum>1</manvolnum> </citerefentry> command installs this.  <manvolnum>1</manvolnum> </citerefentry> command installs this.
3729  </para>  </para>
3730  </section>  </section>
3731  <section id="watch"><title><filename>watch</filename> file</title>  <section id="watch"><title><filename>watch</filename></title>
3732  <para>  <para>
3733  The <filename>watch</filename> file format is documented in the <citerefentry>  The <filename>watch</filename> file format is documented in the <citerefentry>
3734  <refentrytitle>uscan</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>  <refentrytitle>uscan</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>
3735  manpage.  The <filename>watch</filename> file configures the  manpage.  The <filename>watch</filename> file configures the
3736  <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
3737  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
3738    <ulink url="&dehs;">Debian External Health Status (DEHS)</ulink> service.
3739  </para>  </para>
3740  <para>  <para>
3741  Here's what I put in it:  Here are its contents:
3742  </para>  </para>
3743  <screen>  <screen>
3744  # watch control file for uscan  # watch control file for uscan
# Line 3441  version=3 Line 3746  version=3
3746  &sf-net;/gentoo/gentoo-(.+)\.tar\.gz debian uupdate  &sf-net;/gentoo/gentoo-(.+)\.tar\.gz debian uupdate
3747  </screen>  </screen>
3748  <para>  <para>
3749  Normally with this <filename>watch</filename> file, the URL at  Normally with a <filename>watch</filename> file, the URL at
3750  <literal>&sf-net;/gentoo</literal> is downloaded and searched for links of  <literal>&sf-net;/gentoo</literal> is downloaded and searched for links of
3751  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
3752  after the final <literal>/</literal>) of these linked URLs are matched against  after the final <literal>/</literal>) of each linked URL is compared against
3753  Perl regexp (see <citerefentry> <refentrytitle>perlre</refentrytitle>  the Perl regular expression pattern (see <citerefentry> <refentrytitle>perlre</refentrytitle>
3754  <manvolnum>1</manvolnum> </citerefentry>) pattern  <manvolnum>1</manvolnum> </citerefentry>)
3755  <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
3756  the greatest version number is downloaded and the <command>uupdate</command>  the greatest version number is downloaded and the <command>uupdate</command>
3757  program is run to create the updated source tree from them.  program is run to create an updated source tree.
3758  </para>  </para>
3759  <para>  <para>
3760  Although this is true for other sites, the SourceForge download service at  Although this is true for other sites, the SourceForge download service at
3761  <ulink url="&sf-net;">&sf-net;</ulink> is an exception.  When the  <ulink url="&sf-net;"/> is an exception.  When the
3762  <filename>watch</filename> file has an URL matching with the Perl regexp  <filename>watch</filename> file has an URL matching the Perl regexp
3763  <literal>^http://sf\.net/</literal>, the <command>uscan</command> program  <literal>^http://sf\.net/</literal>, the <command>uscan</command> program
3764  substitutes it with <literal>&qa-do;watch/sf.php/</literal> and  replaces it with <literal>&qa-do;watch/sf.php/</literal> and
3765  then applies this rule.  The URL redirector service at this <ulink url="&qa-do;">&qa-do;</ulink> is designed to offer  then applies this rule.  The URL redirector service at <ulink url="&qa-do;"/> is designed to offer
3766  a stable redirect service to the desired file for the  a stable redirect service to the desired file for any
3767  <filename>watch</filename> file having  <filename>watch</filename> pattern of the form
3768  <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>.
3769  This solves issues related to the periodically changing URL there.  This solves issues related to periodically changing SourceForge URLs.
3770  </para>  </para>
3771  </section>  </section>
3772  <section id="sourcef"><title><filename>source/format</filename> file</title>  <section id="sourcef"><title><filename>source/format</filename></title>
3773  <para>  <para>
3774  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
3775  line indicating the desired format for the source package (check <citerefentry>  line indicating the desired format for the source package (check <citerefentry>
# Line 3488  should say either: Line 3793  should say either:
3793  The newer <literal>3.0 (quilt)</literal> source format records modifications in  The newer <literal>3.0 (quilt)</literal> source format records modifications in
3794  a <command>quilt</command> patch series within  a <command>quilt</command> patch series within
3795  <filename>debian/patches</filename>.  Those changes are then automatically  <filename>debian/patches</filename>.  Those changes are then automatically
3796  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
3797  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
3798  (quilt)</literal> and <literal>3.0 (native)</literal> source formats.  </para>  (quilt)</literal> and <literal>3.0 (native)</literal> source formats.  </para>
3799  </footnote> The Debian modifications are simply stored in a  </footnote> The Debian modifications are simply stored in a
3800  <filename>debian.tar.gz</filename> archive containing all files under the  <filename>debian.tar.gz</filename> archive containing all files under the
3801  <filename>debian</filename> directory.  This new format supports inclusion of  <filename>debian</filename> directory.  This new format supports inclusion of
3802  binary files such as PNG icons by the package maintainer without requiring  binary files such as PNG icons by the package maintainer without requiring
3803  tricks.  <footnote><para> Actually, this new format also supports multiple  tricks.  <footnote><para>Actually, this new format also supports multiple
3804  upstream tarballs and more compression methods.  These are beyond the scope of  upstream tarballs and more compression methods.  These are beyond the scope of
3805  this document.  </para> </footnote>  this document.</para> </footnote>
3806  </para>  </para>
3807  <para>  <para>
3808  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 3506  When <command>dpkg-source</command> extr Line 3811  When <command>dpkg-source</command> extr
3811  the end of the extraction with the <literal>--skip-patches</literal> option.  the end of the extraction with the <literal>--skip-patches</literal> option.
3812  </para>  </para>
3813  </section>  </section>
3814  <section id="sourcel"><title><filename>source/local-options</filename> file</title>  <section id="sourcel"><title><filename>source/local-options</filename></title>
3815  <para>  <para>
3816  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
3817  create one branch (e.g.  <literal>upstream</literal>) tracking the upstream  create one branch (e.g.  <literal>upstream</literal>) tracking the upstream
# Line 3517  Debian packaging to ease merging of the Line 3822  Debian packaging to ease merging of the
3822  </para>  </para>
3823  <para>  <para>
3824  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
3825  unpatch it manually by running <literal>quilt pop -a</literal> before  unpatch it manually by running <literal>dquilt pop -a</literal> before
3826  committing to the <literal>master</literal> branch.  You can automate this by  committing to the <literal>master</literal> branch.  You can automate this by
3827  adding the optional <filename>debian/source/local-options</filename> file  adding the optional <filename>debian/source/local-options</filename> file
3828  containing <literal>unapply-patches</literal>.  This file is not included in  containing <literal>unapply-patches</literal>.  This file is not included in
# Line 3531  unapply-patches Line 3836  unapply-patches
3836  abort-on-upstream-changes  abort-on-upstream-changes
3837  </screen>  </screen>
3838  </section>  </section>
3839  <section id="sourceopt"><title><filename>source/options</filename> file</title>  <section id="sourceopt"><title><filename>source/options</filename></title>
3840    <para>
3841    The autogenerated files in the source tree can be quite annoying for packaging
3842    since they generate meaningless large patch files.  There are custom modules
3843    such as <command>dh_autoreconf</command> to ease this problem as described in
3844    <xref linkend="customrules"/>.
3845    </para>
3846  <para>  <para>
3847  When you want to build a source package while ignoring changes made  You can provide a Perl regular expression to the
3848  to the autogenerated files such as <filename>config.sub</filename>  <literal>--extend-diff-ignore</literal> option argument of <citerefentry>
 <filename>config.guess</filename> and <filename>Makefile</filename>, you can  
 use <literal>--extend-diff-ignore</literal> option of <citerefentry>  
3849  <refentrytitle>dpkg-source</refentrytitle><manvolnum>1</manvolnum>  <refentrytitle>dpkg-source</refentrytitle><manvolnum>1</manvolnum>
3850  </citerefentry>.  </citerefentry> to ignore changes made to the autogenerated files while
3851    creating the source package.
3852  </para>  </para>
3853  <para>  <para>
3854  Even if your package can not be packaged easily using  As a general solution to address this problem of the autogenerated files,
3855  <command>dh_autoreconf</command> as described in <xref linkend="customrules"/>,  you can store such a <command>dpkg-source</command> option argument in the
3856  you can package it cleanly by storing the <command>dpkg-source</command> option  <filename>source/options</filename> file of the source package.  The following
3857  in the <filename>source/options</filename> file to avoid creating meaningless  will skip creating patch files for <filename>config.sub</filename>,
3858  patches as follows.  <filename>config.guess</filename>, and <filename>Makefile</filename>.
3859  </para>  </para>
3860  <screen>  <screen>
3861  extend-diff-ignore = "(^|/)(config\.sub|config\.guess|Makefile)$"  extend-diff-ignore = "(^|/)(config\.sub|config\.guess|Makefile)$"
3862  </screen>  </screen>
3863  </section>  </section>
3864  <section id="patches"><title><filename>patches/*</filename> files</title>  <section id="patches"><title><filename>patches/*</filename></title>
3865  <para>  <para>
3866  The old <literal>1.0</literal> source format created a single large  The old <literal>1.0</literal> source format created a single large
3867  <filename>diff.gz</filename> file which contains package maintenance files in  <filename>diff.gz</filename> file containing package maintenance files in
3868  <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
3869  bit cumbersome to inspect and understand for each source tree modification  bit cumbersome to inspect and understand for each source tree modification
3870  later.  This is not so nice.  later.  This is not so nice.
3871  </para>  </para>
3872  <para>  <para>
3873  The newer <literal>3.0 (quilt)</literal> source format stores patches in  The newer <literal>3.0 (quilt)</literal> source format stores patches in
3874  <filename>debian/patches/*</filename> files using the <command>quilt</command>  <filename>debian/patches/*</filename> files using the <command>quilt</command>
3875  command.  These patches and other package data which are all constrained under  command.  These patches and other package data which are all contained under
3876  the <filename>debian</filename> directory are packaged as the  the <filename>debian</filename> directory are packaged as the
3877  <filename>debian.tar.gz</filename> file.  Since the  <filename>debian.tar.gz</filename> file.  Since the
3878  <command>dpkg-source</command> command can handle <command>quilt</command>  <command>dpkg-source</command> command can handle <command>quilt</command>
3879  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
3880  <systemitem role="package">quilt</systemitem> package, it does not need to  <systemitem role="package">quilt</systemitem> package, it does not need a
3881  <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>.
3882  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
3883  packages.  The <command>quilt</command> system is the preferred maintenance  packages.  The <command>quilt</command> system is the preferred maintenance
3884  system in use.  Other ones are <command>dpatch</command>,  system in use.  Others include <command>dpatch</command>,
3885  <command>dbs</command>, <command>cdbs</command>, etc.  Many of these keep such  <command>dbs</command>, and <command>cdbs</command>.  Many of these keep such
3886  patches as <filename>debian/patches/*</filename> files.  </para> </footnote>  patches as <filename>debian/patches/*</filename> files.  </para> </footnote>
3887  </para>  </para>
3888  <para>  <para>
# Line 3581  The <command>quilt</command> command is Line 3891  The <command>quilt</command> command is
3891  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>
3892  patch files in the <filename>debian/patches</filename> directory and the source  patch files in the <filename>debian/patches</filename> directory and the source
3893  tree is untouched outside of the <filename>debian</filename> directory.  The  tree is untouched outside of the <filename>debian</filename> directory.  The
3894  order of these patches are recorded in the  order of these patches is recorded in the
3895  <filename>debian/patches/series</filename> file.  You can apply (=push),  <filename>debian/patches/series</filename> file.  You can apply (=push),
3896  un-apply (=pop), and refresh patches easily.  <footnote><para> If you are  un-apply (=pop), and refresh patches easily.  <footnote><para> If you are
3897  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
3898  documentation of your changes are very important to expedite the package review  documentation of your changes is very important to expedite the package review
3899  by your sponsor.  </para> </footnote>  by your sponsor.  </para> </footnote>
3900  </para>  </para>
3901  <para>  <para>
3902  For <xref linkend="modify"/> , we created 3 patches in  For <xref linkend="modify"/>, we created three patches in
3903  <filename>debian/patches</filename>.  <filename>debian/patches</filename>.
3904  </para>  </para>
3905  <para>  <para>
3906  Since Debian patches are located in <filename>debian/patches</filename>, please  Since Debian patches are located in <filename>debian/patches</filename>, please
3907  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
3908  in <xref linkend="quiltrc"/> .  in <xref linkend="quiltrc"/>.
3909  </para>  </para>
3910  <para>  <para>
3911  When someone (including yourself) provides you with a patch  When anyone (including yourself) provides a patch
3912  <filename><replaceable>foo</replaceable>.patch</filename> to the source later,  <filename><replaceable>foo</replaceable>.patch</filename> to the source later,
3913  then the modification of a <literal>3.0 (quilt)</literal> source package is  modifying a <literal>3.0 (quilt)</literal> source package is
3914  quite simple:  quite simple:
3915  </para>  </para>
3916  <screen>  <screen>
3917  $ dpkg-source -x gentoo_0.9.12.dsc  $ dpkg-source -x gentoo_0.9.12.dsc
3918  $ cd gentoo-0.9.12  $ cd gentoo-0.9.12
3919  $ quilt import ../<replaceable>foo</replaceable>.patch  $ dquilt import ../<replaceable>foo</replaceable>.patch
3920  $ quilt push  $ dquilt push
3921  $ quilt refresh  $ dquilt refresh
3922  $ quilt header -e  $ dquilt header -e
3923  ... describe patch  ... describe patch
3924  </screen>  </screen>
3925  <para>  <para>
3926  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
3927  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
3928  pop -a; while quilt push; do quilt refresh; done</literal>.  pop -a; while dquilt push; do dquilt refresh; done</literal>.
3929  </para>  </para>
3930  </section>  </section>
3931  </chapter>  </chapter>
# Line 3625  We should now be ready to build the pack Line 3935  We should now be ready to build the pack
3935  </para>  </para>
3936  <section id="completebuild"><title>Complete (re)build</title>  <section id="completebuild"><title>Complete (re)build</title>
3937  <para>  <para>
3938  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
3939  to install  need to make sure you have installed
3940  </para>  </para>
3941  <itemizedlist>  <itemizedlist>
3942  <listitem>  <listitem>
# Line 3636  the <systemitem role="package">build-ess Line 3946  the <systemitem role="package">build-ess
3946  </listitem>  </listitem>
3947  <listitem>  <listitem>
3948  <para>  <para>
3949  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
3950  </para>  </para>
3951  </listitem>  </listitem>
3952  <listitem>  <listitem>
3953  <para>  <para>
3954  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"/>).
3955  </para>  </para>
3956  </listitem>  </listitem>
3957  </itemizedlist>  </itemizedlist>
# Line 3692  create and sign the upload <filename>.ch Line 4002  create and sign the upload <filename>.ch
4002  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,
4003  twice.  twice.
4004  <footnote><para>  <footnote><para>
4005  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
4006  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
4007  archives.  See  keyring</ulink>.  This enables your uploaded packages to be accepted to the
4008    Debian archives.  See
4009    <ulink url="&keycreate;">Creating a new GPG key</ulink> and
4010  <ulink url="&keysigning; ">Debian Wiki on Keysigning</ulink>.  <ulink url="&keysigning; ">Debian Wiki on Keysigning</ulink>.
4011  </para></footnote>  </para></footnote>
4012    If you are building Debian packages only for your local use, you can skip
4013    promptings for the GPG signatures on the <filename>.dsc</filename> file and the
4014    <filename>.changes</filename> file as:
4015  </para>  </para>
4016    <screen>
4017    $ dpkg-buildpackage -us -uc
4018    </screen>
4019  <para>  <para>
4020  After all this is done, you will see the following files in the directory above  For the non-native Debian package, e.g.,
4021  (<filename>~/gentoo</filename>):  <systemitem role="package">gentoo</systemitem>, you will see the following
4022    files in the parent directory (<filename>~/gentoo</filename>) after building
4023    packages:
4024  </para>  </para>
4025  <itemizedlist>  <itemizedlist>
4026  <listitem>  <listitem>
# Line 3708  After all this is done, you will see the Line 4028  After all this is done, you will see the
4028  <filename>gentoo_0.9.12.orig.tar.gz</filename>  <filename>gentoo_0.9.12.orig.tar.gz</filename>
4029  </para>  </para>
4030  <para>  <para>
4031  This is the original source code tarball, merely renamed to the above so that  This is the original upstream source code tarball, merely renamed to the above so that
4032  it adheres to the Debian standard.  Note that this was created initially by the  it adheres to the Debian standard.  Note that this was created initially by the
4033  <literal>dh_make -f ../gentoo-0.9.12.tar.gz</literal>.  <literal>dh_make -f ../gentoo-0.9.12.tar.gz</literal>.
4034  </para>  </para>
# Line 3731  people can be sure that it's really your Line 4051  people can be sure that it's really your
4051  </para>  </para>
4052  <para>  <para>
4053  This compressed tarball contains your <filename>debian</filename> directory  This compressed tarball contains your <filename>debian</filename> directory
4054  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
4055  stored as <command>quilt</command> patches in  stored as a <command>quilt</command> patch in
4056  <filename>debian/patches</filename>.  <filename>debian/patches</filename>.
4057  </para>  </para>
4058  <para>  <para>
# Line 3742  copy the three files somewhere else and Line 4062  copy the three files somewhere else and
4062  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
4063  <command>quilt</command> patches in the <literal>3.0 (quilt)</literal> source  <command>quilt</command> patches in the <literal>3.0 (quilt)</literal> source
4064  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>
4065  option.  Alternatively, you can run <literal>quilt pop -a</literal> after  option.  Alternatively, you can run <literal>dquilt pop -a</literal> after
4066  normal operation.  </para> </footnote>  normal operation.  </para> </footnote>
4067  </para>  </para>
4068  </listitem>  </listitem>
# Line 3760  install and remove this just like any ot Line 4080  install and remove this just like any ot
4080  <filename>gentoo_0.9.12-1_i386.changes</filename>  <filename>gentoo_0.9.12-1_i386.changes</filename>
4081  </para>  </para>
4082  <para>  <para>
4083  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;
4084  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
4085  and source packages in it.  It is partly generated from the  and source packages.  It is partly generated from the
4086  <filename>changelog</filename> file and the <filename>.dsc</filename> file.  <filename>changelog</filename> file and the <filename>.dsc</filename> file.
4087  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.
4088  </para>  </para>
4089  <para>  <para>
4090  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
4091  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
4092  see what has changed.  Debian archive maintenance programs will also post the  see what has changed.  Debian archive maintenance programs will also post the
4093  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 3777  mailing list. Line 4097  mailing list.
4097  </itemizedlist>  </itemizedlist>
4098  <para>  <para>
4099  The long strings of numbers in the <filename>.dsc</filename> and  The long strings of numbers in the <filename>.dsc</filename> and
4100  <filename>.changes</filename> files are MD5/SHA1/SHA256 checksums for the files  <filename>.changes</filename> files are SHA1/SHA256 checksums for the files
4101  mentioned.  A person downloading your files can test them with <citerefentry>  mentioned.  Anyone downloading your files can test them with <citerefentry>
4102  <refentrytitle>md5sum</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>,  <refentrytitle>sha1sum</refentrytitle> <manvolnum>1</manvolnum>
4103  <citerefentry> <refentrytitle>sha1sum</refentrytitle> <manvolnum>1</manvolnum>  </citerefentry> or <citerefentry> <refentrytitle>sha256sum</refentrytitle>
 </citerefentry>, or <citerefentry> <refentrytitle>sha256sum</refentrytitle>  
4104  <manvolnum>1</manvolnum> </citerefentry> and if the numbers don't match,  <manvolnum>1</manvolnum> </citerefentry> and if the numbers don't match,
4105  they'll know the file is corrupt or has been tampered with.  they'll know the file is corrupt or has been tampered with.
4106  </para>  </para>
4107    <para>
4108    For the native Debian package, e.g.,
4109    <systemitem role="package">mypackage</systemitem>, you will see the following
4110    files in the parent directory after building packages:
4111    </para>
4112    <itemizedlist>
4113    <listitem>
4114    <para>
4115    <filename>mypackage_1.0.tar.gz</filename>
4116    </para>
4117    <para>
4118    This is the source code tarball merely created from the
4119    <filename>mypackage-1.0</filename> directory by the
4120    <command>dpkg-source</command>.  (Its suffix is not <filename>orig.tar.gz</filename>.)
4121    </para>
4122    </listitem>
4123    <listitem>
4124    <para>
4125    <filename>mypackage_1.0.dsc</filename>
4126    </para>
4127    <para>
4128    This is a summary of the contents of the source code as in the non-native
4129    Debian package. (There is no Debian revision.)
4130    </para>
4131    </listitem>
4132    <listitem>
4133    <para>
4134    <filename>mypackage_1.0_i386.deb</filename>
4135    </para>
4136    <para>
4137    This is your completed binary package as in the non-native Debian package.
4138    (There is no Debian revision.)
4139    </para>
4140    </listitem>
4141    <listitem>
4142    <para>
4143    <filename>mypackage_1.0_i386.changes</filename>
4144    </para>
4145    <para>
4146    This file describes all the changes made in the current package version as in
4147    the non-native Debian package. (There is no Debian revision.)
4148    </para>
4149    </listitem>
4150    </itemizedlist>
4151  </section>  </section>
4152  <section id="autobuilder"><title>Autobuilder</title>  <section id="autobuilder"><title>Autobuilder</title>
4153  <para>  <para>
4154  Debian supports many <ulink url="&ports;">ports</ulink>  Debian supports many <ulink url="&ports;">ports</ulink>
4155  with the <ulink url="&buildd;">autobuilder  with the <ulink url="&buildd;">autobuilder
4156  network</ulink> running <command>buildd</command> daemons on many different  network</ulink> running <command>buildd</command> daemons on computers
4157  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
4158  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
4159  how your packages are rebuild for many different architectures by them.  how they rebuild your packages for multiple architectures.
4160  <footnote><para> The actual autobuilder system involves much more complicated  <footnote><para> The actual autobuilder system involves much more complicated
4161  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
4162  this document.  </para> </footnote>  this document.  </para> </footnote>
4163  </para>  </para>
4164  <para>  <para>
4165  For <literal>Architecture: any</literal> packages, the autobuilder system  For <literal>Architecture: any</literal> packages, the autobuilder system
4166  rebuild them.  It ensures to install  performs a rebuild.  It ensures the installation of
4167  </para>  </para>
4168  <itemizedlist>  <itemizedlist>
4169  <listitem>  <listitem>
# Line 3810  the <systemitem role="package">build-ess Line 4173  the <systemitem role="package">build-ess
4173  </listitem>  </listitem>
4174  <listitem>  <listitem>
4175  <para>  <para>
4176  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"/>).
4177  </para>  </para>
4178  </listitem>  </listitem>
4179  </itemizedlist>  </itemizedlist>
# Line 3857  create and sign the upload <filename>.ch Line 4220  create and sign the upload <filename>.ch
4220  This is why you see your package for other architectures.  This is why you see your package for other architectures.
4221  </para>  </para>
4222  <para>  <para>
4223  Although packages listed in the <literal>Build-Depends-indep</literal> field  Although packages listed in the <literal>Build-Depends-Indep</literal> field
4224  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
4225  autobuilder system since it build only architecture dependent binary packages.  <xref linkend="completebuild"/>), they are not required to be installed for the
4226    autobuilder system since it builds only architecture dependent binary packages.
4227  <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>
4228  environment under the <systemitem role="package">sbuild</systemitem> package  environment under the <systemitem role="package">sbuild</systemitem> package
4229  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
4230  many packages installed.  </para> </footnote> This difference between normal  system and may have many leftover packages installed.  </para>
4231  packaging and autobuilder situation dictates whether you record such required  </footnote> This distinction between normal packaging and autobuilding
4232    procedures is what dictates whether you should record such required
4233  packages in the <literal>Build-Depends</literal> or  packages in the <literal>Build-Depends</literal> or
4234  <literal>Build-Depends-indep</literal> fields of the  <literal>Build-Depends-Indep</literal> fields of the
4235  <filename>debian/control</filename> file (see <xref linkend="control"/> ).  <filename>debian/control</filename> file (see <xref linkend="control"/>).
 </para>  
 </section>  
 <section id="option-sa"><title>Including <filename>orig.tar.gz</filename> for upload</title>  
 <para>  
 When you first upload the package to the archive, you need to include the  
 original <filename>orig.tar.gz</filename> source, too.  If the Debian revision  
 number of such package is neither <literal>1</literal> nor  
 <literal>0</literal>, you must provide <command>dpkg-buildpackage</command>  
 command with the <literal>-sa</literal> option.  On the other hand, the  
 <literal>-sd</literal> option will force to exclude the original  
 <filename>orig.tar.gz</filename> source.  
4236  </para>  </para>
4237  </section>  </section>
4238  <section id="debuild"><title><command>debuild</command> command</title>  <section id="debuild"><title><command>debuild</command> command</title>
4239  <para>  <para>
4240  You can automate package build process of the  You can automate the <command>dpkg-buildpackage</command> command's
4241  <command>dpkg-buildpackage</command> command further with the  package build process further with the
4242  <command>debuild</command> command.  See <citerefentry>  <command>debuild</command> command.  See <citerefentry>
4243  <refentrytitle>debuild</refentrytitle> <manvolnum>1</manvolnum>  <refentrytitle>debuild</refentrytitle> <manvolnum>1</manvolnum>
4244  </citerefentry>.  </citerefentry>.
# Line 3892  You can automate package build process o Line 4246  You can automate package build process o
4246  <para>  <para>
4247  Customization of the <command>debuild</command> command can be done through  Customization of the <command>debuild</command> command can be done through
4248  <filename>/etc/devscripts.conf</filename> or  <filename>/etc/devscripts.conf</filename> or
4249  <filename>~/.devscripts</filename>.  I would suggest at least following items:  <filename>~/.devscripts</filename>.  I would suggest at least the following items:
4250  </para>  </para>
4251  <screen>  <screen>
4252  DEBSIGN_KEYID=Your_GPG_keyID  DEBSIGN_KEYID=Your_GPG_keyID
 DEBUILD_LINTIAN=yes  
4253  DEBUILD_LINTIAN_OPTS=-i -I --show-overrides  DEBUILD_LINTIAN_OPTS=-i -I --show-overrides
4254  </screen>  </screen>
4255  <para>  <para>
4256  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
4257  sponsoring packages) and checked by the <command>lintian</command> command in  sponsoring packages) and checked in detail by the <command>lintian</command> command.
 details.  
4258  </para>  </para>
4259  <para>  <para>
4260  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:
4261  </para>  </para>
4262  <screen>  <screen>
4263  $ debuild  $ debuild
4264  </screen>  </screen>
4265  <para>  <para>
4266  Please note that the <command>dpkg-buildpackage</command> option  Here, if you are building Debian packages only for your local use, you can skip
4267  <literal>-sa</literal> to include the original <filename>orig.tar.gz</filename>  promptings for the GPG signatures on the <filename>.dsc</filename> file and the
4268  source can be specified as:  <filename>.changes</filename> file as:
4269  </para>  </para>
4270  <screen>  <screen>
4271  $ debuild -sa  $ debuild -us -uc
4272  </screen>  </screen>
4273  <para>  <para>
4274  You can clean source tree as simple as:  You can clean the source tree as simply as:
4275  </para>  </para>
4276  <screen>  <screen>
4277  $ debuild clean  $ debuild clean
# Line 3929  $ debuild clean Line 4281  $ debuild clean
4281  <para>  <para>
4282  For a clean room (<command>chroot</command>) build environment to verify the  For a clean room (<command>chroot</command>) build environment to verify the
4283  build dependencies, the <systemitem role="package">pbuilder</systemitem>  build dependencies, the <systemitem role="package">pbuilder</systemitem>
4284  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
4285    role="package">pbuilder</systemitem> package is still evolving, you should
4286  check the actual configuration situation by consulting the latest official  check the actual configuration situation by consulting the latest official
4287  documentation.  </para> </footnote> This ensures a clean build from the source  documentation.</para> </footnote> This ensures a clean build from the source
4288  under the <literal>sid</literal> auto-builder for different architectures and  under the <literal>sid</literal> auto-builder for different architectures and
4289  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
4290  always in the RC (release critical) category.  See <ulink url="&buildd-do;">&buildd-do;</ulink> for more on the Debian  always in the RC (release critical) category.
4291  package <systemitem role="package">auto-builder</systemitem>.  <footnote><para>See <ulink url="&buildd-do;"/> for more on
4292    Debian package auto-building.</para></footnote>
4293  </para>  </para>
4294  <para>  <para>
4295  Let's customize the <systemitem role="package">pbuilder</systemitem> package by  Let's customize the <systemitem role="package">pbuilder</systemitem> package as
4296  the following.  follows:
4297  </para>  </para>
4298  <itemizedlist>  <itemizedlist>
4299  <listitem>  <listitem>
4300  <para>  <para>
4301  setting <filename>/var/cache/pbuilder/result</filename> directory writable by  setting the <filename>/var/cache/pbuilder/result</filename> directory writable by
4302  the user.  for your user account.
4303  </para>  </para>
4304  </listitem>  </listitem>
4305  <listitem>  <listitem>
4306  <para>  <para>
4307  creating a directory, e.g.  creating a directory, e.g.
4308  <filename><replaceable>/var/cache/pbuilder/hooks</replaceable></filename>,  <filename><replaceable>/var/cache/pbuilder/hooks</replaceable></filename>,
4309  writable by the user to place hook scripts.  writable by the user, to place hook scripts in.
4310  </para>  </para>
4311  </listitem>  </listitem>
4312  <listitem>  <listitem>
4313  <para>  <para>
4314  setting <filename>~/.pbuilderrc</filename> or  configuring <filename>~/.pbuilderrc</filename> or
4315  <filename>/etc/pbuilderrc</filename> to include as follows.  <filename>/etc/pbuilderrc</filename> to include the followsing.
4316  </para>  </para>
4317  <screen>  <screen>
4318  AUTO_DEBSIGN=yes  AUTO_DEBSIGN=${AUTO_DEBSIGN:-yes}
4319  HOOKDIR=<replaceable>/var/cache/pbuilder/hooks</replaceable>  HOOKDIR=<replaceable>/var/cache/pbuilder/hooks</replaceable>
4320  </screen>  </screen>
4321  </listitem>  </listitem>
# Line 3971  This will allow you to sign generated pa Line 4325  This will allow you to sign generated pa
4325  <filename>~/.gnupg/</filename> directory.  <filename>~/.gnupg/</filename> directory.
4326  </para>  </para>