it-swarm-eu.dev

Come posso annullare o eseguire il rollback di un comando "apt-get upgrade" su Ubuntu?

C'è un modo in Ubuntu per eseguire il rollback o annullare l'ultimo aggiornamento dopo aver fatto un apt-get upgrade se non ti piacciono i risultati?

26
jjclarkson

Dovevo farlo oggi sul mio sistema Debian. Innanzitutto, ho identificato l'intervallo di tempo in cui si è verificato l'aggiornamento offensivo e ho recuperato le voci del registro fornendo i numeri di versione vecchi e nuovi dei pacchetti aggiornati:

$ awk '$1=="2016-03-20" && $3=="upgrade"' /var/log/dpkg.log
2016-03-20 16:58:22 upgrade libwebkitgtk-3.0-0:AMD64 2.4.9-3 2.4.10-1
2016-03-20 16:58:24 upgrade libjavascriptcoregtk-3.0-0:AMD64 2.4.9-3 2.4.10-1
2016-03-20 16:58:26 upgrade traceroute:AMD64 1:2.0.22-1 1:2.1.0-1
2016-03-20 16:58:33 upgrade ethtool:AMD64 1:4.2-1 1:4.5-1
2016-03-20 16:58:34 upgrade libsdl1.2debian:AMD64 1.2.15+dfsg1-3 1.2.15+dfsg1-4
2016-03-20 16:58:34 upgrade Subversion:AMD64 1.9.3-2+b1 1.9.3-3
2016-03-20 16:58:36 upgrade libsvn1:AMD64 1.9.3-2+b1 1.9.3-3
2016-03-20 16:58:56 upgrade linux-image-AMD64:AMD64 4.3+70 4.4+71
2016-03-20 16:58:56 upgrade linux-libc-dev:AMD64 4.3.5-1 4.4.6-1
2016-03-20 16:59:03 upgrade AMD64-microcode:AMD64 2.20141028.1 2.20160316.1

Successivamente, ho cercato di trovare i file del pacchetto ancora in cache sul disco (fortunatamente per me non avevo eseguito autoclean):

$ awk '$1=="2016-03-20" && $3=="upgrade" {gsub(/:/, "%3a", $5); split($4, f, ":"); print "/var/cache/apt/archives/" f[1] "_" $5 "_" f[2] ".deb"}' /var/log/dpkg.log | xargs -r ls -ld
ls: cannot access '/var/cache/apt/archives/ethtool_1%3a4.2-1_AMD64.deb': No such file or directory
-rw-r--r-- 1 root root   28820 Dec 18  2014 /var/cache/apt/archives/AMD64-microcode_2.20141028.1_AMD64.deb
-rw-r--r-- 1 root root 1978874 Dec 10 18:22 /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_AMD64.deb
-rw-r--r-- 1 root root  185006 Mar 12 00:41 /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_AMD64.deb
-rw-r--r-- 1 root root 1317644 Mar  3 11:30 /var/cache/apt/archives/libsvn1_1.9.3-2+b1_AMD64.deb
-rw-r--r-- 1 root root 7679400 Dec 10 18:22 /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_AMD64.deb
-rw-r--r-- 1 root root    6108 Dec 14 06:59 /var/cache/apt/archives/linux-image-AMD64_4.3+70_AMD64.deb
-rw-r--r-- 1 root root 1075506 Feb  7 21:36 /var/cache/apt/archives/linux-libc-dev_4.3.5-1_AMD64.deb
-rw-r--r-- 1 root root  983174 Mar  3 11:30 /var/cache/apt/archives/Subversion_1.9.3-2+b1_AMD64.deb
-rw-r--r-- 1 root root   53376 Feb 28 18:35 /var/cache/apt/archives/traceroute_1%3a2.0.22-1_AMD64.deb

Sembra che io non abbia il vecchio pacchetto ethtool per qualche ragione. Tuttavia, continuiamo con l'installazione forzata dei vecchi file del pacchetto:

