chiark / gitweb /
hmm, www.d.o wasn't in the entity
[developers-reference.git] / developers-reference.sgml
index ae6336c92be814292b14b094741f4bd47814c883..c48c82f814b90e82cdd5b81eb684bf22a6973983 100644 (file)
@@ -6,7 +6,7 @@
   <!entity % commondata  SYSTEM "common.ent" > %commondata;
 
   <!-- CVS revision of this document -->
-  <!entity cvs-rev "$Revision: 1.140 $">
+  <!entity cvs-rev "$Revision: 1.162 $">
   <!-- if you are translating this document, please notate the CVS
        revision of the developers reference here -->
   <!--
 
 ]>
 <debiandoc>
-<!--
- TODO:
-  - bugs in upstream versions should be reported upstream!
-  - add information on how to get accounts on different architectures
-  - talk about CVS access, other ways to submit problems
-  - add information on how you can contribute w/o being an official
-    developer
-  - "official port maintainer" ? (cf. glibc-pre2.1)
- -->
-
   <book>
-
       <title>Debian Developer's Reference
+
       <author>Adam Di Carlo, current maintainer <email>aph@debian.org</email>
       <author>Raphaël Hertzog, co-maintainer <email>hertzog@debian.org</email>
       <author>Christian Schwarz <email>schwarz@debian.org</email>
 
       <copyright>
        <copyrightsummary>
-copyright &copy;1998&mdash;2002 Adam Di Carlo</copyrightsummary>
+copyright &copy; 1998&mdash;2003 Adam Di Carlo</copyrightsummary>
        <copyrightsummary>
-copyright &copy;2002 Raphaël Hertzog</copyrightsummary>
+copyright &copy; 2002 Raphaël Hertzog</copyrightsummary>
        <copyrightsummary>
-copyright &copy;1997, 1998 Christian Schwarz</copyrightsummary>
+copyright &copy; 1997, 1998 Christian Schwarz</copyrightsummary>
        <p>
 This manual is free software; you may redistribute it and/or modify it
 under the terms of the GNU General Public License as published by the
@@ -397,7 +387,7 @@ the following steps:
            <item>
 Orphan all your packages, as described in <ref id="orphaning">.
            <item>
-Send an email about how you are leaving the project to
+Send an email about why you are leaving the project to
 &email-debian-private;.
            <item>
 Notify the Debian key ring maintainers that you are leaving by
@@ -685,27 +675,6 @@ keys that will be automatically installed on the official debian machines
 or like *.debian.net DNS entry. Those features are documented
 at <url id="&url-debian-db-mail-gw;">.
 
-    <sect id="servers-mirrors">Mirrors of Debian servers
-       <p>
-The web and FTP servers have several mirrors available.  Please do not
-put heavy load on the canonical FTP or web servers.  Ideally, the
-canonical servers only mirror out to a first tier of mirrors, and all
-user access is to the mirrors.  This allows Debian to better spread
-its bandwidth requirements over several servers and networks.  Note
-that newer push mirroring techniques ensure that mirrors are as
-up-to-date as they can be.
-       <p>
-The main web page listing the available public FTP/HTTP
-servers can be found at <url id="&url-debian-mirrors;">.  More
-information concerning Debian mirrors can be found at <url
-id="&url-debian-mirroring;">.  This useful page includes information
-and tools which can be helpful if you are interested in setting up
-your own mirror, either for internal or public access.
-       <p>
-Note that mirrors are generally run by third-parties who are
-interested in helping Debian.  As such, developers generally do not
-have accounts on these machines.
-
 
     <sect id="archive">The Debian archive
        <p>
@@ -1009,6 +978,31 @@ real distribution directories use the <em>code names</em>, while
 symbolic links for <em>stable</em>, <em>testing</em>, and
 <em>unstable</em> point to the appropriate release directories.
 
+
+    <sect id="mirrors">Debian mirrors
+       <p>
+The various download archives and the web site have several mirrors
+available in order to relieve our canonical servers from heavy load.
+In fact, some of the canonical servers aren't public, and instead a
+first tier of mirrors balances the load. That way, users always access
+the mirrors and get used to using them, which allows Debian to better
+spread its bandwidth requirements over several servers and networks,
+and basically makes users avoid hammering on one primary location.
+Note that the first tier of mirrors is as up-to-date as it can be since
+they update when triggered from the internal sites (we call this
+"push mirroring").
+       <p>
+All the information on Debian mirrors, including a list of the available
+public FTP/HTTP servers, can be found at <url id="&url-debian-mirrors;">.
+This useful page also includes information and tools which can be helpful if
+you are interested in setting up your own mirror, either for internal or
+public access.
+       <p>
+Note that mirrors are generally run by third-parties who are
+interested in helping Debian.  As such, developers generally do not
+have accounts on these machines.
+
+
     <sect id="incoming-system">
        <heading>The Incoming system
        <p>
@@ -1117,24 +1111,27 @@ or they must be accepted into <em>testing</em> at the same time (and they will
 if they respect themselves all the criteria);
 </list>
        <p>
-The scripts are generating some output files to explain why some packages
-are kept out of testing. They are available at <url
-id="&url-testing-maint;">. Alternatively, it is possible to use
-the <prgn>grep-excuses</prgn> program which is in the
-<package>devscripts</package> package. It can be easily put in a
-<manref name="crontab" section="5">
-to keep someone informed of the progression of his packages in <em>testing</em>.
+To find out whether a package is progressing into testing or not, see the
+testing script output on the <url name="web page of the testing distribution"
+id="&url-testing-maint;">, or use the program <prgn>grep-excuses</prgn>
+which is in the <package>devscripts</package> package. This utility can
+easily be used in a <manref name="crontab" section="5"> to keep one
+informed of the progression of their packages into <em>testing</em>.
        <p>
 The <file>update_excuses</file> file does not always give the precise reason
 why the package is refused, one may have to find it on their own by looking
 what would break with the inclusion of the package. The <url
-id="&url-testing-maint;" name="testing overview"> gives some more information
+id="&url-testing-maint;" name="testing web page"> gives some more information
 about the usual problems which may be causing such troubles.
        <p>
 Sometimes, some packages never enter <em>testing</em> because the set of
 inter-relationship is too complicated and can not be sorted out
 by the scripts. In that case, the release manager must be
 contacted, and he will force the inclusion of the packages.
+       <p>
+In general, please refer to the <url name="testing web page"
+id="&url-testing-maint;"> for more information. It also includes
+answers to some of the frequently asked questions.
 
     <sect id="pkg-info">Package information
        <p>
@@ -1179,7 +1176,7 @@ recompiled on most of the architectures.
 The Package Tracking System (PTS) is basically a tool to track by mail
 the activity of a source package. You just have to subscribe
 to a source package to start getting the mails related to it. 
-You get the same mails than the maintainer. Each mail
+You get the same mails as the maintainer. Each mail
 sent through the PTS is classified and associated to one of
 the keyword listed below. This will let you select the mails that
 you want to receive.
@@ -1228,6 +1225,11 @@ architectures).
     <item>
 CVS commits if the maintainer has setup a system to forward commit
 notification to the PTS.
+
+    <tag><tt>ddtp</tt>
+    <item>
+Translations of descriptions or debconf templates
+submitted to the Debian Description Translation Project.
 </taglist>
 
        <sect1 id="pts-commands">The PTS email interface
@@ -1268,6 +1270,7 @@ various commands to <email>pts@qa.debian.org</email>.
         <email>control@bugs.debian.org</email>
   <item><tt>summary</tt>: automatic summary mails about the state of a package
   <item><tt>cvs</tt>: notification of CVS commits
+  <item><tt>ddtp</tt>: translations of descriptions and debconf templates
   <item><tt>upload-source</tt>: announce of a new source upload that
         has been accepted
   <item><tt>upload-binary</tt>: announce of a new binary-only upload (porting)
