Eu tenho um pacote personalizado foo
com uma dependência no arquivo de controle em uma versão fixa de outro pacote bar
:
Depends: bar (= 1.2.3)
Os pacotes foo
e bar
são publicados no meu próprio repositório. Além disso, tenho várias versões de bar
no repo, digamos, 1.2.3 e 2.1.0. Agora, ao tentar instalar foo
em uma nova máquina usando
apt-get install foo
falha com
The following packages have unmet dependencies:
foo : Depends: bar (= 1.2.3) but 2.1.0 is to be installed
Ou seja. O apt-get não parece descobrir corretamente as versões apropriadas dos pacotes a serem usados.
Eu tentei adicionar conflitos:
Depends: bar (= 1.2.3)
Conflicts: bar (>> 1.2.3)
mas isso só resultou na mudança do erro para
The following packages have unmet dependencies:
foo : Depends: bar (= 1.2.3) but it is not going to be installed
Se eu especificar a versão da barra durante a instalação, isso funciona:
apt-get install foo bar=1.2.3
Mas isso não é viável (o caso real tem vários níveis de dependências e eu realmente não quero ter que implementar meu próprio resolvedor de dependências para encontrar e especificar tudo manualmente na linha de comando - pode muito bem ignorar apt
nesse caso).
Portanto, a questão é, existe alguma maneira de se comportar adequadamente e instalar automaticamente as versões corretas das dependências (sem ter que especificar explicitamente essas versões na linha de comando)? E devo acrescentar que eu também não quero ter que ir na rota do apt_preferences com o pinning da versão, já que isso requer o gerenciamento de versões em dois lugares separados.
Para fins de integralidade, aqui está a saída completa ao ativar várias saídas de depuração do apt:
apt-get -o Debug::pkgProblemResolver=1 -o Debug::pkgDepCache::AutoInstall=1 -o Debug::pkgDepCache::Marker=1 install foo
Reading package lists... Done
Building dependency tree
Reading state information... Done
foo:amd64 Depends on bar [ amd64 ] < none -> 2.1.0 > ( universe/utils ) (= 1.2.3) can't be satisfied!
Starting pkgProblemResolver with broken count: 1
Starting 2 pkgProblemResolver with broken count: 1
Investigating (0) foo [ amd64 ] < none -> 1.0.0 > ( misc )
Broken foo:amd64 Depends on bar [ amd64 ] < none -> 2.1.0 > ( universe/utils ) (= 1.2.3)
Considering bar:amd64 0 as a solution to foo:amd64 9998
Re-Instated bar:amd64
Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
foo : Depends: bar (= 1.2.3) but 2.1.0 is to be installed
E: Unable to correct problems, you have held broken packages.