sviluppo-web-qa.it

Quali soluzioni esistono per consentire l'uso del controllo di revisione per i file di configurazione del server?

In un ambiente con più amministratori di sistema, vedo alcuni vantaggi nell'aggiungere i file di configurazione del server in un sistema di controllo delle revisioni. I più importanti sono la capacità di tracciare i cambiamenti, chi li ha fatti e, naturalmente, essere in grado di tornare alle configurazioni di lavoro conosciute.

Sono principalmente interessato alle soluzioni Unix/Linux, ma sarei curioso anche per le implementazioni di Windows.

85
Dave K

Ho provato questo a casa (~ 3 host) da qualche tempo, provando diversi scms (RCS, Subversion, git). Il setup che funziona perfettamente per me in questo momento è git con l'hook setgitperms .

Cose che devi considerare:

Gestione delle autorizzazioni e della proprietà dei file

  • RCS: lo fa nativamente
  • Subversion: per ultimo ho provato, per fare questo era necessario un wrapper intorno a svn
  • git: il gancio setgitperms lo gestisce in modo trasparente (necessita di una versione abbastanza recente di git con supporto per post-checkout ganci, però)

Inoltre, se non vuoi tutti i tuoi /etc sotto il controllo della versione, ma solo i file che hai effettivamente modificato (come me), avrai bisogno di uno scm che supporti questo tipo di utilizzo.

  • RCS: funziona comunque solo su singoli file.
  • Subversion: l'ho trovato complicato.
  • git: nessun problema, inserisci "* "nel livello superiore .gitignore file e aggiungi solo i file che desideri utilizzando git add --force

Infine, ci sono alcune directory problematiche in /etc dove i pacchetti possono rilasciare frammenti di configurazione che vengono letti da un programma o daemon (/etc/cron.d, /etc/modprobe.d, eccetera.). Alcuni di questi programmi sono abbastanza intelligenti da ignorare i file RCS (ad es. Cron), altri no (ad es. Modprobe). Stessa cosa con .svn directory. Ancora una volta un grande vantaggio per git (crea solo un livello superiore .git directory).

52
8jean

L'ho fatto in modo informale con git, ma c'è anche il progetto etckeeper che è un'implementazione più completa e dettagliata.

28
pjz

Un'altra opzione è quella di utilizzare uno strumento di configurazione del server automatizzato come Puppet o Cfengine per eseguire lo scripting delle configurazioni del server in un linguaggio dichiarativo.

È un lavoro extra sul front-end, ma l'utilizzo di un'utilità come Puppet consente di ricostruire e configurare automaticamente un server con un intervento umano molto limitato.

23
berberich

Ho sperimentato etckeeper che sembra funzionare abbastanza bene. Non ho bisogno di un server centralizzato, che può essere importante in alcune situazioni. Puoi usare diversi backend DVCS, così puoi scegliere quello con cui hai più familiarità. Sembra funzionare molto bene per me, ma non ho ancora provato a trovare gli altri tecnici dove lavoro per iniziare ad usarlo.

10
Zoredache

Ultimamente ho esaminato Chef. Non solo mantiene templatable (.erb) le configurazioni nel controllo versione, ma consente di eseguire azioni (come riavviare un servizio dopo aver caricato le configurazioni sul nodo). Chef aiuta nella gestione dei pacchetti in modo da poter verificare le dipendenze con qualsiasi nodo con cui si interfaccia (cioè deve avere installato il pacchetto Sudo). Lo chef sembra essere facilmente estensibile in Ruby, quindi se hai processi personalizzati puoi semplicemente scriverlo all'interno del framework fornito.

Ma non l'ho ancora provato e devi installare Ruby sul client e sul server con le gemme appropriate (questo non è poi così difficile). Nel complesso sembra davvero facile gestire molti server su una volta.

6
bluehavana

Sono in procinto di implementare Puppet attraverso la nostra infrastruttura ed è molto favorevole a mantenere i suoi dati nel controllo della versione.

Preferisco Mercurial poiché è solo una raccolta di file con alcuni metadati memorizzati in directory nascoste (facile da gestire, facile da capire, facile da usare).

I miei file Puppet sono in/usr/local/etc/puppet/(FreeBSD 7.1). Tutto ciò che è stato necessario per aggiungere Mercurial ad esso:

> cd /usr/local/etc/puppet
> hg init

Tutte le modifiche vengono eseguite con un semplice "commit hg". Se una modifica genera qualcosa, posso ripristinare ogni singolo server su una determinata versione del file (diciamo, sudoers) con un singolo comando.

Ottima introduzione a Mercurial

3
sh-beta

Ho usato Subversion sui server che gestisco. Funziona bene. Ho anche impostato un'istanza Trac , quindi abbiamo una visualizzazione della sequenza temporale, un sistema di ticketing, navigazione, ecc.

Utilizzando symlink, cron e Subversion ho anche impostato la distribuzione automatica della configurazione basata sul repository Subversion, dove ogni server Linux aggiorna un repository usando svn update con script (ad esempio script firewall).

3
Martin C.

Ecco un caso d'uso reale: usato Subversion per gestire i file di configurazione su 4 server diversi. Consiglio di utilizzare il controllo versione per i file di configurazione per lo stesso motivo per cui li useresti con il codice: è un backup e un pulsante Annulla tutto in uno. Se stessi gestendo un numero molto maggiore di server e fossero molto più vicini in termini di configurazione, userei qualcosa come Puppet come dettagliato nella risposta di berberich.

L'idea è che puoi avere un repository in cui è possibile effettuare il checkout di cartelle specifiche sui server (ad es./Var/named /), quindi entrambi ho una cronologia e un backup dei file di configurazione (il backup è un vantaggio se commetti l'errore dell'utilizzo di un'applicazione di configurazione della GUI che cancella le aggiunte modificate a mano tosse Server Admin in Mac OS X Server tosse). È quindi facile testarlo su un server di prova e successivamente aggiornare il server di produzione con file che funzionano senza copiare manualmente i file.

2
Chealion

Ho creato un progetto alcuni anni fa per fare esattamente questo: Savon

Utilizza Subversion per archiviare i file e ha alcune funzionalità aggiuntive, come il monitoraggio della proprietà, le autorizzazioni e il contesto SELinux. Inoltre, consente di dividere logicamente le modifiche del file system in livelli, in modo da poter, ad esempio, tenere traccia delle modifiche che dovrebbero essere indirizzate a tutti i server Web separatamente.

Subversion è molto facile da configurare e utilizzare e ci sono molte risorse:

Procedura di base

Libro SVN

Panoramica sulla gestione dei documenti

0
Jimmie R. Houts

La maggior parte delle modifiche viene gestita con il nostro sistema di Help Desk, anche per gli interventi di manutenzione ordinaria. Abbiamo lentamente spostato la nostra documentazione in una wiki per nostro uso e ciò che pubblichiamo per gli utenti finali. Pubblicare le modifiche alla configurazione e la discussione alle spalle, è bello averlo aperto sulla nostra intranet.

0
Waldo

Per molti anni ho usato rcs per i file che ho iniziato a modificare, ma un paio di anni fa ho iniziato a mettere l'intero/etc sotto controllo git. Richiede un po 'di lavoro per il check-in dei file in blocchi granulari (a volte ricorro a un enorme check-in "vari aggiornamenti"), e ho scritto alcuni script per aiutare in questo, ma etckeeper menzionato sembra molto interessante, lo proverò immediatamente.

0
hlovdal