Wie entferne ich alle Pakete aus einem bestimmten Repository?

30

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

Bearbeiten: Diese Frage ist nicht auf PPAs beschränkt. Ich habe auch ein x2go-Repository, daher suche ich nach einem generischen Befehl zum Entfernen von Paketen, die zu einem bestimmten Repository gehören. Für PPAs hat die Frage, wie PPAs entfernt werden können, gute Antworten.

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

Antworten:

12

Dieses Skript kann alle Pakete eines bestimmten Servers / Zweigs auflisten (wobei die beiden deklarierten Variablen geändert werden):

#!/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 unabhängig von der Verzweigung alle Pakete auflisten müssen, die nicht von einem bestimmten Server stammen, ersetzen Sie die vorletzte Zeile durch:

nextline == 1 { nextline = 0; if ($2 != server) print pkg }
Enzotib
quelle
1
Nicht genau das, wonach ich suche, dieses Skript zeigt nur alle Pakete aus einem bestimmten Repository-Eintrag an. Durch Ersetzen $2 == server && $3 == branchdurch $2 != serverwird meine Frage beantwortet. Bitte geben Sie dies in Ihre Antwort ein :) (die branch=Zeile kann entfernt werden) Hinweis: Es wird davon ausgegangen, dass alle Pakete von einem einzigen Repository-Server stammen.
Lekensteyn
1
Dieses Skript (gemäß meinem letzten Kommentar leicht modifiziert) funktioniert wie erwartet. Das libvpx0Paket bestand sowohl im Hauptrepo als auch in der Chrom-Tageszeitung PPA. Nach dem Entfernen der Repositories aus /etc/apt/sources.list.d, hatte ich noch ein übrig gebliebenen Paket: libvpx0. I „repariert“ dies wie folgt: Entfernen Sie die Bibliothek mit dpkg, ignoriert Abhängigkeiten: sudo dpkg --ignore-depends=libvpx0 --remove libvpx0. Als nächstes installieren Sie es wieder aus dem Haupt Repo: sudo apt-get install libvpx0.
Lekensteyn
1
@Lekensteyn: Wahrscheinlich hätten Sie Ihre Arbeit mit verkürzen können sudo apt-get install libvpx0=$version_string, vorausgesetzt, die beiden verfügbaren Pakete haben unterschiedliche Versionszeichenfolgen.
Enzotib
in der Tat war das 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.ubuntuist ein guter Anfang (fügen Sie weitere hinzu grep -v, um bestimmte PPAs auszuschließen). Paketversionen, die in keinem Repo bekannt sind, werden als angezeigt /var/lib/dpkg/status.
Lekensteyn
22

Schauen Sie sich ppa-purge anInstallieren Sie ppa-purge .

Verwendung:

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

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

Hier ist der Link zur Manpage für den ppa-purgeBefehlManpage-Symbol als Referenz.

Vadim Rutkovsky
quelle
Oder Sie könnten meinen Zweig von ppa-purge verwenden, der viele Fehlerbehebungen und Verbesserungen gegenüber dem ppa-purge im Universums-Repository enthält. Sehen Sie hier für weitere Informationen.
Jarno
18

Überwindung aptitudedes Multiarch Bug fürppa-purge

Normalerweise als Vadim Rutkovsky und Takkat haben erklärt , läuft ppa-purgemit Default - Syntax ist ein effektiver Weg , um alle Pakete von einem PPA bereitgestellt zu entfernen, richtig , wann immer möglich in andere konfigurierten Software Quellen zur Verfügung gestellt , sie zu Versionen Herabstufung.

Wie Takkat hervorgehoben hat, verhindert der Fehler 831768 jedoch, dass Multiarch- Pakete (wie 32-Bit-Pakete, die auf 64-Bit-Systemen installiert sind) ppa-purgeordnungsgemäß entfernt werden können. Dies liegt daran , nicht in Konflikt Abhängigkeiten in multiarch Paketen verarbeiten (das ist , was der Fehler über ist) und das Standardverhalten verwenden Pakete degradieren.aptitudeppa-purgeaptitude

Akzeptiert zum Glück ppa-purgedas -iFlag, das es bevorzugt apt-get, aptitudeals Backend. Wie im Fehlerbericht dokumentiert, ist die Verwendung apt-geteine effektive Alternative zum manuellen Aufrufen. Daher sollte dasaptitude Ausführen ppa-purgemit dem -iFlag eine effektive Umgehung für das Entfernen / Downgraden aller von einer PPA bereitgestellten Pakete sein, einschließlich Multiarch-Paketen .

Wie es geht

Hier ist die Syntax:

sudo ppa-purge -i ppa:ppaowner/ppaname

Wie gewohnt (wie wenn die -iFlagge nicht benutzt wird):

  • ppaowner wird durch den Besitzer des PPA ersetzt.
  • /ppanamees ist optional. Wenn vorhanden, ppanamewird durch den Namen der PPA ersetzt. Wenn nicht, ist der Standardwert ppa.

Zum Beispiel , nehme ich das hatte PPA für instabil von qBittorrent baut installiert, und ich wollte es vollständig entfernen, automatisch qBittorrent Herabstufung, was auch immer Version durch meine andere Software - Quellen zur Verfügung steht mit apt-gethinter den Kulissen stattaptitude . Dann würde ich laufen:

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

Wo es dokumentiert ist

