]> git.donarmstrong.com Git - debian/debian-policy.git/blobdiff - policy.sgml
All copyright files must be encoded in UTF-8
[debian/debian-policy.git] / policy.sgml
index 854fde66d2e4e1d29bddb7f9dbb2201988ccdcc6..4fd60d909ecebd4653601bd57fefe098a5cbe656 100644 (file)
            <item><ref id="fhs"></item>
            <item><ref id="virtual_pkg"></item>
            <item><ref id="menus"></item>
-           <item><ref id="mime"></item>
            <item><ref id="perl"></item>
            <item><ref id="maintscriptprompt"></item>
            <item><ref id="emacs"></item>
          <tt><url name="/doc/developers-reference/"
                id="http://www.debian.org/doc/developers-reference/"></tt>.
        </p>
+
+       <p>
+         Finally, a <qref id="copyrightformat">specification for
+         machine-readable copyright files</qref> is maintained as part of
+         the <package>debian-policy</package> package using the same
+         procedure as the other policy documents.  Use of this format is
+         optional.
+       </p>
       </sect>
 
       <sect id="definitions">
              <item>
                  must not require or recommend a package outside
                  of <em>main</em> for compilation or execution (thus, the
-                 package must not declare a "Depends", "Recommends", or
-                 "Build-Depends" relationship on a non-<em>main</em>
-                 package),
+                 package must not declare a "Pre-Depends", "Depends",
+                 "Recommends", "Build-Depends", or "Build-Depends-Indep"
+                 relationship on a non-<em>main</em> package),
              </item>
              <item>
                  must not be so buggy that we refuse to support them,
            </tag>
            <item>
              <p>
-               A package may also provide both of the targets
+               A package may also provide one or both of the targets
                <tt>build-arch</tt> and <tt>build-indep</tt>.
                The <tt>build-arch</tt> target, if provided, should
                perform all the configuration and compilation required for
                architecture-independent binary packages (those packages
                for which the body of the <tt>Architecture</tt> field
                in <tt>debian/control</tt> is <tt>all</tt>).
-               The <tt>build</tt> target should depend on those of the
-               targets <tt>build-arch</tt> and <tt>build-indep</tt> that
-               are provided in the rules file.<footnote>
+             </p>
+
+             <p>
+               If <tt>build-arch</tt> or <tt>build-indep</tt> targets are
+               provided in the rules file, the <tt>build</tt> target
+               should either depend on those targets or take the same
+               actions as invoking those targets would perform.<footnote>
                  The intent of this split is so that binary-only builds
                  need not install the dependencies required for
                  the <tt>build-indep</tt> target.  However, this is not
@@ -2492,18 +2503,21 @@ endif
        </p>
 
        <p>
-         Each paragraph consists of a series of data fields; each
-         field consists of the field name, followed by a colon and
-         then the data/value associated with that field.  The field
-         name is composed of printable ASCII characters (i.e.,
-         characters that have values between 33 and 126, inclusive)
-         except colon and must not with a begin with #.  The
-         field ends at the end of the line or at the end of the
-         last continuation line (see below).  Horizontal whitespace
-         (spaces and tabs) may occur immediately before or after the
-         value and is ignored there; it is conventional to put a
-         single space after the colon.  For example, a field might
-         be:
+         Each paragraph consists of a series of data fields.  Each field
+         consists of the field name followed by a colon and then the
+         data/value associated with that field.  The field name is
+         composed of US-ASCII characters excluding control characters,
+         space, and colon (i.e., characters in the ranges 33-57 and
+         59-126, inclusive).  Field names must not begin with the comment
+         character, <tt>#</tt>.
+       </p>
+
+       <p>
+         The field ends at the end of the line or at the end of the last
+         continuation line (see below).  Horizontal whitespace (spaces
+         and tabs) may occur immediately before or after the value and is
+         ignored there; it is conventional to put a single space after
+         the colon.  For example, a field might be:
          <example compact="compact">
 Package: libc6
          </example>
