AlcaLabs

[[docs:etckeeper]]

Traccia: » ETCKeeper

Ti trovi qui: Alca Labs » docs » ETCKeeper

Login

Non sei ancora collegato! Inserisci il tuo nome utente e la tua password per autenticarti. E' necessario che il tuo browser abbia i cookie abilitati.

Entra

Hai dimenticato la password? Richiedine una nuova: Invia nuova password

ETCKeeper

Intro

etckeeper è un piccola applicazione bash che consente di tenere in revisione i file di configurazione normalmente contenuti nella directory /etc di un sistema *nix; per fare ciò, etckeeper fornisce un'interfaccia utente (in command line) ai sistemi di revisione distribuita (git, bzr, mercurial).

Ad esempio, nel revisioning dei file di configurazione (a differenza dei file sorgente di un'applicazione) è di fondamentale importanza preservare non solo i permessi, ma anche utenti e gruppi, in caso contrario un ripristino di una revisione prececente potrebbe, in modo apparentemente inspiegabile, non funzionare come ci si aspetterebbe.

Inoltre alcuni sistemi di revisione (come ad esempio git) non tengono in revisione le directory, per cui le directory vuote non sarebbero di fatto preservate.

Allo scopo di assolvere al meglio il compito di tenere in revisioning i file di configurazione etckeeper è in grado di agganciarsi agli hook di apt-get in modo tale da effettuare automaticamente dei commit prima e dopo l'installazione di nuovi pacchetti, in modo da separare i commit delle modifiche provenienti dagli script di pre/post-installazione dai commit contenenti modifiche effettuate dagli utenti amministratore.

Installazione

Debian/Ubuntu contengono già etckeeper all'interno del loro pool di pacchetti per cui sarà sufficiente un semplice:

apt-get install etckeeper

In ogni caso, poichè etckeeper è costituito esclusivamente da un insieme di bash script, l'installazione dai sorgenti è in realtà molto semplice e non prevede nessuna particolare build-dependency.

Le dipendenze di runtime sono solo bash ed uno dei sistemi di revisione distribuita supportati (bzr di default).

Configurazione

Sul sito web di etckeeper non è presente documentazione utile al suo utilizzo ma, essendo il tool concettualmente molto semplice, la sua pagina man risulta più che sufficiente per apprenderne il funzionamento.

L'unico file di configurazione è il file /etc/etckeeper/etckeeper.conf mediante il quale è possibile configurare il sistema di revisione utilizzato e il sistema di pacchettizzazione utilizzato dal sistema (attualmente solo dpkg e apt), oltre ad alcune variabili d'ambiente con cui è possibile modificare alcune delle opzioni utilizzate:

/etc/etckeeper/etckeeper.conf

# The VCS to use.
# VCS="hg"
VCS="git"
# VCS="bzr"

# Options passed to git commit when run by etckeeper.
#GIT_COMMIT_OPTIONS=""

# Options passed to hg commit when run by etckeeper.
#HG_COMMIT_OPTIONS=""

# Options passed to bzr commit when run by etckeeper.
#BZR_COMMIT_OPTIONS=""

# Uncomment to avoid etckeeper committing existing changes to
# /etc before installation. It will cancel the installation,
# so you can commit the changes by hand.
#AVOID_COMMIT_BEFORE_INSTALL=1

# The high-level package manager that's being used.
HIGHLEVEL_PACKAGE_MANAGER=apt

# The low-level package manager that's being used.
LOWLEVEL_PACKAGE_MANAGER=dpkg

nella directory /etc/etckeeper sono inoltre contenute una serie di directory che rappresentano degli hook a cui è possibile agganciare ulteriori bash script:

root@ubik:~# ls /etc/etckeeper/ -l
total 32
drwxr-xr-x 2 root root 4096 Jan 26 14:49 commit.d
-rw-r--r-- 1 root root  448 Apr 22  2008 etckeeper.conf
drwxr-xr-x 2 root root 4096 Jan 26 14:49 init.d
drwxr-xr-x 2 root root 4096 Jan 26 14:49 list-installed.d
drwxr-xr-x 2 root root 4096 Jan 26 14:49 post-install.d
drwxr-xr-x 2 root root 4096 Jan 26 14:49 pre-commit.d
drwxr-xr-x 2 root root 4096 Jan 26 14:49 pre-install.d
drwxr-xr-x 2 root root 4096 Jan 26 14:49 unclean.d

HackNote!!!: in realtà, se si analizza velocemente il funzionamento dello script principale è possibile verificare che tali directory corrispondono ai sottocomandi di etckeeper e che per aggiungere un nuovo comando ad etckeeper è sufficiente creare una nuova directory con la medesima convenzione nella scelta del nome ed inserire al suo interno uno script bash che ne implementi la logica.

Quickstart

Per inizializzare la cartella /etc possiamo procedere secondo questo schema :

root@hostname:~# cd /etc
root@hostname:/etc# etckeeper init
root@hostname:/etc# git add .
root@hostname:/etc# etckeeper commit "Commit Iniziale"
root@hostname:/etc# git gc

Spiegandolo a parole :

  1. ci posizioniamo nella cartella /etc
  2. diciamo ad etckeeper di crearsi tutti i file necessari per poter gestire /etc come repository git
  3. aggiungiamo ricorsivamente tutto il contenuto di /etc (in questo modo inseriremo anche la cartella .git)
  4. settiamo il punto di partenza
  5. facciamo pulizia del repository prima di iniziare

Se facciamo le modifiche e vogliamo fare il commit manualmente possiamo procedere come segue, altrimenti qualsiasi modifica verra' fatta in /etc dalla dis/installazione di un nuovo pacchetto, sara' registrata da etckeeper grazie agli hooks presenti nei file di configurazione di apt.

root@hostname:/etc# $(facciamo qualunque modifica)
root@hostname:/etc# git commit 'Descrizione del commit'

Uso

I 3 comandi principali di etckeeper (gli altri sono in realtà eseguiti dagli hook apt/dpkg o utilizzati internamente, come list-installed) sono:

  • etckeeper init: inizializza la directory corrente come un nuovo repository etckeeper
  • etckeeper unclean: ritorna 0 se ci sono modifiche di cui effettuare commit, != 0 in caso contrario
  • etckeeper commit “commit message”: rigenera la mappa dei metadata generata internamente da etckeeper ed effettua il commit di tutti i file modificati (anche quelli non ancora in revisione a meno che non ricadano nella lista degli ignore file del sistema di revisione sottostante)

Per tutte le altre funzionalità (sempre presenti su ogni sistema di revisione) è necessario utilizzare direttamente il tool di revisione sottostante:

  • log
  • status
  • diff
  • push/pull
  • merge

Per questo motivo è sempre opportuno avere una infarinatura del tool di revisione che verrà utilizzato in accoppiata con etckeeper in modo da porterne sfruttare a pieno le funzionalità.

Faq

Che differenza c'e' tra “etckeeper commit” e “git commit” ?

La differenza sta' soltanto nel fatto che “etckeeper commit” fa' i seguenti controlli prima di fare un commit con git :

  1. controllo se esistono i comandi necessari (git, hg, bzr)
  2. se e' stato fatto gia' il primo “git add .”
  3. controllo sulle directory vuote che verrebbero rimosse automaticamente nel repo git
  4. controllo sul nome utente, sulla destinazione delle email di sistema e sul messaggio di commit

Note/Problemi Comuni

  1. Anche se un file è in ignore il file dei metadata verrà comunque modificato ogni volta che cambieremo attributi/permessi e genererà di conseguenza un commit (contenente la modifica al file dei metadata)

Link