]> git.saurik.com Git - apt.git/blobdiff - doc/apt_preferences.5.xml
edsp: dump: support dumping into compressed file
[apt.git] / doc / apt_preferences.5.xml
index 162c2f00e1525e94e6cf0dfc3c7de70156aadcd7..cac9a96e185a1eed92cd7aa71bb545b44600101a 100644 (file)
@@ -1,10 +1,9 @@
 <?xml version="1.0" encoding="utf-8" standalone="no"?>
 <?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
-  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
-
-<!ENTITY % aptent SYSTEM "apt.ent">
-%aptent;
-
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % aptent SYSTEM "apt.ent"> %aptent;
+<!ENTITY % aptverbatiment SYSTEM "apt-verbatim.ent"> %aptverbatiment;
+<!ENTITY % aptvendor SYSTEM "apt-vendor.ent"> %aptvendor;
 ]>
 
 <refentry>
 ]>
 
 <refentry>
    &apt-email;
    &apt-product;
    <!-- The last update date -->
    &apt-email;
    &apt-product;
    <!-- The last update date -->
-   <date>29 February 2004</date>
+   <date>2015-08-15T00:00:00Z</date>
  </refentryinfo>
 
  <refmeta>
    <refentrytitle>apt_preferences</refentrytitle>
    <manvolnum>5</manvolnum>
  </refentryinfo>
 
  <refmeta>
    <refentrytitle>apt_preferences</refentrytitle>
    <manvolnum>5</manvolnum>
+   <refmiscinfo class="manual">APT</refmiscinfo>
  </refmeta>
 
  <!-- Man page title -->
  </refmeta>
 
  <!-- Man page title -->
@@ -31,7 +31,8 @@
 <refsect1>
 <title>Description</title>
 <para>The APT preferences file <filename>/etc/apt/preferences</filename>
 <refsect1>
 <title>Description</title>
 <para>The APT preferences file <filename>/etc/apt/preferences</filename>
-can be used to control which versions of packages will be selected
+and the fragment files in the <filename>/etc/apt/preferences.d/</filename>
+folder can be used to control which versions of packages will be selected
 for installation.</para>
 
 <para>Several versions of a package may be available for installation when
 for installation.</para>
 
 <para>Several versions of a package may be available for installation when
@@ -40,7 +41,7 @@ the &sources-list; file contains references to more than one distribution
 APT assigns a priority to each version that is available.
 Subject to dependency constraints, <command>apt-get</command> selects the
 version with the highest priority for installation.
 APT assigns a priority to each version that is available.
 Subject to dependency constraints, <command>apt-get</command> selects the
 version with the highest priority for installation.
-The APT preferences file overrides the priorities that APT assigns to
+The APT preferences override the priorities that APT assigns to
 package versions by default, thus giving the user control over which
 one is selected for installation.</para>
 
 package versions by default, thus giving the user control over which
 one is selected for installation.</para>
 
@@ -48,9 +49,29 @@ one is selected for installation.</para>
 the &sources-list; file contains references to more than one source.
 In this case <command>apt-get</command> downloads the instance listed
 earliest in the &sources-list; file.
 the &sources-list; file contains references to more than one source.
 In this case <command>apt-get</command> downloads the instance listed
 earliest in the &sources-list; file.
-The APT preferences file does not affect the choice of instance, only
+The APT preferences do not affect the choice of instance, only
 the choice of version.</para>
 
 the choice of version.</para>
 
+<para>Preferences are a strong power in the hands of a system administrator
+but they can become also their biggest nightmare if used without care!
+APT will not question the preferences, so wrong settings can
+lead to uninstallable packages or wrong decisions while upgrading packages.
+Even more problems will arise if multiple distribution releases are mixed
+without a good understanding of the following paragraphs.
+Packages included in a specific release aren't tested in (and
+therefore don't always work as expected in) older or newer releases, or
+together with other packages from different releases.
+You have been warned.</para>
+
+<para>Note that the files in the <filename>/etc/apt/preferences.d</filename>
+directory are parsed in alphanumeric ascending order and need to obey the
+following naming convention: The files have either no or "<literal>pref</literal>"
+as filename extension and only contain alphanumeric, hyphen (-),
+underscore (_) and period (.) characters.
+Otherwise APT will print a notice that it has ignored a file, unless that
+file matches a pattern in the <literal>Dir::Ignore-Files-Silently</literal>
+configuration list - in which case it will be silently ignored.</para>
+
 <refsect2><title>APT's Default Priority Assignments</title>
 
 <para>If there is no preferences file or if there is no entry in the file
 <refsect2><title>APT's Default Priority Assignments</title>
 
 <para>If there is no preferences file or if there is no entry in the file