@@ -2697,7 +2711,7 @@ Package: libc6
        <p>
          This file consists of a single paragraph, possibly surrounded by
          a PGP signature. The fields of that paragraph are listed below.
-         Their syntax is described above, in <ref id="pkg-controlfields">.
+         Their syntax is described above, in <ref id="controlsyntax">.
 
        <list compact="compact">
          <item><qref id="f-Format"><tt>Format</tt></qref> (mandatory)</item>
@@ -3711,11 +3725,13 @@ Checksums-Sha256:
          <heading><tt>DM-Upload-Allowed</tt></heading>
 
          <p>
-           The most recent version of a package uploaded to unstable or
-           experimental must include the field <tt>DM-Upload-Allowed:
-           yes</tt> in the source section of its source control file for
-           the Debian archive to accept uploads signed with a key in the
-           Debian Maintainer keyring.  See the General
+           Indicates that Debian Maintainers may upload this package to
+           the Debian archive.  The only valid value is <tt>yes</tt>.  If
+           the field <tt>DM-Upload-Allowed: yes</tt> is present in the
+           source section of the source control file of the most recent
+           version of a package in unstable or experimental, the Debian
+           archive will accept uploads of this package signed with a key
+           in the Debian Maintainer keyring.  See the General
            Resolution <url id="http://www.debian.org/vote/2007/vote_003"
            name="Endorse the concept of Debian Maintainers"> for more
            details.
@@ -4629,7 +4645,7 @@ Depends: libc6 (>= 2.2.1), exim | mail-transport-agent
          Relationships may be restricted to a certain set of
          architectures.  This is indicated in brackets after each
          individual package name and the optional version specification.
