Comment supprimer / installer un paquet qui n'est pas complètement installé?

65

Je suis allé installer bsnes l'autre jour et pour une raison quelconque, l'installation a échoué. À présent, je ne peux pas mettre à jour, installer de nouveaux paquets, ni faire de commandes apt-get car ils essaient tous de traiter ce paquet cassé et échouent. Tenter d'installer un nouveau paquet le condamne également au même sort. L'erreur que je reçois est:

Setting up google-chrome-stable (33.0.1750.152-1) ...
/var/lib/dpkg/info/google-chrome-stable.postinst: 124: /var/lib/dpkg/info/google-chrome-stable.postinst: update-alternatives: not found
dpkg: error processing google-chrome-stable (--configure):
 subprocess installed post-installation script returned error exit status 127
Setting up bsnes (0.088-7) ...
/var/lib/dpkg/info/bsnes.postinst: 5: /var/lib/dpkg/info/bsnes.postinst: update-alternatives: not found
dpkg: error processing bsnes (--configure):
 subprocess installed post-installation script returned error exit status 127
Errors were encountered while processing:
 google-chrome-stable
 bsnes
E: Sub-process /usr/bin/dpkg returned an error code (1)

J'ai cherché sur Google et ici sur Ask Ubuntu mais je n'ai pas trouvé de solution efficace. Le correctif généralement suggéré consiste à exécuter les éléments suivants:

sudo apt-get clean && sudo apt-get autoremove
sudo apt-get -f install
sudo dpkg --configure -a

Cela ne fonctionne cependant pas. Les commandes apt-get échouent toutes avec la même erreur que ci-dessus et la commande dpkg n'aide pas. L'autre chose qu'ils suggèrent souvent de le purger via Synaptic ou la ligne de commande, qui échoue également.

Merci pour l'aide

Bijak
la source

Réponses:

62

Pour les utilisateurs avancés, utilisez-le à vos risques et périls.

Selon le message d'erreur suivant:

subprocess installed post-installation script returned error exit status 127

Vous voudrez peut-être tout éditer /var/lib/dpkg/info/[package_name].postinstet commenter (ou mieux encore, essayez de le comprendre et d'identifier le problème), puis réessayez apt-get.

Notez que bien que dans cette question particulière le message concerne "post-installation", il aurait pu mentionner par exemple "pré-suppression" ou "post-suppression" (dans ce cas, l'extension du fichier à modifier aurait été .prermou .postrm) .

Skippy le Grand Gourou
la source
2
En fait c'est la meilleure méthode. Réinstaller dpkgne aide pas toujours.
Danatela
2
Merci beaucoup. Je devais réparer /var/lib/dpkg/info/[package_name].prermmais votre message m'a donné la bonne direction. Certainement pour les utilisateurs avancés cependant, c'est risqué !
surf le
1
La meilleure réponse. Merci! La correction .prermet les .postrmfichiers résolvent le problème.
Fusion
Enfin quelque chose qui fonctionne. La suppression du fichier .prerm pour ce package est également une option. Cela fonctionne aussi pour les .prermfichiers, etc. enfin, presque équivalent à rpm -e --noscripts:)
rogerdpack
42

En dehors de ceux que vous avez déjà publiés, il y a peu d'autres commandes qui peuvent être utiles.

  • Autoclean efface le référentiel local des fichiers de package récupérés.

    sudo apt-get autoclean
    
  • Forcer l'installation / la suppression de paquets. ☠Utilisez avec prudence

    sudo apt-get --force-yes install <pkgname>
    

    et

    sudo apt-get --force-yes remove <pkgname>
    

Comme toujours, vous pouvez également utiliser dpkgpour installer, supprimer et purger des packages.

  • Installer

    sudo dpkg -i <pkgname>
    
  • Retirer

    sudo dpkg -r <pkgname>
    
  • Purge

    sudo dpkg -P <pkgname>
    
Utilisateur enregistré
la source
Dpkg et les commandes apt-get --force-yes renvoient la même erreur que précédemment. Autoclean ne renvoie pas d'erreur mais semble également ne rien faire avec les deux paquets cassés.
Bijak
@Bijak Vous devez sûrement avoir essayé de purger bsnes. Vous avez-vous?
Utilisateur enregistré
Oui, avec dpkg -P, apt-get purge, et avec Synaptic
Bijak
Afficher la sortie dedpkg -l |grep bsnes
Utilisateur enregistré
rF bsnes 0.088-7 amd64 Emulateur précis SNES / SuperFamicom
Bijak
27

Ainsi, après plus de recherches sur Google et une lecture très attentive des messages d'erreur, il semble que dpkgcela devait être réinstallé.

sudo apt-get install --reinstall dpkg

Ce qui a fait savoir que c'était le problème (si quelqu'un cherche et voit cela), c'est que update-alternatives: not foundc'était dans le message d'erreur. Dès que dpkg a été réinstallé, les autres packages ont été installés normalement automatiquement.

