при просмотре исходного кода для способного диспетчера пакетов я хотел узнать внутреннюю логику pkgDepCache::Policy::GetCandidateVer
функция.
pkgCache::VerIterator pkgDepCache::Policy::GetCandidateVer(PkgIterator const &Pkg)
{
/* Not source/not automatic versions cannot be a candidate version
unless they are already installed */
VerIterator Last(*(pkgCache *)this,0);
for (VerIterator I = Pkg.VersionList(); I.end() == false; ++I)
{
if (Pkg.CurrentVer() == I)
return I;
for (VerFileIterator J = I.FileList(); J.end() == false; ++J)
{
if ((J.File()->Flags & Flag::NotSource) != 0)
continue;
/* Stash the highest version of a not-automatic source, we use it
if there is nothing better */
if ((J.File()->Flags & Flag::NotAutomatic) != 0 ||
(J.File()->Flags & Flag::ButAutomaticUpgrades) != 0)
...
Что такое "автоматическая версия" и "автоматический источник" здесь?
Источник для Кв., как дали в Кв. sources.list
например, может иметь a Release
файл, который указывает различные свойства источника. Например, Release
файл Ubuntu назад порты для 16,04:
Origin: Ubuntu
Label: Ubuntu
Suite: xenial-backports
Version: 16.04
Codename: xenial
Date: Wed, 06 Sep 2017 14:06:49 UTC
Architectures: amd64 arm64 armhf i386 powerpc ppc64el s390x
Components: main restricted universe multiverse
Description: Ubuntu Xenial Backports
NotAutomatic: yes
ButAutomaticUpgrades: yes
MD5Sum:
f1647057d0c93fc58961ea0d03f5e524 244120 Contents-powerpc
Отметьте последние несколько полей в замеченном здесь. Это - те же, протестированные в том коде. Автоматический источник - тот в который NotAutomatic
не yes
. Эти поля используются для присвоения приоритета по умолчанию к источникам Кв. От man apt_preferences
:
If the target release has been specified then APT uses the following
algorithm to set the priorities of the versions of a package. Assign:
priority 1
to the versions coming from archives which in their Release files
are marked as "NotAutomatic: yes" but not as "ButAutomaticUpgrades:
yes" like the Debian experimental archive.
priority 100
to the version that is already installed (if any) and to the
versions coming from archives which in their Release files are
marked as "NotAutomatic: yes" and "ButAutomaticUpgrades: yes" like
the Debian backports archive since squeeze-backports.
Можно читать больше о том, как эти приоритеты используются Кв. в странице справочника.
Теперь, в первом комментарии, "не источник" означает версию пакета, которая не является из способного источника (запись в sources.list
, например). Это было бы версией, это уже установлено, таким образом, информация прибывает из /var/lib/dpkg/status
(можно проверить вывод apt-cache policy
чтобы установленный пакет видел это). "Не автоматические версии" из источника, это отмечено NotAutomatic
как описано выше. Такие источники называют "не автоматическими" во втором комментарии.