Est-il possible d'annuler une commande apt-get install?

67

J'ai installé Carpadio sur mon installation Xubuntu (un Live USB), qui a ensuite extrait plus de 50 paquets, je suppose, du côté Ubuntu du référentiel. Maintenant, je voudrais annuler cela. Cependant, pour toutes mes activités de chasse, je ne trouve rien de plus utile que Comment inverser la commande sudo apt get install , ce qui suggère simplement apt-get purge. Ce n'est pas utile car tout ce qu'il fait est de supprimer 2 paquets (carpadio et carpadio-gnomepanel).

/var/log/apt/history.loga une liste de tous les packages qui ont été installés avec cette commande. Je me demandais donc s'il existait un moyen facile de les supprimer tous ? Sinon, je peux simplement réinstaller, c’était une nouvelle installation de toute façon, mais je suis curieux.

Un petit échantillon de l'historique (1 / 5-1 / 10 de la liste complète)

Ligne de commande: apt-get install cardapio-gnomepanel
Installation: libdbusmenu-qt2: amd64 (0.9.2-0ubuntu1, automatique), python-packagekit: amd64 (0.7.2-4ubuntu3, automatique), cups-pk-helper: amd64 (0.2.1.2-1ubuntu0.1, automatique) , géoclue: amd64 (0.12.0-1ubuntu12, automatique), unité: amd64 (5.18.0-0ubuntu1, automatique), imprimantes à indicateurs: amd64 (0.1.6-0ubuntu1, automatique), libevolution: amd64 (3.2.3- 0ubuntu6, automatique), libqt4-déclarative: amd64 (4.8.1-0ubuntu4.3, automatique), libmtp9: amd64 (1.1.3-1ubuntu0.1, automatique), tracker-miner-fs: amd64 (0.14.0-2ubuntu1 , automatique), gir1.2-rb-3.0: amd64 (2.96-0ubuntu4.2, automatique), python-aptdaemon.pkcompat: amd64 (0.43 + bzr805-0ubuntu7, automatique), gnome-media: amd64 (3.4.0- 0ubuntu3.1, automatique), metacity: amd64 (2.34.1-1ubuntu11, automatique), nautilus: amd64 (3.4.2-0ubuntu6, automatique), libcompizconfig0: amd64 (0.9.7.0 ~ bzr428-0ubuntu6, automatique), compiz- plugins-default:amd64 (0.9.7.12-0ubuntu1, automatique), libunistring0: amd64 (0.9.3-5, automatique), libebackend-1.2-1: amd64 (3.2.3-0ubuntu7, automatique), ubuntu-docs: amd64 (12.04.6 , automatique), python-mako: amd64 (0.5.0-1, automatique),

À tous ceux qui ont suggéré autoremove: je ne sais pas trop pourquoi, mais je n’ai reçu qu’un autre paquet relatif à Python (python-keybinder ou quelque chose du genre) comme "inutile" et c’est tout ce que le retrait automatique a pu supprimer.

Entre l'installation et la désinstallation, seule la modification majeure a été installée xubuntu-restricted-extras.

Karthik T
la source
4
Dans ce cas, il est un peu tard pour vous aider, mais la prochaine fois que vous souhaitez installer quelque chose, envisagez d'abord de faire une simulation. Run sudo apt-get install -s package-sdénote une simulation et packagesera remplacé par le nom du logiciel approprié.
@ vasa1 Oui, je me bat pour ça. apt-get demande aussi [Y / n], ça aurait dû être ma sortie ..
Karthik T
Je viens de recevoir un seul paquet lié à Python (python-keybinder ou summat) comme étant "inutile" Avez-vous réellement supprimé le cardapio-gnomepanelpaquet?
gertvdijk
@ gertvdijk oui, l'a apt-get remove carpadioemporté aussi.
Karthik T
1
@ KarthikT Ensuite, je suis complètement perdu pour savoir pourquoi autoremovene fonctionne pas pour vous. D'une manière ou d'une autre, vous avez marqué tous les paquets comme installés manuellement maintenant ou il y a un malentendu clair. C'est très simple: il apt-get autoremovesuffit de supprimer tous les paquets marqués installés automatiquement sans raison de les avoir maintenant. Si cela ne fonctionne pas pour vous, je pense que vous avez modifié quelque chose sur votre système dont vous n'avez pas parlé dans votre question.
gertvdijk

