E 'possibile annullare un comando apt-get install?

62

Ho installato Carpadio sulla mia installazione di Xubuntu (una USB Live), che poi ho tirato come più di 50 pacchetti da, suppongo, il lato Ubuntu del repository. Ora vorrei annullare questo. Comunque per tutta la mia caccia, non trovo nulla di più utile di Come posso annullare il comando sudo apt get get , che suggerisce solo apt-get purge . Questo non è utile poiché tutto ciò che fa è rimuovere 2 pacchetti (carpadio e carpadio-gnomepanel).

/var/log/apt/history.log ha una lista di tutti i pacchetti che sono stati installati insieme a quel comando. Quindi mi chiedevo se c'è un modo semplice per rimuoverli tutti ? Altrimenti posso solo reinstallare, questa è stata comunque una nuova installazione, ma sono curioso.

Un piccolo esempio del registro cronologia (1 / 5-1 / 10 dell'intero elenco)

  

Commandline: apt-get install cardapio-gnomepanel
  Installa: libdbusmenu-qt2: amd64 (0.9.2-0ubuntu1, automatico), python-packagekit: amd64 (0.7.2-4ubuntu3, automatico), cups-pk-helper: amd64 (0.2.1.2-1ubuntu0.1, automatico) , geoclue: amd64 (0.12.0-1ubuntu12, automatico), unità: amd64 (5.18.0-0ubuntu1, automatico), indicatore-stampanti: amd64 (0.1.6-0ubuntu1, automatico), libevolution: amd64 (3.2.3- 0ubuntu6, automatico), libqt4-dichiarativo: amd64 (4.8.1-0ubuntu4.3, automatico), libmtp9: amd64 (1.1.3-1ubuntu0.1, automatico), tracker-miner-fs: amd64 (0.14.0-2ubuntu1 , automatico), gir1.2-rb-3.0: amd64 (2.96-0ubuntu4.2, automatico), python-aptdaemon.pkcompat: amd64 (0.43 + bzr805-0ubuntu7, automatico), gnome-media: amd64 (3.4.0- 0ubuntu3.1, automatico), metacity: amd64 (2.34.1-1ubuntu11, automatico), nautilus: amd64 (3.4.2-0ubuntu6, automatico), libcompizconfig0: amd64 (0.9.7.0 ~ bzr428-0ubuntu6, automatico), compiz- plugins-default: amd64 (0.9.7.12-0ubuntu1, automatico), libunistring0: amd64 (0.9.3-5, automatico), libebackend-1.2-1: amd64 (3.2.3-0ubuntu7, automatico), ubuntu-docs: amd64 (12.04.6, automatico), python-mako: amd64 (0.5.0-1, automatico),

A tutti quelli che hanno suggerito autoremove : non sono sicuro del perché, ma ho ottenuto solo un altro pacchetto relativo a python (python-keybinder o qualcosa del genere) come "non necessario" e questo è tutto ciò che autoremove è stato in grado di rimuovere.

Tra l'installazione e la disinstallazione, solo la modifica principale era l'installazione di xubuntu-restricted-extras .

    
posta Karthik T 25.01.2013 - 18:03

9 risposte

71

Fondamentalmente, dovrai entrambi apt-get remove (o apt-get purge) dopo il pacchetto e eseguire apt-get autoremove , per fare in modo che ripristini l'installazione di package-one .

Esaminiamo l'intero processo:

  • sudo apt-get install package-one installa 50 dipendenze contrassegnate come "automatiche" come si può vedere anche dall'estratto di registro nella tua domanda

  • sudo apt-get purge package-one rimuove (elimina) solo uno, ma fai esegui questo!

    Tutte le seguenti azioni di installazione (se ne eseguite) produrranno un messaggio informativo con i pacchetti non più necessari:

    The following packages were automatically installed and are no longer required:
      package-two package-three [...]
    Use 'apt-get autoremove' to remove them.
    

    Questo elenco è fondamentalmente solo un elenco di tutti i pacchetti contrassegnati come "automatici" senza una dipendenza inversa su di essi. In altre parole, non c'è motivo di installarli per quanto riguarda la gestione dei pacchetti.

    Nota: non è necessaria alcuna installazione! È solo per dimostrare che APT è intelligente per parlarti dei tuoi pacchetti non necessari!

  • sudo apt-get autoremove --purge rimuove (elimina) questi

Ulteriori informazioni

risposta data gertvdijk 25.01.2013 - 18:13
18

Quando vuoi rimuovere un pacchetto e le sue dipendenze che sono state installate al momento, dovresti usare:

sudo apt-get purge package
sudo apt-get --purge autoremove

ma per annullare apt azioni, puoi usare apt-undo script. È un semplice script che può annullare le azioni apt eseguite in Ubuntu. È da notare che questo script può funzionare solo se lo usi invece di apt-get per installare / aggiornare / rimuovere / eliminare / downgrade dei pacchetti.

Per installare apt-undo in Ubuntu, esegui i seguenti comandi nel terminale:

sudo add-apt-repository ppa:lkjoel/apt-undo
sudo apt-get update
sudo apt-get install apt-undo

utilizzo:

apt-undo install yourpackages
apt-undo remove yourpackages
apt-undo purge yourpackages
apt-undo upgrade
apt-undo dist-upgrade
apt-undo install yourpackages=old.version
apt-undo install yourpackages=new.version

Per annullare, le azioni aptitude di cui sopra eseguono i seguenti comandi nel terminale:

apt-undo undo
    
risposta data Ramin 25.01.2013 - 18:15
7

Usa la potenza di Unix. Prendi la riga del file di log che hai e costruisci un comando che annulla ciò che apt ha fatto. Ad esempio:

$ echo 'Install: libdbusmenu-qt2:amd64 (0.9.2-0ubuntu1, automatic), python-packagekit:amd64 (0.7.2-4ubuntu3, automatic), cups-pk-helper:amd64 (0.2.1.2-1ubuntu0.1, automatic),'|perl -pe 's/ \(.*?\)//g; s/,//g; s/^Install: //'
libdbusmenu-qt2:amd64 python-packagekit:amd64 cups-pk-helper:amd64

Quindi puoi usare questa eliminazione di tutti i pacchetti installati casualmente, data la linea appropriata dal tuo file di registro:

$ dpkg -P $(echo '(full log line here)' | perl -pe 's/ \(.*?\)//g; s/,//g; s/^Install: //')

(Ho usato perl invece di sed perché sed usa un tipo di espressione regolare che non supporta le corrispondenze non avide, che era il modo più semplice di costruire ciò di cui avevo bisogno)

    
risposta data Robie Basak 25.01.2013 - 18:46
1

Dopo aver rimosso il pacchetto, e lo si può rimuovere completamente aggiungendo --purge, per, apt-get remove --purge <package> , dovrebbe darti un messaggio che i pacchetti di libreria che ha tirato sono stati installati automaticamente e non più necessari, a in quale punto puoi eseguire apt-get autoremove per rimuoverli.

    
risposta data Ken Kinder 25.01.2013 - 18:12
1

Segui sudo apt-get purge packagename con

sudo apt-get autoremove. 

A meno che non sia un metapacchetto, dovresti occupartene.

Vedi anche la FAQ su Come rimuovo manualmente tutti i file Cardapio? .

    
risposta data chaskes 25.01.2013 - 18:13
1
  1. Incolla il lungo elenco di pacchetti indesiderati dal log di apt in new_file.txt
  2. Esegui perl -pe 's/\(.*?\)(, )?//g' /path/to/new_file.txt
  3. Copia l'output dell'ultimo comando negli appunti o collegalo lì al primo posto .
  4. Esegui sudo apt-get remove [incolla qui il contenuto degli appunti]

Fatto.

Fondamentalmente abbiamo bisogno di formattare l'elenco dei pacchetti dal log di apt in qualcosa che apt-get possa capire. La parentesi, le parole in mezzo e le virgole devono andare così è lì che entra in gioco il perl. Sì, ci sono modi migliori (più efficienti) - ma l'ho fatto, è facile da capire e funziona.

    
risposta data Insperatus 02.02.2013 - 10:59
0

Se hai appena aggiunto un ppa e desideri annullare la conversione, devi eseguire i passaggi descritti di seguito. Comprendi che questo può fallire, quando hai installato altri pacchetti che non vuoi disinstallare. Sono sicuro che questo può essere fatto con una sceneggiatura. Personalmente penso che questo dovrebbe essere una parte di apt, e ci dovrebbe essere una migliore amministrazione di quali pacchetti sono installati a causa delle dipendenze e che vengono installati su richiesta dell'utente.

1) rimuovi il ppa da /etc/apt/sources.list Ricorda la volta che hai aggiunto il ppa. Se sei fortunato, non è necessario essere precisi.

