Comment supprimer tous les packages d'un certain référentiel?

30

Pour une mise à niveau fluide de 10.04 à 10.10, je voudrais supprimer tous les packages qui ne se trouvent pas dans les référentiels par défaut (par exemple chrome PPA et référentiels tiers). Quelle est la méthode la plus simple (de préférence CLI) pour rechercher et supprimer ces packages?

Edit: cette question n'est pas limitée aux PPA, j'ai également un référentiel x2go, donc je cherche une commande générique pour supprimer les paquets appartenant à un certain référentiel. Pour les AAE, la question Comment supprimer les AAE contient d'excellentes réponses.

Lekensteyn
la source
Pour ceux qui souhaitent supprimer tous les packages externes, désactivez tous les PPA et utilisez code.google.com/p/apt-downgrade
Lekensteyn

Réponses:

12

Ce script peut lister tous les packages d'un serveur / branche particulier (en modifiant les deux variables déclarées):

#!/bin/bash

server="http://it.archive.ubuntu.com/ubuntu/"
branch="maverick-updates/main"

apt-cache policy $(dpkg -l | awk 'NR >= 6 { print $2 }') |
  awk -v server="$server" -v branch="$branch" \
    '/^[^ ]/      { split($1, a, ":"); pkg = a[1] }
    nextline == 1 { nextline = 0; if ($2 == server && $3 == branch) print pkg }
    /\*\*\*/      { nextline = 1 }'

si vous devez répertorier tous les packages ne provenant pas d'un serveur particulier, indépendamment de la branche, remplacez l'avant-dernière ligne par:

nextline == 1 { nextline = 0; if ($2 != server) print pkg }
enzotib
la source
1
Ce n'est pas exactement ce que je recherche, ce script affiche simplement tous les packages d'une entrée de référentiel spécifique. En remplaçant $2 == server && $3 == branchpar $2 != server, on répond à ma question. Veuillez l' branch=indiquer dans votre réponse :) (la ligne peut être supprimée) Remarque: il est supposé que tous les packages proviennent d'un seul serveur de référentiel.
Lekensteyn
1
Ce script (légèrement modifié par mon dernier commentaire) fonctionne comme prévu. Le libvpx0package existait aussi bien dans le référentiel principal que dans le PPA au chrome quotidien. Après avoir enlevé les dépôts de /etc/apt/sources.list.d, j'avais encore un paquet sur la gauche: libvpx0. I « réparé » cela suit que: retirer la bibliothèque dpkg, en ignorant les dépendances: sudo dpkg --ignore-depends=libvpx0 --remove libvpx0. Ensuite, installez - le à nouveau de la pension principale: sudo apt-get install libvpx0.
Lekensteyn
1
@Lekensteyn: vous auriez probablement pu raccourcir votre travail avec sudo apt-get install libvpx0=$version_string, en supposant que les deux packages disponibles ont des chaînes de version différentes.
enzotib
en fait, c'était aussi possible et peut-être mieux aussi.
Lekensteyn
Je devais juste vérifier quels paquets n'étaient pas installés à partir des dépôts par défaut. La commande apt-cache policy $(dpkg -l | awk '/^ii/{print $2}') > policy.txt; awk '!/^ /{pkg=$1}check{print pkg, $2;check=0}/\*\*\*/{check=1} ' policy.txt | grep -v archive.ubuntuest un bon début (ajoutez-en plus grep -vpour exclure certains PPA). Les versions de package qui ne sont connues dans aucun référentiel s'affichent sous la forme /var/lib/dpkg/status.
Lekensteyn
22

Découvrez ppa-purgeInstaller ppa-purge .

Usage:

ppa-purge -purge <nameofppa> [-s hostserver]

Le serveur hôte par défaut est ppa.launchpad.net.

Voici le lien vers la page de manuel de la ppa-purgecommandeIcône de page de manuel pour référence.

Vadim Rutkovsky
la source
Ou vous pouvez utiliser ma branche de ppa-purge qui a de nombreuses corrections de bugs et améliorations par rapport au ppa-purge dans le référentiel de l'univers. Voir ici pour plus d'informations.
jarno
18

Surmonter aptitudele bogue Multiarch pourppa-purge

Normalement, comme l' ont expliqué Vadim Rutkovsky et Takkat , l'exécution avec la syntaxe par défaut est un moyen efficace de supprimer tous les packages fournis par un PPA, en les rétrogradant correctement vers des versions fournies dans d'autres sources de logiciels configurées chaque fois que possible.ppa-purge