Réponses:

79

Fondamentalement, vous devrez apt-get remove(ou apt-get purger) le paquet et l' exécuter apt-get autoremoveaprès cela, pour qu'il retourne l'installation de package-one.

Regardons l'ensemble du processus:

  • sudo apt-get install package-one installe 50 dépendances avec le symbole "automatique", comme le montre l'extrait de journal de votre question

  • sudo apt-get purge package-one (purges) Enlève une, mais font courir ça!

    Toutes les actions d'installation suivantes (si vous en exécutez une) donneront un message d'information avec les packages qui ne sont plus nécessaires:

    The following packages were automatically installed and are no longer required:
      package-two package-three [...]
    Use 'apt-get autoremove' to remove them.
    

    Cette liste est fondamentalement juste une liste de tous les paquets marqués comme "automatiques" sans dépendance inverse sur eux. En d'autres termes, il n'y a aucune raison pour qu'ils soient installés en ce qui concerne la gestion des paquets.

    Remarque: Aucune installation n'est nécessaire! C'est juste pour démontrer qu'APT est intelligent pour vous parler de vos paquets inutiles!

  • sudo apt-get autoremove --purge supprime (purge) ces

Plus d'information

Gertvdijk
la source
2
Dans ce PO a tiré dans Unity et tous ses amis. Je doute que la purge cardapio supprime l’unité, etc. même après son retrait automatique.
@ vasa1 Pourquoi? Les packages sont marqués comme 'automatiquement installés' (comme on peut le voir dans la question) et si aucune raison ne peut être trouvée pour ceux à installer sur le système, il sera suggéré de les supprimer à l'aide de autoremove.
gertvdijk
Oui, je m'interrogeais sur le "automatique". Si cela sert à indiquer le retrait automatique, c'est bien. OP ne devrait avoir aucun problème alors.
@gertvdijk bonne prise par @ vasa1, les pls voient mon édition. autoremoven'a pas aidé.
Karthik T
@gertvdijk, pour "Actions d'installation ultérieures", serait- sudo apt-get updateil suffisant?
19

Lorsque vous souhaitez supprimer un package et ses dépendances installés à ce moment-là, vous devez utiliser:

sudo apt-get purge package
sudo apt-get --purge autoremove

mais pour annuler des aptactions, vous pouvez utiliser un apt-undoscript. C'est un script simple qui peut annuler les aptactions effectuées dans Ubuntu. Il est à noter que ce script ne peut fonctionner que si vous l'utilisez au lieu d' apt-getinstaller / mettre à niveau / supprimer / purger / rétrograder vos packages.

Pour installer apt-undodans Ubuntu, exécutez les commandes suivantes dans le terminal:

sudo add-apt-repository ppa:lkjoel/apt-undo
sudo apt-get update
sudo apt-get install apt-undo

usage:

apt-undo install yourpackages
apt-undo remove yourpackages
apt-undo purge yourpackages
apt-undo upgrade
apt-undo dist-upgrade
apt-undo install yourpackages=old.version
apt-undo install yourpackages=new.version

Pour annuler, les aptitudeactions ci-dessus exécutent les commandes suivantes dans le terminal:

apt-undo undo
Ramin
la source
1
Merci, je suis tombé sur ça, et ça ressemblait exactement à ce que le docteur m'avait prescrit, jusqu'à ce que je voie l'avertissement que je devais utiliser pour l'installer, pour pouvoir l'annuler ..
Karthik T
1
Belle prise. Syntaxe très déroutante, cependant. Et je n'aime vraiment pas utiliser des alternatives aux applications APT de base bien testées. Encore +1!
gertvdijk
7

Utilisez le pouvoir d'Unix. Prenez la ligne de fichier journal que vous avez et construisez une commande qui annulera ce qu’apt a fait. Par exemple:

