/[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 8640 by osamu, Wed Apr 6 19:00:00 2011 UTC revision 8726 by osamu, Mon Apr 25 16:31:22 2011 UTC
# Line 2  Line 2 
2  <!-- -*- DocBook -*- -->  <!-- -*- DocBook -*- -->
3  <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"  <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
4   "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [   "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
5    <!ENTITY % trans    SYSTEM "po4a/maint-guide.en.ent">   %trans;
6  <!ENTITY % common   SYSTEM "common.ent">   %common;  <!ENTITY % common   SYSTEM "common.ent">   %common;
7  <!ENTITY % version  SYSTEM "version.ent">  %version;  <!ENTITY % version  SYSTEM "version.ent">  %version;
8  ]>  ]>
9  <book lang="en">  <book lang="en">
10  <!-- This is UTF-8 encoded. -->  <!-- This is UTF-8 encoded. -->
11  <!-- This is reorganized to make this document robust for translaion when some externally referenced information changes. -->  <!--
12  <title>Debian New Maintainers' Guide</title>  This is reorganized to make this document robust for translation
13  <bookinfo>  when some externally referenced information changes.
 <authorgroup>  
 <author> <personname> <firstname>Josip</firstname> <surname>Rodin</surname> </personname> <email>joy-mg@debian.org</email> <contrib>(original contents)</contrib> </author>  
 <author> <personname> <firstname>Osamu</firstname> <surname>Aoki</surname> </personname> <email>osamu@debian.org</email> <contrib>(updated contents)</contrib> </author>  
   
14    
15    If you want to add extra contents to this document, please do so by
16     * adding tag like &othercredit; in English and provide it for each language.
17     * add extra content within msgstr but within <footnote>...</footnote>
18    Please note there will be content checker to match tags of msgid and msgstr.
19    The second rule is a way to get exception to this rule.
20    
21    Please try to correct something in translation.  If you think contents needs fix,
22    Let's fix it in the root cause.
23    
24  <!-- BEGIN: Add othercredit for translator via po4a/maint-guide.*.patch -->  Please understand to keep this document focused.  Not everything you think important
25  <!-- END: Add othercredit for translator via po4a/maint-guide.*.patch -->  for new maintainer should be written down.  Something social needs to be elsewhere.
26  <!-- dummy -->  Some thing should be left to the practice.  Something needs to be left for exercise
27  <!-- dummy -->  for people to check official documentations.
28    -->
29    <title>Debian New Maintainers' Guide</title>
30    <bookinfo>
31    <authorgroup>
32    <!-- do not use firstname and surname tags it braks Japanese.  The same with othercredit -->
33    <author> <personname>Josip Rodin</personname> <email>joy-mg@debian.org</email> <contrib>original contents</contrib> </author>
34    <author> <personname>Osamu Aoki</personname> <email>osamu@debian.org</email> <contrib>updated contents</contrib> </author>
35    <!-- translator credits in po4a/translator.*.ent -->
36    &othercredit;
37  </authorgroup>  </authorgroup>
38  <releaseinfo>version &docversion;</releaseinfo>  <releaseinfo>version &docversion;</releaseinfo>
39  <pubdate>&docisodate;</pubdate>  <pubdate>&docisodate;</pubdate>
# Line 36  version 2 or higher. Line 49  version 2 or higher.
49  <para>  <para>
50  This document was made using with these two documents as examples:  This document was made using with these two documents as examples:
51  </para>  </para>
52    <itemizedlist>
53    <listitem>
54  <para>  <para>
55  Making a Debian Package (AKA the Debmake Manual), copyright © 1997 Jaldhar  Making a Debian Package (AKA the Debmake Manual), copyright © 1997 Jaldhar
56  Vyas.  Vyas.
57  </para>  </para>
58    </listitem>
59    <listitem>
60  <para>  <para>
61  The New-Maintainer's Debian Packaging Howto, copyright © 1997 Will Lowe.  The New-Maintainer's Debian Packaging Howto, copyright © 1997 Will Lowe.
62  </para>  </para>
63    </listitem>
64    </itemizedlist>
65  </legalnotice>  </legalnotice>
66  <!-- toc -->  <!-- toc -->
67  </bookinfo>  </bookinfo>
68  <chapter id="start"><title>Getting started The Right Way</title>  <chapter id="start"><title>Getting started The Right Way</title>
69  <para>  <para>
70  This document tries to describe building of a Debian package to the common  This document tries to describe the building of a Debian package to ordinary
71  Debian user, and the prospectus developer.  It uses pretty common language, and  Debian users and prospective developers.  It uses fairly non-technical language, and
72  it's well covered with working examples.  There is an old Roman saying,  it's well covered with working examples.  There is an old Latin saying:
73  <emphasis>Longum iter est per preaecepta, breve et efficax per  <emphasis>Longum iter est per praecepta, breve et efficax per
74  exempla!</emphasis> (It's a long way by the rules, but short and efficient with  exempla</emphasis> (It's a long way by the rules, but short and efficient with
75  examples!).  examples).
76  </para>  </para>
77  <para>  <para>
78  This document has been updated for the Debian <literal>&base-release;</literal>  This document has been updated for the Debian <literal>&base-release;</literal>
79  release.  release.
80  <footnote><para> The document assumes you are using the  <footnote><para> The document assumes you are using a
81  <literal>&base-release;</literal> system or newer.  If you need to follow this  <literal>&base-release;</literal> or newer system.  If you need to follow this
82  text in the older system (including the older Ubuntu system etc.), you must  text in an older system (including an older Ubuntu system etc.), you must
83  install backported <systemitem role="package">dpkg</systemitem> and  install backported <systemitem role="package">dpkg</systemitem> and
84  <systemitem role="package">debhelper</systemitem> packages, at least.  <systemitem role="package">debhelper</systemitem> packages, at least.
85  </para> </footnote>  </para> </footnote>
# Line 69  install backported <systemitem role="pac Line 88  install backported <systemitem role="pac
88  One of the things that makes Debian such a top-notch distribution is its  One of the things that makes Debian such a top-notch distribution is its
89  package system.  While there is a vast quantity of software already in the  package system.  While there is a vast quantity of software already in the
90  Debian format, sometimes you need to install software that isn't.  You may be  Debian format, sometimes you need to install software that isn't.  You may be
91  wondering how you can make your own packages and perhaps you think it is a very  wondering how you can make your own packages; and perhaps you think it is a very
92  difficult task.  Well, if you are a real novice on Linux, it is hard, but if  difficult task.  Well, if you are a real novice on Linux, it is hard, but if
93  you were rookie, you wouldn't be reading this doc now.  :-) You do need to know  you were a rookie, you wouldn't be reading this document now&nbsp;:-)
94  a little about Unix programming but you certainly don't need to be a wizard.  You do need to know a little about Unix programming but you certainly
95    don't need to be a wizard.
96  <footnote><para>  <footnote><para>
97  You can learn basic operations of the Debian system from  You can learn about the basic handling of a Debian system from the
98  <ulink url="&debref;">Debian Reference</ulink>.  It contains some pointers to  <ulink url="&debref;">Debian Reference</ulink>.  It contains some pointers to
99  learn about Unix programming, too.  learn about Unix programming, too.
100  </para></footnote>  </para></footnote>
101  </para>  </para>
102  <para>  <para>
103  One thing is certain, though: to properly create and maintain Debian packages  One thing is certain, though: to properly create and maintain Debian packages
104  you need many hours.  Make no mistake, for our system to work the maintainers  takes many hours.  Make no mistake, for our system to work the maintainers
105  need to be both technically competent and diligent.  need to be both technically competent and diligent.
106  </para>  </para>
107  <para>  <para>
108  This document will explain every little (at first maybe irrelevant) step, and  If you need some help on packaging, please read <xref linkend="helpme"/>.
 help you create that first package, and to gain some experience in building  
 next releases of that and maybe other packages later on.  
 </para>  
 <para>  
 If you need some help on packaging, please read <xref linkend="helpme"/> .  
109  </para>  </para>
110  <para>  <para>
111  Newer versions of this document should always be available online at  Newer versions of this document should always be available online at
112  <ulink url="&maint-guide;"/> and in the  <ulink url="&maint-guide;"/> and in the
113  <systemitem role="package">maint-guide</systemitem> package.  <systemitem role="package">maint-guide</systemitem> package.
114  The translations may be available in packages such as  The translations may be available in packages such as
115  <systemitem role="package">maint-guide-es</systemitem>.  <systemitem role="package">maint-guide-es</systemitem>.
116    Please note that this documentation may be slightly outdated.
117    </para>
118    <para>
119    Since this is a tutorial, I choose to explain each detailed step for some
120    important topics.  Some of them may look irrelevant to you.  Please be patient.
121    I have also intentionally skipped some corner cases and provided only pointers
122    to keep this document simple.
123    </para>
124    <section id="socialdynamism"><title>Social dynamics of Debian</title>
125    <para>
126    Here are some observations of Debian's social dynamics, presented in the hope
127    that it will prepare you for interactions with Debian.
128    </para>
129    <itemizedlist>
130    <listitem><para>We all are volunteers.</para>
131        <itemizedlist>
132        <listitem><para>You cannot impose on others what to do.</para></listitem>
133        <listitem><para>You should be motivated to do things by yourself.</para></listitem>
134        </itemizedlist></listitem>
135    <listitem><para>Friendly cooperation is the driving force.</para>
136        <itemizedlist>
137        <listitem><para>Your contribution should not overstrain others.</para></listitem>
138        <listitem><para>Your contribution is valuable only when others appreciate it.</para></listitem>
139        </itemizedlist></listitem>
140    <listitem><para>Debian is not your school where you get automatic attention of teachers.</para>
141        <itemizedlist>
142        <listitem><para>You should be able to learn many things by yourself.</para></listitem>
143        <listitem><para>Attention from other volunteers is a very scarce resource.</para></listitem>
144        </itemizedlist></listitem>
145    <listitem><para>Debian is constantly improving.</para>
146        <itemizedlist>
147        <listitem><para>You are expected to make high quality packages.</para></listitem>
148        <listitem><para>You should adapt yourself to change.</para></listitem>
149        </itemizedlist></listitem>
150    </itemizedlist>
151    <para>
152    There are several types of people interacting around Debian with different
153    roles.
154    </para>
155    <itemizedlist>
156    <listitem>
157    <para>
158    <emphasis role="strong">upstream author</emphasis>: the person who made the
159    original program.
160    </para>
161    </listitem>
162    <listitem>
163    <para>
164    <emphasis role="strong">upstream maintainer</emphasis>: the person who
165    currently maintains the program.
166    </para>
167    </listitem>
168    <listitem>
169    <para>
170    <emphasis role="strong">maintainer</emphasis>: the person making the Debian
171    package of the program.
172    </para>
173    </listitem>
174    <listitem>
175    <para>
176    <emphasis role="strong">sponsor</emphasis>: a person who helps maintainers to
177    upload packages to the official Debian package archive (after checking their
178    contents).
179    </para>
180    </listitem>
181    <listitem>
182    <para>
183    <emphasis role="strong">mentor</emphasis>: a person who helps novice
184    maintainers with packaging etc.
185    </para>
186    </listitem>
187    <listitem>
188    <para>
189    <emphasis role="strong">Debian Developer</emphasis> (DD): a member of
190    the Debian project with full upload rights to the official Debian package
191    archive.
192    </para>
193    </listitem>
194    <listitem>
195    <para>
196    <emphasis role="strong">Debian Maintainer</emphasis> (DM): a person with
197    limited upload rights to the official Debian package archive.
198  </para>  </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 you need for development</title>  <section id="needprogs"><title>Programs you need for development</title>
230  <para>  <para>
231  Before you start anything, you should make sure that you have properly  Before you start anything, you should make sure that you have properly
# Line 116  or with <literal>dpkg -s <replaceable>pa Line 243  or with <literal>dpkg -s <replaceable>pa
243  <para>  <para>
244  The most important package to install on your development system is the  The most important package to install on your development system is the
245  <systemitem role="package">build-essential</systemitem> package.  Once you try  <systemitem role="package">build-essential</systemitem> package.  Once you try
246  to install it, it will <emphasis>pull in</emphasis> other packages required to  to install that, it will <emphasis>pull in</emphasis> other packages required to
247  have a basic build environment.  have a basic build environment.
248  </para>  </para>
249  <para>  <para>
250  For some types of packages, that is all you will require, however there is  For some types of packages, that is all you will require; however, there is
251  another set of packages that while not essential for all package builds are  another set of packages that while not essential for all package builds are
252  useful to have install or may be required by your package:  useful to have installed or may be required by your package:
253  </para>  </para>
254  <itemizedlist>  <itemizedlist>
255  <listitem>  <listitem>
256  <para>  <para>
257  <systemitem role="package">file</systemitem> - this handy program can determine  <systemitem role="package">autoconf</systemitem>, <systemitem
258  what type a file is.  (see <citerefentry> <refentrytitle>file</refentrytitle>  role="package">automake</systemitem>, and <systemitem
259  <manvolnum>1</manvolnum> </citerefentry>)  role="package">autotools-dev</systemitem> - many newer programs use configure
260  </para>  scripts and <filename>Makefile</filename> files preprocessed with the help of
261  </listitem>  programs like these (see <literal>info autoconf</literal>, <literal>info
262  <listitem>  automake</literal>).  <systemitem role="package">autotools-dev</systemitem>
263  <para>  keeps up-to-date versions of certain auto files and has documentation about the
264  <systemitem role="package">patch</systemitem> - this very useful utility will  best way to use those files.
 take a file containing a difference listing (produced by the  
 <command>diff</command> program) and apply it to the original file, producing a  
 patched version.  (see <citerefentry> <refentrytitle>patch</refentrytitle>  
 <manvolnum>1</manvolnum> </citerefentry>)  
265  </para>  </para>
266  </listitem>  </listitem>
267  <listitem>  <listitem>
268  <para>  <para>
269  <systemitem role="package">perl</systemitem> - Perl is one of the most used  <systemitem role="package">debhelper</systemitem> and
270  interpreted scripting languages on today's Unix-like systems, often referred to  <systemitem role="package">dh-make</systemitem> -
271  as Unix's Swiss Army Chainsaw.  (see <citerefentry>  <systemitem role="package">dh-make</systemitem> is necessary to create
272  <refentrytitle>perl</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>)  the skeleton of our example package, and it will use some of the
273    <systemitem role="package">debhelper</systemitem> tools for creating
274    packages.  They are not essential for this purpose, but are
275    <emphasis>highly</emphasis> recommended for new maintainers.  It makes
276    the whole process very much easier to start, and to control afterwards.
277    (See <citerefentry> <refentrytitle>dh_make</refentrytitle>
278    <manvolnum>1</manvolnum> </citerefentry>, <citerefentry>
279    <refentrytitle>debhelper</refentrytitle> <manvolnum>1</manvolnum>
280    </citerefentry>.) <footnote><para> There are also some more specialized
281    but similar packages such as
282    <systemitem role="package">dh-make-perl</systemitem>,
283    <systemitem role="package">dh-make-php</systemitem>, etc.  </para>
284    </footnote>
285  </para>  </para>
286  </listitem>  </listitem>
287  <listitem>  <listitem>
288  <para>  <para>
289  <systemitem role="package">python</systemitem> - Python is another of the most  <systemitem role="package">devscripts</systemitem> - this package contains some
290  used interpreted scripting languages on the Debian system that combines  useful scripts that can be helpful for maintainers, but they are also
291  remarkable power with very clear syntax.  (see <citerefentry>  not necessary for building packages.  Packages recommended and suggested
292  <refentrytitle>python</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>)  by this package are worth looking into.  (See <ulink url="&devscripts-readme;"/>.)
293  </para>  </para>
294  </listitem>  </listitem>
295  <listitem>  <listitem>
296  <para>  <para>
297  <systemitem role="package">autoconf</systemitem>, <systemitem role="package">automake</systemitem> and <systemitem role="package">autotools-dev</systemitem> - many newer programs use configure  <systemitem role="package">fakeroot</systemitem> - this utility lets you
298  scripts and <filename>Makefile</filename> files preprocessed with help of  emulate being root which is necessary for some parts of the build process.
299  programs like these.  (see <literal>info autoconf</literal>, <literal>info  (See <citerefentry> <refentrytitle>fakeroot</refentrytitle>
300  automake</literal>).  The <systemitem role="package">autotools-dev</systemitem>  <manvolnum>1</manvolnum> </citerefentry>.)
 keeps up-to-date versions of certain auto files and has documentation about the  
 best way to use those files.  
301  </para>  </para>
302  </listitem>  </listitem>
303  <listitem>  <listitem>
304  <para>  <para>
305  <systemitem role="package">dh-make</systemitem> and <systemitem role="package">debhelper</systemitem> - <systemitem role="package">dh-make</systemitem> is necessary to create the skeleton of our  <systemitem role="package">file</systemitem> - this handy program can determine
306  example package, and it will use some of the <systemitem role="package">debhelper</systemitem> tools for creating packages.  They are  what type a file is.  (See <citerefentry> <refentrytitle>file</refentrytitle>
307  not essential for creation of packages, but are <emphasis>highly</emphasis>  <manvolnum>1</manvolnum> </citerefentry>.)
 recommended for new maintainers.  It makes the whole process very much easier  
 to start, and control afterwards.  (see <citerefentry>  
 <refentrytitle>dh_make</refentrytitle> <manvolnum>1</manvolnum>  
 </citerefentry>, <citerefentry> <refentrytitle>debhelper</refentrytitle>  
 <manvolnum>1</manvolnum> </citerefentry>) <footnote><para> There  
 are few similar but specialized packages such as <systemitem role="package">dh-make-perl</systemitem>, <systemitem role="package">dh-make-php</systemitem>, etc.  </para> </footnote>  
308  </para>  </para>
309  </listitem>  </listitem>
310  <listitem>  <listitem>
311  <para>  <para>
312  <systemitem role="package">devscripts</systemitem> - this package contains some  <systemitem role="package">gfortran</systemitem> - the GNU Fortran 95 compiler,
313  nice and useful scripts that can be helpful to the maintainers, but they are  necessary if your program is written in Fortran.  (See <citerefentry>
314  also not necessary for building packages.  Packages recommended and suggested  <refentrytitle>gfortran</refentrytitle> <manvolnum>1</manvolnum>
315  by this package are worth looking into.  (see  </citerefentry>.)
 <ulink url="&devscripts-readme;"/>.)  
316  </para>  </para>
317  </listitem>  </listitem>
318  <listitem>  <listitem>
319  <para>  <para>
320  <systemitem role="package">fakeroot</systemitem> - this utility lets you  <systemitem role="package">git</systemitem> - this package provides a popular
321  emulate being root which is necessary for some parts of the build process.  version control system designed to handle very large projects with speed and
322  (see <citerefentry> <refentrytitle>fakeroot</refentrytitle>  efficiency; it is used for many high profile open source projects, most notably
323  <manvolnum>1</manvolnum> </citerefentry>)  the Linux kernel.  (See <citerefentry> <refentrytitle>git</refentrytitle>
324    <manvolnum>1</manvolnum> </citerefentry>,
325    <ulink url="&git-doc;">git Manual</ulink>.)
326  </para>  </para>
327  </listitem>  </listitem>
328  <listitem>  <listitem>
# Line 202  emulate being root which is necessary fo Line 330  emulate being root which is necessary fo
330  <systemitem role="package">gnupg</systemitem> - a tool that enables you to  <systemitem role="package">gnupg</systemitem> - a tool that enables you to
331  digitally <emphasis>sign</emphasis> packages.  This is especially important if  digitally <emphasis>sign</emphasis> packages.  This is especially important if
332  you want to distribute it to other people, and you will certainly be doing that  you want to distribute it to other people, and you will certainly be doing that
333  when your work gets included in the Debian distribution.  (see <citerefentry>  when your work gets included in the Debian distribution.  (See <citerefentry>
334  <refentrytitle>gpg</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>)  <refentrytitle>gpg</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.)
 </para>  
 </listitem>  
 <listitem>  
 <para>  
 <systemitem role="package">gfortran</systemitem> - the GNU Fortran 95 compiler,  
 necessary if your program is written in Fortran.  (see <citerefentry>  
 <refentrytitle>gfortran</refentrytitle> <manvolnum>1</manvolnum>  
 </citerefentry>)  