$ Sudo dpkg -i /var/cache/apt/archives/AMD64-microcode_2.20141028.1_AMD64.deb /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_AMD64.deb /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_AMD64.deb /var/cache/apt/archives/libsvn1_1.9.3-2+b1_AMD64.deb /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_AMD64.deb /var/cache/apt/archives/linux-image-AMD64_4.3+70_AMD64.deb /var/cache/apt/archives/linux-libc-dev_4.3.5-1_AMD64.deb /var/cache/apt/archives/Subversion_1.9.3-2+b1_AMD64.deb /var/cache/apt/archives/traceroute_1%3a2.0.22-1_AMD64.deb
dpkg: warning: downgrading AMD64-microcode from 2.20160316.1 to 2.20141028.1
(Reading database ... 139632 files and directories currently installed.)
Preparing to unpack .../AMD64-microcode_2.20141028.1_AMD64.deb ...
Unpacking AMD64-microcode (2.20141028.1) over (2.20160316.1) ...
dpkg: warning: downgrading libjavascriptcoregtk-3.0-0:AMD64 from 2.4.10-1 to 2.4.9-3
Preparing to unpack .../libjavascriptcoregtk-3.0-0_2.4.9-3_AMD64.deb ...
Unpacking libjavascriptcoregtk-3.0-0:AMD64 (2.4.9-3) over (2.4.10-1) ...
dpkg: warning: downgrading libsdl1.2debian:AMD64 from 1.2.15+dfsg1-4 to 1.2.15+dfsg1-3
Preparing to unpack .../libsdl1.2debian_1.2.15+dfsg1-3_AMD64.deb ...
Unpacking libsdl1.2debian:AMD64 (1.2.15+dfsg1-3) over (1.2.15+dfsg1-4) ...
dpkg: warning: downgrading libsvn1:AMD64 from 1.9.3-3 to 1.9.3-2+b1
Preparing to unpack .../libsvn1_1.9.3-2+b1_AMD64.deb ...
Unpacking libsvn1:AMD64 (1.9.3-2+b1) over (1.9.3-3) ...
Preparing to unpack .../libwebkitgtk-3.0-0_2.4.9-3_AMD64.deb ...
Unpacking libwebkitgtk-3.0-0:AMD64 (2.4.9-3) over (2.4.9-3) ...
dpkg: warning: downgrading linux-image-AMD64 from 4.4+71 to 4.3+70
Preparing to unpack .../linux-image-AMD64_4.3+70_AMD64.deb ...
Unpacking linux-image-AMD64 (4.3+70) over (4.4+71) ...
dpkg: warning: downgrading linux-libc-dev:AMD64 from 4.4.6-1 to 4.3.5-1
Preparing to unpack .../linux-libc-dev_4.3.5-1_AMD64.deb ...
Unpacking linux-libc-dev:AMD64 (4.3.5-1) over (4.4.6-1) ...
dpkg: warning: downgrading Subversion from 1.9.3-3 to 1.9.3-2+b1
Preparing to unpack .../Subversion_1.9.3-2+b1_AMD64.deb ...
Unpacking Subversion (1.9.3-2+b1) over (1.9.3-3) ...
dpkg: warning: downgrading traceroute from 1:2.1.0-1 to 1:2.0.22-1
Preparing to unpack .../traceroute_1%3a2.0.22-1_AMD64.deb ...
Unpacking traceroute (1:2.0.22-1) over (1:2.1.0-1) ...
Setting up AMD64-microcode (2.20141028.1) ...
update-initramfs: deferring update (trigger activated)
AMD64-microcode: microcode will be updated at next boot
Setting up libjavascriptcoregtk-3.0-0:AMD64 (2.4.9-3) ...
Setting up libsdl1.2debian:AMD64 (1.2.15+dfsg1-3) ...
Setting up libsvn1:AMD64 (1.9.3-2+b1) ...
dpkg: dependency problems prevent configuration of libwebkitgtk-3.0-0:AMD64:
 libwebkitgtk-3.0-0:AMD64 depends on libwebkitgtk-3.0-common (>= 2.4.9); however:
  Package libwebkitgtk-3.0-common is not installed.

