Come rimuovo tutti i pacchetti da un determinato repository?


30

Per un aggiornamento regolare dalla 10.04 alla 10.10, vorrei rimuovere tutti i pacchetti che non si trovano nei repository predefiniti (ad es. PPA al cromo e repository di terze parti). Qual è il modo più semplice (preferibilmente CLI) per trovare e rimuovere questi pacchetti?

Modifica: questa domanda non è limitata ai PPA, ho anche un repository x2go, quindi sto cercando un comando generico per rimuovere i pacchetti appartenenti a un determinato repository. Per i PPA, la domanda su come rimuovere i PPA ha grandi risposte.


Per coloro che desiderano rimuovere tutti i pacchetti esterni, disabilitare tutti i PPA e utilizzare code.google.com/p/apt-downgrade
Lekensteyn

Risposte:


12

Questo script può elencare tutti i pacchetti da un determinato server / ramo (modificando le due variabili dichiarate):

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

se è necessario elencare tutti i pacchetti che non provengono da un determinato server, indipendentemente dal ramo, sostituire la riga successiva all'ultima con:

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

1
Non esattamente quello che sto cercando, questo script mostra solo tutti i pacchetti da una specifica voce del repository. Sostituendo $2 == server && $3 == branchcon $2 != server, la mia domanda ha una risposta. Inseriscilo nella tua risposta :) (la branch=riga può essere rimossa) Nota: si presume che tutti i pacchetti provengano da un singolo server di repository.
Lekensteyn,

1
Questo script (leggermente modificato per il mio ultimo commento) funziona come previsto. Il libvpx0pacchetto esisteva sia nel repository principale che nel PPA giornaliero al cromo. Dopo aver rimosso i repository dai /etc/apt/sources.list.d, ho avuto ancora un pacchetto di sinistra-over: libvpx0. I "riparato" questo come segue: rimuovere la libreria con dpkg, ignorando le dipendenze: sudo dpkg --ignore-depends=libvpx0 --remove libvpx0. Avanti, installarlo nuovamente dal repo principale: sudo apt-get install libvpx0.
Lekensteyn,

1
@Lekensteyn: probabilmente avresti potuto abbreviare il tuo lavoro sudo apt-get install libvpx0=$version_string, supponendo che i due pacchetti disponibili abbiano stringhe di versione diverse.
enzotib,

anzi, anche quello era possibile e forse anche migliore.
Lekensteyn,

Ho solo bisogno di verificare quali pacchetti non sono installati dai repository predefiniti. Il comando 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è un buon inizio (aggiungine altro grep -vper escludere alcuni PPA). Le versioni del pacchetto che non sono note in nessun repository vengono visualizzate come /var/lib/dpkg/status.
Lekensteyn,

22

DaiInstalla ppa-purge un'occhiata a ppa-purge .

Uso:

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

L'impostazione predefinita di Hostserver è ppa.launchpad.net.

Ecco il link alla manpage per il ppa-purgecomandoIcona Manpage come riferimento.


Oppure potresti usare il mio ramo di ppa-purge che ha molte correzioni di bug e miglioramenti rispetto al ppa-purge nel repository dell'universo. Vedi qui per maggiori informazioni.
jarno

18

Superare aptitudeil Multiarch Bug perppa-purge

Normalmente, come hanno spiegato Vadim Rutkovsky e Takkat , l'esecuzione con la sintassi predefinita è un modo efficace per rimuovere tutti i pacchetti forniti da un PPA , eseguendo correttamente il downgrade a versioni fornite in altre fonti software configurate quando possibile.ppa-purge

Tuttavia, come ha sottolineato Takkat, il bug 831768 impedisce ppa-purgedi funzionare correttamente per rimuovere i pacchetti multiarch (come i pacchetti a 32 bit installati su sistemi a 64 bit). Questo perché aptitudenon è possibile gestire dipendenze in conflitto nei pacchetti multiarch (questo è il problema di cui si occupa il bug) e il comportamento predefinito di ppa-purgeè quello di utilizzare aptitudeper il downgrade dei pacchetti.

Fortunatamente, ppa-purgeaccetta la -ibandiera che induce a preferire apt-geta aptitudecome backend. Come documentato nella segnalazione di bug, l'utilizzo apt-getè un'alternativa efficace all'invocazione manuale aptitude, pertanto l'esecuzione ppa-purgecon il -iflag dovrebbe essere una soluzione efficace per la rimozione / il downgrade di tutti i pacchetti forniti da un PPA, inclusi i pacchetti multiarch .

Come farlo

Ecco la sintassi:

sudo ppa-purge -i ppa:ppaowner/ppaname

Come al solito (come quando -inon si usa la bandiera):

  • ppaowner viene sostituito con il proprietario del PPA.
  • /ppanameè facoltativo. Se presente, ppanameviene sostituito con il nome del PPA. In caso contrario, il valore predefinito è ppa.

Ad esempio , supponiamo di avere installato il PPA per build instabili di qBittorrent e che volessi rimuoverlo completamente, riducendo automaticamente il downgrade di qBittorrent a qualsiasi versione disponibile attraverso le mie altre fonti software usando apt-getdietro le quinte anzichéaptitude . Quindi correrei:

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

Dove è documentato