$ echo 'Install: libdbusmenu-qt2:amd64 (0.9.2-0ubuntu1, automatic), python-packagekit:amd64 (0.7.2-4ubuntu3, automatic), cups-pk-helper:amd64 (0.2.1.2-1ubuntu0.1, automatic),'|perl -pe 's/ \(.*?\)//g; s/,//g; s/^Install: //'
libdbusmenu-qt2:amd64 python-packagekit:amd64 cups-pk-helper:amd64

Vous pouvez donc utiliser cette option pour purger tous les packages que vous avez installés par inadvertance, en indiquant la ligne appropriée de votre fichier journal:

$ dpkg -P $(echo '(full log line here)' | perl -pe 's/ \(.*?\)//g; s/,//g; s/^Install: //')

(J'ai utilisé à la perlplace sedparce sedqu'utilise un type d'expression régulière qui ne supporte pas les correspondances non-gloutonnes, ce qui était le moyen le plus simple de construire ce dont j'avais besoin)

Robie Basak
la source
1
Beau script, mais il ne devrait s'agir que d'une séquence de commandes que les gens peuvent se rappeler pour l'accomplir.
gertvdijk
Merci, script intimidant, mais j'avais peur qu'il se résume à cela
Karthik T
1
J'ai utilisé un code très similaire pour résoudre mon problème très similaire . Je l'ai fait en plusieurs étapes pour être plus sûr de ce qui se passait. J'ai d'abord copié le bloc de texte pertinent du aptjournal dans un nouveau fichier, puis perl -pe 's/\(.*?\)(, )?//g' /path/to/apt-history.log je l'ai appliqué: Ensuite, tout ce que j'ai fait a été d'ajouter la sortie au début sudo apt-get removeet j'ai été prêt à partir!
Insperatus
1

Après avoir supprimé le forfait, et vous pouvez le supprimer complètement en ajoutant --purge, pour, apt-get remove --purge <package>il devrait vous donner un message que les paquets de la bibliothèque se désengageant en ont été installés automatiquement et ne sont plus nécessaires, à quel point vous pouvez exécuter apt-get autoremoveà retirez-les.

Ken Kinder
la source
Merci, mais autoremove s'est avéré insuffisant dans ce cas. S'il vous plaît voir mon édition.
Karthik T
1

Suivre le sudo apt-get purge packagenameavec

sudo apt-get autoremove. 

À moins qu'il s'agisse d'un méta-paquet, cela devrait en prendre soin.

Voir également la FAQ sur Comment puis-je supprimer manuellement tous les fichiers Cardapio? .

chaskes
la source
Merci, mais autoremove s'est avéré insuffisant dans ce cas. S'il vous plaît voir mon édition. Merci pour le lien FAQ, très utile!
Karthik T
1
Certains de ces paquets peuvent être nécessaires à d'autres choses et ne pas être marqués comme pouvant être supprimés automatiquement. Avez-vous regardé les instructions sur le lien? Comment sont-ils?
Chaskes
Les instructions sur le lien sont plutôt orthogonales au problème principal et, dans l'état actuel des choses, je suis enclin à réinstaller mon système. Merci quand même.
Karthik T
1
  1. Collez la longue liste de paquets indésirables du journal apt dans un new_file.txt
  2. Exécuter perl -pe 's/\(.*?\)(, )?//g' /path/to/new_file.txt
  3. Copiez le résultat de la dernière commande dans le Presse-papiers ou dirigez-le là-bas en premier lieu .
  4. Execute sudo apt-get remove[coller le contenu du presse-papier ici]

Terminé.

Fondamentalement, nous devons formater la liste des paquets du journal apt en quelque chose que apt-get peut comprendre. Les parenthèses, les mots entre les deux et les virgules doivent être utilisés pour que le perl entre en jeu. Oui, il existe de meilleures méthodes (plus efficaces) - mais j’ai fait cela, c’est facile à comprendre et ça marche.

Insperatus
la source
+1 pour l'expérience personnelle et l'explication, mais comme je l'ai mentionné plus tôt, j'ai déjà réinitialisé mon Live USB
Karthik T
1

Techniquement, les opérations "supprimer" ou "supprimer automatiquement" ne sont pas "annulées" bien qu'elles puissent être faites pour que le travail soit assez bon la plupart du temps.

Par défaut, apt-get laissera les paquets, sauf si vous spécifiez -o APT::Suggests-Important=0 -o APT::Recommends-Important=0

