Frage Wie entferne ich alle Pakete aus einem bestimmten Repository?


Für ein reibungsloses Upgrade von 10.04 auf 10.10 möchte ich alle Pakete entfernen, die nicht in den Standard-Repositories sind (z. B. Chrom-PPA und Drittanbieter-Repositories). Was ist der einfachste Weg (vorzugsweise CLI), um diese Pakete zu finden und zu entfernen?

Edit: Diese Frage ist nicht auf PPAs beschränkt, ich habe auch ein x2go-Repository, also suche ich nach einem generischen Befehl, um Pakete zu entfernen, die zu einem bestimmten Repository gehören. Für PPA ist die Frage Wie können PPAs entfernt werden? hat gute Antworten.


29
2018-04-28 12:45


Ursprung


Wenn Sie alle externen Pakete entfernen möchten, deaktivieren Sie alle PPAs und verwenden Sie sie code.google.com/p/apt-downgrade - Lekensteyn


Antworten:


Dieses Skript kann alle Pakete von einem bestimmten Server / Zweig auflisten (die beiden deklarierten Variablen ändern):

#!/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 }'

Wenn Sie alle Pakete, die nicht von einem bestimmten Server kommen, unabhängig von der Verzweigung auflisten müssen, ersetzen Sie die vorletzte Zeile durch:

nextline == 1 { nextline = 0; if ($2 != server) print pkg }

11
2018-04-28 13:07



Nicht was ich genau suche, dieses Skript zeigt nur alle Pakete aus einem bestimmten Repository-Eintrag an. Durch Ersetzen $2 == server && $3 == branch durch $2 != serverMeine Frage ist beantwortet. Bitte stell das in deine Antwort :) (die branch= Zeile kann entfernt werden) Hinweis: Es wird angenommen, dass alle Pakete von einem einzigen Repository-Server stammen. - Lekensteyn
Dieses Skript (leicht modifiziert nach meinem letzten Kommentar) funktioniert wie erwartet. Das libvpx0 Paket bestand sowohl in der Hauptrepo als in der Chrom-täglichen PPA. Nach dem Entfernen der Repositories von /etc/apt/sources.list.dIch hatte noch ein übriggebliebenes Paket: libvpx0. Ich "reparierte" dies wie folgt: Entfernen Sie die Bibliothek mit dpkg, Abhängigkeiten ignorieren: sudo dpkg --ignore-depends=libvpx0 --remove libvpx0. Als nächstes installieren Sie es erneut aus dem Hauptrepo: sudo apt-get install libvpx0. - Lekensteyn
@Lekensteyn: Wahrscheinlich hättest du deine Arbeit gekürzt sudo apt-get install libvpx0=$version_string, vorausgesetzt, die zwei verfügbaren Pakete haben unterschiedliche Versionszeichenfolgen. - enzotib
das war auch möglich und vielleicht auch besser. - Lekensteyn
Ich musste nur überprüfen, welche Pakete nicht von den Standard-Repos installiert sind. Der Befehl 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.ubuntu ist ein guter Anfang (fügen Sie mehr hinzu grep -v bestimmte PPA auszuschließen). Paketversionen, die in keinem Repo bekannt sind, erscheinen als /var/lib/dpkg/status. - Lekensteyn


Auschecken ppa-Säuberung Install ppa-purge.

Verwendung:

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

Hostserver ist standardmäßig auf ppa.launchpad.net.

Hier ist der Link zum Manpage für die ppa-purge Befehl Manpage icon als Referenz.


22
2018-04-28 13:21





Überwindung aptitude's Multiarch Bug für ppa-purge

Normalerweise, als Vadim Rutkowski und Takkat haben erklärt, Laufen ppa-purge Mit der Standardsyntax können alle von einer PPA bereitgestellten Pakete effektiv entfernt und nach Möglichkeit auf Versionen in anderen konfigurierten Softwarequellen heruntergestuft werden.