335  </para>  </para>
336  </listitem>  </listitem>
337  <listitem>  <listitem>
# Line 219  necessary if your program is written in Line 339  necessary if your program is written in
339  <systemitem role="package">gpc</systemitem> - the GNU Pascal compiler,  <systemitem role="package">gpc</systemitem> - the GNU Pascal compiler,
340  necessary if your program is written in Pascal.  Worthy of note here is  necessary if your program is written in Pascal.  Worthy of note here is
341  <systemitem role="package">fp-compiler</systemitem>, the Free Pascal Compiler,  <systemitem role="package">fp-compiler</systemitem>, the Free Pascal Compiler,
342  which is also good at this task.  (see <citerefentry>  which is also good at this task.  (See <citerefentry>
343  <refentrytitle>gpc</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>,  <refentrytitle>gpc</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>,
344  <citerefentry> <refentrytitle>ppc386</refentrytitle> <manvolnum>1</manvolnum>  <citerefentry> <refentrytitle>ppc386</refentrytitle>
345  </citerefentry>)  <manvolnum>1</manvolnum> </citerefentry>.)
346  </para>  </para>
347  </listitem>  </listitem>
348  <listitem>  <listitem>
349  <para>  <para>
350  <systemitem role="package">xutils-dev</systemitem> - some programs, usually  <systemitem role="package">lintian</systemitem> - this is the Debian package
351  those made for X11, also use these programs to generate  checker, which can let you know of any common mistakes after you build the
352  <filename>Makefile</filename> files from sets of macro functions.  (see  package, and explains the errors found.  (See <citerefentry>
353  <citerefentry> <refentrytitle>imake</refentrytitle> <manvolnum>1</manvolnum>  <refentrytitle>lintian</refentrytitle> <manvolnum>1</manvolnum>
354  </citerefentry>, <citerefentry> <refentrytitle>xmkmf</refentrytitle>  </citerefentry>,
355  <manvolnum>1</manvolnum> </citerefentry>)  <ulink url="&lintian-doc;">Lintian User's Manual</ulink>.)
356  </para>  </para>
357  </listitem>  </listitem>
358  <listitem>  <listitem>
359  <para>  <para>
360  <systemitem role="package">lintian</systemitem> - this is the Debian package  <systemitem role="package">patch</systemitem> - this very useful utility will
361  checker that can let you know of any common mistakes after you build the  take a file containing a difference listing (produced by the
362  package, and explains the errors found.  (see <citerefentry>  <command>diff</command> program) and apply it to the original file, producing a
363  <refentrytitle>lintian</refentrytitle> <manvolnum>1</manvolnum>  patched version.  (See <citerefentry> <refentrytitle>patch</refentrytitle>
364  </citerefentry>,  <manvolnum>1</manvolnum> </citerefentry>.)
365  <ulink url="&lintian-doc;">Lintian User's Manual</ulink>)  </para>
366    </listitem>
367    <listitem>
368    <para>
369    <systemitem role="package">patchutils</systemitem> - this package contains some
370    utilities to work with patches such as the <command>lsdiff</command>,
371    <command>interdiff</command> and <command>filterdiff</command> commands.
372  </para>  </para>
373  </listitem>  </listitem>
374  <listitem>  <listitem>
# Line 259  Build From Source) bugs.  (see <citerefe Line 385  Build From Source) bugs.  (see <citerefe
385  </listitem>  </listitem>
386  <listitem>  <listitem>
387  <para>  <para>
388  <systemitem role="package">patchutils</systemitem> - this package contains some  <systemitem role="package">perl</systemitem> - Perl is one of the most used
389  utilities to work with patches such as the <command>lsdiff</command>,  interpreted scripting languages on today's Unix-like systems, often referred to
390  <command>interdiff</command> and <command>filterdiff</command> commands.  as Unix's Swiss Army Chainsaw. (See <citerefentry>
391    <refentrytitle>perl</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.)
392    </para>
393    </listitem>
394    <listitem>
395    <para>
396    <systemitem role="package">python</systemitem> - Python is another of the most
397    used interpreted scripting languages on the Debian system, combining
398    remarkable power with very clear syntax. (See <citerefentry>
399    <refentrytitle>python</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.)
400  </para>  </para>
401  </listitem>  </listitem>
402  <listitem>  <listitem>
403  <para>  <para>
404  <systemitem role="package">quilt</systemitem> - this package helps you to  <systemitem role="package">quilt</systemitem> - this package helps you to
405  manage a series of patches by keeping track of the changes each of them makes.  manage large numbers of patches by keeping track of the changes each patch
406  They are logically organized as a stack, and you can apply (=push), un-apply  makes. Patches can be applied, un-applied, refreshed, and more.  (See
407  (=pop), refresh them easily by traveling into the stack.  (see <citerefentry>  <citerefentry> <refentrytitle>quilt</refentrytitle> <manvolnum>1</manvolnum></citerefentry>,
408  <refentrytitle>quilt</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>,  <ulink url="&quilt-pdf;">quilt.pdf</ulink>.)
 <ulink url="&quilt-pdf;">quilt.pdf</ulink>)  
409  </para>  </para>
410  </listitem>  </listitem>
411  <listitem>  <listitem>
412  <para>  <para>
413  <systemitem role="package">git</systemitem> - this package provides popular  <systemitem role="package">xutils-dev</systemitem> - some programs, usually
414  version control system designed to handle very large projects with speed and  those made for X11, also use these programs to generate
415  efficiency; it is used for many high profile open source projects, most notably  <filename>Makefile</filename> files from sets of macro functions.  (See
416  the Linux kernel.  (see <citerefentry> <refentrytitle>git</refentrytitle>  <citerefentry> <refentrytitle>imake</refentrytitle> <manvolnum>1</manvolnum>
417  <manvolnum>1</manvolnum> </citerefentry>,  </citerefentry>, <citerefentry> <refentrytitle>xmkmf</refentrytitle>
418  <ulink url="&git-doc;">git Manual</ulink>)  <manvolnum>1</manvolnum> </citerefentry>.)
419  </para>  </para>
420  </listitem>  </listitem>
421  </itemizedlist>  </itemizedlist>
422  <para>  <para>
423    The short descriptions that are given above only serve to introduce you to what
424    each package does.  Before continuing please read the documentation
425    of each relevant program including ones installed through the package dependency such as
426    <command>make</command>, at least, for the standard usage.  It may seem like heavy
427    going now, but later on you'll be <emphasis>very</emphasis> glad you read it.
428    If you have specific questions later, I would suggest re-reading the documents
429    mentioned above.
430    </para>
431    </section>
432    <section id="needdocs"><title>Documentation needed for development</title>
433    <para>
434  The following is the <emphasis>very important</emphasis> documentation which  The following is the <emphasis>very important</emphasis> documentation which
435  you should read along with this document:  you should read along with this document:
436  </para>  </para>
# Line 294  you should read along with this document Line 439  you should read along with this document
439  <para>  <para>
440  <systemitem role="package">debian-policy</systemitem> - the <ulink url="&debian-policy;">Debian Policy  <systemitem role="package">debian-policy</systemitem> - the <ulink url="&debian-policy;">Debian Policy
441  Manual</ulink> includes explanations of the structure and contents of the  Manual</ulink> includes explanations of the structure and contents of the
442  Debian archive, several OS design issues, the Filesystem Hierarchy Standard  Debian archive, several OS design issues, the <ulink url="&fhs;">Filesystem Hierarchy Standard</ulink>
443  (which says where each file and directory should be) etc.  For you, the most  (FHS, which says where each file and directory should be), etc.  For you, the most
444  important thing is that it describes requirements that each package must  important thing is that it describes requirements that each package must
445  satisfy to be included in the distribution (see the local copy of  satisfy to be included in the distribution (see the local copies of
446  <ulink url="&policy-pdf;">policy.pdf</ulink>).  <ulink url="&policy-pdf;">policy.pdf</ulink> and <ulink url="&fhs-pdf;">fhs-2.3.pdf</ulink>).
447  </para>  </para>
448  </listitem>  </listitem>
449  <listitem>  <listitem>
450  <para>  <para>
451  <systemitem role="package">developers-reference</systemitem> - the <ulink url="&developers-reference;">Debian Developer's  <systemitem role="package">developers-reference</systemitem>
452  Reference</ulink> describes all matters not specifically about the technical  - the <ulink url="&developers-reference;">Debian Developer's Reference</ulink>
453    describes all matters not specifically about the technical
454  details of packaging, like the structure of the archive, how to rename, orphan,  details of packaging, like the structure of the archive, how to rename, orphan,
455  pick up packages, how to do NMUs, how to manage bugs, best packaging practices,  or adopt packages, how to do NMUs, how to manage bugs, best packaging practices,
456  when and where to upload etc.  (see the local copy of  when and where to upload etc.  (See the local copy of
457  <ulink url="&developers-refpdf;">developers-reference.pdf</ulink>).  <ulink url="&developers-refpdf;">developers-reference.pdf</ulink>.)
458  </para>  </para>
459  </listitem>  </listitem>
460    </itemizedlist>
461    <para>
462    The following is the <emphasis>important</emphasis> documentation which
463    you should read along with this document:
464    </para>
465    <itemizedlist>
466  <listitem>  <listitem>
467  <para>  <para>
468  <ulink url="&autotools-tutorial;">Autotools  <ulink url="&autotools-tutorial;">Autotools
469  Tutorial</ulink> provides very good tutorial for <ulink url="&gnu-build-system;">the GNU Build System known  Tutorial</ulink> provides a very good tutorial for <ulink url="&gnu-build-system;">the GNU Build System known
470  as the GNU Autotools</ulink> whose most important components are Autoconf,  as the GNU Autotools</ulink> whose most important components are Autoconf,
471  Automake, Libtool, and gettext.  Automake, Libtool, and gettext.
472  </para>  </para>
# Line 326  two pieces of documentation from the GNU Line 478  two pieces of documentation from the GNU
478  <ulink url="&gnu-standard;">GNU Coding Standards</ulink>, and  <ulink url="&gnu-standard;">GNU Coding Standards</ulink>, and
479  <ulink url="&gnu-maintainer;">Information for Maintainers of GNU Software</ulink>.  <ulink url="&gnu-maintainer;">Information for Maintainers of GNU Software</ulink>.
480  Although Debian does not require these to  Although Debian does not require these to
481  be followed, these are still helpful as guidelines and common sense.  (see the local copies of  be followed, these are still helpful as guidelines and common sense.
482    (See the local copies of
483  <ulink url="&gnu-standard-pdf;">standards.pdf</ulink> and  <ulink url="&gnu-standard-pdf;">standards.pdf</ulink> and
484  <ulink url="&gnu-maintainer-pdf;">maintain.pdf</ulink>).  <ulink url="&gnu-maintainer-pdf;">maintain.pdf</ulink>.)
485  </para>  </para>
486  </listitem>  </listitem>
487  </itemizedlist>  </itemizedlist>
488  <para>  <para>
489  If this document contradicts with any of the documents mentioned above, they  If this document contradicts any of the documents mentioned above, they
490  are correct.  Please file a bug report on the  are correct.  Please file a bug report on the
491  <systemitem role="package">maint-guide</systemitem> package using  <systemitem role="package">maint-guide</systemitem> package using
492  <command>reportbug</command>.  <command>reportbug</command>.
493  </para>  </para>
 <para>  
 The short descriptions that are given above only serve to introduce you to what  
 each package does.  Before continuing please thoroughly read the documentation  
 of each program, at least, for the standard usage.  It may seem like heavy  
 going now, but later on you'll be <emphasis>very</emphasis> glad you read it.  
 </para>  
494  </section>  </section>
495  <section id="terminology"><title>Basic terminology</title>  <section id="helpme"><title>Where to ask for help</title>
 <para>  
 There are two types of packages.  
 </para>  
 <itemizedlist>  
 <listitem>  
 <para>  
 <emphasis role="strong">source package</emphasis>: A source package is a set of  
 files which contain code and data which you can compile and process into  
 execution programs and formatted documents.  It usually comes as a combination  
 of <filename>*.orig.tar.gz</filename>, <filename>*.debian.tar.gz</filename> (or  
 <filename>*.diff.gz</filename>), and <filename>*.dsc</filename>.  Some other  
 archive and compression methods may be used, too.  
 </para>  
 </listitem>  
 <listitem>  
 <para>  
 <emphasis role="strong">binary package</emphasis>: A binary package contains  
 execution programs and formatted documents.  It usually comes as  
 <filename>*.deb</filename> for the normal Debian system and as  
 <filename>*.udeb</filename> for the Debian Installer.  
 </para>  
 </listitem>  
 </itemizedlist>  
 <para>  
 Don't mix terms like source of the program and the source package of the  
 program!  
 </para>  
496  <para>  <para>
497  There are several role names used around Debian.  Before you decide to ask your question in some public place, please read the fine documentation.
498  </para>  </para>
499  <itemizedlist>  <itemizedlist>
500  <listitem>  <listitem>
501  <para>  <para>
502  <emphasis role="strong">upstream author</emphasis>: The person who made the  files in <filename>/usr/share/doc/<replaceable>package</replaceable></filename> for all pertinent packages
 original program.  
503  </para>  </para>
504  </listitem>  </listitem>
505  <listitem>  <listitem>
506  <para>  <para>
507  <emphasis role="strong">upstream maintainer</emphasis>: The person who  contents of <literal><command>man</command> <replaceable>command</replaceable></literal> for all pertinent commands
 currently maintains the program.  
508  </para>  </para>
509  </listitem>  </listitem>
510  <listitem>  <listitem>
511  <para>  <para>
512  <emphasis role="strong">maintainer</emphasis>: The person who makes Debian  contents of <literal><command>info</command> <replaceable>command</replaceable></literal> for all pertinent commands
 package of the program.  
513  </para>  </para>
514  </listitem>  </listitem>
515  <listitem>  <listitem>
516  <para>  <para>
517  <emphasis role="strong">sponsor</emphasis>: The person who helps maintainers to  contents of <ulink url="&debian-mentors-ldo;">debian-mentors@lists.debian.org mailing list archive</ulink>
 upload packages to the official Debian Package Archive after checking their  
 contents.  
518  </para>  </para>
519  </listitem>  </listitem>
520  <listitem>  <listitem>
521  <para>  <para>
522  <emphasis role="strong">mentor</emphasis>: The person who helps novice  contents of <ulink url="&debian-devel-ldo;">debian-devel@lists.debian.org mailing list archive</ulink>
 maintainers on packaging etc.  
523  </para>  </para>
524  </listitem>  </listitem>
525  <listitem>  </itemizedlist>
526  <para>  <para>
527  <emphasis role="strong">Debian Developer</emphasis> (DD): The person who is a  You can use web search engines more effectively by including search strings
528  member of Debian.  He has full upload right to the official Debian Package  such as <literal>site:lists.debian.org</literal> to limit the domain.
 Archive.  
529  </para>  </para>
 </listitem>  
 <listitem>  
530  <para>  <para>
531  <emphasis role="strong">Debian Maintainer</emphasis> (DM): The person who has  Making a small test package is a good way to learn details of packaging.
532  limited upload right to the official Debian Package Archive.  Inspecting existing well maintained packages is the best way to learn how other
533    people make packages.
534  </para>  </para>
 </listitem>  
 </itemizedlist>  
535  <para>  <para>
536  There are several version names<footnote><para>see <ulink url="&policy-control;#s-f-Version">Debian Policy  Manual: 5.6.12 Version</ulink>.</para></footnote> used around Debian.  If you still have questions about packaging that you couldn't find answers to
537    in the available documentation and web resources, you can ask them interactively.
538  </para>  </para>
539  <itemizedlist>  <itemizedlist>
540  <listitem>  <listitem>
541  <para>  <para>
542  <emphasis role="strong">upstream source version</emphasis>: The upstream source  <ulink url="&debian-mentors-ldo;">debian-mentors@lists.debian.org mailing list</ulink>. (This mailing list is for the novice.)
 version is referred as <literal><replaceable>version</replaceable></literal>.  
 </para>  
 </listitem>  
 <listitem>  
 <para>  
 <emphasis role="strong">Debian revision</emphasis>: The revision by Debian on  
 package is referred as <literal><replaceable>revision</replaceable></literal>.  
543  </para>  </para>
544  </listitem>  </listitem>
545  <listitem>  <listitem>
546  <para>  <para>
547  <emphasis role="strong">Debian package version</emphasis>: The Debian package  <ulink url="&debian-devel-ldo;">debian-devel@lists.debian.org mailing list</ulink>. (This mailing list is for the expert.)
 version is referred as the following.  
 </para>  
 <itemizedlist>  
 <listitem>  
 <para>  
 <literal><replaceable>version</replaceable></literal> for the native Debian  
 binary package and for the Debian source package.  
548  </para>  </para>
549  </listitem>  </listitem>
550  <listitem>  <listitem>
551  <para>  <para>
552  <literal><replaceable>version</replaceable>-<replaceable>revision</replaceable></literal>  <ulink url="&irc-debian;">IRC</ulink> such as <literal>#debian-mentors</literal>.
 for the non-native Debian binary package.  
553  </para>  </para>
554  </listitem>  </listitem>
555  </itemizedlist>  </itemizedlist>
 </listitem>  
 </itemizedlist>  
556  <para>  <para>
557  Please read the other manuals if you need more details on terminology.  The more experienced Debian developers will gladly help you, if you ask
558    properly after making your required efforts.
559  </para>  </para>
 </section>  
 <section id="debiandeveloper"><title>Official Debian Developer</title>  
560  <para>  <para>
561  You can not become an official  When you receive a bug report (yes, actual bug reports!), you will know that it
562  <emphasis role="strong">Debian Developer</emphasis> (DD) over night because it  is time for you to dig into the
563  takes more than technical skill.  Please do not be discouraged by this.  If it  <ulink url="&bts;">Debian Bug Tracking System</ulink>
564  is useful to others, you can still upload your package either as a  and read the documentation there, to be able to
565  <emphasis role="strong">maintainer</emphasis> through a  deal with the reports efficiently.  I highly recommend reading the
566  <emphasis role="strong">sponsor</emphasis> or as a  <ulink url="&devref-bug-handling;">Debian Developer's Reference, 5.8.
567  <emphasis role="strong">Debian Maintainer</emphasis>.  "Handling bugs"</ulink>.
568  </para>  </para>
569  <para>  <para>
570  Please make sure to check the latest proper procedure to become an official Debian Developer.  Even if it all worked well, it's time to start praying.  Why?  Because in just
571    a few hours (or days) users from all around the world will start to use your
572    package, and if you made some critical error you'll get mailbombed by numerous
573    angry Debian users...  Just kidding.  :-)
574  </para>  </para>
 <itemizedlist>  
 <listitem><para><ulink url="&nm-do;">Debian New Maintainer site</ulink> (official) </para> </listitem>  
 <listitem><para><ulink url="&debianmentorfaq;">Debian Mentors FAQ</ulink> (supplemental) </para> </listitem>  
 </itemizedlist>  
575  <para>  <para>
576  Please note that you do not need to create any new package to become an  Relax and be ready for bug reports, because there is a lot more work to be done
577  official Debian Developer.  Contributing to the existing packages can provide a  before your package will be fully in line with Debian policies and its best
578  path to become an official Debian Developer too.  There are many packages  practice guidelines (once again, read the <emphasis>real
579  waiting for good maintainers (see <xref linkend="choose"/> ).  documentation</emphasis> for details).  Good luck!
580  </para>  </para>
581  </section>  </section>
582  <section id="helpme"><title>Where to ask for help</title>  </chapter>
583  <para>  <chapter id="first"><title>First steps</title>
 Before you decide to ask your question in some public place, please read the fine documentation.  
 </para>  
 <itemizedlist>  
 <listitem>  
 <para>  
 files in <filename>/usr/share/doc/dpkg</filename>  
 </para>  
 </listitem>  
 <listitem>  
 <para>  
 files in <filename>/usr/share/doc/debian</filename>  
 <!-- /usr/share/doc/debian is used be doc-debian and debian-faq -->  
 </para>  
 </listitem>  
 <listitem>  
 <para>  
 files in <filename>/usr/share/doc/autotools-dev</filename>  
 </para>  
 </listitem>  
 <listitem>  
 <para>  
 files in <filename>/usr/share/doc/<replaceable>package</replaceable></filename> for all pertinent packages.  
 </para>  
 </listitem>  
 <listitem>  
 <para>  
 contents of "<literal><command>man</command> <replaceable>command</replaceable></literal>" for all pertinent commands  
 </para>  
 </listitem>  
 <listitem>  
584  <para>  <para>
585  contents of "<literal><command>info</command> <replaceable>command</replaceable></literal>" for all pertinent commands  Let's start by creating a package of your own (or, even better,
586    adopting an existing one).
587  </para>  </para>
588  </listitem>  <section id="workflow"><title>Workflow of the Debian package building</title>
 <listitem>  
