Recentemente construí um pacote que fornece vários pacotes virtuais, mais especificamente snmp que fornece libsnmp-base, libsnmp30 e assim por diante:
- Version: 5.8~git20160427.8d07349f-14
- Depends: ...
- Provides:
snmp,libsnmp-base,libsnmp-dev,libsnmp30,python-snmp,snmpd,snmptrapd,tkmib
- Conflicts:
libsnmp-base,libsnmp-dev,libsnmp30,python-snmp,snmpd,snmptrapd,tkmib
- Replaces:
libsnmp-base,libsnmp-dev,libsnmp30,python-snmp,snmpd,snmptrapd,tkmib
Ele está instalado no meu sistema e fornecido no meu PPA online. Quando tento instalar outro pacote (php7.0-snmp) que depende de libsnmp30 e libsnmp-base, o APT me oferece a opção de desinstalar o snmp para instalar as dependências necessárias.
Parece que o APT sempre prefere pacotes reais aos virtuais, apesar dos fatos:
- os virtuais têm uma versão mais recente
- eles já estão instalados
O Aptitude oferece mais soluções, mas nenhuma envolve a preferida e mais lógica: mantenha o snmp porque ele já oferece as dependências necessárias mais recentes:
sudo aptitude install php7.0-snmpThe following NEW packages will be installed:
libsnmp30{a} php7.0-snmp
0 packages upgraded, 2 newly installed, 0 to remove and 1 not upgraded.
Need to get 832 kB of archives. After unpacking 3,382 kB will be used.
The following packages have unmet dependencies:
snmp : Conflicts: libsnmp30 but 5.7.3+dfsg-1ubuntu4 is to be installed.
The following actions will resolve these dependencies:
Remove the following packages:
1) snmp
Install the following packages:
2) libsnmp-base [5.7.3+dfsg-1ubuntu4 (xenial)]
Accept this solution? [Y/n/q/?] n
The following actions will resolve these dependencies:
Keep the following packages at their current version:
1) libsnmp30 [Not Installed]
2) php7.0-snmp [Not Installed]
Accept this solution? [Y/n/q/?] n
The following actions will resolve these dependencies:
Install the following packages:
1) libsnmp-base [5.7.3+dfsg-1ubuntu4 (xenial)]
Downgrade the following packages:
2) snmp [5.8~git20160427.8d07349f-14 (now) -> 5.7.3+dfsg-1ubuntu4 (xenial)]
Accept this solution? [Y/n/q/?] n
*** No more solutions available ***
Como posso instalar o php7.0-snmpsem ter que desinstalar o snmp?
Responder1
Pacotes virtuais não podem ajudá-lo aqui. Deo Manual de Políticas Debian:
Se um campo de relacionamento tiver um número de versão anexado, apenas pacotes reais serão considerados para verificar se o relacionamento foi satisfeito (ou se a proibição foi violada, por conflito ou quebra). Em outras palavras, se um número de versão for especificado, esta é uma solicitação para ignorar todos os Provides para aquele nome de pacote e considerar apenas pacotes reais. O gerenciador de pacotes assumirá que um pacote que fornece esse pacote virtual não é da versão "correta". Um campo Fornece não pode conter números de versão, e o número da versão do pacote concreto que fornece um pacote virtual específico não será considerado ao considerar uma dependência ou conflito com o nome do pacote virtual.
Uma saída é criar pacotes mínimos para cada um dos pacotes fornecidos, que dependem apenas do seu snmp
pacote real (pacotes transitórios). Eles serão de uma versão superior e serão preferidos automaticamente.