In the example above, the package that would be installed (
Candidate
) would be the older,
3.14
version from
stretch/main
.
stretch-backports/main
has a newer version
3.17
, but a lower priority (
100
vs
500
for stretch)
To view the global priority for each Apt source (repository):
$ apt-cache policy
Package files:
# The default https://wiki.debian.org/DebianStable repository with a priority of 500
500 https://deb.debian.org/debian stable/main amd64 Packages
o=Debian,n=stable,l=Debian,c=main,b=amd64
origin deb.debian.org
# The repository for Debian https://wiki.debian.org/PointReleases (security and grave bug fixes ~every 2 months)
500 https://deb.debian.org/debian stable-updates/main amd64 Packages
release o=Debian,a=oldstable-updates,n=stable-updates,l=Debian,c=main,b=amd64
origin deb.debian.org
# The https://wiki.debian.org/DebianSecurity repository with short response time for security fixes
500 http://security.debian.org stable/updates/main amd64 Packages
release v=9,o=Debian,a=oldstable,n=stable,l=Debian-Security,c=main,b=amd64
origin security.debian.org
# The https://wiki.debian.org/DebianBackports repository, comes with a default priority of 100
100 https://deb.debian.org/debian stable-backports/main amd64 Packages
release o=Debian Backports,a=stable-backports,n=stable-backports,l=Debian Backports,c=main,b=amd64
origin deb.debian.org
# The priority of locally installed packages
100 /var/lib/dpkg/status
release a=now
Force installation of a package from a repository
To tell Apt to install a package from
stretch-backports
, even if the package has a low priority:
apt install -t stretch-backports claws-mail
Note that the package will not be automatically upgraded when running an Apt Upgrade.
Always prefer packages from a repository
To always prefer packages
from
stretch-backports
(and hence allow Apt Upgrades), set a higher priority for this package coming from the
stretch-backports
release. Edit the file
/etc/apt/preferences.d/99debian-backports
(create it):
Package: claws-mail
Pin: release a=stretch-backports
Pin-Priority: 900
Now installing the
claws-mail
package will install the version from
stretch-backports
. Running an Apt Upgrade will automatically pick up newer versions from
stable-backports
. Running
apt-cache policy
again you would see:
Pinned packages:
claws-mail -> 3.17.1-1~bpo9+1 with priority 900
Prevent/selective installation from third-party a repository
To
prevent installation of newer packages from a third-party repository
(
DontBreakDebian
), even if it has equal priority, edit the file
/etc/apt/preferences.d/99my-custom-repository
by origin url:
# Never prefer packages from the my-custom-repo repository
Package: *
Pin: origin my.custom.repo.url
Pin-Priority: 1
# Allow upgrading only my-specific-software from my-custom-repo
Package: my-specific-software
Pin: origin my.custom.repo.url
Pin-Priority: 500
or by repository name:
# Never prefer packages from the my-custom-repo repository
Package: *
Pin: release o=my-custom-repo-name
Pin-Priority: 1
# Allow upgrading only my-specific-software from my-custom-repo
Package: my-specific-software
Pin: release o=my-custom-repo-name
Pin-Priority: 500
File naming in
/etc/apt/preferences.d/
is free but the last in alphabetical order takes precedence.
The
*
after
Package:
is not a wildcard, but a special case that means "everything". Wildcards are
NOT
supported. However, trailing wildcards are accepted in versions (
2.6*
will match both
2.6
and
2.6.18
).
Other pinning notes
In addition to
origin
, you can pin packages based on other variables.
apt-cache policy
shows other variables that can be used as the
Pin:
key:
1 https://deb.debian.org/debian stretch-backports/non-free i386 Packages
release o=Debian Backports,a=stretch-backports,n=stretch-backports,l=Debian Backports,c=non-free,b=i386
origin deb.debian.org
-
release
: the
DebianRelease
full name, codename (
n
) or release number (
v
)
-
a
,
archive
: archive (base directory in the repository)
-
c
,
component
:
main/contrib/non-free
-
origin
: domain name of the repository (
ToDo
verify)
-
l
,
label
:
ToDo
-
b
,
architecture
: processor
architecture
-
version
: package version
These variables are provided by
Release
files in
Debian repositories
.
See also:
apt.conf
Apt accepts configuration files (without extension) in
/etc/apt/apt.conf.d/
. These are processed by Apt in numeric/alphabetical order.
/etc/apt/apt.conf
is also valid but deprecated.
These files contain directives used by all tools in the Apt suite, you can get a list of all current values with
apt-config dump
-
Dpkg::Pre-Install-Pkgs {"mycommand";};
: executes
mycommand
before package installation/unpacking by Dpkg.
-
Dpkg::Pre-Invoke {"mycommand";};
: executes
mycommand
before apt calls dpkg
-
Dpkg::Post-Invoke {"mycommand";};
: executes
mycommand
after apt calls dpkg
-
Acquire::http::Proxy "http://proxy:8080";
: sets the proxy for HTTP downloads
-
Acquire::https::Proxy "https://proxy:8443";
: sets the proxy for HTTPS downloads
-
Acquire::http::Timeout "2";
: sets the timeout for HTTP downloads
-
Acquire::https::Timeout "2";
: sets the timeout for HTTPS downloads
-
Acquire::ftp::Timeout "2";
: sets the timeout for FTP downloads
If you really have to use FTP, this sets the FTP proxy:
Acquire::ftp
Proxy "ftp://proxy:2121/";
ProxyLogin
"USER $(SITE_USER)@$(SITE)";
"PASS $(SITE_PASS)";
}
CategoryPackageManagement
|
CategorySoftware
|
CategorySystemAdministration