Wie kann ich alle Pakete auf ihre offiziellen Versionen zurücksetzen?

10

Ich habe eine Reihe von Paketen von PPAs installiert und möchte jetzt auf offizielle Versionen zurückgreifen. Viele der PPAs existieren in nicht mehr und funktionieren /etc/apt/sources.list.ddaher nicht mehr ppa-purge.

Was ist der einfachste Weg dafür?

Eudoxos
quelle

Antworten:

11

Nun, Sie können die Pakete entfernen und neu installieren

ppa-purgeist wahrscheinlich immer noch die beste Wahl für eine saubere Flucht. Fügen Sie einfach das PPA hinzu, von dem das Paket stammt, und verwenden Sie es dann ppa-purge, um es zu beenden. Ich bin mir nicht sicher, wie viele PPAs Sie installiert haben, aber wenn es weniger als 10 sind, würde ich dies versuchen.

Wenn Sie der Meinung sind, dass diese Methode zu weich ist, habe ich gerade bash-porn geschrieben, um Paketversionen zu identifizieren, deren Installationsquelle jetzt nur noch lokal in vorhanden ist /var/lib/dpkg/status. Dies ist nicht dasselbe wie "verwaiste" Pakete.

for p in `dpkg-query --showformat='${Package} ' -W`; do
    if [[ $(apt-cache policy $p | grep -Pzo "\*\*\* [^\n]+\s+100") ]]; then
        echo $p;
    fi;
done

Ich bin mir nicht sicher, ob dies noch perfekt ist, aber probieren Sie es aus. Beachten Sie, dass nur die Namen der Pakete ausgedruckt werden. Sie müssen jedes Paket manuell deinstallieren / neu installieren.

Schauen Sie sich dazu zunächst an, was für dieses Paket verfügbar ist, apt-cache policy <package>und sehen Sie eine Liste der Paketversionen (einschließlich der /var/lib/dpkg/statusVersion). Suchen Sie die nächste externe und führen Sie Folgendes aus:

sudo apt-get install <package>=<version>

Möglicherweise müssen Sie eine hinzufügen , --reinstallnachdem die installaber sehen , wie es geht.

Oli
quelle
1
@ Jokerdino Das ist subtil (aber wichtig) anders. Das findet nur verwaiste Pakete, dh Pakete, die kein aktuelles funktionsfähiges Installationsrepository haben, sodass nur Dinge angezeigt werden, die Sie von einer PPA installiert haben, die an keiner anderen Stelle vorhanden sind. Für Dinge, bei denen Sie die aktuellen Pakete aktualisieren (z. B. wenn Sie xorg-edgers zum Aktualisieren des gesamten X-Systems verwendet haben), werden diese Pakete nicht gezählt.
Oli
Es tut uns leid. Ich habe das gerade bemerkt und meinen Kommentar entfernt (aber es war zu spät ..: /). Um auf andere zu verweisen, die das Gespräch verfolgen möchten, habe ich auf diese Antwort verlinkt .
Jokerdino
Gemäß der offiziellen Erklärung wurde ppa-purge aus Ubuntu entfernt, da alle Funktionen von apt-get ausgeführt werden können. Wie kann ich das mit apt-get machen?
Rafee
@rafee Warum wurde deiner Meinung ppa-purgenach entfernt? Es ist in den Repos für Trusty sowie in jeder anderen unterstützten Version enthalten .
Oli
Es ist aus der Standardinstallation entfernt und erfordert Eignung als Abhängigkeit.
Rafee
1

Ich habe ein vollständigeres Skript geschrieben, das Pakete erkennt, deren aktuelle Version nicht von einer PPA stammt, und die eine alternative PPA-verfügbare Version haben. Nach der Ausführung wird ein sofort einsatzbereiter Befehl gedruckt, mit dem solche Pakete auf ihre PPA-Versionen heruntergestuft werden.

https://gist.github.com/peci1/2d7859857fdad73ee8443f5ecd5ee5a3

#!/usr/bin/env bash

# BSD 3-clause license, copyright Martin Pecka @ 2019

# This script outputs a command that will revert all packages from non-PPA versions to their latest PPA version.
# This may be handy i.e. for finding packages for which you installed a newer version from a .deb file, or after
# incompletely removing a PPA.

export LC_ALL=C

command=""

for p in `dpkg-query --showformat='${Package} ' -W`; do
    if [[ $(apt-cache policy $p | grep -Pzo "\*\*\* [^\n]+\s+100") ]]; then
        versions=$(apt-cache policy $p | tr "\n" "\r" | grep -Po '(?<=\r )[ *]{3} [^\r]+ [0-9]+\r\s+[0-9]+' | sed 's/ [0-9]\+\r\s\+\([0-9]\+\)/ \1/g' | tr "\r" "\n")
        installable_versions=$(echo "${versions}" | grep -v " 100$")
        version_to_install=$(echo "${installable_versions}" | head -n1 | grep -Po "\s+\K.*(?= [0-9]+$)")
        if [[ ! -z "${version_to_install}" ]]; then
            echo "${p}=${version_to_install}"
            command="${command} ${p}=${version_to_install}"
        else
            echo "${p}: no PPA version"
        fi
    fi;
done

echo "To revert packages to their latest PPA version, call the following command as root. Please, carefully go through the list of changes apt-get will present to you!"
echo "apt-get install ${command}"
Martin Pecka
quelle