589  <para>  <para>
590  contents of <ulink url="&nm-do;">Debian New Maintainer site</ulink>  If you are making a Debian package with an upstream program,
591    typical workflow of the Debian package building involves generating several
592    specifically named files for each step as the following.
593  </para>  </para>
594  </listitem>  <itemizedlist>
595  <listitem>  <listitem>
596  <para>  <para>We obtain an upstream program file usually in a compressed tar format.</para>
597  contents of <ulink url="&debianmentorfaq;">Debian Mentors FAQ</ulink>    <itemizedlist>
598  </para>    <listitem><literal><replaceable>package</replaceable>-<replaceable>version</replaceable>.tar.gz</literal></listitem>
599      </itemizedlist>
600  </listitem>  </listitem>
601  <listitem>  <listitem>
602  <para>  <para>
603  contents of <ulink url="&debian-mentors-ldo;">debian-mentors@lists.debian.org mailing list archive</ulink>  We create a non-native Debian source package in the <literal>3.0 (quilt)</literal> format, which refers to the set of input files for
604    the Debian package building, by adding Debian package modifications to the upstream program under the <filename>debian</filename> directory.
605  </para>  </para>
606      <itemizedlist>
607      <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>.orig.tar.gz</literal></listitem>
608      <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>-<replaceable>revision</replaceable>.debian.tar.gz</literal>
609        <footnote><para>For the older non-native Debian source package in the <literal>1.0</literal> format,
610        <literal><replaceable>package</replaceable>_<replaceable>version</replaceable>-<replaceable>revision</replaceable>.diff.gz</literal>
611        is used instead. </para></footnote></listitem>
612      <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>-<replaceable>revision</replaceable>.dsc</literal></listitem>
613      </itemizedlist>
614  </listitem>  </listitem>
615  <listitem>  <listitem>
616  <para>  <para>
617  contents of <ulink url="&debian-devel-ldo;">debian-devel@lists.debian.org mailing list archive</ulink>  We build Debian binary packages, which are ordinary installable package files in <literal>.deb</literal> format (or <literal>.udeb</literal> format, used by the Debian Installer), from the Debian source package.
618  </para>  </para>
619      <itemizedlist>
620      <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>-<replaceable>revision</replaceable>_<replaceable>arch</replaceable>.deb</literal></listitem>
621      </itemizedlist>
622  </listitem>  </listitem>
623  </itemizedlist>  </itemizedlist>
624  <para>  <para>
625  Please consider to use web search engine effectively by including search string  Please note that the character separating
626  such as "<literal>site:lists.debian.org</literal>" to limit the domain.  <literal><replaceable>package</replaceable></literal> and
627    <literal><replaceable>version</replaceable></literal> was changed from
628    <literal>-</literal> (hyphen) to <literal>_</literal> (underscore).
629  </para>  </para>
630  <para>  <para>
631  Making a small test package is good way to learn details of packaging.  Here,
632  Inspecting existing well maintained packages is the best way to learn how other  <literal><replaceable>package</replaceable></literal> part of the file name is substituted by the
633  people make packages.  <emphasis role="strong">package name</emphasis>,
634    <literal><replaceable>version</replaceable></literal> part of it is substituted by the
635    <emphasis role="strong">upstream version</emphasis>,
636    <literal><replaceable>revision</replaceable></literal> part of it is substituted by the
637    <emphasis role="strong">Debian revision</emphasis>,
638    <literal><replaceable>arch</replaceable></literal> part of it is substituted by the
639    <emphasis role="strong">package architecture</emphasis>.
640    <footnote><para>
641    The <emphasis role="strong">package name</emphasis>, <emphasis
642    role="strong">upstream version</emphasis>, and <emphasis role="strong">Debian
643    revision</emphasis> must be adjusted to comply with the Debian Policy Manual:
644    <ulink url="&policy-source;">5.6.1 Source</ulink>,
645    <ulink url="&policy-package;">5.6.7 Package</ulink>, and
646    <ulink url="&policy-version;">5.6.12 Version</ulink>.
647    The <emphasis role="strong">package architecture</emphasis> follows the
648    Debian Policy Manual: <ulink url="&policy-architecture;">5.6.8 Architecture</ulink>
649    and is automatically assigned by the package build process.</para></footnote>
650  </para>  </para>
651  <para>  <para>
652  If you still have questions about packaging that you couldn't find answers to  If you are making a Debian specific package without an upstream program instead,
653  in the available documentation and web resources, you can ask them interactively.  typical workflow of the Debian package building is simpler.
654  </para>  </para>
655  <itemizedlist>  <itemizedlist>
656  <listitem>  <listitem>
657  <para>  <para>
658  <ulink url="&debian-mentors-ldo;">debian-mentors@lists.debian.org mailing list</ulink>. (This mailing list is for the novice.)  We create a native Debian source package in the <literal>3.0 (quilt)</literal> format using a compressed tar format in which required files under the <filename>debian</filename> directory are also included.
 </para>  
 </listitem>  
 <listitem>  
 <para>  
 <ulink url="&debian-devel-ldo;">debian-devel@lists.debian.org mailing list</ulink>. (This mailing list is for the expert.)  
659  </para>  </para>
660      <itemizedlist>
661      <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>.tar.gz</literal></listitem>
662      <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>.dsc</literal></listitem>
663      </itemizedlist>
664  </listitem>  </listitem>
665  <listitem>  <listitem>
666  <para>  <para>
667  <ulink url="&irc-debian;">IRC</ulink> such as <literal>#debian-mentors</literal>.  We build Debian binary packages from the native Debian source package.
668  </para>  </para>
669      <itemizedlist>
670      <listitem><literal><replaceable>package</replaceable>_<replaceable>version</replaceable>_<replaceable>arch</replaceable>.deb</literal></listitem>
671      </itemizedlist>
672  </listitem>  </listitem>
673  </itemizedlist>  </itemizedlist>
674  <para>  <para>
675  The more experienced Debian developers will gladly help you, but do read at  In the following, each step of this is explained with detailed examples.
 least some of the documentation before asking a question!  
 </para>  
 <para>  
 When you receive a bug report (yes, actual bug reports!), you will know that it  
 is time for you to dig into the  
 <ulink url="&bts;">Debian Bug Tracking System</ulink>  
 and read the documentation there, to be able to  
 deal with the reports efficiently.  I highly recommend reading the  
 <ulink url="&devref-bug-handling;">Debian Developer's Reference, 5.8.  'Handling bugs'</ulink>.  
 </para>  
 <para>  
 Even if it all worked well, it's time to start praying.  Why?  Because in just  
 a few hours (or days) users from all around the world will start to use your  
 package, and if you made some critical error you'll get mailbombed by numerous  
 angry Debian users...  Just kidding.  :-)  
 </para>  
 <para>  
 Relax and be ready for bug reports, because there is a lot more work to be done  
 before your package will be fully in line with Debian policies and its best  
 practice guidelines (once again, read the <emphasis>real  
 documentation</emphasis> for details).  Good luck!  
676  </para>  </para>
677  </section>  </section>
 </chapter>  
 <chapter id="first"><title>First steps</title>  
 <para>  
 Let's try to make your own package (or, better even, adopt an existing one).  
 </para>  
678  <section id="choose"><title>Choose your program</title>  <section id="choose"><title>Choose your program</title>
679  <para>  <para>
680  You have probably chosen the package you want to create.  The first thing you  You have probably chosen the package you want to create.  The first thing you
# Line 615  using the following. Line 686  using the following.
686  <para>the <command>aptitude</command> command</para>  <para>the <command>aptitude</command> command</para>
687  </listitem>  </listitem>
688  <listitem>  <listitem>
689  <para><ulink url="&packages-do;">Debian packages</ulink> web page</para>  <para>the <ulink url="&packages-do;">Debian packages</ulink> web page</para>
690  </listitem>  </listitem>
691  <listitem>  <listitem>
692  <para><ulink url="&packages-qa-do;">Debian Package Tracking System</ulink> web page</para>  <para>the <ulink url="&packages-qa-do;">Debian Package Tracking System</ulink> web page</para>
693  </listitem>  </listitem>
694  </itemizedlist>  </itemizedlist>
695  <para>  <para>
696  If the package already exists, well, install it!  :-) If it happens to be  If the package already exists, well, install it!  :-) If it happens to be
697  <emphasis role="strong">orphaned</emphasis> -- if its maintainer is set to  <emphasis role="strong">orphaned</emphasis> (that is, if its
698  <ulink url="&qa-do;">Debian QA Group</ulink>, you may be able to pick it up if  maintainer is set to <ulink url="&qa-do;">Debian QA Group</ulink>),
699  it's still available.  You may also adopt a package for which the corresponding  you may be able to pick it up if it's still available.  You may also
700  maintainer has filed a Request for Adoption  adopt a package whose maintainer has filed a Request for Adoption
701  (<emphasis role="strong">RFA</emphasis>).  (<emphasis role="strong">RFA</emphasis>).<footnote> <para>See
702    <ulink url="&devref-adopt;">Debian Developer's Reference 5.9.5.
703    "Adopting a package"</ulink>.</para> </footnote>
704  </para>  </para>
705  <para>  <para>
706  There are several package ownership status resorces.  There are several package ownership status resources.
707  </para>  </para>
708  <itemizedlist>  <itemizedlist>
709  <listitem>  <listitem>
710  <para> <ulink url="&wnpp-do;">Work-Needing and Prospective Packages</ulink> </para>  <para> <ulink url="&wnpp-do;">Work-Needing and Prospective Packages</ulink> </para>
711  </listitem>  </listitem>
712  <listitem>  <listitem>
713  <para> <ulink url="&wnpp-bts;">Debian Bug report logs: Bugs in package wnpp in unstable</ulink> </para>  <para> <ulink url="&wnpp-bts;">Debian Bug report logs: Bugs in pseudo-package <systemitem role="package">wnpp</systemitem> in <literal>unstable</literal></ulink> </para>
714  </listitem>  </listitem>
715  <listitem>  <listitem>
716  <para> <ulink url="&wnpp-dn;">Debian Packages that Need Lovin'</ulink> </para>  <para> <ulink url="&wnpp-dn;">Debian Packages that Need Lovin'</ulink> </para>
717  </listitem>  </listitem>
718  <listitem>  <listitem>
719  <para> <ulink url="&wnpp-debtags;">Browse WNPP bugs based on debtags</ulink> </para>  <para> <ulink url="&wnpp-debtags;">Browse <systemitem role="package">wnpp</systemitem> bugs based on debtags</ulink> </para>
720  </listitem>  </listitem>
721  </itemizedlist>  </itemizedlist>
722  <para>  <para>
# Line 652  for most kinds of programs, and the numb Line 725  for most kinds of programs, and the numb
725  archive is much larger than that of contributors with upload rights.  Thus,  archive is much larger than that of contributors with upload rights.  Thus,
726  contributions to packages already in the archive are far more appreciated (and  contributions to packages already in the archive are far more appreciated (and
727  more likely to receive sponsorship) by other developers <footnote><para> Having  more likely to receive sponsorship) by other developers <footnote><para> Having
728  said that, there will of course always be new programs that are worthwhile  said that, there will of course always be new programs that are worth
729  packaging.  </para> </footnote>.  You can do that in various ways.  packaging.  </para> </footnote>.  You can contribute in various ways.
730  </para>  </para>
731  <itemizedlist>  <itemizedlist>
732  <listitem>  <listitem>
# Line 683  If you are able to adopt the package, ge Line 756  If you are able to adopt the package, ge
756  examine them.  This document unfortunately doesn't include comprehensive  examine them.  This document unfortunately doesn't include comprehensive
757  information about adopting packages.  Thankfully you shouldn't have a hard time  information about adopting packages.  Thankfully you shouldn't have a hard time
758  figuring out how the package works since someone has already done the initial  figuring out how the package works since someone has already done the initial
759  set up for you.  Keep reading, though, a lot of the advice below will still be  setup for you.  Keep reading, though; a lot of the advice below will still be
760  applicable for your case.  applicable for your case.
761  </para>  </para>
762  <para>  <para>
# Line 693  as follows: Line 766  as follows:
766  <itemizedlist>  <itemizedlist>
767  <listitem>  <listitem>
768  <para>  <para>
769  First, you must know that program works, and have tried it for some time to  First, you must know that the program works, and have tried it for some time to
770  confirm its usefulness.  confirm its usefulness.
771  </para>  </para>
772  </listitem>  </listitem>
773  <listitem>  <listitem>
774  <para>  <para>
775  You must check if no one else is working on the package already at the  You must check that no one else is already working on the package on the
776  <ulink url="&wnpp-do;">Work-Needing and Prospective Packages</ulink> site.  <ulink url="&wnpp-do;">Work-Needing and Prospective Packages</ulink> site.
777  If no one else is working on it, file an ITP (Intent  If no one else is working on it, file an ITP (Intent
778  To Package) bug report to the <systemitem role="package">wnpp</systemitem>  To Package) bug report to the <systemitem role="package">wnpp</systemitem>
779  pseudo-package using <command>reportbug</command>.  If someone's already on it,  pseudo-package using <command>reportbug</command>.  If someone's already on it,
780  contact them if you feel you need to.  If not - find another interesting  contact them if you feel you need to.  If not - find another interesting
781  program that nobody maintains.  program that nobody is maintaining.
782  </para>  </para>
783  </listitem>  </listitem>
784  <listitem>  <listitem>
785  <para>  <para>
786  That program <emphasis role="strong">must have a license</emphasis>.  The software <emphasis role="strong">must have a license</emphasis>.
787  </para>  </para>
788  <itemizedlist>  <itemizedlist>
789  <listitem>  <listitem>
790  <para>  <para>
791  For the <literal>main</literal> section, it <emphasis role="strong">must be  For the <literal>main</literal> section, Debian Policy requires it
792  compliant to all the Debian Free Software Guidelines</emphasis> (<ulink url="&dfsg;">DFSG</ulink>)  <emphasis role="strong">to be fully compliant with the Debian Free Software
793  and <emphasis role="strong">that program must not require a package outside of  Guidelines</emphasis> (<ulink url="&dfsg;">DFSG</ulink>)
794  <literal>main</literal></emphasis> for compilation or execution as required by  and <emphasis role="strong">not to require a package outside of
795  the Debian Policy.  This is desired case.  <literal>main</literal></emphasis> for compilation or execution.  This
796    is the desired case.
797  </para>  </para>
798  </listitem>  </listitem>
799  <listitem>  <listitem>
800  <para>  <para>
801  For the <literal>contrib</literal> section, it must be compliant to all the  For the <literal>contrib</literal> section, it must comply with the
802  DFSG but it may require a package outside of <literal>main</literal> for  DFSG but it may require a package outside of <literal>main</literal> for
803  compilation or execution.  compilation or execution.
804  </para>  </para>
805  </listitem>  </listitem>
806  <listitem>  <listitem>
807  <para>  <para>
808  For the <literal>non-free</literal> section, it may not be compliant to some of  For the <literal>non-free</literal> section, it may be non-compliant
809  the DFSG but it <emphasis role="strong">must be distributable</emphasis>.  with the DFSG but it <emphasis role="strong">must be distributable</emphasis>.
810  </para>  </para>
811  </listitem>  </listitem>
812  </itemizedlist>  </itemizedlist>
# Line 743  and ask for advice. Line 817  and ask for advice.
817  </listitem>  </listitem>
818  <listitem>  <listitem>
819  <para>  <para>
820  That program certainly should <emphasis role="strong">not</emphasis> run setuid  The program certainly should <emphasis role="strong">not</emphasis> run setuid
821  root, or even better - it shouldn't need to be setuid or setgid to anything.  root, or even better, it shouldn't need to be setuid or setgid to anything.
822  </para>  </para>
823  </listitem>  </listitem>
824  <listitem>  <listitem>
825  <para>  <para>
826  That program should not be a daemon, or something that goes in  The program should not be a daemon, or go in an
827  <filename>*/sbin</filename> directories, or open a port as root.  <filename>*/sbin</filename> directory, or open a port as root.
828  </para>  </para>
829  </listitem>  </listitem>
830  <listitem>  <listitem>
831  <para>  <para>
832  That program should result in binary executable form, libraries are harder to  The program should be in the binary executable form; libraries are harder to handle.
 handle.  