Takkat hat jedoch darauf hingewiesen, Fehler 831768 verhindert ppa-purge von richtig funktionieren, um zu entfernen Multiarch Pakete (wie 32-Bit-Pakete auf 64-Bit-Systemen installiert). Das ist weil aptitude kann keine widersprüchlichen Abhängigkeiten in Multiarch-Paketen (darum geht es im Fehler) und das Standardverhalten von ppa-purge ist zu benutzen aptitude Pakete downgraden.

Glücklicherweise, ppa-purge akzeptiert die -i Flagge, die es bevorzugt apt-get zu aptitude als sein Backend. Wie im Fehlerbericht dokumentiert, mit apt-get ist eine effektive Alternative zum manuellen Aufruf aptitudeläuft so ppa-purge mit dem -i Flagge sollte Eine effektive Problemumgehung für das Entfernen / Herabstufen aller von einem PPA bereitgestellten Pakete, einschließlich Multiarch-Paketen.

Wie es geht

Hier ist die Syntax:

sudo ppa-purge -i ppa:ppaowner/ppaname

Wie immer (wie bei der -i Flagge wird nicht verwendet):

  • ppaowner wird durch den Besitzer der PPA ersetzt.
  • /ppaname es ist optional. Falls vorhanden, ppaname wird durch den Namen des PPA ersetzt. Wenn nicht, ist es standardmäßig ppa.

BeispielsweiseNehmen wir an, ich hätte die PPA für instabile Builds von qBittorrent installiert, und ich wollte es komplett entfernen, indem ich qBittorrent automatisch auf die Version heruntersetze, die über meine anderen Softwarequellen verfügbar ist verwenden apt-get hinter den Kulissen statt aptitude. Dann würde ich laufen:

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

Wo es dokumentiert ist

Aus irgendeinem Grund, ein paar nützliche Optionen für ppa-purge sind nicht in dokumentiert seine Handbuchseite, einschließlich -i. Aber Sie können Informationen über sie erhalten, indem Sie laufen ppa-purge -h (oder nur ppa-purge ohne Argumente):

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.