@@ -77,26 +98,42 @@ APT::Default-Release "stable";
 algorithm to set the priorities of the versions of a package.  Assign:
 
 <variablelist>
 algorithm to set the priorities of the versions of a package.  Assign:
 
 <variablelist>
+<varlistentry>
+<term>priority 1</term>
+<listitem><simpara>to the versions coming from archives which in their <filename>Release</filename>
+files are marked as "NotAutomatic: yes" but <emphasis>not</emphasis> as "ButAutomaticUpgrades: yes"
+like the Debian <literal>experimental</literal> archive.</simpara></listitem>
+</varlistentry>
+
 <varlistentry>
 <term>priority 100</term>
 <varlistentry>
 <term>priority 100</term>
-<listitem><simpara>to the version that is already installed (if any).</simpara></listitem>
+<listitem><simpara>to the version that is already installed (if any) and to the versions coming
+from archives which in their <filename>Release</filename> files are marked as "NotAutomatic: yes" and
+"ButAutomaticUpgrades: yes" like the Debian backports archive since <literal>squeeze-backports</literal>.
+</simpara></listitem>
 </varlistentry>
 
 <varlistentry>
 <term>priority 500</term>
 </varlistentry>
 
 <varlistentry>
 <term>priority 500</term>
-<listitem><simpara>to the versions that are not installed and do not belong to the target release.</simpara></listitem>
+<listitem><simpara>to the versions that do not belong to the target release.</simpara></listitem>
 </varlistentry>
 
 <varlistentry>
 <term>priority 990</term>
 </varlistentry>
 
 <varlistentry>
 <term>priority 990</term>
-<listitem><simpara>to the versions that are not installed and belong to the target release.</simpara></listitem>
+<listitem><simpara>to the versions that belong to the target release.</simpara></listitem>
 </varlistentry>
 </variablelist>
 </varlistentry>
 </variablelist>
+
+The highest of those priorities whose description matches the version is assigned to the
+version.
 </para>
 
 <para>If the target release has not been specified then APT simply assigns
 priority 100 to all installed package versions and priority 500 to all
 </para>
 
 <para>If the target release has not been specified then APT simply assigns
 priority 100 to all installed package versions and priority 500 to all
-uninstalled package versions.</para>
+uninstalled package versions, except versions coming from archives which
+in their <filename>Release</filename> files are marked as "NotAutomatic: yes" -
+these versions get the priority 1 or priority 100 if it is additionally marked
+as "ButAutomaticUpgrades: yes".</para>
 
 <para>APT then applies the following rules, listed in order of precedence,
 to determine which version of a package to install.
 
 <para>APT then applies the following rules, listed in order of precedence,
 to determine which version of a package to install.
@@ -147,14 +184,14 @@ and a general form.
 <itemizedlist>
 <listitem>
 <simpara>The specific form assigns a priority (a "Pin-Priority") to one or more
 <itemizedlist>
 <listitem>
 <simpara>The specific form assigns a priority (a "Pin-Priority") to one or more
-specified packages and specified version or version range.  For example,
+specified packages with a specified version or version range.  For example,
 the following record assigns a high priority to all versions of
 the following record assigns a high priority to all versions of
-the <filename>perl</filename> package whose version number begins with "<literal>5.8</literal>".
+the <filename>perl</filename> package whose version number begins with "<literal>&good-perl;</literal>".
 Multiple packages can be separated by spaces.</simpara>
 
 <programlisting>
 Package: perl
 Multiple packages can be separated by spaces.</simpara>
 
 <programlisting>
 Package: perl
-Pin: version 5.8*
+Pin: version &good-perl;*
 Pin-Priority: 1001
 </programlisting>
 </listitem>
 Pin-Priority: 1001
 </programlisting>
 </listitem>
