--- /dev/null
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
+
+<refentry id="deb-control.5">
+ <refmeta>
+ <refentrytitle>deb-control</refentrytitle>
+ <manvolnum>5</manvolnum>
+ <refmiscinfo class="source">Debian Project</refmiscinfo>
+ <refmiscinfo class="manual">dpkg utilities</refmiscinfo>
+ </refmeta>
+
+ <refnamediv>
+ <refname>deb-control</refname>
+ <refpurpose>Debian packages' master control file format</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv>
+ <synopsis><filename>control</filename></synopsis>
+ </refsynopsisdiv>
+
+ <refsect1>
+ <title>Description</title>
+
+ <para>
+ Each Debian package contains the master <filename>control</filename>
+ file, which contains a number of fields. Each field begins with a tag,
+ such as <emphasis>Package</emphasis> or <emphasis>Version</emphasis>
+ (case insensitive), followed by a colon, and the body of the field.
+ Fields are delimited only by field tags. In other words, field text may
+ be multiple lines in length, but the installation tools will generally
+ join lines when processing the body of the field (except in the case of
+ the <emphasis>Description</emphasis> field, see below).
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title>Required Fields</title>
+
+ <variablelist>
+ <varlistentry>
+ <term>
+ <cmdsynopsis>
+ <arg choice="plain">Package: <replaceable>package_name</replaceable></arg>
+ </cmdsynopsis>
+ </term>
+
+ <listitem>
+ <para>
+ The value of this field determines the package name, and is used to
+ generate file names by most installation tools.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <cmdsynopsis>
+ <arg choice="plain">Version: <replaceable>version_string</replaceable></arg>
+ </cmdsynopsis>
+ </term>
+
+ <listitem>
+ <para>
+ Typically, this is the original package's version number in
+ whatever form the program's author uses. It may also include a
+ Debian revision number (for non-native packages). If both version
+ and revision are supplied, they are seperated by a hyphen
+ (<keycap>-</keycap>. For this reason, the original version may not
+ have a hyphen in its version number.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <cmdsynopsis>
+ <arg choice="plain">Maintainer: <replaceable>fullname</replaceable> <replaceable>email</replaceable></arg>
+ </cmdsynopsis>
+ </term>
+
+ <listitem>
+ <para>
+ Should be in the format `Joe Bloggs <jbloggs@foo.com>', and
+ is typically the person who created the package, as opposed to the
+ author of the software that was packaged.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <cmdsynopsis>
+ <arg choice="plain">Description: <replaceable>short description</replaceable><sbr> <replaceable>long description</replaceable></arg>
+ </cmdsynopsis>
+ </term>
+
+ <listitem>
+ <para>
+ The format for the package description is a short brief summary on
+ the first line (after the "Description" field). The following lines
+ can be used as a longer, more detailed description. Each line of
+ the long description must be preceded by a space, and blank lines
+ in the long desription must contain a single '.' following the
+ preceding space.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>Optional Fields</title>
+
+ <variablelist>
+ <varlistentry>
+ <term>
+ <cmdsynopsis>
+ <arg choice="plain">Section: <replaceable>section</replaceable></arg>
+ </cmdsynopsis>
+ </term>
+
+ <listitem>
+ <para>
+ This is a general field that gives the package a category based on
+ the software that it installs. Some common sections are `utils',
+ `net', `mail', `text', `x11' etc.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <cmdsynopsis>
+ <arg choice="plain">Priority: <replaceable>priority</replaceable></arg>
+ </cmdsynopsis>
+ </term>
+
+ <listitem>
+ <para>
+ Sets the importance of this package in relation to the system as a
+ whole. Common priorities are `required', `standard', `optional',
+ `extra' etc.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>
+ In Debian, the <emphasis>Section</emphasis> and
+ <emphasis>Priority</emphasis> fields have a defined set of accepted
+ values based on the Policy Manual. They are used to decide how the
+ packages are layed out in the archive. A list of these can be
+ obtained from the latest version of
+ <emphasis>debian-policy</emphasis> package.
+ </para>
+
+ <variablelist>
+ <varlistentry>
+ <term>
+ <cmdsynopsis>
+ <arg choice="plain">Essential:
+ <group choice="req">
+ <arg>yes</arg>
+ <arg>no</arg>
+ </group>
+ </arg>
+ </cmdsynopsis>
+ </term>
+
+ <listitem>
+ <para>
+ This field is usually only needed when the answer is `yes'. It
+ denotes a package that is required for proper operation of the
+ system. <command>dpkg</command> or any other installation tool will
+ not allow an <emphasis>Essential</emphasis> package to be removed
+ (at least not without using one of the force options).
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <cmdsynopsis>
+ <arg choice="plain">Architecture:
+ <group choice="req">
+ <arg><arch></arg>
+ <arg>all</arg>
+ </group>
+ </arg>
+ </cmdsynopsis>
+ </term>
+
+ <listitem>
+ <para>
+ The architecture specifies which type of hardware this package was
+ compiled for. Common architectures are `i386', `m68k', `sparc',
+ `alpha', `powerpc' etc. Note that the <emphasis>all</emphasis>
+ option is meant for packages that are architecture independent.
+ Some examples of this are shell or python scripts, or
+ documentation.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <cmdsynopsis>
+ <arg choice="plain">Source: <replaceable>source_name</replaceable></arg>
+ </cmdsynopsis>
+ </term>
+
+ <listitem>
+ <para>
+ The name of the source package that this binary package came from,
+ if different than the name of the package itself.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <cmdsynopsis>
+ <arg choice="plain" rep="repeat">Depends: <replaceable>package</replaceable></arg>
+ </cmdsynopsis>
+ </term>
+
+ <listitem>
+ <para>
+ List of packages that are required for this package to provide a
+ non-trivial amount of functionality. The package maintenance
+ software will not allow a package to be installed if the packages
+ listed in its <emphasis>Depends</emphasis> field are not installed
+ (at least not without using the force options), and will run the
+ postinst scripts of packages listed in Depends: fields before those
+ of the packages which depend on them, and run prerm scripts before.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <cmdsynopsis>
+ <arg choice="plain" rep="repeat">Pre-Depends: <replaceable>package</replaceable></arg>
+ </cmdsynopsis>
+ </term>
+
+ <listitem>
+ <para>
+ List of packages that must be installed <emphasis>and</emphasis>
+ configured before this one can be installed. This is usually used
+ in the case where this package requires another package for running
+ its preinst script.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <cmdsynopsis>
+ <arg choice="plain" rep="repeat">Recommends: <replaceable>package</replaceable></arg>
+ </cmdsynopsis>
+ </term>
+
+ <listitem>
+ <para>
+ Lists packages that would be found together with this one in all
+ but unusual installations. The package maintenance software will
+ warn the user if they install a package without those listed in its
+ <emphasis>Recommends</emphasis> field.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <cmdsynopsis>
+ <arg choice="plain" rep="repeat">Suggests: <replaceable>package</replaceable></arg>
+ </cmdsynopsis>
+ </term>
+
+ <listitem>
+ <para>
+ Lists packages that are related to this one and can perhaps enhance
+ its usefulness, but without which installing this package is
+ perfectly reasonable.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>
+ The syntax of <emphasis>Depends</emphasis>,
+ <emphasis>Pre-Depends</emphasis>, <emphasis>Recommends</emphasis> and
+ <emphasis>Suggests</emphasis> fields is a list of groups of alternative
+ packages. Each group is a list of packages separated by vertical bar (or
+ <keysym>pipe</keysym>) symbols, `<keycode>|</keycode>'. The groups are
+ separated by commas. Commas are to be read as `AND', and pipes as `OR',
+ with pipes binding more tightly. Each item is a package name optionally
+ followed by a version number specification in parentheses.
+ </para>
+
+ <para>
+ A version number may start with a `>>', in which case any later
+ version will match, and may specify or omit the Debian packaging revision
+ (separated by a hyphen). Accepted version relationships are ">>"
+ for greater than, "<<" for less than, ">=" for greater than or
+ equal to, "<=" for less than or equal to, and "=" for equal to.
+ </para>
+
+ <variablelist>
+ <varlistentry>
+ <term>
+ <cmdsynopsis>
+ <arg choice="plain" rep="repeat">Conflicts: <replaceable>package</replaceable></arg>
+ </cmdsynopsis>
+ </term>
+
+ <listitem>
+ <para>
+ Lists packages that conflict with this one, for example by
+ containing files with the same names. The package maintenance
+ software will not allow conflicting packages to be installed at the
+ same time. Two conflicting packages should each include a
+ <emphasis>Conflicts</emphasis> line mentioning the other.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <cmdsynopsis>
+ <arg choice="plain" rep="repeat">Replaces: <replaceable>package</replaceable></arg>
+ </cmdsynopsis>
+ </term>
+
+ <listitem>
+ <para>
+ List of packages files from which this one replaces. This is used
+ for allowing this package to overwrite the files of another package
+ and is usually used with the <emphasis>Conflicts</emphasis> field
+ to force removal of the other package, if this one also has the
+ same files as the conflicted package.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <cmdsynopsis>
+ <arg choice="plain" rep="repeat">Provides: <replaceable>package</replaceable></arg>
+ </cmdsynopsis>
+ </term>
+
+ <listitem>
+ <para>
+ This is a list of virtual packages that this one provides. Usuaully
+ this is used in the case of several packages all providing the same
+ service. For example, sendmail and exim can can serve as a mail
+ server, so they provide a common package (`mail-transport-agent')
+ on which other packages can depend. This will allow sendmail or
+ exim to serve as a valid option to satisy the dependency. This
+ prevents the packages that depend on a mail server from having to
+ know the package names for all of them, and using `|' to separate
+ the list.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>
+ The syntax of <emphasis>Conflicts</emphasis>,
+ <emphasis>Replaces</emphasis> and <emphasis>Provides</emphasis> is a list
+ of package names, separated by commas (and optional whitespace). In the
+ <emphasis>Conflicts</emphasis> field, the comma should be read as `OR'.
+ An optional version can also be given with the same syntax as above for
+ the <emphasis>Conflicts</emphasis> and <emphasis>Replaces</emphasis>
+ fields.
+ </para>
+ </refsect1>
+
+ <refsect1><title>Example</title>
+
+ <literallayout>
+Package: grep
+Essential: yes
+Priority: required
+Section: base
+Maintainer: Wichert Akkerman <wakkerma@debian.org>
+Architecture: sparc
+Version: 2.4-1
+Pre-Depends: libc6 (>= 2.0.105)
+Provides: rgrep
+Conflicts: rgrep
+Description: GNU grep, egrep and fgrep.
+ The GNU family of grep utilities may be the "fastest grep in the west".
+ GNU grep is based on a fast lazy-state deterministic matcher (about
+ twice as fast as stock Unix egrep) hybridized with a Boyer-Moore-Gosper
+ search for a fixed string that eliminates impossible text from being
+ considered by the full regexp matcher without necessarily having to
+ look at every character. The result is typically many times faster
+ than Unix grep or egrep. (Regular expressions containing backreferencing
+ will run more slowly, however.)
+ </literallayout>
+ </refsect1>
+
+ <refsect1>
+ <title>See Also</title>
+
+ <para>
+ <citerefentry>
+ <refentrytitle>deb</refentrytitle>
+ <manvolnum>5</manvolnum>
+ </citerefentry>,
+
+ <citerefentry>
+ <refentrytitle>dpkg</refentrytitle>
+ <manvolnum>8</manvolnum>
+ </citerefentry>,
+
+ <citerefentry>
+ <refentrytitle>dpkg-deb</refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+</refentry>
+