]> git.donarmstrong.com Git - debian/debian-policy.git/commitdiff
Merge branch 'master' into bug224509-rra
authorRuss Allbery <rra@debian.org>
Thu, 3 Jun 2010 16:26:14 +0000 (09:26 -0700)
committerRuss Allbery <rra@debian.org>
Thu, 3 Jun 2010 16:26:14 +0000 (09:26 -0700)
1  2 
policy.sgml

diff --combined policy.sgml
index 4bd7c9b6532d5166e5d9a49736c834326251f9d6,af00c0ee8e08cc3333b99e4bca1a6eb6a9ee8d1a..1e9934cd29e49b489cccca7584f84719c1637f09
          <em>ruby</em>, <em>science</em>, <em>shells</em>, <em>sound</em>,
          <em>tex</em>, <em>text</em>, <em>utils</em>, <em>vcs</em>,
          <em>video</em>, <em>web</em>, <em>x11</em>, <em>xfce</em>,
-         <em>zope</em>.
+         <em>zope</em>.  The additional section <em>debian-installer</em>
+         contains special packages used by the installer and is not used
+         for normal Debian packages.
+       </p>
+       <p>
+         For more information about the sections and their definitions,
+         see the <url id="http://packages.debian.org/unstable/"
+                      name="list of sections in unstable">.
        </p>
        </sect>
  
@@@ -3549,17 -3557,15 +3557,17 @@@ Files
        <heading>Controlling terminal for maintainer scripts</heading>
  
        <p>
 -        The maintainer scripts are guaranteed to run with a
 -        controlling terminal and can interact with the user.
 -        Because these scripts may be executed with standard output
 -        redirected into a pipe for logging purposes, Perl scripts
 -        should set unbuffered output by setting <tt>$|=1</tt> so
 -        that the output is printed immediately rather than being
 -        buffered.
 +        Maintainer scripts are not guaranteed to run with a controlling
 +        terminal and may not be able to interact with the user.  They
 +        must be able to fall back to noninteractive behavior if no
 +        controlling terminal is available.  Maintainer scripts that
 +        prompt via a program conforming to the Debian Configuration
 +        Management Specification (see <ref id="maintscriptprompt">) may
 +        assume that program will handle falling back to noninteractive
 +        behavior.
        </p>
        </sect>
 +
        <sect id="exitstatus">
        <heading>Exit status</heading>
  
@@@ -6008,7 -6014,7 +6016,7 @@@ rmdir /usr/local/share/emacs 2>/dev/nul
          </p>
        </sect1>
  
-       <sect1>
+       <sect1 id="writing-init">
          <heading>Writing the scripts</heading>
  
          <p>
            option.
          </p>
  
+         <p>
+           Be careful of using <tt>set -e</tt> in <file>init.d</file>
+           scripts.  Writing correct <file>init.d</file> scripts requires
+           accepting various error exit statuses when daemons are already
+           running or already stopped without aborting
+           the <file>init.d</file> script, and common <file>init.d</file>
+           function libraries are not safe to call with <tt>set -e</tt>
+           in effect<footnote>
+             <tt>/lib/lsb/init-functions</tt>, which assists in writing
+             LSB-compliant init scripts, may fail if <tt>set -e</tt> is
+             in effect and echoing status messages to the console fails,
+             for example.
+           </footnote>.  For <tt>init.d</tt> scripts, it's often easier
+           to not use <tt>set -e</tt> and instead check the result of
+           each command separately.
+         </p>
          <p>
            If a service reloads its configuration automatically (as
            in the case of <prgn>cron</prgn>, for example), the
@@@ -7155,13 -7178,19 +7180,19 @@@ strip --strip-unneeded <var>your-lib</v
            language currently used to implement it.
          </p>
        <p>
-         Shell scripts (<prgn>sh</prgn> and <prgn>bash</prgn>)
-         should almost certainly start with <tt>set -e</tt> so that
-         errors are detected.  Every script should use
-         <tt>set -e</tt> or check the exit status of <em>every</em>
-         command.
+         Shell scripts (<prgn>sh</prgn> and <prgn>bash</prgn>) other than
+         <file>init.d</file> scripts should almost certainly start
+         with <tt>set -e</tt> so that errors are detected.
+         <file>init.d</file> scripts are something of a special case, due
+         to how frequently they need to call commands that are allowed to
+         fail, and it may instead be easier to check the exit status of
+         commands directly.  See <ref id="writing-init"> for more
+         information about writing <file>init.d</file> scripts.
+       </p>
+       <p>
+         Every script should use <tt>set -e</tt> or check the exit status
+         of <em>every</em> command.
        </p>
        <p>
          Scripts may assume that <file>/bin/sh</file> implements the
          SUSv3 Shell Command Language<footnote>
@@@ -7755,15 -7784,12 +7786,12 @@@ endscrip
          security policy by changing the permissions on a binary:
          they can do this by using <prgn>dpkg-statoverride</prgn>, as
          described below.<footnote>
