]> git.donarmstrong.com Git - debian/debian-policy.git/blobdiff - policy.sgml
Specification of date format -- bug #569174.
[debian/debian-policy.git] / policy.sgml
index 22aac63a12d3fa072c807150d36f25a58062498a..f0719b95c8beecb8a965ee6bbf05fd70e7e7f601 100644 (file)
        </p>
 
        <p>
-         The <var>date</var> must be in RFC822 format<footnote>
+         The <var>date</var> has the following format<footnote>
              This is generated by <tt>date -R</tt>.
-         </footnote>; it must include the time zone specified
-         numerically, with the time zone name or abbreviation
-         optionally present as a comment in parentheses.
+         </footnote> (compatible and with the same semantics of
+         RFC 2822 and RFC 5322):
+         <example>day-of-week, dd month yyyy hh:mm:ss +zzzz</example>
+         where: 
+         <list compact="compact">
+           <item>day-of week is one of: Mon, Tue, Wed, Thu, Fri, Sat, Sun</item>
+           <item>dd is a one- or two-digit day of the month (01-31)</item>
+           <item>month is one of: Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec</item>
+           <item>yyyy is the four-digit year (e.g. 2010)</item>
+           <item>hh is the two-digit hour (00-23</item>
+           <item>mm is the two-digit minutes (00-59)</item>
+           <item>ss is the two-digit seconds (00-60)</item>
+           <item>
+             +zzzz or -zzzz is the the time zone offset from Coordinated Universal
+             Time (UTC).  "+" indicates that the time is ahead of (i.e., east of) UTC
+             and "-" indicates that the time is behind (i.e., west of) UTC.  The
+             first two digits indicate the hour difference from UTC and the last
+             two digits indicate the number of additional minutes difference from
+             UTC.  The last two digits must be in the range 00-59.
+           </item>
+         </list>
        </p>
 
        <p>
@@ -2742,6 +2760,8 @@ Package: libc6
                <item>
                  An architecture wildcard identifying a set of Debian
                  machine architectures, see <ref id="arch-wildcard-spec">.
+                 <tt>any</tt> matches all Debian machine architectures
+                 and is the most frequently used.
                </item>
                <item>
                  <tt>all</tt>, which indicates an
@@ -2755,46 +2775,42 @@ Package: libc6
 
          <p>
            In the main <file>debian/control</file> file in the source
-           package, this field may contain the special value <tt>all</tt>
-           or a list of specific and wildcard architectures separated by
-           spaces.  If <tt>all</tt> appears, that value must be the
-           entire contents of the field.  Most packages will use
-           either <tt>any</tt> or <tt>all</tt>.  Specifying a specific
-           list of architectures is for the minority of cases where a
+           package, this field may contain the special
+           value <tt>all</tt>, the special architecture
+           wildcard <tt>any</tt>, or a list of specific and wildcard
+           architectures separated by spaces.  If <tt>all</tt>
+           or <tt>any</tt> appears, that value must be the entire
+           contents of the field.  Most packages will use
+           either <tt>all</tt> or <tt>any</tt>.
+         </p>
+
+         <p>
+           Specifying a specific list of architectures indicates that the
+           source will build an architecture-dependent package only on
+           architectures included in the list.  Specifying a list of
+           architecture wildcards indicates that the source will build an
+           architecture-dependent package on only those architectures
+           that match any of the specified architecture wildcards.
+           Specifying a list of architectures or architecture wildcards
+           other than <tt>any</tt> is for the minority of cases where a
            program is not portable or is not useful on some
-           architectures, and where possible the program should be made
+           architectures.  Where possible, the program should be made
            portable instead.
          </p>
 
-         <p>
-           Specifying a list of architecture wildcards indicates that
-           the source will build an architecture-dependent package on
-           the union of the lists of architectures from the expansion
-           of each specified architecture wildcard, and will only
-           work correctly on the architectures in the union of the
-           lists.<footnote>
-             Use of architecture wildcards other than <tt>all</tt> is for
-             a minority of cases where the program is not portable and
-             should not be used for most packages.  Wildcards are not
-             expanded into a list of known architectures before comparing
-             to the build architecture.  Instead, the build architecture
-             is matched against any wildcards and this package is built
-             if any wildcard matches.
-           </footnote>
-         </p>
-
          <p>
            In the source package control file <file>.dsc</file>, this
-           field may contain either the special value <tt>any</tt> or a
-           list of architectures separated by spaces. If a list is given,
-           it may include (or consist solely of) the special value
-           <tt>all</tt>.  In other words, in <file>.dsc</file> files
-           unlike the <file>debian/control</file>, <tt>all</tt> may occur
-           in combination with specific architectures.  The
-           <tt>Architecture</tt> field in the source package control file
-           <file>.dsc</file> is generally constructed from the
-           <tt>Architecture</tt> fields in the
-           <file>debian/control</file> in the source package.
+           field may contain either the architecture
+           wildcard <tt>any</tt> or a list of architectures and
+           architecture wildcards separated by spaces. If a list is
+           given, it may include (or consist solely of) the special
+           value <tt>all</tt>.  In other words, in <file>.dsc</file>
+           files unlike the <file>debian/control</file>, <tt>all</tt> may
+           occur in combination with specific architectures.
+           The <tt>Architecture</tt> field in the source package control
+           file <file>.dsc</file> is generally constructed from
+           the <tt>Architecture</tt> fields in
+           the <file>debian/control</file> in the source package.
          </p>
 
          <p>
@@ -2829,7 +2845,7 @@ Package: libc6
            package is also being uploaded, the special
            entry <tt>source</tt> is also present.  <tt>all</tt> will be
            present if any architecture-independent packages are being
-           uploaded.  Architecture wildcards such as <tt>any</tt> may
+           uploaded.  Architecture wildcards such as <tt>any</tt> must
            never occur in the <tt>Architecture</tt> field in
            the <file>.changes</file> file.
          </p>
@@ -3065,10 +3081,12 @@ Package: libc6
            <em>not</em> intended to cope with version numbers containing
            strings of letters which the package management system cannot
            interpret (such as <tt>ALPHA</tt> or <tt>pre-</tt>), or with
-           silly orderings (the author of this manual has heard of a
-           package whose versions went <tt>1.1</tt>, <tt>1.2</tt>,
-           <tt>1.3</tt>, <tt>1</tt>, <tt>2.1</tt>, <tt>2.2</tt>,
-           <tt>2</tt> and so forth).
+           silly orderings.<footnote>
+             The author of this manual has heard of a package whose
+             versions went <tt>1.1</tt>, <tt>1.2</tt>, <tt>1.3</tt>,
+             <tt>1</tt>, <tt>2.1</tt>, <tt>2.2</tt>, <tt>2</tt> and so
+             forth.
+           </footnote>
          </p>
        </sect1>
 
@@ -3583,15 +3601,26 @@ 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>
+
+       <p>
+         For high-priority prompts without a reasonable default answer,
+         maintainer scripts may abort if there is no controlling
+         terminal.  However, this situation should be avoided if at all
+         possible, since it prevents automated or unattended installs.
+         In most cases, users will consider this to be a bug in the
+         package.
        </p>
       </sect>
+
       <sect id="exitstatus">
        <heading>Exit status</heading>
 
@@ -6055,7 +6084,7 @@ rmdir /usr/local/share/emacs 2>/dev/null || true
          </p>
        </sect1>
 
-       <sect1>
+       <sect1 id="writing-init">
          <heading>Writing the scripts</heading>
 
          <p>
@@ -6105,6 +6134,23 @@ rmdir /usr/local/share/emacs 2>/dev/null || true
            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
@@ -7202,13 +7248,19 @@ strip --strip-unneeded <var>your-lib</var>
           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>
@@ -7939,51 +7991,10 @@ done
 
        <p>
          If a program needs to specify an <em>architecture specification
-           string</em> in some place, it should select one of the
-          strings provided by <tt>dpkg-architecture -L</tt>. The
-          strings are in the format
-          <tt><var>os</var>-<var>arch</var></tt>, though the OS part
-          is sometimes elided, as when the OS is Linux.<footnote>
-            <p>Currently, the strings are:
-              i386 ia64 alpha amd64 armeb arm hppa m32r m68k mips
-              mipsel powerpc ppc64 s390 s390x sh3 sh3eb sh4 sh4eb
-              sparc darwin-i386 darwin-ia64 darwin-alpha darwin-amd64
-              darwin-armeb darwin-arm darwin-hppa darwin-m32r
-              darwin-m68k darwin-mips darwin-mipsel darwin-powerpc
-              darwin-ppc64 darwin-s390 darwin-s390x darwin-sh3
-              darwin-sh3eb darwin-sh4 darwin-sh4eb darwin-sparc
-              freebsd-i386 freebsd-ia64 freebsd-alpha freebsd-amd64
-              freebsd-armeb freebsd-arm freebsd-hppa freebsd-m32r
-              freebsd-m68k freebsd-mips freebsd-mipsel freebsd-powerpc
-              freebsd-ppc64 freebsd-s390 freebsd-s390x freebsd-sh3
-              freebsd-sh3eb freebsd-sh4 freebsd-sh4eb freebsd-sparc
-              kfreebsd-i386 kfreebsd-ia64 kfreebsd-alpha
-              kfreebsd-amd64 kfreebsd-armeb kfreebsd-arm kfreebsd-hppa
-              kfreebsd-m32r kfreebsd-m68k kfreebsd-mips
-              kfreebsd-mipsel kfreebsd-powerpc kfreebsd-ppc64
-              kfreebsd-s390 kfreebsd-s390x kfreebsd-sh3 kfreebsd-sh3eb
-              kfreebsd-sh4 kfreebsd-sh4eb kfreebsd-sparc knetbsd-i386
-              knetbsd-ia64 knetbsd-alpha knetbsd-amd64 knetbsd-armeb
-              knetbsd-arm knetbsd-hppa knetbsd-m32r knetbsd-m68k
-              knetbsd-mips knetbsd-mipsel knetbsd-powerpc
-              knetbsd-ppc64 knetbsd-s390 knetbsd-s390x knetbsd-sh3
-              knetbsd-sh3eb knetbsd-sh4 knetbsd-sh4eb knetbsd-sparc
-              netbsd-i386 netbsd-ia64 netbsd-alpha netbsd-amd64
-              netbsd-armeb netbsd-arm netbsd-hppa netbsd-m32r
-              netbsd-m68k netbsd-mips netbsd-mipsel netbsd-powerpc
-              netbsd-ppc64 netbsd-s390 netbsd-s390x netbsd-sh3
-              netbsd-sh3eb netbsd-sh4 netbsd-sh4eb netbsd-sparc
-              openbsd-i386 openbsd-ia64 openbsd-alpha openbsd-amd64
-              openbsd-armeb openbsd-arm openbsd-hppa openbsd-m32r
-              openbsd-m68k openbsd-mips openbsd-mipsel openbsd-powerpc
-              openbsd-ppc64 openbsd-s390 openbsd-s390x openbsd-sh3
-              openbsd-sh3eb openbsd-sh4 openbsd-sh4eb openbsd-sparc
-              hurd-i386 hurd-ia64 hurd-alpha hurd-amd64 hurd-armeb
-              hurd-arm hurd-hppa hurd-m32r hurd-m68k hurd-mips
-              hurd-mipsel hurd-powerpc hurd-ppc64 hurd-s390 hurd-s390x
-              hurd-sh3 hurd-sh3eb hurd-sh4 hurd-sh4eb hurd-sparc
-            </p>
-          </footnote>
+         string</em> in some place, it should select one of the strings
+         provided by <tt>dpkg-architecture -L</tt>. The strings are in
+         the format <tt><var>os</var>-<var>arch</var></tt>, though the OS
+         part is sometimes elided, as when the OS is Linux.
        </p>
 
        <p>
@@ -7995,30 +8006,27 @@ done
          <tt><var>arch</var>-unknown-linux</tt>, since the
          <tt>unknown</tt> does not look very good.
        </p>
-      </sect>
 
-      <sect id="arch-wildcard-spec">
-        <heading>Architecture Wildcards</heading>
+       <sect1 id="arch-wildcard-spec">
+          <heading>Architecture wildcards</heading>
 
-        <p>
-         A package may specify an architecture wildcard. Architecture
-         wildcards are in the format <tt>any</tt> (which matches every
-         architecture), <tt><var>os</var></tt>-any, or
-         any-<tt><var>cpu</var></tt>. <footnote>
-           Internally, the package system normalizes the GNU triplets and
-           the Debian arches into Debian arch triplets (which are kind of
-           inverted GNU triplets), with the first component of the
-           triplet representing the libc and ABI in use.  When matching
-           two Debian arch triplets, whenever an <var>any</var> is found
-           it matches with anything on the other side, like in:
-         <example>
-  gnu-linux-i386     is matched by gnu-linux-any
-  gnu-kfreebsd-amd64 is matched by any-any-amd64
-          </example>
-          And, for example, <var>any</var> is normalized to
-          <var>any-any-any</var>.
-        </footnote>
-        </p>
+          <p>
+           A package may specify an architecture wildcard. Architecture
+           wildcards are in the format <tt>any</tt> (which matches every
+           architecture), <tt><var>os</var></tt>-any, or
+           any-<tt><var>cpu</var></tt>. <footnote>
+             Internally, the package system normalizes the GNU triplets
+             and the Debian arches into Debian arch triplets (which are
+             kind of inverted GNU triplets), with the first component of
+             the triplet representing the libc and ABI in use, and then
+             does matching against those triplets.  However, such
+             triplets are an internal implementation detail that should
+             not be used by packages directly.  The libc and ABI portion
+             is handled internally by the package system based on
+             the <var>os</var> and <var>cpu</var>.
+            </footnote>
+          </p>
+       </sect1>
       </sect>
 
       <sect>
@@ -9579,9 +9587,9 @@ END-INFO-DIR-ENTRY
              </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>