@@ -2050,7 +2053,7 @@ basis as co-maintainer or backup maintainer
 (see <ref id="collaborative-maint">).
 
 
-    <sect id="porting">Porting and Being Ported
+    <sect id="porting">Porting and being ported
       <p>
 Debian supports an ever-increasing number of architectures.  Even if
 you are not a porter, and you don't use any architecture but one, it
@@ -2237,25 +2240,36 @@ the waiting period.  Of course, such locations have no official
 blessing or status, so buyer, beware.
 
 
-      <sect1>Tools for porters
-       <p>
-There are several tools available for the porting effort. This section
-contains a brief introduction to these tools; see the package
-documentation or references for full information.
-
-
-       <sect2 id="quinn-diff">
-         <heading><package>quinn-diff</package>
-         <p>
-<package>quinn-diff</package> is used to locate the differences from
-one architecture to another.  For instance, it could tell you which
-packages need to be ported for architecture <var>Y</var>, based on
-architecture <var>X</var>.
-
-
-       <sect2 id="buildd">
-         <heading><package>buildd</package>
-         <p>
+      <sect1 id="porter-automation">
+          <heading>Porting infrastructure and automation</heading>
+          <p>
+There is infrastructure and several tools to help automate the package
+porting. This section contains a brief overview of this automation and
+porting to these tools; see the package documentation or references for
+full information.</p>
+
+          <sect2>
+            <heading>Mailing lists and web pages</heading>
+            <p>
+Web pages containing the status of each port can be found at <url
+id="&url-debian-ports;">.
+            <p>
+Each port of Debian has a mailing list.  The list of porting mailing
+lists can be found at <url id="&url-debian-port-lists;">.  These lists
+are used to coordinate porters, and to connect the users of a given
+port with the porters.</p>
+          </sect2>
+
+          <sect2>
+            <heading>Porter tools</heading>
+            <p>
+Descriptions of several porting tools can be found in <ref
+id="tools-porting">.</p>
+          </sect2>
+
+          <sect2 id="buildd">
+            <heading><package>buildd</package></heading>
+            <p>
 The <package>buildd</package> system is used as a distributed,
 client-server build distribution system.  It is usually used in
 conjunction with <em>auto-builders</em>, which are ``slave'' hosts
@@ -2266,9 +2280,11 @@ cannot yet be auto-built) and work on it.
          <p>
 <package>buildd</package> is not yet available as a package; however,
 most porting efforts are either using it currently or planning to use
-it in the near future.  It collects a number of as yet unpackaged
+it in the near future.  The actual automated builder is packaged as
+<package>sbuild</package>, see its description in <ref id="sbuild">.
+The complete <package>buildd</package> system also collects a number of as yet unpackaged
 components which are currently very useful and in use continually,
-such as <prgn>andrea</prgn>, <prgn>sbuild</prgn> and
+such as <prgn>andrea</prgn> and
 <prgn>wanna-build</prgn>.
          <p>
 Some of the data produced by <package>buildd</package> which is
@@ -2277,23 +2293,15 @@ id="&url-buildd;">.  This data includes nightly updated information
 from <prgn>andrea</prgn> (source dependencies) and
 <package>quinn-diff</package> (packages needing recompilation).
          <p>
-We are very excited about this system, since it potentially has so
-many uses.  Independent development groups can use the system for
+We are quite proud of this system, since it has so
+many possible uses.  Independent development groups can use the system for
 different sub-flavors of Debian, which may or may not really be of