Aus irgendeinem Grund sind einige nützliche Optionen für ppa-purgenicht in der Handbuchseite dokumentiert , einschließlich -i. Sie können jedoch Informationen dazu erhalten, indem Sie Folgendes ausführen ppa-purge -h(oder einfach ppa-purgeohne 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 upon aptitude" ist ein bisschen kryptisch. Mit Blick auf den relevanten Teil des Quellcodes ( ppa-purgenur ein Shell - Skript, nachdem alle), können wir , dass dies bedeutet , dass das Standardverhalten zu bevorzugen ist aptitudezu apt-get, und die -iFlagge kehrt diese Präferenz.

Eliah Kagan
quelle
Das letzte Mal, als ich ppa-purge ausprobierte, wurden keine aus PPAs gelöschten Pakete entfernt. Ist das noch der fall
Lekensteyn
@Lekensteyn Ja, ich glaube , es ist immer noch der Fall , dass ppa-purgewird nicht entfernen oder Herabstufung von Paketen, die nicht mehr durch die PPA bereitgestellt werden „gespült“ . Möglicherweise möchten Sie jedoch eine separate Frage dazu stellen, um eine aussagekräftigere oder besser dokumentierte Antwort zu erhalten.
Eliah Kagan
Wenn das Repository kein in Launchpad gehosteter PPA ist, sondern ein anderes nicht standardmäßiges Repository, funktioniert ppa-purge?
Anwar
1
@Anwar Ich bin mir nicht sicher, ob es funktionieren wird, aber Sie sollten es versuchen können, indem Sie die vollständige Repository-URL anstelle von angeben ppa:username/path. Außerdem muss die PPA AKTIVIERT sein, bevor Sie versuchen, sie zu löschen, obwohl das Skript sofort nach dem Aktualisieren der Liste der zu entfernenden Pakete deaktiviert wird, werden bereits deaktivierte PPAs nicht "gefunden".
Dragon788
1
@Lekensteyn Sie können versuchen aptitude search ~o, verwaiste Pakete ohne Installationsquelle zu finden, wenn Sie etwas löschen müssen, das von einer PPA entfernt wurde (oder als einmalige Installation über installiert wurde dpkg -i).
Dragon788
6

Hier ist GUI Möglichkeiten, dies zu tun. Hoffe, es würde für diejenigen helfen, die CLI nicht bevorzugen. Die Schritte sind einfach und leicht zu befolgen.

  1. Öffnen Sie den Synaptic Package Manager . Wenn nicht installiert, installieren Sie es wie folgt:

    sudo apt-get install synaptic
    
  2. Klicken Sie im geöffneten Zustand links unten auf die Schaltfläche Origin . Es werden alle Repositorys oben links aufgelistet. Wählen Sie das bestimmte Repository aus, für das Pakete entfernt werden sollen. Es werden alle Pakete in diesem Repository aufgelistet. Klicken Sie auf das erste Feld i, e S oder Installierte Version , um zuerst die installierten Pakete anzuzeigen.

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

    Tipps zum Markieren zum Entfernen:

    1. Erstes Paket Shiftauswählen, dann die Taste gedrückt halten und erneut das letzte Paket auswählen, um alle auszuwählen. Klicken Sie dann mit der rechten Maustaste auf das quadratische Kästchen und wählen Sie die Option zum Entfernen oder zum vollständigen Entfernen .

    2. oder Wählen Sie ein Paket aus und drücken Sie Ctrl+ A, um alle auszuwählen. Klicken Sie dann mit der rechten Maustaste auf das quadratische Kästchen und wählen Sie die Markierung zum Entfernen oder die Markierung zum vollständigen Entfernen.

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

Bild

Saurav Kumar
quelle
5

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. Running zeigt apt-show-versions | grep 'No available'Ihnen dann eine Liste aller installierten Pakete an, die in Ihren konfigurierten Repositorys nicht gefunden werden können. Mit etwas Befehlszeilenmagie können Sie wahrscheinlich nur die Paketnamen entfernen und an folgende Adresse übergeben 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 zurückgegebene Liste geht apt-show-versionsund diese nacheinander entfernt. Je nachdem, was gefunden wird, kann dies zu einer Deinstallation führen, die aufgrund von Abhängigkeiten nicht beabsichtigt ist. Überprüfen Sie dies daher zuerst.

Egil
quelle
Hört sich gut an, ich werde es versuchen.
Lekensteyn
3
Der Upgrade-Prozess selbst wird auch die PPAs automatisch deaktivieren, obwohl ich mir ziemlich sicher bin, dass er nicht alle verbleibenden Pakete entfernen wird.
Jorge Castro
@Jorge: Mir ist zwar aufgefallen, dass die PPAs 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 dies gerade getestet und es macht keinen Unterschied zwischen Paketen aus den Haupt-Repos und einem PPA. In meinem Fall war es das libvpx0Paket der Chrom-Tageszeitung PPA. @enzotibs Antwort zeigte dieses Paket.
Lekensteyn
Wenn Sie apt-show-versionsals Nicht-Root-Benutzer ausgeführt werden, müssen sudo apt-show-versions -iSie den Cache aktualisieren und Änderungen von neu entfernten Repositorys / PPAs anzeigen (andernfalls erfolgt die Aktualisierung nur über einen cron.daily-Job)
Xen2050
0

Ich fand die Verwendung von ppa-purge schwierig.

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

Entfernen Sie diejenigen, die Sie nicht wollen.

Getan!

Joe
quelle
4
Dadurch werden nur Paketquellen entfernt, das Paket wird jedoch nicht aus diesen Quellen entfernt.
Lekensteyn