@@ -175,8 +212,15 @@ Pin: origin ""
 Pin-Priority: 999
 </programlisting>
 
 Pin-Priority: 999
 </programlisting>
 
-<simpara>A note of caution: the keyword used here is "<literal>origin</literal>".
-This should not be confused with the Origin of a distribution as
+<simpara>A note of caution: the keyword used here is "<literal>origin</literal>"
+which can be used to match a hostname. The following record will assign a high priority
+to all versions available from the server identified by the hostname "ftp.de.debian.org"</simpara>
+<programlisting>
+Package: *
+Pin: origin "ftp.de.debian.org"
+Pin-Priority: 999
+</programlisting>
+<simpara>This should <emphasis>not</emphasis> be confused with the Origin of a distribution as
 specified in a <filename>Release</filename> file.  What follows the "Origin:" tag
 in a <filename>Release</filename> file is not an Internet address
 but an author or vendor name, such as "Debian" or "Ximian".</simpara>
 specified in a <filename>Release</filename> file.  What follows the "Origin:" tag
 in a <filename>Release</filename> file is not an Internet address
 but an author or vendor name, such as "Debian" or "Ximian".</simpara>
@@ -190,21 +234,79 @@ Pin: release a=unstable
 Pin-Priority: 50
 </programlisting>
 
 Pin-Priority: 50
 </programlisting>
 
+<simpara>The following record assigns a high priority to all package versions
+belonging to any distribution whose Codename is "<literal>&debian-testing-codename;</literal>".</simpara>
+
+<programlisting>
+Package: *
+Pin: release n=&debian-testing-codename;
+Pin-Priority: 900
+</programlisting>
+
 <simpara>The following record assigns a high priority to all package versions
 belonging to any release whose Archive name is "<literal>stable</literal>"
 <simpara>The following record assigns a high priority to all package versions
 belonging to any release whose Archive name is "<literal>stable</literal>"
-and whose release Version number is "<literal>3.0</literal>".</simpara>
+and whose release Version number is "<literal>&debian-stable-version;</literal>".</simpara>
 
 <programlisting>
 Package: *
 
 <programlisting>
 Package: *
-Pin: release a=stable, v=3.0
+Pin: release a=stable, v=&debian-stable-version;
 Pin-Priority: 500
 </programlisting>
 </listitem>
 </itemizedlist>
 Pin-Priority: 500
 </programlisting>
 </listitem>
 </itemizedlist>
+
+The effect of the comma operator is similar to an "and" in logic: All
+conditions must be satisfied for the pin to match. There is one exception:
+For any type of condition (such as two "a" conditions), only the last such
+condition is checked.
+</para>
+
+</refsect2>
+
+<refsect2><title>Regular expressions and &glob; syntax</title>
+<para>
+APT also supports pinning by &glob; expressions, and regular
+expressions surrounded by slashes. For example, the following
+example assigns the priority 500 to all packages from
+experimental where the name starts with gnome (as a &glob;-like
+expression) or contains the word kde (as a POSIX extended regular
+expression surrounded by slashes).
 </para>
 
 </para>
 
+<programlisting>
+Package: gnome* /kde/
+Pin: release a=experimental
+Pin-Priority: 500
+</programlisting>
+
+<para>
+The rule for those expressions is that they can occur anywhere
+where a string can occur. Thus, the following pin assigns the
+priority 990 to all packages from a release starting with &ubuntu-codename;.
+</para>
+
+<programlisting>
+Package: *
+Pin: release n=&ubuntu-codename;*
+Pin-Priority: 990
+</programlisting>
+
+<para>
+If a regular expression occurs in a <literal>Package</literal> field,
+the behavior is the same as if this regular expression were replaced
+with a list of all package names it matches. It is undecided whether
+this will change in the future; thus you should always list wild-card
+pins first, so later specific pins override it.
+
+The pattern "<literal>*</literal>" in a Package field is not considered
+a &glob; expression in itself.
+</para>
 </refsect2>
 
 </refsect2>
 
+
+
+
+
 <refsect2>
 <title>How APT Interprets Priorities</title>
 
 <refsect2>
 <title>How APT Interprets Priorities</title>
 