2) fai una lista di cosa reinstallare, dal momento in cui hai installato il PPA: cat /var/log/dpkg.log | grep 'upgrade'

3) fai una lista di cosa rimuovere, dal momento in cui hai installato il PPA: cat /var/log/dpkg.log | grep 'install'

4) rimuovi tutti i pacchetti dal passaggio 3: sudo apt-get remove {elenco dei pacchetti dal passaggio 3}

5) reinstallare tutti i pacchetti dal passaggio 2: sudo apt-get install --reinstall {elenco di pacchetti del passaggio 2}

6) Se le cose sono andate male e non riesci a pensare a una soluzione, rimetti il ​​PPA e reinstalla tutti i pacchetti dai due elenchi.

    
risposta data VincentSC 20.08.2013 - 18:24
0

So che è una domanda piuttosto vecchia, ma sono venuto qui alla ricerca di aiuto e forse posso aiutare qualcuno. Ho avuto una situazione simile a quella di @ Karthik-T dopo aver installato unity8-desktop-session-mir . So che è grande. Ha tirato 233 pacchetti con lui.

Usando autoremove , ne rimuovo solo 34. Il punto è che durante l'installazione di unity8-desktop-session-mir , ha rimosso due pacchetti ( python3-aptdaemon.pkcompat e evolution-data-server-online-accounts ). È indicato in /var/log/apt/history.log , dopo la sezione Install .