Bijak
la source
3
Pourquoi la seule réponse correcte (et acceptée) si loin dans la liste avec moins de des voix de la réponse la plus élevée? +1
David Foerster Le
pour un: parce que cela ne fonctionne pas pour les paquets ne pouvant plus être téléchargés "La réinstallation de linux-image-extra-4.4.0-65-generic n'est pas possible, il ne peut pas être téléchargé."
Joe
3
C’est probablement la solution la moins probable pour quiconque se présente ici en fonction du titre de la question. Mais il y a beaucoup de raisons pour lesquelles on peut se retrouver avec ce problème, donc il y aura beaucoup de solutions proposées "ça marche pour moi".
michael
Cela ne fonctionne pas réellement.
NelsonGon
16

Vous pouvez supprimer le fichier de package dans ce /var/lib/dpkg/info/chemin et mettre à jour la source.

sudo rm /var/lib/dpkg/info/[package_name].*
sudo dpkg --configure -a
sudo apt-get update

Ensuite, réinstallez votre paquet sudo apt-get install [package_name]

Doc

Hamed
la source
4
En fait, vous feriez mieux de l'utiliser sudo rm /var/lib/dpkg/info/[pakege_name].*. Sinon, vous supprimerez également les packages qui commencent par le même nom. Quoi qu'il en soit, merci pour cela, c'était la seule solution qui a fonctionné pour moi
smac89
13

Si tout échoue. Ce que j'ai fait, c'est d'abord que j'ai changé le répertoire en:

cd /var/lib/dpkg/info

puis j'ai tout enlevé avec .postinst:

sudo rm *.postinst

puis mettre à jour le référentiel

sudo apt-get update

puis tout est revenu à la normale quand j'ai fait:

sudo apt-get --force-yes install openjdk-7-jre-headless
Mike B
la source
7
Cela supprime tous les scripts de post-installation, pas seulement ceux du paquet affecté. Un peu trop zélé à mon avis. -1
David Foerster
S'il est facile d'identifier et de supprimer uniquement le script de post-installation à l'origine du problème, cela peut constituer un moyen très pratique de supprimer un package défaillant.
Ian Mackinnon
après un cauchemar avec des problèmes kernaux renommer le .postinst du noyau affecté a résolu le problème
Andy
5

Si tout échoue, vous pouvez supprimer manuellement le package dpkg. Courir sudo dpkg -P bsnesdevrait purger bsnes.

saiarcot895
la source
2
dpkg: error processing package libcuda1-340 (--purge): package is in a very bad inconsistent state; you should reinstall it before attempting a removal
endolith
2

Dans mon cas a apt-get install -ffonctionné. J'installais mysql-workbench-community

Déjà essayé apt autoclean

J'ai vu cette erreur dpkg en raison de certaines dépendances manquantes qui pourraient être corrigées en installant en mode forcé (installation de dépendances)

Vikas Avnish
la source
0
sudo apt-get install -f --reinstall coreutils init-system-helpers

Après avoir exécuté ci-dessus, vous pouvez installer / mettre à jour / supprimer / purger comme d'habitude pour tous les paquets.

Uddhav Gautam
la source