Posso ripristinare un aggiornamento apt-get se qualcosa va storto?


53

C'è un modo, prima di avviare un aptitude upgradeo apt-get upgrade, di impostare qualcosa in modo da poter "facilmente" ripristinare il sistema allo stato "apt" che era prima dell'aggiornamento effettivo, se qualcosa va storto?

Cioè, ad esempio, reinstallare la vecchia versione dei pacchetti che sono stati aggiornati durante il processo.

(EDIT) Alcuni suggerimenti : so che etckeeperad esempio usa qualche hook in aptmodo da essere avvisato ogni volta che aptinstalla o disinstalla un pacchetto. Suppongo che potrebbe esserci un qualche tipo di script che potrebbe salvare l'elenco dei pacchetti appena installati e il loro numero di versione precedente per poterli reinstallare dalla aptcache ( /var/cache/apt/archives). C'è anche checkinstallche può tenere traccia delle modifiche ai file ...

Qualche dettaglio su come raggiungerlo correttamente?


Non sono a conoscenza del fatto che apt abbia qualcosa del genere incorporato, dovresti tenere traccia dei numeri dei pacchetti attualmente installati ecc. IMHO più semplice solo per ripristinare il backup di ieri, se necessario.
Anthon,

Risposte:


46

Ho dovuto solo ora trovare una risposta a questo, perché l'ultimo apt-get upgradesu un server Debian ha reso impossibile l'avvio del kernel più recente oltre una scatola occupata, non riuscendo a montare la partizione root zfs. Almeno un kernel più vecchio poteva ancora avviarsi, ma era incompatibile con altri software. Quindi la necessità di un rollback.

La risposta breve: è possibile utilizzare il comando seguente:

$ apt-get -s install $(apt-history rollback | tr '\n' ' ')

se fa quello che vuoi rimuovere -sed eseguirlo di nuovo. Ecco i passaggi che ho preso per farlo funzionare correttamente:

  1. Ho temporaneamente tagliato il mio /var/log/dpkg.logper lasciare solo l'aggiornamento di oggi

  2. Ho installato il piccolo script apt-historyda qui in poi ho ~/.bashrcfunzionato

    $ apt-history rollback > rollback.txt
    ...
    libzfs2:amd64=0.6.4-4~wheezy 
    zfsutils:amd64=0.6.4-4~wheezy 
    zfs-initramfs:amd64=0.6.4-4~wheezy
    ...
    
  3. Questo fornisce un elenco ben formattato di pacchetti con versione su cui eseguire il roll-back alimentandolo apt-get install. Tagliare questo elenco come necessario in un editor di testo ed eseguirlo (con prima -sper il funzionamento a secco):

    $ apt-get -s install $(cat rollback.txt | tr '\n' ' ')
    $ apt-get install $(cat rollback.txt | tr '\n' ' ')
    

Apt avviserà dei downgrade previsti. Per evitare che questo rollback venga sovrascritto dal prossimo aggiornamento, i pacchetti dovranno essere bloccati, fino a quando il problema originale non verrà risolto. Ad esempio con:apt-mark hold zfsutils libzfs2 ...


function apt-history(){
    case "$1" in
      install)
            cat /var/log/dpkg.log | grep 'install '
            ;;
      upgrade|remove)
            cat /var/log/dpkg.log | grep $1
            ;;
      rollback)
            cat /var/log/dpkg.log | grep upgrade | \
                grep "$2" -A10000000 | \
                grep "$3" -B10000000 | \
                awk '{print $4"="$5}'
            ;;
      *)
            cat /var/log/dpkg.log
            ;;
    esac
}

Bello trovare quelle risorse! Bella risposta!
L0j1k,

1
Il apt-history rollbackcomando può essere sostituito con qualcosa di simile awk '$3 ~ /upgrade/ {print $4"="$5}' dpkg.log.
Totor,

Con la seguente estensione, corrisponde solo agli aggiornamenti della data specificata (quindi non è necessario modificare il registro prima):awk '$1 == "2018-09-07" && $3 == "upgrade" {print $4"="$5}' /var/log/dpkg.log
luator

1
Dopo aver ritagliato dpkg.log ricevo un sacco di messaggi versione non trovata, vale a dire E: Version '5.24.1-3+deb9u3' for 'libperl5.24' was not found. Sto usando Debian Stretch per Raspian.
dps,

7

I file di registro /var/log/apt/history.loge /var/log/apt/term.logsono le cose più vicine disponibili per la descrizione:

Suppongo che potrebbe esserci un qualche tipo di script che potrebbe salvare l'elenco dei pacchetti appena installati e il loro numero di versione precedente

history.logfornisce un elenco riepilogativo di ogni azione eseguita aptnel seguente formato:

Start-Date: 2013-06-21  16:05:05
Commandline: apt-get install rdiff-backup
Install: python-pyxattr:i386 (0.5.0-3, automatic), rdiff-backup:i386 (1.2.8-6), python-pylibacl:i386 (0.5.0-3, automatic
), librsync1:i386 (0.9.7-7, automatic)
End-Date: 2013-06-21  16:05:42

In particolare, fornisce un elenco di pacchetti appena installati o di pacchetti rimossi. Inoltre, term.logmostra ciò che è effettivamente apparso sul terminale durante l'azione, in modo da mostrare le versioni vecchie e nuove dei pacchetti. Un campione casuale dal mio history.log:

Preparing to replace gnupg 1.4.10-4 (using .../gnupg_1.4.10-4+squeeze1_i386.deb) ...
Unpacking replacement gnupg ...
Processing triggers for install-info ...
Processing triggers for man-db ...
Processing triggers for doc-base ...
Processing 1 changed doc-base file(s)...
Registering documents with scrollkeeper...
Setting up gnupg (1.4.10-4+squeeze1) 

aptNon è consigliabile provare a eseguire il rollback automatico, ma se si utilizzano i registri, dovrebbe essere possibile farlo manualmente a meno che l'azione non riuscita abbia interrotto qualcosa che interferisce con aptle azioni, ad esempio un database dpkg incoerente. In tal caso, dovrai risolvere il problema prima di procedere.


4

No, apt non è così facile.

L'opzione migliore è un tipo di istantanea. Gli snapshot del filesystem tramite lvm / zfs / btrfs o gli snapshot dell'istanza se si utilizza una macchina virtuale di qualche tipo.

L'unica altra opzione è fare un inventario dei pacchetti installati (dpkg -l) prima e dopo. Se vuoi "tornare indietro" devi installare esplicitamente la versione precedente.


Conosco la versione esatta, ma apt rifiuta: apt install openssl=1.0.2g-1ubuntu4.12risulta E: Version '1.0.2g-1ubuntu4.12' for 'openssl' was not found. Ho appena eseguito l'aggiornamento 1.0.2g-1ubuntu4.13e mi chiedo se questo sta causando alcuni problemi CORS / CSP ora
Csaba Toth,

Potrebbe non essere più nel repository.
bahamat,
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.