* apt-pkg/deb/deblistparser.cc:
[ntk/apt.git] / doc / apt_preferences.5.xml
... / ...
CommitLineData
1<?xml version="1.0" encoding="utf-8" standalone="no"?>
2<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
4
5<!ENTITY % aptent SYSTEM "apt.ent">
6%aptent;
7
8<!ENTITY % aptverbatiment SYSTEM "apt-verbatim.ent">
9%aptverbatiment;
10
11]>
12
13<refentry>
14
15 <refentryinfo>
16 &apt-author.team;
17 &apt-email;
18 &apt-product;
19 <!-- The last update date -->
20 <date>16 February 2010</date>
21 </refentryinfo>
22
23 <refmeta>
24 <refentrytitle>apt_preferences</refentrytitle>
25 <manvolnum>5</manvolnum>
26 <refmiscinfo class="manual">APT</refmiscinfo>
27 </refmeta>
28
29 <!-- Man page title -->
30 <refnamediv>
31 <refname>apt_preferences</refname>
32 <refpurpose>Preference control file for APT</refpurpose>
33 </refnamediv>
34
35<refsect1>
36<title>Description</title>
37<para>The APT preferences file <filename>/etc/apt/preferences</filename>
38and the fragment files in the <filename>/etc/apt/preferences.d/</filename>
39folder can be used to control which versions of packages will be selected
40for installation.</para>
41
42<para>Several versions of a package may be available for installation when
43the &sources-list; file contains references to more than one distribution
44(for example, <literal>stable</literal> and <literal>testing</literal>).
45APT assigns a priority to each version that is available.
46Subject to dependency constraints, <command>apt-get</command> selects the
47version with the highest priority for installation.
48The APT preferences file overrides the priorities that APT assigns to
49package versions by default, thus giving the user control over which
50one is selected for installation.</para>
51
52<para>Several instances of the same version of a package may be available when
53the &sources-list; file contains references to more than one source.
54In this case <command>apt-get</command> downloads the instance listed
55earliest in the &sources-list; file.
56The APT preferences file does not affect the choice of instance, only
57the choice of version.</para>
58
59<para>Preferences are a strong power in the hands of a system administrator
60but they can become also their biggest nightmare if used without care!
61APT will not questioning the preferences so wrong settings will therefore
62lead to uninstallable packages or wrong decisions while upgrading packages.
63Even more problems will arise if multiply distribution releases are mixed
64without a good understanding of the following paragraphs.
65Packages included in a specific release aren't tested in and
66therefore doesn't always work as expected in older or newer releases or
67together with other packages from different releases.
68You have been warned.</para>
69
70<para>Note that the files in the <filename>/etc/apt/preferences.d</filename>
71directory are parsed in alphanumeric ascending order and need to obey the
72following naming convention: The files have no or "<literal>pref</literal>"
73as filename extension and which only contain alphanumeric, hyphen (-),
74underscore (_) and period (.) characters.
75Otherwise APT will print a notice that it has ignored a file if the file
76doesn't match a pattern in the <literal>Dir::Ignore-Files-Silently</literal>
77configuration list - in this case it will be silently ignored.</para>
78
79<refsect2><title>APT's Default Priority Assignments</title>
80
81<para>If there is no preferences file or if there is no entry in the file
82that applies to a particular version then the priority assigned to that
83version is the priority of the distribution to which that version
84belongs. It is possible to single out a distribution, "the target release",
85which receives a higher priority than other distributions do by default.
86The target release can be set on the <command>apt-get</command> command
87line or in the APT configuration file <filename>/etc/apt/apt.conf</filename>.
88Note that this has precedence over any general priority you set in the
89<filename>/etc/apt/preferences</filename> file described later, but not
90over specifically pinned packages.
91For example,
92
93<programlisting>
94<command>apt-get install -t testing <replaceable>some-package</replaceable></command>
95</programlisting>
96<programlisting>
97APT::Default-Release "stable";
98</programlisting>
99</para>
100
101<para>If the target release has been specified then APT uses the following
102algorithm to set the priorities of the versions of a package. Assign:
103
104<variablelist>
105<varlistentry>
106<term>priority 1</term>
107<listitem><simpara>to the versions coming from archives which in their <filename>Release</filename>
108files are marked as "NotAutomatic: yes" but <emphasis>not</emphasis> as "ButAutomaticUpgrades: yes"
109like the debian <literal>experimental</literal> archive.</simpara></listitem>
110</varlistentry>
111
112<varlistentry>
113<term>priority 100</term>
114<listitem><simpara>to the version that is already installed (if any) and to the versions coming
115from archives which in their <filename>Release</filename> files are marked as "NotAutomatic: yes" and
116"ButAutomaticUpgrades: yes" like the debian backports archive since <literal>squeeze-backports</literal>.
117</simpara></listitem>
118</varlistentry>
119
120<varlistentry>
121<term>priority 500</term>
122<listitem><simpara>to the versions that are not installed and do not belong to the target release.</simpara></listitem>
123</varlistentry>
124
125<varlistentry>
126<term>priority 990</term>
127<listitem><simpara>to the versions that are not installed and belong to the target release.</simpara></listitem>
128</varlistentry>
129</variablelist>
130</para>
131
132<para>If the target release has not been specified then APT simply assigns
133priority 100 to all installed package versions and priority 500 to all
134uninstalled package versions, except versions coming from archives which
135in their <filename>Release</filename> files are marked as "NotAutomatic: yes" -
136these versions get the priority 1 or priority 100 if it is additionally marked
137as "ButAutomaticUpgrades: yes".</para>
138
139<para>APT then applies the following rules, listed in order of precedence,
140to determine which version of a package to install.
141<itemizedlist>
142<listitem><simpara>Never downgrade unless the priority of an available
143version exceeds 1000. ("Downgrading" is installing a less recent version
144of a package in place of a more recent version. Note that none of APT's
145default priorities exceeds 1000; such high priorities can only be set in
146the preferences file. Note also that downgrading a package
147can be risky.)</simpara></listitem>
148<listitem><simpara>Install the highest priority version.</simpara></listitem>
149<listitem><simpara>If two or more versions have the same priority,
150install the most recent one (that is, the one with the higher version
151number).</simpara></listitem>
152<listitem><simpara>If two or more versions have the same priority and
153version number but either the packages differ in some of their metadata or the
154<literal>--reinstall</literal> option is given, install the uninstalled one.</simpara></listitem>
155</itemizedlist>
156</para>
157
158<para>In a typical situation, the installed version of a package (priority 100)
159is not as recent as one of the versions available from the sources listed in
160the &sources-list; file (priority 500 or 990). Then the package will be upgraded
161when <command>apt-get install <replaceable>some-package</replaceable></command>
162or <command>apt-get upgrade</command> is executed.
163</para>
164
165<para>More rarely, the installed version of a package is <emphasis>more</emphasis> recent
166than any of the other available versions. The package will not be downgraded
167when <command>apt-get install <replaceable>some-package</replaceable></command>
168or <command>apt-get upgrade</command> is executed.</para>
169
170<para>Sometimes the installed version of a package is more recent than the
171version belonging to the target release, but not as recent as a version
172belonging to some other distribution. Such a package will indeed be upgraded
173when <command>apt-get install <replaceable>some-package</replaceable></command>
174or <command>apt-get upgrade</command> is executed,
175because at least <emphasis>one</emphasis> of the available versions has a higher
176priority than the installed version.</para>
177</refsect2>
178
179<refsect2><title>The Effect of APT Preferences</title>
180
181<para>The APT preferences file allows the system administrator to control the
182assignment of priorities. The file consists of one or more multi-line records
183separated by blank lines. Records can have one of two forms, a specific form
184and a general form.
185<itemizedlist>
186<listitem>
187<simpara>The specific form assigns a priority (a "Pin-Priority") to one or more
188specified packages and specified version or version range. For example,
189the following record assigns a high priority to all versions of
190the <filename>perl</filename> package whose version number begins with "<literal>5.8</literal>".
191Multiple packages can be separated by spaces.</simpara>
192
193<programlisting>
194Package: perl
195Pin: version 5.8*
196Pin-Priority: 1001
197</programlisting>
198</listitem>
199
200<listitem><simpara>The general form assigns a priority to all of the package versions in a
201given distribution (that is, to all the versions of packages that are
202listed in a certain <filename>Release</filename> file) or to all of the package
203versions coming from a particular Internet site, as identified by the
204site's fully qualified domain name.</simpara>
205
206<simpara>This general-form entry in the APT preferences file applies only
207to groups of packages. For example, the following record assigns a high
208priority to all package versions available from the local site.</simpara>
209
210<programlisting>
211Package: *
212Pin: origin ""
213Pin-Priority: 999
214</programlisting>
215
216<simpara>A note of caution: the keyword used here is "<literal>origin</literal>"
217which can be used to match a hostname. The following record will assign a high priority
218to all versions available from the server identified by the hostname "ftp.de.debian.org"</simpara>
219<programlisting>
220Package: *
221Pin: origin "ftp.de.debian.org"
222Pin-Priority: 999
223</programlisting>
224<simpara>This should <emphasis>not</emphasis> be confused with the Origin of a distribution as
225specified in a <filename>Release</filename> file. What follows the "Origin:" tag
226in a <filename>Release</filename> file is not an Internet address
227but an author or vendor name, such as "Debian" or "Ximian".</simpara>
228
229<simpara>The following record assigns a low priority to all package versions
230belonging to any distribution whose Archive name is "<literal>unstable</literal>".</simpara>
231
232<programlisting>
233Package: *
234Pin: release a=unstable
235Pin-Priority: 50
236</programlisting>
237
238<simpara>The following record assigns a high priority to all package versions
239belonging to any distribution whose Codename is "<literal>&testing-codename;</literal>".</simpara>
240
241<programlisting>
242Package: *
243Pin: release n=&testing-codename;
244Pin-Priority: 900
245</programlisting>
246
247<simpara>The following record assigns a high priority to all package versions
248belonging to any release whose Archive name is "<literal>stable</literal>"
249and whose release Version number is "<literal>3.0</literal>".</simpara>
250
251<programlisting>
252Package: *
253Pin: release a=stable, v=3.0
254Pin-Priority: 500
255</programlisting>
256</listitem>
257</itemizedlist>
258</para>
259
260</refsect2>
261
262<refsect2>
263<title>How APT Interprets Priorities</title>
264
265<para>
266Priorities (P) assigned in the APT preferences file must be positive
267or negative integers. They are interpreted as follows (roughly speaking):
268
269<variablelist>
270<varlistentry>
271<term>P &gt; 1000</term>
272<listitem><simpara>causes a version to be installed even if this
273constitutes a downgrade of the package</simpara></listitem>
274</varlistentry>
275<varlistentry>
276<term>990 &lt; P &lt;=1000</term>
277<listitem><simpara>causes a version to be installed
278even if it does not come from the target release,
279unless the installed version is more recent</simpara></listitem>
280</varlistentry>
281<varlistentry>
282<term>500 &lt; P &lt;=990</term>
283<listitem><simpara>causes a version to be installed
284unless there is a version available belonging to the target release
285or the installed version is more recent</simpara></listitem>
286</varlistentry>
287<varlistentry>
288<term>100 &lt; P &lt;=500</term>
289<listitem><simpara>causes a version to be installed
290unless there is a version available belonging to some other
291distribution or the installed version is more recent</simpara></listitem>
292</varlistentry>
293<varlistentry>
294<term>0 &lt; P &lt;=100</term>
295<listitem><simpara>causes a version to be installed
296only if there is no installed version of the package</simpara></listitem>
297</varlistentry>
298<varlistentry>
299<term>P &lt; 0</term>
300<listitem><simpara>prevents the version from being installed</simpara></listitem>
301</varlistentry>
302</variablelist>
303</para>
304
305<para>If any specific-form records match an available package version then the
306first such record determines the priority of the package version.
307Failing that,
308if any general-form records match an available package version then the
309first such record determines the priority of the package version.</para>
310
311<para>For example, suppose the APT preferences file contains the three
312records presented earlier:</para>
313
314<programlisting>
315Package: perl
316Pin: version 5.8*
317Pin-Priority: 1001
318
319Package: *
320Pin: origin ""
321Pin-Priority: 999
322
323Package: *
324Pin: release unstable
325Pin-Priority: 50
326</programlisting>
327
328<para>Then:
329<itemizedlist>
330<listitem><simpara>The most recent available version of the <literal>perl</literal>
331package will be installed, so long as that version's version number begins
332with "<literal>5.8</literal>". If <emphasis>any</emphasis> 5.8* version of <literal>perl</literal> is
333available and the installed version is 5.9*, then <literal>perl</literal> will be
334downgraded.</simpara></listitem>
335<listitem><simpara>A version of any package other than <literal>perl</literal>
336that is available from the local system has priority over other versions,
337even versions belonging to the target release.
338</simpara></listitem>
339<listitem><simpara>A version of a package whose origin is not the local
340system but some other site listed in &sources-list; and which belongs to
341an <literal>unstable</literal> distribution is only installed if it is selected
342for installation and no version of the package is already installed.
343</simpara></listitem>
344</itemizedlist>
345</para>
346</refsect2>
347
348<refsect2>
349<title>Determination of Package Version and Distribution Properties</title>
350
351<para>The locations listed in the &sources-list; file should provide
352<filename>Packages</filename> and <filename>Release</filename> files
353to describe the packages available at that location. </para>
354
355<para>The <filename>Packages</filename> file is normally found in the directory
356<filename>.../dists/<replaceable>dist-name</replaceable>/<replaceable>component</replaceable>/<replaceable>arch</replaceable></filename>:
357for example, <filename>.../dists/stable/main/binary-i386/Packages</filename>.
358It consists of a series of multi-line records, one for each package available
359in that directory. Only two lines in each record are relevant for setting
360APT priorities:
361<variablelist>
362<varlistentry>
363<term>the <literal>Package:</literal> line</term>
364<listitem><simpara>gives the package name</simpara></listitem>
365</varlistentry>
366<varlistentry>
367<term>the <literal>Version:</literal> line</term>
368<listitem><simpara>gives the version number for the named package</simpara></listitem>
369</varlistentry>
370</variablelist>
371</para>
372
373<para>The <filename>Release</filename> file is normally found in the directory
374<filename>.../dists/<replaceable>dist-name</replaceable></filename>:
375for example, <filename>.../dists/stable/Release</filename>,
376or <filename>.../dists/&stable-codename;/Release</filename>.
377It consists of a single multi-line record which applies to <emphasis>all</emphasis> of
378the packages in the directory tree below its parent. Unlike the
379<filename>Packages</filename> file, nearly all of the lines in a <filename>Release</filename>
380file are relevant for setting APT priorities:
381
382<variablelist>
383<varlistentry>
384<term>the <literal>Archive:</literal> or <literal>Suite:</literal> line</term>
385<listitem><simpara>names the archive to which all the packages
386in the directory tree belong. For example, the line
387"Archive: stable" or
388"Suite: stable"
389specifies that all of the packages in the directory
390tree below the parent of the <filename>Release</filename> file are in a
391<literal>stable</literal> archive. Specifying this value in the APT preferences file
392would require the line:
393</simpara>
394<programlisting>
395Pin: release a=stable
396</programlisting>
397</listitem>
398</varlistentry>
399
400<varlistentry>
401<term>the <literal>Codename:</literal> line</term>
402<listitem><simpara>names the codename to which all the packages
403in the directory tree belong. For example, the line
404"Codename: &testing-codename;"
405specifies that all of the packages in the directory
406tree below the parent of the <filename>Release</filename> file belong to a version named
407<literal>&testing-codename;</literal>. Specifying this value in the APT preferences file
408would require the line:
409</simpara>
410<programlisting>
411Pin: release n=&testing-codename;
412</programlisting>
413</listitem>
414</varlistentry>
415
416<varlistentry>
417<term>the <literal>Version:</literal> line</term>
418<listitem><simpara>names the release version. For example, the
419packages in the tree might belong to Debian GNU/Linux release
420version 3.0. Note that there is normally no version number for the
421<literal>testing</literal> and <literal>unstable</literal> distributions because they
422have not been released yet. Specifying this in the APT preferences
423file would require one of the following lines.
424</simpara>
425
426<programlisting>
427Pin: release v=3.0
428Pin: release a=stable, v=3.0
429Pin: release 3.0
430</programlisting>
431
432</listitem>
433</varlistentry>
434
435<varlistentry>
436<term>the <literal>Component:</literal> line</term>
437<listitem><simpara>names the licensing component associated with the
438packages in the directory tree of the <filename>Release</filename> file.
439For example, the line "Component: main" specifies that
440all the packages in the directory tree are from the <literal>main</literal>
441component, which entails that they are licensed under terms listed
442in the Debian Free Software Guidelines. Specifying this component
443in the APT preferences file would require the line:
444</simpara>
445<programlisting>
446Pin: release c=main
447</programlisting>
448</listitem>
449</varlistentry>
450
451<varlistentry>
452<term>the <literal>Origin:</literal> line</term>
453<listitem><simpara>names the originator of the packages in the
454directory tree of the <filename>Release</filename> file. Most commonly, this is
455<literal>Debian</literal>. Specifying this origin in the APT preferences file
456would require the line:
457</simpara>
458<programlisting>
459Pin: release o=Debian
460</programlisting>
461</listitem>
462</varlistentry>
463
464<varlistentry>
465<term>the <literal>Label:</literal> line</term>
466<listitem><simpara>names the label of the packages in the directory tree
467of the <filename>Release</filename> file. Most commonly, this is
468<literal>Debian</literal>. Specifying this label in the APT preferences file
469would require the line:
470</simpara>
471<programlisting>
472Pin: release l=Debian
473</programlisting>
474</listitem>
475</varlistentry>
476</variablelist>
477</para>
478
479<para>All of the <filename>Packages</filename> and <filename>Release</filename>
480files retrieved from locations listed in the &sources-list; file are stored
481in the directory <filename>/var/lib/apt/lists</filename>, or in the file named
482by the variable <literal>Dir::State::Lists</literal> in the <filename>apt.conf</filename> file.
483For example, the file
484<filename>debian.lcs.mit.edu_debian_dists_unstable_contrib_binary-i386_Release</filename>
485contains the <filename>Release</filename> file retrieved from the site
486<literal>debian.lcs.mit.edu</literal> for <literal>binary-i386</literal> architecture
487files from the <literal>contrib</literal> component of the <literal>unstable</literal>
488distribution.</para>
489</refsect2>
490
491<refsect2>
492<title>Optional Lines in an APT Preferences Record</title>
493
494<para>Each record in the APT preferences file can optionally begin with
495one or more lines beginning with the word <literal>Explanation:</literal>.
496This provides a place for comments.</para>
497</refsect2>
498</refsect1>
499
500<refsect1>
501<title>Examples</title>
502<refsect2>
503<title>Tracking Stable</title>
504
505<para>The following APT preferences file will cause APT to assign a
506priority higher than the default (500) to all package versions belonging
507to a <literal>stable</literal> distribution and a prohibitively low priority to
508package versions belonging to other <literal>Debian</literal> distributions.
509
510<programlisting>
511Explanation: Uninstall or do not install any Debian-originated
512Explanation: package versions other than those in the stable distro
513Package: *
514Pin: release a=stable
515Pin-Priority: 900
516
517Package: *
518Pin: release o=Debian
519Pin-Priority: -10
520</programlisting>
521</para>
522
523<para>With a suitable &sources-list; file and the above preferences file,
524any of the following commands will cause APT to upgrade to the
525latest <literal>stable</literal> version(s).
526
527<programlisting>
528apt-get install <replaceable>package-name</replaceable>
529apt-get upgrade
530apt-get dist-upgrade
531</programlisting>
532</para>
533
534<para>The following command will cause APT to upgrade the specified
535package to the latest version from the <literal>testing</literal> distribution;
536the package will not be upgraded again unless this command is given
537again.
538
539<programlisting>
540apt-get install <replaceable>package</replaceable>/testing
541</programlisting>
542</para>
543</refsect2>
544
545 <refsect2>
546 <title>Tracking Testing or Unstable</title>
547
548<para>The following APT preferences file will cause APT to assign
549a high priority to package versions from the <literal>testing</literal>
550distribution, a lower priority to package versions from the
551<literal>unstable</literal> distribution, and a prohibitively low priority
552to package versions from other <literal>Debian</literal> distributions.
553
554<programlisting>
555Package: *
556Pin: release a=testing
557Pin-Priority: 900
558
559Package: *
560Pin: release a=unstable
561Pin-Priority: 800
562
563Package: *
564Pin: release o=Debian
565Pin-Priority: -10
566</programlisting>
567</para>
568
569<para>With a suitable &sources-list; file and the above preferences file,
570any of the following commands will cause APT to upgrade to the latest
571<literal>testing</literal> version(s).
572
573<programlisting>
574apt-get install <replaceable>package-name</replaceable>
575apt-get upgrade
576apt-get dist-upgrade
577</programlisting>
578</para>
579
580<para>The following command will cause APT to upgrade the specified
581package to the latest version from the <literal>unstable</literal> distribution.
582Thereafter, <command>apt-get upgrade</command> will upgrade
583the package to the most recent <literal>testing</literal> version if that is
584more recent than the installed version, otherwise, to the most recent
585<literal>unstable</literal> version if that is more recent than the installed
586version.
587
588<programlisting>
589apt-get install <replaceable>package</replaceable>/unstable
590</programlisting>
591</para>
592</refsect2>
593
594
595<refsect2>
596<title>Tracking the evolution of a codename release</title>
597
598<para>The following APT preferences file will cause APT to assign a
599priority higher than the default (500) to all package versions belonging
600to a specified codename of a distribution and a prohibitively low priority to
601package versions belonging to other <literal>Debian</literal> distributions,
602codenames and archives.
603Note that with this APT preference APT will follow the migration of a release
604from the archive <literal>testing</literal> to <literal>stable</literal> and
605later <literal>oldstable</literal>. If you want to follow for example the progress
606in <literal>testing</literal> notwithstanding the codename changes you should use
607the example configurations above.
608
609<programlisting>
610Explanation: Uninstall or do not install any Debian-originated package versions
611Explanation: other than those in the distribution codenamed with &testing-codename; or sid
612Package: *
613Pin: release n=&testing-codename;
614Pin-Priority: 900
615
616Explanation: Debian unstable is always codenamed with sid
617Package: *
618Pin: release n=sid
619Pin-Priority: 800
620
621Package: *
622Pin: release o=Debian
623Pin-Priority: -10
624</programlisting>
625</para>
626
627<para>With a suitable &sources-list; file and the above preferences file,
628any of the following commands will cause APT to upgrade to the
629latest version(s) in the release codenamed with <literal>&testing-codename;</literal>.
630
631<programlisting>
632apt-get install <replaceable>package-name</replaceable>
633apt-get upgrade
634apt-get dist-upgrade
635</programlisting>
636</para>
637
638<para>The following command will cause APT to upgrade the specified
639package to the latest version from the <literal>sid</literal> distribution.
640Thereafter, <command>apt-get upgrade</command> will upgrade
641the package to the most recent <literal>&testing-codename;</literal> version if that is
642more recent than the installed version, otherwise, to the most recent
643<literal>sid</literal> version if that is more recent than the installed
644version.
645
646<programlisting>
647apt-get install <replaceable>package</replaceable>/sid
648</programlisting>
649</para>
650</refsect2>
651</refsect1>
652
653<refsect1>
654<title>Files</title>
655 <variablelist>
656 &file-preferences;
657 </variablelist>
658</refsect1>
659
660<refsect1>
661<title>See Also</title>
662<para>&apt-get; &apt-cache; &apt-conf; &sources-list;
663</para>
664</refsect1>
665
666 &manbugs;
667
668</refentry>