&apt-email;
&apt-product;
<!-- The last update date -->
- <date>29 February 2004</date>
+ <date>16 February 2010</date>
</refentryinfo>
<refmeta>
<refentrytitle>apt_preferences</refentrytitle>
<manvolnum>5</manvolnum>
+ <refmiscinfo class="manual">APT</refmiscinfo>
</refmeta>
<!-- Man page title -->
<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
The APT preferences file does not affect the choice of instance, only
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 questioning the preferences so wrong settings will therefore
+lead to uninstallable packages or wrong decisions while upgrading packages.
+Even more problems will arise if multiply distribution releases are mixed
+without a good understanding of the following paragraphs.
+Packages included in a specific release aren't tested in and
+therefore doesn'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 no or "<literal>pref</literal>"
+as filename extension and which only contain alphanumeric, hyphen (-),
+underscore (_) and period (.) characters - otherwise they 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
which receives a higher priority than other distributions do by default.
The target release can be set on the <command>apt-get</command> command
line or in the APT configuration file <filename>/etc/apt/apt.conf</filename>.
+Note that this has precedence over any general priority you set in the
+<filename>/etc/apt/preferences</filename> file described later, but not
+over specifically pinned packages.
For example,
<programlisting>
<programlisting>
Package: *
Pin: release a=unstable
-Pin-Priority: 500
+Pin-Priority: 50
+</programlisting>
+
+<simpara>The following record assigns a high priority to all package versions
+belonging to any distribution whose Codename is "<literal>squeeze</literal>".</simpara>
+
+<programlisting>
+Package: *
+Pin: release n=squeeze
+Pin-Priority: 900
</programlisting>
<simpara>The following record assigns a high priority to all package versions
<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
-"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
</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: squeeze"
+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>squeeze</literal>. Specifying this value in the APT preferences file
+would require the line:
+</simpara>
+<programlisting>
+Pin: release n=squeeze
+</programlisting>
+</listitem>
+</varlistentry>
+
<varlistentry>
<term>the <literal>Version:</literal> line</term>
<listitem><simpara>names the release version. For example, the
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 squeeze or sid
+Package: *
+Pin: release n=squeeze
+Pin-Priority: 900
+
+Explanation: Debian unstable is always codenamed with sid
+Package: *
+Pin: release a=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>squeeze</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>squeeze</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>
+<refsect1>
+<title>Files</title>
+ <variablelist>
+ &file-preferences;
+ </variablelist>
+</refsect1>
+
<refsect1>
<title>See Also</title>
<para>&apt-get; &apt-cache; &apt-conf; &sources-list;
&manbugs;
</refentry>
-