@@ -214,30 +316,30 @@ or negative integers.  They are interpreted as follows (roughly speaking):
 
 <variablelist>
 <varlistentry>
 
 <variablelist>
 <varlistentry>
-<term>P &gt; 1000</term>
+<term>P &gt;= 1000</term>
 <listitem><simpara>causes a version to be installed even if this
 constitutes a downgrade of the package</simpara></listitem>
 </varlistentry>
 <varlistentry>
 <listitem><simpara>causes a version to be installed even if this
 constitutes a downgrade of the package</simpara></listitem>
 </varlistentry>
 <varlistentry>
-<term>990 &lt; P &lt;=1000</term>
+<term>990 &lt;= P &lt; 1000</term>
 <listitem><simpara>causes a version to be installed
 even if it does not come from the target release,
 unless the installed version is more recent</simpara></listitem>
 </varlistentry>
 <varlistentry>
 <listitem><simpara>causes a version to be installed
 even if it does not come from the target release,
 unless the installed version is more recent</simpara></listitem>
 </varlistentry>
 <varlistentry>
-<term>500 &lt; P &lt;=990</term>
+<term>500 &lt;= P &lt; 990</term>
 <listitem><simpara>causes a version to be installed
 unless there is a version available belonging to the target release
 or the installed version is more recent</simpara></listitem>
 </varlistentry>
 <varlistentry>
 <listitem><simpara>causes a version to be installed
 unless there is a version available belonging to the target release
 or the installed version is more recent</simpara></listitem>
 </varlistentry>
 <varlistentry>
-<term>100 &lt; P &lt;=500</term>
+<term>100 &lt;= P &lt; 500</term>
 <listitem><simpara>causes a version to be installed
 unless there is a version available belonging to some other
 distribution or the installed version is more recent</simpara></listitem>
 </varlistentry>
 <varlistentry>
 <listitem><simpara>causes a version to be installed
 unless there is a version available belonging to some other
 distribution or the installed version is more recent</simpara></listitem>
 </varlistentry>
 <varlistentry>
-<term>0 &lt; P &lt;=100</term>
+<term>0 &lt; P &lt; 100</term>
 <listitem><simpara>causes a version to be installed
 only if there is no installed version of the package</simpara></listitem>
 </varlistentry>
 <listitem><simpara>causes a version to be installed
 only if there is no installed version of the package</simpara></listitem>
 </varlistentry>
@@ -245,21 +347,28 @@ only if there is no installed version of the package</simpara></listitem>
 <term>P &lt; 0</term>
 <listitem><simpara>prevents the version from being installed</simpara></listitem>
 </varlistentry>
 <term>P &lt; 0</term>
 <listitem><simpara>prevents the version from being installed</simpara></listitem>
 </varlistentry>
+<varlistentry>
+<term>P = 0</term>
+<listitem><simpara>has undefined behaviour, do not use it.</simpara></listitem>
+</varlistentry>
 </variablelist>
 </para>
 
 </variablelist>
 </para>
 
-<para>If any specific-form records match an available package version then the
-first such record determines the priority of the package version.  
-Failing that,
-if any general-form records match an available package version then the
-first such record determines the priority of the package version.</para>
+<para>
+The first specific-form record matching an available package version determines
+the priority of the package version.
+Failing that, the priority of the package is defined as the maximum of all
+priorities defined by generic-form records matching the version.
+Records defined using patterns in the Pin field other than "*" are treated like
+specific-form records.
+</para>
 
 <para>For example, suppose the APT preferences file contains the three
 records presented earlier:</para>
 
 <programlisting>
 Package: perl
 
 <para>For example, suppose the APT preferences file contains the three
 records presented earlier:</para>
 
 <programlisting>
 Package: perl
-Pin: version 5.8*
+Pin: version &good-perl;*
 Pin-Priority: 1001
 
 Package: *
 Pin-Priority: 1001
 
 Package: *
@@ -275,8 +384,8 @@ Pin-Priority: 50
 <itemizedlist>
 <listitem><simpara>The most recent available version of the <literal>perl</literal>
 package will be installed, so long as that version's version number begins
 <itemizedlist>
 <listitem><simpara>The most recent available version of the <literal>perl</literal>
 package will be installed, so long as that version's version number begins