Cependant, comme Takkat l'a souligné, le bogue 831768 empêche ppa-purgede fonctionner correctement pour supprimer les packages multiarchives (comme les packages 32 bits installés sur les systèmes 64 bits). En effet, aptitudene peut pas gérer les dépendances conflictuelles dans les packages multiarchitecture (c'est le sujet du bogue), et le comportement par défaut de ppa-purgeest d'utiliser aptitudepour rétrograder les packages.

Heureusement, ppa-purgeaccepte le -idrapeau qui lui fait préférer apt-getà aptitudecomme backend. Comme indiqué dans le rapport de bogue, l'utilisation apt-getest une alternative efficace à l'invocation manuelle aptitude, donc l'exécution ppa-purgeavec l' -iindicateur devrait être une solution efficace pour supprimer / rétrograder tous les packages fournis par un PPA, y compris les packages multiarchives .

Comment faire

Voici la syntaxe:

sudo ppa-purge -i ppa:ppaowner/ppaname

Comme d'habitude (comme lorsque le -idrapeau n'est pas utilisé):

  • ppaowner est remplacé par le propriétaire du PPA.
  • /ppanameest facultatif. S'il est présent, il ppanameest remplacé par le nom de l'APP. Sinon, il est par défaut ppa.

Par exemple , supposons que le PPA pour les versions instables de qBittorrent soit installé et que je souhaite le supprimer complètement, déclassant automatiquement qBittorrent vers la version disponible via mes autres sources logicielles utilisant en apt-getarrière-plan au lieu deaptitude . Ensuite, je courrais:

sudo ppa-purge -i ppa:hydr0g3n/qbittorrent-unstable

Où c'est documenté

Pour une raison quelconque, quelques options utiles pour ppa-purgene sont pas documentées dans sa page de manuel , notamment -i. Mais vous pouvez obtenir des informations à leur sujet en exécutant ppa-purge -h(ou simplement ppa-purgesans argument):

ek@Del:~$ ppa-purge -h
Usage: sudo ppa-purge [options] <ppa:ppaowner>[/ppaname]

ppa-purge will reset all packages from a PPA to the standard
versions released for your distribution.

Options:
    -p [ppaname]        PPA name to be disabled (default: ppa)
    -s [host]       Repository server (default: ppa.launchpad.net)
    -d [distribution]   Override the default distribution choice.
    -y          Pass -y --force-yes to apt-get or -y to aptitude
    -i          Reverse preference of apt-get upon aptitude.
    -h          Display this help text

Example usage commands:
    sudo ppa-purge xorg-edgers
    will remove https://launchpad.net/~xorg-edgers/+archive/ppa

    sudo ppa-purge -p xorg-testing sarvatt
    will remove https://launchpad.net/~sarvatt/+archive/xorg-testing

    sudo ppa-purge ppa:ubuntu-x-swat/x-updates
    will remove https://launchpad.net/~ubuntu-x-swat/+archive/x-updates

Notice: If ppa-purge fails for some reason and you wish to try again,
(For example: you left synaptic open while attempting to run it) simply
uncomment the PPA from your sources, run apt-get update and try again.

"La préférence inverse d'apt-get sur aptitude" est un peu cryptique. En regardant la pièce correspondante du code source ( ppa-purgeest juste un script shell, après tout), on voit que cela signifie que le comportement par défaut est de préférer aptitudeà apt-get, et le -idrapeau renverse cette préférence.

Eliah Kagan
la source
La dernière fois que j'ai essayé ppa-purge, il n'a pas supprimé les packages qui ont été supprimés des PPA. Est-ce toujours le cas?
Lekensteyn
@Lekensteyn Oui, je crois qu'il est encore le cas qui ppa-purgeva pas supprimer ou les paquets de déclassement qui ne sont plus fournis par l'APP étant « purgé ». Cependant, vous voudrez peut-être publier une question distincte à ce sujet, pour obtenir une réponse plus fiable ou bien documentée.
Eliah Kagan
Si le référentiel n'est pas un PPA hébergé dans Launchpad, mais un autre référentiel non standard, la purge ppa fonctionnera-t-elle?
Anwar
1
@Anwar Je ne suis pas certain que cela fonctionne, mais vous devriez pouvoir essayer en spécifiant l'URL complète du référentiel au lieu de ppa:username/path. De plus, le PPA doit être ACTIVÉ avant d'essayer de le purger, même si le script se désactive immédiatement après la mise à jour de la liste des packages à supprimer, il ne "trouvera" pas les PPA déjà désactivés.
dragon788
1
@Lekensteyn, vous pouvez essayer d'utiliser aptitude search ~opour trouver des packages orphelins sans source d'installation si vous avez besoin de purger quelque chose qui a été supprimé d'un PPA (ou qui a été installé comme un seul via dpkg -i).
dragon788
6

