/[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 8651 by osamu, Sun Apr 10 06:02:06 2011 UTC revision 8752 by osamu, Fri Apr 29 13:39:04 2011 UTC
# Line 29  for people to check official documentati Line 29  for people to check official documentati
29  <title>Debian New Maintainers' Guide</title>  <title>Debian New Maintainers' Guide</title>
30  <bookinfo>  <bookinfo>
31  <authorgroup>  <authorgroup>
32  <author> <personname> <firstname>Josip</firstname> <surname>Rodin</surname> </personname> <email>joy-mg@debian.org</email> <contrib>(original contents)</contrib> </author>  <!-- do not use firstname and surname tags it braks Japanese.  The same with othercredit -->
33  <author> <personname> <firstname>Osamu</firstname> <surname>Aoki</surname> </personname> <email>osamu@debian.org</email> <contrib>(updated contents)</contrib> </author>  <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 -->  <!-- translator credits in po4a/translator.*.ent -->
36  &othercredit;  &othercredit;
37  </authorgroup>  </authorgroup>
# Line 66  The New-Maintainer's Debian Packaging Ho Line 67  The New-Maintainer's Debian Packaging Ho
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 87  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>  </para>
124  <section id="debian-functions"><title>How Debian functions</title>  <section id="socialdynamism"><title>Social dynamics of Debian</title>
125  <para>  <para>
126  Here are my reminders on how Debian functions.  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>  </para>
129  <itemizedlist>  <itemizedlist>
130  <listitem><para>We all are volunteers.</para>  <listitem><para>We all are volunteers.</para>
131      <itemizedlist>      <itemizedlist>
132      <listitem><para>You can not impose others what to do.</para></listitem>      <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>      <listitem><para>You should be motivated to do things by yourself.</para></listitem>
134      </itemizedlist></listitem>      </itemizedlist></listitem>
135  <listitem><para>Friendly cooperation is the driving force.</para>  <listitem><para>Friendly cooperation is the driving force.</para>
# Line 135  Here are my reminders on how Debian func Line 140  Here are my reminders on how Debian func
140  <listitem><para>Debian is not your school where you get automatic attention of teachers.</para>  <listitem><para>Debian is not your school where you get automatic attention of teachers.</para>
141      <itemizedlist>      <itemizedlist>
142      <listitem><para>You should be able to learn many things by yourself.</para></listitem>      <listitem><para>You should be able to learn many things by yourself.</para></listitem>
143      <listitem><para>Attention of other volunteers is the very scarce resource.</para></listitem>      <listitem><para>Attention from other volunteers is a very scarce resource.</para></listitem>
144      </itemizedlist></listitem>      </itemizedlist></listitem>
145  <listitem><para>Debian is constantly improving.</para>  <listitem><para>Debian is constantly improving.</para>
146      <itemizedlist>      <itemizedlist>
147      <listitem><para>You should adapt yourself to changes.</para></listitem>      <listitem><para>You are expected to make high quality packages.</para></listitem>
148      <listitem><para>Documentation may be slightly outdated .</para></listitem>      <listitem><para>You should adapt yourself to change.</para></listitem>
149      </itemizedlist></listitem>      </itemizedlist></listitem>
150  </itemizedlist>  </itemizedlist>
151  <para>  <para>
152  Since we focus only on technical aspects of packaging in this document,  There are several types of people interacting around Debian with different
153  please refer to the following to learn how Debian functions and how you can get involved.  roles.
154  </para>  </para>
155  <itemizedlist>  <itemizedlist>
156  <listitem><para><ulink url="&logiciellibre;">Debian: 17 ans de logiciel libre,  "do-ocracy" et démocratie</ulink> (Introductory slides in English PDF) </para> </listitem>  <listitem>
157  <listitem><para><ulink url="&nm-do;">Debian New Maintainer site</ulink> (official) </para> </listitem>  <para>
158  <listitem><para><ulink url="&debianmentorfaq;">Debian Mentors FAQ</ulink> (supplemental) </para> </listitem>  <emphasis role="strong">upstream author</emphasis>: the person who made the
159    original program.
160    </para>
161    </listitem>
162    <listitem>
163    <para>
164    <emphasis role="strong">upstream maintainer</emphasis>: the person who
165    currently maintains the program.
166    </para>
167    </listitem>
168    <listitem>
169    <para>
170    <emphasis role="strong">maintainer</emphasis>: the person making the Debian
171    package of the program.
172    </para>
173    </listitem>
174    <listitem>
175    <para>
176    <emphasis role="strong">sponsor</emphasis>: a person who helps maintainers to
177    upload packages to the official Debian package archive (after checking their
178    contents).
179    </para>
180    </listitem>
181    <listitem>
182    <para>
183    <emphasis role="strong">mentor</emphasis>: a person who helps novice
184    maintainers with packaging etc.
185    </para>
186    </listitem>
187    <listitem>
188    <para>
189    <emphasis role="strong">Debian Developer</emphasis> (DD): a member of
190    the Debian project with full upload rights to the official Debian package
191    archive.
192    </para>
193    </listitem>
194    <listitem>
195    <para>
196    <emphasis role="strong">Debian Maintainer</emphasis> (DM): a person with
197    limited upload rights to the official Debian package archive.
198    </para>
199    </listitem>
200  </itemizedlist>  </itemizedlist>
 </section>  
 <section id="debiandeveloper"><title>Official Debian Developer</title>  
201  <para>  <para>
202  You can not become an official  Please note that you cannot become an official
203  <emphasis role="strong">Debian Developer</emphasis> (DD) over night because it  <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  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  is useful to others, you can still upload your package either as a
206  <emphasis role="strong">maintainer</emphasis> through a  <emphasis role="strong">maintainer</emphasis> through a
# Line 166  is useful to others, you can still uploa Line 210  is useful to others, you can still uploa
210  <para>  <para>
211  Please note that you do not need to create any new package to become an  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  official Debian Developer.  Contributing to the existing packages can provide a
213  path to become an official Debian Developer too.  There are many packages  path to becoming an official Debian Developer too.  There are many packages
214  waiting for good maintainers (see <xref linkend="choose"/> ).  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>  </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>  </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>
# Line 187  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 273  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 290  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 330  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  The short descriptions that are given above only serve to introduce you to what
424  each package does.  Before continuing please thoroughly read the documentation  each package does.  Before continuing please read the documentation
425  of each program, at least, for the standard usage.  It may seem like heavy  of each relevant program including ones installed through the package dependency such as
426    <command>make</command>, at least, for the standard usage.  It may seem like heavy
427  going now, but later on you'll be <emphasis>very</emphasis> glad you read it.  going now, but later on you'll be <emphasis>very</emphasis> glad you read it.
428  </para>  If you have specific questions later, I would suggest re-reading the documents
429  <para>  mentioned above.
 If you have specific questions later, I suggest you to read the documents  
 mentioned above again.  Since this is a tutorial, I intentionally skipped  
 details and provided only pointers to keep it simple.  
430  </para>  </para>
431  </section>  </section>
432  <section id="needdocs"><title>Documentations you need for development</title>  <section id="needdocs"><title>Documentation needed for development</title>
433  <para>  <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:
# Line 378  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 <ulink url="&fhs;">Filesystem Hierarchy Standard</ulink>  Debian archive, several OS design issues, the <ulink url="&fhs;">Filesystem Hierarchy Standard</ulink>
443  (FHS, which says where each file and directory should be) etc.  For you, the most  (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 copies of  satisfy to be included in the distribution. (See the local copies of
446  <ulink url="&policy-pdf;">policy.pdf</ulink> and <ulink url="&fhs-pdf;">fhs-2.3.pdf</ulink>).  <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>
# Line 391  satisfy to be included in the distributi Line 452  satisfy to be included in the distributi
452  - the <ulink url="&developers-reference;">Debian Developer's Reference</ulink>  - the <ulink url="&developers-reference;">Debian Developer's Reference</ulink>
453  describes all matters not specifically about the technical  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 411  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>
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>  
 <para>  
 Please read the other manuals if you need more details on terminology.  
 <footnote><para>See lists in <xref linkend="debian-functions"/> and <xref linkend="needdocs"/>.</para></footnote>  
 </para>  
 </section>  
 <section id="helpme"><title>Where to ask for help</title>  
556  <para>  <para>
557  Before you decide to ask your question in some public place, please read the fine documentation.  The more experienced Debian developers will gladly help you, if you ask
558    properly after making your required efforts.
559  </para>  </para>
 <itemizedlist>  
 <listitem>  
560  <para>  <para>
561  files in <filename>/usr/share/doc/dpkg</filename>  When you receive a bug report (yes, actual bug reports!), you will know that it
562    is time for you to dig into the
563    <ulink url="&bts;">Debian Bug Tracking System</ulink>
564    and read the documentation there, to be able to
565    deal with the reports efficiently.  I highly recommend reading the
566    <ulink url="&devref-bug-handling;">Debian Developer's Reference, 5.8.
567    "Handling bugs"</ulink>.
568  </para>  </para>
 </listitem>  
 <listitem>  
569  <para>  <para>
570  files in <filename>/usr/share/doc/debian</filename>  Even if it all worked well, it's time to start praying.  Why?  Because in just
571  <!-- /usr/share/doc/debian is used be doc-debian and debian-faq -->  a few hours (or days) users from all around the world will start to use your
572    package, and if you made some critical error you'll get mailbombed by numerous
573    angry Debian users...  Just kidding.  :-)
574  </para>  </para>
 </listitem>  
 <listitem>  
575  <para>  <para>
576  files in <filename>/usr/share/doc/autotools-dev</filename>  Relax and be ready for bug reports, because there is a lot more work to be done
577    before your package will be fully in line with Debian policies and its best
578    practice guidelines (once again, read the <emphasis>real
579    documentation</emphasis> for details).  Good luck!
580  </para>  </para>
581  </listitem>  </section>
582  <listitem>  </chapter>
583    <chapter id="first"><title>First steps</title>
584  <para>  <para>
585  files in <filename>/usr/share/doc/<replaceable>package</replaceable></filename> for all pertinent packages.  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 <literal><command>man</command> <replaceable>command</replaceable></literal> for all pertinent commands  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 <literal><command>info</command> <replaceable>command</replaceable></literal> for all pertinent commands    <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 661  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 resources.  There are several package ownership status resources.
# Line 683  There are several package ownership stat Line 710  There are several package ownership stat
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 698  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 729  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 739  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>  <listitem>
813  <para>  <para>
814  If you are unsure about where it should go, post the license text on <ulink url="&debian-legal-ldo;">debian-legal@lists.debian.org</ulink>  If you are unsure about where it should go, post the license text on
815    <ulink url="&debian-legal-ldo;">debian-legal@lists.debian.org</ulink>
816  and ask for advice.  and ask for advice.
817  </para>  </para>
818  </listitem>  </listitem>
819    </itemizedlist>
820  <listitem>  <listitem>
821  <para>  <para>
822  That program certainly should <emphasis role="strong">not</emphasis> run setuid  The program should <emphasis role="strong">not</emphasis> introduce security
823  root, or even better - it shouldn't need to be setuid or setgid to anything.  and maintenance concerns to the Debian system.
824  </para>  </para>
825  </listitem>  </listitem>
826    <itemizedlist>
827  <listitem>  <listitem>
828  <para>  <para>
829  That program should not be a daemon, or something that goes in  The program should be well documented and its code needs to be understandable
830  <filename>*/sbin</filename> directories, or open a port as root.  (i.e.  not obfuscated).
831  </para>  </para>
832  </listitem>  </listitem>
833  <listitem>  <listitem>
834  <para>  <para>
835  That program should result in binary executable form, libraries are harder to  You should contact the program's author(s) to check if they agree with packaging it
836  handle.  and are amicable to Debian.  It is important to be able to consult with the author(s)
837    in case of any problems with the program, so don't try to package
838    unmaintained software.
839  </para>  </para>
840  </listitem>  </listitem>
841  <listitem>  <listitem>
842  <para>  <para>
843  That program should be well documented and its code needs to be understandable  The program certainly should <emphasis role="strong">not</emphasis> run setuid
844  (i.e.  not obfuscated).  root, or even better, it shouldn't need to be setuid or setgid to anything.
845  </para>  </para>
846  </listitem>  </listitem>
847  <listitem>  <listitem>
848  <para>  <para>
849  You should contact program's author(s) to check if they agree with packaging it  The program should not be a daemon, or go in an
850  and amicable to Debian.  It is important to be able to consult with author(s)  <filename>*/sbin</filename> directory, or open a port as root.
 about the program in case of any program specific problems, so don't try to  
 package unmaintained pieces of software.  
851  </para>  </para>
852  </listitem>  </listitem>
853  </itemizedlist>  </itemizedlist>
854    </listitem>
855    </itemizedlist>
856  <para>  <para>
857  Of course, these things are just safety measures, and intended to save you from  Of course, the last one is just a safety measures, and intended to save you from
858  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
859  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.
860  </para>  </para>
861    <para>
862    As a new maintainer, you are encouraged to get some experience in packaging
863    with easier packages and discouraged from creating complicated packages.
864    </para>
865    <itemizedlist>
866    <listitem><para>Simple packages</para>
867      <itemizedlist>
868      <listitem><para>single binary package, arch = all (collection of data such as wallpaper graphics)</para></listitem>
869      <listitem><para>single binary package, arch = all (executables written in the POSIX shell language)</para></listitem>
870      <listitem><para>single binary package, arch = all (executables written in interpreter languages)</para></listitem>
871      </itemizedlist>
872    </listitem>
873    <listitem><para>Intermediate complexity packages</para>
874      <itemizedlist>
875      <listitem><para>single binary package, arch = any (executables written in compiler languages such as C and C++)</para></listitem>
876      <listitem><para>multiple binary packages, arch = any + all (packages for executables + documentation)</para></listitem>
877      <listitem><para>upstream source in a format other than <filename>tar.gz</filename> or <filename>tar.bz2</filename></para></listitem>
878      <listitem><para>upstream source containing undistributable contents</para></listitem>
879      </itemizedlist>
880    </listitem>
881    <listitem><para>High complexity packages</para>
882      <itemizedlist>
883      <listitem><para>interpreter module package used by other packages</para></listitem>
884      <listitem><para>generic library package used by other packages</para></listitem>
885      <listitem><para>multiple binary packages containing a library package</para></listitem>
886      <listitem><para>source package with multiple upstream sources</para></listitem>
887      <listitem><para>kernel module packages</para></listitem>
888      <listitem><para>kernel patch packages</para></listitem>
889      <listitem><para>any package with non-trivial maintainer scripts</para></listitem>
890      </itemizedlist>
891    </listitem>
892    </itemizedlist>
893    <para>
894    Packaging high complexity packages is not too hard, but it requires a bit more
895    knowledge. You should seek specific guidances for every complexity. For example, some interpreter languages have their policy.
896    </para>
897    <itemizedlist>
898    <listitem><para><ulink url="&policy-perl;">Perl policy</ulink></para></listitem>
899    <listitem><para><ulink url="&policy-python;">Python policy</ulink></para></listitem>
900    <listitem><para><ulink url="&policy-java;">Java policy</ulink></para></listitem>
901    </itemizedlist>
902  </section>  </section>
903  <section id="getit"><title>Get the program, and try it out</title>  <section id="getit"><title>Get the program, and try it out</title>
904  <para>  <para>
905  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.
906  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
907  author's homepage.  Sources for free Unix programs usually come in  author's homepage.  Sources for free Unix programs usually come in
908  <command>tar</command>+<command>gzip</command> format with extension  <command>tar</command>+<command>gzip</command> format with the extension
909  <filename>.tar.gz</filename>, or  <filename>.tar.gz</filename>,
910  <command>tar</command>+<command>bzip2</command> format with extension  <command>tar</command>+<command>bzip2</command> format with the extension
911  <filename>.tar.bz2</filename>.  These usually contain the subdirectory called  <filename>.tar.bz2</filename>, or
912  <filename><replaceable>programname</replaceable>-<replaceable>version</replaceable></filename>  <command>tar</command>+<command>xz</command> format with the extension
913  in them and all the sources under it.  <filename>.tar.xz</filename>.  These usually contain a directory called
914    <filename><replaceable>package</replaceable>-<replaceable>version</replaceable></filename>
915    with all the sources inside.
916  </para>  </para>
917  <para>  <para>
918  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,
919  Subversion, or CVS repository, you need to get it with <literal>git  Subversion, or CVS, you need to get it with <literal>git
920  clone</literal>, <literal>svn co</literal>, or <literal>cvs co</literal> and  clone</literal>, <literal>svn co</literal>, or <literal>cvs co</literal> and
921  repack it into <command>tar</command>+<command>gzip</command> format by  repack it into <command>tar</command>+<command>gzip</command> format yourself
922  yourself using the <literal>--exclude-vcs</literal> option.  by using the <literal>--exclude-vcs</literal> option.
923  </para>  </para>
924  <para>  <para>
925  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
926  filename ends in <filename>.Z</filename> or  filename ends in <filename>.Z</filename> or
927  <filename>.zip</filename><footnote><para> You can identify the archive format  <filename>.zip</filename><footnote><para> You can identify the archive format
928  using the <command>file</command> command when the file extension is not  using the <command>file</command> command when the file extension is not
929  enough.  </para> </footnote>), unpack it with appropriate tools and repack it,  enough.  </para> </footnote>), you should also unpack it with the
930  too.  appropriate tools and repack it.
931  </para>  </para>
932  <para>  <para>
933  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+
934  file manager.  file manager.
935  <footnote><para> This program is already packaged. Its  <footnote><para> This program is already packaged. The
936  <ulink url="&gentoo-package;">current version</ulink> uses Autotools as its  <ulink url="&gentoo-package;">current version</ulink> uses Autotools as its
937  build structure and is substantially different from the following examples  build structure and is substantially different from the following examples,
938  based on the version 0.9.12.</para>  which were based on version 0.9.12.</para>
939  </footnote>  </footnote>
940  </para>  </para>
941  <para>  <para>
# Line 867  Create a subdirectory under your home di Line 943  Create a subdirectory under your home di
943  <filename>debian</filename> or <filename>deb</filename> or anything you find  <filename>debian</filename> or <filename>deb</filename> or anything you find
944  appropriate (e.g.  just <filename>~/gentoo</filename> would do fine in this  appropriate (e.g.  just <filename>~/gentoo</filename> would do fine in this
945  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
946  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
947  <emphasis>irrelevant</emphasis> ones, because there will most probably be  messages, even <emphasis>irrelevant</emphasis> ones, because other
948  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
949  not ignore those anomalies.  On your console screen, you should see the  may have problems unpacking them.  Your shell command line may look
950  following.  something like this:
951  </para>  </para>
952  <screen>  <screen>
953  $ mkdir ~/gentoo ; cd ~/gentoo  $ mkdir ~/gentoo ; cd ~/gentoo
# Line 886  Now you have another subdirectory, calle Line 962  Now you have another subdirectory, calle
962  Change to that directory and <emphasis>thoroughly</emphasis> read the provided  Change to that directory and <emphasis>thoroughly</emphasis> read the provided
963  documentation.  Usually there are files named <filename>README*</filename>,  documentation.  Usually there are files named <filename>README*</filename>,
964  <filename>INSTALL*</filename>, <filename>*.lsm</filename> or  <filename>INSTALL*</filename>, <filename>*.lsm</filename> or
965  <filename>*.html</filename>.  You must find instructions on how to correctly  <filename>*.html</filename>.  You must find instructions on how to
966  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
967  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
968  that, but more on that later in <xref linkend="destdir"/> ).  that, but more on that later in <xref linkend="destdir"/>).
969    </para>
970    <para>
971    You should start packaging with a completely clean (pristine) source directory,
972    or simply with freshly unpacked sources.
973  </para>  </para>
974    </section>
975    <section id="simplemake"><title>Simple build systems</title>
976  <para>  <para>
977  Simple programs come with a <filename>Makefile</filename> file in them and can  Simple programs come with a <filename>Makefile</filename> and can
978  be compiled simply with <literal>make</literal>.<footnote><para>  be compiled just by invoking <literal>make</literal>.<footnote><para>
979  Many modern programs come with a script <filename>configure</filename> which  Many modern programs come with a script <filename>configure</filename> which
980  creates a <filename>Makefile</filename> file customized for your system upon  when executed creates a <filename>Makefile</filename> customized for
981  its execution.</para></footnote> Some of them support  your system.</para></footnote> Some of them support
982  <literal>make check</literal>, which runs included self-checks.  Installation  <literal>make check</literal>, which runs included self-tests.  Installation
983  to the destination directories is usually done with <literal>make  to the destination directories is usually done with <literal>make
984  install</literal>.  install</literal>.
985  </para>  </para>
# Line 912  there's even a <literal>make uninstall</ Line 994  there's even a <literal>make uninstall</
994  all the installed files.  all the installed files.
995  </para>  </para>
996  </section>  </section>
997  <section id="portable"><title>Free portable programs</title>  <section id="portable"><title>Popular portable build systems</title>
998  <para>  <para>
999  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
1000  <ulink url="&cxx;">C++</ulink> languages.  Many of  <ulink url="&cxx;">C++</ulink> languages.  Many of these use Autotools or
1001  these use Autotools or CMake to make them portable across different platforms.  CMake to make them portable across different platforms.  These build tools need
1002  These tools are used to generate <filename>Makefile</filename> and other  to be used to generate the <filename>Makefile</filename> and other
1003  required source files.  Then, such programs are built with usual <literal>make;  required source files first.  Then, such programs are built using the usual
1004  make install</literal>.  <literal>make; make install</literal>.
1005  </para>  </para>
1006  <para>  <para>
1007  <ulink url="&gnu-build-system;">Autotools</ulink>  <ulink url="&gnu-build-system;">Autotools</ulink> is the GNU build
1008  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>,
1009    <ulink url="&automake;">Automake</ulink>,
1010    <ulink url="&libtool;">Libtool</ulink>, and
1011    <ulink url="&gettext;">gettext</ulink>.  You can recognize
1012  such sources by the <filename>configure.ac</filename>,  such sources by the <filename>configure.ac</filename>,
1013  <filename>Makefile.am</filename>, and <filename>Makefile.in</filename> files.  <filename>Makefile.am</filename>, and <filename>Makefile.in</filename> files.
1014  <footnote><para> See <ulink url="&autotools-tutorial;">Autotools Tutorial</ulink>  <footnote><para>Autotools is too big to deal in this small tutorial. This
1015  and <ulink url="&autotools-readme;"/>.  </para> </footnote>  section is meant to provide keywords and references only.  Please make sure to read the
1016    <ulink url="&autotools-tutorial;">Autotools Tutorial</ulink> and
1017    <ulink url="&autotools-readme;"/>, if you need to use it.</para></footnote>
1018  </para>  </para>
1019  <para>  <para>
1020  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
1021  <literal>autoreconf -i -f</literal> in the source and distributes this source  <literal>autoreconf -i -f</literal> in the source directory and
1022  with generated files.  distributes the generated files along with the source.
1023  </para>  </para>
1024  <screen>  <screen>
1025  configure.ac-----+-&gt; autoreconf -+-&gt; configure  configure.ac-----+-&gt; autoreconf -+-&gt; configure
# Line 951  files requires some knowledge of <comman Line 1038  files requires some knowledge of <comman
1038  <literal>info automake</literal>.  <literal>info automake</literal>.
1039  </para>  </para>
1040  <para>  <para>
1041  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
1042  distributed source and runs <literal>./configure &amp;&amp; make</literal> in  distributed source and runs <literal>./configure &amp;&amp; make</literal> in
1043  the source to compile program into a  the source directory to compile the program into a
1044  <command><replaceable>binary</replaceable></command>.  <command><replaceable>binary</replaceable></command> executable.
1045  </para>  </para>
1046  <screen>  <screen>
1047  Makefile.in -----+                +-&gt; Makefile -----+-&gt; make -&gt; <replaceable>binary</replaceable>  Makefile.in -----+                +-&gt; Makefile -----+-&gt; make -&gt; <replaceable>binary</replaceable>
# Line 965  config.h.in -----+                +-&gt; Line 1052  config.h.in -----+                +-&gt;
1052             config.guess --+             config.guess --+
1053  </screen>  </screen>
1054  <para>  <para>
1055  You can change many things in the <filename>Makefile</filename> file such as  You can change many things in the <filename>Makefile</filename>; for
1056  the default file install location using the command option, e.g.  instance you can change the default location for file installation
1057  <command>./configure --prefix=/usr</command>.  using the option <command>./configure --prefix=/usr</command>.
1058  </para>  </para>
1059  <para>  <para>
1060  Although it is not required, updating the <filename>configure</filename> and  Although it is not required, updating the <filename>configure</filename> and
1061  other files with <literal>autoreconf -i -f</literal> as the user may improve  other files with <literal>autoreconf -i -f</literal> may improve
1062  the compatibility of the source.  the compatibility of the source.
1063  <footnote><para>You can automate this by using  <footnote><para>You can automate this by using
1064  <systemitem role="package">dh_autoreconf</systemitem> package.  <systemitem role="package">dh-autoreconf</systemitem> package.
1065  See <xref linkend="customrules"/>.</para></footnote>  See <xref linkend="customrules"/>.</para></footnote>
1066  </para>  </para>
1067  <para>  <para>
1068  <ulink url="&cmake;">CMake</ulink> is an alternative  <ulink url="&cmake;">CMake</ulink> is an alternative
1069  build system.  You can notice such sources by the  build system.  You can recognize such sources by the
1070  <filename>CMakeLists.txt</filename> file.  <filename>CMakeLists.txt</filename> file.
1071  </para>  </para>
1072  </section>  </section>
1073  <section id="namever"><title>Package name and version</title>  <section id="namever"><title>Package name and version</title>
1074  <para>  <para>
1075  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
1076  or simply with freshly unpacked sources.  consider
1077    <emphasis role="strong">package name</emphasis> to be <literal>gentoo</literal> and
1078    <emphasis role="strong">upstream version</emphasis> to be <literal>0.9.12</literal>.
1079    These are used in the <filename>debian/changelog</filename> file described later in
1080    <xref linkend="changelog"/>, too.
1081    </para>
1082    <para>
1083    Although this simple approach works most of the times, you may need to adjust
1084    <emphasis role="strong">package name</emphasis> and
1085    <emphasis role="strong">upstream version</emphasis> by renaming the upstream
1086    source to follow the Debian Policy and the existing convention.
1087    </para>
1088    <para>
1089    You must choose the <emphasis role="strong">package name</emphasis>
1090    to consist only of lower case letters (<literal>a-z</literal>), digits
1091    (<literal>0-9</literal>), plus (<literal>+</literal>) and minus
1092    (<literal>-</literal>) signs, and periods (<literal>.</literal>). It must be
1093    at least two characters long, must start with an alphanumeric character, and
1094    must not be the same as existing ones.
1095    It is good idea to keep its length within 30 characters.
1096    <footnote><para>The package name field length of <command>aptitude</command> is 30.  For more than 90% of packages, the package name is less than 24 characters.</para></footnote>
1097    </para>
1098    <!--
1099    Osamu's archive stat (2011-04-23, sid, kfreebsd-amd64):
1100    === stat for package name string length ===
1101    11 1947 36.9%   mode
1102    14 1717 54.7%  50% median
1103    23 611 91.0%   90%
1104    32 89 99.0%    99%
1105    41 12 99.9%    99.9%
1106    52 1 100.0%
1107    Previous 20 chars is becoming too short for 17% of packages
1108    Default aptitude setting display up to 30 chars (98.3%).
1109    -->
1110    <para>
1111    If upstream source uses generic words such as <literal>test-suite</literal> as
1112    its name, it is good idea to rename it not to contaminate name space for the
1113    package name and to identify its contents explicitly.
1114    <footnote><para>If you follow the
1115    <ulink url="&devref-newpackage;">Debian Developer's Reference 5.1. "New packages"</ulink>,
1116    the ITP process will usually catch this kind of issues.</para></footnote>
1117    </para>
1118    <para>
1119    You should choose the <emphasis role="strong">upstream version</emphasis>
1120    to consist only of
1121    alphanumerics (<literal>0-9A-Za-z</literal>), plus (<literal>+</literal>),
1122    tildes (<literal>~</literal>), and periods (<literal>.</literal>). It must
1123    start with a digit (<literal>0-9</literal>).  <footnote><para>This stricter
1124    rule should help you avoid confusing file names.</para></footnote>
1125    It is good idea to keep its length within 8 characters if possible.
1126    <footnote><para>The version field length of <command>aptitude</command> is 10.  The Debian revision with preceding hyphen usually consumes 2.  For more than 80% of packages, the upstream version is less than 8 charactes and the Debian revision is less than 2 characters.  For more than 90% of packages, the upstream version is less than 10 charactes and the Debian revision is less than 3 characters.</para></footnote>
1127    </para>
1128    <!--
1129    Osamu's archive stat (2011-04-23, sid, kfreebsd-amd64):
1130    === stat for upstream version string length ===
1131    5 9765 60.2%  50% median and mode
1132    6 3765 73.3%
1133    7 2789 82.9%
1134    8 1158 86.9%
1135    9 501 88.6%
1136    10 773 91.3%  90%
1137    18 55 99.1%   99%
1138    27 11 99.9%    99.9
1139    35 6 100.0%
1140    === stat for debian revision string length ===
1141    1 22556 83.3%  50% median and mode
1142    2 1106 87.2%
1143    3 1312 91.7%   90%
1144    4 2127 99.1%   99%
1145    7 14 99.9%     99.9%
1146    
1147    aptitude display 10 = 8char for up + 1char (for -) + 1char for deb
1148    90chars as max for file name of binary debs (package+up+deb+arch+.deb)
1149    -->
1150    <para>
1151    If the upstream software does not use normal version system like
1152    <literal>2.30.32</literal> but uses some kind of date such as
1153    <literal>09Oct23</literal>, a random codename string or a VCS hash value as a part
1154    of version, make sure to remove them from the
1155    <emphasis role="strong">upstream version</emphasis>.  Such information can be
1156    recorded in the <filename>debian/changelog</filename> file.  If you need to
1157    invent a version string, use the <literal>YYYYMMDD</literal> format such as
1158    <literal>20110429</literal> as upstream version.  This ensures that
1159    <command>dpkg</command> properly sees later versions as upgrades.
1160    </para>
1161    <para>
1162    Version strings <footnote><para>Version strings may be
1163    <literal><replaceable>version</replaceable></literal>,
1164    <literal><replaceable>revision</replaceable></literal>, or
1165    <literal><replaceable>version</replaceable>-<replaceable>revision</replaceable></literal>.
1166    See <xref linkend="newrevision"/> for how the <emphasis role="strong">Debian
1167    revision</emphasis> <literal><replaceable>revision</replaceable></literal> is incremented.
1168    </para></footnote>
1169    can be compared with <citerefentry> <refentrytitle>dpkg</refentrytitle> <manvolnum>1</manvolnum> </citerefentry> as the following.
1170    </para>
1171    <screen>
1172     $ dpkg --compare-versions <replaceable>ver1</replaceable> <replaceable>op</replaceable> <replaceable>ver2</replaceable>
1173    </screen>
1174    <para>
1175    The version comparison rule can be summarized as the following.
1176    </para>
1177    <itemizedlist>
1178    <listitem><para>The strings are compared from the head to the tail.</para></listitem>
1179    <listitem><para>Alphabets are larger than numbers.</para></listitem>
1180    <listitem><para>Numbers are compared as the integer.</para></listitem>
1181    <listitem><para>Alphabets are compared in the ASCII code order.</para></listitem>
1182    <listitem><para>There are some special rules for periods (<literal>.</literal>), plus (<literal>+</literal>) and tildes (<literal>~</literal>) as the followings.</para>
1183      <para>
1184      <literal>0.0</literal> &lt;
1185      <literal>0.5</literal> &lt;
1186      <literal>0.10</literal> &lt;
1187      <literal>0.99</literal> &lt;
1188      <literal>1</literal> &lt;
1189      <literal>1.0~rc1</literal> &lt;
1190      <literal>1.0</literal> &lt;
1191      <literal>1.0+b1</literal> &lt;
1192      <literal>1.0+nmu1</literal> &lt;
1193      <literal>1.1</literal> &lt;
1194      <literal>2.0</literal>
1195      </para>
1196    </listitem>
1197    </itemizedlist>
1198    <para>
1199    One of the tricky case happens when the upstream releases
1200    <filename>gentoo-0.9.12-ReleaseCandidate-99.tar.gz</filename> as the
1201    pre-release of <filename>gentoo-0.9.12.tar.gz</filename>.  You need to make
1202    sure that the upgrade works properly by renaming the upstream source to
1203    <filename>gentoo-0.9.12~rc99.tar.gz</filename>.
1204  </para>  </para>
1205    </section>
1206    <section id="dh-make"><title>Setting up <command>dh_make</command></title>
1207  <para>  <para>
1208  For the package to be built correctly, you must make the program's original  Set up the shell environment variables <literal>$DEBEMAIL</literal> and
1209  name lowercase (if it isn't already), and you should move the source directory  <literal>$DEBFULLNAME</literal> so that various Debian maintenance
1210  to  tools recognize your email address and name to use for packages. <footnote><para> The
 <filename><replaceable>packagename</replaceable>-<replaceable>version</replaceable></filename>.  
 </para>  
 <para>  
 If the program name consists of more than one word, contract them to one word,  
 or make an abbreviation.  For example, program John's little editor for X  
 package would be named <systemitem role="package">johnledx</systemitem>, or  
 <systemitem role="package">jle4x</systemitem>, or whatever you decide, as long  
 as it's under some reasonable limit, e.g.  20 characters.  
 </para>  
 <para>  
 Also check for the exact version of the program (to be included in the package  
 version).  If that piece of software is not numbered with versions like  
 <literal>X.Y.Z</literal>, but with some kind of date, feel free to use that  
 date as the version number, as long as newer version numbers will look larger.  
 While it is best to use the same version number as what upstream uses, if it is  
 in the format of <literal>09Oct23</literal> you may need to convert it to  
 <literal>YYYYMMDD</literal> format, which would be <literal>20091023</literal>,  
 to ensure proper order for upgrade with the <command>dpkg</command>  
 program.<footnote><para> Version string can be compared by <literal>dpkg  
 --compare-versions <replaceable>ver1</replaceable>  
 <replaceable>op</replaceable> <replaceable>ver2</replaceable></literal>.  See  
 <citerefentry> <refentrytitle>dpkg</refentrytitle> <manvolnum>1</manvolnum>  
 </citerefentry> manpage.  </para> </footnote>  
 </para>  
 <para>  
 Some programs won't be numbered at all, in which case you should contact the  
 upstream maintainer to see if they've got some other revision-tracking method.  
 </para>  
 </section>  
 <section id="dh-make"><title>Initial Debian package</title>  
 <para>  
 Let's set up the shell environment variable <literal>$DEBEMAIL</literal> and  
 <literal>$DEBFULLNAME</literal> so many Debian maintenance tools recognize your  
 name and email address to use for packages as follows.<footnote><para> The  
1211  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
1212  other login shells such as Z shell, use their pertinent configuration files  some other login shell such as Z shell, use their corresponding
1213  instead of <filename>~/.bashrc</filename>.  </para> </footnote>.  configuration files instead of <filename>~/.bashrc</filename>. </para> </footnote>
1214  </para>  </para>
1215  <screen>  <screen>
1216  $ cat &gt;&gt;~/.bashrc &lt;&lt;EOF  $ cat &gt;&gt;~/.bashrc &lt;&lt;EOF
# Line 1036  DEBEMAIL=your.email.address@example.org Line 1218  DEBEMAIL=your.email.address@example.org
1218  DEBFULLNAME=Firstname Lastname  DEBFULLNAME=Firstname Lastname
1219  export DEBEMAIL DEBFULLNAME  export DEBEMAIL DEBFULLNAME
1220  EOF  EOF
1221    $ . ~/.bashrc
1222  </screen>  </screen>
1223    </section>
1224    <section id="non-native-dh-make"><title>Initial non-native Debian package</title>
1225  <para>  <para>
1226  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
1227    programs.  If you wish to create a non-native Debian package of an upstream
1228    source <filename>gentoo-0.9.12.tar.gz</filename>, you can create an initial
1229    non-native Debian package for it by issuing the <command>dh_make</command>
1230  command as follows.  command as follows.
1231  </para>  </para>
1232  <screen>  <screen>
1233  $ . ~/.bashrc  $ cd ~/gentoo
1234  $ cd ~/gentoo/gentoo-0.9.12  $ wget http://example.org/gentoo-0.9.12.tar.gz
1235    $ tar -xvzf gentoo-0.9.12.tar.gz
1236    $ cd gentoo-0.9.12
1237  $ dh_make -f ../gentoo-0.9.12.tar.gz  $ dh_make -f ../gentoo-0.9.12.tar.gz
1238  </screen>  </screen>
1239  <para>  <para>
1240  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.
1241  <footnote><para> If the upstream source provides the  <footnote><para> If the upstream source provides the
1242  <filename>debian</filename> directory and its contents, run the  <filename>debian</filename> directory and its contents, run the
1243  <command>dh_make</command> command with the <literal>--addmissing</literal>  <command>dh_make</command> command with the extra option
1244  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
1245  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
1246  provided by the upstream for your Debian package.  </para> </footnote> See  provided by the upstream for your Debian package.  </para> </footnote> See
1247  <citerefentry> <refentrytitle>dh_make</refentrytitle> <manvolnum>1</manvolnum>  <citerefentry> <refentrytitle>dh_make</refentrytitle> <manvolnum>1</manvolnum>
1248  </citerefentry> for details.  </citerefentry> for details.
1249  </para>  </para>
1250  <para>  <para>
1251  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
1252  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,
1253  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
1254  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
1255  confirm by pressing <literal><replaceable>ENTER</replaceable></literal>.  confirm by pressing <literal><replaceable>ENTER</replaceable></literal>.
1256  <footnote><para> There are few choices here: <literal>s</literal> for Single  <footnote><para> There are several choices here: <literal>s</literal> for
1257  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
1258  Multiple binary, <literal>l</literal> for Library, <literal>k</literal> for  Multiple binary packages, <literal>l</literal> for Library package, <literal>k</literal> for
1259  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>
1260  for <systemitem role="package">cdbs</systemitem>.  This document focuses on the  for <systemitem role="package">cdbs</systemitem> package.  This document focuses on the
1261  use of the <systemitem role="package">debhelper</systemitem> package with the  use of the <command>dh</command> command (from the package
1262  <command>dh</command> command.  This document focuses on the use of the new  <systemitem role="package">debhelper</systemitem>) to create a single binary package,
1263  <command>dh</command> command for Single binary and touches on it for  but also touches on how to use it for arch-independent or
1264  Arch-Independent and Multiple binary.  The <systemitem role="package">cdbs</systemitem> package offers alternative package script  multiple binary packages.  The package
1265  infrastructure to the <command>dh</command> command and outside of the scope of  <systemitem role="package">cdbs</systemitem> offers an alternative packaging script
1266    infrastructure to the <command>dh</command> command and is outside the scope of
1267  this document.  </para> </footnote>  this document.  </para> </footnote>
1268  </para>  </para>
1269  <para>  <para>
1270  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
1271  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
1272  parent directory to accommodate the creation of the non-native Debian source  parent directory to accommodate the creation of the non-native Debian source
1273  package with the <filename>debian.tar.gz</filename> later.  package with the name <filename>debian.tar.gz</filename> later.
1274  </para>  </para>
1275  <screen>  <screen>
1276  $ cd ~/gentoo ; ls -F  $ cd ~/gentoo ; ls -F
# Line 1088  gentoo-0.9.12.tar.gz Line 1279  gentoo-0.9.12.tar.gz
1279  gentoo_0.9.12.orig.tar.gz  gentoo_0.9.12.orig.tar.gz
1280  </screen>  </screen>
1281  <para>  <para>
1282  Please note 2 key features in this  Please note two key features of this filename
1283  <filename>gentoo_0.9.12.orig.tar.gz</filename> file name:  <filename>gentoo_0.9.12.orig.tar.gz</filename>:
1284  </para>  </para>
1285  <itemizedlist>  <itemizedlist>
1286  <listitem>  <listitem>
1287  <para>  <para>
1288  Package name and version are separated by the <literal>_</literal>  Package name and version are separated by the character <literal>_</literal>
1289  (underscore).  (underscore).
1290  </para>  </para>
1291  </listitem>  </listitem>
1292  <listitem>  <listitem>
1293  <para>  <para>
1294  There is the <filename>.orig</filename> before the  The string <filename>.orig</filename> is inserted before the
1295  <filename>.tar.gz</filename>.  <filename>.tar.gz</filename>.
1296  </para>  </para>
1297  </listitem>  </listitem>
1298  </itemizedlist>  </itemizedlist>
1299  <para>  <para>
1300  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
1301  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
1302  that the packaging is not automatic process.  You need to modify the upstream  <xref linkend="dreq"/> and <xref linkend="dother"/>.  You should also understand
1303  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
1304  build Debian packages under the proper method as <xref linkend="build"/> ,  source for Debian (see <xref linkend="modify"/>).  After this, you need to
1305  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"/>),
1306    testing them (<xref linkend="checkit"/>), and uploading them (<xref linkend="upload"/>).
1307    All the steps will be explained.
1308  </para>  </para>
1309  <para>  <para>
1310  Once again, as a new maintainer you are discouraged from creating complicated  If you accidentally erased some template files while working on them, you can
1311  packages, e.g.,  recover them by running <command>dh_make</command> with the
1312  </para>  <literal>--addmissing</literal> option again in a Debian package source tree.
 <itemizedlist>  
 <listitem>  
 <para>  
 multiple binary packages,  
 </para>  
 </listitem>  
 <listitem>  
 <para>  
 library packages,  
 </para>  
 </listitem>  
 <listitem>  
 <para>  
 kernel module packages,  
 </para>  
 </listitem>  
 <listitem>  
 <para>  
 kernel patch packages,  
1313  </para>  </para>
 </listitem>  
 <listitem>  
1314  <para>  <para>
1315  the source file format being neither in <filename>tar.gz</filename> nor  Updating an existing package may get complicated since it may be using older
1316  <filename>tar.bz2</filename>, or  techniques.  While learning the basics, please stick to creating a fresh
1317  </para>  package; further explanations are given in <xref linkend="update"/>.
 </listitem>  
 <listitem>  
 <para>  
 the source tarball containing undistributable contents.  
1318  </para>  </para>
 </listitem>  
 </itemizedlist>  
1319  <para>  <para>
1320  It's not too hard, but it does require a bit more knowledge, so we won't  Please note that the source file does not need to contain any build system
1321  describe all of it here.  discussed in <xref linkend="simplemake"/> and <xref linkend="portable"/>.  It
1322    could be just a collection of graphics data etc.  Installation of files may be
1323    enabled by <systemitem role="package">debhelper</systemitem> configuration
1324    files such as <filename>debian/install</filename> (see
1325    <xref linkend="install"/>) only.
1326  </para>  </para>
1327    </section>
1328    <section id="native-dh-make"><title>Initial native Debian package</title>
1329  <para>  <para>
1330  If you accidentally erased some template files while working on them, you can  Debian native packages are simpler to manage if they contain source files you
1331  recover them by running <command>dh_make</command> with the  manage only for Debian, possibly only for local uses.  If you have source
1332  <literal>--addmissing</literal> option again in a Debian package source tree.  files in <filename>~/mypackage-1.0</filename>, you can create an initial native
1333    Debian package for it by issuing the <command>dh_make</command> command as
1334    follows.
1335  </para>  </para>
1336    <screen>
1337    $ cd ~/mypackage-1.0
1338    $ dh_make --native
1339    </screen>
1340  <para>  <para>
1341  Updating an existing package may get complicated since it may be using older  Then the <filename>debian</filename> directory and its contents are created
1342  techniques.  Please stick with fresh packaging cases for now to learn basics.  just like <xref linkend="non-native-dh-make"/>.  This does not create a tarball
1343  I will come back to explain it later in <xref linkend="update"/> .  since this is a native Debian package.  But that is the only difference.
1344    The rest of the packaging activities are practically the same.
1345  </para>  </para>
1346  </section>  </section>
1347  </chapter>  </chapter>
# Line 1172  Please note that there isn't space here Line 1351  Please note that there isn't space here
1351  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
1352  people often run across.  people often run across.
1353  </para>  </para>
1354  <section id="quiltrc"><title>Set up <command>quilt</command></title>  <section id="quiltrc"><title>Setting up <command>quilt</command></title>
1355  <para>  <para>
1356  The <command>quilt</command> program offers the basic method to record  The program <command>quilt</command> offers a basic method for recording
1357  modification to the source for the Debian packaging.  Since slightly different  modifications to the upstream source for Debian packaging.  It's
1358  default is desirable, let's create an alias <command>dquilt</command> for  useful to have a slightly customized default, so let's create an alias
1359  Debian packaging by adding the following line to <filename>~/.bashrc</filename>.  <command>dquilt</command> for Debian packaging by adding the following
1360    line to <filename>~/.bashrc</filename>.
1361  </para>  </para>
1362  <screen>  <screen>
1363  alias dquilt=quilt --quiltrc=~/.quiltrc-dpkg  alias dquilt="quilt --quiltrc=~/.quiltrc-dpkg"
1364  </screen>  </screen>
1365  <para>  <para>
1366  Then let's create <filename>~/.quiltrc-dpkg</filename> as follows.  Then let's create <filename>~/.quiltrc-dpkg</filename> as follows.
# Line 1188  Then let's create <filename>~/.quiltrc-d Line 1368  Then let's create <filename>~/.quiltrc-d
1368  <screen>  <screen>
1369  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
1370  if [ -d $d/debian ] &amp;&amp; [ -z $QUILT_PATCHES ]; then  if [ -d $d/debian ] &amp;&amp; [ -z $QUILT_PATCHES ]; then
1371      # Debian packaging case and unset $QUILT_PATCHES      # if in Debian packaging tree with unset $QUILT_PATCHES
1372      QUILT_PATCHES="debian/patches"      QUILT_PATCHES="debian/patches"
1373      QUILT_PATCH_OPTS="--reject-format=unified"      QUILT_PATCH_OPTS="--reject-format=unified"
1374      QUILT_DIFF_ARGS="-p ab --no-timestamps --no-index --color=auto"      QUILT_DIFF_ARGS="-p ab --no-timestamps --no-index --color=auto"
# Line 1200  fi Line 1380  fi
1380  <para>  <para>
1381  See <citerefentry> <refentrytitle>quilt</refentrytitle>  See <citerefentry> <refentrytitle>quilt</refentrytitle>
1382  <manvolnum>1</manvolnum> </citerefentry> and  <manvolnum>1</manvolnum> </citerefentry> and
1383  <ulink url="&quilt-pdf;">quilt.pdf</ulink> for how to use  <ulink url="&quilt-pdf;">quilt.pdf</ulink> on how to use
1384  <command>quilt</command>.  <command>quilt</command>.
1385  </para>  </para>
1386  </section>  </section>
1387  <section id="fixupstream"><title>Fixing upstream bug</title>  <section id="fixupstream"><title>Fixing upstream bugs</title>
1388  <para>  <para>
1389  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>
1390  file as follows where <literal>install: gentoo</literal> should have been  as follows where <literal>install: gentoo</literal> should have been
1391  <literal>install: gentoo-target</literal>.  <literal>install: gentoo-target</literal>.
1392  </para>  </para>
1393  <screen>  <screen>
# Line 1217  install: gentoo Line 1397  install: gentoo
1397          install gentoorc-example $(HOME)/.gentoorc          install gentoorc-example $(HOME)/.gentoorc
1398  </screen>  </screen>
1399  <para>  <para>
1400  Let's fix this and record this with the <command>dquilt</command> command as  Let's fix this and record it with the <command>dquilt</command> command as
1401  <filename>fix-gentoo-target.patch</filename>.  <footnote><para> The  <filename>fix-gentoo-target.patch</filename>.  <footnote><para> The
1402  <filename>debian/patches</filename> directory should exist now if you run  <filename>debian/patches</filename> directory should exist now if you ran
1403  <command>dh_make</command> as described before.  This example operation creates  <command>dh_make</command> as described before.  This example operation creates
1404  it just in case you are updating the existing package.  </para> </footnote>  it just in case you are updating an existing package.  </para> </footnote>
1405  </para>  </para>
1406  <screen>  <screen>
1407  $ mkdir debian/patches  $ mkdir debian/patches
# Line 1238  install: gentoo-target Line 1418  install: gentoo-target
1418          install gentoorc-example $(HOME)/.gentoorc          install gentoorc-example $(HOME)/.gentoorc
1419  </screen>  </screen>
1420  <para>  <para>
1421  Ask <command>dquilt</command> to refresh the patch to create  Ask <command>dquilt</command> to generate the patch to create
1422  <filename>debian/patches/fix-gentoo-target.patch</filename> and add its  <filename>debian/patches/fix-gentoo-target.patch</filename> and add its
1423  description following <ulink url="&dep3;">DEP-3: Patch Tagging Guidelines</ulink>.  description following <ulink url="&dep3;">DEP-3: Patch Tagging Guidelines</ulink>.
1424  </para>  </para>
# Line 1248  $ dquilt header -e Line 1428  $ dquilt header -e
1428  ... describe patch  ... describe patch
1429  </screen>  </screen>
1430  </section>  </section>
1431    <section id="destdir"><title>Installation of files to their destination</title>
 <section id="destdir"><title>Installation of files to the destination</title>  
1432  <para>  <para>
1433  Normally, programs install themselves in the <filename>/usr/local</filename>  Most third-party software installs itself in the <filename>/usr/local</filename>
1434  subdirectory.  Since it is reserved for system administrator's (or user's)  directory hierarchy.  On Debian this is reserved for private use
1435  private use, Debian packages must not use that directory but should use system  by the system administrator, so packages must not use directories such
1436  directories such as the <filename>/usr/bin</filename> subdirectory following  as <filename>/usr/local/bin</filename> but should instead use system
1437  the <ulink url="&fhs;">Filesystem Hierarchy Standard</ulink> (FHS).  directories such as <filename>/usr/bin</filename>, obeying the
1438    <ulink url="&fhs;">Filesystem Hierarchy Standard</ulink> (FHS).
1439  </para>  </para>
1440  <para>  <para>
1441  Normally, <citerefentry> <refentrytitle>make</refentrytitle>  Normally, <citerefentry> <refentrytitle>make</refentrytitle>
1442  <manvolnum>1</manvolnum> </citerefentry> is used to automate building the  <manvolnum>1</manvolnum> </citerefentry> is used to automate building the
1443  program and the execution of <literal>make install</literal> installs programs  program, and executing <literal>make install</literal> installs programs
1444  directly to the desired destination by the <literal>install</literal> target of  directly to the desired destination (following the
1445  the <filename>Makefile</filename> file.  In order for Debian to provide binary  <literal>install</literal> target in the
1446  packages, the build system installs programs to the file tree image created  <filename>Makefile</filename>).  In order for Debian to provide
1447  under a temporary directory instead to the actual destination.  pre-built installable packages, it modifies the build system to install
1448    programs into a file tree image created under a temporary directory
1449    instead of the actual destination.
1450  </para>  </para>
1451  <para>  <para>
1452  These 2 differences between (1) the normal program installation and (2) the  These two differences between normal program installation on one hand and the
1453  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
1454    <systemitem role="package">debhelper</systemitem> package through the
1455  <command>dh_auto_configure</command> and <command>dh_auto_install</command>  <command>dh_auto_configure</command> and <command>dh_auto_install</command>
1456  commands if the following conditions are met.  commands if the following conditions are met.
1457  </para>  </para>
1458  <itemizedlist>  <itemizedlist>
1459  <listitem>  <listitem>
1460  <para>  <para>
1461  The <filename>Makefile</filename> file follows the GNU conventions to support  The <filename>Makefile</filename> must follow GNU conventions and
1462  <literal>$(DESTDIR)</literal> variable.  support the <literal>$(DESTDIR)</literal> variable.
1463  <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>
1464  </para>  </para>
1465  </listitem>  </listitem>
1466  <listitem>  <listitem>
1467  <para>  <para>
1468  The source follows the Filesystem Hierarchy Standard (FHS).  The source must follow the Filesystem Hierarchy Standard (FHS).
1469  </para>  </para>
1470  </listitem>  </listitem>
1471  </itemizedlist>  </itemizedlist>
1472  <para>  <para>
1473  Programs that use GNU <command>autoconf</command>  Programs that use GNU <command>autoconf</command> follow the GNU conventions
1474  <emphasis>automatically</emphasis> follow the GNU conventions and their  automatically, so they can be trivial to package.  On the basis of
1475  packaging is almost <emphasis>automatic</emphasis>.  With this and other  this and other heuristics, it is estimated that the
1476  heuristics, the <systemitem role="package">debhelper</systemitem> package  <systemitem role="package">debhelper</systemitem> package will work for
1477  estimates that it works for about 90% of packages without making any intrusive  about 90% of packages without making any intrusive changes to their
1478  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.  
1479  </para>  </para>
1480  <para>  <para>
1481  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
1482  should make sure to support these <literal>$(DESTDIR)</literal> variable.  The  should be careful to support the <literal>$(DESTDIR)</literal>
1483  <literal>$(DESTDIR)</literal> variable is unset in it and is prepended to each  variable.  Although it is unset by default, the <literal>$(DESTDIR)</literal>
1484  file path used for the program installation.  The packaging script will set  variable is prepended to each file path used for the program
1485  <literal>$(DESTDIR)</literal> to the temporary directory.  installation.  The packaging script will set
1486    <literal>$(DESTDIR)</literal> to the temporary directory.
1487  </para>  </para>
1488  <para>  <para>
1489  The temporary directory used by the <command>dh_auto_install</command> command  For packages of the single binary type, the temporary directory used
1490  is chosen as <filename>debian/<replaceable>package</replaceable></filename> for  by the <command>dh_auto_install</command> command will be set to
1491  single binary packages.  <footnote><para> For multiple binary packages, the  <filename>debian/<replaceable>package</replaceable></filename>.
1492    <footnote><para> For packages of the multiple binary type, the
1493  <command>dh_auto_install</command> command uses <filename>debian/tmp</filename>  <command>dh_auto_install</command> command uses <filename>debian/tmp</filename>
1494  as the temporary directory while the <command>dh_install</command> command with  as the temporary directory while the <command>dh_install</command> command with
1495  the help of  the help of
1496  <filename>debian/<replaceable>package-1</replaceable>.install</filename> and  <filename>debian/<replaceable>package-1</replaceable>.install</filename> and
1497  <filename>debian/<replaceable>package-2</replaceable>.install</filename> files  <filename>debian/<replaceable>package-2</replaceable>.install</filename> files
1498  will split contents of <filename>debian/tmp</filename> into  will split the contents of <filename>debian/tmp</filename> into
1499  <filename>debian/<replaceable>package-1</replaceable></filename> and  <filename>debian/<replaceable>package-1</replaceable></filename> and
1500  <filename>debian/<replaceable>package-2</replaceable></filename> temporary  <filename>debian/<replaceable>package-2</replaceable></filename> temporary
1501  directories to create multiple binary <filename>*.deb</filename> packages.  directories, to create
1502    <filename><replaceable>package-1</replaceable>_*.deb</filename> and
1503    <filename><replaceable>package-2</replaceable>_*.deb</filename> binary
1504    packages.
1505  </para> </footnote> Everything that is contained in the temporary directory  </para> </footnote> Everything that is contained in the temporary directory
1506  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
1507  difference is that <command>dpkg</command> will be installing the files in the  difference is that <command>dpkg</command> will be installing the
1508  root directory.  files to paths relative to the root directory rather than your working
1509    directory.
1510  </para>  </para>
1511  <para>  <para>
1512  Bear in mind that even though your program installs in  Bear in mind that even though your program installs in
1513  <filename>debian/<replaceable>package</replaceable></filename>, it still needs  <filename>debian/<replaceable>package</replaceable></filename>, it still needs
1514  to behave correctly when placed in the root directory, i.e.  when installed  to behave correctly when installed from the <filename>.deb</filename>
1515  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
1516  system to hardcode strings like  system to hardcode strings like
1517  <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>
1518  into the package file.  into files in the package.
1519  </para>  </para>
1520  <para>  <para>
1521  Here's the relevant part of <systemitem role="package">gentoo</systemitem>'s  Here's the relevant part of <systemitem role="package">gentoo</systemitem>'s
1522  <filename>Makefile</filename> file <footnote><para> This is just an example to  <filename>Makefile</filename><footnote><para> This is just an example to
1523  show how the <filename>Makefile</filename> file should look like.  If the  show what a <filename>Makefile</filename> should look like.  If the
1524  <filename>Makefile</filename> file is created by the  <filename>Makefile</filename> is created by the
1525  <command>./configure</command> command, the correct way to fix this kind of  <command>./configure</command> command, the correct way to fix this kind of
1526  <filename>Makefile</filename> is to executed the <command>./configure</command>  <filename>Makefile</filename> is to execute <command>./configure</command>
1527  command from the <command>dh_auto_configure</command> command with default  from the <command>dh_auto_configure</command> command with default
1528  options including <literal>--prefix=/usr</literal>.  </para> </footnote>:  options including <literal>--prefix=/usr</literal>.  </para> </footnote>:
1529  </para>  </para>
1530  <screen>  <screen>
1531  # Where to put binary on 'make install'?  # Where to put binary executables on 'make install'?
1532  BIN     = /usr/local/bin  BIN     = /usr/local/bin
1533  # Where to put icons on 'make install'?  # Where to put icons on 'make install'?
1534  ICONS   = /usr/local/share/gentoo  ICONS   = /usr/local/share/gentoo
1535  </screen>  </screen>
1536  <para>  <para>
1537  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>.
1538  Change those paths to:  As explained above, that directory hierarchy is reserved for local use on
1539    Debian, so change those paths to:
1540  </para>  </para>
1541  <screen>  <screen>
1542  # Where to put binary on 'make install'?  # Where to put binary executables on 'make install'?
1543  BIN     = $(DESTDIR)/usr/bin  BIN     = $(DESTDIR)/usr/bin
1544  # Where to put icons on 'make install'?  # Where to put icons on 'make install'?
1545  ICONS   = $(DESTDIR)/usr/share/gentoo  ICONS   = $(DESTDIR)/usr/share/gentoo
1546  </screen>  </screen>
1547  <para>  <para>
1548  But why in that directory, and not some other?  Because Debian packages never  The exact locations that should be used for binaries, icons,
1549  install files beneath <filename>/usr/local</filename> -- that tree is reserved  documentation, etc. are specified in the Filesystem Hierarchy Standard
1550  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
1551  <filename>/usr</filename> instead.  your package.
 </para>  
 <para>  
 The more exact locations for binaries, icons, documentation etc.  are specified  
 in the Filesystem Hierarchy Standard (FHS).  I recommend you  
 browse it and read the sections that might concern your package.  