-             Ordinary files installed by <prgn>dpkg</prgn> (as
-             opposed to <tt>conffile</tt>s and other similar objects)
-             normally have their permissions reset to the distributed
-             permissions when the package is reinstalled.  However,
-             the use of <prgn>dpkg-statoverride</prgn> overrides this
-             default behavior.  If you use this method, you should
-             remember to describe <prgn>dpkg-statoverride</prgn> in
-             the package documentation; being a relatively new
-             addition to Debian, it is probably not yet well-known.
+           Ordinary files installed by <prgn>dpkg</prgn> (as
+           opposed to <tt>conffile</tt>s and other similar objects)
+           normally have their permissions reset to the distributed
+           permissions when the package is reinstalled.  However,
+           the use of <prgn>dpkg-statoverride</prgn> overrides this
+           default behavior.
          </footnote>
          Another method you should consider is to create a group for
          people allowed to use the program(s) and make any setuid
@@@ -9511,9 -9537,9 +9539,9 @@@ END-INFO-DIR-ENTR
              </p>
  
              <p>
 -              The maintainer scripts are guaranteed to run with a
 -              controlling terminal and can interact with the user.
 -              See <ref id="controllingterminal">.
 +              The maintainer scripts are not guaranteed to run with a
 +              controlling terminal and may not be able to interact with
 +              the user.  See <ref id="controllingterminal">.
              </p>
            </item>
  
          </p>
        </sect1>
  
-       <sect1 id="pkg-dpkgchangelog">
-         <heading><file>debian/changelog</file></heading>
-         <p>
-           See <ref id="dpkgchangelog">.
-         </p>
-         <sect2><heading>Defining alternative changelog formats
-           </heading>
-           <p>
-             It is possible to use a different format to the standard
-             one, by providing a parser for the format you wish to
-             use.
-           </p>
-           <p>
-             In order to have <tt>dpkg-parsechangelog</tt> run your
-             parser, you must include a line within the last 40 lines
-             of your file matching the Perl regular expression:
-             <tt>\schangelog-format:\s+([0-9a-z]+)\W</tt> The part in
-             parentheses should be the name of the format.  For
-             example, you might say:
-             <example>
-   @@@ changelog-format: joebloggs @@@
-             </example>
-             Changelog format names are non-empty strings of alphanumerics.
-           </p>
-           <p>
-             If such a line exists then <tt>dpkg-parsechangelog</tt>
-             will look for the parser as
-             <file>/usr/lib/dpkg/parsechangelog/<var>format-name</var></file>
-             or
-             <file>/usr/local/lib/dpkg/parsechangelog/<var>format-name</var></file>;
-             it is an error for it not to find it, or for it not to
-             be an executable program.  The default changelog format
-             is <tt>dpkg</tt>, and a parser for it is provided with
-             the <tt>dpkg</tt> package.
-           </p>
-           <p>
-             The parser will be invoked with the changelog open on
-             standard input at the start of the file.  It should read
-             the file (it may seek if it wishes) to determine the
-             information required and return the parsed information
-             to standard output in the form of a series of control
-             fields in the standard format.  By default it should
-             return information about only the most recent version in
-             the changelog; it should accept a
-             <tt>-v<var>version</var></tt> option to return changes
-             information from all versions present <em>strictly
-             after</em> <var>version</var>, and it should then be an
-             error for <var>version</var> not to be present in the
-             changelog.
-           </p>
-           <p>
-             The fields are:
-             <list compact="compact">
-               <item><qref id="f-Source"><tt>Source</tt></qref></item>
-               <item><qref id="f-Version"><tt>Version</tt></qref> (mandatory)</item>
-               <item><qref id="f-Distribution"><tt>Distribution</tt></qref> (mandatory)</item>
-               <item><qref id="f-Urgency"><tt>Urgency</tt></qref> (mandatory)</item>
-               <item><qref id="f-Maintainer"><tt>Maintainer</tt></qref> (mandatory)</item>
-               <item><qref id="f-Date"><tt>Date</tt></qref></item>
-               <item><qref id="f-Changes"><tt>Changes</tt></qref> (mandatory)</item>
-             </list>
-           </p>
-           <p>
-             If several versions are being returned (due to the use
-             of <tt>-v</tt>), the urgency value should be of the
-             highest urgency code listed at the start of any of the
-             versions requested followed by the concatenated
-             (space-separated) comments from all the versions
-             requested; the maintainer, version, distribution and
-             date should always be from the most recent version.
-           </p>
-           <p>
-             For the format of the <tt>Changes</tt> field see
-             <ref id="f-Changes">.
-           </p>
-           <p>
-             If the changelog format which is being parsed always or
-             almost always leaves a blank line between individual
-             change notes these blank lines should be stripped out,
-             so as to make the resulting output compact.
-           </p>
-           <p>
-             If the changelog format does not contain date or package
-             name information this information should be omitted from
-             the output.  The parser should not attempt to synthesize
-             it or find it from other sources.
-           </p>
-           <p>
-             If the changelog does not have the expected format the
-             parser should exit with a nonzero exit status, rather
-             than trying to muddle through and possibly generating
-             incorrect output.
-           </p>
-           <p>
-             A changelog parser may not interact with the user at
-             all.
-           </p>
-         </sect2>
-       </sect1>
        <sect1 id="pkg-srcsubstvars">
          <heading><file>debian/substvars</file> and variable substitutions</heading>