Per qualche ragione, alcune utili opzioni per ppa-purgenon sono documentate nella sua pagina di manuale , incluso -i. Ma puoi ottenere informazioni su di loro eseguendo ppa-purge -h(o semplicemente ppa-purgesenza argomenti):

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 preferenza inversa di apt-get upon aptitude" è un po 'enigmatica. Osservando la parte rilevante del codice sorgente ( ppa-purgeè solo uno script di shell, dopo tutto), possiamo vedere che questo significa che il comportamento predefinito è quello di preferiscono aptitudea apt-get, e la -ibandiera inverte questo preferenza.


L'ultima volta che ho provato ppa-purge, non ho rimosso i pacchetti che sono stati eliminati dai PPA. È ancora così?
Lekensteyn,

@Lekensteyn Sì, credo che sia ancora il caso che non rimuoverà o nonppa-purge effettuerà il downgrade dei pacchetti che non vengono più forniti dal PPA "eliminati". Tuttavia, potresti voler inviare una domanda separata su questo, per ottenere una risposta più autorevole o ben documentata.
Eliah Kagan,

Se il repository non è un PPA ospitato in Launchpad, ma un altro repository non standard, ppa-purge funzionerà?
Anwar,

1
@Anwar Non sono sicuro che funzionerà, ma dovresti essere in grado di provare specificando l'URL completo del repository invece di ppa:username/path. Inoltre, il PPA deve essere ABILITATO prima di tentare di eliminarlo, anche se lo script si disabilita immediatamente dopo aver aggiornato l'elenco dei pacchetti da rimuovere, non "troverà" i PPA già disabilitati.
dragon788,

1
@Lekensteyn puoi provare a usare aptitude search ~oper trovare pacchetti orfani senza fonte di installazione se devi eliminare qualcosa che è stato rimosso da un PPA (o che è stato installato come unico dpkg -i).
dragon788,

6

Ecco i modi della GUI per farlo. Spero che possa aiutare per coloro che non preferiscono la CLI. I passaggi sono semplici e facili da seguire.

  1. Apri gestore pacchetti sinaptici . Se non installato, installarlo tramite:

    sudo apt-get install synaptic
    
  2. Quando aperto, fai clic sul pulsante Origine in basso a sinistra. Elencherà tutti i repository sul lato superiore sinistro. Seleziona il repository specifico per il quale i pacchetti devono essere rimossi. Elencherà tutti i pacchetti in quel repository. Fare clic sul primo campo i, e S o sul campo Versione installata per mostrare prima i pacchetti installati.

  3. Ora seleziona tutti i pacchetti da rimuovere.

    Suggerimenti per contrassegnare per la rimozione:

    1. Seleziona il primo pacchetto, quindi tieni premuto il Shifttasto e seleziona nuovamente l'ultimo pacchetto per selezionare tutto. Quindi fare clic con il tasto destro sulla casella quadrata e selezionare il segno per la rimozione o il segno per la rimozione completa .

    2. oppure Seleziona eventuali pacchetti e premi Ctrl+ Aper selezionare tutto. Quindi fare clic con il tasto destro sulla casella quadrata e selezionare il segno per la rimozione o il segno per la rimozione completa.

Questo è tutto. Rimuoverà senza alcun problema. Ho anche allegato l'immagine per renderlo più chiaro. Spero che possa aiutare. :)

Immagine


5

Per trovarli almeno, inizia disabilitando i PPA ed esegui apt-get update. Quindi installare apt-show-versions. In esecuzione apt-show-versions | grep 'No available'verrà quindi fornito un elenco di tutti i pacchetti installati che non è possibile trovare nei repository configurati. Con un po 'di magia da riga di comando puoi probabilmente eliminare solo i nomi dei pacchetti e passarli a apt-get remove:

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

Nota che questo passerà attraverso l'elenco restituito apt-show-versionse li rimuoverà uno per uno. A seconda di ciò che trova, questo potrebbe disinstallare qualcosa di indesiderato a causa delle dipendenze, quindi verificalo prima.


Suona bene, ci proverò.
Lekensteyn,

3
Il processo di aggiornamento stesso consentirà anche di autoriprodurre i PPA, anche se sono abbastanza sicuro che non andrà a rimuovere tutti i pacchetti rimasti.
Jorge Castro,

@Jorge: ho notato che i PPA sono disabilitati (commentati), ma non rimuove i pacchetti. Penso che sia meglio rimuovere i pacchetti prima che una nuova versione dai repository Ubuntu sovrascriva i file.
Lekensteyn,

Ho appena provato questo e non fa una distinzione tra pacchetti dai repository principali e un PPA. Nel mio caso, era il libvpx0pacchetto del PPA giornaliero al cromo. La risposta di @ enzotib ha mostrato questo pacchetto.
Lekensteyn,

Se si esegue apt-show-versionscome non root, è necessario sudo apt-show-versions -iaggiornare la cache e visualizzare le modifiche dai repository / PPA rimossi di recente (altrimenti viene aggiornato solo tramite un processo cron.daily)
Xen2050

0

Ho trovato difficile l'uso di ppa-purge.

Apri Synaptic Package Manager in Sistema, quindi seleziona Impostazioni, Archivi.

Rimuovi quelli che non vuoi.

Fatto!


4
Ciò rimuove solo le origini dei pacchetti, non rimuove il pacchetto da tali fonti.
Lekensteyn,
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.