-with "<literal>5.8</literal>".  If <emphasis>any</emphasis> 5.8* version of <literal>perl</literal> is
-available and the installed version is 5.9*, then <literal>perl</literal> will be
+with "<literal>&good-perl;</literal>".  If <emphasis>any</emphasis> &good-perl;* version of <literal>perl</literal> is
+available and the installed version is &bad-perl;*, then <literal>perl</literal> will be
 downgraded.</simpara></listitem>
 <listitem><simpara>A version of any package other than <literal>perl</literal>
 that is available from the local system has priority over other versions,
 downgraded.</simpara></listitem>
 <listitem><simpara>A version of any package other than <literal>perl</literal>
 that is available from the local system has priority over other versions,
@@ -319,7 +428,7 @@ APT priorities:
 <para>The <filename>Release</filename> file is normally found in the directory
 <filename>.../dists/<replaceable>dist-name</replaceable></filename>:
 for example, <filename>.../dists/stable/Release</filename>,
 <para>The <filename>Release</filename> file is normally found in the directory
 <filename>.../dists/<replaceable>dist-name</replaceable></filename>:
 for example, <filename>.../dists/stable/Release</filename>,
-or <filename>.../dists/woody/Release</filename>.
+or <filename>.../dists/&debian-stable-codename;/Release</filename>.
 It consists of a single multi-line record which applies to <emphasis>all</emphasis> of
 the packages in the directory tree below its parent.  Unlike the
 <filename>Packages</filename> file, nearly all of the lines in a <filename>Release</filename>
 It consists of a single multi-line record which applies to <emphasis>all</emphasis> of
 the packages in the directory tree below its parent.  Unlike the
 <filename>Packages</filename> file, nearly all of the lines in a <filename>Release</filename>
@@ -327,10 +436,11 @@ file are relevant for setting APT priorities:
 
 <variablelist>
 <varlistentry>
 
 <variablelist>
 <varlistentry>
-<term>the <literal>Archive:</literal> line</term>
+<term>the <literal>Archive:</literal> or <literal>Suite:</literal> line</term>
 <listitem><simpara>names the archive to which all the packages
 in the directory tree belong.  For example, the line
 <listitem><simpara>names the archive to which all the packages
 in the directory tree belong.  For example, the line
-"Archive: stable"
+"Archive: stable" or
+"Suite: stable"
 specifies that all of the packages in the directory
 tree below the parent of the <filename>Release</filename> file are in a
 <literal>stable</literal> archive.  Specifying this value in the APT preferences file
 specifies that all of the packages in the directory
 tree below the parent of the <filename>Release</filename> file are in a
 <literal>stable</literal> archive.  Specifying this value in the APT preferences file
@@ -342,20 +452,36 @@ Pin: release a=stable
 </listitem>
 </varlistentry>
 
 </listitem>
 </varlistentry>
 
+<varlistentry>
+<term>the <literal>Codename:</literal> line</term>
+<listitem><simpara>names the codename to which all the packages
+in the directory tree belong.  For example, the line
+"Codename: &debian-testing-codename;"
+specifies that all of the packages in the directory
+tree below the parent of the <filename>Release</filename> file belong to a version named
+<literal>&debian-testing-codename;</literal>.  Specifying this value in the APT preferences file
+would require the line:
+</simpara>
+<programlisting>
+Pin: release n=&debian-testing-codename;
+</programlisting>
+</listitem>
+</varlistentry>
+
 <varlistentry>
 <term>the <literal>Version:</literal> line</term>
 <listitem><simpara>names the release version.  For example, the
 <varlistentry>
 <term>the <literal>Version:</literal> line</term>
 <listitem><simpara>names the release version.  For example, the
-packages in the tree might belong to Debian GNU/Linux release
-version 3.0.  Note that there is normally no version number for the
+packages in the tree might belong to Debian release
+version &debian-stable-version;.  Note that there is normally no version number for the
 <literal>testing</literal> and <literal>unstable</literal> distributions because they
 have not been released yet.  Specifying this in the APT preferences
 file would require one of the following lines.
 </simpara>
 
 <programlisting>
 <literal>testing</literal> and <literal>unstable</literal> distributions because they
 have not been released yet.  Specifying this in the APT preferences
 file would require one of the following lines.
 </simpara>
 
 <programlisting>
