DEB: campo “Fornece:” ignorado

3

Eu preciso substituir um pacote por um personalizado, que recebe seu próprio nome (foo-origpackage). Para permitir que ele seja usado como substituição substituta, adicionei a linha Provides: origpackage ao arquivo de controle. apt-cache show foo-origpackage lista a entrada "Fornece" bem. No entanto, quando eu quero instalar um arquivo dependendo do origpackage, ele falha ("Package origpackage not installed").

Existe alguma distinção entre pacotes "reais" e virtuais que estão faltando?

EDITAR:

Para ser preciso, o que eu quero substituir é xen-utils-common para o Squeeze. Meu tao-xen-utils-common possui o seguinte arquivo control :

Source: tao-xen-utils-common
Section: kernel
Priority: optional
Maintainer: Creshal <[email protected]>
Build-Depends: debhelper
Standards-Version: 3.8.0
Homepage: http://tao.at

Package: tao-xen-utils-common
Architecture: all
Depends: gawk, lsb-base, udev, xenstore-utils, tao-firewall
Provides: xen-utils-common
Conflicts: xen-utils-common
Replaces: xen-utils-common
Description: Xen administrative tools - common files (modified)
 The userspace tools to manage a system virtualized through the Xen virtual
 machine monitor.
 Modified for use with TAO Firewall.

A instalação do xen-utils-4.0 falha, no entanto:

foo@bar# apt-cache showpkg tao-xen-utils-common
Package: tao-xen-utils-common
Versions: 
4.0.0-1tao1 (/var/lib/apt/lists/repo.tao.at_dists_stable_main_binary-amd64_Packages) (/var/lib/dpkg/status)
 Description Language: 
                 File: /var/lib/apt/lists/repo.tao.at_dists_stable_main_binary-amd64_Packages
                  MD5: 7c2503f563fca13b33b4eb3cbcb3c129


Reverse Depends: 
  tao-firewall,tao-xen-utils-common
  tao-firewall,tao-xen-utils-common
Dependencies: 
4.0.0-1tao1 - gawk (0 (null)) lsb-base (0 (null)) udev (0 (null)) xenstore-utils (0 (null)) tao-firewall (0 (null)) xen-utils-common (0 (null)) xen-utils-common (0 (null)) 
Provides: 
4.0.0-1tao1 - xen-utils-common 
Reverse Provides: 


foo@bar# apt-get install xen-utils-4.0
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  xen-utils-common
Suggested packages:
  xen-docs-4.0
The following packages will be REMOVED:
  tao-xen-utils-common
The following NEW packages will be installed:
  xen-utils-4.0 xen-utils-common

Editar:

foo@bar# apt-cache policy xen-utils-4.0
xen-utils-4.0:
  Installed: (none)
  Candidate: 4.0.1-4
  Version table:
     4.0.1-4 0
        500 http://ftp.at.debian.org/debian/ stable/main amd64 Packages
     4.0.1-4 0
        500 http://security.debian.org/ stable/updates/main amd64 Packages
    
por Creshal 21.02.2012 / 15:50

4 respostas

6

Eu passei bastante tempo investigando esse mesmo problema e cheguei à conclusão de que o "Fornece" é ignorado porque o xen-utils-4.0 tem um "Depends" com versão no xen-utils-common.

Citando o Manual de Normas Debian :

A Provides field may not contain version numbers, and the version number of the concrete package which provides a particular virtual package will not be considered when considering a dependency on or conflict with the virtual package name.

Se os Dependentes não fossem versionados, as provisões seriam satisfeitas, no entanto, um Provides, que é sempre sem versão, nunca pode satisfazer um Depends com versão.

Infelizmente, eu não tenho uma solução além do que você já propôs: manter o mesmo nome de pacote e ter um número de versão maior.

    
por 17.09.2012 / 22:46
1

A seção do Manual de Políticas Debian citada na resposta @cavedon ainda está inalterada, mas desatualizada. Já que o dpkg 1.17.11 está configurando uma versão em um pacote fornecido é possível. A partir do changelog :

  • Add versioned Provides support:
    • Add a new dpkg --assert-versioned-provides command.
    • Packages can provide a specific version, “virtual (= 1.0)” which will be honored, previously it would just be accepted when parsing.
    • Non-versioned virtual packages will not satisfy versioned dependencies.
    • Versioned virtual packages will satisfy non-versioned dependencies. Based on skeletal code by Ben Collins . Closes: #7330, #24934, #112131, #134582, #180316

Então, para resolver o exemplo original, no arquivo de controle, você adiciona uma linha

Version: *version*

(substituindo * versão * pela versão atual) e substitua a linha

Provides: xen-utils-common

com

Provides: xen-utils-common (= ${binary:Version})

    
por 18.08.2017 / 16:36
0

Eventualmente, atenuou o problema renomeando-o de volta para o xen-utils-common com uma versão personalizada e tornando o pacote que exige o conflito de personalização de versões superiores. Assim, as atualizações do xen-utils-common estão bloqueadas até que eu atualize ambos os pacotes.

Meio que funciona, mas estou aberto para soluções melhores.

    
por 22.02.2012 / 09:51
0

"Fornece" é apenas para pacotes virtuais. Se você quiser substituir um pacote real, você precisará usar "Substitui" e provavelmente também "Conflitos" se o pacote fornecer os mesmos arquivos.

Consulte Política Debian, capítulo 7 .

    
por 22.02.2012 / 10:52