833  </para>  </para>
834  </listitem>  </listitem>
835  <listitem>  <listitem>
836  <para>  <para>
837  That program should be well documented and its code needs to be understandable  The program should be well documented and its code needs to be understandable
838  (i.e.  not obfuscated).  (i.e.  not obfuscated).
839  </para>  </para>
840  </listitem>  </listitem>
841  <listitem>  <listitem>
842  <para>  <para>
843  You should contact program's author(s) to check if they agree with packaging it  You should contact the program's author(s) to check if they agree with packaging it
844  and amicable to Debian.  It is important to be able to consult with author(s)  and are amicable to Debian.  It is important to be able to consult with the author(s)
845  about the program in case of any program specific problems, so don't try to  in case of any problems with the program, so don't try to package
846  package unmaintained pieces of software.  unmaintained software.
847  </para>  </para>
848  </listitem>  </listitem>
849  </itemizedlist>  </itemizedlist>
850  <para>  <para>
851  Of course, these things are just safety measures, and intended to save you from  Of course, these are just safety measures, and intended to save you from
852  raging users if you do something wrong in some setuid daemon...  When you gain  enraging users if you do something wrong in some setuid daemon...  When you gain
853  some more experience in packaging, you'll be able to package such packages.  more experience in packaging, you'll be able to package such software.
854  </para>  </para>
855  </section>  </section>
856  <section id="getit"><title>Get the program, and try it out</title>  <section id="getit"><title>Get the program, and try it out</title>
857  <para>  <para>
858  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.
859  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
860  author's homepage.  Sources for free Unix programs usually come in  author's homepage.  Sources for free Unix programs usually come in
861  <command>tar</command>+<command>gzip</command> format with extension  <command>tar</command>+<command>gzip</command> format with the extension
862  <filename>.tar.gz</filename>, or  <filename>.tar.gz</filename>,
863  <command>tar</command>+<command>bzip2</command> format with extension  <command>tar</command>+<command>bzip2</command> format with the extension
864  <filename>.tar.bz2</filename>.  These usually contain the subdirectory called  <filename>.tar.bz2</filename>, or
865  <filename><replaceable>programname</replaceable>-<replaceable>version</replaceable></filename>  <command>tar</command>+<command>xz</command> format with the extension
866  in them and all the sources under it.  <filename>.tar.xz</filename>.  These usually contain a directory called
867    <filename><replaceable>package</replaceable>-<replaceable>version</replaceable></filename>
868    with all the sources inside.
869  </para>  </para>
870  <para>  <para>
871  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,
872  Subversion, or CVS repository, you need to get it with <literal>git  Subversion, or CVS, you need to get it with <literal>git
873  clone</literal>, <literal>svn co</literal>, or <literal>cvs co</literal> and  clone</literal>, <literal>svn co</literal>, or <literal>cvs co</literal> and
874  repack it into <command>tar</command>+<command>gzip</command> format by  repack it into <command>tar</command>+<command>gzip</command> format yourself
875  yourself using the <literal>--exclude-vcs</literal> option.  by using the <literal>--exclude-vcs</literal> option.
876  </para>  </para>
877  <para>  <para>
878  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
879  filename ends in <filename>.Z</filename> or  filename ends in <filename>.Z</filename> or
880  <filename>.zip</filename><footnote><para> You can identify the archive format  <filename>.zip</filename><footnote><para> You can identify the archive format
881  using the <command>file</command> command when the file extension is not  using the <command>file</command> command when the file extension is not
882  enough.  </para> </footnote>), unpack it with appropriate tools and repack it,  enough.  </para> </footnote>), you should also unpack it with the
883  too.  appropriate tools and repack it.
884  </para>  </para>
885  <para>  <para>
886  As an example, I'll use a program called <command>gentoo</command>, an X GTK+  As an example, I'll use a program called <command>gentoo</command>, a GTK+
887  file manager.<footnote><para> This program is already packaged.  file manager.
888  <ulink url="&gentoo-package;">Current  <footnote><para> This program is already packaged. The
889  version</ulink> has changed substantially from the version 0.9.12 in the  <ulink url="&gentoo-package;">current version</ulink> uses Autotools as its
890  following examples.</para> </footnote>  build structure and is substantially different from the following examples,
891    which were based on version 0.9.12.</para>
892    </footnote>
893  </para>  </para>
894  <para>  <para>
895  Create a subdirectory under your home directory named  Create a subdirectory under your home directory named
896  <filename>debian</filename> or <filename>deb</filename> or anything you find  <filename>debian</filename> or <filename>deb</filename> or anything you find
897  appropriate (e.g.  just <filename>~/gentoo</filename> would do fine in this  appropriate (e.g.  just <filename>~/gentoo</filename> would do fine in this
898  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
899  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
900  <emphasis>irrelevant</emphasis> ones, because there will most probably be  messages, even <emphasis>irrelevant</emphasis> ones, because other
901  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
902  not ignore those anomalies.  On your console screen, you should see the  may have problems unpacking them.  Your shell command line may look
903  following.  something like this:
904  </para>  </para>
905  <screen>  <screen>
906  $ mkdir ~/gentoo ; cd ~/gentoo  $ mkdir ~/gentoo ; cd ~/gentoo
# Line 838  Now you have another subdirectory, calle Line 915  Now you have another subdirectory, calle
915  Change to that directory and <emphasis>thoroughly</emphasis> read the provided  Change to that directory and <emphasis>thoroughly</emphasis> read the provided
916  documentation.  Usually there are files named <filename>README*</filename>,  documentation.  Usually there are files named <filename>README*</filename>,
917  <filename>INSTALL*</filename>, <filename>*.lsm</filename> or  <filename>INSTALL*</filename>, <filename>*.lsm</filename> or
918  <filename>*.html</filename>.  You must find instructions on how to correctly  <filename>*.html</filename>.  You must find instructions on how to
919  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
920  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
921  that, but more on that later in <xref linkend="destdir"/> ).  that, but more on that later in <xref linkend="destdir"/>).
922  </para>  </para>
923  <para>  <para>
924  Simple programs come with a <filename>Makefile</filename> file in them and can  You should start packaging with a completely clean (pristine) source directory,
925  be compiled simply with <literal>make</literal>.<footnote><para>  or simply with freshly unpacked sources.
926    </para>
927    </section>
928    <section id="simplemake"><title>Simple build systems</title>
929    <para>
930    Simple programs come with a <filename>Makefile</filename> and can
931    be compiled just by invoking <literal>make</literal>.<footnote><para>
932  Many modern programs come with a script <filename>configure</filename> which  Many modern programs come with a script <filename>configure</filename> which
933  creates a <filename>Makefile</filename> file customized for your system upon  when executed creates a <filename>Makefile</filename> customized for
934  its execution.</para></footnote> Some of them support  your system.</para></footnote> Some of them support
935  <literal>make check</literal>, which runs included self-checks.  Installation  <literal>make check</literal>, which runs included self-tests.  Installation
936  to the destination directories is usually done with <literal>make  to the destination directories is usually done with <literal>make
937  install</literal>.  install</literal>.
938  </para>  </para>
# Line 864  there's even a <literal>make uninstall</ Line 947  there's even a <literal>make uninstall</
947  all the installed files.  all the installed files.
948  </para>  </para>
949  </section>  </section>
950  <section id="portable"><title>Free portable programs</title>  <section id="portable"><title>Popular portable build systems</title>
951  <para>  <para>
952  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
953  <ulink url="&cxx;">C++</ulink> languages.  Many of  <ulink url="&cxx;">C++</ulink> languages.  Many of these use Autotools or
954  these use Autotools or CMake to make them portable across different platforms.  CMake to make them portable across different platforms.  These build tools need
955  These tools are used to generate <filename>Makefile</filename> and other  to be used to generate the <filename>Makefile</filename> and other
956  required source files.  Then, such programs are built with usual <literal>make;  required source files first.  Then, such programs are built using the usual
957  make install</literal>.  <literal>make; make install</literal>.
958  </para>  </para>
959  <para>  <para>
960  <ulink url="&gnu-build-system;">Autotools</ulink>  <ulink url="&gnu-build-system;">Autotools</ulink> is the GNU build
961  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>,
962    <ulink url="&automake;">Automake</ulink>,
963    <ulink url="&libtool;">Libtool</ulink>, and
964    <ulink url="&gettext;">gettext</ulink>.  You can recognize
965  such sources by the <filename>configure.ac</filename>,  such sources by the <filename>configure.ac</filename>,
966  <filename>Makefile.am</filename>, and <filename>Makefile.in</filename> files.  <filename>Makefile.am</filename>, and <filename>Makefile.in</filename> files.
967  <footnote><para> See <ulink url="&autotools-tutorial;">Autotools Tutorial</ulink>  <footnote><para>Autotools is too big to deal in this small tutorial. This
968  and <ulink url="&autotools-readme;"/>.  </para> </footnote>  section is meant to provide keywords and references only.  Please make sure to read the
969    <ulink url="&autotools-tutorial;">Autotools Tutorial</ulink> and
970    <ulink url="&autotools-readme;"/>, if you need to use it.</para></footnote>
971  </para>  </para>
972  <para>  <para>
973  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
974  <literal>autoreconf -i -f</literal> in the source and distributes this source  <literal>autoreconf -i -f</literal> in the source directory and
975  with generated files.  distributes the generated files along with the source.
976  </para>  </para>
977  <screen>  <screen>
978  configure.ac-----+-&gt; autoreconf -+-&gt; configure  configure.ac-----+-&gt; autoreconf -+-&gt; configure
# Line 903  files requires some knowledge of <comman Line 991  files requires some knowledge of <comman
991  <literal>info automake</literal>.  <literal>info automake</literal>.
992  </para>  </para>
993  <para>  <para>
994  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
995  distributed source and runs <literal>./configure &amp;&amp; make</literal> in  distributed source and runs <literal>./configure &amp;&amp; make</literal> in
996  the source to compile program into a  the source directory to compile the program into a
997  <command><replaceable>binary</replaceable></command>.  <command><replaceable>binary</replaceable></command> executable.
998  </para>  </para>
999  <screen>  <screen>
1000  Makefile.in -----+                +-&gt; Makefile -----+-&gt; make -&gt; <replaceable>binary</replaceable>  Makefile.in -----+                +-&gt; Makefile -----+-&gt; make -&gt; <replaceable>binary</replaceable>
# Line 917  config.h.in -----+                +-&gt; Line 1005  config.h.in -----+                +-&gt;
1005             config.guess --+             config.guess --+
1006  </screen>  </screen>
1007  <para>  <para>
1008  You can change many things in the <filename>Makefile</filename> file such as  You can change many things in the <filename>Makefile</filename>; for
1009  the default file install location using the command option, e.g.  instance you can change the default location for file installation
1010  <command>./configure --prefix=/usr</command>.  using the option <command>./configure --prefix=/usr</command>.
1011  </para>  </para>
1012  <para>  <para>
1013  Although it is not required, updating the <filename>configure</filename> and  Although it is not required, updating the <filename>configure</filename> and
1014  other files with <literal>autoreconf -i -f</literal> as the user may improve  other files with <literal>autoreconf -i -f</literal> may improve
1015  the compatibility of the source.  the compatibility of the source.
1016    <footnote><para>You can automate this by using
1017    <systemitem role="package">dh-autoreconf</systemitem> package.
1018    See <xref linkend="customrules"/>.</para></footnote>
1019  </para>  </para>
1020  <para>  <para>
1021  <ulink url="&cmake;">CMake</ulink> is an alternative  <ulink url="&cmake;">CMake</ulink> is an alternative
1022  build system.  You can notice such sources by the  build system.  You can recognize such sources by the
1023  <filename>CMakeLists.txt</filename> file.  <filename>CMakeLists.txt</filename> file.
1024  </para>  </para>
1025  </section>  </section>
1026  <section id="namever"><title>Package name and version</title>  <section id="namever"><title>Package name and version</title>
1027  <para>  <para>
1028  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
1029  or simply with freshly unpacked sources.  consider
1030    <emphasis role="strong">package name</emphasis> to be <literal>gentoo</literal> and
1031    <emphasis role="strong">upstream version</emphasis> to be <literal>0.9.12</literal>.
1032    These are used in the <filename>debian/changelog</filename> file described later in
1033    <xref linkend="changelog"/>, too.
1034    </para>
1035    <para>
1036    Although this simple approach works most of the times, you may need to adjust
1037    <emphasis role="strong">package name</emphasis> and
1038    <emphasis role="strong">upstream version</emphasis> by renaming the upstream
1039    source to follow the Debian Policy and the existing convention.
1040    </para>
1041    <para>
1042    You must choose the <emphasis role="strong">package name</emphasis>
1043    to consist only of lower case letters (<literal>a-z</literal>), digits
1044    (<literal>0-9</literal>), plus (<literal>+</literal>) and minus
1045    (<literal>-</literal>) signs, and periods (<literal>.</literal>). It must be
1046    at least two characters long, must start with an alphanumeric character, and
1047    must not be the same as existing ones.
1048    It is good idea to keep its length within 30 characters and should not exceed
1049    40 characters.
1050    </para>
1051    <!--
1052    Osamu's archive stat (2011-04-23, sid, kfreebsd-amd64):
1053    === stat for package name string length ===
1054    11 1947 36.9%   mode
1055    14 1717 54.7%  50% median
1056    23 611 91.0%   90%
1057    32 89 99.0%    99%
1058    41 12 99.9%    99.9%
1059    52 1 100.0%
1060    Previous 20 chars is becoming too short for 17% of packages
1061    Default aptitude setting display up to 30 chars (98.3%).
1062    -->
1063    <para>
1064    If upstream source uses generic words such as <literal>test-suite</literal> as
1065    its name, it is good idea to rename it not to contaminate name space for the
1066    package name and to identify its contents explicitly.
1067    <footnote><para>If you follow the
1068    <ulink url="&devref-newpackage;">Debian Developer's Reference 5.1. "New packages"</ulink>,
1069    the ITP process will usually catch this kind of issues.</para></footnote>
1070  </para>  </para>
1071  <para>  <para>
1072  For the package to be built correctly, you must make the program's original  You should choose the <emphasis role="strong">upstream version</emphasis>
1073  name lowercase (if it isn't already), and you should move the source directory  to consist only of
1074  to  alphanumerics (<literal>0-9A-Za-z</literal>), plus (<literal>+</literal>),
1075  <filename><replaceable>packagename</replaceable>-<replaceable>version</replaceable></filename>.  tildes (<literal>~</literal>), and periods (<literal>.</literal>). It must
1076  </para>  start with a digit (<literal>0-9</literal>).  <footnote><para>This stricter
1077  <para>  rule should help you avoid confusing file names.</para></footnote>
1078  If the program name consists of more than one word, contract them to one word,  It is good idea to keep its length within 8 characters if possible.
1079  or make an abbreviation.  For example, program John's little editor for X  </para>
1080  package would be named <systemitem role="package">johnledx</systemitem>, or  <!--
1081  <systemitem role="package">jle4x</systemitem>, or whatever you decide, as long  Osamu's archive stat (2011-04-23, sid, kfreebsd-amd64):
1082  as it's under some reasonable limit, e.g.  20 characters.  === stat for upstream version string length ===
1083  </para>  5 9765 60.2%  50% median and mode
1084  <para>  6 3765 73.3%
1085  Also check for the exact version of the program (to be included in the package  7 2789 82.9%
1086  version).  If that piece of software is not numbered with versions like  8 1158 86.9%
1087  <literal>X.Y.Z</literal>, but with some kind of date, feel free to use that  9 501 88.6%
1088  date as the version number, as long as newer version numbers will look larger.  10 773 91.3%  90%
1089  While it is best to use the same version number as what upstream uses, if it is  18 55 99.1%   99%
1090  in the format of <literal>09Oct23</literal> you may need to convert it to  27 11 99.9%    99.9
1091  <literal>YYYYMMDD</literal> format, which would be <literal>20091023</literal>,  35 6 100.0%
1092  to ensure proper order for upgrade with the <command>dpkg</command>  === stat for debian revision string length ===
1093  program.<footnote><para> Version string can be compared by <literal>dpkg  1 22556 83.3%  50% median and mode
1094  --compare-versions <replaceable>ver1</replaceable>  2 1106 87.2%
1095  <replaceable>op</replaceable> <replaceable>ver2</replaceable></literal>.  See  3 1312 91.7%   90%
1096  <citerefentry> <refentrytitle>dpkg</refentrytitle> <manvolnum>1</manvolnum>  4 2127 99.1%   99%
1097  </citerefentry> manpage.  </para> </footnote>  7 14 99.9%     99.9%
1098  </para>  
1099  <para>  aptitude display 10 = 8char for up + 1char (for -) + 1char for deb
1100  Some programs won't be numbered at all, in which case you should contact the  90chars as max for file name of binary debs (package+up+deb+arch+.deb)
1101  upstream maintainer to see if they've got some other revision-tracking method.  -->
1102  </para>  <para>
1103  </section>  If the upstream software does not use normal version system like
1104  <section id="dh-make"><title>Initial Debian package</title>  <literal>2.30.32</literal> but uses some kind of date such as
1105  <para>  <literal>09Oct23</literal>, a random codename string or a VCS hash value as a part
1106  Let's set up the shell environment variable <literal>$DEBEMAIL</literal> and  of version, make sure to remove them from the
1107  <literal>$DEBFULLNAME</literal> so many Debian maintenance tools recognize your  <emphasis role="strong">upstream version</emphasis>.  Such information can be
1108  name and email address to use for packages as follows.<footnote><para> The  recorded in the <filename>debian/changelog</filename> file.  If you need to
1109    invent a version string, use the <literal>YYYYMMDD</literal> format such as
1110    <literal>20110429</literal> as upstream version.  This ensures that
1111    <command>dpkg</command> properly sees later versions as upgrades.
1112    </para>
1113    <para>
1114    Version strings can be compared with <citerefentry> <refentrytitle>dpkg</refentrytitle> <manvolnum>1</manvolnum> </citerefentry> as the following.
1115    </para>
1116    <screen>
1117     $ dpkg --compare-versions <replaceable>ver1</replaceable> <replaceable>op</replaceable> <replaceable>ver2</replaceable>
1118    </screen>
1119    <para>
1120    The version comparison rule can be summarized as the following.
1121    </para>
1122    <itemizedlist>
1123    <listitem><para>The strings are compared from the head to the tail.</para></listitem>
1124    <listitem><para>Alphabets are larger than numbers.</para></listitem>
1125    <listitem><para>Numbers are compared as the integer.</para></listitem>
1126    <listitem><para>Alphabets are compared in the ASCII code order.</para></listitem>
1127    <listitem><para>There are some special rules for periods (<literal>.</literal>), plus (<literal>+</literal>) and tildes (<literal>~</literal>) as the followings.</para>
1128      <para>
1129      <literal>0.0</literal> &lt;
1130      <literal>0.5</literal> &lt;
1131      <literal>0.10</literal> &lt;
1132      <literal>0.99</literal> &lt;
1133      <literal>1</literal> &lt;
1134      <literal>1.0~rc1</literal> &lt;
1135      <literal>1.0</literal> &lt;
1136      <literal>1.0+b1</literal> &lt;
1137      <literal>1.0+nmu1</literal> &lt;
1138      <literal>1.1</literal> &lt;
1139      <literal>2.0</literal>
1140      </para>
1141    </listitem>
1142    </itemizedlist>
1143    <para>
1144    One of the tricky case happens when the upstream releases
1145    <filename>gentoo-0.9.12-ReleaseCandidate-99.tar.gz</filename> as the
1146    pre-release of <filename>gentoo-0.9.12.tar.gz</filename>.  You need to make
1147    sure that the upgrade works properly by renaming the upstream source to
1148    <filename>gentoo-0.9.12~rc99.tar.gz</filename>.
1149    </para>
1150    </section>
1151    <section id="dh-make"><title>Setting up <command>dh_make</command></title>
1152    <para>
1153    Set up the shell environment variables <literal>$DEBEMAIL</literal> and
1154    <literal>$DEBFULLNAME</literal> so that various Debian maintenance
1155    tools recognize your email address and name to use for packages. <footnote><para> The
1156  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
1157  other login shells such as Z shell, use their pertinent configuration files  some other login shell such as Z shell, use their corresponding
1158  instead of <filename>~/.bashrc</filename>.  </para> </footnote>.  configuration files instead of <filename>~/.bashrc</filename>. </para> </footnote>
1159  </para>  </para>
1160  <screen>  <screen>
1161  $ cat &gt;&gt;~/.bashrc &lt;&lt;EOF  $ cat &gt;&gt;~/.bashrc &lt;&lt;EOF
# Line 985  DEBEMAIL=your.email.address@example.org Line 1163  DEBEMAIL=your.email.address@example.org
1163  DEBFULLNAME=Firstname Lastname  DEBFULLNAME=Firstname Lastname
1164  export DEBEMAIL DEBFULLNAME  export DEBEMAIL DEBFULLNAME
1165  EOF  EOF
1166    $ . ~/.bashrc
1167  </screen>  </screen>
1168    </section>
1169    <section id="non-native-dh-make"><title>Initial non-native Debian package</title>
1170  <para>  <para>
1171  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
1172    programs.  If you wish to create a non-native Debian package of an upstream
1173    source <filename>gentoo-0.9.12.tar.gz</filename>, you can create an initial
1174    non-native Debian package for it by issuing the <command>dh_make</command>
1175  command as follows.  command as follows.
1176  </para>  </para>
1177  <screen>  <screen>
1178  $ . ~/.bashrc  $ cd ~/gentoo
1179  $ cd ~/gentoo/gentoo-0.9.12  $ wget http://example.org/gentoo-0.9.12.tar.gz
1180    $ tar -xvzf gentoo-0.9.12.tar.gz
1181    $ cd gentoo-0.9.12
1182  $ dh_make -f ../gentoo-0.9.12.tar.gz  $ dh_make -f ../gentoo-0.9.12.tar.gz
1183  </screen>  </screen>
1184  <para>  <para>
1185  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.
1186  <footnote><para> If the upstream source provides the  <footnote><para> If the upstream source provides the
1187  <filename>debian</filename> directory and its contents, run the  <filename>debian</filename> directory and its contents, run the
1188  <command>dh_make</command> command with the <literal>--addmissing</literal>  <command>dh_make</command> command with the extra option
1189  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
1190  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
1191  provided by the upstream for your Debian package.  </para> </footnote> See  provided by the upstream for your Debian package.  </para> </footnote> See
1192  <citerefentry> <refentrytitle>dh_make</refentrytitle> <manvolnum>1</manvolnum>  <citerefentry> <refentrytitle>dh_make</refentrytitle> <manvolnum>1</manvolnum>
1193  </citerefentry> for details.  </citerefentry> for details.
1194  </para>  </para>
1195  <para>  <para>
1196  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
1197  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,
1198  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
1199  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
1200  confirm by pressing <literal><replaceable>ENTER</replaceable></literal>.  confirm by pressing <literal><replaceable>ENTER</replaceable></literal>.
1201  <footnote><para> There are few choices here: <literal>s</literal> for Single  <footnote><para> There are several choices here: <literal>s</literal> for
1202  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
1203  Multiple binary, <literal>l</literal> for Library, <literal>k</literal> for  Multiple binary packages, <literal>l</literal> for Library package, <literal>k</literal> for
1204  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>
1205  for <systemitem role="package">cdbs</systemitem>.  This document focuses on the  for <systemitem role="package">cdbs</systemitem> package.  This document focuses on the
1206  use of the <systemitem role="package">debhelper</systemitem> package with the  use of the <command>dh</command> command (from the package
1207  <command>dh</command> command.  This document focuses on the use of the new  <systemitem role="package">debhelper</systemitem>) to create a single binary package,
1208  <command>dh</command> command for Single binary and touches on it for  but also touches on how to use it for arch-independent or
1209  Arch-Independent and Multiple binary.  The <systemitem role="package">cdbs</systemitem> package offers alternative package script  multiple binary packages.  The package
1210  infrastructure to the <command>dh</command> command and outside of the scope of  <systemitem role="package">cdbs</systemitem> offers an alternative packaging script
1211    infrastructure to the <command>dh</command> command and is outside the scope of
1212  this document.  </para> </footnote>  this document.  </para> </footnote>
1213  </para>  </para>
1214  <para>  <para>
1215  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
1216  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
1217  parent directory to accommodate the creation of the non-native Debian source  parent directory to accommodate the creation of the non-native Debian source
1218  package with the <filename>debian.tar.gz</filename> later.  package with the name <filename>debian.tar.gz</filename> later.
1219  </para>  </para>
1220  <screen>  <screen>
1221  $ cd ~/gentoo ; ls -F  $ cd ~/gentoo ; ls -F
# Line 1037  gentoo-0.9.12.tar.gz Line 1224  gentoo-0.9.12.tar.gz
1224  gentoo_0.9.12.orig.tar.gz  gentoo_0.9.12.orig.tar.gz
1225  </screen>  </screen>
1226  <para>  <para>
1227  Please note 2 key features in this  Please note two key features of this filename
1228  <filename>gentoo_0.9.12.orig.tar.gz</filename> file name:  <filename>gentoo_0.9.12.orig.tar.gz</filename>:
1229  </para>  </para>
1230  <itemizedlist>  <itemizedlist>
1231  <listitem>  <listitem>
1232  <para>  <para>
1233  Package name and version are separated by the <literal>_</literal>  Package name and version are separated by the character <literal>_</literal>
1234  (underscore).  (underscore).
1235  </para>  </para>
1236  </listitem>  </listitem>
1237  <listitem>  <listitem>
1238  <para>  <para>
1239  There is the <filename>.orig</filename> before the  The string <filename>.orig</filename> is inserted before the
1240  <filename>.tar.gz</filename>.  <filename>.tar.gz</filename>.
1241  </para>  </para>
1242  </listitem>  </listitem>
1243  </itemizedlist>  </itemizedlist>
1244  <para>  <para>
1245  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
1246  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
1247  that the packaging is not automatic process.  You need to modify the upstream  <xref linkend="dreq"/> and <xref linkend="dother"/>.  You should also understand
1248  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
1249  build Debian packages under the proper method as <xref linkend="build"/> ,  source for Debian (see <xref linkend="modify"/>).  After this, you need to
1250  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"/>),
1251    testing them (<xref linkend="checkit"/>), and uploading them (<xref linkend="upload"/>).
1252    All the steps will be explained.
1253  </para>  </para>
1254  <para>  <para>
1255  Once again, as a new maintainer you are discouraged from creating complicated  Once again, as a new maintainer you are discouraged from creating complicated
1256  packages, e.g.,  packages, e.g.:
1257  </para>  </para>
1258  <itemizedlist>  <itemizedlist>
1259  <listitem>  <listitem>
1260  <para>  <para>
1261  multiple binary packages,  multiple binary packages;
1262  </para>  </para>
1263  </listitem>  </listitem>
1264  <listitem>  <listitem>
1265  <para>  <para>
1266  library packages,  library packages;
1267  </para>  </para>
1268  </listitem>  </listitem>
1269  <listitem>  <listitem>
1270  <para>  <para>
1271  kernel module packages,  kernel module packages;
1272  </para>  </para>
1273  </listitem>  </listitem>
1274  <listitem>  <listitem>
1275  <para>  <para>
1276  kernel patch packages,  kernel patch packages;
1277  </para>  </para>
1278  </listitem>  </listitem>
1279  <listitem>  <listitem>
1280  <para>  <para>
1281  the source file format being neither in <filename>tar.gz</filename> nor  packages with the source in a format other than <filename>tar.gz</filename> or
1282  <filename>tar.bz2</filename>, or  <filename>tar.bz2</filename>; or
1283  </para>  </para>
1284  </listitem>  </listitem>
1285  <listitem>  <listitem>
1286  <para>  <para>
1287  the source tarball containing undistributable contents.  packages where the source tarball contains undistributable contents.
1288  </para>  </para>
1289  </listitem>  </listitem>
1290  </itemizedlist>  </itemizedlist>
1291  <para>  <para>
1292  It's not too hard, but it does require a bit more knowledge, so we won't  Doing so is not too hard, but it requires a bit more knowledge, so we won't
1293  describe all of it here.  describe all of it here.
1294  </para>  </para>
1295  <para>  <para>
# Line 1110  recover them by running <command>dh_make Line 1299  recover them by running <command>dh_make
1299  </para>  </para>
1300  <para>  <para>
1301  Updating an existing package may get complicated since it may be using older  Updating an existing package may get complicated since it may be using older
1302  techniques.  Please stick with fresh packaging cases for now to learn basics.  techniques.  While learning the basics, please stick to creating a fresh
1303  I will come back to explain it later in <xref linkend="update"/> .  package; further explanations are given in <xref linkend="update"/>.
1304    </para>
1305    <para>
1306    Please note that the source file does not need to contain
1307    <filename>Makefile</filename>.  Installation of files may be enabled by
1308    <systemitem role="package">debhelper</systemitem> configuration files such as
1309    <filename>debian/install</filename> (see <xlink linkend="install"/>) only.
1310    </para>
1311    </section>
1312    <section id="native-dh-make"><title>Initial native Debian package</title>
1313    <para>
1314    Debian native packages are simpler to manage if they contain source files you
1315    manage only for Debian, possibly only for local uses.  If you have source
1316    files in <filename>~/mypackage-1.0</filename>, you can create an initial native
1317    Debian package for it by issuing the <command>dh_make</command> command as
1318    follows.
1319    </para>
1320    <screen>
1321    $ cd ~/mypackage-1.0
1322    $ dh_make --native
1323    </screen>
1324    <para>
1325    Then the <filename>debian</filename> directory and its contents are created
1326    just like <xref linkend="non-native-dh-make"/>.  This does not create a tarball
1327    since this will be a native Debian package.  But that is the only difference.
1328    The rest of the packaging are practically the same.
1329  </para>  </para>
1330  </section>  </section>
1331  </chapter>  </chapter>
# Line 1121  Please note that there isn't space here Line 1335  Please note that there isn't space here
1335  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
1336  people often run across.  people often run across.
1337  </para>  </para>
1338  <section id="quiltrc"><title>Set up <command>quilt</command></title>  <section id="quiltrc"><title>Setting up <command>quilt</command></title>
1339    <para>
1340    The program <command>quilt</command> offers a basic method for recording
1341    modifications to the upstream source for Debian packaging.  It's
1342    useful to have a slightly customized default, so let's create an alias
1343    <command>dquilt</command> for Debian packaging by adding the following
1344    line to <filename>~/.bashrc</filename>.
1345    </para>
1346    <screen>
1347    alias dquilt="quilt --quiltrc=~/.quiltrc-dpkg"
1348    </screen>
1349  <para>  <para>
1350  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>  
1351  </para>  </para>
1352  <screen>  <screen>
1353  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
1354  if [ -d $d/debian ] &amp;&amp; [ -z $QUILT_PATCHES ]; then  if [ -d $d/debian ] &amp;&amp; [ -z $QUILT_PATCHES ]; then
1355      # Debian packaging case and unset $QUILT_PATCHES      # if in Debian packaging tree with unset $QUILT_PATCHES
1356      QUILT_PATCHES=debian/patches      QUILT_PATCHES="debian/patches"
1357      QUILT_PATCH_OPTS=--reject-format=unified      QUILT_PATCH_OPTS="--reject-format=unified"
1358      QUILT_DIFF_ARGS=-p ab --no-timestamps --no-index --color=auto      QUILT_DIFF_ARGS="-p ab --no-timestamps --no-index --color=auto"
1359      QUILT_REFRESH_ARGS=-p ab --no-timestamps --no-index      QUILT_REFRESH_ARGS="-p ab --no-timestamps --no-index"
1360      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"
1361      if ! [ -d $d/debian/patches ]; then mkdir $d/debian/patches; fi      if ! [ -d $d/debian/patches ]; then mkdir $d/debian/patches; fi
1362  fi  fi
1363  </screen>  </screen>
1364  <para>  <para>
1365  See <citerefentry> <refentrytitle>quilt</refentrytitle>  See <citerefentry> <refentrytitle>quilt</refentrytitle>
1366  <manvolnum>1</manvolnum> </citerefentry> and  <manvolnum>1</manvolnum> </citerefentry> and
1367  <ulink url="&quilt-pdf;">quilt.pdf</ulink> for how to use  <ulink url="&quilt-pdf;">quilt.pdf</ulink> on how to use
1368  <command>quilt</command>.  <command>quilt</command>.
1369  </para>  </para>
1370  </section>  </section>
1371  <section id="fixupstream"><title>Fixing upstream bug</title>  <section id="fixupstream"><title>Fixing upstream bugs</title>
1372  <para>  <para>
1373  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>
1374  file as follows where <literal>install: gentoo</literal> should have been  as follows where <literal>install: gentoo</literal> should have been
1375  <literal>install: gentoo-target</literal>.  <literal>install: gentoo-target</literal>.
1376  </para>  </para>
1377  <screen>  <screen>
# Line 1162  install: gentoo Line 1381  install: gentoo
1381          install gentoorc-example $(HOME)/.gentoorc          install gentoorc-example $(HOME)/.gentoorc
1382  </screen>  </screen>
1383  <para>  <para>
1384  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
1385  <filename>fix-gentoo-target.patch</filename>.  <footnote><para> The  <filename>fix-gentoo-target.patch</filename>.  <footnote><para> The
1386  <filename>debian/patches</filename> directory should exist now if you run  <filename>debian/patches</filename> directory should exist now if you ran
1387  <command>dh_make</command> as described before.  This example operation creates  <command>dh_make</command> as described before.  This example operation creates
1388  it just in case you are updating the existing package.  </para> </footnote>  it just in case you are updating an existing package.  </para> </footnote>
1389  </para>  </para>
1390  <screen>  <screen>
1391  $ mkdir debian/patches  $ mkdir debian/patches
1392  $ quilt new fix-gentoo-target.patch  $ dquilt new fix-gentoo-target.patch
1393  $ quilt add Makefile  $ dquilt add Makefile
1394  </screen>  </screen>
1395  <para>  <para>
1396  You change the <filename>Makefile</filename> file as follows.  You change the <filename>Makefile</filename> file as follows.
# Line 1183  install: gentoo-target Line 1402  install: gentoo-target
1402          install gentoorc-example $(HOME)/.gentoorc          install gentoorc-example $(HOME)/.gentoorc
1403  </screen>  </screen>
1404  <para>  <para>
1405  Ask <command>quilt</command> to refresh the patch to create  Ask <command>dquilt</command> to generate the patch to create
1406  <filename>debian/patches/fix-gentoo-target.patch</filename> and add its  <filename>debian/patches/fix-gentoo-target.patch</filename> and add its
1407  description following <ulink url="&dep3;">DEP-3: Patch Tagging Guidelines</ulink>.  description following <ulink url="&dep3;">DEP-3: Patch Tagging Guidelines</ulink>.
1408  </para>  </para>
1409  <screen>  <screen>
1410  $ quilt refresh  $ dquilt refresh
1411  $ quilt header -e  $ dquilt header -e
1412  ... describe patch  ... describe patch
1413  </screen>  </screen>
1414  </section>  </section>
1415    <section id="destdir"><title>Installation of files to their destination</title>
 <section id="destdir"><title>Installation of files to the destination</title>  
1416  <para>  <para>
1417  Normally, programs install themselves in the <filename>/usr/local</filename>  Most third-party software installs itself in the <filename>/usr/local</filename>
1418  subdirectory.  Since it is reserved for system administrator's (or user's)  directory hierarchy.  On Debian this is reserved for private use
1419  private use, Debian packages must not use that directory but should use system  by the system administrator, so packages must not use directories such
1420  directories such as the <filename>/usr/bin</filename> subdirectory following  as <filename>/usr/local/bin</filename> but should instead use system
1421  the Filesystem Hierarchy Standard (<ulink url="&fhs;">FHS</ulink>,  directories such as <filename>/usr/bin</filename>, obeying the
1422  <ulink url="&fhs-pdf;">fhs-2.3.pdf</ulink>).  <ulink url="&fhs;">Filesystem Hierarchy Standard</ulink> (FHS).
1423  </para>  </para>
1424  <para>  <para>
1425  Normally, <citerefentry> <refentrytitle>make</refentrytitle>  Normally, <citerefentry> <refentrytitle>make</refentrytitle>
1426  <manvolnum>1</manvolnum> </citerefentry> is used to automate building the  <manvolnum>1</manvolnum> </citerefentry> is used to automate building the
1427  program and the execution of <literal>make install</literal> installs programs  program, and executing <literal>make install</literal> installs programs
1428  directly to the desired destination by the <literal>install</literal> target of  directly to the desired destination (following the
1429  the <filename>Makefile</filename> file.  In order for Debian to provide binary  <literal>install</literal> target in the
1430  packages, the build system installs programs to the file tree image created  <filename>Makefile</filename>).  In order for Debian to provide
1431  under a temporary directory instead to the actual destination.  pre-built installable packages, it modifies the build system to install
1432    programs into a file tree image created under a temporary directory
1433    instead of the actual destination.
1434  </para>  </para>
1435  <para>  <para>
1436  These 2 differences between (1) the normal program installation and (2) the  These two differences between normal program installation on one hand and the
1437  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
1438    <systemitem role="package">debhelper</systemitem> package through the
1439  <command>dh_auto_configure</command> and <command>dh_auto_install</command>  <command>dh_auto_configure</command> and <command>dh_auto_install</command>
1440  commands if the following conditions are met.  commands if the following conditions are met.
1441  </para>  </para>
1442  <itemizedlist>  <itemizedlist>
1443  <listitem>  <listitem>
1444  <para>  <para>
1445  The <filename>Makefile</filename> file follows the GNU conventions to support  The <filename>Makefile</filename> must follow GNU conventions and
1446  <literal>$(DESTDIR)</literal> variable.  support the <literal>$(DESTDIR)</literal> variable.
1447  <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>
1448  </para>  </para>
1449  </listitem>  </listitem>
1450  <listitem>  <listitem>
1451  <para>  <para>
1452  The source follows the Filesystem Hierarchy Standard (FHS).  The source must follow the Filesystem Hierarchy Standard (FHS).
1453  </para>  </para>
1454  </listitem>  </listitem>
1455  </itemizedlist>  </itemizedlist>
1456  <para>  <para>
1457  Programs that use GNU <command>autoconf</command>  Programs that use GNU <command>autoconf</command> follow the GNU conventions
1458  <emphasis>automatically</emphasis> follow the GNU conventions and their  automatically, so they can be trivial to package.  On the basis of
1459  packaging is almost <emphasis>automatic</emphasis>.  With this and other  this and other heuristics, it is estimated that the
1460  heuristics, the <systemitem role="package">debhelper</systemitem> package  <systemitem role="package">debhelper</systemitem> package will work for
1461  estimates that it works for about 90% of packages without making any intrusive  about 90% of packages without making any intrusive changes to their
1462  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.  
1463  </para>  </para>
1464  <para>  <para>
1465  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
1466  should make sure to support these <literal>$(DESTDIR)</literal> variable.  The  should be careful to support the <literal>$(DESTDIR)</literal>
1467  <literal>$(DESTDIR)</literal> variable is unset in it and is prepended to each  variable.  Although it is unset by default, the <literal>$(DESTDIR)</literal>
1468  file path used for the program installation.  The packaging script will set  variable is prepended to each file path used for the program
1469  <literal>$(DESTDIR)</literal> to the temporary directory.  installation.  The packaging script will set
1470    <literal>$(DESTDIR)</literal> to the temporary directory.
1471  </para>  </para>
1472  <para>  <para>
1473  The temporary directory used by the <command>dh_auto_install</command> command  For packages of the single binary type, the temporary directory used
1474  is chosen as <filename>debian/<replaceable>package</replaceable></filename> for  by the <command>dh_auto_install</command> command will be set to
1475  single binary packages.  <footnote><para> For multiple binary packages, the  <filename>debian/<replaceable>package</replaceable></filename>.
1476    <footnote><para> For packages of the multiple binary type, the
1477  <command>dh_auto_install</command> command uses <filename>debian/tmp</filename>  <command>dh_auto_install</command> command uses <filename>debian/tmp</filename>
1478  as the temporary directory while the <command>dh_install</command> command with  as the temporary directory while the <command>dh_install</command> command with
1479  the help of  the help of
1480  <filename>debian/<replaceable>package-1</replaceable>.install</filename> and  <filename>debian/<replaceable>package-1</replaceable>.install</filename> and
1481  <filename>debian/<replaceable>package-2</replaceable>.install</filename> files  <filename>debian/<replaceable>package-2</replaceable>.install</filename> files
1482  will split contents of <filename>debian/tmp</filename> into  will split the contents of <filename>debian/tmp</filename> into
1483  <filename>debian/<replaceable>package-1</replaceable></filename> and  <filename>debian/<replaceable>package-1</replaceable></filename> and
1484  <filename>debian/<replaceable>package-2</replaceable></filename> temporary  <filename>debian/<replaceable>package-2</replaceable></filename> temporary
1485  directories to create multiple binary <filename>*.deb</filename> packages.  directories, to create
1486    <filename><replaceable>package-1</replaceable>_*.deb</filename> and
1487    <filename><replaceable>package-2</replaceable>_*.deb</filename> binary
1488    packages.
1489  </para> </footnote> Everything that is contained in the temporary directory  </para> </footnote> Everything that is contained in the temporary directory
1490  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
1491  difference is that <command>dpkg</command> will be installing the files in the  difference is that <command>dpkg</command> will be installing the
1492  root directory.  files to paths relative to the root directory rather than your working
1493    directory.
1494  </para>  </para>
1495  <para>  <para>
1496  Bear in mind that even though your program installs in  Bear in mind that even though your program installs in
1497  <filename>debian/<replaceable>package</replaceable></filename>, it still needs  <filename>debian/<replaceable>package</replaceable></filename>, it still needs
1498  to behave correctly when placed in the root directory, i.e.  when installed  to behave correctly when installed from the <filename>.deb</filename>
1499  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
1500  system to hardcode strings like  system to hardcode strings like
1501  <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>
1502  into the package file.  into files in the package.
1503  </para>  </para>
1504  <para>  <para>
1505  Here's the relevant part of <systemitem role="package">gentoo</systemitem>'s  Here's the relevant part of <systemitem role="package">gentoo</systemitem>'s
1506  <filename>Makefile</filename> file <footnote><para> This is just an example to  <filename>Makefile</filename><footnote><para> This is just an example to
1507  show how the <filename>Makefile</filename> file should look like.  If the  show what a <filename>Makefile</filename> should look like.  If the
1508  <filename>Makefile</filename> file is created by the  <filename>Makefile</filename> is created by the
1509  <command>./configure</command> command, the correct way to fix this kind of  <command>./configure</command> command, the correct way to fix this kind of
1510  <filename>Makefile</filename> is to executed the <command>./configure</command>  <filename>Makefile</filename> is to execute <command>./configure</command>
1511  command from the <command>dh_auto_configure</command> command with default  from the <command>dh_auto_configure</command> command with default
1512  options including <literal>--prefix=/usr</literal>.  </para> </footnote>:  options including <literal>--prefix=/usr</literal>.  </para> </footnote>:
1513  </para>  </para>
1514  <screen>  <screen>
1515  # Where to put binary on 'make install'?  # Where to put binary executables on 'make install'?
1516  BIN     = /usr/local/bin  BIN     = /usr/local/bin
1517  # Where to put icons on 'make install'?  # Where to put icons on 'make install'?
1518  ICONS   = /usr/local/share/gentoo  ICONS   = /usr/local/share/gentoo
1519  </screen>  </screen>
1520  <para>  <para>
1521  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>.
1522  Change those paths to:  As explained above, that directory hierarchy is reserved for local use on
1523    Debian, so change those paths to:
1524  </para>  </para>
1525  <screen>  <screen>
1526  # Where to put binary on 'make install'?  # Where to put binary executables on 'make install'?
1527  BIN     = $(DESTDIR)/usr/bin  BIN     = $(DESTDIR)/usr/bin
1528  # Where to put icons on 'make install'?  # Where to put icons on 'make install'?
1529  ICONS   = $(DESTDIR)/usr/share/gentoo  ICONS   = $(DESTDIR)/usr/share/gentoo
1530  </screen>  </screen>
1531  <para>  <para>
1532  But why in that directory, and not some other?  Because Debian packages never  The exact locations that should be used for binaries, icons,
1533  install files beneath <filename>/usr/local</filename> -- that tree is reserved  documentation, etc. are specified in the Filesystem Hierarchy Standard
1534  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
1535  <filename>/usr</filename> instead.  your package.
 </para>  
 <para>  
 The more exact locations for binaries, icons, documentation etc.  are specified  
 in the Filesystem Hierarchy Standard (see  
 <ulink url="&fhs;">FHS</ulink>).  I recommend you  
 browse it and read the sections that might concern your package.  