-general interest (for instance, a flavor of Debian built with gcc
+general interest (for instance, a flavor of Debian built with <prgn>gcc</prgn>
 bounds checking).  It will also enable Debian to recompile entire
 distributions quickly.
+          </sect2>
 
 
-       <sect2 id="dpkg-cross">
-         <heading><package>dpkg-cross</package>
-         <p>
-<package>dpkg-cross</package> is a tool for installing libraries and
-headers for cross-compiling in a way similar to
-<package>dpkg</package>. Furthermore, the functionality of
-<prgn>dpkg-buildpackage</prgn> and <prgn>dpkg-shlibdeps</prgn> is
-enhanced to support cross-compiling.
-
 
     <sect id="collaborative-maint">
         <heading>Collaborative maintenance</heading>
@@ -2338,8 +2346,8 @@ should subscribe themselves to the appropriate source package.</p>
       </sect>
 
     <sect id="archive-manip">
-      <heading>Moving, Removing, Renaming, Adopting, and Orphaning
-      Packages</heading>
+      <heading>Moving, removing, renaming, adopting, and orphaning
+      packages</heading>
       <p>
 Some archive manipulation operations are not automated in the Debian
 upload process.  These procedures should be manually followed by
@@ -2473,11 +2481,16 @@ page for information and procedures.
 It is not OK to simply take over a package that you feel is neglected
 &mdash; that would be package hijacking.  You can, of course, contact the
 current maintainer and ask them if you may take over the package.
-However, without their assent, you may not take over the package.
-Even if they ignore you, that is still not grounds to take over a
-package.  If you really feel that a maintainer has gone AWOL (absent
-without leave), post a query to &email-debian-private;. You may also
-inform the QA group (cf. <ref id="mia-qa">).
+If you have reason to believe a maintainer has gone AWOL
+(absent without leave), see <ref id="mia-qa">.
+       <p>
+Generally, you may not take over the package without the assent of the
+current maintainer. Even if they ignore you, that is still not grounds to
+take over a package. Complaints about maintainers should be brought up on
+the developers' mailing list. If the discussion doesn't end with a positive
+conclusion, and the issue is of a technical nature, consider bringing it to
+the attention of the technical committee (see the <url name="technical
+committee web page" id="&url-tech-ctte;"> for more information).
        <p>
 If you take over an old package, you probably want to be listed as the
 package's official maintainer in the bug system. This will happen
@@ -2774,7 +2787,8 @@ fix can break seemingly unrelated features in subtle ways.
 <p>
 Review and test your changes as much as possible.  Check the
 differences from the previous version repeatedly
-(<prgn>interdiff</prgn> and <prgn>debdiff</prgn> are useful tools for
+(<prgn>interdiff</prgn> from the <package>patchutils</package> package
+and <prgn>debdiff</prgn> from <package>devscripts</package> are useful tools for
 this).
 
 When packaging the fix, keep the following points in mind:
@@ -2902,55 +2916,249 @@ anything to do with an upload of yours, do it simply by emailing an
 explanation to <email>XXX-done@bugs.debian.org</email>.
 
 
-      <sect1 id="lintian-reports">Lintian reports
-       <p>
-You should periodically get the new <package>lintian</package> from
-`unstable' and check over all your packages.  Alternatively you can
-check for your maintainer email address at the <url id="&url-lintian;"
-name="online lintian report">.  That report, which is updated
-automatically, contains <prgn>lintian</prgn> reports against the
-latest version of the distribution (usually from 'unstable') using the
-latest <package>lintian</package>.
 
 
   <chapt id="best-pkging-practices">
     <heading>Best Packaging Practices</heading>
     <p>
-Debian's quality is largely due to its Policy that all packages
-follow. But it's also because we accumulated years of experience
-in packaging; very talented people created great tools to make
-good packages without much troubles.
+Debian's quality is largely due to the <url id="&url-debian-policy;"
+name="Debian Policy">, which defines explicit baseline requirements
+which all Debian packages must fulfill.  Yet there is also a shared
+history of experience which goes beyond the Debian Policy, an
+accumulation of years of experience in packaging.  Many very
+talented people have created great tools, tools which help you, the
+Debian maintainer, create and maintain excellent packages.
     <p>
-This chapter provides the best known solutions to common problems
-faced during packaging. It also lists various advice collected on
-several mailing lists. By following them, you will make Debian's quality
-even better.
-
-    <sect id="packaging-tools">
-       <heading>Packaging tools and common cases</heading>
+This chapter provides some best practices for Debian developers.  All
+recommendations are merely that, and are not requirements or policy.
+These are just some subjective hints, advice and pointers collected
+from Debian developers.  Feel free to pick and choose whatever works
+best for you.
+
+    <sect id="bpp-debian-rules">
+        <heading>Best practices for <file>debian/rules</file></heading>
+        <p>
+The following recommendations apply to the <file>debian/rules</file>
+file.  Since <file>debian/rules</file> controls the build process and
+selects the files which go into the package (directly or indirectly),
+it's usually the file maintainers spend the most time on.
 
        <sect1 id="helper-scripts">Helper scripts
        <p>
-To help you in your packaging effort, you can use helper scripts.
-The best scripts available are provided by <package>debhelper</package>.
-With <prgn>dh_make</prgn> (package <package>dh-make</package>), you can
-generate in a few seconds a package that is mostly ready. However that
-apparent simplicity is hiding many things done by the helper scripts.
-You have to know what is done by them, that's why you are strongly
-encouraged to read the corresponding manual pages, starting with
-<tt>debhelper(1)</tt>. That's required because you'll have to
-understand what is going on to be able to use them wisely and to
-fix bugs in a pretty way.
-       <p>
-debhelper is very useful because it lets you follow the latest Debian policy
-without doing many modifications since the changes that can be automated are
-almost always automatically done by a debhelper script. Furthermore it
-offers enough flexibility to be able to use it in conjunction with
-some hand crafted shell invocations within the <file>rules</file> file.
-       <p>
-You can however decide to not use any helper script and still write
-excellent <file>rules</file> file. Many examples are available
-at <url id="&url-rules-files;">.
+The rationale for using helper scripts in <file>debian/rules</file> is
+that lets maintainers use and share common logic among many packages.
+Take for instance the question of installing menu entries: you need to
+put the file into <file>/usr/lib/menu</file>, and add commands to the
+maintainer scripts to register and unregister the menu entries.  Since
+this is a very common thing for packages to do, why should each
+maintainer rewrite all this on their own, sometimes with bugs?  Also,
+supposing the menu directory changed, every package would have to be
+changed.
+       <p>
+Helper scripts take care of these issues.  Assuming you comply with
+the conventions expected by the helper script, the helper takes care
+of all the details.  Changes in policy can be made in the helper
+script, then packages just need to be rebuilt with the new version of
+the helper and no other changes.
+       <p>
+<ref id="tools"> contains a couple of different helpers. The most
+common and best (in our opinion) helper system is
+<package>debhelper</package>.  Previous helper systems, such as
+<package>debmake</package>, were "monolithic": you couldn't pick and
+choose which part of the helper you found useful, but had to use the
+helper to do everything.  <package>debhelper</package>, however, is a
+number of separate little <prgn>dh_*</prgn> programs.  For instance,
+<prgn>dh_installman</prgn> installs and compresses man pages,
+<prgn>dh_installmenu</prgn> installs menu files, and so on.  Thus, it
+offers enough flexibility to be able to use the little helper scripts,
+where useful, in conjunction with hand-crafted commands in
+<file>debian/rules</file>.
+       <p>
+You can get started with <package>debhelper</package> by reading
+<manref name="debhelper" section="1">, and looking at the examples
+that come with the package.  <prgn>dh_make</prgn>, from the
+<package>dh-make</package> package (see <ref id="dh-make">), can be
+used to convert a "vanilla" source package to a
+<package>debhelper</package>ized package.  This shortcut, though,
+should not convince you that you do not need to bother understanding
+the individual <prgn>dh_*</prgn> helpers.  If you are going to use a
+helper, you do need to take the time to learn to use that helper, to
+learn its expectations and behavior.
+       <p>
+Some people feel that vanilla <file>debian/rules</file> files are
+better, since you don't have to learn the intricacies of any helper
+system.  This decision is completely up to you.  Use what works for
+you.  Many examples of vanilla <file>debian/rules</file> files are
+available at <url id="&url-rules-files;">.
+
+
+       <sect1 id="multiple-patches">
+          <heading>Separating your patches into multiple files</heading>
+          <p>
+Big, complex packages may have many bugs that you need to deal with.
+If you correct a number of bug directly in the source, if you're not
+careful, it can get hard to differentiate the various patches that you
+applied.  It can get quite messy when you have to update the package
+to a new upstream version which integrates some of the fixes (but not
+all).  You can't take the total set of diffs (e.g., from
+<file>.diff.gz</file>) and work out which patch sets to back out as a
+unit as bugs are fixed upstream.
+       <p>
+Unfortunately, the packaging system as such currently doesn't provide for
+separating the patches into several files. Nevertheless, there are ways to
+separate patches: the patch files are shipped within the Debian patch file
+(<file>.diff.gz</file>), usually within the <file>debian/</file> directory.
+The only difference is that they aren't applied immediately by dpkg-source,
+but by the <tt>build</tt> rule of <file>debian/rules</file>. Conversely,
+they are reverted in the <tt>clean</tt> rule.
+       <p>
+<prgn>dbs</prgn> is one of the more popular approaches to this. It does all
+of the above, and provides a facility for creating new and updating old
+patches. See the package <package>dbs</package> for more information and
+<package>hello-dbs</package> for an example.
+       <p>
+<prgn>dpatch</prgn> also provides these facilities, but it's intented to be
+even easier to use. See the package <package>dpatch</package> for
+documentation and examples (in <file>/usr/share/doc/dpatch</file>).
+
+
+       <sect1 id="multiple-binary">Multiple binary packages
+       <p>
+A single source package will often build several binary packages,
+either to provide several flavors of the same software (examples are
+the <package>vim-*</package> packages) or to make several small
+packages instead of a big one (e.g., if the user can install only the
+subset she needs, and thus save some disk space).
+       <p>
+The second case can be easily managed in <file>debian/rules</file>.
+You just need to move the appropriate files from the build directory
+into the package's temporary trees.  You can do this using
+<prgn>install</prgn> (vanilla approach) or <prgn>dh_install</prgn>
+(from <package>debhelper</package>).  Be sure to check the different
+permutations of the various packages, ensuring that you have the
+inter-package dependencies set right in <file>debian/control</file>.
+       <p>
+The first case is a bit more difficult since it involves multiple
+recompiles of the same software but with different configure
+options. The <package>vim</package> is an example of how to manage
+this using an hand-crafted <file>debian/rules</file> file.
+
+<!-- &FIXME; Find a good debhelper example with multiple configure/make
+     cycles -->
+        </sect1>
+      </sect>
+
+    <sect id="bpp-debian-maint-scripts">
+        <heading>Best practices for maintainer scripts</heading>
+        <p>
+Maintainer scripts include the files <file>debian/postinst</file>,
+<file>debian/preinst</file>, <file>debian/prerm</file> and
+<file>debian/postrm</file>.  These scripts take care of any package
+installation or deinstallation setup which isn't handled merely by the
+creation or removal of files and directories.  The following
+instructions supplement the <url id="&url-debian-policy;" name="Debian
+Policy">.
+        <p>
+Maintainer scripts must be idempotent.  That means that you need to
+make sure nothing bad will happen if the script is called twice where
+it would usually be called once.
+        <p>
+Standard input and output may be redirected (e.g. into pipes) for
+logging purposes, so don't rely on them being a tty.
+        <p>
+All prompting or interactive configuration should be kept to a
+minimum.  When it is necessary, you should use the
+<package>debconf</package> package for the interface.  Remember that
+prompting in any case can only be in the <tt>configure</tt> stage of
+the <file>postinst</file> script.
+        <p>
+Keep the maintainer scripts as simple as possible.  We suggest you use
+pure POSIX shell scripts.  Remember, if you do need any bash features,
+the maintainer script must have a bash sh-bang line.  POSIX shell or
+Bash are preferred to Perl, since they enable
+<package>debhelper</package> to easily add bits to the scripts.
+        <p>
+If you change your maintainer scripts, be sure to test package
+removal, double installation, and purging.  Be sure that a purged
+package is completely gone, that is, it must remove any files created,
+directly or indirectly, in any maintainer script.
+        <p>
+If you need to check for the existence of a command, you should use
+something like
+<example>if [ -x /usr/sbin/install-docs ]; then ...</example>
+
+If you don't wish to hard-code the path of the command in your
+maintainer script, the following POSIX-compliant shell function may
+help:
+
+&example-pathfind;
+
+You can use this function to search <tt>$PATH</tt> for a command name,
+passed as an argument.  It returns true (zero) if the command was
+found, and false if not.  This is really the most portable way, since
+<tt>command -v</tt>, <prgn>type</prgn>, and <prgn>which</prgn> are not
+POSIX.  While <prgn>which</prgn> is an acceptable alternative, since
+it is from the required <package>debianutils</package> package, it's
+not on the root partition, although that is probably not something
+that will cause a problem.
+
+
+    <sect id="bpp-debian-control">
+       <heading>Best practices for <file>debian/control</file></heading>
+        <p>
+The following practices supplement the <url
+            id="&url-debian-policy;ch-miscellaneous.html#s-descriptions"
+            name="Policy on package descriptions">.</p>
+
+       <sect1 id="bpp-pkg-desc">
+           <heading>Writing useful descriptions</heading>
+           <p>
+The description of the package (as defined by the corresponding field
+in the <file>control</file> file) is the primary information available
+to the user about a package before they install it.  It should provide
+all the required information to let the user decide whether to install
+the package.
+           <p>
+For consistency and aesthetics, you should capitalize the first letter
+of the Synopsis.  Don't put a full stop (period) at the end.  The
+description itself should consist of full sentences.
+           <p>
+Since the first user impression is based on the description, be
+careful to avoid spelling and grammar mistakes. Ensure that you
+spell-check it.  <prgn>ispell</prgn> has a special <tt>-g</tt> option
+for <file>debian/control</file> files:
+
+<example>ispell -d american -g debian/control</example>
+
+If you want someone to proofread the description that you
+intend to use you may ask on &email-debian-l10n-english;.
+        </sect1>
+
+        <sect1 id="bpp-upstream-info">
+          <heading>Upstream home page</heading>
+          <p>
+We recommend that you add the URL for the package's home page to the
+package description in <file>debian/control</file>.  This information
+should be added at the
+end of description, using the following format:
+
+<example> .
+  Homepage: http://some-project.some-place.org/</example>
+
+Note the spaces prepending the line, which serves to break the lines
+correctly.  To see an example of how this displays, see <url
+id="&url-eg-desc-upstream-info;">.
+          <p>
+If there is no home page for the software, this should naturally be
+left empty.
+          <p>
+Note that we expect this field will eventually be replaced by a proper
+<file>debian/control</file> field understood by <prgn>dpkg</prgn> and
+<tt>&packages-host;</tt>.  If you don't want to bother migrating the
+home page from the description to this field, you should probably wait
+until that is available.</p>
+        </sect1>
+      </sect>
 
 <!--
        <sect1 id="pkg-mgmt-cvs">Managing a package with CVS
@@ -2959,80 +3167,88 @@ at <url id="&url-rules-files;">.
        via CVS (debian/rules refresh).
 -->
 
-       <sect1 id="multiple-patches">Package with multiple patches
-       <p>
-Big packages tend to have many upstream bugs that you want to fix within
-the Debian package. If you just correct the bug in the source, all the
-fixes are directly integrated in the <file>.diff.gz</file> file and you
-can't easily differentiate the various patches that you applied. It gets
-very messy when you have to update the package to a new upstream version
-which integrates some of the fixes (but not all).
+
+      <sect id="bpp-config-mgmt">
+       <heading>Configuration management with <package>debconf</package></heading>
+       
        <p>
-The good solution is to keep separate patches within the
-<file>debian/patches</file> directory and to apply them on the fly at
-build time. The package <package>dbs</package> provides an
-implementation of such a system, you just have to build-depend on dbs to
-be able to use its functionalities. The package
-<package>hello-dbs</package> is a simple example that demonstrates how to
-use <package>dbs</package>.
+<package>Debconf</package> is a configuration management system which
+can be used by all the various packaging scripts
+(<file>postinst</file> mainly) to request feedback from the user
+concerning how to configure the package. Direct user interactions must
+now be avoided in favor of <package>debconf</package>
+interaction. This will enable non-interactive installations in the
+future.
        <p>
-Additionally, dbs provides facilities to create the patches and to keep
-track of what they are for.
+Debconf is a great tool but it is often poorly used.   Many common mistakes
+are listed in the <manref name="debconf-devel" section="8"> man page. 
+It is something that you must read if you decide to use debconf.
+      </sect>
 
-       <sect1 id="multiple-binary">Multiple binary packages
-       <p>
-A single source package will often build several binary packages, either
-to provide several flavors of the same software (examples are the
-vim-* packages) or to make several small packages instead of a big one
-(it's interesting if the user doesn't need all the packages and can thus
-save some disk space).
-       <p>
-The second case can be easily managed by <prgn>dh_install</prgn> (from
-<package>debhelper</package>) to move files from the build directory to
-the package's temporary trees.
-       <p>
-The first case is a bit more difficult since it involves multiple recompiles
-of the same software but with different configure options. The 
-<package>vim</package> is an example of how to manage this with an
-hand crafted rules file. 
-<!-- &FIXME; Find a good debhelper example with multile configure/make
-     cycles -->
 
-       <sect1 id="handling-debconf-translations">Handling debconf translations
-       <p>
-Like porters, translators have a difficult task.  Since they work on many
-packages, they cannot keep track of every change in packages in order to
-be informed when a translated string is outdated.  Fortunately
-<package>debconf</package> can automatically report outdated translations,
-if package maintainers follow some basic guidelines described below.
-       <p>
-Translators can use <prgn>debconf-getlang</prgn> (package
-<package>debconf-utils</package>) to write a <file>templates.xx</file>
-file containing both English and localized fields (where <em>xx</em> is
-the language code, may be followed by a country code).  This file can be
-put into the <file>debian</file> subdirectory without any change.
-       <p>
-When building a binary package, <file>debian/templates.xx</file> files are
-merged along with <file>debian/templates</file> to generate the
-<file>templates</file> file contained in the binary package.  This is
-automatically done by <prgn>dh_installdebconf</prgn> (package
-<package>debhelper</package>). If you do not use debhelper, you can
-do the same with <prgn>debconf-mergetemplate</prgn>
-(package <package>debconf-utils</package>). 
-       <p>
-When the package maintainer needs to update the templates file, they only
-change <file>debian/templates</file>.  When English strings in this file
-and in <file>debian/templates.xx</file> differ, translators do know that
-their translation is outdated.
-       <p>
-Please see the page about
-<url id="&url-debconf-l10n-help;" name="localizing debconf templates files">
-at the Debian web site, it contains more detailed instructions, including a
-full example.
+      <sect id="bpp-i18n">
+        <heading>Internationalization</heading>
 
+       <sect1 id="bpp-i18n-debconf">
+          <heading>Handling debconf translations</heading>
+          <p>
+Like porters, translators have a difficult task.  They work on many
+packages and must collaborate with many different
+maintainers. Moreover, most of the time, they are not native English
+speakers, so you may need to be particularly patient with them.
+       <p>
+The goal of <package>debconf</package> was to make packages
+configuration easier for maintainers and for users.  Originally,
+translation of debconf templates was handled with
+<prgn>debconf-mergetemplate</prgn>.  However, that technique is now
+deprecated; the best way to accomplish <package>debconf</package>
+internationalization is by using the <package>po-debconf</package>
+package.  This method is easier both for maintainer and translators;
+transition scripts are provided.
+       <p>
+Using <package>po-debconf</package>, the translation is stored in
+<file>po</file> files (drawing from <prgn>gettext</prgn> translation
+techniques).  Special template files contain the original messages and
+mark which fields are translatable.  When you change the value of a
+translatable field, by calling <prgn>debconf-updatepo</prgn>, the
+translation is marked as needing attention from the translators. Then,
+at build time, the <prgn>dh_installdebconf</prgn> program takes care
+of all the needed magic to add the template along with the up-to-date
+translations into the binary packages.  Refer to the <manref
+name="po-debconf" section="7"> manual page for details.
+        </sect1>
+
+        <sect1 id="bpp-i18n-docs">
+          <heading>Internationalized documentation</heading>
+          <p>
+Internationalizing documentation is crucial for users, but a lot of
+labor.  There's no way to eliminate all that work, but you can make things
+easier for translators.
+          <p>
+If you maintain documentation of any size, its easier for translators
+if they have access to a source control system.  That lets translators
+see the differences between two versions of the documentation, so, for
+instance, they can see what needs to be retranslated.  It is
+recommended that the translated documentation maintain a note about
+what source control revision the translation is based on.  An
+interesting system is provided by <url id="&url-i18n-doc-check;"
+name="doc-check"> in the <package>boot-floppies</package> package,
+which shows an overview of the translation status for any given
+language, using structured comments for the current revision of the
+file to be translated and, for a translated file, the revision of the
+original file the translation is based on.  You might wish to adapt
+and provide that in your CVS area.
+          <p>
+If you maintain XML or SGML documentation, we suggest that you isolate
+any language-independent information and define those as entities in a
+separate file which is included by all the different
+translations. This makes it much easier, for instance, to keep URLs
+up-to-date across multiple files.
+        </sect1>
+      </sect>
 
-    <sect id="specific-practices">
-       <heading>Specific packaging practices</heading>
+      <sect id="bpp-common-situations">
+       <heading>Common packaging situations</heading>
 
 <!--
        <sect1 id="bpp-kernel">Kernel modules/patches
@@ -3044,11 +3260,15 @@ full example.
        <sect1 id="bpp-autotools">
           <heading>Packages using
           <prgn>autoconf</prgn>/<prgn>automake</prgn></heading>
-       <p>
-Some very good packaging practices for packages using
-<prgn>autoconf</prgn> and/or <prgn>automake</prgn> have been
-synthesized in &file-bpp-autotools;. You're strongly encouraged to
-read this file and to follow the given recommendations.
+          <p>
+Keeping <prgn>autoconf</prgn>'s <file>config.sub</file> and
+<file>config.guess</file> files up-to-date is critical for porters,
+especially on more volatile architectures.  Some very good packaging
+practices for any package using <prgn>autoconf</prgn> and/or
+<prgn>automake</prgn> have been synthesized in
+&file-bpp-autotools; from the <package>autotools-dev</package>
+package. You're strongly encouraged to read this file and
+to follow the given recommendations.
 
 
        <sect1 id="bpp-libraries">Libraries
@@ -3062,19 +3282,42 @@ breaking.
 Good practices for library packaging have been grouped in
 <url id="&url-libpkg-guide;" name="the library packaging guide">.
        
-       <sect1 id="bpp-other-specific-practices">Other specific packages
+
+       <sect1 id="bpp-docs">Documentation
+          <p>
+Be sure to follow the <url id="&url-debian-policy;ch-docs.html"
+            name="Policy on documentation">.</p>
+          <p>
+If your package contains documentation built from XML or SGML, we
+recommend you not ship the XML or SGML source in the binary
+package(s).  If users want the source of the documentation, they
+should retrieve the source package.</p>
+          <p>
+Policy specifies that documentation should be shipped in HTML format.
+We also recommend shipping documentation in PDF and plain text format if
+convenient and quality output is possible.  However, it is generally
+not appropriate to ship plain text versions of documentation whose source
+format is HTML.</p>
+          <p>
+Major shipped manuals should register themselves with
+<package>doc-base</package> on installation.  See the
+<package>doc-base</package> package documentation for more
+information.</p>
+
+
+       <sect1 id="bpp-other">Specific types of packages
        <p>
-Several subsets of packages have special sub-policies and corresponding
-packaging rules and practices:
+Several specific types of packages have special sub-policies and
+corresponding packaging rules and practices:
 <list>
     <item>
-Perl related packages have a <url name="Perl policy" id="&url-perl-policy;">,
-some examples of packages following that policy are
-<package>libdbd-pg-perl</package> (binary perl module) or 
+Perl related packages have a <url name="Perl policy"
+id="&url-perl-policy;">, some examples of packages following that
+policy are <package>libdbd-pg-perl</package> (binary perl module) or
 <package>libmldbm-perl</package> (arch independent perl module).
     <item>
-Python related packages have their python policy:
-&file-python-policy; (in the python package).
+Python related packages have their python policy; see
+&file-python-policy; in the <package>python</package> package.
     <item>
 Emacs related packages have the <url id="&url-emacs-policy;"
 name="emacs policy">.
@@ -3082,28 +3325,20 @@ name="emacs policy">.
 Java related packages have their <url id="&url-java-policy;"
 name="java policy">.
     <item>
-Ocaml related packages have their Ocaml policy: &file-ocaml-policy; (in
-the <package>ocaml</package> package). A good example is the <package>camlzip</package>
-source package.
+Ocaml related packages have their own policy, found in
+&file-ocaml-policy; from the <package>ocaml</package> package. A good
+example is the <package>camlzip</package> source package.
+    <item>
+Packages providing XML or SGML DTDs should conform to the
+recommendations found in the <package>sgml-base-doc</package>
+package.
+    <item>
+Lisp packages should register themselves with
+<package>common-lisp-controller</package>, about which see
+&file-lisp-controller;.
 </list>
-
-    <sect id="config-mgmt">
-       <heading>Configuration management</heading>
-       
-       <sect1 id="config-wise-debconf">
-          <heading>Proper use of <package>debconf</package></heading>
-       <p>
-<package>Debconf</package> is a configuration management system which
-can be used by all the various packaging scripts
-(<file>postinst</file> mainly) to request feedback from the user
-concerning how to configure the package. Direct user interactions must
-now be avoided in favor of <package>debconf</package>
-interaction. This will enable non-interactive installations in the
-future.
-       <p>
-Debconf is a great tool but it is often poorly used.   Many common mistakes
-are listed in the <manref name="debconf-devel" section="8"> man page. 
-It is something that you must read if you decide to use debconf.
+        </sect1>
+      </sect>
 
 <!--
        <sect1 id="custom-config-files">Custom configuration files
@@ -3120,34 +3355,6 @@ It is something that you must read if you decide to use debconf.
        sympa may be an example package
 -->    
 
-    <sect id="misc-advice">
-       <heading>Miscellaneous advice</heading>
-
-       <sect1 id="writing-desc">
-           <heading>Writing useful descriptions</heading>
-           <p>
-The description of the package (as defined by the corresponding field
-in the <file>control</file> file) is usually the first information
-available to the user before they install it. As such, it should
-provide all the required information to let him decide whether
-to install the package.
-           <p>
-For example, apart from the usual description that you adapt from the
-upstream <file>README</file>, you should include the URL of the
-web site if there's any. If the package is not yet considered stable
-by the author, you may also want to warn the user that the
-package is not ready for production use.
-           <p>
-For consistency and for an aesthetic concern, you should capitalize the
-first letter of the description.
-           <p>
-Last but not least, since the first user impression is based on
-that description, you should be careful to avoid English
-mistakes. Ensure that you spell check it.
-<prgn>ispell</prgn> has a special option (<tt>-g</tt>) for that:
-<example>ispell -d american -g debian/control</example>.
-If you want someone to proofread the description that you
-intend to use you may ask on &email-debian-l10n-english;.
 
 
 
@@ -3164,7 +3371,7 @@ members in choosing what they want to work on and in choosing
 the most critical thing to spend their time on.
 
     <sect id="submit-bug">
-        <heading>Bug Reporting</heading>
+        <heading>Bug reporting</heading>
         <p>
 We encourage you to file bugs as you find them in Debian packages.  In
 fact, Debian developers are often the first line testers.  Finding and
@@ -3218,7 +3425,7 @@ list.
 Even though there is a dedicated group of people for Quality
 Assurance, QA duties are not reserved solely for them. You can
 participate in this effort by keeping your packages as bug-free as
-possible, and as lintian-clean (see <ref id="lintian-reports">) as
+possible, and as lintian-clean (see <ref id="lintian">) as
 possible. If you do not find that possible, then you should consider
 orphaning some of your packages (see <ref
 id="orphaning">). Alternatively, you may ask the help of other people
@@ -3226,7 +3433,7 @@ in order to catch up the backlog of bugs that you have (you can ask
 for help on &email-debian-qa; or &email-debian-devel;). At the same
 time, you can look for co-maintainers (see <ref id="collaborative-maint">).
        
-       <sect1 id="qa-bsp">Bug Squashing Parties
+       <sect1 id="qa-bsp">Bug squashing parties
        <p>
 From time to time the QA group organizes bug squashing parties to get rid of
 as many problems as possible. They are announced on &email-debian-devel-announce;
@@ -3254,21 +3461,6 @@ also respect the maintainer's wishes if he expressed some.
 If someone doesn't feel confident with an NMU, he should just send a patch
 to the BTS. It's far better than a broken NMU.
 
-    <sect id="mia-qa">Dealing with unreachable maintainers
-      <p>
-If you notice that a package is lacking maintenance, you should
-make sure the maintainer is active and will continue to work on
-his packages. Try contacting him yourself.
-      <p>
-If you do not get a reply after a few weeks you should collect all 
-useful information about this maintainer. Start by logging into 
-the <url id="&url-debian-db;" name="Debian Developer's Database">
-and doing a full search to check whether the maintainer is on vacation
-and when they were last seen. Collect any important package names
-they maintain and any Release Critical bugs filed against them.
-      <p>
-Send all this information to &email-debian-qa;, in order to let the 
-QA people do whatever is needed.
 
     <sect id="contacting-maintainers">Contacting other maintainers
       <p>
@@ -3291,6 +3483,75 @@ You can do so by using the <tt>&lt;package-name&gt;@&pts-host;</tt>
 email address.
 
 
+    <sect id="mia-qa">Dealing with inactive and/or unreachable maintainers
+      <p>
+If you notice that a package is lacking maintenance, you should
+make sure that the maintainer is active and will continue to work on
+their packages. It is possible that they are not active any more, but
+haven't registered out of the system, so to speak. On the other hand,
+it is also possible that they just need a reminder.
+      <p>
+The first step is to politely contact the maintainer, and wait for a
+response, for a reasonable time. It is quite hard to define "reasonable
+time", but it is important to take into account that real life is sometimes
+very hectic. One way to handle this would be send a reminder after two
+weeks.
+      <p>
+If the maintainer doesn't reply within four weeks (a month), one can
+assume that a response will probably not happen. If that happens, you
+should investigate further, and try to gather as much useful information
+about the maintainer in question as possible. This includes:
+      <p>
+      <list>
+       <item>The "echelon" information available through the 
+              <url id="&url-debian-db;" name="developers' LDAP database">,
+              which indicates when's the last time a developer has posted to
+              a Debian mailing list. (This includes uploads via
+              debian-*-changes lists.) Also, remember to check whether the
+              maintainer is marked as "on vacation" in the database.
+
+       <item>The number of packages this maintainer is responsible for,
+              and the condition of those packages. In particular, are there
+              any RC bugs that have been open for ages? Furthermore, how
+              many bugs are there in general? Another important piece of
+              information is whether the packages have been NMUed, and if
+              so, by whom?
+
+       <item>Is there any activity of the maintainer outside of Debian? 
+              For example, they might have posted something recently to
+              non-Debian mailing lists or news groups.
+      </list>
+      <p>
+One big problem are packages which were sponsored -- the maintainer is not
+an official Debian developer. The echelon information is not available for
+sponsored people, for example, so you need to find and contact the Debian
+developer who has actually uploaded the package. Given that they signed the
+package, they're responsible for the upload anyhow, and should know what
+happened to the person they sponsored.
+      <p>
+It is also allowed to post a query to &email-debian-devel;, asking if anyone
+is aware of the whereabouts of the missing maintainer.
+      <p>
+Once you have gathered all of this, you can contact &email-debian-qa;.
+People on this alias will use the information you provided in order to
+decide how to proceed. For example, they might orphan one or all of the
+packages of the maintainer. If a packages has been NMUed, they might prefer
+to contact the NMUer before orphaning the package -- perhaps the person who
+has done the NMU is interested in the package.
+      <p>
+One last word: please remember to be polite. We are all volunteers and
+cannot dedicate all of our time to Debian. Also, you are not aware of the
+circumstances of the person who is involved. Perhaps they might be
+seriously ill or might even had died -- you do not know who may be on the
+receiving side -- imagine how a relative will feel if they read the e-mail
+of the deceased and find a very impolite, angry and accusing message!)
+      <p>
+On the other hand, although we are volunteers, we do have a responsibility. 
+So you can stress the importance of the greater good -- if a maintainer does
+not have the time or interest anymore, they should "let go" and give the
+package to someone with more time.
+
+
     <sect id="newmaint">
       <heading>Interacting with prospective Debian developers</heading>
       <p>
@@ -3393,10 +3654,14 @@ endorse any particular tool to the exclusion of a competing tool.
 Most of the descriptions of these packages come from the actual
 package descriptions themselves.  Further information can be found in
 the package documentation itself.  You can also see more info with the
-command <tt>apt-cache show &lt;package-name&gt;</tt>.
+command <tt>apt-cache show &lt;package-name&gt;</tt>.</p>
 
+      <sect id="tools-core">
+        <heading>Core tools</heading>
+        <p>
+The following tools are pretty much required for any maintainer.</p>
 
-      <sect id="dpkg-dev">
+      <sect1 id="dpkg-dev">
        <heading><package>dpkg-dev</package>
        <p>
 <package>dpkg-dev</package> contains the tools (including
@@ -3405,18 +3670,7 @@ source packages.  These utilities contain the fundamental, low-level
 functionality required to create and manipulated packages; as such,
 they are required for any Debian maintainer.
 
-
-      <sect id="lintian">
-       <heading><package>lintian</package>
-       <p>
-<package>Lintian</package> dissects Debian packages and reports bugs
-and policy violations. It contains automated checks for many aspects
-of Debian policy as well as some checks for common errors.  The use of
-<package>lintian</package> has already been discussed in <ref
-id="upload-checking"> and <ref id="lintian-reports">.
-
-
-      <sect id="debconf">
+      <sect1 id="debconf">
         <heading><package>debconf</package></heading>
         <p>
 <package>debconf</package> provides a consistent interface to
@@ -3429,14 +3683,71 @@ You can find documentation for this package in the
 <package>debconf-doc</package> package.
         <p>
 Many feel that this system should be used for all packages requiring
-interactive configuration.  <package>debconf</package> is not
-currently required by Debian Policy, however, that may change in the
-future.
+interactive configuration; see <ref id="bpp-config-mgmt">.
+<package>debconf</package> is not currently required by Debian Policy,
+but that may change in the future.
+        </sect1>
+
+      <sect1 id="fakeroot">
+       <heading><package>fakeroot</package>
+       <p>
+<package>fakeroot</package> simulates root privileges.  This enables
+you to build packages without being root (packages usually want to
+install files with root ownership).  If you have
+<package>fakeroot</package> installed, you can build packages as a
+user: <tt>dpkg-buildpackage -rfakeroot</tt>.
+        </sect1>
+      </sect>
+
+      <sect id="tools-lint">
+        <heading>Package lint tools</heading>
         <p>
+According to the Free On-line Dictionary of Computing (FOLDOC), `lint'
+is "a Unix C language processor which carries out more thorough checks
+on the code than is usual with C compilers."  Package lint tools help
+package maintainers by automatically finding common problems and
+policy violations with their packages.</p>
+
+        <sect1 id="lintian">
+          <heading><package>lintian</package></heading>
+          <p>
+<package>lintian</package> dissects Debian packages and emits
+information on bugs
+and policy violations. It contains automated checks for many aspects
+of Debian policy as well as some checks for common errors.
+       <p>
+You should periodically get the newest <package>lintian</package> from
+`unstable' and check over all your packages. Notice that the <tt>-i</tt>
+option provides detailed explanations of what each error or warning means,
+what is its basis in Policy, and commonly how you can fix the problem.
+       <p>
+Refer to <ref id="upload-checking"> for more information on how and when
+to use Lintian.
+       <p>
+You can also see a summary of all problems reported by Lintian on your
+packages at <url id="&url-lintian;">. Those reports contain the latest
+<prgn>lintian</prgn> output on the whole development distribution
+("unstable").
+        </sect1>
 
+        <sect1 id="linda">
+          <heading><package>linda</package></heading>
+          <p>
+<package>linda</package> is another package linter.  It is similar to
+<package>lintian</package> but has a different set of checks.  Its
+written in Python rather than Perl.</p>
+        </sect1>
+      </sect>
 
-      <sect id="debhelper">
-       <heading><package>debhelper</package>
+      <sect id="tools-helpers">
+        <heading>Helpers for <file>debian/rules</file></heading>
+       <p>
+Package building tools make the process of writing
+<file>debian/rules</file> files easier.  See <ref id="helper-scripts">
+for more information on why these might or might not be desired.
+
+        <sect1 id="debhelper">
+          <heading><package>debhelper</package></heading>
        <p>
 <package>debhelper</package> is a collection of programs that can be
 used in <file>debian/rules</file> to automate common tasks related to
@@ -3452,10 +3763,10 @@ other "debian/rules tools".
 There are a number of little <package>debhelper</package> add-on
 packages, too transient to document.  You can see the list of most of
 them by doing <tt>apt-cache search ^dh-</tt>.
+        </sect1>
 
-
-      <sect id="debmake">
-       <heading><package>debmake</package>
+        <sect1 id="debmake">
+          <heading><package>debmake</package>
        <p>
 <package>debmake</package>, a pre-cursor to
 <package>debhelper</package>, is a less granular
@@ -3469,10 +3780,25 @@ sort of automated functions that one finds in
 The consensus is that <package>debmake</package> is now deprecated in
 favor of <package>debhelper</package>.  However, it's not a bug to use
 <package>debmake</package>.
+        </sect1>
 
+        <sect1 id="dh-make">
+          <heading><package>dh-make</package>
+       <p>
+The <package/dh-make/ package contains <prgn/dh_make/, a program that
+creates a skeleton of files necessary to build a Debian package out of
+a source tree. As the name suggests, <prgn/dh_make/ is a rewrite of
+<package/debmake/ and its template files use dh_* programs from
+<package/debhelper/.
+       <p>
+While the rules files generated by <prgn/dh_make/ are in general a
+sufficient basis for a working package, they are still just the groundwork:
+the burden still lies on the maintainer to finely tune the generated files
+and make the package entirely functional and Policy-compliant.
+        </sect1>
 
-      <sect id="yada">
-       <heading><package>yada</package>
+        <sect1 id="yada">
+          <heading><package>yada</package>
        <p>
 <package>yada</package> is another packaging helper tool.  It uses a
 <file>debian/packages</file> file to auto-generate
@@ -3482,20 +3808,30 @@ favor of <package>debhelper</package>.  However, it's not a bug to use
 Note that <package>yada</package> is called "essentially unmaintained"
 by it's own maintainer, Charles Briscoe-Smith.  As such, it can be
 considered deprecated.
+        </sect1>
 
-
-      <sect id="equivs">
-       <heading><package>equivs</package>
+        <sect1 id="equivs">
+          <heading><package>equivs</package>
        <p>
 <package>equivs</package> is another package for making packages.  It
 is often suggested for local use if you need to make a package simply
 to fulfill dependencies.  It is also sometimes used when making
 ``meta-packages'', which are packages whose only purpose is to depend
-on other packages.
+on other packages.</p>
+        </sect1>
+      </sect>
 
 
-      <sect id="cvs-buildpackage">
-       <heading><package>cvs-buildpackage</package>
+
+      <sect id="tools-builders">
+        <heading>Package builders</heading>
+        <p>
+The following packages help with the package building process, general
+driving <prgn>dpkg-buildpackage</prgn> as well as handling supporting
+tasks.</p>
+
+        <sect1 id="cvs-buildpackage">
+          <heading><package>cvs-buildpackage</package>
        <p>
 <package>cvs-buildpackage</package> provides the capability to inject
 or import Debian source packages into a CVS repository, build a Debian
@@ -3507,105 +3843,236 @@ by Debian maintainers. This allows one to keep separate CVS branches
 of a package for <em>stable</em>, <em>unstable</em> and possibly
 <em>experimental</em> distributions, along with the other benefits of
 a version control system.
+        </sect1>
 
-
-      <sect id="dupload">
-       <heading><package>dupload</package>
+        <sect1 id="debootstrap">
+          <heading><package>debootstrap</package></heading>
+          <p>
+The <package>debootstrap</package> package and script allows you to
+"bootstrap" a Debian base system into any part of your file-system.
+By "base system", we mean the bare minimum of packages required to
+operate and install the rest of the system.
        <p>
+Having a system like this can be useful in many ways. For instance,
+you can <prgn>chroot</prgn> into it if you want to test your build
+depends.  Or, you can test how your package behaves when installed
+into a bare base system.  Chroot builders use this package, see below.
+        </sect1>
+
+        <sect1 id="pbuilder">
+          <heading><package>pbuilder</package></heading>
+          <p>
+<package>pbuilder</package> constructs a chrooted system, and builds a
+package inside the chroot. It is very useful to check that a package's
+build-dependencies are correct, and to be sure that unnecessary and
+wrong build dependencies will not exist in the resulting package.</p>
+          <p>
+A related package is <package>pbuilder-uml</package>, which goes even
+further build doing the build within User-mode-linux.</p>
+        </sect1>
+
+      <sect1 id="sbuild">
+        <heading><package>sbuild</package></heading>
+          <p>
+<package>sbuild</package> is another automated builder.  It can use
+chrooted environments as well.  It can be used stand-alone, or as part
+of a networked, distributed build environment.  As the latter, it is
+part of the system used by porters to build binary packages for all
+the available architectures.  See <ref id="buildd"> for more
+information, and <url id="&url-buildd;"> to see the system in
+action.</p>
+        </sect1>
+      </sect>
+
+      <sect id="uploaders">
+        <heading>Package uploaders</heading>
+        <p>
+The following packages help automate or simplify the process of
+uploading packages into the official archive.</p>
+
+        <sect1 id="dupload">
+          <heading><package>dupload</package></heading>
+          <p>
 <package>dupload</package> is a package and a script to automatically
 upload Debian packages to the Debian archive, to log the upload, and
 to send mail about the upload of a package.  You can configure it for
 new upload locations or methods.
+        </sect1>
 
-
-      <sect id="dput">
-       <heading><package>dput</package>
-       <p>
+        <sect1 id="dput">
+          <heading><package>dput</package></heading>
+          <p>
 The <package>dput</package> package and script does much the same
 thing as <package>dupload</package>, but in a different way.  It has
 some features over <package>dupload</package>, such as the ability to
 check the GnuPG signature and checksums before uploading, and the
 possibility of running <prgn>dinstall</prgn> in dry-run mode after the
 upload.
+        </sect1>
+      </sect>
 
-
-      <sect id="fakeroot">
-       <heading><package>fakeroot</package>
-       <p>
-<package>fakeroot</package> simulates root privileges.  This enables
-you to build packages without being root (packages usually want to
-install files with root ownership).  If you have
-<package>fakeroot</package> installed, you can build packages as a
-user: <tt>dpkg-buildpackage -rfakeroot</tt>.
-
-
-      <sect id="debootstrap">
-       <heading><package>debootstrap</package>
-       <p>
-The <package>debootstrap</package> package and script allows you to
-"bootstrap" a Debian base system into any part of your file-system.
-By "base system", we mean the bare minimum of packages required to
-operate and install the rest of the system.
-       <p>
-Having a system like this can be useful in many ways. For instance,
-you can <prgn>chroot</prgn> into it if you want to test your build
-depends.  Or, you can test how your package behaves when installed
-into a bare base system.
-
-
-      <sect id="pbuilder">
-        <heading><package>pbuilder</package>
+      <sect id="tools-maint-automate">
+        <heading>Maintenance automation</heading>
         <p>
-<package>pbuilder</package> constructs a chrooted system, and builds
-a package inside the chroot. It is very useful to check that
-a package's build-dependencies are correct, and to be sure that
-unnecessary and wrong build dependencies will not exist in the
-resulting package. 
-
+The following tools help automate different maintenance tasks, from
+adding changelog entries or signature lines, looking up bugs in Emacs,
+to making use of the newest and official use of
+<file>config.sub</file>.</p>
 
-      <sect id="devscripts">
-       <heading><package>devscripts</package>
-       <p>
-<package>devscripts</package> is a package containing a few wrappers
+        <sect1 id="devscripts">
+          <heading><package>devscripts</package></heading>
+          <p>
+<package>devscripts</package> is a package containing wrappers
 and tools which are very helpful for maintaining your Debian
 packages.  Example scripts include <prgn>debchange</prgn> and
 <prgn>dch</prgn>, which manipulate your <file>debian/changelog</file>
 file from the command-line, and <prgn>debuild</prgn>, which is a
 wrapper around <prgn>dpkg-buildpackage</prgn>. The <prgn>bts</prgn>
 utility is also very helpful to update the state of bug reports on the
-command line, as is <prgn>uscan</prgn> to watch for new upstream
-versions of your packages. Check the <tt>devscripts(1)</tt> manual
-page for a complete list of available scripts.
+command line.  <prgn>uscan</prgn> can be used to watch for new upstream
+versions of your packages.  The <prgn>debrsign</prgn> can be used to
+remotely sign a package prior to upload, which is nice when the
+machine you build the package on is different from where your GPG keys
+are.</p>
+          <p>
+See the <manref name="devscripts" section="1"> manual page for a
+complete list of available scripts.</p>
+        </sect1>
 
+        <sect1 id="autotools-dev">
+          <heading><package>autotools-dev</package></heading>
+          <p>
+Contains best practices for people maintaining packages that use
+<prgn>autoconf</prgn> and/or <prgn>automake</prgn>.  Also contains
+canonical <file>config.sub</file> and <file>config.guess</file> files
+which are known to work on all Debian ports.</p>
+        </sect1>
+
+        <sect1 id="dpkg-repack">
+          <heading><package>dpkg-repack</package></heading>
+          <p>
+<prgn>dpkg-repack</prgn> creates Debian package file out of a package
+that has already been installed. If any changes have been made to the
+package while it was unpacked (e.g., files in <file>/etc</file> were
+modified), the new package will inherit the changes.</p>
+          <p>
+This utility can make it easy to copy packages from one computer to
+another, or to recreate packages that are installed on your system
+but no longer available elsewhere, or to store the current state of a
+package before you upgrade it.</p>
+        </sect1>
+
+        <sect1 id="alien">
+          <heading><package>alien</package></heading>
+          <p>
+<prgn>alien</prgn> converts binary packages between various packaging
+formats, including Debian, RPM (RedHat), LSB (Linux Standard Base),
+Solaris and Slackware packages.</p>
+        </sect1>
 
-      <sect id="dpkg-dev-el">
-       <heading><package>dpkg-dev-el</package>
-       <p>
+        <sect1 id="debsums">
+          <heading><package>debsums</package></heading>
+          <p>
+<prgn>debsums</prgn> checks installed packages against their MD5 sums.
+Note that not all packages have MD5 sums, since they aren't required
+by Policy.</p>
+        </sect1>
+
+        <sect1 id="dpkg-dev-el">
+          <heading><package>dpkg-dev-el</package></heading>
+          <p>
 <package>dpkg-dev-el</package> is an Emacs lisp package which provides
 assistance when editing some of the files in the <file>debian</file>
 directory of your package.  For instance, when editing
 <file>debian/changelog</file>, there are handy functions for
-finalizing a version and listing the package's current bugs.
+finalizing a version and listing the package's current bugs.</p>
+        </sect1>
+      </sect>
 
 
-      <sect id="debget">
-       <heading><package>debget</package>
-       <p>
-<package>debget</package> is a package containing a convenient script
-which can be helpful in downloading files from the Debian archive.
-You can use it to download source packages, for instance (although
-<tt>apt-get source &lt;package-name&gt;</tt> does pretty much the same
-thing).
+      <sect id="tools-porting">
+        <heading>Porting tools</heading>
+        <p>
+The following tools are helpful for porters and for
+cross-compilation.</p>
 
+       <sect1 id="quinn-diff">
+         <heading><package>quinn-diff</package>
+         <p>
+<package>quinn-diff</package> is used to locate the differences from
+one architecture to another.  For instance, it could tell you which
+packages need to be ported for architecture <var>Y</var>, based on
+architecture <var>X</var>.
+
+       <sect1 id="dpkg-cross">
+         <heading><package>dpkg-cross</package>
+         <p>
+<package>dpkg-cross</package> is a tool for installing libraries and
+headers for cross-compiling in a way similar to
+<package>dpkg</package>. Furthermore, the functionality of
+<prgn>dpkg-buildpackage</prgn> and <prgn>dpkg-shlibdeps</prgn> is
+enhanced to support cross-compiling.
+        </sect1>
+
+
+      <sect id="tools-doc">
+        <heading>Documentation and information</heading>
+        <p>
+The following packages provide information for maintainers or help
+with building documentation.
+
+        <sect1 id="debiandoc-sgml">
+          <heading><package>debiandoc-sgml</package></heading>
+          <p>
+<package>debiandoc-sgml</package> provides the DebianDoc SGML DTD,
+which is commonly used for Debian documentation.  This manual, for
+instance, is written in DebianDoc.  It also provides scripts for
+building and styling the source to various output formats.</p>
+          <p>
+Documentation for the DTD can be found in the
+<package>debiandoc-sgml-doc</package> package.</p>
+        </sect1>
+
+        <sect1 id="debian-keyring">
+          <heading><package>debian-keyring</package></heading>
+          <p>
+Contains the public GPG and PGP keys of Debian developers.  See <ref
+id="key-maint"> and the package documentation for more
+information.</p>
+        </sect1>
+
+        <sect1 id="debview">
+          <heading><package>debview</package></heading>
+          <p>
+<package>debview</package> provides an Emacs mode for viewing Debian
+binary packages.  This lets you examine a package without unpacking
+it.</p>
+        </sect1>
+      </sect>
 
 <!-- FIXME: add the following
+
+questionable:
+  ucf
   dpkg-awk
-  alien
-  dpkg-repack
   grep-dctrl
+  d-shlibs
+  wajig
+  magpie
+  apt-dpkg-ref
+  apt-show-source
+  apt-show-versions
+  pdbv
+  epm
+  apt-src
+  apt-build
+
+rejected:
+  debaux: too new, unmaintained?
+  dh-make-perl: too new, unmaintained?
 -->
 
-
+    </appendix>
   </book>
 </debiandoc>