Esiste una distribuzione che supporta il rollback dei pacchetti aggiornati?


23

Esiste uno strumento o un'intera distribuzione che supporta il rollback dei pacchetti modificati dopo un aggiornamento?

Ad esempio: ho aggiornato i pacchetti A, B e C. Dopo aver lavorato con quei pacchetti per diversi giorni, ho riscontrato un bug in B che è un problema.

Mentre invio un rapporto sui bug, dovrei anche effettuare il downgrade di B alla versione precedente in modo da poter finire quello che stavo per fare. Nel frattempo A dipende da B, quindi dovrebbe essere declassato, ma C è indipendente da entrambi, quindi potrebbe rimanere nella sua versione attuale.

C'è uno strumento o una distribuzione che supporta questo?

So che la maggior parte delle distribuzioni ha un modo per eseguire il downgrade di un pacchetto, ma di solito è un po 'impreciso o addirittura impossibile perché il pacchetto precedente è stato rimosso dai repository e in alcuni casi (ad esempio dopo aver aggiornato X server e Mesa) diventa davvero .. . disordinato.


3
Cosa da notare: se la modifica della versione del pacchetto fosse minore, potrebbero essere applicate le risposte seguenti; tuttavia, si noti che cambiamenti di pacchetto maggiori potrebbero aggiornare i dati su disco che non funzioneranno correttamente in seguito nella versione precedente. Ad esempio, mysql-server (o joomla) aggiornamento importante aggiungerà e modificherà i campi e aggiornerà le tabelle SQL, l'aggiornamento inn2 potrebbe cambiare il tipo di database, o alcuni aggiornamenti del kernel distro potrebbero aggiornare ext3 al filesystem ext4, o alcuni aggiornamenti del pacchetto convertiranno i file di configurazione, ecc. L'unica protezione contro tali modifiche "non ripristinabili" sono gli snapshot LVM / btrfs / etc (o backup / ripristino molto più lenti).
Matija Nalis,

@MatijaNalis +1 per averlo menzionato!
Steffen Winkler,

Risposte:


21

NixOS supporta il rollback degli aggiornamenti, anche se, a quanto ho capito, non si spinge fino in fondo: se aggiorni A, B e C in un'unica operazione, puoi ripristinare l'intera operazione, ma non solo A e B. (Dovresti essere in grado di ripristinare A, B e C indietro e quindi aggiornare C ...) Ciò ha senso dal punto di vista transazionale.

