Come ripristinare tutti i pacchetti alle loro versioni ufficiali?


10

Ho installato numerosi pacchetti da PPA e ora vorrei tornare alle versioni ufficiali. Molti dei PPA non esistono più /etc/apt/sources.list.d, quindi ppa-purgenon funzioneranno su di essi.

Qual è il modo più diretto per quello?

Risposte:


11

Bene puoi rimuovere e reinstallare i pacchetti

ppa-purgeè probabilmente ancora la soluzione migliore per una fuga pulita. Basta aggiungere nuovamente il PPA da cui proviene il pacchetto e poi usarlo ppa-purgeper ucciderlo. Non sono sicuro di quanti PPA hai installato, ma se è inferiore a 10, starei cercando di farlo.

Se ritieni che questo metodo sia troppo morbido, ho appena scritto un po ' bash-porn per aiutare a identificare le versioni del pacchetto la cui fonte di installazione ora esiste solo localmente in /var/lib/dpkg/status. Questo non è lo stesso dei pacchetti "orfani".

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

Non sono sicuro che sia perfetto, ma provalo. Nota che stamperà solo i nomi dei pacchetti. Dovrai disinstallare / reinstallare manualmente ciascun pacchetto.

Per fare ciò, guarda prima cosa è disponibile per quel pacchetto eseguendo apt-cache policy <package>e vedrai un elenco di versioni del pacchetto (inclusa la /var/lib/dpkg/statusversione). Trova quello esterno più vicino ed esegui:

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

Potrebbe essere necessario aggiungere un --reinstalldopo il installma vedere come va.


1
@Jokerdino Questo è leggermente (ma soprattutto) diverso. Questo trova solo pacchetti orfani, cioè pacchetti che non hanno un repository di installazione valido, quindi mostrerà solo cose che hai installato da un PPA che non esistono altrove. Per cose in cui aggiorni i pacchetti attuali (ad esempio se hai usato xorg-edger per aggiornare l'intero sistema X) quei pacchetti non vengono conteggiati.
Oli

Scusate. L'ho appena notato e ho rimosso il mio commento (ma era troppo tardi ..: /). Per riferimento ad altri che potrebbero voler seguire la conversazione, ho collegato a questa risposta .
jokerdino

Come da dichiarazione ufficiale, ppa-purge è stato rimosso da Ubuntu perché, tutte le sue funzionalità possono essere eseguite da apt-get. Come posso farlo con apt-get.
rafee,

@rafee Perché pensi che sia ppa-purgestato rimosso? È nei repository di Trusty e di ogni altra versione supportata .
Oli

È rimosso dall'installazione predefinita e richiede aptitude come dipendenza.
rafee,

1

Ho scritto uno script più completo che riconoscerà i pacchetti la cui versione corrente non proviene da un PPA e hanno una versione alternativa PPA disponibile. Dopo l'esecuzione, stampa un comando pronto per l'esecuzione che eseguirà il downgrade di tali pacchetti alle loro versioni PPA.

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}"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.