1552  </para>  </para>
1553  <para>  <para>
1554  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
1555  <filename>/usr/local/bin</filename>, the manual page in  <filename>/usr/local/bin</filename>, the manual page in
1556  <filename>/usr/share/man/man1</filename> instead of  <filename>/usr/share/man/man1</filename> instead of
1557  <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
1558  page mentioned in <systemitem role="package">gentoo</systemitem>'s  page mentioned in <systemitem role="package">gentoo</systemitem>'s
1559  <filename>Makefile</filename>, but since the Debian Policy requires that every  <filename>Makefile</filename>, but since Debian Policy requires that every
1560  program has one, we'll make one later and install it in  program has one, we'll make one later and install it in
1561  <filename>/usr/share/man/man1</filename>.  <filename>/usr/share/man/man1</filename>.
1562  </para>  </para>
# Line 1383  to fix them to use the right locations. Line 1567  to fix them to use the right locations.
1567  for?  You can find this out by issuing:  for?  You can find this out by issuing:
1568  </para>  </para>
1569  <screen>  <screen>
1570  $ grep -nr -e 'usr/local/lib' --include='*.[c|h]' .  $ grep -nr --include='*.[c|h]' -e 'usr/local/lib' .
1571  </screen>  </screen>
1572  <para>  <para>
1573  <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 1394  Edit those files and in those lines repl Line 1578  Edit those files and in those lines repl
1578  with <literal>usr/lib</literal>.  This can be done automatically as follows:  with <literal>usr/lib</literal>.  This can be done automatically as follows:
1579  </para>  </para>
1580  <screen>  <screen>
1581  $ vim '+argdo %s/usr\/local\/lib/usr\/lib/gce|update' +q \  $ sed -i -e 's#usr/local/lib#usr/lib#g' \
1582        $(find . -type f -name '*.[c|h]')        $(find . -type f -name '*.[c|h]')
1583  </screen>  </screen>
1584  <para>  <para>
1585  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:
1586  </para>  </para>
1587    <screen>
1588    $ vim '+argdo %s#usr/local/lib#usr/lib#gce|update' +q \
1589          $(find . -type f -name '*.[c|h]')
1590    </screen>
1591    
1592  <para>  <para>
1593  After that you should find the install target (search for line that starts with  Next you should find the <literal>install</literal> target (searching
1594  <literal>install:</literal>, that will usually work) and rename all references  for the line that starts with <literal>install:</literal> will usually
1595  to directories other than ones defined at the top of the  work) and rename all references to directories other than ones defined
1596  <filename>Makefile</filename>.  at the top of the <filename>Makefile</filename>.
1597  </para>  </para>
1598  <para>  <para>
1599  Before your upstream bug fix, <systemitem role="package">gentoo</systemitem>'s  Originally, <systemitem role="package">gentoo</systemitem>'s
1600  install target said:  install target said:
1601  </para>  </para>
1602  <screen>  <screen>
# Line 1417  install: gentoo-target Line 1606  install: gentoo-target
1606          install gentoorc-example $(HOME)/.gentoorc          install gentoorc-example $(HOME)/.gentoorc
1607  </screen>  </screen>
1608  <para>  <para>
1609  Let's fix this and record this with the <command>dquilt</command> command as  Let's fix this upstream bug and record it with the <command>dquilt</command> command as
1610  <filename>debian/patches/install.patch</filename>.  <filename>debian/patches/install.patch</filename>.
1611  </para>  </para>
1612  <screen>  <screen>
# Line 1425  $ dquilt new install.patch Line 1614  $ dquilt new install.patch
1614  $ dquilt add Makefile  $ dquilt add Makefile
1615  </screen>  </screen>
1616  <para>  <para>
1617  Let's change this for Debian package as following using the editor:  In your editor, change this for the Debian package as follows:
1618  </para>  </para>
1619  <screen>  <screen>
1620  install: gentoo-target  install: gentoo-target
# Line 1435  install: gentoo-target Line 1624  install: gentoo-target
1624          install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc          install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc
1625  </screen>  </screen>
1626  <para>  <para>
1627  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
1628  before the other commands in the rule.  The original  before the other commands in the rule.  The original
1629  <filename>Makefile</filename> didn't have it because usually the  <filename>Makefile</filename> didn't have it because usually
1630  <literal>/usr/local/bin</literal> and other directories already exist on the  <literal>/usr/local/bin</literal> and other directories already exist on the
1631  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
1632  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
1633  create each and every one of those directories.  create each and every one of those directories.
1634  </para>  </para>
1635  <para>  <para>
# Line 1452  of additional documentation that the ups Line 1641  of additional documentation that the ups
1641          cp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html          cp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html
1642  </screen>  </screen>
1643  <para>  <para>
1644  After careful check, if everything is fine, ask <command>dquilt</command> to  Check carefully, and if everything is okay, ask <command>dquilt</command> to
1645  refresh the patch to create <filename>debian/patches/install.patch</filename>  generate the patch to create <filename>debian/patches/install.patch</filename>
1646  and add its description.  and add its description.
1647  </para>  </para>
1648  <screen>  <screen>
# Line 1481  Debian specific packaging modification: Line 1670  Debian specific packaging modification:
1670  Whenever you make changes that are not specifically related to Debian package  Whenever you make changes that are not specifically related to Debian package
1671  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
1672  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
1673  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
1674  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!
1675  make them portable.  This will make your fixes much easier to apply.  Make them portable.  This will make your fixes much easier to apply.
1676  </para>  </para>
1677  <para>  <para>
1678  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 1494  upstream. Line 1683  upstream.
1683  <para>  <para>
1684  There is one other common problem: libraries are often different from platform  There is one other common problem: libraries are often different from platform
1685  to platform.  For example, a <filename>Makefile</filename> can contain a  to platform.  For example, a <filename>Makefile</filename> can contain a
1686  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
1687  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
1688  purpose.  purpose.
1689  </para>  </para>
1690  <para>  <para>
1691  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
1692  <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>:  
1693  </para>  </para>
1694  <screen>  <screen>
1695  LIBS = -lcurses -lsomething -lsomethingelse  LIBS = -lfoo -lbar
1696  </screen>  </screen>
1697  <para>  <para>
1698  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
1699  <literal>curses</literal> into <literal>ncurses</literal>.  doesn't exist and its equivalent is provided by the <literal>foo2</literal>
1700    library on the Debian system, you can fix this build problem as
1701    <filename>debian/patches/foo2.patch</filename> by changing
1702    <literal>foo</literal> into <literal>foo2</literal>.<footnote><para>If there
1703    are API changes from the <literal>foo</literal> library to the
1704    <literal>foo2</literal> library, required changes to the source code need to be
1705    made to match the new API.</para> </footnote>
1706  </para>  </para>
1707  <screen>  <screen>
1708  $ dquilt new ncurse.patch  $ dquilt new foo2.patch
1709  $ dquilt add Makefile  $ dquilt add Makefile
1710  $ sed -i -e s/-lcurses/-lncurses/g Makefile  $ sed -i -e 's/-lfoo/-lfoo2/g' Makefile
1711  $ dquilt refresh  $ dquilt refresh
1712  $ dquilt header -e  $ dquilt header -e
1713  ... describe patch  ... describe patch
# Line 1531  that we should edit in order to customiz Line 1722  that we should edit in order to customiz
1722  most important of them are <filename>control</filename>,  most important of them are <filename>control</filename>,
1723  <filename>changelog</filename>, <filename>copyright</filename> and  <filename>changelog</filename>, <filename>copyright</filename> and
1724  <filename>rules</filename>, which are required for all packages.  <filename>rules</filename>, which are required for all packages.
1725    <footnote><para>
1726    In this chapter, files in the <filename>debian</filename> directory are
1727    referred without preceding <filename>debian/</filename> for simplicity whenever
1728    they are obvious.
1729    </para></footnote>
1730  </para>  </para>
1731  <section id="control"><title><filename>control</filename> file</title>  <section id="control"><title><filename>control</filename> file</title>
1732  <para>  <para>
1733  This file contains various values which <command>dpkg</command>,  This file contains various values which <command>dpkg</command>,
1734  <command>dselect</command>, <command>apt-get</command>,  <command>dselect</command>, <command>apt-get</command>,
1735  <command>apt-cache</command>, <command>aptitude</command>, and other package  <command>apt-cache</command>, <command>aptitude</command>, and other package
1736  management tools will use to manage the package.  It is defined by the <ulink url="&policy-control;">Debian  management tools will use to manage the package.  It is defined by the
1737  Policy Manual, 5 'Control files and their fields'</ulink>.  <ulink url="&policy-control;">Debian Policy Manual, 5 "Control files and their fields"</ulink>.
1738  </para>  </para>
1739  <para>  <para>
1740  Here is the <filename>control</filename> file <command>dh_make</command>  Here is the <filename>control</filename> file <command>dh_make</command>
# Line 1585  for e-mail readers and daemons, <literal Line 1781  for e-mail readers and daemons, <literal
1781  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,
1782  and many more.  and many more.
1783  <footnote> <para>See  <footnote> <para>See
1784  <ulink url="&policy-subsections;">Debian Policy Manual, 2.4 'Sections'</ulink> and  <ulink url="&policy-subsections;">Debian Policy Manual, 2.4 "Sections"</ulink> and
1785  <ulink url="&sections-unstable;">List of sections in 'sid'</ulink>.</para>  <ulink url="&sections-unstable;">List of sections in <literal>sid</literal></ulink>.</para>
1786  </footnote>  </footnote>
1787  </para>  </para>
1788  <para>  <para>
# Line 1596  we can omit it.) Line 1792  we can omit it.)
1792  <para>  <para>
1793  Line 3 describes how important it is that the user installs this package.  Line 3 describes how important it is that the user installs this package.
1794  <footnote> <para>See  <footnote> <para>See
1795  <ulink url="&policy-priorities;">Debian Policy Manual, 2.5 'Priorities'</ulink>.  <ulink url="&policy-priorities;">Debian Policy Manual, 2.5 "Priorities"</ulink>.
1796  </para>  </para>
1797  </footnote>  </footnote>
1798  </para>  </para>
# Line 1635  you.  Avoid using commas, ampersands and Line 1831  you.  Avoid using commas, ampersands and
1831  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
1832  the <literal>Build-Depends</literal> field.  You can also have the  the <literal>Build-Depends</literal> field.  You can also have the
1833  <literal>Build-Depends-Indep</literal> field as an additional line, here.  <literal>Build-Depends-Indep</literal> field as an additional line, here.
1834  <footnote><para>See <ulink url="&policy-relationships;#s-sourcebinarydeps">Debian  <footnote><para>See
1835  Policy Manual, 7.7 'Relationships between source and binary packages -  <ulink url="&policy-relationships;#s-sourcebinarydeps">Debian Policy Manual, 7.7 "Relationships between source and binary packages - Build-Depends, Build-Depends-Indep, Build-Conflicts, Build-Conflicts-Indep"</ulink>.</para></footnote>
1836  Build-Depends, Build-Depends-Indep, Build-Conflicts,  Some packages like
 Build-Conflicts-Indep'</ulink>.</para></footnote>  Some packages like  