Debian (in combinazione con l'archivio snapshot se non hai più i vecchi pacchetti) ti permetterà di effettuare il downgrade di B e strumenti come apto aptitudein molti casi capiranno che anche A deve essere declassato (una volta che li hai convinti che tu non voglio semplicemente aggiornare B). Ma come dici tu tende ad essere un po 'disordinato, e i downgrade dei pacchetti non sono supportati in Debian comunque (il che significa che il più delle volte funzionano, ma se si rompono non è un bug).


1
sembra interessante! La comunità sembra attiva e sana. Ci proverò sicuramente, grazie! Se entro venerdì sera non c'è una risposta migliore / diversa, segnerò la tua risposta.
Steffen Winkler

I rollback su NixOS sono fantastici, ma il vero potere deriva dall'approccio dichiarativo: la descrizione dei pacchetti (e del sistema) può essere presa da un repository git, quindi puoi gestire il tuo sistema nello stesso modo in cui gestiresti un progetto software, inclusi i rami e si fonde ecc. (e per via degli aggiornamenti atomici e della purezza non si rompono mai le cose)
Daniel Jour

Il gestore pacchetti Nix può anche essere eseguito su altre distribuzioni Linux, parallelamente al loro gestore pacchetti "nativo". Funziona anche su OSX e ho visto affermazioni che potrebbe funzionare su Windows. Puoi anche dire a Nix di utilizzare versioni "native" di alcuni pacchetti, piuttosto che installare i propri duplicati, anche se perdi alcune delle sue garanzie in quel modo (ad esempio, potresti non notare che hai sostituito una dipendenza).
Warbo

solo FYI, sono riuscito a installare NixOS sul mio laptop (l'immagine di KDE4 mi ha dato un panico sul kernel, ma l'immagine piccola (~ 390 MB) è stata avviata bene. Per qualcuno che ha installato solo distribuzioni basate su Debian questo è stato piuttosto interessante / divertente. , Non capisco ancora alcune cose sul gestore dei pacchetti, specialmente quando si tratta di ambienti desktop. Ho installato gdm / gnome-shell ma non funzionava. Ho quindi abilitato gnome3 / gdm nel file configuration.nix e sulla ricostruzione entrambi i pacchetti e le loro dipendenze sono stati scaricati di nuovo. Ha funzionato dopo un riavvio ma non capisco perché
Steffen Winkler

@SteffenWinkler Quando si utilizza NixOS, normalmente non si installano le cose nix-env, invece si specificano le cose configuration.nixe poi si eseguono nixos-rebuild switch. Ciò ha il vantaggio che tutta la configurazione del sistema è in un unico posto ed è facile eseguire il backup della configurazione dell'intero sistema (basta eseguire il backup del configuration.nixfile).
Pauan,

15

Su qualsiasi yumdistribuzione basata (ad esempio Red Hat EL , CentOS , ecc.), Puoi:

  1. esaminare la cronologia delle modifiche al sistema utilizzando sudo yum history list

    Loaded plugins: fastestmirror
    ID     | Login user               | Date and time    | Action(s)      | Altered
    ------------------------------------------------------------------------------
        10 | Administrator <admin>    | 2016-03-08 09:08 | Install        |   11   
         9 | Administrator <admin>    | 2016-03-03 16:48 | Install        |    1   
         8 | Administrator <admin>    | 2016-03-03 16:09 | Install        |    5   
         7 | Administrator <admin>    | 2016-02-26 18:13 | Install        |    1   
         6 | Administrator <admin>    | 2016-02-26 15:12 | Install        |   27   
         5 | Administrator <admin>    | 2016-02-26 15:07 | Install        |    1   
         4 | Administrator <admin>    | 2016-02-26 15:05 | Install        |    3  <
         3 | Administrator <admin>    | 2016-02-26 15:03 | Install        |    1 > 
         2 | Administrator <admin>    | 2016-02-26 15:01 | I, U           |   49   
         1 | System <unset>           | 2016-02-26 14:38 | Install        |  296   
    history list
    
  2. controlla i dettagli, usando sudo yum history info 10

  3. rollback a un punto precedente nella cronologia, usando sudo yum history rollback 9

avvertimento

Ci sono alcuni ovvi avvertimenti:

  1. Se il vecchio pacchetto non è più disponibile, sei un brindisi (per citare @vonbrand),
  2. Se installi qualcosa al di fuori di yum, potresti interrompere la cronologia.

Nel mio esempio, quello <nella riga con ID 4(nell'ultima colonna), significa che non posso tornare indietro di quel punto.

sudo yum history rollback 2
Loaded plugins: fastestmirror
Transaction history is incomplete, before 4.
 You can use 'history rollback force', to try anyway.
Error: Failed history rollback, incomplete

3
caratteristica interessante! Ma a causa del "brindisi" non si adatta al mio conto.
Steffen Winkler

AFAIK questo è possibile solo in RHEL / CentOS 6 o versioni successive. Se stai ancora usando RHEL / CentOS 5 sei SOL.
Wildcard l'

E comunque, in un ambiente aziendale con repository gestiti, questo approccio è abbastanza praticabile poiché hai sempre i vecchi pacchetti in giro, anche se devi usare un --enablerepoflag per abilitare un vecchio repository altrimenti in disuso per il downgrade.
Wildcard

Qual è il vantaggio del rollback rispetto al semplice reinstallazione della versione precedente?
Bratchley,

Automazione @Bratchley! si occupa yum semplicemente di mantenere l'elenco dei pacchetti e delle versioni installate e verifica le dipendenze durante la reinstallazione delle vecchie versioni. Ovviamente puoi farlo a mano .
andcoz,

7

Su OpenSUSE puoi facilmente usare Snapper con il filesystem Btrfs .

Se si utilizza la configurazione standard del file system durante l'installazione, è attivata per impostazione predefinita .

Una volta abilitato Snapper, è completamente integrato con yast2ezypper . Creerà un'istantanea del file system ogni volta che installerai o aggiornerai qualcosa (o creerai un utente, ecc.).

Per ripristinare il sistema a una condizione precedente, è necessario solo eseguire yast2 snapper.

inserisci qui la descrizione dell'immagine


strumento interessante davvero. Anche se mi piace abbastanza ext4. Ricerca questo! Sono corretto nel ritenere che Snapper non sia "legato" a OpenSUSE ma a btrfs?
Steffen Winkler,

Snapper è sviluppato da SUSE. È una raccolta di strumenti che automatizza la creazione delle istantanee di Brtfs su "eventi". Suppongo che tu possa usarlo su altre distribuzioni ma non ne sono sicuro. In ogni caso, puoi creare manualmente istantanee di Brtfs su qualsiasi distribuzione.
Andcoz,

3
Tieni presente che se il tuo volume contiene dati, non solo binari e script, anche il rollback di un'istantanea ripristinerà i tuoi dati. Questa opzione sembra rischiosa, più adatta a coloro che conoscono veramente il layout del loro filesystem. Per me, le istantanee sono sempre state per backup coerenti, replica e situazioni di recupero totale.
jimp

1
Si noti inoltre che molti pacchetti hanno file e / o directory in /varmodo che debbano essere ripristinati insieme /anche se si tratta di un fs o sottovolume separato. È molto meglio testare accuratamente un aggiornamento prima di applicarlo ai server di produzione piuttosto che fare affidamento su funzionalità come il rollback dell'aggiornamento del sistema operativo (che è banalmente facile da eseguire a metà corsa ma è un problema estremamente difficile da risolvere correttamente ).
Cas

1
@Jimp Un buon consiglio. In ogni caso, OpenSuSE non abilita lo snapper a meno che non /homesi trovi in ​​un file system separato senza snapshot .
andcoz,

6

AIX è molto bravo a ripristinare gli aggiornamenti. Bene - siamo sul sito Unix / Linux e non hai mai specificato che vuoi Linux :)

Ogni singolo aggiornamento AIX salva tutti i file modificati in una sottodirectory separata all'interno del filesystem / var. L'aggiornamento può essere ripristinato con un semplice comando nativo e il ripristino non ha bisogno che la rete sia attiva, non è così bisogno di alcun supporto / pacchetto, non reinstalla nulla e non dipende da alcun tecnologia snapshot - l'effetto è semplicemente che i file riappariranno come prima dell'aggiornamento.

Come bonus, c'è un banale comando nativo mksysb per creare un backup di sistema autonomo avviabile. Il file che può essere semplicemente avviato su un sistema completamente disfunzionale che non si avvia a causa di un malfunzionamento / corruzione.

Ed è tutta una tecnologia collaudata con decenni di storia :)


Ti capita spesso di riscontrare problemi con i programmi ripristinati in quel modo in uno stato e rollback incoerenti (ad esempio, un database il cui motore di archiviazione è cambiato o un servizio che è passato a un nuovo formato di file di configurazione) o ci sono buoni modi per aggirare quella?
Josh Rumbut,

1
Questo è il modello che ho usato quando ho costruito un rudimentale sistema di gestione dei pacchetti per software tradizionalmente distribuito in tarball compressi / compressi. Ogni volta che installava aggiornamenti, creava innanzitutto un "pacchetto di rollback" di tutto ciò che doveva essere modificato. Questo pacchetto di rollback potrebbe quindi essere utilizzato per ripristinare, a condizione che nel frattempo non siano stati applicati altri pacchetti di aggiornamento. Mi sono spesso chiesto se i gestori di pacchetti corretti potessero farlo, ma dati i vincoli del rollback solo in ordine inverso ... forse dovremmo semplicemente usare git.
Monty Harder,

accidenti. Avrei dovuto specificare che intendevo distribuzioni GNU / Linux. Ma è interessante notare che AIX sembra essere in grado di eseguire "programmi" GNU / Linux al giorno d'oggi, suppongo che darò un'occhiata più da vicino.
Steffen Winkler,

5

In Fedora (e sono sicuro anche in altre distribuzioni) puoi chiedere di tornare a una versione precedente:

dnf downgrade <packages>

ti procura la versione penultima del pacchetto e puoi richiederne una specifica:

dnf downgrade <package>.<version>

Funziona solo se i pacchetti sono ancora disponibili nei repository. La funzionalità non è inaudita, in alcun modo. Ha i suoi intoppi, se parte dell'aggiornamento doveva cambiare le configurazioni, il rollback non sarà necessariamente alla versione passata esatta.


Puoi anche usare la cronologia dnf undo #thing per annullare
Clearer

This only works if the package(s) are still available in the repositories. sì, questo è esattamente il problema. Sono un po 'sorpreso che non ci sia una soluzione "più ampia" per questo, specialmente con la quantità di distribuzioni a rilascio progressivo. A partire da ora sembra che NixOS sia la mia migliore opzione, o avrei bisogno di un qualche tipo di strumento di imaging del sistema che funzioni solo sulle differenze e che può ripristinare il sistema in un determinato momento nel corso degli ultimi 20 (?) Aggiornamenti.
Steffen Winkler

@SteffenWinkler, se il vecchio pacchetto non è più disponibile, sei un brindisi. Ovviamente. A meno che tu non abbia una sorta di backup locale.
vonbrand

2
@MTilsted, perché è già troppo vecchio? I repository non contengono tutte le versioni dall'alba dei tempi.
vonbrand

1
In dnf.conf (uguale a yum.conf) ha keepcache = true Sono disponibili vecchi pacchetti, poiché la cache di lond non viene cancellata manualmente. Ma è andato alla cache del pacchetto "bloat".
mmv-ru,

2

Arch Linux supporta anche i pacchetti di downgrade e il kernel. È inoltre possibile installare gli strumenti downgradere downgradeper automatizzare il processo. Anche la soluzione btrfs funziona, l'ho già usata per fare un rollback manuale prima.

Come faccio a ripristinare il mio sistema:

sudo -i
mount /dev/sda3 /mnt/hd #mount the top btrfs subvolume
ls #find the version you want
mv @ @-old #move the '/' subvolume (I named mine '@')
btrfs sub snap @-<date> @ #replace @ with the backup from <date>
sync
reboot #the changes will take effect once the system restarts

Un vantaggio di btrfs è che puoi usare sottovolumi e "partizioni" dinamiche. Ad esempio, ho un sottovolume per / (chiamato @), / tmp (@tmp) e / home (@home). È quindi facile eseguire il backup e il rollback di uno di questi. Ho / tmp in un sottovolume separato perché il backup con il resto del sistema sembra inutile, poiché viene cancellato su quasi ogni riavvio.


Ho seguito un link nel wiki e sono arrivato qui . Sembra piuttosto bello e dal controllo del repository, ci sono file che risalgono al 2013! Perché usare il modo btrfs quando esiste? A causa dei file che sono "aggiornati"? O c'è qualche altra ragione?
Steffen Winkler,

Ora sono passato permanentemente ad Arch Linux dopo aver fatto una breve visita a NixOS. (Arch Linux) non è così instabile come ho sempre pensato che fosse e ha una comunità sana.
Steffen Winkler,

@SteffenWinkler È corretto. Inoltre, le opzioni di downgrade di Arch non sono supportate "ufficialmente" e il downgrade probabilmente ignorerà le dipendenze (che possono diventare piuttosto disordinate se qualcosa va storto).
Caleb Reister,

2

Uso Arch Linux e memorizza tutti i pacchetti scaricati in /var/cache/pacman/pkg/modo da poter eseguire il downgrade di qualsiasi pacchetto in qualsiasi momento (di cui non si è in grado di avviarsi, utilizzare un live usb). Da Arch Wiki :

pacman -U <file_name_of_the_package>

Per impedire l'aggiornamento del pacchetto, includere il nome del pacchetto in /etc/pacman.conf, ad esempio:

IgnorePkg=linux

Per risparmiare spazio è possibile cancellare la cartella cache con:

pacman -Sc

Che eliminerà tutti i pacchetti più vecchi e manterrà il più recente, o userà -Sccper rimuovere tutti.


Si noti che questo (ignorando i pacchetti) equivale a un aggiornamento parziale, che non è supportato ...
jasonwryan

Ho seguito un link nel wiki e sono arrivato qui . Sembra piuttosto bello e dal controllo del repository, ci sono file che risalgono al 2013! Perché usare il modo btrfs quando esiste? A causa dei file che sono "aggiornati"? O c'è qualche altra ragione?
Steffen Winkler,
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.