O que é “Automatic Source” em depcache.cc no pacote de código fonte do apt?

1

ao navegar pelo código fonte do gerenciador de pacotes apt, eu queria descobrir a lógica interna da função 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)

      ...

O que são " versão automática " e " fonte automática " aqui?

    
por Sajuuk 06.09.2017 / 16:16

1 resposta

1

Uma fonte para apt, como dada no apt's sources.list por exemplo, pode ter um arquivo Release que especifica várias propriedades da fonte. Por exemplo, o arquivo Release das portas traseiras do Ubuntu para 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

Observe os últimos campos vistos aqui. Esses são os mesmos que estão sendo testados nesse código. Uma fonte automática é aquela em que NotAutomatic é não yes . Esses campos são usados para atribuir uma prioridade padrão a fontes pelo apt. De 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.

Você pode ler mais sobre como essas prioridades são usadas pelo apt na manpage.

Agora, no primeiro comentário, "não fonte" significa uma versão do pacote que não é não de uma fonte apt (uma entrada em sources.list , por exemplo). Esta seria uma versão que já está instalada, então as informações vêm de /var/lib/dpkg/status (você pode verificar a saída de apt-cache policy para um pacote instalado para ver isso). "Versões não automáticas" são de uma fonte marcada como NotAutomatic , conforme descrito acima. Essas fontes são chamadas de "não automáticas" no segundo comentário.

    
por muru 06.09.2017 / 17:36