1837  <systemitem role="package">gcc</systemitem> and  <systemitem role="package">gcc</systemitem> and
1838  <systemitem role="package">make</systemitem> which are required by the  <systemitem role="package">make</systemitem> which are required by the
1839  <systemitem role="package">build-essential</systemitem> package are implied.  If you need  <systemitem role="package">build-essential</systemitem> package are implied.  If you need
1840  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.
1841  Multiple entries are separated with commas; read on for the explanation of  Multiple entries are separated with commas; read on for the explanation of
1842  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.
1843  </para>  </para>
1844  <itemizedlist>  <itemizedlist>
1845  <listitem>  <listitem>
# Line 1660  satisfy the Debian Policy requirement fo Line 1855  satisfy the Debian Policy requirement fo
1855  For source packages which have some binary packages with <literal>Architecture:  For source packages which have some binary packages with <literal>Architecture:
1856  any</literal>, they are rebuild by the autobuilder.  Since this autobuilder  any</literal>, they are rebuild by the autobuilder.  Since this autobuilder
1857  procedure runs <literal>debian/rules build</literal> in it while installing  procedure runs <literal>debian/rules build</literal> in it while installing
1858  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
1859  list practically all the required packages and the  list practically all the required packages and the
1860  <literal>Build-Depends-indep</literal> is rarely used.  <literal>Build-Depends-indep</literal> is rarely used.
1861  </para>  </para>
# Line 1763  these relations; if not, it will be expl Line 1958  these relations; if not, it will be expl
1958  <para>  <para>
1959  Here is a simplified description of package relationships.  Here is a simplified description of package relationships.
1960  <footnote><para>See  <footnote><para>See
1961  <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>.
1962  </para></footnote>  </para></footnote>
1963  </para>  </para>
1964  <itemizedlist>  <itemizedlist>
# Line 1896  substituting <literal>${shlibs:Depends}< Line 2091  substituting <literal>${shlibs:Depends}<
2091  </para>  </para>
2092  <para>  <para>
2093  <citerefentry> <refentrytitle>dh_perl</refentrytitle> <manvolnum>1</manvolnum>  <citerefentry> <refentrytitle>dh_perl</refentrytitle> <manvolnum>1</manvolnum>
2094  </citerefentry> calculates perl dependencies.  It generates a list of a  </citerefentry> calculates Perl dependencies.  It generates a list of a
2095  dependency on perl or perlapi for each binary package.  Such list is used for  dependency on <literal>perl</literal> or <literal>perlapi</literal> for each binary package.  Such list is used for
2096  substituting <literal>${perl:Depends}</literal>.  substituting <literal>${perl:Depends}</literal>.
2097  </para>  </para>
2098  <para>  <para>
# Line 1941  English.  Translations of these descript Line 2136  English.  Translations of these descript
2136  Let's insert <literal>Vcs-*</literal> fields to document the Version Control  Let's insert <literal>Vcs-*</literal> fields to document the Version Control
2137  System (VCS) location between line 6 and 7.  System (VCS) location between line 6 and 7.
2138  <footnote><para>See  <footnote><para>See
2139  <ulink url="&devref-bpp-vcs;">Developer's Reference, 6.2.5. 'Version Control System location'</ulink>.  <ulink url="&devref-bpp-vcs;">Debian Developer's Reference, 6.2.5. "Version Control System location"</ulink>.
2140  </para></footnote>  </para></footnote>
2141  Let's assume that the <systemitem role="package">gentoo</systemitem>  Let's assume that the <systemitem role="package">gentoo</systemitem>
2142  package has its VCS located in Debian Alioth Git Service at  package has its VCS located in Debian Alioth Git Service at
# Line 1988  Finally, here is the updated <filename>c Line 2183  Finally, here is the updated <filename>c
2183  <para>  <para>
2184  This file contains the information about package upstream resources, copyright  This file contains the information about package upstream resources, copyright
2185  and license information.  and license information.
2186  <ulink url="&policy-copyright;">Debian Policy Manual, 12.5 'Copyright information'</ulink>  <ulink url="&policy-copyright;">Debian Policy Manual, 12.5 "Copyright information"</ulink>
2187  dictates its content and  dictates its content and
2188  <ulink url="&dep5;">DEP-5: Machine-parseable debian/copyright</ulink>  <ulink url="&dep5;">DEP-5: Machine-parseable <filename>debian/copyright</filename></ulink>
2189  provides guidelines for its format.  provides guidelines for its format.
2190  </para>  </para>
2191  <para>  <para>
# Line 2058  debian-devel-announce: <ulink url="&howt Line 2253  debian-devel-announce: <ulink url="&howt
2253  <section id="changelog"><title><filename>changelog</filename> file</title>  <section id="changelog"><title><filename>changelog</filename> file</title>
2254  <para>  <para>
2255  This is a required file, which has a special format described in the  This is a required file, which has a special format described in the
2256  <ulink url="&policy-dpkgchangelog;">Debian Policy Manual, 4.4 'debian/changelog'</ulink>.  <ulink url="&policy-dpkgchangelog;">Debian Policy Manual, 4.4 "debian/changelog"</ulink>.
2257  This format is used by <command>dpkg</command> and other programs to obtain the  This format is used by <command>dpkg</command> and other programs to obtain the
2258  version number, revision, distribution and urgency of your package.  version number, revision, distribution and urgency of your package.
2259  </para>  </para>
# Line 2122  You will end up with something like this Line 2317  You will end up with something like this
2317  </para>  </para>
2318  <para>  <para>
2319  You can read more about updating the <filename>changelog</filename> file later  You can read more about updating the <filename>changelog</filename> file later
2320  in <xref linkend="update"/> .  in <xref linkend="update"/>.
2321  </para>  </para>
2322  </section>  </section>
2323  <section id="rules"><title><filename>rules</filename> file</title>  <section id="rules"><title><filename>rules</filename> file</title>
# Line 2139  is marked as executable. Line 2334  is marked as executable.
2334  Every <filename>rules</filename> file, as any other  Every <filename>rules</filename> file, as any other
2335  <filename>Makefile</filename>, consists of several targets and their rules  <filename>Makefile</filename>, consists of several targets and their rules
2336  specifying how to handle the source.  <ulink url="&policy-debianrules;">Debian  specifying how to handle the source.  <ulink url="&policy-debianrules;">Debian
2337  Policy Manual, 4.9 'Main building script: debian/rules'</ulink> explains its  Policy Manual, 4.9 "Main building script: debian/rules"</ulink> explains its
2338  details.  details.
2339  </para>  </para>
2340  <para>  <para>
# Line 2171  binary package under the <filename>debia Line 2366  binary package under the <filename>debia
2366  <literal>binary</literal> target: to create all binary packages (effectively  <literal>binary</literal> target: to create all binary packages (effectively
2367  combination of <literal>binary-arch</literal> and  combination of <literal>binary-arch</literal> and
2368  <literal>binary-indep</literal> targets).  (required)<footnote><para> This  <literal>binary-indep</literal> targets).  (required)<footnote><para> This
2369  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>
2370  </para>  </para>
2371  </listitem>  </listitem>
2372  <listitem>  <listitem>
# Line 2179  target is used by <literal>dpkg-buildpac Line 2374  target is used by <literal>dpkg-buildpac
2374  <literal>binary-arch</literal> target: to create arch-dependent  <literal>binary-arch</literal> target: to create arch-dependent
2375  (<literal>Architecture: any</literal>) binary packages in the parent directory.  (<literal>Architecture: any</literal>) binary packages in the parent directory.
2376  (required)<footnote><para> This target is used by <literal>dpkg-buildpackage  (required)<footnote><para> This target is used by <literal>dpkg-buildpackage
2377  -B</literal> as in <xref linkend="autobuilder"/> .  </para> </footnote>  -B</literal> as in <xref linkend="autobuilder"/>.  </para> </footnote>
2378  </para>  </para>
2379  </listitem>  </listitem>
2380  <listitem>  <listitem>
# Line 2244  It tells the operating system that this Line 2439  It tells the operating system that this
2439  <filename>/usr/bin/make</filename>.  <filename>/usr/bin/make</filename>.
2440  </para>  </para>
2441  <para>  <para>
2442  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.
2443  Then, the <command>dh</command> command will output which  Then, the <command>dh</command> command will output which
2444  <command>dh_*</command> commands are executed by the <command>dh</command>  <command>dh_*</command> commands are executed by the <command>dh</command>
2445  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 2266  complicated <filename>rules</filename> f Line 2461  complicated <filename>rules</filename> f
2461  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
2462  when it was initially packaged.  This new <command>dh</command> command is  when it was initially packaged.  This new <command>dh</command> command is
2463  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
2464  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
2465  package building process like the <systemitem role="package">cdbs</systemitem>  package building process like the <systemitem role="package">cdbs</systemitem>
2466  package.  </para> </footnote> The <command>dh</command> command is a wrapper  package.  </para> </footnote> The <command>dh</command> command is a wrapper
2467  script which runs appropriate sequences of <command>dh_*</command> programs  script which runs appropriate sequences of <command>dh_*</command> programs
# Line 2680  This installs <command>bash</command> co Line 2875  This installs <command>bash</command> co
2875  </listitem>  </listitem>
2876  </itemizedlist>  </itemizedlist>
2877  <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>  
2878  Many <command>dh_*</command> commands invoked by the new <command>dh</command>  Many <command>dh_*</command> commands invoked by the new <command>dh</command>
2879  command can be customized by the corresponding configuration files in the  command can be customized by the corresponding configuration files in the
2880  <filename>debian</filename> directory.  See <xref linkend="dother"/> and the  <filename>debian</filename> directory.  See <xref linkend="dother"/> and the
# Line 2797  possible. Line 2987  possible.
2987  <para>  <para>
2988  To control most of what <systemitem role="package">debhelper</systemitem> does  To control most of what <systemitem role="package">debhelper</systemitem> does
2989  while building the package, you put optional configuration files under the  while building the package, you put optional configuration files under the
2990  <filename>debian</filename> directory.  This chapter will make an overview of  <filename>debian</filename> directory.  This chapter will provide an overview of
2991  what each of these does and its format.  Please read <ulink url="&debian-policy;">Debian Policy  what each of these does and its format.  Please read the <ulink url="&debian-policy;">Debian Policy
2992  Manual</ulink> and <ulink url="&developers-reference;">Debian Developer's  Manual</ulink> and <ulink url="&developers-reference;">Debian Developer's
2993  Reference</ulink> for guidelines for the packaging.  Reference</ulink> for guidelines for packaging.
2994  </para>  </para>
2995  <para>  <para>
2996  The <command>dh_make</command> command will create some template configuration  The <command>dh_make</command> command will create some template configuration
# Line 2809  filenames suffixed by <literal>.ex</lite Line 2999  filenames suffixed by <literal>.ex</lite
2999  prefixed by the binary package name such as  prefixed by the binary package name such as
3000  <literal><replaceable>package</replaceable></literal>.  Take a look at all of  <literal><replaceable>package</replaceable></literal>.  Take a look at all of
3001  them.  them.
3002    <footnote><para>
3003    In this chapter, files in the <filename>debian</filename> directory are
3004    referred to without the preceding <filename>debian/</filename> for simplicity whenever
3005    they are obvious.
3006    </para></footnote>
3007  </para>  </para>
3008  <para>  <para>
3009  The <command>dh_make</command> command may not create some template  Some template configuration files for <systemitem role="package">debhelper</systemitem>
3010  configuration files for <systemitem role="package">debhelper</systemitem>.  In  may not be created by the <command>dh_make</command> command.  In
3011  such cases, you need to create them with the editor.  such cases, you need to create them with an editor.
3012  </para>  </para>
3013  <para>  <para>
3014  If you wish or need to activate any of those, please do the following.  If you wish or need to activate any of these, please do the following:
3015  </para>  </para>
3016  <itemizedlist>  <itemizedlist>
3017  <listitem>  <listitem>
3018  <para>  <para>
3019  rename template files by removing the <literal>.ex</literal> or  rename template files by removing the <literal>.ex</literal> or
3020  <literal>.EX</literal> suffix if the template files have one.  <literal>.EX</literal> suffix if they have one;
3021  </para>  </para>
3022  </listitem>  </listitem>
3023  <listitem>  <listitem>
3024  <para>  <para>
3025  rename the name of these configuration files using the actual binary package  rename the configuration files to use the actual binary package
3026  name in place of <literal><replaceable>package</replaceable></literal>.  name in place of <literal><replaceable>package</replaceable></literal>;
3027  </para>  </para>
3028  </listitem>  </listitem>
3029  <listitem>  <listitem>
3030  <para>  <para>
3031  modify template file contents to suit your needs.  modify template file contents to suit your needs;
3032  </para>  </para>
3033  </listitem>  </listitem>
3034  <listitem>  <listitem>
3035  <para>  <para>
3036  remove template files which you do not need.  remove template files which you do not need;
3037  </para>  </para>
3038  </listitem>  </listitem>
3039  <listitem>  <listitem>
3040  <para>  <para>
3041  modify the <filename>control</filename> file (see <xref linkend="control"/> ),  modify the <filename>control</filename> file (see <xref linkend="control"/>),
3042  if necessary.  if necessary;
3043  </para>  </para>
3044  </listitem>  </listitem>
3045  <listitem>  <listitem>
3046  <para>  <para>
3047  modify the <filename>rules</filename> file (see <xref linkend="rules"/> ), if  modify the <filename>rules</filename> file (see <xref linkend="rules"/>), if
3048  necessary.  necessary.
3049  </para>  </para>
3050  </listitem>  </listitem>
3051  </itemizedlist>  </itemizedlist>
3052  <para>  <para>
3053  Those <systemitem role="package">debhelper</systemitem> configuration files  Any <systemitem role="package">debhelper</systemitem> configuration files
3054  without <filename><replaceable>package</replaceable></filename> prefix such as  without a <filename><replaceable>package</replaceable></filename> prefix, such as
3055  <filename>install</filename> apply to the first binary package.  When there are  <filename>install</filename>, apply to the first binary package.  When there are
3056  many binary packages, their configurations can be specified by prefixing their  many binary packages, their configurations can be specified by prefixing their
3057  name to their configuration filenames such as  name to their configuration filenames such as
3058  <filename><replaceable>package-1</replaceable>.install</filename>,  <filename><replaceable>package-1</replaceable>.install</filename>,
3059  <filename><replaceable>package-2</replaceable>.install</filename>, etc.  <filename><replaceable>package-2</replaceable>.install</filename>, etc.
3060  </para>  </para>
3061  <section id="readme"><title><filename>README.Debian</filename> file</title>  <section id="readme"><title><filename>README.Debian</filename></title>
3062  <para>  <para>
3063  Any extra details or discrepancies between the original package and your Debian  Any extra details or discrepancies between the original package and your Debian
3064  version should be documented here.  version should be documented here.
3065  </para>  </para>
3066  <para>  <para>
3067  <command>dh_make</command> created a default one, this is what it looks like:  <command>dh_make</command> created a default one; this is what it looks like:
3068  </para>  </para>
3069  <screen>  <screen>
3070  gentoo for Debian  gentoo for Debian
# Line 2883  If you have nothing to be documented, re Line 3078  If you have nothing to be documented, re
3078  </citerefentry>.  </citerefentry>.
3079  </para>  </para>
3080  </section>  </section>
3081  <section id="compat"><title><filename>compat</filename> file</title>  <section id="compat"><title><filename>compat</filename></title>
3082  <para>  <para>
3083  The <filename>compat</filename> file defines the <systemitem role="package">debhelper</systemitem> compatibility level.  Currently, you  The <filename>compat</filename> file defines the <systemitem role="package">debhelper</systemitem> compatibility level.  Currently, you
3084  should set it to the <systemitem role="package">debhelper</systemitem> V7 by  should set it to the <systemitem role="package">debhelper</systemitem> v7 as
3085  the following.  follows:
3086  </para>  </para>
3087  <screen>  <screen>
3088  $ echo 7 &gt; debian/compat  $ echo 7 &gt; debian/compat
3089  </screen>  </screen>
3090  </section>  </section>
3091  <section id="conffiles"><title><filename>conffiles</filename> file</title>  <section id="conffiles"><title><filename>conffiles</filename></title>
3092  <para>  <para>
3093  One of the most annoying things about software is when you spend a great deal  One of the most annoying things about software is when you spend a great deal
3094  of time and effort customizing a program, only to have an upgrade stomp all  of time and effort customizing a program, only to have an upgrade stomp all
3095  over your changes.  Debian solves this problem by marking such configuration files as conffiles.  over your changes.  Debian solves this problem by marking such configuration files as conffiles.
3096  <footnote><para>See <citerefentry> <refentrytitle>dpkg</refentrytitle>  <footnote><para>See <citerefentry> <refentrytitle>dpkg</refentrytitle>
3097  <manvolnum>1</manvolnum> </citerefentry> and  <manvolnum>1</manvolnum> </citerefentry> and
3098  <ulink url="&policy-conffiles;">Debian Policy Manual 'D.2.5 Conffiles'</ulink>.  <ulink url="&policy-conffiles;">Debian Policy Manual "D.2.5 Conffiles"</ulink>.
3099  </para></footnote>  </para></footnote>
3100  When you upgrade a package, you'll be prompted whether you want to keep  When you upgrade a package, you'll be asked whether you want to keep
3101  your old configuration files or not.  your old configuration files or not.
3102  </para>  </para>
3103  <para>  <para>
3104  Since <systemitem role="package">debhelper</systemitem> V3, <citerefentry>  <citerefentry><refentrytitle>dh_installdeb</refentrytitle> <manvolnum>1</manvolnum>
3105  <refentrytitle>dh_installdeb</refentrytitle> <manvolnum>1</manvolnum>  </citerefentry> <emphasis>automatically</emphasis> flags any files under
 </citerefentry> will <emphasis>automatically</emphasis> flag any files under  
