Você pode criar um pacote .deb fictício usando o utilitário equivs
, ele fornecerá a dependência sem instalar nenhum arquivo. Em seguida, basta substituir o pacote atualmente instalado para a versão fictícia usando dpkg -i fake.deb
.
Eu gostaria de instalar a versão mais recente do boto , que eu faço via python setup.py install
No entanto, quando tento remover a versão antiga, os seguintes pacotes também são removidos:
apt-get remove python-boto
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
cloud-init cloud-utils euca2ools python-boto
Como posso dizer ao gerenciador de pacotes para remover o boto, e eles o marcam como instalado externamente (ou algo assim) para que o apt não tente consertar a dependência ausente?
Obrigado,
Maxim.
Você pode criar um pacote .deb fictício usando o utilitário equivs
, ele fornecerá a dependência sem instalar nenhum arquivo. Em seguida, basta substituir o pacote atualmente instalado para a versão fictícia usando dpkg -i fake.deb
.
Use o dpkg diretamente, não o apt-get ou o aptitude:
sudo dpkg -r --force-depends "package"
Eu sei que este é um post antigo, mas desde que recentemente tive um problema semelhante, gostaria de compartilhar minha solução na esperança de que alguém no futuro ache útil.
Se você instalou um pacote via aptitude, ele automaticamente atribuirá sinalizadores às dependências (auto) e quando você tentar remover o pacote novamente, ele tentará remover todas as dependências que ainda possuírem o sinalizador automático.
Como você pode ver no meu caso, é o zabbix que eu quero remover:
uman@mango:~$ sudo aptitude purge zabbix-server-mysql zabbix-frontend-php
The following packages will be REMOVED:
apache2{u} dbconfig-common{u} fping{u} javascript-common{u} libhtml-template-perl{u} libiksemel3{u} libjs-prototype{u}
libjs-scriptaculous{u} libopenipmi0{u} libt1-5{u} mysql-server{u} mysql-server-5.1{u} mysql-server-core-5.1{u} php5{u} php5-gd{u}
php5-mysql{u} snmpd{u} wwwconfig-common{u} zabbix-frontend-php{p} zabbix-server-mysql{p}
0 packages upgraded, 0 newly installed, 20 to remove and 0 not upgraded.
Need to get 0 B of archives. After unpacking 44.9 MB will be freed.
Do you want to continue? [Y/n/?]
E se procurarmos o pacote apache, parece que
uman@mango:~$ aptitude search ^apache2
i A apache2 - Apache HTTP Server metapackage
<snip>
o primeiro sinalizador "i" nos informa que o apache está instalado
O próximo sinalizador "A" significa automaticamente instalado
Então, para corrigir isso e não ter o apache, o mysql e o php desinstalados, podemos apenas remover o flag auto com o aptitude da seguinte forma:
uman@mango:~$ sudo aptitude unmarkauto apache2 mysql-server php5
No packages will be installed, upgraded, or removed.
0 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B of archives. After unpacking 0 B will be used.
Agora, é assim quando removemos o pacote do zabbix:
uman@mango:~$ sudo aptitude purge zabbix-server-mysql zabbix-frontend-php
The following packages will be REMOVED:
dbconfig-common{u} fping{u} javascript-common{u} libiksemel3{u} libjs-prototype{u} libjs-scriptaculous{u} libopenipmi0{u} libt1-5{u}
php5-gd{u} wwwconfig-common{u} zabbix-frontend-php{p} zabbix-server-mysql{p}
0 packages upgraded, 0 newly installed, 12 to remove and 0 not upgraded.
Need to get 0 B of archives. After unpacking 16.6 MB will be freed.
Do you want to continue? [Y/n/?]
Por favor, confira a página man do aptitude para mais detalhes
É exatamente para isso que o apt-mark hold
é válido.
apt-mark hold package_name
Da documentação:
hold is used to mark a package as held back, which will prevent the package from being automatically installed, upgraded or removed. The command is only a wrapper around dpkg --set-selections and the state is therefore
Para desativar um pacote:
apt-mark unhold package_name
Para completar a resposta de João Pinto, você pode usar meu pequeno script para consertar o pacote quebrado, este script irá criar um pacote fictício com o equivs e instalá-lo. Você pode encontrar um artigo sobre meu blog em francês .
Ou diretamente no código principal .
Para usá-lo:
$ ./gen-dummy-package.sh --install|i [packageName]+
# e.g. :
$ ./gen-dummy-package.sh -i rfkill nome-bluetooth bluez
Tags apt dependencies python deb 10.10