dpkg: error processing package libwebkitgtk-3.0-0:AMD64 (--install):
 dependency problems - leaving unconfigured
Setting up linux-image-AMD64 (4.3+70) ...
Setting up linux-libc-dev:AMD64 (4.3.5-1) ...
Setting up Subversion (1.9.3-2+b1) ...
Setting up traceroute (1:2.0.22-1) ...
update-alternatives: using /usr/bin/traceroute.db to provide /usr/bin/traceroute (traceroute) in auto mode
update-alternatives: using /usr/bin/lft.db to provide /usr/bin/lft (lft) in auto mode
update-alternatives: using /usr/bin/traceproto.db to provide /usr/bin/traceproto (traceproto) in auto mode
update-alternatives: using /usr/sbin/tcptraceroute.db to provide /usr/sbin/tcptraceroute (tcptraceroute) in auto mode
Processing triggers for libc-bin (2.22-3) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for initramfs-tools (0.123) ...
update-initramfs: Generating /boot/initrd.img-4.4.0-1-AMD64
Errors were encountered while processing:
 libwebkitgtk-3.0-0:AMD64

Come diceva il messaggio di errore, uno dei miei pacchetti dipendeva da un pacchetto -common poco prima dell'aggiornamento, ma l'aggiornamento lo rimuoveva (e apt-get non lo trovava più). Fortunatamente, il suo file di pacchetto è ancora in/var/cache/apt, quindi posso semplicemente aggiungerlo alla lista e riprovare:

$ ls -ld /var/cache/apt/archives/libwebkitgtk-3.0-common*
-rw-r--r-- 1 root root 452278 Dec 10 18:22 /var/cache/apt/archives/libwebkitgtk-3.0-common_2.4.9-3_all.deb
$ Sudo dpkg -i /var/cache/apt/archives/AMD64-microcode_2.20141028.1_AMD64.deb /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_AMD64.deb /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_AMD64.deb /var/cache/apt/archives/libsvn1_1.9.3-2+b1_AMD64.deb /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_AMD64.deb /var/cache/apt/archives/linux-image-AMD64_4.3+70_AMD64.deb /var/cache/apt/archives/linux-libc-dev_4.3.5-1_AMD64.deb /var/cache/apt/archives/Subversion_1.9.3-2+b1_AMD64.deb /var/cache/apt/archives/traceroute_1%3a2.0.22-1_AMD64.deb /var/cache/apt/archives/libwebkitgtk-3.0-common_2.4.9-3_all.deb
(Reading database ... 139632 files and directories currently installed.)
Preparing to unpack .../AMD64-microcode_2.20141028.1_AMD64.deb ...
Unpacking AMD64-microcode (2.20141028.1) over (2.20141028.1) ...
Preparing to unpack .../libjavascriptcoregtk-3.0-0_2.4.9-3_AMD64.deb ...
Unpacking libjavascriptcoregtk-3.0-0:AMD64 (2.4.9-3) over (2.4.9-3) ...
Preparing to unpack .../libsdl1.2debian_1.2.15+dfsg1-3_AMD64.deb ...
Unpacking libsdl1.2debian:AMD64 (1.2.15+dfsg1-3) over (1.2.15+dfsg1-3) ...
Preparing to unpack .../libsvn1_1.9.3-2+b1_AMD64.deb ...
Unpacking libsvn1:AMD64 (1.9.3-2+b1) over (1.9.3-2+b1) ...
Preparing to unpack .../libwebkitgtk-3.0-0_2.4.9-3_AMD64.deb ...
Unpacking libwebkitgtk-3.0-0:AMD64 (2.4.9-3) over (2.4.9-3) ...
Preparing to unpack .../linux-image-AMD64_4.3+70_AMD64.deb ...
Unpacking linux-image-AMD64 (4.3+70) over (4.3+70) ...
Preparing to unpack .../linux-libc-dev_4.3.5-1_AMD64.deb ...
Unpacking linux-libc-dev:AMD64 (4.3.5-1) over (4.3.5-1) ...
Preparing to unpack .../Subversion_1.9.3-2+b1_AMD64.deb ...
Unpacking Subversion (1.9.3-2+b1) over (1.9.3-2+b1) ...
Preparing to unpack .../traceroute_1%3a2.0.22-1_AMD64.deb ...
Unpacking traceroute (1:2.0.22-1) over (1:2.0.22-1) ...
Selecting previously unselected package libwebkitgtk-3.0-common.
Preparing to unpack .../libwebkitgtk-3.0-common_2.4.9-3_all.deb ...
Unpacking libwebkitgtk-3.0-common (2.4.9-3) ...
Setting up AMD64-microcode (2.20141028.1) ...
update-initramfs: deferring update (trigger activated)
AMD64-microcode: microcode will be updated at next boot
Setting up libjavascriptcoregtk-3.0-0:AMD64 (2.4.9-3) ...
Setting up libsdl1.2debian:AMD64 (1.2.15+dfsg1-3) ...
Setting up libsvn1:AMD64 (1.9.3-2+b1) ...
Setting up linux-image-AMD64 (4.3+70) ...
Setting up linux-libc-dev:AMD64 (4.3.5-1) ...
Setting up Subversion (1.9.3-2+b1) ...
Setting up traceroute (1:2.0.22-1) ...
update-alternatives: using /usr/bin/traceroute.db to provide /usr/bin/traceroute (traceroute) in auto mode
update-alternatives: using /usr/bin/lft.db to provide /usr/bin/lft (lft) in auto mode
update-alternatives: using /usr/bin/traceproto.db to provide /usr/bin/traceproto (traceproto) in auto mode
update-alternatives: using /usr/sbin/tcptraceroute.db to provide /usr/sbin/tcptraceroute (tcptraceroute) in auto mode
Setting up libwebkitgtk-3.0-common (2.4.9-3) ...
Setting up libwebkitgtk-3.0-0:AMD64 (2.4.9-3) ...
Processing triggers for libc-bin (2.22-3) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for initramfs-tools (0.123) ...
update-initramfs: Generating /boot/initrd.img-4.4.0-1-AMD64