3106  the <filename>/etc</filename> directory as conffiles, so if your program only  the <filename>/etc</filename> directory as conffiles, so if your program only
3107  has conffiles there you do not need to specify them in this file.  For most  has conffiles there you do not need to specify them in this file.  For most
3108  package types, the only place there is (and should be conffiles) is under  package types, the only place conffiles should ever be is under
3109  <filename>/etc</filename> and so this file doesn't need to exist.  <filename>/etc</filename>, and so this file doesn't need to exist.
3110  </para>  </para>
3111  <para>  <para>
3112  If your program uses configuration files but also rewrites them on its own,  If your program uses configuration files but also rewrites them on its own,
3113  it's best not to make them as conffiles because <command>dpkg</command> will  it's best not to make them conffiles because <command>dpkg</command> will
3114  then prompt users to verify the changes all the time.  then prompt users to verify the changes all the time.
3115  </para>  </para>
3116  <para>  <para>
3117  If the program you're packaging requires every user to modify the configuration  If the program you're packaging requires every user to modify the configuration
3118  files in the <filename>/etc</filename> directory, there are 2 popular ways to  files in the <filename>/etc</filename> directory, there are two popular ways to
3119  make them not as conffiles to keep <command>dpkg</command> quiet.  arrange for them to not be conffiles, keeping <command>dpkg</command> quiet.
3120  </para>  </para>
3121  <itemizedlist>  <itemizedlist>
3122  <listitem>  <listitem>
3123  <para>  <para>
3124  You make a symlink under the <filename>/etc</filename> directory pointing to a  Create a symlink under the <filename>/etc</filename> directory pointing to a
3125  file under the <filename>/var</filename> directory generated by the  file under the <filename>/var</filename> directory generated by the
3126  <emphasis>maintainer scripts</emphasis>.  maintainer scripts.
3127  </para>  </para>
3128  </listitem>  </listitem>
3129  <listitem>  <listitem>
3130  <para>  <para>
3131  You make a file generated by the <emphasis>maintainer scripts</emphasis> under  Create a file generated by the maintainer scripts under the <filename>/etc</filename> directory.
 the <filename>/etc</filename> directory.  