Per annullare completamente l'installazione di Unity 8, ho rilasciato quanto segue:

  1. sudo apt-get purge unity8-desktop-session-mir
  2. sudo apt-get --purge autoremove
  3. sudo apt-get install python3-aptdaemon.pkcompat evolution-data-server-online-accounts (ha rimosso 8 pacchetti relativi a Unity 8)
  4. sudo apt-get --purge autoremove

Questo non rimuoverà assolutamente tutto ciò che hai installato prima, ma in alcuni casi è abbastanza buono.

PS: forse il autoremove al secondo passaggio non è necessario, come ho emesso nuovamente al passaggio quattro.

    
risposta data user536838 03.08.2016 - 12:47
0

Tecnicamente le operazioni "rimuovi" o "autoremove" non sono "annullate" sebbene possano essere fatte per fare il lavoro abbastanza bene il più delle volte.

Di default, apt-get lascerà i pacchetti indietro, a meno che tu non specifichi -o APT::Suggests-Important=0 -o APT::Recommends-Important=0

È più affidabile dare un'occhiata a apt history.log e disinstallare tutti i pacchetti installati. Ho creato un piccolo script basato su nodi per facilitare il processo:

link

Inoltre, ecco un altro approccio più manuale per il "rollback" delle modifiche:

link

    
risposta data Rolf 12.05.2018 - 12:22

Leggi altre domande sui tag