Comment supprimer les packages obsolètes après une mise à niveau de version échouée via do-release-upgrade sur Ubuntu?

14

Parfois, lorsque je mets à niveau un système via do-release-upgrade, le processus de mise à jour échoue et le script me dit de terminer le processus manuellement via dpkg --configure -a. Ce n'est pas un problème grave - après avoir résolu manuellement le problème des dépendances et le processus de mise à niveau de finition, tout fonctionne bien.

Mais le do-release-upgradescript a un processus de nettoyage après avoir terminé la mise à niveau:

Remove obsolete packages?  
XXX packages are going to be removed.  
Continue [yN]  Details [d]y

qui supprime certains packages obsolètes de l'ancienne version du système.

Il semble que ce processus ne s'exécute pas lorsque la mise à niveau automatique échoue et que je termine la mise à niveau manuellement, donc les packages obsolètes de l'ancienne version restent installés dans le système.

Comment puis-je exécuter manuellement le processus "Supprimer les packages obsolètes" après avoir terminé manuellement la mise à niveau?

Murz
la source

Réponses:

16

Testez ceci:

Ouvrez un terminal,

Appuyez sur Ctrl+ Alt+T

Exécuter:

sudo -i

apt-get update

apt-get autoremove

apt-get clean

UNUSCONF=$(dpkg -l|grep "^rc"|awk '{print $2}')

apt-get remove --purge $UNUSCONF

NEWKERNEL=$(uname -r|sed 's/-*[a-z]//g'|sed 's/-386//g')

ADDKERNEL="linux-(image|headers|ubuntu-modules|restricted-modules)"

METAKERNEL="linux-(image|headers|restricted-modules)-(generic|i386|server|common|rt|xen)"

UNUSKERNELS=$(dpkg -l|awk '{print $2}'|grep -E $ADDKERNEL |grep -vE $METAKERNEL|grep -v $NEWKERNEL)

apt-get remove --purge $UNUSKERNELS

update-grub
kyodake
la source
1
Merci, ces commandes sont exactement ce que je veux, la principale d'entre elles est d'afficher les dpkg -l|grep "^rc"|awk '{print $2}'packages à supprimer. Il est étrange qu'apt-get ou aptitude ne veuille pas le voir pour le supprimer.
Murz
2
Une ligne de commande pour cli supprimer les paquets obsolètes après l' échec do-release-mise à niveau en fonction de votre exemple: sudo dpkg -l|grep "^rc"|awk '{print $2}' | xargs sudo apt-get remove -y --purge. Attention, cette commande supprime les packages sans confirmation, mais est utile pour automatiser rapidement les systèmes de nettoyage.
Murz
Sur mon système, les '^rc'packages marqués n'étaient même pas installés, mais la mise à niveau a échoué juste avant de rechercher des packages obsolètes. Cette réponse semble donc incomplète. Cela ne supprimera pas tous les packages qui devraient l'être en do-release-upgradecas de succès.
Ruslan
2

Je crois que le "Supprimer les paquets obsolètes" exécute simplement un sudo apt-get autoremove. Essayez-le, voyez si cela aide.

Dan Johansen
la source
2
sudo apt-get autoremoveest de supprimer seulement une petite partie des packages, qui supprime do-release-upgrade, par exemple do-release-upgradesur le même système, supprime environ 150 packages, mais apt-get autoremove- supprime seulement environ 5-10 packages.
Murz
1

Je trouve que cette réponse à une question non liée pourrait fournir un utilitaire et une commande qui semblent supprimer plus de choses inutilisées:

  1. Installez le package "deborphan".
  2. sudo deborphan | xargs sudo apt-get -y remove --purge
DustWolf
la source