3132  </para>  </para>
3133  </listitem>  </listitem>
3134  </itemizedlist>  </itemizedlist>
3135  <para>  <para>
3136  For more information on the <emphasis>maintainer scripts</emphasis>, see <xref linkend="maintscripts"/> .  For information on maintainer scripts, see <xref linkend="maintscripts"/>.
3137  </para>  </para>
3138  </section>  </section>
3139  <section id="crond"><title><filename><replaceable>package</replaceable>.cron.*</filename> files</title>  <section id="crond"><title><filename><replaceable>package</replaceable>.cron.*</filename></title>
3140  <para>  <para>
3141  If your package requires regularly scheduled tasks to operate properly, you can  If your package requires regularly scheduled tasks to operate properly, you can
3142  use this file to set it up.  You can either setup regular tasks that happen  use these files to set that up.  You can set up regular tasks that either happen
3143  hourly, daily, weekly or monthly or alternatively happen any other time that  hourly, daily, weekly, or monthly, or alternatively happen at any other time that
3144  you wish.  The filenames are:  you wish.  The filenames are:
3145  </para>  </para>
3146  <itemizedlist>  <itemizedlist>
3147  <listitem>  <listitem>
3148  <para>  <para>
3149  <filename>cron.hourly</filename> - Installed as  <filename><replaceable>package</replaceable>.cron.hourly</filename> - Installed as
3150  <filename>/etc/cron.hourly/<replaceable>package</replaceable></filename>: run  <filename>/etc/cron.hourly/<replaceable>package</replaceable></filename>; run
3151  once an hour every hour.  once an hour.
3152  </para>  </para>
3153  </listitem>  </listitem>
3154  <listitem>  <listitem>
3155  <para>  <para>
3156  <filename>cron.daily</filename> - Installed as  <filename><replaceable>package</replaceable>.cron.daily</filename> - Installed as
3157  <filename>/etc/cron.daily/<replaceable>package</replaceable></filename>: run  <filename>/etc/cron.daily/<replaceable>package</replaceable></filename>; run
3158  once a day, usually early morning.  once a day.
3159  </para>  </para>
3160  </listitem>  </listitem>
3161  <listitem>  <listitem>
3162  <para>  <para>
3163  <filename>cron.weekly</filename> - Installed as  <filename><replaceable>package</replaceable>.cron.weekly</filename> - Installed as
3164  <filename>/etc/cron.weekly/<replaceable>package</replaceable></filename>: run  <filename>/etc/cron.weekly/<replaceable>package</replaceable></filename>; run
3165  once a week, usually early Sunday morning.  once a week.
3166  </para>  </para>
3167  </listitem>  </listitem>
3168  <listitem>  <listitem>
3169  <para>  <para>
3170  <filename>cron.monthly</filename> - Installed as  <filename><replaceable>package</replaceable>.cron.monthly</filename> - Installed as
3171  <filename>/etc/cron.monthly/<replaceable>package</replaceable></filename>: run  <filename>/etc/cron.monthly/<replaceable>package</replaceable></filename>: run
3172  once a month, usually early morning on the first of the month.  once a month.
3173  </para>  </para>
3174  </listitem>  </listitem>
3175  <listitem>  <listitem>
3176  <para>  <para>
3177  <filename>cron.d</filename> - Installed as  <filename><replaceable>package</replaceable>.cron.d</filename> - Installed as
3178  <filename>/etc/cron.d/<replaceable>package</replaceable></filename>: for any  <filename>/etc/cron.d/<replaceable>package</replaceable></filename>: for any
3179  other time  other time.
3180  </para>  </para>
3181  </listitem>  </listitem>
3182  </itemizedlist>  </itemizedlist>
3183  <para>  <para>
3184  For the named files, the format of them is the shell script.  The different one  Most of these files are shell scripts, with the exception of
3185  is <filename><replaceable>package</replaceable>.cron.d</filename> which follows  <filename><replaceable>package</replaceable>.cron.d</filename> which follows
3186  the format of <citerefentry> <refentrytitle>crontab</refentrytitle>  the format of <citerefentry> <refentrytitle>crontab</refentrytitle>
3187  <manvolnum>5</manvolnum> </citerefentry>.  <manvolnum>5</manvolnum> </citerefentry>.
3188  </para>  </para>
3189  <para>  <para>
3190  Note that this doesn't include log rotation; for that, see <citerefentry>  No explicit <filename>cron.*</filename> file is needed to set up log rotation;
3191  <refentrytitle>dh_installlogrotate</refentrytitle> <manvolnum>1</manvolnum>  for that, see
3192  </citerefentry> and <citerefentry> <refentrytitle>logrotate</refentrytitle>  <citerefentry><refentrytitle>dh_installlogrotate</refentrytitle>
3193  <manvolnum>8</manvolnum> </citerefentry>.  <manvolnum>1</manvolnum></citerefentry> and
3194    <citerefentry><refentrytitle>logrotate</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
3195  </para>  </para>
3196  </section>  </section>
3197  <section id="dirs"><title><filename>dirs</filename> file</title>  <section id="dirs"><title><filename>dirs</filename></title>
3198  <para>  <para>
3199  This file specifies the directories which we need but the normal installation  This file specifies any directories which we need but which are not created by the normal installation
3200  procedure (<literal>make install DESTDIR=...</literal> invoked by  procedure (<literal>make install DESTDIR=...</literal> invoked by
3201  <literal>dh_auto_install</literal>) somehow doesn't create.  This generally  <literal>dh_auto_install</literal>).  This generally
3202  means there is a problem with the <filename>Makefile</filename>.  means there is a problem with the <filename>Makefile</filename>.
3203  </para>  </para>
3204  <para>  <para>
3205  Files listed in the <filename>install</filename> file doesn't need the  Files listed in an <filename>install</filename> file don't need their
3206  directories created first.  See <xref linkend="install"/> .  directories created first.  See <xref linkend="install"/>.
3207  </para>  </para>
3208  <para>  <para>
3209  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
3210  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
3211  the <filename>dirs</filename> file.  the <filename>dirs</filename> file.
3212  </para>  </para>
3213  </section>  </section>
3214  <section id="doc-base"><title><filename><replaceable>package</replaceable>.doc-base</filename> file</title>  <section id="doc-base"><title><filename><replaceable>package</replaceable>.doc-base</filename></title>
3215  <para>  <para>
3216  If your package has documentation other than manual pages and info docs, you  If your package has documentation other than manual and info pages, you
3217  should use the <systemitem role="package">doc-base</systemitem> file to  should use the <systemitem role="package">doc-base</systemitem> file to
3218  register it, so the user can find it with e.g.  <citerefentry>  register it, so the user can find it with e.g.  <citerefentry>
3219  <refentrytitle>dhelp</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>,  <refentrytitle>dhelp</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>,
3220  <citerefentry> <refentrytitle>dwww</refentrytitle> <manvolnum>1</manvolnum>  <citerefentry> <refentrytitle>dwww</refentrytitle> <manvolnum>1</manvolnum>
3221  </citerefentry> or <citerefentry> <refentrytitle>doccentral</refentrytitle>  </citerefentry>, or <citerefentry> <refentrytitle>doccentral</refentrytitle>
3222  <manvolnum>1</manvolnum> </citerefentry>.  <manvolnum>1</manvolnum> </citerefentry>.
3223  </para>  </para>
3224  <para>  <para>
# Line 3032  This usually includes HTML, PS and PDF f Line 3226  This usually includes HTML, PS and PDF f
3226  <filename>/usr/share/doc/<replaceable>packagename</replaceable>/</filename>.  <filename>/usr/share/doc/<replaceable>packagename</replaceable>/</filename>.
3227  </para>  </para>
3228  <para>  <para>
3229  This is how <systemitem role="package">gentoo</systemitem>'s doc-base file  This is what <systemitem role="package">gentoo</systemitem>'s doc-base file
3230  <filename>gentoo.doc-base</filename> looks like:  <filename>gentoo.doc-base</filename> looks like:
3231  </para>  </para>
3232  <screen>  <screen>
# Line 3052  For information on the file format, see Line 3246  For information on the file format, see
3246  manual, in <ulink url="&doc-base;">Debian doc-base Manual</ulink>.  manual, in <ulink url="&doc-base;">Debian doc-base Manual</ulink>.
3247  </para>  </para>
3248  <para>  <para>
3249  For more details on installing additional documentation, look in <xref linkend="destdir"/> .  For more details on installing additional documentation, look in <xref linkend="destdir"/>.
3250  </para>  </para>
3251  </section>  </section>
3252  <section id="docs"><title><filename>docs</filename> file</title>  <section id="docs"><title><filename>docs</filename></title>
3253  <para>  <para>
3254  This file specifies the file names of documentation files we can have  This file specifies the file names of documentation files we can have
3255  <citerefentry> <refentrytitle>dh_installdocs</refentrytitle>  <citerefentry> <refentrytitle>dh_installdocs</refentrytitle>
# Line 3068  directory that are called <filename>BUGS Line 3262  directory that are called <filename>BUGS
3262  <filename>README*</filename>, <filename>TODO</filename> etc.  <filename>README*</filename>, <filename>TODO</filename> etc.
3263  </para>  </para>
3264  <para>  <para>
3265  For <systemitem role="package">gentoo</systemitem>, I also included some other  For <systemitem role="package">gentoo</systemitem>, some other files
3266  files:  are also included:
3267  </para>  </para>
3268  <screen>  <screen>
3269  BUGS  BUGS
# Line 3081  README.gtkrc Line 3275  README.gtkrc
3275  TODO  TODO
3276  </screen>  </screen>
3277  </section>  </section>
3278  <section id="emacsen"><title><filename>emacsen-*</filename> file</title>  <section id="emacsen"><title><filename>emacsen-*</filename></title>
3279  <para>  <para>
3280  If your package supplies Emacs files that can be bytecompiled at package  If your package supplies Emacs files that can be bytecompiled at package
3281  installation time, you can use these files to set it up.  installation time, you can use these files to set it up.
# Line 3095  They are installed into the temporary di Line 3289  They are installed into the temporary di
3289  If you don't need these, remove them.  If you don't need these, remove them.
3290  </para>  </para>
3291  </section>  </section>
3292  <section id="examples"><title><filename><replaceable>package</replaceable>.examples</filename> file</title>  <section id="examples"><title><filename><replaceable>package</replaceable>.examples</filename></title>
3293  <para>  <para>
3294  The <citerefentry> <refentrytitle>dh_installexamples</refentrytitle>  The <citerefentry> <refentrytitle>dh_installexamples</refentrytitle>
3295  <manvolnum>1</manvolnum> </citerefentry> command installs files and directories  <manvolnum>1</manvolnum> </citerefentry> command installs files and directories
3296  listed in this file as example files.  listed in this file as example files.
3297  </para>  </para>
3298  </section>  </section>
3299  <section id="initd"><title><filename><replaceable>package</replaceable>.init</filename> and <filename><replaceable>package</replaceable>.default</filename> files</title>  <section id="initd"><title><filename><replaceable>package</replaceable>.init</filename> and <filename><replaceable>package</replaceable>.default</filename></title>
3300  <para>  <para>
3301  If your package is a daemon that needs to be run at the system start-up, you've  If your package is a daemon that needs to be run at system start-up, you've
3302  obviously disregarded my initial recommendation, haven't you?  :-)  obviously disregarded my initial recommendation, haven't you?  :-)
3303  </para>  </para>
3304  <para>  <para>
3305  The <filename><replaceable>package</replaceable>.init</filename> file is  The <filename><replaceable>package</replaceable>.init</filename> file is
3306  installed as the  installed as the
3307  <filename>/etc/init.d/<replaceable>package</replaceable></filename> script.  <filename>/etc/init.d/<replaceable>package</replaceable></filename> script
3308    which starts and stops the daemon.
3309  Its fairly generic skeleton template is provided by the  Its fairly generic skeleton template is provided by the
3310  <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
3311  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
# Line 3121  gets installed into the temporary direct Line 3316  gets installed into the temporary direct
3316  </para>  </para>
3317  <para>  <para>
3318  The <filename><replaceable>package</replaceable>.default</filename> file will  The <filename><replaceable>package</replaceable>.default</filename> file will
3319  be installed into  be installed as
3320  <filename>/etc/default/<replaceable>package</replaceable></filename>.  This  <filename>/etc/default/<replaceable>package</replaceable></filename>.  This
3321  file sets defaults that are sourced by the init script.  Most times this  file sets defaults that are sourced by the init script.  This
3322  default file is used to disable running a daemon, set some default flags or  <filename><replaceable>package</replaceable>.default</filename> file
3323  timeouts.  If your init script has certain <emphasis>settable</emphasis>  is most often used to disable running a daemon, or to set some default flags or
3324  features you want to install these into the default file, not the init script.  timeouts.  If your init script has certain configurable
3325    features, you can set them in the <filename><replaceable>package</replaceable>.default</filename> file,
3326    instead of in the init script itself.
3327  </para>  </para>
3328  <para>  <para>
3329  If your upstream program has an init file you can either use it or not.  If you  If your upstream program provides a file for the init script, you can either use it or not.  If you
3330  don't use their init.d script then create a new one in  don't use their init script then create a new one in
3331  <filename>debian/<replaceable>package</replaceable>.init</filename>.  However  <filename><replaceable>package</replaceable>.init</filename>.  However
3332  if the upstream init script looks fine and installs in the right place you  if the upstream init script looks fine and installs in the right place you
3333  still need to setup the <filename>rc*</filename> symlinks.  To do this you will  still need to set up the <filename>rc*</filename> symlinks.  To do this you will
3334  need to override <command>dh_installinit</command> in the  need to override <command>dh_installinit</command> in the
3335  <filename>rules</filename> file with the following lines:  <filename>rules</filename> file with the following lines:
3336  </para>  </para>
# Line 3145  override_dh_installinit: Line 3342  override_dh_installinit:
3342  If you don't need this, remove the files.  If you don't need this, remove the files.
3343  </para>  </para>
3344  </section>  </section>
3345  <section id="install"><title><filename>install</filename> file</title>  <section id="install"><title><filename>install</filename></title>
3346  <para>  <para>
3347  If there are files that need to be installed into your package but your  If there are files that need to be installed into your package but your
3348  standard <literal>make install</literal> won't do it, you put the filenames and  standard <literal>make install</literal> won't do it, put the filenames and
3349  destinations into this <filename>install</filename> file.  They are installed  destinations into this <filename>install</filename> file.  They are installed
3350  by <citerefentry> <refentrytitle>dh_install</refentrytitle>  by <citerefentry> <refentrytitle>dh_install</refentrytitle>
3351  <manvolnum>1</manvolnum> </citerefentry>.<footnote><para> This replaces the  <manvolnum>1</manvolnum> </citerefentry>.<footnote><para> This replaces the
# Line 3161  the <filename>docs</filename> file and n Line 3358  the <filename>docs</filename> file and n
3358  <para>  <para>
3359  This <filename>install</filename> file has one line per file installed, with  This <filename>install</filename> file has one line per file installed, with
3360  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
3361  the installation directory (relative to the install directory).  One example of  the installation directory (relative to the install directory).  One example of where this is used is if a binary <filename>src/<replaceable>bar</replaceable></filename> is left uninstalled; the
3362  where this is used is where a binary is forgotten to be installed, the  <filename>install</filename> file might look like:
 <filename>install</filename> file would look like:  