1536  </para>  </para>
1537  <para>  <para>
1538  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
1539  <filename>/usr/local/bin</filename>, the manual page in  <filename>/usr/local/bin</filename>, the manual page in
1540  <filename>/usr/share/man/man1</filename> instead of  <filename>/usr/share/man/man1</filename> instead of
1541  <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
1542  page mentioned in <systemitem role="package">gentoo</systemitem>'s  page mentioned in <systemitem role="package">gentoo</systemitem>'s
1543  <filename>Makefile</filename>, but since the Debian Policy requires that every  <filename>Makefile</filename>, but since Debian Policy requires that every
1544  program has one, we'll make one later and install it in  program has one, we'll make one later and install it in
1545  <filename>/usr/share/man/man1</filename>.  <filename>/usr/share/man/man1</filename>.
1546  </para>  </para>
# Line 1330  to fix them to use the right locations. Line 1551  to fix them to use the right locations.
1551  for?  You can find this out by issuing:  for?  You can find this out by issuing:
1552  </para>  </para>
1553  <screen>  <screen>
1554  $ grep -nr -e 'usr/local/lib' --include='*.[c|h]' .  $ grep -nr --include='*.[c|h]' -e 'usr/local/lib' .
1555  </screen>  </screen>
1556  <para>  <para>
1557  <command>grep</command> will run recursively through the source tree and tell  <command>grep</command> will run recursively through the source tree and tell
# Line 1341  Edit those files and in those lines repl Line 1562  Edit those files and in those lines repl
1562  with <literal>usr/lib</literal>.  This can be done automatically as follows:  with <literal>usr/lib</literal>.  This can be done automatically as follows:
1563  </para>  </para>
1564  <screen>  <screen>
1565  $ vim '+argdo %s/usr\/local\/lib/usr\/lib/gce|update' +q \  $ sed -i -e 's#usr/local/lib#usr/lib#g' \
1566        $(find . -type f -name '*.[c|h]')        $(find . -type f -name '*.[c|h]')
1567  </screen>  </screen>
1568  <para>  <para>
1569  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:
1570  </para>  </para>
1571    <screen>
1572    $ vim '+argdo %s#usr/local/lib#usr/lib#gce|update' +q \
1573          $(find . -type f -name '*.[c|h]')
1574    </screen>
1575    
1576  <para>  <para>
1577  After that you should find the install target (search for line that starts with  Next you should find the <literal>install</literal> target (searching
1578  <literal>install:</literal>, that will usually work) and rename all references  for the line that starts with <literal>install:</literal> will usually
1579  to directories other than ones defined at the top of the  work) and rename all references to directories other than ones defined
1580  <filename>Makefile</filename>.  at the top of the <filename>Makefile</filename>.
1581  </para>  </para>
1582  <para>  <para>
1583  Before your upstream bug fix, <systemitem role="package">gentoo</systemitem>'s  Originally, <systemitem role="package">gentoo</systemitem>'s
1584  install target said:  install target said:
1585  </para>  </para>
1586  <screen>  <screen>
# Line 1364  install: gentoo-target Line 1590  install: gentoo-target
1590          install gentoorc-example $(HOME)/.gentoorc          install gentoorc-example $(HOME)/.gentoorc
1591  </screen>  </screen>
1592  <para>  <para>
1593  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
1594  <filename>debian/patches/install.patch</filename>.  <filename>debian/patches/install.patch</filename>.
1595  </para>  </para>
1596  <screen>  <screen>
1597  $ quilt new install.patch  $ dquilt new install.patch
1598  $ quilt add Makefile  $ dquilt add Makefile
1599  </screen>  </screen>
1600  <para>  <para>
1601  Let's change this for Debian package as following using the editor:  In your editor, change this for the Debian package as follows:
1602  </para>  </para>
1603  <screen>  <screen>
1604  install: gentoo-target  install: gentoo-target
# Line 1382  install: gentoo-target Line 1608  install: gentoo-target
1608          install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc          install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc
1609  </screen>  </screen>
1610  <para>  <para>
1611  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
1612  before the other commands in the rule.  The original  before the other commands in the rule.  The original
1613  <filename>Makefile</filename> didn't have it because usually the  <filename>Makefile</filename> didn't have it because usually
1614  <literal>/usr/local/bin</literal> and other directories already exist on the  <literal>/usr/local/bin</literal> and other directories already exist on the
1615  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
1616  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
1617  create each and every one of those directories.  create each and every one of those directories.
1618  </para>  </para>
1619  <para>  <para>
# Line 1399  of additional documentation that the ups Line 1625  of additional documentation that the ups
1625          cp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html          cp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html
1626  </screen>  </screen>
1627  <para>  <para>
1628  After careful check, if everything is fine, ask <command>quilt</command> to  Check carefully, and if everything is okay, ask <command>dquilt</command> to
1629  refresh the patch to create <filename>debian/patches/install.patch</filename>  generate the patch to create <filename>debian/patches/install.patch</filename>
1630  and add its description.  and add its description.
1631  </para>  </para>
1632  <screen>  <screen>
1633  $ quilt refresh  $ dquilt refresh
1634  $ quilt header -e  $ dquilt header -e
1635  ... describe patch  ... describe patch
1636  </screen>  </screen>
1637  <para>  <para>
# Line 1428  Debian specific packaging modification: Line 1654  Debian specific packaging modification:
1654  Whenever you make changes that are not specifically related to Debian package  Whenever you make changes that are not specifically related to Debian package
1655  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
1656  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
1657  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
1658  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!
1659  make them portable.  This will make your fixes much easier to apply.  Make them portable.  This will make your fixes much easier to apply.
1660  </para>  </para>
1661  <para>  <para>
1662  Note that you don't have to send the <filename>debian/*</filename> files  Note that you don't have to send the <filename>debian/*</filename> files
# Line 1441  upstream. Line 1667  upstream.
1667  <para>  <para>
1668  There is one other common problem: libraries are often different from platform  There is one other common problem: libraries are often different from platform
1669  to platform.  For example, a <filename>Makefile</filename> can contain a  to platform.  For example, a <filename>Makefile</filename> can contain a
1670  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
1671  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
1672  purpose.  purpose.
1673  </para>  </para>
1674  <para>  <para>
1675  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
1676  <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>:  
1677  </para>  </para>
1678  <screen>  <screen>
1679  LIBS = -lcurses -lsomething -lsomethingelse  LIBS = -lfoo -lbar
1680  </screen>  </screen>
1681  <para>  <para>
1682  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
1683  <literal>curses</literal> into <literal>ncurses</literal>.  doesn't exist and its equivalent is provided by the <literal>foo2</literal>
1684    library on the Debian system, you can fix this build problem as
1685    <filename>debian/patches/foo2.patch</filename> by changing
1686    <literal>foo</literal> into <literal>foo2</literal>.<footnote><para>If there
1687    are API changes from the <literal>foo</literal> library to the
1688    <literal>foo2</literal> library, required changes to the source code need to be
1689    made to match the new API.</para> </footnote>
1690  </para>  </para>
1691  <screen>  <screen>
1692  $ quilt new ncurse.patch  $ dquilt new foo2.patch
1693  $ quilt add Makefile  $ dquilt add Makefile
1694  $ sed -i -e s/-lcurses/-lncurses/g Makefile  $ sed -i -e 's/-lfoo/-lfoo2/g' Makefile
1695  $ quilt refresh  $ dquilt refresh
1696  $ quilt header -e  $ dquilt header -e
1697  ... describe patch  ... describe patch
1698  </screen>  </screen>
1699  </section>  </section>
# Line 1478  that we should edit in order to customiz Line 1706  that we should edit in order to customiz
1706  most important of them are <filename>control</filename>,  most important of them are <filename>control</filename>,
1707  <filename>changelog</filename>, <filename>copyright</filename> and  <filename>changelog</filename>, <filename>copyright</filename> and
1708  <filename>rules</filename>, which are required for all packages.  <filename>rules</filename>, which are required for all packages.
1709    <footnote><para>
1710    In this chapter, files in the <filename>debian</filename> directory are
1711    referred without preceding <filename>debian/</filename> for simplicity whenever
1712    they are obvious.
1713    </para></footnote>
1714  </para>  </para>
1715  <section id="control"><title><filename>control</filename> file</title>  <section id="control"><title><filename>control</filename> file</title>
1716  <para>  <para>
# Line 1530  for administrator-only programs, <litera Line 1763  for administrator-only programs, <litera
1763  documentation, <literal>libs</literal> for libraries, <literal>mail</literal>  documentation, <literal>libs</literal> for libraries, <literal>mail</literal>
1764  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
1765  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,
1766  and many more.  See the <ulink url="&policy-subsections;">Debian  and many more.
1767  Policy Manual, 2.4 'Sections'</ulink> and <ulink url="&sections-unstable;">List of sections in 'sid'</ulink>  <footnote> <para>See
1768  for the guidance.  <ulink url="&policy-subsections;">Debian Policy Manual, 2.4 'Sections'</ulink> and
1769    <ulink url="&sections-unstable;">List of sections in <literal>sid</literal></ulink>.</para>
1770    </footnote>
1771  </para>  </para>
1772  <para>  <para>
1773  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
1774  we can omit it.)  we can omit it.)
1775  </para>  </para>
1776  <para>  <para>
1777  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.
1778  the <ulink url="&policy-priorities;">Debian  <footnote> <para>See
1779  Policy Manual, 2.5 'Priorities'</ulink> for the guidance.  <ulink url="&policy-priorities;">Debian Policy Manual, 2.5 'Priorities'</ulink>.
1780    </para>
1781    </footnote>
1782  </para>  </para>
1783  <itemizedlist>  <itemizedlist>
1784  <listitem>  <listitem>
# Line 1577  you.  Avoid using commas, ampersands and Line 1814  you.  Avoid using commas, ampersands and
1814  <para>  <para>
1815  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
1816  the <literal>Build-Depends</literal> field.  You can also have the  the <literal>Build-Depends</literal> field.  You can also have the
1817  <literal>Build-Depends-Indep</literal> field as an additional line, here (see  <literal>Build-Depends-Indep</literal> field as an additional line, here.
1818  the <ulink url="&policy-relationships;#s-sourcebinarydeps">Debian  <footnote><para>See <ulink url="&policy-relationships;#s-sourcebinarydeps">Debian
1819  Policy Manual, 7.7 'Relationships between source and binary packages -  Policy Manual, 7.7 'Relationships between source and binary packages -
1820  Build-Depends, Build-Depends-Indep, Build-Conflicts,  Build-Depends, Build-Depends-Indep, Build-Conflicts,
1821  Build-Conflicts-Indep'</ulink>).  Some packages like <systemitem role="package">gcc</systemitem> and <systemitem role="package">make</systemitem> which are required by the <systemitem role="package">build-essential</systemitem> package are implied.  If you need  Build-Conflicts-Indep'</ulink>.</para></footnote>  Some packages like
1822    <systemitem role="package">gcc</systemitem> and
1823    <systemitem role="package">make</systemitem> which are required by the
1824    <systemitem role="package">build-essential</systemitem> package are implied.  If you need
1825  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.
1826  Multiple entries are separated with commas; read on for the explanation of  Multiple entries are separated with commas; read on for the explanation of
1827  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.
1828  </para>  </para>
1829  <itemizedlist>  <itemizedlist>
1830  <listitem>  <listitem>
# Line 1600  satisfy the Debian Policy requirement fo Line 1840  satisfy the Debian Policy requirement fo
1840  For source packages which have some binary packages with <literal>Architecture:  For source packages which have some binary packages with <literal>Architecture:
1841  any</literal>, they are rebuild by the autobuilder.  Since this autobuilder  any</literal>, they are rebuild by the autobuilder.  Since this autobuilder
1842  procedure runs <literal>debian/rules build</literal> in it while installing  procedure runs <literal>debian/rules build</literal> in it while installing
1843  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
1844  list practically all the required packages and the  list practically all the required packages and the
1845  <literal>Build-Depends-indep</literal> is rarely used.  <literal>Build-Depends-indep</literal> is rarely used.
1846  </para>  </para>
# Line 1701  these relations; if not, it will be expl Line 1941  these relations; if not, it will be expl
1941  </citerefentry> etc.)  </citerefentry> etc.)
1942  </para>  </para>
1943  <para>  <para>
1944  Here is a simplified description of package relationships.  Here is a simplified description of package relationships.
1945  <footnote><para>See  <footnote><para>See
1946  <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>.
1947  </para></footnote>:  </para></footnote>
1948  </para>  </para>
1949  <itemizedlist>  <itemizedlist>
1950  <listitem>  <listitem>
# Line 1825  Replaces: quux (&lt;&lt; 5), quux-foo (& Line 2065  Replaces: quux (&lt;&lt; 5), quux-foo (&
2065  <para>  <para>
2066  The last feature you need to know about is  The last feature you need to know about is
2067  <literal>${shlibs:Depends}</literal>, <literal>${perl:Depends}</literal>,  <literal>${shlibs:Depends}</literal>, <literal>${perl:Depends}</literal>,
2068  <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.  
2069  </para>  </para>
2070  <para>  <para>
2071  <citerefentry> <refentrytitle>dh_shlibdeps</refentrytitle>  <citerefentry> <refentrytitle>dh_shlibdeps</refentrytitle>
2072  <manvolnum>1</manvolnum> </citerefentry> will scan it for binaries and  <manvolnum>1</manvolnum> </citerefentry> calculates shared library dependencies
2073  libraries determine their shared library dependencies and detect which packages  for binary packages.  It generates a list of ELF executables and shared
2074  they are in, such as <systemitem role="package">libc6</systemitem> or  libraries it has found for each binary package.  Such list is used for
2075  <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>.  
2076  </para>  </para>
2077  <para>  <para>
2078  The package list generated by <citerefentry>  <citerefentry> <refentrytitle>dh_perl</refentrytitle> <manvolnum>1</manvolnum>
2079  <refentrytitle>dh_perl</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>  </citerefentry> calculates Perl dependencies.  It generates a list of a
2080  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
2081    substituting <literal>${perl:Depends}</literal>.
2082  </para>  </para>
2083  <para>  <para>
2084  Some <systemitem role="package">debhelper</systemitem> commands may make the  Some <systemitem role="package">debhelper</systemitem> commands may make the
2085  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
2086  packages is used for substituting <literal>${misc:Depends}</literal>.  generate a list of required packages for each binary package.
2087    Such list is used for substituting <literal>${misc:Depends}</literal>.
2088    </para>
2089    <para>
2090    <citerefentry> <refentrytitle>dh_gencontrol</refentrytitle>
2091    <manvolnum>1</manvolnum> </citerefentry> generates
2092    <filename>DEBIAN/control</filename> for each binary package while
2093    substituting <literal>${shlibs:Depends}</literal>,
2094    <literal>${perl:Depends}</literal>, <literal>${misc:Depends}</literal>, etc.
2095  </para>  </para>
2096  <para>  <para>
2097  Having said all that, we can leave the <literal>Depends</literal> field exactly  Having said all that, we can leave the <literal>Depends</literal> field exactly
# Line 1874  English.  Translations of these descript Line 2118  English.  Translations of these descript
2118  <ulink url="&ddtp;">The Debian Description Translation Project - DDTP</ulink>.</para></footnote>  <ulink url="&ddtp;">The Debian Description Translation Project - DDTP</ulink>.</para></footnote>
2119  </para>  </para>
2120  <para>  <para>
2121  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
2122  Reference, 6.2.5.  'Version Control System location'</ulink> between line 6 and  System (VCS) location between line 6 and 7.
2123  7.  Let's assume that the <systemitem role="package">gentoo</systemitem>  <footnote><para>See
2124  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>.
2125    </para></footnote>
2126    Let's assume that the <systemitem role="package">gentoo</systemitem>
2127    package has its VCS located in Debian Alioth Git Service at
2128  <literal>git://git.debian.org/git/collab-maint/gentoo.git</literal>.  <literal>git://git.debian.org/git/collab-maint/gentoo.git</literal>.
2129  </para>  </para>
2130  <para>  <para>
# Line 1920  Finally, here is the updated <filename>c Line 2167  Finally, here is the updated <filename>c
2167  <section id="copyright"><title><filename>copyright</filename> file</title>  <section id="copyright"><title><filename>copyright</filename> file</title>
2168  <para>  <para>
2169  This file contains the information about package upstream resources, copyright  This file contains the information about package upstream resources, copyright
2170  and license information.  Its format is not dictated by the Debian Policy  and license information.
2171  Manual, but the content is (<ulink url="&policy-copyright;">Debian  <ulink url="&policy-copyright;">Debian Policy Manual, 12.5 'Copyright information'</ulink>
2172  Policy Manual, 12.5 'Copyright information'</ulink>).  You may also consult  dictates its content and
2173  <ulink url="&dep5;">DEP-5: Machine-parseable  <ulink url="&dep5;">DEP-5: Machine-parseable <filename>debian/copyright</filename></ulink>
2174  debian/copyright</ulink>.  provides guidelines for its format.
2175  </para>  </para>
2176  <para>  <para>
2177  <command>dh_make</command> can give you a template  <command>dh_make</command> can give you a template
# Line 1990  debian-devel-announce: <ulink url="&howt Line 2237  debian-devel-announce: <ulink url="&howt
2237  </section>  </section>
2238  <section id="changelog"><title><filename>changelog</filename> file</title>  <section id="changelog"><title><filename>changelog</filename> file</title>
2239  <para>  <para>
2240  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
2241  Policy Manual, 4.4 'debian/changelog'</ulink>.  This format is used by  <ulink url="&policy-dpkgchangelog;">Debian Policy Manual, 4.4 'debian/changelog'</ulink>.
2242  <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
2243  revision, distribution and urgency of your package.  version number, revision, distribution and urgency of your package.
2244  </para>  </para>
2245  <para>  <para>
2246  For you, it is also important, since it is good to have documented all changes  For you, it is also important, since it is good to have documented all changes
# Line 2055  You will end up with something like this Line 2302  You will end up with something like this
2302  </para>  </para>
2303  <para>  <para>
2304  You can read more about updating the <filename>changelog</filename> file later  You can read more about updating the <filename>changelog</filename> file later
2305  in <xref linkend="update"/> .  in <xref linkend="update"/>.
2306  </para>  </para>
2307  </section>  </section>
2308  <section id="rules"><title><filename>rules</filename> file</title>  <section id="rules"><title><filename>rules</filename> file</title>
# Line 2104  binary package under the <filename>debia Line 2351  binary package under the <filename>debia
2351  <literal>binary</literal> target: to create all binary packages (effectively  <literal>binary</literal> target: to create all binary packages (effectively
2352  combination of <literal>binary-arch</literal> and  combination of <literal>binary-arch</literal> and
2353  <literal>binary-indep</literal> targets).  (required)<footnote><para> This  <literal>binary-indep</literal> targets).  (required)<footnote><para> This
2354  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>
2355  </para>  </para>
2356  </listitem>  </listitem>
2357  <listitem>  <listitem>
# Line 2112  target is used by <literal>dpkg-buildpac Line 2359  target is used by <literal>dpkg-buildpac
2359  <literal>binary-arch</literal> target: to create arch-dependent  <literal>binary-arch</literal> target: to create arch-dependent
2360  (<literal>Architecture: any</literal>) binary packages in the parent directory.  (<literal>Architecture: any</literal>) binary packages in the parent directory.
2361  (required)<footnote><para> This target is used by <literal>dpkg-buildpackage  (required)<footnote><para> This target is used by <literal>dpkg-buildpackage
2362  -B</literal> as in <xref linkend="autobuilder"/> .  </para> </footnote>  -B</literal> as in <xref linkend="autobuilder"/>.  </para> </footnote>
2363  </para>  </para>
2364  </listitem>  </listitem>
2365  <listitem>  <listitem>
# Line 2177  It tells the operating system that this Line 2424  It tells the operating system that this
2424  <filename>/usr/bin/make</filename>.  <filename>/usr/bin/make</filename>.
2425  </para>  </para>
2426  <para>  <para>
2427  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.
2428  Then, the <command>dh</command> command will output which  Then, the <command>dh</command> command will output which
2429  <command>dh_*</command> commands are executed by the <command>dh</command>  <command>dh_*</command> commands are executed by the <command>dh</command>
2430  command.  You can also add <literal>export DH_OPTIONS=-v</literal> line here.  command.  You can also add <literal>export DH_OPTIONS=-v</literal> line here.
# Line 2199  complicated <filename>rules</filename> f Line 2446  complicated <filename>rules</filename> f
2446  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
2447  when it was initially packaged.  This new <command>dh</command> command is  when it was initially packaged.  This new <command>dh</command> command is
2448  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
2449  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
2450  package building process like the <systemitem role="package">cdbs</systemitem>  package building process like the <systemitem role="package">cdbs</systemitem>
2451  package.  </para> </footnote> The <command>dh</command> command is a wrapper  package.  </para> </footnote> The <command>dh</command> command is a wrapper
2452  script which runs appropriate sequences of <command>dh_*</command> programs  script which runs appropriate sequences of <command>dh_*</command> programs
# Line 2613  This installs <command>bash</command> co Line 2860  This installs <command>bash</command> co
2860  </listitem>  </listitem>
2861  </itemizedlist>  </itemizedlist>
2862  <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>  
2863  Many <command>dh_*</command> commands invoked by the new <command>dh</command>  Many <command>dh_*</command> commands invoked by the new <command>dh</command>
2864  command can be customized by the corresponding configuration files in the  command can be customized by the corresponding configuration files in the
2865  <filename>debian</filename> directory.  See <xref linkend="dother"/> and the  <filename>debian</filename> directory.  See <xref linkend="dother"/> and the
# Line 2644  corner cases.  Use of simplified equival Line 2886  corner cases.  Use of simplified equival
2886  kill such <systemitem role="package">debhelper</systemitem>'s smart features.  kill such <systemitem role="package">debhelper</systemitem>'s smart features.
2887  </para>  </para>
2888  <para>  <para>
2889  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
2890  <filename>/etc/gentoo</filename> directory instead of the usual  <filename>/etc/gentoo</filename> directory instead of the usual
2891  <filename>/etc</filename> directory, you can override the default  <filename>/etc</filename> directory for the recent
2892    <systemitem role="package">gentoo</systemitem> package using Autotools, you can override the default
2893  <literal>--sysconfig=/etc</literal> argument given by the  <literal>--sysconfig=/etc</literal> argument given by the
2894  <command>dh_auto_configure</command> command to the  <command>dh_auto_configure</command> command to the
2895  <command>./configure</command> command by the following.  <footnote><para> The  <command>./configure</command> command by the following.
 <systemitem role="package">gentoo</systemitem> package uses the <ulink url="&gnu-build-system;">GNU build  
 system</ulink>, also known as the Autotools.  
 </para> </footnote>  
2896  </para>  </para>
2897  <screen>  <screen>
2898  override_dh_auto_configure:  override_dh_auto_configure:
# Line 2744  filenames suffixed by <literal>.ex</lite Line 2984  filenames suffixed by <literal>.ex</lite
2984  prefixed by the binary package name such as  prefixed by the binary package name such as
2985  <literal><replaceable>package</replaceable></literal>.  Take a look at all of  <literal><replaceable>package</replaceable></literal>.  Take a look at all of
2986  them.  them.
2987    <footnote><para>
2988    In this chapter, files in the <filename>debian</filename> directory are
2989    referred without preceding <filename>debian/</filename> for simplicity whenever
2990    they are obvious.
2991    </para></footnote>
2992  </para>  </para>
2993  <para>  <para>
2994  The <command>dh_make</command> command may not create some template  The <command>dh_make</command> command may not create some template
# Line 2778  remove template files which you do not n Line 3023  remove template files which you do not n
3023  </listitem>  </listitem>
3024  <listitem>  <listitem>
3025  <para>  <para>
3026  modify the <filename>control</filename> file (see <xref linkend="control"/> ),  modify the <filename>control</filename> file (see <xref linkend="control"/>),
3027  if necessary.  if necessary.
3028  </para>  </para>
3029  </listitem>  </listitem>
3030  <listitem>  <listitem>
3031  <para>  <para>
3032  modify the <filename>rules</filename> file (see <xref linkend="rules"/> ), if  modify the <filename>rules</filename> file (see <xref linkend="rules"/>), if
3033  necessary.  necessary.
3034  </para>  </para>
3035  </listitem>  </listitem>
# Line 2875  the <filename>/etc</filename> directory. Line 3120  the <filename>/etc</filename> directory.
3120  </listitem>  </listitem>
3121  </itemizedlist>  </itemizedlist>
3122  <para>  <para>
3123  For more information on the <emphasis>maintainer scripts</emphasis>, see <xref linkend="maintscripts"/> .  For more information on the <emphasis>maintainer scripts</emphasis>, see <xref linkend="maintscripts"/>.
3124  </para>  </para>
3125  </section>  </section>
3126  <section id="crond"><title><filename><replaceable>package</replaceable>.cron.*</filename> files</title>  <section id="crond"><title><filename><replaceable>package</replaceable>.cron.*</filename> files</title>
# Line 2944  means there is a problem with the <filen Line 3189  means there is a problem with the <filen
3189  </para>  </para>
3190  <para>  <para>
3191  Files listed in the <filename>install</filename> file doesn't need the  Files listed in the <filename>install</filename> file doesn't need the
3192  directories created first.  See <xref linkend="install"/> .  directories created first.  See <xref linkend="install"/>.
3193  </para>  </para>
3194  <para>  <para>
3195  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
3196  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
3197  the <filename>dirs</filename> file.  the <filename>dirs</filename> file.
3198  </para>  </para>
# Line 2987  For information on the file format, see Line 3232  For information on the file format, see
3232  manual, in <ulink url="&doc-base;">Debian doc-base Manual</ulink>.  manual, in <ulink url="&doc-base;">Debian doc-base Manual</ulink>.
3233  </para>  </para>
3234  <para>  <para>
3235  For more details on installing additional documentation, look in <xref linkend="destdir"/> .  For more details on installing additional documentation, look in <xref linkend="destdir"/>.
3236  </para>  </para>
3237  </section>  </section>
3238  <section id="docs"><title><filename>docs</filename> file</title>  <section id="docs"><title><filename>docs</filename> file</title>
# Line 3045  obviously disregarded my initial recomme Line 3290  obviously disregarded my initial recomme
3290  <para>  <para>
3291  The <filename><replaceable>package</replaceable>.init</filename> file is  The <filename><replaceable>package</replaceable>.init</filename> file is
3292  installed as the  installed as the
3293  <filename>/etc/init.d/<replaceable>package</replaceable></filename> script.  <filename>/etc/init.d/<replaceable>package</replaceable></filename> script
3294    for the <emphasis>init script</emphasis> which starts and stops a daemon.
3295  Its fairly generic skeleton template is provided by the  Its fairly generic skeleton template is provided by the
3296  <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
3297  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
3298  Filesystem Hierarchy Standard (see <ulink url="&fhs;">FHS</ulink>) compliant headers.  It  <ulink url="&lsb;">Linux Standard Base</ulink> (LSB) compliant headers.  It
3299  gets installed into the temporary directory by <citerefentry>  gets installed into the temporary directory by <citerefentry>
3300  <refentrytitle>dh_installinit</refentrytitle> <manvolnum>1</manvolnum>  <refentrytitle>dh_installinit</refentrytitle> <manvolnum>1</manvolnum>
3301  </citerefentry>.  </citerefentry>.
# Line 3058  gets installed into the temporary direct Line 3304  gets installed into the temporary direct
3304  The <filename><replaceable>package</replaceable>.default</filename> file will  The <filename><replaceable>package</replaceable>.default</filename> file will
3305  be installed into  be installed into
3306  <filename>/etc/default/<replaceable>package</replaceable></filename>.  This  <filename>/etc/default/<replaceable>package</replaceable></filename>.  This
3307  file sets defaults that are sourced by the init script.  Most times this  file sets defaults that are sourced by the <emphasis>init script</emphasis>.  Most times this
3308  default file is used to disable running a daemon, set some default flags or  <filename><replaceable>package</replaceable>.default</filename> file is used to disable running a daemon, set some default flags or
3309  timeouts.  If your init script has certain <emphasis>settable</emphasis>  timeouts.  If your <emphasis>init script</emphasis> has certain <emphasis>settable</emphasis>
3310  features you want to install these into the default file, not the init script.  features you want to install these into the <filename><replaceable>package</replaceable>.default</filename> file, not the <emphasis>init script</emphasis>.
3311  </para>  </para>
3312  <para>  <para>
3313  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 <emphasis>init script</emphasis>, you can either use it or not.  If you
3314  don't use their init.d script then create a new one in  don't use their <emphasis>init script</emphasis> then create a new one in
3315  <filename>debian/<replaceable>package</replaceable>.init</filename>.  However  <filename><replaceable>package</replaceable>.init</filename>.  However
3316  if the upstream init script looks fine and installs in the right place you  if the upstream <emphasis>init script</emphasis> looks fine and installs in the right place you
3317  still need to setup the <filename>rc*</filename> symlinks.  To do this you will  still need to setup the <filename>rc*</filename> symlinks.  To do this you will
3318  need to override <command>dh_installinit</command> in the  need to override <command>dh_installinit</command> in the
3319  <filename>rules</filename> file with the following lines:  <filename>rules</filename> file with the following lines:
# Line 3097  the <filename>docs</filename> file and n Line 3343  the <filename>docs</filename> file and n
3343  This <filename>install</filename> file has one line per file installed, with  This <filename>install</filename> file has one line per file installed, with
3344  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
3345  the installation directory (relative to the install directory).  One example of  the installation directory (relative to the install directory).  One example of
3346  where this is used is where a binary is forgotten to be installed, the  this is when a binary executable is forgotten to be installed, the
3347  <filename>install</filename> file would look like:  <filename>install</filename> file would look like:
3348  </para>  </para>
3349  <screen>  <screen>
3350  src/foo/mybin usr/bin  src/foo/mybin usr/bin
3351  </screen>  </screen>
3352  <para>  <para>
3353  This will mean when this package is installed, there will be a binary file  This will mean when this package is installed, there will be a binary executable
3354  <filename>/usr/bin/mybin</filename>.  <filename>/usr/bin/mybin</filename>.
3355  </para>  </para>
3356  <para>  <para>
# Line 3186  list of manual page sections: Line 3432  list of manual page sections:
3432      <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>
3433      <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>
3434      <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>
3435      <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>
3436      <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>
3437      <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>
3438      <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>
3439      <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>
3440      <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>
3441    </tbody>    </tbody>
# Line 3302  If your package has manual pages, you sh Line 3548  If your package has manual pages, you sh
3548  </para>  </para>
3549  <para>  <para>
3550  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> for the <systemitem role="package">gentoo</systemitem> package as its manpage, you create a
3551  <filename>gentoo.manpages</filename> file as:  <filename>gentoo.manpages</filename> file as the following.
3552  </para>  </para>
3553  <screen>  <screen>
3554  docs/gentoo.1  docs/gentoo.1
# Line 3316  the system will be created for them. Line 3562  the system will be created for them.
3562  </para>  </para>
3563  <para>  <para>
3564  Here's the default <filename>menu.ex</filename> file that  Here's the default <filename>menu.ex</filename> file that
3565  <command>dh_make</command> created:  <command>dh_make</command> created.
3566  </para>  </para>
3567  <screen>  <screen>
3568  ?package(gentoo):needs=X11|text|vc|wm \  ?package(gentoo):needs=X11|text|vc|wm \
# Line 3329  specifies what kind of interface the pro Line 3575  specifies what kind of interface the pro
3575  listed alternatives, e.g.  <literal>text</literal> or <literal>X11</literal>.  listed alternatives, e.g.  <literal>text</literal> or <literal>X11</literal>.
3576  </para>  </para>
3577  <para>  <para>
3578  The next is <literal>section</literal>, where the menu and submenu the entry  The next is <literal>section</literal>, where the menu and submenu entry
3579  should appear in.  The current list of sections <footnote><para> There were a  should appear in.
3580  major reorganization of menu structure for <literal>squeeze</literal>.  </para>  <footnote><para> The current list of sections is at
3581  </footnote> is at <ulink url="&menu-structure;">The Debian Menu sub-policy 2.1 'Preferred menu structure'</ulink>.  <ulink url="&menu-structure;">The Debian Menu sub-policy 2.1 'Preferred menu structure'</ulink>.
3582    There were a major reorganization of menu structure for <literal>squeeze</literal>.
3583    </para> </footnote>
3584  </para>  </para>
3585  <para>  <para>
3586  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 3448  Normally with this <filename>watch</file Line 3696  Normally with this <filename>watch</file
3696  <literal>&sf-net;/gentoo</literal> is downloaded and searched for links of  <literal>&sf-net;/gentoo</literal> is downloaded and searched for links of
3697  the form <literal>&lt;a href=...&gt;</literal>.  The base name (just the part  the form <literal>&lt;a href=...&gt;</literal>.  The base name (just the part
3698  after the final <literal>/</literal>) of these linked URLs are matched against  after the final <literal>/</literal>) of these linked URLs are matched against
3699  Perl regexp (see <citerefentry> <refentrytitle>perlre</refentrytitle>  Perl regular expression (see <citerefentry> <refentrytitle>perlre</refentrytitle>
3700  <manvolnum>1</manvolnum> </citerefentry>) pattern  <manvolnum>1</manvolnum> </citerefentry>) pattern
3701  <literal>gentoo-(.+)\.tar\.gz</literal>.  Out of matched files, the file with  <literal>gentoo-(.+)\.tar\.gz</literal>.  Out of matched files, the file with
3702  the greatest version number is downloaded and the <command>uupdate</command>  the greatest version number is downloaded and the <command>uupdate</command>
# Line 3456  program is run to create the updated sou Line 3704  program is run to create the updated sou
3704  </para>  </para>
3705  <para>  <para>
3706  Although this is true for other sites, the SourceForge download service at  Although this is true for other sites, the SourceForge download service at
3707  <ulink url="&sf-net;">&sf-net;</ulink> is an exception.  When the  <ulink url="&sf-net;"/> is an exception.  When the
3708  <filename>watch</filename> file has an URL matching with the Perl regexp  <filename>watch</filename> file has an URL matching with the Perl regexp
3709  <literal>^http://sf\.net/</literal>, the <command>uscan</command> program  <literal>^http://sf\.net/</literal>, the <command>uscan</command> program
3710  substitutes it with <literal>&qa-do;watch/sf.php/</literal> and  substitutes it with <literal>&qa-do;watch/sf.php/</literal> and
# Line 3498  summary information concerning the switc Line 3746  summary information concerning the switc
3746  <filename>debian.tar.gz</filename> archive containing all files under the  <filename>debian.tar.gz</filename> archive containing all files under the
3747  <filename>debian</filename> directory.  This new format supports inclusion of  <filename>debian</filename> directory.  This new format supports inclusion of
3748  binary files such as PNG icons by the package maintainer without requiring  binary files such as PNG icons by the package maintainer without requiring
3749  tricks.  <footnote><para> Actually, this new format also supports multiple  tricks.  <footnote><para>Actually, this new format also supports multiple
3750  upstream tarballs and more compression methods.  These are beyond the scope of  upstream tarballs and more compression methods.  These are beyond the scope of
3751  this document.  </para> </footnote>  this document.</para> </footnote>
3752  </para>  </para>
3753  <para>  <para>
3754  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 3520  Debian packaging to ease merging of the Line 3768  Debian packaging to ease merging of the
3768  </para>  </para>
3769  <para>  <para>
3770  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
3771  unpatch it manually by running <literal>quilt pop -a</literal> before  unpatch it manually by running <literal>dquilt pop -a</literal> before
3772  committing to the <literal>master</literal> branch.  You can automate this by  committing to the <literal>master</literal> branch.  You can automate this by
3773  adding the optional <filename>debian/source/local-options</filename> file  adding the optional <filename>debian/source/local-options</filename> file
3774  containing <literal>unapply-patches</literal>.  This file is not included in  containing <literal>unapply-patches</literal>.  This file is not included in
# Line 3542  such as <command>dh_autoreconf</command> Line 3790  such as <command>dh_autoreconf</command>
3790  <xref linkend="customrules"/>.  <xref linkend="customrules"/>.
3791  </para>  </para>
3792  <para>  <para>
3793  You can provide a Perl regular expression argument to the  You can provide a Perl regular expression to the
3794  <literal>--extend-diff-ignore</literal> option of <citerefentry>  <literal>--extend-diff-ignore</literal> option argument of <citerefentry>
3795  <refentrytitle>dpkg-source</refentrytitle><manvolnum>1</manvolnum>  <refentrytitle>dpkg-source</refentrytitle><manvolnum>1</manvolnum>
3796  </citerefentry> to ignore changes made to the autogenerated files while  </citerefentry> to ignore changes made to the autogenerated files while
3797  creating the source package.  creating the source package.
# Line 3552  creating the source package. Line 3800  creating the source package.
3800  You can store such <command>dpkg-source</command> option argument in the  You can store such <command>dpkg-source</command> option argument in the
3801  <filename>source/options</filename> file of the source package as the generic  <filename>source/options</filename> file of the source package as the generic
3802  solution to address this problem of the autogenerated files.  The following  solution to address this problem of the autogenerated files.  The following
3803  will skip creating patch files for <filename>config.sub</filename>  will skip creating patch files for <filename>config.sub</filename>,
3804  <filename>config.guess</filename> and <filename>Makefile</filename>.  <filename>config.guess</filename> and <filename>Makefile</filename>.
3805  </para>  </para>
3806  <screen>  <screen>
# Line 3597  documentation of your changes are very i Line 3845  documentation of your changes are very i
3845  by your sponsor.  </para> </footnote>  by your sponsor.  </para> </footnote>
3846  </para>  </para>
3847  <para>  <para>
3848  For <xref linkend="modify"/> , we created 3 patches in  For <xref linkend="modify"/>, we created 3 patches in
3849  <filename>debian/patches</filename>.  <filename>debian/patches</filename>.
3850  </para>  </para>
3851  <para>  <para>
3852  Since Debian patches are located in <filename>debian/patches</filename>, please  Since Debian patches are located in <filename>debian/patches</filename>, please
3853  make sure to setup the <command>quilt</command> command properly as described  make sure to setup the <command>dquilt</command> command properly as described
3854  in <xref linkend="quiltrc"/> .  in <xref linkend="quiltrc"/>.
3855  </para>  </para>
3856  <para>  <para>
3857  When someone (including yourself) provides you with a patch  When someone (including yourself) provides you with a patch
# Line 3614  quite simple: Line 3862  quite simple:
3862  <screen>  <screen>
3863  $ dpkg-source -x gentoo_0.9.12.dsc  $ dpkg-source -x gentoo_0.9.12.dsc
3864  $ cd gentoo-0.9.12  $ cd gentoo-0.9.12
3865  $ quilt import ../<replaceable>foo</replaceable>.patch  $ dquilt import ../<replaceable>foo</replaceable>.patch
3866  $ quilt push  $ dquilt push
3867  $ quilt refresh  $ dquilt refresh
3868  $ quilt header -e  $ dquilt header -e
3869  ... describe patch  ... describe patch
3870  </screen>  </screen>
3871  <para>  <para>
3872  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
3873  must be <emphasis>fuzz</emphasis> free.  You should ensure it as <literal>quilt  must be <emphasis>fuzz</emphasis> free.  You should ensure it as <literal>dquilt
3874  pop -a; while quilt push; do quilt refresh; done</literal>.  pop -a; while dquilt push; do dquilt refresh; done</literal>.
3875  </para>  </para>
3876  </section>  </section>
3877  </chapter>  </chapter>
# Line 3644  the <systemitem role="package">build-ess Line 3892  the <systemitem role="package">build-ess
3892  </listitem>  </listitem>
3893  <listitem>  <listitem>
3894  <para>  <para>
3895  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
3896  </para>  </para>
3897  </listitem>  </listitem>
3898  <listitem>  <listitem>
3899  <para>  <para>
3900  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"/>).
3901  </para>  </para>
3902  </listitem>  </listitem>
3903  </itemizedlist>  </itemizedlist>
# Line 3700  create and sign the upload <filename>.ch Line 3948  create and sign the upload <filename>.ch
3948  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,
3949  twice.  twice.
3950  <footnote><para>  <footnote><para>
3951  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
3952  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
3953  archives.  See  keyring</ulink>.  This enables your uploaded packages to be accepted to the
3954    Debian archives.  See
3955  <ulink url="&keycreate;">Creating a new GPG key</ulink> and  <ulink url="&keycreate;">Creating a new GPG key</ulink> and
3956  <ulink url="&keysigning; ">Debian Wiki on Keysigning</ulink>.  <ulink url="&keysigning; ">Debian Wiki on Keysigning</ulink>.
3957  </para></footnote>  </para></footnote>
# Line 3751  copy the three files somewhere else and Line 4000  copy the three files somewhere else and
4000  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
4001  <command>quilt</command> patches in the <literal>3.0 (quilt)</literal> source  <command>quilt</command> patches in the <literal>3.0 (quilt)</literal> source
4002  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>
4003  option.  Alternatively, you can run <literal>quilt pop -a</literal> after  option.  Alternatively, you can run <literal>dquilt pop -a</literal> after
4004  normal operation.  </para> </footnote>  normal operation.  </para> </footnote>
4005  </para>  </para>
4006  </listitem>  </listitem>
# Line 3819  the <systemitem role="package">build-ess Line 4068  the <systemitem role="package">build-ess
4068  </listitem>  </listitem>
4069  <listitem>  <listitem>
4070  <para>  <para>
4071  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"/>).
4072  </para>  </para>
4073  </listitem>  </listitem>
4074  </itemizedlist>  </itemizedlist>
# Line 3867  This is why you see your package for oth Line 4116  This is why you see your package for oth
4116  </para>  </para>
4117  <para>  <para>
4118  Although packages listed in the <literal>Build-Depends-indep</literal> field  Although packages listed in the <literal>Build-Depends-indep</literal> field
4119  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 the normal packaging by us (see <xref linkend="completebuild"/>), they are not required to be installed for the
4120  autobuilder system since it build only architecture dependent binary packages.  autobuilder system since it build only architecture dependent binary packages.
4121  <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>
4122  environment under the <systemitem role="package">sbuild</systemitem> package  environment under the <systemitem role="package">sbuild</systemitem> package
# Line 3876  many packages installed.  </para> </foot Line 4125  many packages installed.  </para> </foot
4125  packaging and autobuilder situation dictates whether you record such required  packaging and autobuilder situation dictates whether you record such required
4126  packages in the <literal>Build-Depends</literal> or  packages in the <literal>Build-Depends</literal> or
4127  <literal>Build-Depends-indep</literal> fields of the  <literal>Build-Depends-indep</literal> fields of the
4128  <filename>debian/control</filename> file (see <xref linkend="control"/> ).  <filename>debian/control</filename> file (see <xref linkend="control"/>).
4129  </para>  </para>
4130  </section>  </section>
4131  <section id="option-sa"><title>Including <filename>orig.tar.gz</filename> for upload</title>  <section id="option-sa"><title>Including <filename>orig.tar.gz</filename> for upload</title>
# Line 3940  For a clean room (<command>chroot</comma Line 4189  For a clean room (<command>chroot</comma
4189  build dependencies, the <systemitem role="package">pbuilder</systemitem>  build dependencies, the <systemitem role="package">pbuilder</systemitem>
4190  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 role="package">pbuilder</systemitem> package is still evolving, you have to
4191  check the actual configuration situation by consulting the latest official  check the actual configuration situation by consulting the latest official
4192  documentation.  </para> </footnote> This ensures a clean build from the source  documentation.</para> </footnote> This ensures a clean build from the source
4193  under the <literal>sid</literal> auto-builder for different architectures and  under the <literal>sid</literal> auto-builder for different architectures and
4194  avoids the severity serious FTBFS (Fails To Build From Source) bug which is  avoids the severity serious FTBFS (Fails To Build From Source) bug which is
4195  always in the RC (release critical) category.  See <ulink url="&buildd-do;"/> for more on the Debian  always in the RC (release critical) category.
4196  package <systemitem role="package">auto-builder</systemitem>.  <footnote><para>See <ulink url="&buildd-do;"/> for more on the
4197    auto-builder of the Debian package.</para></footnote>
4198  </para>  </para>
4199  <para>  <para>
4200  Let's customize the <systemitem role="package">pbuilder</systemitem> package by  Let's customize the <systemitem role="package">pbuilder</systemitem> package by
# Line 4085  See <ulink url="&pbuilder;"/>, Line 4335  See <ulink url="&pbuilder;"/>,
4335  </section>  </section>
4336  <section id="git-buildpackage"><title><command>git-buildpackage</command> command and similars</title>  <section id="git-buildpackage"><title><command>git-buildpackage</command> command and similars</title>
4337  <para>  <para>
4338  If your upstream uses the source code management system (<ulink url="&debref-vcs;">VCS</ulink>)  If your upstream uses the source code management system (VCS)
4339    <footnote><para>See <ulink url="&debref-vcs;">Version control systems</ulink> for more.</para></footnote>
4340  to maintain their code, you should consider to use them.  That makes merging  to maintain their code, you should consider to use them.  That makes merging
4341  and cherry-picking upstream patches much easier.  There are several specialized  and cherry-picking upstream patches much easier.  There are several specialized
4342  wrapper script packages for the Debian package building for each VCS.  wrapper script packages for the Debian package building for each VCS.
# Line 4099  Debian packages in Git repositories. Line 4350  Debian packages in Git repositories.
4350  </listitem>  </listitem>
4351  <listitem>  <listitem>
4352  <para>  <para>
 <systemitem role="package">topgit</systemitem>: a Git patch queue manager  
 </para>  
 </listitem>  
 <listitem>  
 <para>  
4353  <systemitem role="package">svn-buildpackage</systemitem>: helper programs to  <systemitem role="package">svn-buildpackage</systemitem>: helper programs to
4354  maintain Debian packages with Subversion.  maintain Debian packages with Subversion.
4355  </para>  </para>
# Line 4116  package scripts for CVS source trees. Line 4362  package scripts for CVS source trees.
4362  </listitem>  </listitem>
4363  </itemizedlist>  </itemizedlist>
4364  <para>  <para>
4365  These packages offer more elegant working environment than manual use of the  There are packages which <emphasis>automate</emphasis> building of packages
4366  <command>quilt</command> commands for advanced audiences to  under VCS managed source tree for advanced audiences.  I will not explain them
4367  <emphasis>automate</emphasis> building of packages.  I will not explain them in  in this tutorial.
 this tutorial.  
4368  <footnote><para> Here are few web resources available for advanced audiences.  </para>  <footnote><para> Here are few web resources available for advanced audiences.  </para>
4369  <itemizedlist>  <itemizedlist>
4370  <listitem> <para> <ulink url="&git-buildpackage-doc;">Building Debian Packages with git-buildpackage</ulink> </para> </listitem>  <listitem> <para> <ulink url="&git-buildpackage-doc;">Building Debian Packages with git-buildpackage</ulink> </para> </listitem>
4371  <listitem> <para> <ulink url="&debian-packages-git;">debian packages in git</ulink> </para> </listitem>  <listitem> <para> <ulink url="&debian-packages-git;">debian packages in git</ulink> </para> </listitem>
4372  <listitem> <para> <ulink url="&git-debian-packaging;">Using Git for Debian Packaging</ulink> </para> </listitem>  <listitem> <para> <ulink url="&git-debian-packaging;">Using Git for Debian Packaging</ulink> </para> </listitem>
4373    <listitem> <para> <ulink url="&git-dpm;">git-dpm: Debian packages in Git manager</ulink> </para> </listitem>
4374  <listitem> <para> <ulink url="&topgit;">Using TopGit to generate quilt series for Debian packaging</ulink> </para> </listitem>  <listitem> <para> <ulink url="&topgit;">Using TopGit to generate quilt series for Debian packaging</ulink> </para> </listitem>
4375  <listitem> <para> <ulink url="&git-dpm;">git-dpm: Debian packages in Git manager</ulink> </para> </listitem> </itemizedlist>  </itemizedlist>
4376  </footnote>  </footnote>
4377  </para>  </para>
4378  </section>  </section>
# Line 4194  All <emphasis>maintainer scripts</emphas Line 4440  All <emphasis>maintainer scripts</emphas
4440  <filename>preinst</filename>, <filename>prerm</filename>,  <filename>preinst</filename>, <filename>prerm</filename>,
4441  <filename>postinst</filename>, and <filename>postrm</filename> files, are  <filename>postinst</filename>, and <filename>postrm</filename> files, are
4442  non-trivial unless they are auto-generated by the <systemitem role="package">debhelper</systemitem> programs.  So do not use them if you are  non-trivial unless they are auto-generated by the <systemitem role="package">debhelper</systemitem> programs.  So do not use them if you are
4443  a novice maintainer (see <xref linkend="maintscripts"/> ).  a novice maintainer (see <xref linkend="maintscripts"/>).
4444  </para>  </para>
4445  <para>  <para>
4446  If the package makes use of these non-trivial <emphasis>maintainer  If the package makes use of these non-trivial <emphasis>maintainer
# Line 4275  file.  The <command>lintian</command> co Line 4521  file.  The <command>lintian</command> co
4521  for many common packaging errors.  <footnote><para> You do not need to provide  for many common packaging errors.  <footnote><para> You do not need to provide
4522  the <command>lintian</command> option <literal>-i -I --show-overrides</literal>  the <command>lintian</command> option <literal>-i -I --show-overrides</literal>
4523  if you customized <filename>/etc/devscripts.conf</filename> or  if you customized <filename>/etc/devscripts.conf</filename> or
4524  <filename>~/.devscripts</filename> as described in <xref linkend="debuild"/> .  <filename>~/.devscripts</filename> as described in <xref linkend="debuild"/>.
4525  </para> </footnote>  </para> </footnote>
4526  </para>  </para>
4527  <screen>  <screen>
# Line 4319  error. Line 4565  error.
4565  <para>  <para>
4566  For warnings, tune the package to avoid them or verify that the warnings are  For warnings, tune the package to avoid them or verify that the warnings are
4567  spurious.  If spurious, set the <filename>lintian-overrides</filename> files as  spurious.  If spurious, set the <filename>lintian-overrides</filename> files as
4568  described in <xref linkend="lintian"/> .  described in <xref linkend="lintian"/>.
4569  </para>  </para>
4570  <para>  <para>
4571  Note that you can build the package with <command>dpkg-buildpackage</command>  Note that you can build the package with <command>dpkg-buildpackage</command>
# Line 4397  your <filename>rules</filename> file to Line 4643  your <filename>rules</filename> file to
4643  </chapter>  </chapter>
4644  <chapter id="upload"><title>Uploading the package</title>  <chapter id="upload"><title>Uploading the package</title>
4645  <para>  <para>
4646  Now that you have tested your new package thoroughly, you will be technically  Now that you have tested your new package thoroughly, you want to release it to
4647  ready to start the Debian new maintainer application process, as described at  a public archive to share it.
 <ulink url="&nm-join;"/>  
4648  </para>  </para>
4649  <section id="upload-debian"><title>Uploading to the Debian archive</title>  <section id="upload-debian"><title>Uploading to the Debian archive</title>
4650  <para>  <para>
4651  Once you become an official developer, you'll need to upload the package to the  Once you become an official developer,
4652  Debian archive.  You can do this manually, but it's easier to use the provided  <footnote><para>
4653    See <xref linkend="socialdynamism"/>.
4654    </para></footnote>
4655    you can upload the package to the Debian archive.
4656    <footnote><para>
4657    There are publicly accessible archives such as <ulink url="&mentors-dn;"/>
4658    which work almost the same way as Debian archive and provide upload area for
4659    the non-DD.  You can set up an equivalent archive by yourself using tools
4660    listed at <ulink url="&deb-archive;"/>.  So this section is useful for the
4661    non-DD, too.
4662    </para></footnote>
4663    You can do this manually, but it's easier to use the existing
4664  automated tools, like <citerefentry> <refentrytitle>dupload</refentrytitle>  automated tools, like <citerefentry> <refentrytitle>dupload</refentrytitle>
4665  <manvolnum>1</manvolnum> </citerefentry> or <citerefentry>  <manvolnum>1</manvolnum> </citerefentry> or <citerefentry>
4666  <refentrytitle>dput</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.  <refentrytitle>dput</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.
# Line 4430  these options means. Line 4686  these options means.
4686  The <literal>$default_host</literal> option determines which of the upload  The <literal>$default_host</literal> option determines which of the upload
4687  queues will be used by default.  <literal>anonymous-ftp-master</literal> is the  queues will be used by default.  <literal>anonymous-ftp-master</literal> is the
4688  primary one, but it's possible that you will want to use another one.  primary one, but it's possible that you will want to use another one.
4689  <footnote><para>See <ulink url="&devref-upload;">Debian Developer's Reference 5.6. 'Uploading a package'</ulink>.</para></footnote>  <footnote><para>See <ulink url="&devref-upload;">Debian Developer's Reference 5.6. "Uploading a package"</ulink>.</para></footnote>
4690  </para>  </para>
4691  <para>  <para>
4692  While connected to the Internet, you can upload your package by the following:  While connected to the Internet, you can upload your package by the following:
# Line 4470  Z4jxNrgh7Bc= Line 4726  Z4jxNrgh7Bc=
4726  =pH94  =pH94
4727  -----END PGP SIGNATURE-----  -----END PGP SIGNATURE-----
4728  </screen>  </screen>
 <para>  
 See <ulink url="&mentors-dn;"/> for  
 publically accessible upload area for non-DD.  
 </para>  
 <para>  
 See <ulink url="&debref-archive;">Debian  
 Reference, 2.7.12.  'Small public package archive'</ulink> for an example for  
 creating a small public package archive compatible with the modern secure APT  
 system.  
 </para>  
4729  </section>  </section>
4730  <section id="skipped-uploads"><title>Skipped uploads</title>  <section id="skipped-uploads"><title>Skipped uploads</title>
4731  <para>  <para>
# Line 4512  If this is to be recorded as a new patch Line 4758  If this is to be recorded as a new patch
4758  <itemizedlist>  <itemizedlist>
4759  <listitem>  <listitem>
4760  <para>  <para>
4761  <literal>quilt new <replaceable>bugname.patch</replaceable></literal> to set  <literal>dquilt new <replaceable>bugname.patch</replaceable></literal> to set
4762  patch name;  patch name;
4763  </para>  </para>
4764  </listitem>  </listitem>
4765  <listitem>  <listitem>
4766  <para>  <para>
4767  <literal>quilt add <replaceable>buggy-file</replaceable></literal> to declare  <literal>dquilt add <replaceable>buggy-file</replaceable></literal> to declare
4768  file to be modified;  file to be modified;
4769  </para>  </para>
4770  </listitem>  </listitem>
# Line 4529  Correct the problem in the package sourc Line 4775  Correct the problem in the package sourc
4775  </listitem>  </listitem>
4776  <listitem>  <listitem>
4777  <para>  <para>
4778  <literal>quilt refresh</literal> to record to  <literal>dquilt refresh</literal> to record to
4779  <filename><replaceable>bugname.patch</replaceable></filename>;  <filename><replaceable>bugname.patch</replaceable></filename>;
4780  </para>  </para>
4781  </listitem>  </listitem>
4782  <listitem>  <listitem>
4783  <para>  <para>
4784  <literal>quilt header -e</literal> to add its description;  <literal>dquilt header -e</literal> to add its description;
4785  </para>  </para>
4786  </listitem>  </listitem>
4787  </itemizedlist>  </itemizedlist>
# Line 4547  If this is to update an existing patch, Line 4793  If this is to update an existing patch,
4793  <itemizedlist>  <itemizedlist>
4794  <listitem>  <listitem>
4795  <para>  <para>
4796  <literal>quilt pop <replaceable>foo.patch</replaceable></literal> to recall  <literal>dquilt pop <replaceable>foo.patch</replaceable></literal> to recall
4797  existing <filename><replaceable>foo.patch</replaceable></filename>;  existing <filename><replaceable>foo.patch</replaceable></filename>;
4798  </para>  </para>
4799  </listitem>  </listitem>
# Line 4559  Correct the problem in the old Line 4805  Correct the problem in the old
4805  </listitem>  </listitem>
4806  <listitem>  <listitem>
4807  <para>  <para>
4808  <literal>quilt refresh</literal> to update  <literal>dquilt refresh</literal> to update
4809  <filename><replaceable>foo.patch</replaceable></filename>;  <filename><replaceable>foo.patch</replaceable></filename>;
4810  </para>  </para>
4811  </listitem>  </listitem>
4812  <listitem>  <listitem>
4813  <para>  <para>
4814  <literal>quilt header -e</literal> to update its description;  <literal>dquilt header -e</literal> to update its description;
4815  </para>  </para>
4816  </listitem>  </listitem>
4817  <listitem>  <listitem>
4818  <para>  <para>
4819  <literal>while quilt push; do quilt refresh; done</literal> to apply all  <literal>while dquilt push; do dquilt refresh; done</literal> to apply all
4820  patches while removing <emphasis>fuzz</emphasis>;  patches while removing <emphasis>fuzz</emphasis>;
4821  </para>  </para>
4822  </listitem>  </listitem>
# Line 4603  Repeat what you did in the above to fix Line 4849  Repeat what you did in the above to fix
4849  </listitem>  </listitem>
4850  <listitem>  <listitem>
4851  <para>  <para>
4852  Repeat what you did in <xref linkend="completebuild"/> , <xref linkend="checkit"/> , and <xref linkend="upload"/> .  The difference is that  Repeat what you did in <xref linkend="completebuild"/>, <xref linkend="checkit"/>, and <xref linkend="upload"/>.  The difference is that
4853  this time, the original source archive won't be included, as it hasn't been  this time, the original source archive won't be included, as it hasn't been
4854  changed and it already exists in the Debian archive.  changed and it already exists in the Debian archive.
4855  </para>  </para>
# Line 4667  Update the Debian <filename>changelog</f Line 4913  Update the Debian <filename>changelog</f
4913  <itemizedlist>  <itemizedlist>
4914  <listitem>  <listitem>
4915  <para>  <para>
4916  Add an entry with "<literal>New upstream release</literal>".  Add an entry with <literal>New upstream release</literal>.
4917  </para>  </para>
4918  </listitem>  </listitem>
4919  <listitem>  <listitem>
4920  <para>  <para>
4921  Describe concisely the changes <emphasis>in the new upstream release</emphasis>  Describe concisely the changes <emphasis>in the new upstream release</emphasis>
4922  that fix reported bugs and close those bugs by adding "<literal>Closes: #<replaceable>bug_number</replaceable></literal>".  that fix reported bugs and close those bugs by adding <literal>Closes: #<replaceable>bug_number</replaceable></literal>.
4923  </para>  </para>
4924  </listitem>  </listitem>
4925  <listitem>  <listitem>
4926  <para>  <para>
4927  Describe concisely the changes <emphasis>to the new upstream release</emphasis>  Describe concisely the changes <emphasis>to the new upstream release</emphasis>
4928  by the maintainer that fix reported bugs and close those bugs by adding "<literal>Closes: #<replaceable>bug_number</replaceable></literal>".  by the maintainer that fix reported bugs and close those bugs by adding <literal>Closes: #<replaceable>bug_number</replaceable></literal>.
4929  </para>  </para>
4930  </listitem>  </listitem>
4931  </itemizedlist>  </itemizedlist>
4932  </listitem>  </listitem>
4933  <listitem>  <listitem>
4934  <para>  <para>
4935  <literal>while quilt push; do quilt refresh; done</literal> to apply all  <literal>while dquilt push; do dquilt refresh; done</literal> to apply all
4936  patches while removing <emphasis>fuzz</emphasis>.  patches while removing <emphasis>fuzz</emphasis>.
4937  </para>  </para>
4938  </listitem>  </listitem>
# Line 4703  If a patch you applied to the source was Line 4949  If a patch you applied to the source was
4949  <itemizedlist>  <itemizedlist>
4950  <listitem>  <listitem>
4951  <para>  <para>
4952  <literal>quilt delete</literal> to remove it.  <literal>dquilt delete</literal> to remove it.
4953  </para>  </para>
4954  </listitem>  </listitem>
4955  </itemizedlist>  </itemizedlist>
# Line 4716  upstream source, Line 4962  upstream source,
4962  <itemizedlist>  <itemizedlist>
4963  <listitem>  <listitem>
4964  <para>  <para>
4965  <literal>quilt push -f</literal> to apply old patches while forcing rejects as  <literal>dquilt push -f</literal> to apply old patches while forcing rejects as
4966  <filename><replaceable>baz</replaceable>.rej</filename>.  <filename><replaceable>baz</replaceable>.rej</filename>.
4967  </para>  </para>
4968  </listitem>  </listitem>
# Line 4729  realize intended effect of Line 4975  realize intended effect of
4975  </listitem>  </listitem>
4976  <listitem>  <listitem>
4977  <para>  <para>
4978  <literal>quilt refresh</literal> to update the patch.  <literal>dquilt refresh</literal> to update the patch.
4979  </para>  </para>
4980  </listitem>  </listitem>
4981  </itemizedlist>  </itemizedlist>
4982  </listitem>  </listitem>
4983  <listitem>  <listitem>
4984  <para>  <para>
4985  Continue back to <literal>while quilt push; do quilt refresh; done</literal>.  Continue back to <literal>while dquilt push; do dquilt refresh; done</literal>.
4986  </para>  </para>
4987  </listitem>  </listitem>
4988  </itemizedlist>  </itemizedlist>
# Line 4760  $ wget http://example.org/<replaceable>f Line 5006  $ wget http://example.org/<replaceable>f
5006  $ cd <replaceable>foo</replaceable>-<replaceable>oldversion</replaceable>  $ cd <replaceable>foo</replaceable>-<replaceable>oldversion</replaceable>
5007  $ uupdate -v <replaceable>newversion</replaceable> ../<replaceable>foo</replaceable>-<replaceable>newversion</replaceable>.tar.gz  $ uupdate -v <replaceable>newversion</replaceable> ../<replaceable>foo</replaceable>-<replaceable>newversion</replaceable>.tar.gz
5008  $ cd ../<replaceable>foo</replaceable>-<replaceable>newversion</replaceable>  $ cd ../<replaceable>foo</replaceable>-<replaceable>newversion</replaceable>
5009  $ while quilt push; do quilt refresh; done  $ while dquilt push; do dquilt refresh; done
5010  $ dch  $ dch
5011  ... document changes made  ... document changes made
5012  </screen>  </screen>
5013  <para>  <para>
5014  If you set up a <filename>debian/watch</filename> file as described in <xref linkend="watch"/> , you can skip the <command>wget</command> command.  You  If you set up a <filename>debian/watch</filename> file as described in <xref linkend="watch"/>, you can skip the <command>wget</command> command.  You
5015  simply run <citerefentry> <refentrytitle>uscan</refentrytitle>  simply run <citerefentry> <refentrytitle>uscan</refentrytitle>
5016  <manvolnum>1</manvolnum> </citerefentry> in the  <manvolnum>1</manvolnum> </citerefentry> in the
5017  <filename><replaceable>foo</replaceable>-<replaceable>oldversion</replaceable></filename>  <filename><replaceable>foo</replaceable>-<replaceable>oldversion</replaceable></filename>
# Line 4778  run the <command>uupdate</command> comma Line 5024  run the <command>uupdate</command> comma
5024  uupdate</literal> at the end of the URL.  </para> </footnote>  uupdate</literal> at the end of the URL.  </para> </footnote>
5025  </para>  </para>
5026  <para>  <para>
5027  You can release this updated source by repeating what you did in <xref linkend="completebuild"/> , <xref linkend="checkit"/> , and <xref linkend="upload"/> .  You can release this updated source by repeating what you did in <xref linkend="completebuild"/>, <xref linkend="checkit"/>, and <xref linkend="upload"/>.
5028  </para>  </para>
5029  </section>  </section>
5030  <section id="packagestyle"><title>Updating the packaging style</title>  <section id="packagestyle"><title>Updating the packaging style</title>
# Line 4811  If you want to update the <filename>rule Line 5057  If you want to update the <filename>rule
5057  <filename>Makefile</filename> inclusion mechanism of the Common Debian Build  <filename>Makefile</filename> inclusion mechanism of the Common Debian Build
5058  System (<systemitem role="package">cdbs</systemitem>) to the  System (<systemitem role="package">cdbs</systemitem>) to the
5059  <command>dh</command> syntax, see  <command>dh</command> syntax, see
5060  <ulink url="">cdbs-doc.pdf.gz</ulink> and understand its  <ulink url="&cdbs-doc;">cdbs-doc.pdf.gz</ulink> and understand its
5061  <literal>DEB_*</literal> configuration variables.  <footnote><para> In the  <literal>DEB_*</literal> configuration variables.  <footnote><para> In the
5062  <systemitem role="package">cdbs</systemitem> (0.4.74) package, there are some  <systemitem role="package">cdbs</systemitem> (0.4.74) package, there are some
5063  negative descriptions of the <filename>rules</filename> file created by the  negative descriptions of the <filename>rules</filename> file created by the
# Line 4863  commands, remove such things and make it Line 5109  commands, remove such things and make it
5109  </listitem>  </listitem>
5110  </itemizedlist>  </itemizedlist>
5111  <para>  <para>
5112  You need to do other tasks described in <xref linkend="newupstream"/> , too.  You need to do other tasks described in <xref linkend="newupstream"/>, too.
5113  </para>  </para>
5114  </section>  </section>
5115  <section id="reminders"><title>Reminders for updating packages</title>  <section id="reminders"><title>Reminders for updating packages</title>

Legend:
Removed from v.8640  
changed lines
  Added in v.8726

  ViewVC Help
Powered by ViewVC 1.1.5