"Umgekehrte Präferenz von apt-get nach Eignung" ist ein wenig kryptisch. Beim Betrachten das relevante Stück des Quellcodes (ppa-purge ist nur ein Shell-Skript, schließlich können wir sehen, dass dies bedeutet, dass das Standardverhalten zu bevorzugen ist aptitude zu apt-get, und das -i Flag kehrt diese Präferenz um.


17
2017-07-23 06:55



Das letzte Mal, als ich ppa-purge ausprobiert habe, wurden Pakete, die aus PPAs gelöscht wurden, nicht entfernt. Ist das immer noch so? - Lekensteyn
@ Lekensteyn Ja, ich glauben Das ist immer noch so ppa-purge werden nicht Entfernen oder Herabstufen von Paketen, die nicht mehr von der PPA bereitgestellt werden, werden "gelöscht". Möglicherweise möchten Sie jedoch eine separate Frage zu diesem Thema stellen, um eine autoritativere oder besser dokumentierte Antwort zu erhalten. - Eliah Kagan
Wenn das Repository kein PPA ist, das in Launchpad gehostet wird, aber ein anderes Nicht-Standard-Repository, funktioniert ppa-purge? - Anwar
@Anwar Ich bin nicht positiv, wenn es funktioniert, aber Sie sollten versuchen, indem Sie die vollständige Repository-URL anstelle von angeben ppa:username/path. Außerdem muss der PPA AKTIVIERT sein, bevor Sie versuchen, ihn zu löschen, auch wenn das Skript sofort nach dem Aktualisieren der Liste der zu entfernenden Pakete deaktiviert wird, wird es die bereits deaktivierten PPAs nicht "finden". - dragon788
@ Lekensteyn können Sie versuchen zu verwenden aptitude search ~o Um verwaiste Pakete ohne Installationsquelle zu finden, wenn Sie etwas löschen müssen, das aus einem PPA entfernt wurde (oder als einmaliges via dpkg -i). - dragon788


Um sie zumindest zu finden, deaktivieren Sie zunächst die PPAs und führen Sie sie aus apt-get update. Dann installieren apt-show-versions. Laufen apt-show-versions | grep 'No available' gibt Ihnen dann eine Liste aller installierten Pakete, die nicht in Ihren konfigurierten Repositories gefunden werden können. Mit etwas Befehlszauber können Sie wahrscheinlich nur die Paketnamen entfernen und an sie weitergeben apt-get remove:

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

Beachten Sie, dass dies durch die Liste von zurückgegeben wird apt-show-versions und entferne sie einzeln. Abhängig davon, was es findet, kann dies aufgrund von Abhängigkeiten etwas unbeabsichtigtes deinstallieren, also überprüfen Sie es zuerst.


3
2018-04-28 12:59



Hört sich gut an, ich werde es versuchen. - Lekensteyn
Der Upgrade-Prozess selbst wird auch die PPAs automatisch deaktivieren, obwohl ich ziemlich sicher bin, dass es nicht gehen und alle übrig gebliebenen Pakete entfernen wird. - Jorge Castro
@Jorge: Mir ist tatsächlich aufgefallen, dass die PPA's deaktiviert sind (auskommentiert), aber die Pakete werden nicht entfernt. Ich denke, es ist besser, die Pakete zu entfernen, bevor eine neue Version aus den Ubuntu-Repositories die Dateien überschreibt. - Lekensteyn
Ich habe das gerade getestet und es wird nicht zwischen Paketen aus den Hauptrepos und einem PPA unterschieden. In meinem Fall war es das libvpx0 Paket aus dem Chrom-täglichen PPA. @ enzotib's Antwort hat dieses Paket gezeigt. - Lekensteyn


Hier ist GUI Möglichkeiten, dies zu tun. Ich hoffe, es würde denen helfen, die CLI nicht bevorzugen. Die Schritte sind einfach und leicht zu folgen.

  1. Öffnen synaptischer Paketmanager. Wenn nicht installiert, installieren Sie es wie folgt:

    sudo apt-get install synaptic
    
  2. Wenn geöffnet, klicken Sie auf Ursprung Schaltfläche auf der linken Seite. Es wird alle Repositories auf der oberen linken Seite auflisten. Wählen Sie das bestimmte Repository aus, für das Pakete entfernt werden sollen. Es listet alle Pakete unter diesem Repository auf. Klicken Sie auf das erste Feld i, e S oder Installierte Version Feld, um zuerst die installierten Pakete anzuzeigen.

  3. Wählen Sie nun alle zu entfernenden Pakete aus.

    Tipps zum Entfernen markieren:

    1. Wählen Sie das erste Paket und halten Sie es gedrückt Verschiebung Taste und wählen Sie erneut das letzte Paket, um alle auszuwählen. Klicken Sie dann mit der rechten Maustaste auf Platz Box und wählen Sie Markierung zum Entfernen oder Markierung für vollständige Entfernung.

    2. oder Wählen Sie ein beliebiges Paket aus und drücken Sie Strg+EIN um alles auszuwählen. Klicken Sie dann mit der rechten Maustaste auf Platz Box und wählte Markierung zum Entfernen oder Markierung für vollständige Entfernung.

Das ist es. Es wird ohne Probleme entfernt. Ich habe auch das Bild angehängt, um es klarer zu machen. Ich hoffe es würde helfen. :)

image


3
2018-03-08 11:44





Ich fand die Verwendung von ppa-Purge schwierig.

Öffnen Sie den Synaptic Package Manager unter System und wählen Sie Einstellungen, Repositories.

Entfernen Sie diejenigen, die Sie nicht möchten.

Erledigt!


0
2018-05-09 16:58



Dadurch werden nur Paketquellen entfernt, das Paket wird nicht aus diesen Quellen entfernt. - Lekensteyn