Successo! In realtà questo non ha risolto il mio problema. Ma ha declassato con successo i pacchetti, QED.

5
aecolley

aptitude consente di accedere a tutte le versioni di un pacchetto, se disponibile in base alla gestione dei pacchetti Debian .

5
user28725

Mi sono imbattuto nel blog Blog di Hartman: Come annullare un aggiornamento in Ubuntu Lucid

Il primo passo per annullare l'aggiornamento incriminato era scoprire quali aggiornamenti era esattamente. Dopo aver cercato alcuni forum mi sono imbattuto in un modo per vedere la mia cronologia degli aggiornamenti: Aprire il gestore di pacchetti sinaptici ("Sudo synaptic" nel terminale). Dalla barra dei menu, fai clic su File -> Cronologia e vedrai tutti gli aggiornamenti ordinati per data.

Sfortunatamente, avevo installato circa 20 aggiornamenti oggi e non sapevo quale dei due avesse causato il problema. Cercando tra tutti i pacchetti nominati nell'elenco Cronologia, sono stato in grado di eseguire il downgrade di alcuni alla volta fino a quando il problema non è stato risolto e ho identificato l'aggiornamento offensivo. Per fare questo:

Utilizza la barra di ricerca per trovare il pacchetto che desideri eseguire il downgrade. Una volta trovato ciò che stai cercando, fai clic sul pacchetto per selezionarlo. Dalla barra dei menu, fai clic su Pacchetto -> Forza versione e seleziona la versione precedente del pacchetto dal menu a discesa. Fare clic sul pulsante "Applica" per applicare il downgrade.

5
Manav Brar

Ho anche dovuto annullare un aggiornamento del pacchetto oggi su un paio di server Debian. Ho ripristinato con successo i pacchetti dell'ultima versione usando aptitute, mentre il seguente comando awk è stato molto utile.

( Nel comando seguente sostituisci la stringa della data con la data del giorno da cui in poi vuoi annullare gli aggiornamenti )