-         The brackets enclose a list of Debian architecture names
+         The brackets enclose a non-empty list of Debian architecture names
          in the format described in <ref id="arch-spec">,
          separated by whitespace.  Exclamation marks may be prepended to
          each of the names.  (It is not permitted for some names to be
@@ -6162,11 +6178,11 @@ install -m644 debian/shlibs.<var>package</var> debian/<var>package</var>/DEBIAN/
          <heading>File System Structure</heading>
 
          <p>
-           The location of all installed files and directories must
-           comply with the Filesystem Hierarchy Standard (FHS),
-           version 2.3, with the exceptions noted below, and except
-           where doing so would violate other terms of Debian
-           Policy.  The following exceptions to the FHS apply:
+           The location of all files and directories must comply with the
+           Filesystem Hierarchy Standard (FHS), version 2.3, with the
+           exceptions noted below, and except where doing so would
+           violate other terms of Debian Policy.  The following
+           exceptions to the FHS apply:
 
             <enumlist>
               <item>
@@ -6247,6 +6263,25 @@ install -m644 debian/shlibs.<var>package</var> debian/<var>package</var>/DEBIAN/
                   symlinked there, is relaxed to a recommendation.
                 </p>
               </item>
+             <item>
+               <p>
+                 The additional directory <file>/run</file> in the root
+                 file system is allowed.  <file>/run</file>
+                 replaces <file>/var/run</file>, and the
+                 subdirectory <file>/run/lock</file>
+                 replaces <file>/var/lock</file>, with
+                 the <file>/var</file> directories replaced by symlinks
+                 for backwards compatibility.  <file>/run</file>
+                 and <file>/run/lock</file> must follow all of the
+                 requirements in the FHS for <file>/var/run</file>
+                 and <file>/var/lock</file>, respectively, such as file
+                 naming conventions, file format requirements, or the
+                 requirement that files be cleared during the boot
+                 process.  Files and directories residing
+                 in <file>/run</file> should be stored on a temporary
+                 file system.
+               </p>
+             </item>
               <item>
                 <p>
                   The following directories in the root filesystem are
@@ -6389,6 +6424,29 @@ rmdir /usr/local/share/emacs 2>/dev/null || true
            though the spool may still be physically located there.
          </p>
        </sect1>
+
+       <sect1 id="fhs-run">
+         <heading><file>/run</file> and <file>/run/lock</file></heading>
+
+         <p>
+           The directory <file>/run</file> is cleared at boot, normally
+           by being a mount point for a temporary file system.  Packages
+           therefore must not assume that any files or directories
+           under <file>/run</file> other than <file>/run/lock</file>
+           exist unless the package has arranged to create those files or
+           directories since the last reboot.  Normally, this is done by
+           the package via an init script.  See <ref id="writing-init">
+           for more information.
+         </p>
+
+         <p>
+           Packages must not include files or directories
+           under <file>/run</file>, or under the
+           older <file>/var/run</file> and <file>/var/lock</file> paths.
+           The latter paths will normally be symlinks or other
+           redirections to <file>/run</file> for backwards compatibility.
+         </p>
+       </sect1>
       </sect>
 
       <sect>
@@ -6763,15 +6821,14 @@ test -f <var>program-executed-later-in-script</var> || exit 0
          </p>
 
          <p>
-           <file>/var/run</file> and <file>/var/lock</file> may be mounted
-           as temporary filesystems<footnote>
-               For example, using the <tt>RAMRUN</tt> and <tt>RAMLOCK</tt>
-               options in <file>/etc/default/rcS</file>.
-           </footnote>, so the <file>init.d</file> scripts must handle this
-           correctly. This will typically amount to creating any required
-           subdirectories dynamically when the <file>init.d</file> script
-           is run, rather than including them in the package and relying on
-           <prgn>dpkg</prgn> to create them.
+            Files and directories under <file>/run</file>, including ones
+            referred to via the compatibility paths <file>/var/run</file>
+            and <file>/var/lock</file>, are normally stored on a temporary
+            filesystem and are normally not persistent across a reboot.
+            The <file>init.d</file> scripts must handle this correctly.
+            This will typically mean creating any required subdirectories
+            dynamically when the <file>init.d</file> script is run.
+            See <ref id="fhs-run"> for more information.
          </p>
        </sect1>
 
@@ -7140,18 +7197,20 @@ Reloading <var>description</var> configuration...done.
        </p>
       </sect>
 
-      <sect>
+      <sect id="cron-jobs">
        <heading>Cron jobs</heading>
 
        <p>
          Packages must not modify the configuration file
          <file>/etc/crontab</file>, and they must not modify the files in
-         <file>/var/spool/cron/crontabs</file>.</p>
+         <file>/var/spool/cron/crontabs</file>.
+       </p>
 
        <p>
-         If a package wants to install a job that has to be executed
-         via cron, it should place a file with the name of the
-         package in one or more of the following directories:
+         If a package wants to install a job that has to be executed via
+         cron, it should place a file named as specified
+         in <ref id="cron-files"> into one or more of the following
+         directories:
          <example compact="compact">
 /etc/cron.hourly
 /etc/cron.daily
@@ -7161,7 +7220,8 @@ Reloading <var>description</var> configuration...done.
          As these directory names imply, the files within them are
          executed on an hourly, daily, weekly, or monthly basis,
          respectively. The exact times are listed in
-         <file>/etc/crontab</file>.</p>
+         <file>/etc/crontab</file>.
+       </p>
 
        <p>
          All files installed in any of these directories must be
@@ -7172,15 +7232,18 @@ Reloading <var>description</var> configuration...done.
 
        <p>
          If a certain job has to be executed at some other frequency or
-         at a specific time, the package should install a file
-         <file>/etc/cron.d/<var>package</var></file>. This file uses the
-         same syntax as <file>/etc/crontab</file> and is processed by
-         <prgn>cron</prgn> automatically. The file must also be
+         at a specific time, the package should install a file in
+         <file>/etc/cron.d</file> with a name as specified
+         in <ref id="cron-files">.  This file uses the same syntax
+         as <file>/etc/crontab</file> and is processed
+         by <prgn>cron</prgn> automatically. The file must also be
          treated as a configuration file. (Note that entries in the
          <file>/etc/cron.d</file> directory are not handled by
          <prgn>anacron</prgn>. Thus, you should only use this
          directory for jobs which may be skipped if the system is not
-         running.)</p>
+         running.)
+       </p>
+
        <p>
           Unlike <file>crontab</file> files described in the IEEE Std
           1003.1-2008 (POSIX.1) available from