-Pin: release v=3.0
-Pin: release a=stable, v=3.0
-Pin: release 3.0
+Pin: release v=&debian-stable-version;
+Pin: release a=stable, v=&debian-stable-version;
+Pin: release &debian-stable-version;
 </programlisting>
 
 </listitem>
 </programlisting>
 
 </listitem>
@@ -423,10 +549,6 @@ distribution.</para>
 <para>Each record in the APT preferences file can optionally begin with
 one or more lines beginning with the word <literal>Explanation:</literal>.
 This provides a place for comments.</para>
 <para>Each record in the APT preferences file can optionally begin with
 one or more lines beginning with the word <literal>Explanation:</literal>.
 This provides a place for comments.</para>
-
-<para>The <literal>Pin-Priority:</literal> line in each APT preferences record is
-optional.  If omitted, APT assigns a priority of 1 less than the last value
-specified on a line beginning with <literal>Pin-Priority: release ...</literal>.</para>
 </refsect2>
 </refsect1>
 
 </refsect2>
 </refsect1>
 
@@ -522,10 +644,74 @@ version.
 apt-get install <replaceable>package</replaceable>/unstable
 </programlisting>
 </para>
 apt-get install <replaceable>package</replaceable>/unstable
 </programlisting>
 </para>
+</refsect2>
+
+
+<refsect2>
+<title>Tracking the evolution of a codename release</title>
+
+<para>The following APT preferences file will cause APT to assign a
+priority higher than the default (500) to all package versions belonging
+to a specified codename of a distribution and a prohibitively low priority to
+package versions belonging to other <literal>Debian</literal> distributions,
+codenames and archives.
+Note that with this APT preference APT will follow the migration of a release
+from the archive <literal>testing</literal> to <literal>stable</literal> and
+later <literal>oldstable</literal>. If you want to follow for example the progress
+in <literal>testing</literal> notwithstanding the codename changes you should use
+the example configurations above.
+
+<programlisting>
+Explanation: Uninstall or do not install any Debian-originated package versions
+Explanation: other than those in the distribution codenamed with &debian-testing-codename; or sid
+Package: *
+Pin: release n=&debian-testing-codename;
+Pin-Priority: 900
+
+Explanation: Debian unstable is always codenamed with sid
+Package: *
+Pin: release n=sid
+Pin-Priority: 800
+
+Package: *
+Pin: release o=Debian
+Pin-Priority: -10
+</programlisting>
+</para>
+
+<para>With a suitable &sources-list; file and the above preferences file,
+any of the following commands will cause APT to upgrade to the
+latest version(s) in the release codenamed with <literal>&debian-testing-codename;</literal>.
+
+<programlisting>
+apt-get install <replaceable>package-name</replaceable>
+apt-get upgrade
+apt-get dist-upgrade
+</programlisting>
+</para>
 
 
+<para>The following command will cause APT to upgrade the specified
+package to the latest version from the <literal>sid</literal> distribution.
+Thereafter, <command>apt-get upgrade</command> will upgrade
+the package to the most recent <literal>&debian-testing-codename;</literal> version if that is
+more recent than the installed version, otherwise, to the most recent
+<literal>sid</literal> version if that is more recent than the installed
+version.
+
+<programlisting>
+apt-get install <replaceable>package</replaceable>/sid
+</programlisting>
+</para>
 </refsect2>
 </refsect1>
 
 </refsect2>
 </refsect1>
 
+<refsect1>
+<title>Files</title>
+  <variablelist>
+    &file-preferences;
+  </variablelist>
+</refsect1>
+
 <refsect1>
 <title>See Also</title>
 <para>&apt-get; &apt-cache; &apt-conf; &sources-list;
 <refsect1>
 <title>See Also</title>
 <para>&apt-get; &apt-cache; &apt-conf; &sources-list;
@@ -535,4 +721,3 @@ apt-get install <replaceable>package</replaceable>/unstable
  &manbugs;
 
 </refentry>
  &manbugs;
 
 </refentry>
-