C'è un modo in Ubuntu per ripristinare o annullare l'ultimo aggiornamento dopo aver fatto un apt-get upgrade
se non ti piacciono i risultati?
C'è un modo in Ubuntu per ripristinare o annullare l'ultimo aggiornamento dopo aver fatto un apt-get upgrade
se non ti piacciono i risultati?
Risposte:
aptitude
ti dà accesso a tutte le versioni di un pacchetto se disponibile secondo la gestione dei pacchetti Debian .
Mi sono imbattuto nel Blogstatic Blog di Hartman: come annullare un aggiornamento in Ubuntu Lucid
Il primo passo per annullare l'aggiornamento offensivo è stato scoprire quali aggiornamenti erano esattamente. Dopo aver cercato in alcuni forum mi sono imbattuto in un modo per vedere la mia cronologia degli aggiornamenti: Apri il gestore pacchetti synaptic ("sudo synaptic" nel terminale). Dalla barra dei menu, fai clic su File -> Cronologia e vedrai tutti gli aggiornamenti ordinati per data.
Purtroppo oggi ho installato circa 20 aggiornamenti e non sapevo quale avesse causato il problema. Cercando in ciascuno dei pacchetti indicati nell'elenco Cronologia, sono stato in grado di eseguire il downgrade alcuni alla volta fino a quando il problema non è stato risolto e ho identificato l'aggiornamento offensivo. Per farlo:
Utilizzare la barra di ricerca per trovare il pacchetto che si desidera effettuare il downgrade. Una volta trovato quello che stai cercando, fai clic sul pacchetto per selezionarlo. Dalla barra dei menu, fare clic su Pacchetto -> Forza versione e selezionare la versione precedente del pacchetto dal menu a discesa. Fai clic sul pulsante "Applica" per applicare il downgrade.
Ho dovuto 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 precedente e nuova 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 provato a trovare i file del pacchetto ancora memorizzati nella 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 non abbia il vecchio pacchetto di ethtool per qualche motivo. Continuiamo comunque installando forzatamente i file del pacchetto più vecchi:
$ 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 comune poco prima dell'aggiornamento, ma l'aggiornamento lo ha rimosso (e apt-get non lo trova più). Fortunatamente, il suo file di pacchetto è ancora in / var / cache / apt, quindi posso semplicemente aggiungerlo all'elenco 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.
Ho anche dovuto annullare un aggiornamento del pacchetto oggi su un paio di server Debian. Ho ripristinato con successo i pacchetti all'ultima versione usando aptitute, mentre il seguente comando awk è stato molto utile.
( Nel comando seguente sostituire la stringa della data con la data del giorno da cui si desidera ripristinare 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 risparmiatore di tempo per gli altri.
Credo che non, oltre a fare un backup completo dei file system rilevanti (quelli che contengono /
, /bin
, /lib
, /sbin
, /usr
, /var
, /etc
e /boot
(che possono essere tutti su su filesystem) e il record di avvio) in modo da poter rotolare la macchina di nuovo in seguito.
/var
) e tutti i file di configurazione rilevanti memorizzati. È quindi possibile provare a forzare un rollback dicendo esplicitamente dpkg
di installare tali versioni. Potresti avere del lavoro da fare in seguito quando vuoi che avvengano i normali aggiornamenti, quindi non è qualcosa che consiglierei.
Eseguo i miei server linux in un ambiente virtualizzato ed eseguo uno shapshot appena prima di un aggiornamento apt-get o qualsiasi altro aggiornamento / aggiornamento di terze parti.
Quindi se qualcosa va storto, semplicemente torno e la vita continua fino a quando non riesco a trovare ulteriori informazioni.
Questo è stato molto utile quando ho aggiornato la mia casella Ubuntu a 12.04, e in qualche modo MySQL era completamente non funzionante dopo l'aggiornamento. Sono tornato indietro, ho trovato la risposta più tardi, ho eseguito nuovamente l'aggiornamento, riparato MySQL e la vita era buona.
Puoi provare checkinstall
Dopo di te ./configure; crea il tuo programma, CheckInstall eseguirà make install (o qualunque cosa tu gli dica di eseguire) e terrà traccia di ogni file modificato da questa installazione, usando l'eccellente installwatch ...
Quindi forse potresti dirgli di eseguire aptitude safe-upgrade e terrebbe traccia di tutte le modifiche apportate dall'aggiornamento.
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 al fine di fornire un pulsante di annullamento per gli aggiornamenti. Vedi qui: http://www.nexenta.org/os/TransactionalZFSUpgrades
Più in generale, è necessario un file system con controllo delle versioni. Btrfs per Linux è in fase di sviluppo.
L'utilizzo di Apt-Undo è un'opzione possibile, ma può funzionare solo se lo si utilizza per installare e disinstallare i pacchetti. Non sarà utile se hai già disinstallato il software in modo normale.
http://www.ubuntugeek.com/apt-undo-a-simple-way-of-undoing-apt-actions.html http://lkubuntu.wordpress.com/2011/07/27/apt-undo-a -Semplice-way-of-disfare-apt-actions /
L'ho fatto con successo poche volte ma non lo consiglio. Questo è quello che ho fatto (se ricordo bene):
1) Rimuovere qualsiasi software non ufficiale che non è incluso nei repository ubuntu predefiniti (potrebbe non essere necessario, ma lo consiglio perché potrebbero ostacolarti).
2) Cambia il tuo /etc/apt/sources.list (e sources.list.d / *) nella versione precedente (commenta tutti i repository non ufficiali).
3) apt-get update / aptitude update
4) Usando aptitude, esegui il downgrade dei pacchetti core (come X11, librerie, ecc.). Inizierà a lanciare molti pacchetti rotti ... quindi dovrai risolvere ogni caso (devi sapere come farlo in attitudine). Il modo in cui esegui il downgrade è andando al pannello della descrizione e installando la versione (premendo +) in basso.
5) Ripeti # 4 fino a quando tutto il software appartiene alla tua versione di destinazione (controlla nella colonna della versione in aptitude).
Questi sono i motivi per cui non consiglio questo metodo:
Consiglio vivamente di fare un'installazione pulita e spostare la configurazione a poco a poco. Ci vuole anche tempo, ma alla fine hai una versione stabile.
Il motivo per cui l'ho fatto è stato principalmente come sperimentazione e come risultato della disperazione.
Se hai installato il tuo sistema operativo su un file system ZFS (ad esempio, ZFS su Linux ), puoi configurare apt-get
l'esecuzione zfs snapshot
prima di installare o aggiornare qualsiasi cosa, il quale eseguirà immediatamente il backup del tuo file system. Potrebbe funzionare con meccanismi di backup diversi dalle istantanee di ZFS, ma lascerò questo test ad altri.
Crea un file come
/etc/apt/apt.conf.d/71backup
con i 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/debian@apt-get_$(date '+%Y-%m-%d-%H%M')";};
dove rpool/ROOT/debian
dovrebbe essere sostituito dal nome del file system ZFS su cui è montato il sistema operativo. Gli hai dato quel nome quando hai installato il tuo sistema operativo per la prima volta e puoi trovarlo sotto l'attributo NAME
con il comando
# zfs list -t filesystem
NAME ...
...
rpool/ROOT/debian ...
...
Faresti meglio a scattare un'istantanea prima di seguire i consigli di configurazione di qualche persona di Internet a caso:
# zfs snapshot rpool/ROOT/debian@$(date '+%Y-%m-%d-%H%M%S')_test
# zfs list -t snapshot | grep rpool
...
rpool/ROOT/debian@2018-08-01-230001_test
Eccolo. Dovrebbe error: fn_borked
verificarsi presto, è possibile riportare il sistema al suo stato attuale felice con
# zfs rollback rpool/ROOT/debian@2018-08-01-230001_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/debian@apt-get_2018-08-02-033614
Lo snapshot contiene il tuo file system com'era prima dell'installazione dei due giochi.
# exit
$ sudoku
Momenti divertenti per la nonna, ma tu odi il sudoku.
$ sudo -i
# zfs rollback rpool/ROOT/debian@apt-get_2018-08-02-033614
# exit
$ sudoku
-bash: /usr/games/sudoku: No such file or directory
$ tanglet
-bash: tanglet: command not found
Dopo che sono state scattate più istantanee, è possibile ripristinare qualsiasi precedente aggiungendo il -r
flag. Nel nostro caso, ad esempio, prova
# zfs -r rollback rpool/ROOT/debian@2018-08-01-230001_test
Tieni presente, tuttavia, che non solo questo ripristinerà il tuo file system allo stato in cui si trovava al momento dello rpool/ROOT/debian@2018-08-01-230001_test
scatto, ma eliminerà anche irrimediabilmente tutte le istantanee successive. Se seguissi questo post, l'istantanea rpool/ROOT/debian@apt-get_2018-08-02-033614
sarebbe sparita.
Ho provato 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. È stata creata un'istantanea per il install
comando, un'altra per il upgrade
comando.
Avvertenza : ho provato questo per la prima volta oggi e so molto poco sui meccanismi interni di apt. Se questo dovesse rompere qualcosa per te o comportare dei rischi che la mia mente benefica non ha preso in considerazione, commenta qui sotto.