Come posso ottenere una gestione degli aggiornamenti simile a "Git" per Linux?


14

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?


Come amministratore di sistemi Linux / Unix che si occupa degli aspetti più profondi del funzionamento dei sistemi Linux / Unix, non riesco a immaginare che tipo di modifiche si dovrebbero apportare al proprio sistema per richiedere un sistema di revisione simile a Git. La cosa principale che ottiene modifiche su questi sistemi sono le installazioni di software e i file di configurazione. I file di configurazione sono facili da salvare manualmente e tenere traccia di. E cade in una mentalità "imposta e dimentica".
Jake Gould il

Risposte:


12

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.


12

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 .


Ho già usato fantoccio in vagabondo, ma non ricordo di essere mai stato in grado di annullare alcune cose disordinate che ho fatto nel mio sistema operativo ...
Patrick Villela

4
Gli strumenti di gestione della configurazione generalmente non forniscono funzionalità di "rollback". Il "rollback" sta spazzando via il sistema e utilizzando lo strumento di gestione della configurazione per riconfigurare il sistema. Ad esempio, è possibile utilizzare uno strumento di provisioning bare metal come Razor per formattare e reinstallare il sistema operativo. Quindi, passa a uno strumento come Chef per applicare la configurazione.
ctc,

2
La strega è destinata? :)
Ruslan,

Cfengine è morto? Ricordo di aver cercato di ottenere qualcosa di cui ero felice da usare sul mio piccolo ammasso quando ero l'amministratore di sistema. Ma non ho mai finito per dispiegarlo.
Peter Cordes,

Con uno di questi strumenti, ottieni il controllo della versione mantenendo i tuoi file di configurazione master in git. Quello che ottieni da loro è centralizzare e ridurre la configurazione di un intero sistema in uno dei pochi file di testo.
Peter Cordes,

10

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):

http://arstechnica.com/information-technology/2014/02/ars-walkthrough-using-the-zfs-next-gen-filesystem-on-linux/


2
Un'altra opzione è btrfs, che BTW ha il supporto aziendale ufficiale da Ubuntu, SUSE> = 11, Oracle. Sebbene sia ancora in fase di sviluppo e blahblahblah, è affidabile per l'uso quotidiano del desktop e funziona dannatamente bene.
Ignis,

1
@ignis: Di recente ho riscontrato un Btrfs incoerente e non recuperabile nonostante un RAID 5 sottostante e ho sentito parlare di altre due istanze al lavoro. Quindi non trascurerei leggermente quegli avvertimenti sul fatto che non fosse pronto per l'uso in produzione. Non volevo crederlo da solo prima di incontrarlo. Potrebbe essere stato a causa della RAM insufficiente, forse, che è uno dei motivi per cui le persone ZFS consigliano vivamente l'uso della memoria ECC. Immagino che lo stesso possa valere per Btrfs.
MvG

6

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).



1

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.


0

Se sei un tipo sperimentale, potresti provare a archiviare l'intero file system in un repository git locale. Questo sarebbe ... interessante, penso.

  1. git init nella directory principale /
  2. Costruisci un .gitignore per il root che ignora le directory i cui contenuti cambiano spesso o non devono essere archiviati:
    • / dev
    • /correre
    • / tmp
    • / proc
    • / Smarrita +
    • ...
  3. Aggiungi ai tipi di file specifici di .gitignore che potresti voler escludere:
    • * .tmp
    • * .log
    • ...
  4. Aggiungi i tuoi contenuti iniziali con git add -A .
  5. Conferma l'istantanea con git commit -m "Initial Snapshot"
  6. Usa il tuo computer
  7. Aggiungi periodicamente istantanee git commit -Am "Snapshot X"o simili

Alcuni benefici sarebbero:

  • Strumenti familiari per la cronologia delle revisioni, come gitkegit diff
  • Qualsiasi livecd o altro sistema operativo con git potrebbe ripristinare i tuoi backup
  • Potresti spingere l'intero sistema su github e ripristinarlo su altre macchine o condividerlo con le persone ...?
  • La ramificazione sarebbe veloce e intuitiva
  • /, la directory git nella tua radice ispirerebbe la sicurezza di abusare del tuo sistema ed essere più avventurosa, simile al codice sorgente
  • Ogni istantanea successiva sarebbe relativamente piccola rispetto ad alcune altre soluzioni di backup
  • Sarebbe fantastico per rivedere e tenere traccia delle modifiche alla configurazione in / etc
  • Potresti fare da pioniere e chiamarlo linit - linux in git.
  • Infamia

Alcune stranezze potrebbero includere:

  • È improbabile che tu possa ripristinare / estrarre filiali o revisioni con cambiamenti significativi o modifiche ai file che sono in uso durante l'esecuzione del sistema - forse hai un USB di avvio minimo con git a questo scopo
  • Impegni iniziali piuttosto grandi
  • Controllato nelle successive directory .git -?
  • gitsi spera che funzioni come previsto quando ci si trova in una directory del codice sorgente nidificata nel gitcontenitore principale .
  • / etc / passwd e / etc / shadow dovrebbero essere inclusi nel repository per mantenere e tracciare gli utenti e ripristinarli su altre macchine, ma ora chiunque abbia accesso alla vista (forse su github) può vedere informazioni sensibili come contenuti, permessi, e hash delle password dei tuoi utenti.

3
Questo approccio molto probabilmente fallirebbe in modo orribile, poiché git non gestirà correttamente le autorizzazioni. Supponendo che tu faccia tutto ciò come root, essenzialmente chown l'intero file system alla radice e che, a sua volta, interromperà le operazioni di scrittura. Ad esempio, fai uno snapshot, lo ripristini, il proprietario della directory di log di apache diventa root (invece di http), apache non può scrivere nella directory, non si avvia. Lo so, perché ho provato una cosa simile, ma su scala molto più piccola, e anche su questo, ci sono stati problemi.
Tuncay Göncüoğlu,

Dai un'occhiata a Nix, come suggerito in un'altra risposta;)
Michael Pankov,

Buono a sapersi! Ho pensato che gestisse i permessi, almeno l'ottetto, poiché i miei script mantengono il flag x sul clone, ma non ho pensato alla proprietà del file e del gruppo
Ehryk,

Sembra che ci siano strumenti aggiuntivi che manterranno le autorizzazioni e le proprietà complete, se richiesto. Uno di questi strumenti è git-cache-meta , ed ecco un elenco
Ehryk,
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.