Comment supprimer un deb sans supprimer ses dépendances

33

Je voudrais installer la version la plus récente de boto , ce que je fais via python setup.py install

Pourtant, lorsque j'essaie de supprimer l'ancienne version, les paquets suivants sont également supprimés:

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

Comment puis-je demander au gestionnaire de paquets de supprimer boto et de les marquer comme étant installés en externe (ou quelque chose du genre) pour que apt ne tente pas de corriger la dépendance manquante?

Merci,
Maxim.

    
posée Maxim Veksler 16.12.2010 - 14:38
la source

6 réponses

15

Vous pouvez créer un package .deb factice à l'aide de l'utilitaire equivs , il fournira la dépendance sans installer de fichiers. Ensuite, remplacez simplement le package actuellement installé par la version factice à l'aide de dpkg -i fake.deb .

    
réponse donnée João Pinto 16.12.2010 - 16:06
la source
44

Utilisez directement dpkg, pas apt-get ou aptitude:

sudo dpkg -r --force-depends "package"
    
réponse donnée user13364 31.03.2011 - 20:17
la source
13

Je sais que c'est un ancien message, mais comme j'ai récemment eu un problème similaire, j'aimerais partager ma solution dans l'espoir que quelqu'un le trouve utile.

Si vous avez installé un paquet via aptitude, il attribue automatiquement des drapeaux aux dépendances (auto) et lorsque vous essayez de supprimer à nouveau votre paquet, il tente de supprimer toutes ses dépendances pour lesquelles le drapeau automatique est toujours défini.

Comme vous pouvez le voir dans mon cas, c'est zabbix que je veux supprimer:

[email protected]:~$ 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/?]

Et si on regarde le paquet apache, ça ressemble à ça

[email protected]:~$ aptitude search ^apache2
i A apache2        - Apache HTTP Server metapackage
<snip>

le premier drapeau "i" nous indique que Apache est installé
Le drapeau suivant "A" signifie automatiquement installé

Donc, pour corriger cela et ne pas avoir désinstallé apache, mysql et php, nous pouvons simplement supprimer l’indicateur automatique avec aptitude comme ceci:

[email protected]:~$ 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.

Maintenant, cela ressemble à ceci lors de la suppression du paquet zabbix:

[email protected]:~$ 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/?] 

S'il vous plaît vérifier la page de manuel pour aptitude pour plus de détails

    
réponse donnée David Berkan 07.01.2013 - 16:26
la source
9

C'est exactement ce que apt-mark hold est pour.

apt-mark hold package_name

Dans la documentation:

  

hold est utilisé pour marquer un package comme étant retenu, ce qui empêchera l'installation, la mise à niveau ou la suppression automatique du package. La commande est seulement un wrapper autour de dpkg --set-selections et l'état est donc

Pour libérer un paquet:

apt-mark unhold package_name

    
réponse donnée Marcio 09.11.2015 - 17:07
la source
3

AFAIK il est impossible de supprimer un package en utilisant APT sans supprimer également les packages qui en dépendent.

Référence: lien

    
réponse donnée aneeshep 16.12.2010 - 15:14
la source
0

Pour compléter la réponse de João Pinto, vous pouvez utiliser mon petit script pour réparer le paquet cassé, ce script créera un paquet factice avec des équivs et l’installera. Vous pouvez trouver un article sur mon blog en français .

Ou directement sur le code gist .

Pour l'utiliser:

$ ./gen-dummy-package.sh --install|i [packageName]+
# e.g. :
$ ./gen-dummy-package.sh -i rfkill nome-bluetooth bluez
    
réponse donnée heralight 03.11.2015 - 19:47
la source

Lire d'autres questions sur les étiquettes