X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/2d4aa48a2e3e493780a797b828a04066ef1994fa..0d303f1764645284b33924c9be8bf29f0a32ca5c:/doc/apt_preferences.5.xml diff --git a/doc/apt_preferences.5.xml b/doc/apt_preferences.5.xml index 12ea606b7..16e6a7aa0 100644 --- a/doc/apt_preferences.5.xml +++ b/doc/apt_preferences.5.xml @@ -1,10 +1,9 @@ <?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> @@ -14,7 +13,7 @@ &apt-email; &apt-product; <!-- The last update date --> - <date>04 May 2009</date> + <date>2012-06-09T00:00:00Z</date> </refentryinfo> <refmeta> @@ -32,7 +31,8 @@ <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 @@ -41,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. -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> @@ -49,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 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> +<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 @@ -78,9 +98,19 @@ APT::Default-Release "stable"; 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> -<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> @@ -97,7 +127,10 @@ algorithm to set the priorities of the versions of a package. Assign: <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. @@ -148,14 +181,14 @@ and a general form. <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 <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 -Pin: version 5.8* +Pin: version &good-perl;* Pin-Priority: 1001 </programlisting> </listitem> @@ -176,8 +209,15 @@ Pin: origin "" 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> @@ -192,21 +232,21 @@ 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> +belonging to any distribution whose Codename is "<literal>&testing-codename;</literal>".</simpara> <programlisting> Package: * -Pin: release n=squeeze +Pin: release n=&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>" -and whose release Version number is "<literal>3.0</literal>".</simpara> +and whose release Version number is "<literal>&stable-version;</literal>".</simpara> <programlisting> Package: * -Pin: release a=stable, v=3.0 +Pin: release a=stable, v=&stable-version; Pin-Priority: 500 </programlisting> </listitem> @@ -215,6 +255,50 @@ Pin-Priority: 500 </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> + +<programlisting> +Package: gnome* /kde/ +Pin: release n=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> <title>How APT Interprets Priorities</title> @@ -224,30 +308,30 @@ or negative integers. They are interpreted as follows (roughly speaking): <variablelist> <varlistentry> -<term>P > 1000</term> +<term>P >= 1000</term> <listitem><simpara>causes a version to be installed even if this constitutes a downgrade of the package</simpara></listitem> </varlistentry> <varlistentry> -<term>990 < P <=1000</term> +<term>990 <= P < 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> -<term>500 < P <=990</term> +<term>500 <= P < 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> -<term>100 < P <=500</term> +<term>100 <= P < 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> -<term>0 < P <=100</term> +<term>0 < P < 100</term> <listitem><simpara>causes a version to be installed only if there is no installed version of the package</simpara></listitem> </varlistentry> @@ -269,7 +353,7 @@ records presented earlier:</para> <programlisting> Package: perl -Pin: version 5.8* +Pin: version &good-perl;* Pin-Priority: 1001 Package: * @@ -285,8 +369,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 -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, @@ -329,7 +413,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>, -or <filename>.../dists/woody/Release</filename>. +or <filename>.../dists/&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> @@ -357,14 +441,14 @@ Pin: release a=stable <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" +"Codename: &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>squeeze</literal>. Specifying this value in the APT preferences file +<literal>&testing-codename;</literal>. Specifying this value in the APT preferences file would require the line: </simpara> <programlisting> -Pin: release n=squeeze +Pin: release n=&testing-codename; </programlisting> </listitem> </varlistentry> @@ -372,17 +456,17 @@ Pin: release n=squeeze <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 &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> -Pin: release v=3.0 -Pin: release a=stable, v=3.0 -Pin: release 3.0 +Pin: release v=&stable-version; +Pin: release a=stable, v=&stable-version; +Pin: release &stable-version; </programlisting> </listitem> @@ -450,10 +534,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>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> @@ -568,14 +648,14 @@ 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 +Explanation: other than those in the distribution codenamed with &testing-codename; or sid Package: * -Pin: release n=squeeze +Pin: release n=&testing-codename; Pin-Priority: 900 Explanation: Debian unstable is always codenamed with sid Package: * -Pin: release a=sid +Pin: release n=sid Pin-Priority: 800 Package: * @@ -586,7 +666,7 @@ Pin-Priority: -10 <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>. +latest version(s) in the release codenamed with <literal>&testing-codename;</literal>. <programlisting> apt-get install <replaceable>package-name</replaceable> @@ -598,7 +678,7 @@ apt-get dist-upgrade <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 +the package to the most recent <literal>&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. @@ -610,6 +690,13 @@ apt-get install <replaceable>package</replaceable>/sid </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;