awk 'BEGIN{ start="0" } { if($0 ~ /Log started: 2017-06-20/) { start="1"} if ( start == "1" && $0 ~ /Unpacking.*over/) {gsub(/[\s\t)( ]+/,"",$5); printf("%s=%s ", $2 , $5)}}' /var/log/apt/term.log

rivedere l'output per verificare che questi siano i pacchetti e le versioni da ripristinare. Quindi utilizzare aptitute per eseguire il downgrade dei pacchetti elencati:

aptitute install [paste output here]

Spero che questo sia anche un utile risparmio di tempo per gli altri.

3

Non credo, a parte il backup completo dei file system rilevanti (quelli che contengono /, /bin, /lib, /sbin, /usr, /var, /etc e /boot (che potrebbero essere tutti presenti sul filesystem) e il tuo record di avvio) in modo che tu possa rotolare la macchina in seguito.

2
David Spillett

Gestisco i miei server linux in un ambiente virtualizzato ed eseguo un shapshot poco prima di un aggiornamento apt-get o di eventuali aggiornamenti/aggiornamenti di terze parti importanti.

Quindi se qualcosa va storto, semplicemente ripristino e la vita continua fino a quando non riesco a trovare ulteriori informazioni.

Questo è stato molto utile quando ho aggiornato la mia scatola Ubuntu alla 12.04, e in qualche modo MySQL era completamente non funzionale dopo l'aggiornamento. Sono tornato indietro, ho trovato la risposta più tardi, ho riorganizzato l'aggiornamento, ho risolto MySQL e la vita era buona.

2
Brain2000

Usare Apt-Undo è un'opzione possibile, ma può funzionare solo se lo si utilizza per installare e disinstallare i pacchetti. Non sarà di aiuto se hai già disinstallato il software nel modo normale.

http://www.ubuntugeek.com/apt-undo-a-simple-way-of-undoing-apt-actions.htmlhttp://lkubuntu.wordpress.com/2011/07/27/apt-undo-a-simple-way-of-undoing-apt-actions/

1
Rucent88

C'è un progetto chiamato Nexenta che combina il kernel OpenSolaris con lo spazio utente di Ubuntu. Fornisce uno strumento per integrare ZFS di Solaris e apt di Debian per fornire un pulsante di annullamento per gli aggiornamenti. Vedi qui: http://www.nexenta.org/os/TransactionalZFSUpgrades

Più in generale, ciò di cui hai bisogno è un file system di versioning. Btrfs per Linux è in sviluppo.

1
Ryan Thompson

Potresti provare checkinstall

Dopo di te ./configure; fai il tuo programma, CheckInstall eseguirà make install (o qualsiasi cosa tu dica di eseguire) e tieni traccia di ogni file modificato da questa installazione, usando l'eccellente installwatch ...

Quindi forse potresti dirlo per eseguire aptitude safe-upgrade e tenere traccia di ogni modifica apportata dall'upgrade.

1
solarc

L'ho fatto con successo poche volte ma non lo raccomanderò. Questo è quello che ho fatto (se ricordo bene):

1) Rimuovi qualsiasi software non ufficiale che non sia incluso nei repository ubuntu predefiniti (potrebbe non essere richiesto, ma lo suggerisco in quanto potrebbero intralciarti).