@@ -7223,6 +7286,30 @@ Reloading <var>description</var> configuration...done.
           execute scripts in
           <file>/etc/cron.{hourly,daily,weekly,monthly}</file>.
         </p>
+
+       <sect1 id="cron-files">
+         <heading>Cron job file names</heading>
+
+         <p>
+           The file name of a cron job file should normally match the
+           name of the package from which it comes.
+         </p>
+
+         <p>
+           If a package supplies multiple cron job files files in the
+           same directory, the file names should all start with the name
+           of the package (possibly modified as described below) followed
+           by a hyphen (<tt>-</tt>) and a suitable suffix.
+         </p>
+
+         <p>
+           A cron job file name must not include any period or plus
+           characters (<tt>.</tt> or <tt>+</tt>) characters as this will
+           cause cron to ignore the file.  Underscores (<tt>_</tt>)
+           should be used instead of <tt>.</tt> and <tt>+</tt>
+           characters.
+         </p>
+       </sect1>
       </sect>
 
       <sect id="menus">
@@ -7271,7 +7358,7 @@ Reloading <var>description</var> configuration...done.
          MIME (Multipurpose Internet Mail Extensions, RFCs 2045-2049)
          is a mechanism for encoding files and data streams and
          providing meta-information about them, in particular their
-         type (e.g.  audio or video) and format (e.g. PNG, HTML,
+         type (e.g. audio or video) and format (e.g. PNG, HTML,
          MP3).
        </p>
 
@@ -7288,11 +7375,25 @@ Reloading <var>description</var> configuration...done.
        </p>
 
        <p>
-         The MIME support policy can be found in the <tt>mime-policy</tt>
-         files in the <tt>debian-policy</tt> package.
-         It is also available from the Debian web mirrors at
-          <tt><url name="/doc/packaging-manuals/mime-policy/"
-               id="http://www.debian.org/doc/packaging-manuals/mime-policy/"></tt>.
+         The <package>mime-support</package> package provides the
+         <prgn>update-mime</prgn> program which allows packages to
+         register programs that can show, compose, edit or print
+         MIME types.
+       </p>
+
+       <p>
+         Packages containing such programs must register them
+         with <prgn>update-mime</prgn> as documented in <manref
+         name="update-mime" section="8">. They should <em>not</em> depend
+         on, recommend, or suggest <prgn>mime-support</prgn>. Instead,
+         they should just put something like the following in the
+         <tt>postinst</tt> and <tt>postrm</tt> scripts:
+
+         <example>
+  if [ -x /usr/sbin/update-mime ]; then
+      update-mime
+  fi
+         </example>
        </p>
 
       </sect>
@@ -7876,10 +7977,13 @@ fname () {
        <p>
          You may wish to restrict your script to SUSv3 features plus the
          above set when possible so that it may use <file>/bin/sh</file>
-         as its interpreter. If your script works with <prgn>dash</prgn>
-         (originally called <prgn>ash</prgn>), it probably complies with
-         the above requirements, but if you are in doubt, use
-         <file>/bin/bash</file>.
+         as its interpreter.  Checking your script
+         with <prgn>checkbashisms</prgn> from
+         the <package>devscripts</package> package or running your script
+         with an alternate shell such as <prgn>posh</prgn> may help
+         uncover violations of the above requirements.  If in doubt
+         whether a script complies with these requirements,
+         use <file>/bin/bash</file>.
        </p>
 
        <p>
@@ -8187,22 +8291,6 @@ ln -fs ../sbin/sendmail debian/tmp/usr/bin/runq
        <sect1>
          <heading>Sharing configuration files</heading>
 
-         <p>
-           Packages which specify the same file as a
-           <tt>conffile</tt> must be tagged as <em>conflicting</em>
-           with each other.  (This is an instance of the general rule
-           about not sharing files.  Note that neither alternatives
-           nor diversions are likely to be appropriate in this case;
-           in particular, <prgn>dpkg</prgn> does not handle diverted
-           <tt>conffile</tt>s well.)
-         </p>
-
-         <p>
-           The maintainer scripts must not alter a <tt>conffile</tt>
-           of <em>any</em> package, including the one the scripts
-           belong to.
-         </p>
-
          <p>
            If two or more packages use the same configuration file
            and it is reasonable for both to be installed at the same
@@ -8252,6 +8340,34 @@ ln -fs ../sbin/sendmail debian/tmp/usr/bin/runq
            and which manages the shared configuration files.  (The
            <tt>sgml-base</tt> package is a good example.)
          </p>
+
+         <p>
+           If the configuration file cannot be shared as described above,
+           the packages must be marked as conflicting with each other.
+           Two packages that specify the same file as
+           a <tt>conffile</tt> must conflict.  This is an instance of the
+           general rule about not sharing files.  Neither alternatives
+           nor diversions are likely to be appropriate in this case; in
+           particular, <prgn>dpkg</prgn> does not handle diverted
+           <tt>conffile</tt>s well.
+         </p>
+
+         <p>
+           When two packages both declare the same <tt>conffile</tt>, they
+           may see left-over configuration files from each other even
+           though they conflict with each other.  If a user removes
+           (without purging) one of the packages and installs the other,
+           the new package will take over the <tt>conffile</tt> from the
+           old package.  If the file was modified by the user, it will be
+           treated the same as any other locally
+           modified <tt>conffile</tt> during an upgrade.
+         </p>
+
+         <p>
+           The maintainer scripts must not alter a <tt>conffile</tt>
+           of <em>any</em> package, including the one the scripts
+           belong to.
+         </p>
        </sect1>
 
        <sect1>
@@ -9817,7 +9933,31 @@ END-INFO-DIR-ENTRY
          You should not use the copyright file as a general <file>README</file>
          file.  If your package has such a file it should be
          installed in <file>/usr/share/doc/<var>package</var>/README</file> or
-         <file>README.Debian</file> or some other appropriate place.</p>
+         <file>README.Debian</file> or some other appropriate place.
+       </p>
+
+       <p>
+         All copyright files must be encoded in UTF-8.
+       </p>
+
+       <sect1 id="copyrightformat">
+         <heading>Machine-readable copyright information</heading>
+
+         <p>
+           A specification for a standard, machine-readable format
+           for <file>debian/copyright</file> files is maintained as part
+           of the <package>debian-policy</package> package.  This
+           document may be found in the <file>copyright-format</file>
+           files in the <package>debian-policy</package> package.  It is
+           also available from the Debian web mirrors at
+           <tt><url name="/doc/packaging-manuals/copyright-format/1.0/"
+                    id="http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/"></tt>.
+         </p>
+
+         <p>
+           Use of this format is optional.
+         </p>
+       </sect1>
       </sect>
 
       <sect>
@@ -10347,10 +10487,10 @@ END-INFO-DIR-ENTRY
                  the <prgn>PATH</prgn> if necessary, and pass its
                  second and subsequent arguments to the command it
                  calls.  If no <var>root-command</var> is supplied
-                 then <var>dpkg-buildpackage</var> will take no
-                 special action to gain root privilege, so that for
-                 most packages it will have to be invoked as root to
-                 start with.</p>
+                 then <var>dpkg-buildpackage</var> will use
+                 the <prgn>fakeroot</prgn> command, which is sufficient
+                 to build most packages without actually requiring root
+                 privileges.</p>
              </item>
              <tag><tt>-b</tt>, <tt>-B</tt></tag>
              <item>
@@ -11273,7 +11413,7 @@ END-INFO-DIR-ENTRY
      dpkg-divert --package smailwrapper --remove --rename \
         --divert /usr/sbin/smail.real /usr/sbin/smail
   fi
-       </example> where <tt>1.02-2</tt> is the version at which the
+       </example> where <tt>1.0-2</tt> is the version at which the
        diversion was first added to the package.  The postrm should not
        remove the diversion on upgrades both because there's no reason to
        remove the diversion only to immediately re-add it and since the