Voici les moyens de le faire par GUI. J'espère que cela aiderait ceux qui ne préfèrent pas CLI. Les étapes sont simples et faciles à suivre.

  1. Ouvrez le gestionnaire de packages synaptiques . S'il n'est pas installé, installez-le en:

    sudo apt-get install synaptic
    
  2. Une fois ouvert, cliquez sur le bouton Origine en bas à gauche. Il répertorie tous les référentiels en haut à gauche. Sélectionnez le référentiel particulier pour lequel les packages doivent être supprimés. Il répertoriera tous les packages sous ce référentiel. Cliquez sur le premier champ i, e S ou champ Version installée pour afficher les packages installés en premier.

  3. Sélectionnez maintenant tous les packages à supprimer.

    Conseils pour marquer la suppression:

    1. Sélectionnez le premier paquet, puis maintenez la Shifttouche enfoncée et sélectionnez à nouveau le dernier paquet pour tout sélectionner. Cliquez ensuite avec le bouton droit sur la case carrée et sélectionnez la marque pour la suppression ou la marque pour la suppression complète .

    2. ou Sélectionnez un package et appuyez sur Ctrl+ Apour tout sélectionner. Cliquez ensuite avec le bouton droit de la souris sur la case carrée et choisissez Marque pour suppression ou Marque pour suppression complète.

C'est ça. Il se supprimera sans aucun problème. J'ai également joint l'image pour la rendre plus claire. J'espère que cela aiderait. :)

image

Saurav Kumar
la source
5

Pour au moins les trouver, commencez par désactiver les PPA et exécutez apt-get update. Ensuite, installez apt-show-versions. L'exécution apt-show-versions | grep 'No available'vous donnera alors une liste de tous vos packages installés qui ne peuvent pas être trouvés dans vos référentiels configurés. Avec un peu de magie en ligne de commande, vous pouvez probablement supprimer uniquement les noms des packages et les transmettre à apt-get remove:

 for i in `apt-show-versions | grep 'No available' | cut -d' ' -f 1` ; do  sudo apt-get remove -y $i ; done

Notez que cela va parcourir la liste renvoyée apt-show-versionset les supprimer un par un. Selon ce qu'il trouve, cela pourrait désinstaller quelque chose d'inattendu en raison de dépendances, alors vérifiez-le d'abord.

Egil
la source
Ça sonne bien, je vais essayer.
Lekensteyn du
3
Le processus de mise à niveau lui-même désactivera également automatiquement les PPA, bien que je sois certain qu'il ne supprimera pas tous les paquets restants.
Jorge Castro
@Jorge: J'ai en effet remarqué que les PPA sont désactivés (commenté), mais cela ne supprime pas les packages. Je pense qu'il est préférable de supprimer les packages avant qu'une nouvelle version des référentiels Ubuntu n'écrase les fichiers.
Lekensteyn
Je viens de le tester et cela ne fait pas de distinction entre les packages des dépôts principaux et un PPA. Dans mon cas, c'était le libvpx0paquet du PPA au chrome quotidien. La réponse de @ enzotib a montré ce paquet.
Lekensteyn
Si vous exécutez en apt-show-versionstant que non root, il a besoin d'un sudo apt-show-versions -ipour mettre à jour son cache et voir les modifications des référentiels / PPA nouvellement supprimés (sinon il n'est mis à jour que via un travail cron.daily)
Xen2050
0

J'ai trouvé que l'utilisation de la purge ppa était difficile.

Ouvrez Synaptic Package Manager sous Système, puis sélectionnez Paramètres, Référentiels.

Retirez ceux dont vous ne voulez pas.

Terminé!

Joe
la source
4
Cela supprime uniquement les sources de package, il ne supprime pas le package de ces sources.
Lekensteyn