Voglio gestire gli aggiornamenti del mio sistema Linux in modo simile a quello di Git , potendo andare avanti e indietro all'interno di "revisioni". Come potrei farlo?
Voglio gestire gli aggiornamenti del mio sistema Linux in modo simile a quello di Git , potendo andare avanti e indietro all'interno di "revisioni". Come potrei farlo?
Risposte:
Probabilmente dovresti guardare NixOS , che usa il gestore dei pacchetti Nix .
NixOS è una distribuzione GNU / Linux che mira a migliorare lo stato dell'arte nella gestione della configurazione del sistema. Nelle distribuzioni esistenti, azioni come gli aggiornamenti sono pericolose: l'aggiornamento di un pacchetto può causare la rottura di altri pacchetti, l'aggiornamento di un intero sistema è molto meno affidabile della reinstallazione da zero, non è possibile verificare in modo sicuro quali saranno i risultati di una modifica della configurazione, non è possibile annullare facilmente le modifiche al sistema e così via.
Quello che probabilmente stai cercando sono chiamati strumenti di gestione della configurazione . Ci sono molti tra cui scegliere ma ed è molto soggettivo quale è il migliore in qualsiasi situazione.
Personalmente ho trovato Puppet abbastanza facile da iniziare, ma altre scelte popolari sono Salt e Ansible .
Questo è probabilmente eccessivo per la tua domanda, ma il modo più semplice per essere in grado di ripristinare modifiche a livello di sistema / enormi è lo snapshot:
https://en.wikipedia.org/wiki/Snapshot_%28computer_storage%29
Non hai menzionato le specifiche del tuo rig, ma visto che hai familiarità con Git, non sarebbe troppo difficile immaginare che potresti essere interessato a utilizzare un file system più complesso. Se dovessi usare un file system di nuova generazione (ignora il nome click-bait-y), saresti in grado di "riavvolgere" completamente il tuo intero sistema con un semplice comando inserito nel tuo terminale. Tutte le modifiche apportate verranno ripristinate con pochissimo ritardo / sforzo. ZFS sarebbe la tua scommessa migliore e potresti fare riferimento a questo fantastico articolo di Ars per vedere se potrebbe valere la pena per te (ci sono anche molte altre fantastiche funzioni):
A seconda di cosa intendi per "aggiornamenti", potresti essere interessato a strumenti di gestione della configurazione come etckeeper , che ti consentono di registrare automaticamente le modifiche alla configurazione del sistema e di tornare alle configurazioni precedenti.
Se Git è uno strumento familiare e se per "aggiornamenti" intendi "aggiornamenti alla configurazione del sistema" anziché "aggiornamenti ai pacchetti di sistema" o "aggiornamenti a tutti i file archiviati sul server", questo potrebbe essere quello che stai cercando per.
Vale la pena considerare che se si utilizzano strumenti come Puppet, Ansible, Etckeeper ecc., Non è sempre possibile "tornare indietro" in modo pulito senza perdita di dati, a meno che non si esegua tutto il maiale (ad esempio lo snapshot, come indicato in un'altra risposta). L'approccio corretto dipenderà dalla tua situazione (ad esempio lo snapshot non sarebbe appropriato per un sistema di produzione in cui potresti perdere gli ordini dei clienti durante il rollback).
Ho usato OpenVMS in passato, viene fornito di default con un file system di versioning .
Se strumenti come le marionette non vanno abbastanza lontano, forse un file system con versioning è quello che stai cercando.
Se vuoi davvero gestire l'intero sistema (inclusa la versione del kernel) come git, stai cercando NixOS .
Per una versione meno coinvolta è possibile utilizzare il gestore dei pacchetti di NixOS, nix, da quasi tutti i unix. Nix può essere installato come utente semplice, sebbene sia più semplice installarlo come root. Una volta installato nix, è possibile utilizzarlo per installare i pacchetti come utente non privilegiato e funziona perfettamente insieme al gestore pacchetti esistente, senza conflitti. È anche molto facile rimuovere completamente nix dal tuo sistema, quindi non ci sono davvero scuse per non provarlo. ;-)
Per rispondere direttamente alla tua domanda, Nix definisce l'intero sistema installato come un ambiente, che è, molto simile a un commit git, un puntatore a una serie di puntatori a versioni molto specifiche di tutti i pacchetti installati.
Quando Nix aggiorna un pacchetto, crea un nuovo ambiente, che punta a una nuova serie di puntatori a pacchetti (principalmente a quelli esistenti, per pacchetti che non sono stati aggiornati; di nuovo, questo è molto simile a un nuovo commit git, che per lo più punta a file invariati precedenti e alcune nuove versioni di file modificati).
Ovviamente, è banale passare a una versione precedente dell'ambiente e, credo, fork (ovvero creare un nuovo ambiente basato su uno precedente a quello precedente). Un ambiente può essere caricato per una shell specifica (è, in effetti, l'insieme delle variabili di ambiente disponibili per una shell, da cui il nome), quindi è possibile avere facilmente ambienti diversi per progetti diversi sulla stessa macchina. Niente più problemi di dipendenza perché un progetto non correlato necessita di un'altra versione di una libreria!
NixOS lo porta al livello successivo e gestisce l'intero computer, incluso il kernel, in modo simile, consentendo aggiornamenti a rischio molto basso dell'intera macchina.
Non ho ancora finito di leggerli tutti, ma raccomando le pillole Nix di Lethalman come introduzione a Nix.
Se sei un tipo sperimentale, potresti provare a archiviare l'intero file system in un repository git locale. Questo sarebbe ... interessante, penso.
git init
nella directory principale /
git add -A .
git commit -m "Initial Snapshot"
git commit -Am "Snapshot X"
o similiAlcuni benefici sarebbero:
gitk
egit diff
Alcune stranezze potrebbero includere:
git
si spera che funzioni come previsto quando ci si trova in una directory del codice sorgente nidificata nel git
contenitore principale .