3363  </para>  </para>
3364  <screen>  <screen>
3365  src/foo/mybin usr/bin  src/<replaceable>bar</replaceable> usr/bin
3366  </screen>  </screen>
3367  <para>  <para>
3368  This will mean when this package is installed, there will be a binary file  This means when this package is installed, there will be a binary executable
3369  <filename>/usr/bin/mybin</filename>.  <filename>/usr/bin/<replaceable>bar</replaceable></filename>.
3370  </para>  </para>
3371  <para>  <para>
3372  Alternatively, this <filename>install</filename> can have the name of the file  Alternatively, this <filename>install</filename> can have the name of the file
3373  only without the installation directory when the relative directory path does  only without the installation directory when the relative directory path does
3374  not change.  This format is usually used for a large package that splits build  not change.  This format is usually used for a large package that splits the
3375  result into multiple binary packages using  output of its build into multiple binary packages using
3376  <filename><replaceable>package-1</replaceable>.install</filename>,  <filename><replaceable>package-1</replaceable>.install</filename>,
3377  <filename><replaceable>package-2</replaceable>.install</filename>, etc.  <filename><replaceable>package-2</replaceable>.install</filename>, etc.
3378  </para>  </para>
3379  <para>  <para>
3380  The <command>dh_install</command> command will fall back to look in  The <command>dh_install</command> command will fall back to looking in
3381  <filename>debian/tmp</filename> for files, if it doesn't find them in the  <filename>debian/tmp</filename> for files, if it doesn't find them in the
3382  current directory (or wherever you've told it to look using  current directory (or wherever you've told it to look using
3383  <literal>--sourcedir</literal>).  <literal>--sourcedir</literal>).
3384  </para>  </para>
3385  </section>  </section>
3386  <section id="info"><title><filename><replaceable>package</replaceable>.info</filename> file</title>  <section id="info"><title><filename><replaceable>package</replaceable>.info</filename></title>
3387  <para>  <para>
3388  If your package has info pages, you should install them using <citerefentry>  If your package has info pages, you should install them using <citerefentry>
3389  <refentrytitle>dh_installinfo</refentrytitle> <manvolnum>1</manvolnum>  <refentrytitle>dh_installinfo</refentrytitle> <manvolnum>1</manvolnum>
3390  </citerefentry> by listing them in the  </citerefentry> by listing them in a
3391  <filename><replaceable>package</replaceable>.info</filename> files.  <filename><replaceable>package</replaceable>.info</filename> file.
3392  </para>  </para>
3393  </section>  </section>
3394  <section id="lintian"><title><filename>{<replaceable>package</replaceable>.|source/}lintian-overrides</filename> files</title>  <section id="lintian"><title><filename>{<replaceable>package</replaceable>.,source/}lintian-overrides</filename></title>
3395  <para>  <para>
3396  If <systemitem role="package">lintian</systemitem> reports an erroneous  If <systemitem role="package">lintian</systemitem> reports an erroneous
3397  diagnostics for a case when the policy allows exceptions to some rule, you can  diagnostic for a case where Debian policy allows exceptions to some rule, you can
3398  use <filename><replaceable>package</replaceable>.lintian-overrides</filename>  use <filename><replaceable>package</replaceable>.lintian-overrides</filename>
3399  or <filename>source/lintian-overrides</filename> to quiet it.  Please read  or <filename>source/lintian-overrides</filename> to quieten it.  Please read
3400  <ulink url="&lintian-doc;">Lintian User's Manual</ulink> and refrain  <ulink url="&lintian-doc;">Lintian User's Manual</ulink> and refrain
3401  from abusing this.  from abusing this.
3402  </para>  </para>
3403  <para>  <para>
3404  <filename><replaceable>package</replaceable>.lintian-overrides</filename> is  <filename><replaceable>package</replaceable>.lintian-overrides</filename> is
3405  for the binary package named as <systemitem role="package"><replaceable>package</replaceable></systemitem> and is installed  for the binary package named <systemitem role="package"><replaceable>package</replaceable></systemitem> and is installed
3406  into  into
3407  <filename>usr/share/lintian/overrides/<replaceable>package</replaceable></filename>  <filename>usr/share/lintian/overrides/<replaceable>package</replaceable></filename>
3408  by the <command>dh_lintian</command> command.  by the <command>dh_lintian</command> command.
# Line 3216  by the <command>dh_lintian</command> com Line 3412  by the <command>dh_lintian</command> com
3412  is not installed.  is not installed.
3413  </para>  </para>
3414  </section>  </section>
3415  <section id="manpage"><title><filename>manpage.*</filename> files</title>  <section id="manpage"><title><filename>manpage.*</filename></title>
3416  <para>  <para>
3417  Your program(s) should have a manual page.  If they don't, you should create  Your program(s) should have a manual page.  If they don't, you should create
3418  them.  The <command>dh_make</command> command creates few template files for a  them.  The <command>dh_make</command> command creates some template files for
3419  manual page.  These need to be copied and edited for each command without its  manual pages.  These need to be copied and edited for each command missing its
3420  manual page.  Please make sure to remove unused templates.  manual page.  Please make sure to remove unused templates.
3421  </para>  </para>
3422  <section id="manpage1"><title><filename>manpage.1.ex</filename> file</title>  <section id="manpage1"><title><filename>manpage.1.ex</filename></title>
3423  <para>  <para>
3424  Manual pages are normally written in <citerefentry>  Manual pages are normally written in <citerefentry>
3425  <refentrytitle>nroff</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.  <refentrytitle>nroff</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>.
# Line 3233  The <filename>manpage.1.ex</filename> te Line 3429  The <filename>manpage.1.ex</filename> te
3429  manual page for a brief description of how to edit such a file.  manual page for a brief description of how to edit such a file.
3430  </para>  </para>
3431  <para>  <para>
3432  The final manual page file name should include the name of the program it is  The final manual page file name should give the name of the program it is
3433  documenting, so we will rename it from <literal>manpage</literal> to  documenting, so we will rename it from <literal>manpage</literal> to
3434  <literal>gentoo</literal>.  The file name also includes <literal>.1</literal>  <literal>gentoo</literal>.  The file name also includes <literal>.1</literal>
3435  as the first suffix, which means it's a manual page for a user command.  Be  as the first suffix, which means it's a manual page for a user command.  Be
3436  sure to verify that this section is indeed the correct one.  Here's a short  sure to verify that this section is indeed the correct one.  Here's a short
3437  list of manual page sections:  list of manual page sections:
3438  </para>  </para>
3439  <table id="manpage-sections" pgwide="0" frame="topbot" rowsep="1" colsep="1">  <informaltable id="manpage-sections" pgwide="0" frame="topbot" rowsep="1" colsep="1">
 <title>manual page sections</title>  