2) Modifica /etc/apt/sources.list (e sources.list.d/*) alla versione precedente (commenta tutti i repository non ufficiali).

3) apt-get update/aptitude update

4) Utilizzo di aptitude, downgrade di pacchetti core (come X11, librerie, ecc.). Inizierà a sparare un sacco di pacchetti rotti ... quindi dovrai risolvere ogni caso (devi sapere come farlo in aptitude). Il modo in cui si esegue il downgrade è andando sul pannello delle descrizioni e installando la versione (premendo +) in basso.

5) Ripeti il ​​n. 4 fino a quando tutto il software appartiene alla tua versione di destinazione (controlla la colonna della versione in aptitude).

Queste sono le ragioni per cui non raccomando questo metodo:

  • Ci vuole un sacco di tempo (è un processo doloroso)
  • Alcune applicazioni potrebbero non funzionare correttamente (poiché potrebbero avere ancora la configurazione più recente). In tal caso dovrai "ripulire" e reinstallare.
  • Ci sono aggiornamenti relativi al sistema che non funzioneranno dopo il downgrade
  • È molto rischioso in quanto potresti finire con un sistema inutilizzabile

Consiglio vivamente di eseguire un'installazione pulita e spostare la configurazione a poco a poco. Ci vuole anche del tempo, ma alla fine hai una versione stabile.

La ragione per cui l'ho fatto era principalmente come sperimentazione e come risultato della disperazione.

0
lepe

DPkg :: Pre-Install-Pkgs e ZFS su istantanee di Linux

Se hai installato il tuo sistema operativo su un file system ZFS (ad esempio, ZFS su Linux ), puoi configurare apt-get per eseguire zfs snapshot prima di installare o aggiornare qualcosa , che eseguirà il backup del tuo file system istantaneamente. Potrebbe funzionare con meccanismi di backup diversi dagli snapshot ZFS, ma lascerò il test agli altri.

Il copione

Crea un file come

/etc/apt/apt.conf.d/71backup

con contenuti

// Tell `apt-get' to take a ZFS snapshot before installing or upgrading a
// set of packages:
DPkg::Pre-Install-Pkgs {"/sbin/zfs snapshot rpool/ROOT/[email protected]_$(date '+%Y-%m-%d-%H%M')";};

dove rpool/ROOT/debian deve essere sostituito dal nome del file system ZFS su cui è installato il sistema operativo. Hai dato quel nome quando hai installato il tuo sistema operativo per la prima volta, e può essere trovato sotto l'attributo NAME con il comando

# zfs list -t filesystem
NAME ...
...
rpool/ROOT/debian ...
...

Ma funziona?

Faresti meglio a scattare un'istantanea prima di seguire il consiglio di configurazione di qualche persona di internet casuale:

# zfs snapshot rpool/ROOT/[email protected]$(date '+%Y-%m-%d-%H%M%S')_test
# zfs list -t snapshot | grep rpool
...
rpool/ROOT/[email protected]_test

Eccolo. Se si verifica error: fn_borked, è possibile che il sistema ritorni allo stato attuale beato

# zfs rollback rpool/ROOT/[email protected]_test

Ora provalo installando due piccoli giochi che sono probabilmente disponibili nel tuo repository:

# apt-get install tanglet sudoku
...
# zfs list -t snapshot | grep apt\-get
rpool/ROOT/[email protected]_2018-08-02-033614

Quella istantanea contiene il tuo file system com'era prima che i due giochi fossero installati.

# exit
$ sudoku

Tempi divertenti per la nonna, ma tu odi il sudoku.

$ Sudo -i
# zfs rollback rpool/ROOT/[email protected]_2018-08-02-033614
# exit
$ sudoku
-bash: /usr/games/sudoku: No such file or directory
$ tanglet
-bash: tanglet: command not found

Dopo aver scattato più istantanee, puoi tornare a qualsiasi precedente aggiungendo il flag -r. Nel nostro caso, per esempio, prova

# zfs -r rollback rpool/ROOT/[email protected]_test

Si avverta, tuttavia, che non solo restituirà il proprio file system allo stato in cui era stato inserito rpool/ROOT/[email protected]_test, ma eliminerà anche irrimediabilmente tutte le istantanee successive. Se hai seguito questo post, lo snapshot rpool/ROOT/[email protected]_2018-08-02-033614 non sarebbe più disponibile.

Ho testato apt-get upgrade su un Debian GNU/Linux con

# apt-get -t=oldstable install tanglet sudoku
...
# apt-get upgrade
...
# zfs list -t snapshot | grep apt\-get

Funziona. Un'istantanea è stata creata per il comando install, un'altra per il comando upgrade.

Caveat : l'ho testato per la prima volta oggi e so molto poco sul funzionamento interno di apt. Se questo rompe qualcosa per te o comporti dei rischi, la mia mente benevola non ha preso in considerazione, per favore commentala qui sotto.

0
LaTeX2enub1336