Il est plus fiable de regarder apt history.loget de désinstaller tous les paquets installés. J'ai créé un petit script basé sur les nœuds pour faciliter le processus:

https://github.com/rolfen/apt-history

En outre, voici une autre approche plus manuelle pour "annuler" les modifications:

https://unix.stackexchange.com/a/236711

Rolf
la source
1

Pour annuler la dernière installation d'apt, vous pouvez également utiliser quelque chose comme ceci:

sudo apt purge $(grep "Install:" /var/log/apt/history.log | tail -n 1 | tr " " "\n" | grep ":amd64\|:i386" | tr "\n" " ")

Cela récupérera la dernière installation apt de l’historique et purgera tous les paquets installés ici.

Vous pouvez créer une fonction appelée aptpurgelastinstall pour l'avoir toujours à portée de main (ajoutera le code à ~ / .bashrc):

echo 'aptpurgelastinstall () { sudo apt purge $(grep "Install:" /var/log/apt/history.log | tail -n 1 | tr " " "\n" | grep ":amd64\|:i386" | tr "\n" " ") ; }' >> .bashrc

Maintenant, il vous suffit de taper aptpurgelastinstall dans le shell pour rétablir la dernière installation.

utilisateur981297
la source
Réaction au commentaire de modification suggéré : «Amélioré mon propre message (avant que je ne sois enregistré)». Vous pouvez demander la fusion de vos comptes, voir askubuntu.com/help/merging-accounts .
Melebius
0

Si vous venez d'ajouter un ppa et que vous souhaitez revenir en arrière, vous devez suivre les étapes décrites ci-dessous. Comprenez que cela peut échouer lorsque vous avez installé d'autres packages que vous ne souhaitez pas désinstaller. Je suis sûr que cela peut être fait avec un script. Personnellement, je pense que cela devrait faire partie d’apt, et il devrait y avoir une meilleure administration des paquets installés en raison des dépendances et installés à la demande de l’utilisateur.

1) retirez le ppa de /etc/apt/sources.list Rappelez-vous le moment où vous avez ajouté le ppa. Si vous avez de la chance, vous n'avez pas besoin d'être précis.

2) Faites une liste des choses à réinstaller, à partir du moment où vous avez installé le PPA: cat /var/log/dpkg.log | grep 'upgrade'

3) Faites une liste des choses à supprimer, à partir du moment où vous avez installé le PPA: cat /var/log/dpkg.log | grep 'install'

4) supprimer tous les paquets de l'étape 3: sudo apt-get remove {liste des paquets de l'étape 3}

5) réinstallez tous les paquets de l'étape 2: sudo apt-get install --reinstall {liste des paquets de l'étape 2}

6) Si quelque chose ne va pas et que vous ne trouvez pas de solution, replacez le PPA et réinstallez tous les paquets des deux listes.

VincentSC
la source
0

Je sais que la question est assez ancienne, mais je suis venu ici pour chercher de l'aide et je peux peut-être aider quelqu'un. J'ai eu une situation similaire à celle de @ Karthik-T après l'installation unity8-desktop-session-mir. Je sais que c'est un gros. Il a tiré 233 paquets avec lui.

En utilisant autoremoveje suis enlevé seulement 34 d'entre eux. Le fait est que lors de l' unity8-desktop-session-mirinstallation, deux packages ( python3-aptdaemon.pkcompatet evolution-data-server-online-accounts) ont été supprimés . C'est indiqué dans /var/log/apt/history.log, après la Installsection.

Pour annuler complètement l’installation de Unity 8, j’ai publié les informations suivantes:

  1. sudo apt-get purge unity8-desktop-session-mir
  2. sudo apt-get --purge autoremove
  3. sudo apt-get install python3-aptdaemon.pkcompat evolution-data-server-online-accounts (il a supprimé 8 paquets liés à Unity 8)
  4. sudo apt-get --purge autoremove

Cela ne supprimera pas absolument tout ce que vous avez installé auparavant, mais dans certains cas, cela suffit.

PS: peut-être que la autoremovedeuxième étape n'est pas nécessaire, comme je l'ai publié à la quatrième étape.


la source