3440  <tgroup cols="3">  <tgroup cols="3">
3441    <colspec colwidth="8*" align="left"/> <colspec colwidth="24*" align="left"/> <colspec colwidth="40*" align="left"/>    <colspec colwidth="8*" align="left"/> <colspec colwidth="24*" align="left"/> <colspec colwidth="40*" align="left"/>
3442    <thead>    <thead>
# Line 3251  list of manual page sections: Line 3446  list of manual page sections:
3446      <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>
3447      <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>
3448      <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>
3449      <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>
3450      <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>
3451      <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>
3452      <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>
3453      <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>
3454      <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>
3455    </tbody>    </tbody>
3456  </tgroup>  </tgroup>
3457  </table>  </informaltable>
3458  <para>  <para>
3459  So <systemitem role="package">gentoo</systemitem>'s man page should be called  So <systemitem role="package">gentoo</systemitem>'s man page should be called
3460  <filename>gentoo.1</filename>.  If there was no <filename>gentoo.1</filename>  <filename>gentoo.1</filename>.  If there was no <filename>gentoo.1</filename>
3461  man page in the original source, you should create it by renaming the  man page in the original source, you should create it by renaming the
3462  <filename>manpage.1.ex</filename> template to <filename>gentoo.1</filename> and  <filename>manpage.1.ex</filename> template to <filename>gentoo.1</filename> and
3463  edit it by using information from the example and from upstream docs.  editing it using information from the example and from the upstream docs.
3464  </para>  </para>
3465  <para>  <para>
3466  You can use the <command>help2man</command> command to generate a man page out  You can use the <command>help2man</command> command to generate a man page out
3467  of <literal>--help</literal> and <literal>--version</literal> output of each  of the <literal>--help</literal> and <literal>--version</literal> output of each
3468  program, too.  <footnote><para> If the command is missing  program, too.  <footnote><para> Note that <command>help2man</command>'s
3469  <command>info</command> page but have documentation files in the  placeholder man page will claim that more detailed documentation is
3470  <filename>/usr/share/<replaceable>package</replaceable></filename> directory,  available in the info system. If the command is missing an
3471  you should manually edit generated the man page created by the  <command>info</command> page, you
3472    should manually edit the man page created by the
3473  <command>help2man</command> command.  </para> </footnote>  <command>help2man</command> command.  </para> </footnote>
3474  </para>  </para>
3475  </section>  </section>
3476  <section id="manpagesgml"><title><filename>manpage.sgml.ex</filename> file</title>  <section id="manpagesgml"><title><filename>manpage.sgml.ex</filename></title>
3477  <para>  <para>
3478  If on the other hand you prefer writing SGML instead of  If on the other hand you prefer writing SGML instead of
3479  <command>nroff</command>, you can use the <filename>manpage.sgml.ex</filename>  <command>nroff</command>, you can use the <filename>manpage.sgml.ex</filename>
# Line 3302  line in the <filename>control</filename> Line 3498  line in the <filename>control</filename>
3498  </listitem>  </listitem>
3499  <listitem>  <listitem>
3500  <para>  <para>
3501  add a <literal>override_dh_auto_build</literal> target to your  add an <literal>override_dh_auto_build</literal> target to your
3502  <filename>rules</filename> file:  <filename>rules</filename> file:
3503  </para>  </para>
3504  <screen>  <screen>
# Line 3313  override_dh_auto_build: Line 3509  override_dh_auto_build:
3509  </listitem>  </listitem>
3510  </itemizedlist>  </itemizedlist>
3511  </section>  </section>
3512  <section id="manpagexml"><title><filename>manpage.xml.ex</filename> file</title>  <section id="manpagexml"><title><filename>manpage.xml.ex</filename></title>
3513  <para>  <para>
3514  If you prefer XML over SGML, you can use the <literal>manpage.xml.ex</literal>  If you prefer XML over SGML, you can use the <literal>manpage.xml.ex</literal>
3515  template.  If you do this, you have to:  template.  If you do this, you have to:
# Line 3333  XSLT processor like <systemitem role="pa Line 3529  XSLT processor like <systemitem role="pa
3529  </listitem>  </listitem>
3530  <listitem>  <listitem>
3531  <para>  <para>
3532  add the <literal>docbook-xsl</literal>, <literal>docbook-xml</literal> and  add the <literal>docbook-xsl</literal>, <literal>docbook-xml</literal>, and
3533  <literal>xsltproc</literal> packages to the <literal>Build-Depends</literal>  <literal>xsltproc</literal> packages to the <literal>Build-Depends</literal>
3534  line in the <literal>control</literal> file  line in the <literal>control</literal> file
3535  </para>  </para>
3536  </listitem>  </listitem>
3537  <listitem>  <listitem>
3538  <para>  <para>
3539  add a <literal>override_dh_auto_build</literal> target to your  add an <literal>override_dh_auto_build</literal> target to your
3540  <filename>rules</filename> file:  <filename>rules</filename> file:
3541  </para>  </para>
3542  <screen>  <screen>
# Line 3362  override_dh_auto_build: Line 3558  override_dh_auto_build:
3558  <para>  <para>
3559  If your package has manual pages, you should install them using <citerefentry>  If your package has manual pages, you should install them using <citerefentry>
3560  <refentrytitle>dh_installman</refentrytitle> <manvolnum>1</manvolnum>  <refentrytitle>dh_installman</refentrytitle> <manvolnum>1</manvolnum>
3561  </citerefentry> by listing them in the  </citerefentry> by listing them in a
3562  <filename><replaceable>package</replaceable>.manpages</filename> files.  <filename><replaceable>package</replaceable>.manpages</filename> file.
3563  </para>  </para>
3564  <para>  <para>
3565  To install <filename>docs/gentoo.1</filename> for the <systemitem role="package">gentoo</systemitem> package as its manpage, you create a  To install <filename>docs/gentoo.1</filename> as a manpage for the <systemitem role="package">gentoo</systemitem> package, create a
3566  <filename>gentoo.manpages</filename> file as the following.  <filename>gentoo.manpages</filename> file as follows.
3567  </para>  </para>
3568  <screen>  <screen>
3569  docs/gentoo.1  docs/gentoo.1
3570  </screen>  </screen>
3571  </section>  </section>
3572  <section id="menu"><title><filename>menu</filename> file</title>  <section id="menu"><title><filename>menu</filename></title>
3573  <para>  <para>
3574  X Window System users usually have a window manager with a menu that can be  X Window System users usually have a window manager with a menu that can be
3575  customized to launch programs.  If they have installed the Debian <systemitem role="package">menu</systemitem> package, a set of menus for every program on  customized to launch programs.  If they have installed the Debian <systemitem role="package">menu</systemitem> package, a set of menus for every program on
# Line 3394  specifies what kind of interface the pro Line 3590  specifies what kind of interface the pro
3590  listed alternatives, e.g.  <literal>text</literal> or <literal>X11</literal>.  listed alternatives, e.g.  <literal>text</literal> or <literal>X11</literal>.
3591  </para>  </para>
3592  <para>  <para>
3593  The next is <literal>section</literal>, where the menu and submenu the entry  The next is the <literal>section</literal> that the menu and submenu entry
3594  should appear in.  should appear in.
3595  <footnote><para> The current list of sections is at  <footnote><para> The current list of sections is in
3596  <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>.
3597  There were a major reorganization of menu structure for <literal>squeeze</literal>.  There was a major reorganization of menu structure for <literal>squeeze</literal>.
3598  </para> </footnote>  </para> </footnote>
3599  </para>  </para>
3600  <para>  <para>
# Line 3425  You can also add other fields like <lite Line 3621  You can also add other fields like <lite
3621  </citerefentry>, <citerefentry> <refentrytitle>menufile</refentrytitle>  </citerefentry>, <citerefentry> <refentrytitle>menufile</refentrytitle>
3622  <manvolnum>5</manvolnum> </citerefentry>, <citerefentry>  <manvolnum>5</manvolnum> </citerefentry>, <citerefentry>
3623  <refentrytitle>update-menus</refentrytitle> <manvolnum>1</manvolnum>  <refentrytitle>update-menus</refentrytitle> <manvolnum>1</manvolnum>
3624  </citerefentry> and  </citerefentry>, and
3625  <ulink url="&menu-policy;">The Debian Menu sub-policy</ulink> for more  <ulink url="&policy-menu;">The Debian Menu sub-policy</ulink> for more
3626  information.  information.
3627  </para>  </para>
3628  </section>  </section>
3629  <section id="news"><title><filename>NEWS</filename> file</title>  <section id="news"><title><filename>NEWS</filename></title>
3630  <para>  <para>
3631  The <citerefentry> <refentrytitle>dh_installchangelogs</refentrytitle>  The <citerefentry> <refentrytitle>dh_installchangelogs</refentrytitle>
3632  <manvolnum>1</manvolnum> </citerefentry> command installs this.  <manvolnum>1</manvolnum> </citerefentry> command installs this.
3633  </para>  </para>
3634  </section>  </section>
3635  <section id="maintscripts"><title><filename>{post|pre}{inst|rm}</filename> files</title>  <section id="maintscripts"><title><filename>{pre,post}{inst,rm}</filename></title>
3636  <para>  <para>
3637  These <filename>postinst</filename>, <filename>preinst</filename>,  These <filename>postinst</filename>, <filename>preinst</filename>,
3638  <filename>postrm</filename>, and <filename>prerm</filename> files  <filename>postrm</filename>, and <filename>prerm</filename> files
3639  <footnote><para> Although I used Bash short hand expression to indicate these  <footnote><para> Despite this use of the <command>bash</command>
3640  files as <filename>{post|pre}{inst|rm}</filename> here, I recommend you to use  shorthand expression <filename>{pre,post}{inst,rm}</filename> to indicate these
3641  pure POSIX (non-Bash) shell for these <emphasis>maintainer scripts</emphasis>  filenames, you should use pure POSIX syntax for these maintainer scripts for
3642  as much as possible for the better compatibility.  </para> </footnote> are  compatibility with <command>dash</command> as the system shell.  </para> </footnote> are
3643  called <emphasis>maintainer scripts</emphasis>.  They are scripts which are put  called <emphasis>maintainer scripts</emphasis>.  They are scripts which are put
3644  in the control area of the package and run by <command>dpkg</command> when your  in the control area of the package and run by <command>dpkg</command> when your
3645  package is installed, upgraded or removed.  package is installed, upgraded, or removed.
3646  </para>  </para>
3647  <para>  <para>
3648  As a novice maintainer, you should avoid any manual editing of  As a novice maintainer, you should avoid any manual editing of
3649  <emphasis>maintainer scripts</emphasis> because they are problematic.  For more  maintainer scripts because they are problematic.  For more
3650  information look in the <ulink url="&policy-mantainerscripts;">Debian  information refer to the <ulink url="&policy-mantainerscripts;">Debian
3651  Policy Manual, 6 'Package maintainer scripts and installation  Policy Manual, 6 "Package maintainer scripts and installation
3652  procedure'</ulink>, and take a look at these example files provided by  procedure"</ulink>, and take a look at the example files provided by
3653  <command>dh_make</command>.  <command>dh_make</command>.
3654  </para>  </para>
3655  <para>  <para>
3656  If you did not listen to me and made your custom <emphasis>maintainer  If you did not listen to me and have created custom maintainer
3657  scripts</emphasis> for a package, you should make sure to test them not only  scripts for a package, you should make sure to test them not only
3658  for <emphasis role="strong">install</emphasis> and <emphasis role="strong">upgrade</emphasis> but also for <emphasis role="strong">remove</emphasis> and <emphasis role="strong">purge</emphasis>.  for <emphasis role="strong">install</emphasis> and
3659    <emphasis role="strong">upgrade</emphasis> but also for
3660    <emphasis role="strong">remove</emphasis> and
3661    <emphasis role="strong">purge</emphasis>.
3662  </para>  </para>
3663  <para>  <para>
3664  Upgrades to the new version should be silent and non-intrusive (existing users  Upgrades to the new version should be silent and non-intrusive (existing users
3665  should not notice the upgrade except by discovering that old bugs have been  should not notice the upgrade except by discovering that old bugs have been
3666  fixed and there perhaps are new features).  fixed and perhaps that there are new features).
3667  </para>  </para>
3668  <para>  <para>
3669  When the upgrade is necessarily intrusive (eg., config files scattered through  When the upgrade is necessarily intrusive (eg., config files scattered through
3670  various home directories with totally different structure), you may consider to  various home directories with totally different structure), you may
3671  set package to the safe default (e.g., disabled service) and provide proper  consider as the last resort switching the package to a safe fallback state
3672  documentations required by the policy (<filename>README.Debian</filename> and  (e.g., disabling a service) and providing the proper documentation
3673  <filename>NEWS.Debian</filename>) as the last resort.  Don't bother user with  required by policy (<filename>README.Debian</filename> and
3674  the <command>debconf</command> note invoked from these <emphasis>maintainer  <filename>NEWS.Debian</filename>).  Don't bother the user with
3675  scripts</emphasis> for upgrades.  <command>debconf</command> notes invoked from these maintainer scripts
3676    for upgrades.
3677  </para>  </para>
3678  <para>  <para>
3679  The <systemitem role="package">ucf</systemitem> package provides  The <systemitem role="package">ucf</systemitem> package provides a
3680  <emphasis>conffile-like</emphasis> handling infrastructure to preserve user  <emphasis>conffile-like</emphasis> handling infrastructure to preserve user
3681  changes for files that may not be labeled <emphasis>conffiles</emphasis> such  changes for files that may not be labeled as <emphasis>conffiles</emphasis> such
3682  as ones managed by the <emphasis>maintainer scripts</emphasis>.  This should  as those managed by the maintainer scripts.  This should
3683  minimize issues associated with them.  minimize issues associated with them.
3684  </para>  </para>
3685  <para>  <para>
3686  These <emphasis>maintainer scripts</emphasis> are the Debian enhancements that  These maintainer scripts are among the Debian enhancements that
3687  explain <emphasis role="strong">why people choose Debian</emphasis>.  You must  explain <emphasis role="strong">why people choose Debian</emphasis>.  You must
3688  be very careful not to annoy them with these.  be very careful not to turn them into a source of annoyance.
3689  </para>  </para>
3690  </section>  </section>
3691  <section id="todo"><title><filename>TODO</filename> file</title>  <section id="todo"><title><filename>TODO</filename></title>
3692  <para>  <para>
3693  The <citerefentry> <refentrytitle>dh_installdocs</refentrytitle>  The <citerefentry> <refentrytitle>dh_installdocs</refentrytitle>
3694  <manvolnum>1</manvolnum> </citerefentry> command installs this.  <manvolnum>1</manvolnum> </citerefentry> command installs this.
3695  </para>  </para>
3696  </section>  </section>
3697  <section id="watch"><title><filename>watch</filename> file</title>  <section id="watch"><title><filename>watch</filename></title>
3698  <para>  <para>
3699  The <filename>watch</filename> file format is documented in the <citerefentry>  The <filename>watch</filename> file format is documented in the <citerefentry>
3700  <refentrytitle>uscan</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>  <refentrytitle>uscan</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>
3701  manpage.  The <filename>watch</filename> file configures the  manpage.  The <filename>watch</filename> file configures the
3702  <command>uscan</command> program (in the <systemitem role="package">devscripts</systemitem> package) to watch the site where you  <command>uscan</command> program (in the <systemitem role="package">devscripts</systemitem> package) to watch the site where you
3703  originally got the source from.  This is also used by <ulink url="&dehs;">Debian External Health Status (DEHS)</ulink>.  originally got the source from.  This is also used by the
3704    <ulink url="&dehs;">Debian External Health Status (DEHS)</ulink> service.
3705  </para>  </para>
3706  <para>  <para>
3707  Here's what I put in it:  Here are its contents:
3708  </para>  </para>
3709  <screen>  <screen>
3710  # watch control file for uscan  # watch control file for uscan
# Line 3511  version=3 Line 3712  version=3
3712  &sf-net;/gentoo/gentoo-(.+)\.tar\.gz debian uupdate  &sf-net;/gentoo/gentoo-(.+)\.tar\.gz debian uupdate
3713  </screen>  </screen>
3714  <para>  <para>
3715  Normally with this <filename>watch</filename> file, the URL at  Normally with a <filename>watch</filename> file, the URL at
3716  <literal>&sf-net;/gentoo</literal> is downloaded and searched for links of  <literal>&sf-net;/gentoo</literal> is downloaded and searched for links of
3717  the form <literal>&lt;a href=...&gt;</literal>.  The base name (just the part  the form <literal>&lt;a href=...&gt;</literal>.  The basename (just the part
3718  after the final <literal>/</literal>) of these linked URLs are matched against  after the final <literal>/</literal>) of each linked URL is compared against
3719  Perl regular expression (see <citerefentry> <refentrytitle>perlre</refentrytitle>  the Perl regular expression pattern (see <citerefentry> <refentrytitle>perlre</refentrytitle>
3720  <manvolnum>1</manvolnum> </citerefentry>) pattern  <manvolnum>1</manvolnum> </citerefentry>)
3721  <literal>gentoo-(.+)\.tar\.gz</literal>.  Out of matched files, the file with  <literal>gentoo-(.+)\.tar\.gz</literal>.  Out of the files that match, the one with
3722  the greatest version number is downloaded and the <command>uupdate</command>  the greatest version number is downloaded and the <command>uupdate</command>
3723  program is run to create the updated source tree from them.  program is run to create an updated source tree.
3724  </para>  </para>
3725  <para>  <para>
3726  Although this is true for other sites, the SourceForge download service at  Although this is true for other sites, the SourceForge download service at
3727  <ulink url="&sf-net;"/> is an exception.  When the  <ulink url="&sf-net;"/> is an exception.  When the
3728  <filename>watch</filename> file has an URL matching with the Perl regexp  <filename>watch</filename> file has an URL matching the Perl regexp
3729  <literal>^http://sf\.net/</literal>, the <command>uscan</command> program  <literal>^http://sf\.net/</literal>, the <command>uscan</command> program
3730  substitutes it with <literal>&qa-do;watch/sf.php/</literal> and  replaces it with <literal>&qa-do;watch/sf.php/</literal> and
3731  then applies this rule.  The URL redirector service at this <ulink url="&qa-do;"/> is designed to offer  then applies this rule.  The URL redirector service at <ulink url="&qa-do;"/> is designed to offer
3732  a stable redirect service to the desired file for the  a stable redirect service to the desired file for any
3733  <filename>watch</filename> file having  <filename>watch</filename> pattern of the form
3734  <literal>&sf-net;/<replaceable>project</replaceable>/<replaceable>tar-name</replaceable>-(.+)\.tar\.gz</literal>.  <literal>&sf-net;/<replaceable>project</replaceable>/<replaceable>tar-name</replaceable>-(.+)\.tar\.gz</literal>.
3735  This solves issues related to the periodically changing URL there.  This solves issues related to periodically changing SourceForge URLs.
3736  </para>  </para>
3737  </section>  </section>
3738  <section id="sourcef"><title><filename>source/format</filename> file</title>  <section id="sourcef"><title><filename>source/format</filename></title>
3739  <para>  <para>
3740  In the <filename>debian/source/format</filename> file, there should be a single  In the <filename>debian/source/format</filename> file, there should be a single
3741  line indicating the desired format for the source package (check <citerefentry>  line indicating the desired format for the source package (check <citerefentry>
# Line 3558  should say either: Line 3759  should say either:
3759  The newer <literal>3.0 (quilt)</literal> source format records modifications in  The newer <literal>3.0 (quilt)</literal> source format records modifications in
3760  a <command>quilt</command> patch series within  a <command>quilt</command> patch series within
3761  <filename>debian/patches</filename>.  Those changes are then automatically  <filename>debian/patches</filename>.  Those changes are then automatically
3762  applied during extraction of the source package.  <footnote><para> See <ulink url="&debsrc3;">DebSrc3.0</ulink> for the  applied during extraction of the source package.  <footnote><para> See
3763  summary information concerning the switch to the new <literal>3.0  <ulink url="&debsrc3;">DebSrc3.0</ulink> for a summary on the switch to the new <literal>3.0
3764  (quilt)</literal> and <literal>3.0 (native)</literal> source formats.  </para>  (quilt)</literal> and <literal>3.0 (native)</literal> source formats.  </para>
3765  </footnote> The Debian modifications are simply stored in a  </footnote> The Debian modifications are simply stored in a
3766  <filename>debian.tar.gz</filename> archive containing all files under the  <filename>debian.tar.gz</filename> archive containing all files under the
3767  <filename>debian</filename> directory.  This new format supports inclusion of  <filename>debian</filename> directory.  This new format supports inclusion of
3768  binary files such as PNG icons by the package maintainer without requiring  binary files such as PNG icons by the package maintainer without requiring
3769  tricks.  <footnote><para> Actually, this new format also supports multiple  tricks.  <footnote><para>Actually, this new format also supports multiple
3770  upstream tarballs and more compression methods.  These are beyond the scope of  upstream tarballs and more compression methods.  These are beyond the scope of
3771  this document.  </para> </footnote>  this document.</para> </footnote>
3772  </para>  </para>
3773  <para>  <para>
3774  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 3576  When <command>dpkg-source</command> extr Line 3777  When <command>dpkg-source</command> extr
3777  the end of the extraction with the <literal>--skip-patches</literal> option.  the end of the extraction with the <literal>--skip-patches</literal> option.
3778  </para>  </para>
3779  </section>  </section>
3780  <section id="sourcel"><title><filename>source/local-options</filename> file</title>  <section id="sourcel"><title><filename>source/local-options</filename></title>
3781  <para>  <para>
3782  When you want to manage Debian packaging activities under a VCS, you typically  When you want to manage Debian packaging activities under a VCS, you typically
3783  create one branch (e.g.  <literal>upstream</literal>) tracking the upstream  create one branch (e.g.  <literal>upstream</literal>) tracking the upstream
# Line 3601  unapply-patches Line 3802  unapply-patches
3802  abort-on-upstream-changes  abort-on-upstream-changes
3803  </screen>  </screen>
3804  </section>  </section>
3805  <section id="sourceopt"><title><filename>source/options</filename> file</title>  <section id="sourceopt"><title><filename>source/options</filename></title>
3806  <para>  <para>
3807  The autogenerated files in the source tree can be quite annoying for packaging  The autogenerated files in the source tree can be quite annoying for packaging
3808  since they generate meaningless large patch files.  There are custom modules  since they generate meaningless large patch files.  There are custom modules
# Line 3609  such as <command>dh_autoreconf</command> Line 3810  such as <command>dh_autoreconf</command>
3810  <xref linkend="customrules"/>.  <xref linkend="customrules"/>.
3811  </para>  </para>
3812  <para>  <para>
3813  You can provide a Perl regular expression argument to the  You can provide a Perl regular expression to the
3814  <literal>--extend-diff-ignore</literal> option of <citerefentry>  <literal>--extend-diff-ignore</literal> option argument of <citerefentry>
3815  <refentrytitle>dpkg-source</refentrytitle><manvolnum>1</manvolnum>  <refentrytitle>dpkg-source</refentrytitle><manvolnum>1</manvolnum>
3816  </citerefentry> to ignore changes made to the autogenerated files while  </citerefentry> to ignore changes made to the autogenerated files while
3817  creating the source package.  creating the source package.
3818  </para>  </para>
3819  <para>  <para>
3820  You can store such <command>dpkg-source</command> option argument in the  As a general solution to address this problem of the autogenerated files,
3821  <filename>source/options</filename> file of the source package as the generic  you can store such a <command>dpkg-source</command> option argument in the
3822  solution to address this problem of the autogenerated files.  The following  <filename>source/options</filename> file of the source package.  The following
3823  will skip creating patch files for <filename>config.sub</filename>  will skip creating patch files for <filename>config.sub</filename>,
3824  <filename>config.guess</filename> and <filename>Makefile</filename>.  <filename>config.guess</filename>, and <filename>Makefile</filename>.
3825  </para>  </para>
3826  <screen>  <screen>
3827  extend-diff-ignore = "(^|/)(config\.sub|config\.guess|Makefile)$"  extend-diff-ignore = "(^|/)(config\.sub|config\.guess|Makefile)$"
3828  </screen>  </screen>
3829  </section>  </section>
3830  <section id="patches"><title><filename>patches/*</filename> files</title>  <section id="patches"><title><filename>patches/*</filename></title>
3831  <para>  <para>
3832  The old <literal>1.0</literal> source format created a single large  The old <literal>1.0</literal> source format created a single large
3833  <filename>diff.gz</filename> file which contains package maintenance files in  <filename>diff.gz</filename> file containing package maintenance files in
3834  <filename>debian</filename> and patch files to the source.  Such a package is a  <filename>debian</filename> and patch files for the source.  Such a package is a
3835  bit cumbersome to inspect and understand for each source tree modification  bit cumbersome to inspect and understand for each source tree modification
3836  later.  This is not so nice.  later.  This is not so nice.
3837  </para>  </para>
3838  <para>  <para>
3839  The newer <literal>3.0 (quilt)</literal> source format stores patches in  The newer <literal>3.0 (quilt)</literal> source format stores patches in
3840  <filename>debian/patches/*</filename> files using the <command>quilt</command>  <filename>debian/patches/*</filename> files using the <command>quilt</command>
3841  command.  These patches and other package data which are all constrained under  command.  These patches and other package data which are all contained under
3842  the <filename>debian</filename> directory are packaged as the  the <filename>debian</filename> directory are packaged as the
3843  <filename>debian.tar.gz</filename> file.  Since the  <filename>debian.tar.gz</filename> file.  Since the
3844  <command>dpkg-source</command> command can handle <command>quilt</command>  <command>dpkg-source</command> command can handle <command>quilt</command>
3845  formatted patch data in the <literal>3.0 (quilt)</literal> source without the  formatted patch data in the <literal>3.0 (quilt)</literal> source without the
3846  <systemitem role="package">quilt</systemitem> package, it does not need to  <systemitem role="package">quilt</systemitem> package, it does not need a
3847  <literal>Build-Depends</literal> on the <systemitem role="package">quilt</systemitem> package.  <footnote><para> Several methods  <literal>Build-Depends</literal> on <systemitem role="package">quilt</systemitem>.
3848  for the patch set maintenance have been proposed and are in use with Debian  <footnote><para> Several methods of patch set maintenance have been proposed and are in use for Debian
3849  packages.  The <command>quilt</command> system is the preferred maintenance  packages.  The <command>quilt</command> system is the preferred maintenance
3850  system in use.  Other ones are <command>dpatch</command>,  system in use.  Others include <command>dpatch</command>,
3851  <command>dbs</command>, <command>cdbs</command>, etc.  Many of these keep such  <command>dbs</command>, and <command>cdbs</command>.  Many of these keep such
3852  patches as <filename>debian/patches/*</filename> files.  </para> </footnote>  patches as <filename>debian/patches/*</filename> files.  </para> </footnote>
3853  </para>  </para>
3854  <para>  <para>
# Line 3656  The <command>quilt</command> command is Line 3857  The <command>quilt</command> command is
3857  It records modifications to the source as a stack of <literal>-p1</literal>  It records modifications to the source as a stack of <literal>-p1</literal>
3858  patch files in the <filename>debian/patches</filename> directory and the source  patch files in the <filename>debian/patches</filename> directory and the source
3859  tree is untouched outside of the <filename>debian</filename> directory.  The  tree is untouched outside of the <filename>debian</filename> directory.  The
3860  order of these patches are recorded in the  order of these patches is recorded in the
3861  <filename>debian/patches/series</filename> file.  You can apply (=push),  <filename>debian/patches/series</filename> file.  You can apply (=push),
3862  un-apply (=pop), and refresh patches easily.  <footnote><para> If you are  un-apply (=pop), and refresh patches easily.  <footnote><para> If you are
3863  asking a sponsor to upload your package, this kind of clear separation and  asking a sponsor to upload your package, this kind of clear separation and
3864  documentation of your changes are very important to expedite the package review  documentation of your changes is very important to expedite the package review
3865  by your sponsor.  </para> </footnote>  by your sponsor.  </para> </footnote>
3866  </para>  </para>
3867  <para>  <para>
3868  For <xref linkend="modify"/> , we created 3 patches in  For <xref linkend="modify"/>, we created three patches in
3869  <filename>debian/patches</filename>.  <filename>debian/patches</filename>.
3870  </para>  </para>
3871  <para>  <para>
3872  Since Debian patches are located in <filename>debian/patches</filename>, please  Since Debian patches are located in <filename>debian/patches</filename>, please
3873  make sure to setup the <command>dquilt</command> command properly as described  make sure to set up the <command>dquilt</command> command properly as described
3874  in <xref linkend="quiltrc"/> .  in <xref linkend="quiltrc"/>.
3875  </para>  </para>
3876  <para>  <para>
3877  When someone (including yourself) provides you with a patch  When anyone (including yourself) provides a patch
3878  <filename><replaceable>foo</replaceable>.patch</filename> to the source later,  <filename><replaceable>foo</replaceable>.patch</filename> to the source later,
3879  then the modification of a <literal>3.0 (quilt)</literal> source package is  modifying a <literal>3.0 (quilt)</literal> source package is
3880  quite simple:  quite simple:
3881  </para>  </para>
3882  <screen>  <screen>
# Line 3689  $ dquilt header -e Line 3890  $ dquilt header -e
3890  </screen>  </screen>
3891  <para>  <para>
3892  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
3893  must be <emphasis>fuzz</emphasis> free.  You should ensure it as <literal>dquilt  must be <emphasis>fuzz</emphasis> free.  You can ensure this with <literal>dquilt
3894  pop -a; while dquilt push; do dquilt refresh; done</literal>.  pop -a; while dquilt push; do dquilt refresh; done</literal>.
3895  </para>  </para>
3896  </section>  </section>
# Line 3700  We should now be ready to build the pack Line 3901  We should now be ready to build the pack
3901  </para>  </para>
3902  <section id="completebuild"><title>Complete (re)build</title>  <section id="completebuild"><title>Complete (re)build</title>
3903  <para>  <para>
3904  In order to properly make complete (re)build of a package, you have to ensure  In order to perform a complete (re)build of a package properly, you
3905  to install  need to make sure you have installed
3906  </para>  </para>
3907  <itemizedlist>  <itemizedlist>
3908  <listitem>  <listitem>
# Line 3711  the <systemitem role="package">build-ess Line 3912  the <systemitem role="package">build-ess
3912  </listitem>  </listitem>
3913  <listitem>  <listitem>
3914  <para>  <para>
3915  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
3916  </para>  </para>
3917  </listitem>  </listitem>
3918  <listitem>  <listitem>
3919  <para>  <para>
3920  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"/>).
3921  </para>  </para>
3922  </listitem>  </listitem>
3923  </itemizedlist>  </itemizedlist>
# Line 3767  create and sign the upload <filename>.ch Line 3968  create and sign the upload <filename>.ch
3968  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,
3969  twice.  twice.
3970  <footnote><para>  <footnote><para>
3971  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
3972  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
3973  archives.  See  keyring</ulink>.  This enables your uploaded packages to be accepted to the
3974    Debian archives.  See
3975  <ulink url="&keycreate;">Creating a new GPG key</ulink> and  <ulink url="&keycreate;">Creating a new GPG key</ulink> and
3976  <ulink url="&keysigning; ">Debian Wiki on Keysigning</ulink>.  <ulink url="&keysigning; ">Debian Wiki on Keysigning</ulink>.
3977  </para></footnote>  </para></footnote>
3978    If you are building Debian packages only for your local use, you can skip
3979    promptings for the GPG signitures on the <filename>.dsc</filename> file and the
3980    <filename>.changes</filename> file as:
3981  </para>  </para>
3982    <screen>
3983    $ dpkg-buildpackage -us -uc
3984    </screen>
3985  <para>  <para>
3986  After all this is done, you will see the following files in the directory above  For the non-native Debian package, e.g.,
3987  (<filename>~/gentoo</filename>):  <systemitem role="package">gentoo</systemitem>, you will see the following
3988    files in the parent directory (<filename>~/gentoo</filename>) after building
3989    packages:
3990  </para>  </para>
3991  <itemizedlist>  <itemizedlist>
3992  <listitem>  <listitem>
# Line 3784  After all this is done, you will see the Line 3994  After all this is done, you will see the
3994  <filename>gentoo_0.9.12.orig.tar.gz</filename>  <filename>gentoo_0.9.12.orig.tar.gz</filename>
3995  </para>  </para>
3996  <para>  <para>
3997  This is the original source code tarball, merely renamed to the above so that  This is the original upstream source code tarball, merely renamed to the above so that
3998  it adheres to the Debian standard.  Note that this was created initially by the  it adheres to the Debian standard.  Note that this was created initially by the
3999  <literal>dh_make -f ../gentoo-0.9.12.tar.gz</literal>.  <literal>dh_make -f ../gentoo-0.9.12.tar.gz</literal>.
4000  </para>  </para>
# Line 3807  people can be sure that it's really your Line 4017  people can be sure that it's really your
4017  </para>  </para>
4018  <para>  <para>
4019  This compressed tarball contains your <filename>debian</filename> directory  This compressed tarball contains your <filename>debian</filename> directory
4020  contents.  Each and every addition you made to the original source code are  contents.  Each and every addition you made to the original source code is
4021  stored as <command>quilt</command> patches in  stored as a <command>quilt</command> patch in
4022  <filename>debian/patches</filename>.  <filename>debian/patches</filename>.
4023  </para>  </para>
4024  <para>  <para>
# Line 3836  install and remove this just like any ot Line 4046  install and remove this just like any ot
4046  <filename>gentoo_0.9.12-1_i386.changes</filename>  <filename>gentoo_0.9.12-1_i386.changes</filename>
4047  </para>  </para>
4048  <para>  <para>
4049  This file describes all the changes made in the current package revision, and  This file describes all the changes made in the current package revision;
4050  it is used by the Debian FTP archive maintenance programs to install the binary  it is used by the Debian FTP archive maintenance programs to install the binary
4051  and source packages in it.  It is partly generated from the  and source packages.  It is partly generated from the
4052  <filename>changelog</filename> file and the <filename>.dsc</filename> file.  <filename>changelog</filename> file and the <filename>.dsc</filename> file.
4053  This file is GPG signed, so that people can be sure that it's really yours.  This file is GPG signed, so that people can be sure that it's really yours.
4054  </para>  </para>
4055  <para>  <para>
4056  As you keep working on the package, behavior will change and new features will  As you keep working on the package, its behavior will change and new features will
4057  be added.  People downloading your package can look at this file and quickly  be added.  People downloading your package can look at this file and quickly
4058  see what has changed.  Debian archive maintenance programs will also post the  see what has changed.  Debian archive maintenance programs will also post the
4059  contents of this file to the <ulink url="&debian-devel-announce-ldo;">debian-devel-announce@lists.debian.org</ulink>  contents of this file to the <ulink url="&debian-devel-announce-ldo;">debian-devel-announce@lists.debian.org</ulink>
# Line 3853  mailing list. Line 4063  mailing list.
4063  </itemizedlist>  </itemizedlist>
4064  <para>  <para>
4065  The long strings of numbers in the <filename>.dsc</filename> and  The long strings of numbers in the <filename>.dsc</filename> and
4066  <filename>.changes</filename> files are MD5/SHA1/SHA256 checksums for the files  <filename>.changes</filename> files are SHA1/SHA256 checksums for the files
4067  mentioned.  A person downloading your files can test them with <citerefentry>  mentioned.  Anyone downloading your files can test them with <citerefentry>
4068  <refentrytitle>md5sum</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>,  <refentrytitle>sha1sum</refentrytitle> <manvolnum>1</manvolnum>
4069  <citerefentry> <refentrytitle>sha1sum</refentrytitle> <manvolnum>1</manvolnum>  </citerefentry> or <citerefentry> <refentrytitle>sha256sum</refentrytitle>
 </citerefentry>, or <citerefentry> <refentrytitle>sha256sum</refentrytitle>  
4070  <manvolnum>1</manvolnum> </citerefentry> and if the numbers don't match,  <manvolnum>1</manvolnum> </citerefentry> and if the numbers don't match,
4071  they'll know the file is corrupt or has been tampered with.  they'll know the file is corrupt or has been tampered with.
4072  </para>  </para>
4073    <para>
4074    For the native Debian package, e.g.,
4075    <systemitem role="package">mypackage</systemitem>, you will see the following
4076    files in the parent directory after building packages:
4077    </para>
4078    <itemizedlist>
4079    <listitem>
4080    <para>
4081    <filename>mypackage_1.0.tar.gz</filename>
4082    </para>
4083    <para>
4084    This is the source code tarball merely created from the
4085    <filename>mypackage-1.0</filename> directory by the
4086    <command>dpkg-source</command>.  (Its suffix is not <filename>orig.tar.gz</filename>.)
4087    </para>
4088    </listitem>
4089    <listitem>
4090    <para>
4091    <filename>mypackage_1.0.dsc</filename>
4092    </para>
4093    <para>
4094    This is a summary of the contents of the source code as in the non-native
4095    Debian package. (There is no Debian revision.)
4096    </para>
4097    </listitem>
4098    <listitem>
4099    <para>
4100    <filename>mypackage_1.0_i386.deb</filename>
4101    </para>
4102    <para>
4103    This is your completed binary package as in the non-native Debian package.
4104    (There is no Debian revision.)
4105    </para>
4106    </listitem>
4107    <listitem>
4108    <para>
4109    <filename>mypackage_1.0_i386.changes</filename>
4110    </para>
4111    <para>
4112    This file describes all the changes made in the current package version as in
4113    the non-native Debian package. (There is no Debian revision.)
4114    </para>
4115    </listitem>
4116    </itemizedlist>
4117  </section>  </section>
4118  <section id="autobuilder"><title>Autobuilder</title>  <section id="autobuilder"><title>Autobuilder</title>
4119  <para>  <para>
4120  Debian supports many <ulink url="&ports;">ports</ulink>  Debian supports many <ulink url="&ports;">ports</ulink>
4121  with the <ulink url="&buildd;">autobuilder  with the <ulink url="&buildd;">autobuilder
4122  network</ulink> running <command>buildd</command> daemons on many different  network</ulink> running <command>buildd</command> daemons on computers
4123  architecture computers.  Although you do not need to do this by yourself, you  of many different architectures.  Although you do not need to do this yourself, you
4124  should be aware of what will happen on your packages.  Let's look into roughly  should be aware of what will happen to your packages.  Let's look into roughly
4125  how your packages are rebuild for many different architectures by them.  how they rebuild your packages for multiple architectures.
4126  <footnote><para> The actual autobuilder system involves much more complicated  <footnote><para> The actual autobuilder system involves much more complicated
4127  schemes than the one documented here.  Such details are beyond the scope of  schemes than the one documented here.  Such details are beyond the scope of
4128  this document.  </para> </footnote>  this document.  </para> </footnote>
4129  </para>  </para>
4130  <para>  <para>
4131  For <literal>Architecture: any</literal> packages, the autobuilder system  For <literal>Architecture: any</literal> packages, the autobuilder system
4132  rebuild them.  It ensures to install  performs a rebuild.  It ensures the installation of
4133  </para>  </para>
4134  <itemizedlist>  <itemizedlist>
4135  <listitem>  <listitem>
# Line 3886  the <systemitem role="package">build-ess Line 4139  the <systemitem role="package">build-ess
4139  </listitem>  </listitem>
4140  <listitem>  <listitem>
4141  <para>  <para>
4142  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"/>).
4143  </para>  </para>
4144  </listitem>  </listitem>
4145  </itemizedlist>  </itemizedlist>
# Line 3933  create and sign the upload <filename>.ch Line 4186  create and sign the upload <filename>.ch
4186  This is why you see your package for other architectures.  This is why you see your package for other architectures.
4187  </para>  </para>
4188  <para>  <para>
4189  Although packages listed in the <literal>Build-Depends-indep</literal> field  Although packages listed in the <literal>Build-Depends-Indep</literal> field
4190  are required to be installed for the normal packaging by us (see <xref linkend="completebuild"/> ), they are not required to be installed for the  are required to be installed for our normal packaging work (see
4191  autobuilder system since it build only architecture dependent binary packages.  <xref linkend="completebuild"/>), they are not required to be installed for the
4192    autobuilder system since it builds only architecture dependent binary packages.
4193  <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>
4194  environment under the <systemitem role="package">sbuild</systemitem> package  environment under the <systemitem role="package">sbuild</systemitem> package
4195  used by the autobuilder system does not force the minimal system and may leave  used by the autobuilder system does not enforce the use of a minimal
4196  many packages installed.  </para> </footnote> This difference between normal  system and may have many leftover packages installed.  </para>
4197  packaging and autobuilder situation dictates whether you record such required  </footnote> This distinction between normal packaging and autobuilding
4198    procedures is what dictates whether you should record such required
4199  packages in the <literal>Build-Depends</literal> or  packages in the <literal>Build-Depends</literal> or
4200  <literal>Build-Depends-indep</literal> fields of the  <literal>Build-Depends-Indep</literal> fields of the
4201  <filename>debian/control</filename> file (see <xref linkend="control"/> ).  <filename>debian/control</filename> file (see <xref linkend="control"/>).
 </para>  
 </section>  
 <section id="option-sa"><title>Including <filename>orig.tar.gz</filename> for upload</title>  
 <para>  
 When you first upload the package to the archive, you need to include the  
 original <filename>orig.tar.gz</filename> source, too.  If the Debian revision  
 number of such package is neither <literal>1</literal> nor  
 <literal>0</literal>, you must provide <command>dpkg-buildpackage</command>  
 command with the <literal>-sa</literal> option.  On the other hand, the  
 <literal>-sd</literal> option will force to exclude the original  
 <filename>orig.tar.gz</filename> source.  
4202  </para>  </para>
4203  </section>  </section>
4204  <section id="debuild"><title><command>debuild</command> command</title>  <section id="debuild"><title><command>debuild</command> command</title>
4205  <para>  <para>
4206  You can automate package build process of the  You can automate the <command>dpkg-buildpackage</command> command's
4207  <command>dpkg-buildpackage</command> command further with the  package build process further with the
4208  <command>debuild</command> command.  See <citerefentry>  <command>debuild</command> command.  See <citerefentry>
4209  <refentrytitle>debuild</refentrytitle> <manvolnum>1</manvolnum>  <refentrytitle>debuild</refentrytitle> <manvolnum>1</manvolnum>
4210  </citerefentry>.  </citerefentry>.
# Line 3968  You can automate package build process o Line 4212  You can automate package build process o
4212  <para>  <para>
4213  Customization of the <command>debuild</command> command can be done through  Customization of the <command>debuild</command> command can be done through
4214  <filename>/etc/devscripts.conf</filename> or  <filename>/etc/devscripts.conf</filename> or
4215  <filename>~/.devscripts</filename>.  I would suggest at least following items:  <filename>~/.devscripts</filename>.  I would suggest at least the following items:
4216  </para>  </para>
4217  <screen>  <screen>
4218  DEBSIGN_KEYID=Your_GPG_keyID  DEBSIGN_KEYID=Your_GPG_keyID
 DEBUILD_LINTIAN=yes  
4219  DEBUILD_LINTIAN_OPTS=-i -I --show-overrides  DEBUILD_LINTIAN_OPTS=-i -I --show-overrides
4220  </screen>  </screen>
4221  <para>  <para>
4222  With these, packages are signed by your specified GPG key ID (good for  With these, packages are signed by your specified GPG key ID (good for
4223  sponsoring packages) and checked by the <command>lintian</command> command in  sponsoring packages) and checked in detail by the <command>lintian</command> command.
 details.  
4224  </para>  </para>
4225  <para>  <para>
4226  Cleaning source and rebuilding package from a user account is as simple as:  Cleaning the source and rebuilding the package from your user account is as simple as:
4227  </para>  </para>
4228  <screen>  <screen>
4229  $ debuild  $ debuild
4230  </screen>  </screen>
4231  <para>  <para>
4232  Please note that the <command>dpkg-buildpackage</command> option  Here, if you are building Debian packages only for your local use, you can skip
4233  <literal>-sa</literal> to include the original <filename>orig.tar.gz</filename>  promptings for the GPG signitures on the <filename>.dsc</filename> file and the
4234  source can be specified as:  <filename>.changes</filename> file as:
4235  </para>  </para>
4236  <screen>  <screen>
4237  $ debuild -sa  $ debuild -us -uc
4238  </screen>  </screen>
4239  <para>  <para>
4240  You can clean source tree as simple as:  You can clean the source tree as simply as:
4241  </para>  </para>
4242  <screen>  <screen>
4243  $ debuild clean  $ debuild clean
# Line 4005  $ debuild clean Line 4247  $ debuild clean
4247  <para>  <para>
4248  For a clean room (<command>chroot</command>) build environment to verify the  For a clean room (<command>chroot</command>) build environment to verify the
4249  build dependencies, the <systemitem role="package">pbuilder</systemitem>  build dependencies, the <systemitem role="package">pbuilder</systemitem>
4250  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
4251    role="package">pbuilder</systemitem> package is still evolving, you should
4252  check the actual configuration situation by consulting the latest official  check the actual configuration situation by consulting the latest official
4253  documentation.  </para> </footnote> This ensures a clean build from the source  documentation.</para> </footnote> This ensures a clean build from the source
4254  under the <literal>sid</literal> auto-builder for different architectures and  under the <literal>sid</literal> auto-builder for different architectures and
4255  avoids the severity serious FTBFS (Fails To Build From Source) bug which is  avoids a severity serious FTBFS (Fails To Build From Source) bug which is
4256  always in the RC (release critical) category.  See <ulink url="&buildd-do;"/> for more on the Debian  always in the RC (release critical) category.
4257  package <systemitem role="package">auto-builder</systemitem>.  <footnote><para>See <ulink url="&buildd-do;"/> for more on
4258    Debian package auto-building.</para></footnote>
4259  </para>  </para>
4260  <para>  <para>
4261  Let's customize the <systemitem role="package">pbuilder</systemitem> package by  Let's customize the <systemitem role="package">pbuilder</systemitem> package as
4262  the following.  follows:
4263  </para>  </para>
4264  <itemizedlist>  <itemizedlist>
4265  <listitem>  <listitem>
4266  <para>  <para>
4267  setting <filename>/var/cache/pbuilder/result</filename> directory writable by  setting the <filename>/var/cache/pbuilder/result</filename> directory writable by
4268  the user.  for your user account.
4269  </para>  </para>
4270  </listitem>  </listitem>
4271  <listitem>  <listitem>
4272  <para>  <para>
4273  creating a directory, e.g.  creating a directory, e.g.
4274  <filename><replaceable>/var/cache/pbuilder/hooks</replaceable></filename>,  <filename><replaceable>/var/cache/pbuilder/hooks</replaceable></filename>,
4275  writable by the user to place hook scripts.  writable by the user, to place hook scripts in.
4276  </para>  </para>
4277  </listitem>  </listitem>
4278  <listitem>  <listitem>
4279  <para>  <para>
4280  setting <filename>~/.pbuilderrc</filename> or  configuring <filename>~/.pbuilderrc</filename> or
4281  <filename>/etc/pbuilderrc</filename> to include as follows.  <filename>/etc/pbuilderrc</filename> to include the followsing.
4282  </para>  </para>
4283  <screen>  <screen>
4284  AUTO_DEBSIGN=yes  AUTO_DEBSIGN=${AUTO_DEBSIGN:-yes}
4285  HOOKDIR=<replaceable>/var/cache/pbuilder/hooks</replaceable>  HOOKDIR=<replaceable>/var/cache/pbuilder/hooks</replaceable>
4286  </screen>  </screen>
4287  </listitem>  </listitem>
# Line 4047  This will allow you to sign generated pa Line 4291  This will allow you to sign generated pa
4291  <filename>~/.gnupg/</filename> directory.  <filename>~/.gnupg/</filename> directory.
4292  </para>  </para>
4293  <para>  <para>
4294  Let's then initialize the local <systemitem role="package">pbuilder</systemitem> <command>chroot</command> system first as  First let's initialize the local <systemitem role="package">pbuilder</systemitem> <command>chroot</command> system as
4295  follows.  follows.
4296  </para>  </para>
4297  <screen>  <screen>
4298  $ sudo pbuilder create  $ sudo pbuilder create
4299  </screen>  </screen>
4300  <para>  <para>
4301  If you already have the completed source packages, issue the following commands  If you already have a completed source package, issue the following commands
4302  in the directory where the  in the directory where the
4303  <filename><replaceable>foo</replaceable>.orig.tar.gz</filename>,  <filename><replaceable>foo</replaceable>.orig.tar.gz</filename>,
4304  <filename><replaceable>foo</replaceable>.debian.tar.gz</filename>, and  <filename><replaceable>foo</replaceable>.debian.tar.gz</filename>, and
# Line 4064  the local <systemitem role="package">pbu Line 4308  the local <systemitem role="package">pbu
4308  </para>  </para>
4309  <screen>  <screen>
4310  $ sudo pbuilder --update  $ sudo pbuilder --update
4311  $ sudo pbuilder --build <replaceable>foo</replaceable>.dsc  $ sudo pbuilder --build <replaceable>foo_version</replaceable>.dsc
4312  </screen>  </screen>
4313  <para>  <para>
4314  Please note that the <command>dpkg-buildpackage</command> option  The newly built packages without the GPG signitures will be located in
4315  <literal>-sa</literal> to include the original <filename>orig.tar.gz</filename>  <filename>/var/cache/pbuilder/result/</filename> with non-root ownership.
 source can be specified as:  
4316  </para>  </para>
 <screen>  
 $ sudo pbuilder --build --debbuildopts -sa <replaceable>foo</replaceable>.dsc  
 </screen>  
4317  <para>  <para>
4318  The newly built packages will be located in  The GPG signitures on the <filename>.dsc</filename> file and the
4319  <filename>/var/cache/pbuilder/result/</filename> with non-root ownership.  <filename>.changes</filename> file can be generated as:
4320  </para>  </para>
4321    <screen>
4322    $ cd /var/cache/pbuilder/result/
4323    $ debsign <replaceable>foo_version</replaceable>.dsc
4324    $ debsign <replaceable>foo_version_arch</replaceable>.changes
4325    </screen>
4326  <para>  <para>
4327  If you already have the updated source tree without generating the matching  If you have an updated source tree but have not generated the matching
4328  source packages, issue the following commands in the source directory where the  source package, issue the following commands in the source directory where the
4329  <filename>debian</filename> directory exists, instead.  <filename>debian</filename> directory exists, instead.
4330  </para>  </para>
4331  <screen>  <screen>
# Line 4088  $ sudo pbuilder --update Line 4333  $ sudo pbuilder --update
4333  $ pdebuild  $ pdebuild
4334  </screen>  </screen>
4335  <para>  <para>
4336  Please note that the <command>dpkg-buildpackage</command> option  Here, if you are building Debian packages only for your local use, you can skip
4337  <literal>-sa</literal> to include the original <filename>orig.tar.gz</filename>  promptings for the GPG signitures on the <filename>.dsc</filename> file and the
4338  source can be specified as:  <filename>.changes</filename> file as:
4339  </para>  </para>
4340  <screen>  <screen>
4341  $ pdebuild --debbuildopts -sa  $ AUTO_DEBSIGN=no pdebuild
4342  </screen>  </screen>
4343  <para>  <para>
4344  You can log into its <command>chroot</command> environment with the  You can log into its <command>chroot</command> environment with the
# Line 4107  the <literal>chroot</literal> environmen Line 4352  the <literal>chroot</literal> environmen
4352  <filename><replaceable>/var/cache/pbuilder/hooks</replaceable>/B90lintian</filename>  <filename><replaceable>/var/cache/pbuilder/hooks</replaceable>/B90lintian</filename>
4353  configured as follows.  <footnote><para> This assumes  configured as follows.  <footnote><para> This assumes
4354  <literal>HOOKDIR=/var/cache/pbuilder/hooks</literal>.  You can find many  <literal>HOOKDIR=/var/cache/pbuilder/hooks</literal>.  You can find many
4355  examples of the hook script in the  examples of hook scripts in the
4356  <filename>/usr/share/doc/pbuilder/examples</filename> directory.  </para>  <filename>/usr/share/doc/pbuilder/examples</filename> directory.  </para>
4357  </footnote>  </footnote>
4358  </para>  </para>
# Line 4126  echo +++ end of lintian output +++ Line 4371  echo +++ end of lintian output +++
4371  </screen>  </screen>
4372  <para>  <para>
4373  You need to have access to the latest <literal>sid</literal> environment to  You need to have access to the latest <literal>sid</literal> environment to
4374  build packages properly for <literal>sid</literal>.  In reality,  build packages properly for <literal>sid</literal>.  In practice,
4375  <literal>sid</literal> may be experiencing issues which makes it not desirable  <literal>sid</literal> may be experiencing issues which makes it undesirable
4376  for you to migrate your whole system.  The <systemitem role="package">pbuilder</systemitem> package can help you to cope with this  for you to migrate your whole system.  The <systemitem role="package">pbuilder</systemitem> package can help you to cope with this
4377  kind of situation.  kind of situation.
4378  </para>  </para>
# Line 4136  You may need to update your <literal>sta Line 4381  You may need to update your <literal>sta
4381  release for <literal>stable-proposed-updates</literal>,  release for <literal>stable-proposed-updates</literal>,
4382  <literal>stable/updates</literal>, etc.  <footnote><para> There are some  <literal>stable/updates</literal>, etc.  <footnote><para> There are some
4383  restrictions for such updates of your <literal>stable</literal> package.  restrictions for such updates of your <literal>stable</literal> package.
4384  </para> </footnote> For such occasions, I am running <literal>sid</literal>  </para> </footnote> For such occasions, the fact you may be running a <literal>sid</literal>
4385  system is not good enough excuse not to update them promptly.  The <systemitem role="package">pbuilder</systemitem> package can help you to access  system is not a good enough excuse for failing to update them promptly.  The <systemitem role="package">pbuilder</systemitem> package can help you to access
4386  environments of almost any Debian derivative distributions of the same CPU  environments of almost any Debian derivative distribution of the same CPU
4387  architecture.  architecture.
4388  </para>  </para>
4389  <para>  <para>
# Line 4152  See <ulink url="&pbuilder;"/>, Line 4397  See <ulink url="&pbuilder;"/>,
4397  </section>  </section>
4398  <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>
4399  <para>  <para>
4400  If your upstream uses the source code management system (VCS)  If your upstream uses a source code management system (VCS)
4401  <footnote><para>See <ulink url="&debref-vcs;">Version control systems</ulink> for more.</para></footnote>  <footnote><para>See <ulink url="&debref-vcs;">Version control systems</ulink> for more.</para></footnote>
4402  to maintain their code, you should consider to use them.  That makes merging  to maintain their code, you should consider using it as well.  This makes merging
4403  and cherry-picking upstream patches much easier.  There are several specialized  and cherry-picking upstream patches much easier.  There are several specialized
4404  wrapper script packages for the Debian package building for each VCS.  wrapper script packages for Debian package building for each VCS.
4405  </para>  </para>
4406  <itemizedlist>  <itemizedlist>
4407  <listitem>  <listitem>
4408  <para>  <para>
4409  <systemitem role="package">git-buildpackage</systemitem>: Suite to help with  <systemitem role="package">git-buildpackage</systemitem>: a suite to help with
4410  Debian packages in Git repositories.  Debian packages in Git repositories.
4411  </para>  </para>
4412  </listitem>  </listitem>
# Line 4173  maintain Debian pack