Jun 022012
 

Articolo basato sul lavoro di   Angelo D’Autilia pubblicato su Salug Journal

Uno strumento utile per la gestione condivisa di un server è etckeeper.
Questo software e’ una collezione di script bash che consentono di tenere sotto controllo tramite un sistema di revisione distribuito la nostra directory /etc/dove sono presenti i file di configurazione della maggior parte dei nostri servizi in Linux.
Si potrebbe fare la stessa cosa senza etckeeper appoggiandosi ad un sistema di revisione come darcs o git, ma dobbiamo ricordarci che per questa directory è fondamentale mantenere per ogni file, oltre i permessi anche il proprietario ed il gruppo nonche tutta la struttura di directory comprese quelle vuote.

Etckeeper ci aiuta nella gestione automatizzando molti di questi compiti.


Il pacchetto di etckeeper è disponibile per Debian, Ubuntu, Fedora, e molte della distribuzione più comuni, quindi potete installarlo con il vostro gestore di pacchetti, su Debian e Ubuntu potete usare: sudo aptitude install etckeeper

Aptitute provvedera’ a installare tutti i pacchetti necessari per far funzionare etckeeper ed effettuera’ il primo commit con bzr (bazar)

Se si ha intenzione di non utilizzare bazar ma un altro prodotto di controllo di revisione come ad esempio git bisogna azzerare l’inizializzazione di etckeeper con il comando:

etckeeper uninit

Ed installare il sistema di revisione preferito, etckeeper supporta hg, git, bzr e darcs, per usare git basta installarlo

sudo aptitude install git

E cambiare nel file di configurazione /etc/etckeeper/etckeeper.conf il parametro VCS:


# Il VCS da utilizzare, ho commentato bzr e tolto il commento da git
#VCS="hg"
VCS="git"
#VCS="bzr"
#VCS="darcs"

# Opzioni passate a git commit quando eseguito da etckeeper.
GIT_COMMIT_OPTIONS=""

# Opzioni passate a hg commit quando eseguito da etckeeper.
HG_COMMIT_OPTIONS=""

# Opzioni passate a bzr commit quando eseguito da etckeeper.
BZR_COMMIT_OPTIONS=""

# Opzioni passate a darcs commit quando eseguito da etckeeper.
DARCS_COMMIT_OPTIONS="-a"

#Togliere il commento al fine di evitare che etckeeper faccia un commit delle modifiche esistenti 
# In  /etc automaticamente una volta al giorno.
#AVOID_DAILY_AUTOCOMMITS=1

# Decommentate la seguente opzione per evitare i messaggi di avvertimento sui file speciale 
# (L'opzione è attivata automaticamente dal cronjob).
#AVOID_SPECIAL_FILE_WARNING=1

# Togliere il commento per evitare che etckeeper faccia commit di cambiamenti esistenti per 
# /etc prima dell'installazione. Sarà annullata l'installazione, 
# In modo da poter applicare le modifiche a mano.
#AVOID_COMMIT_BEFORE_INSTALL=1

# Il gestore di pacchetti utilizzato ad alto livello
# (apt, pacman-g2, yum etc)
HIGHLEVEL_PACKAGE_MANAGER=apt

# Il gestore di pacchetti utilizzato a basso livello
# (dpkg, rpm, pacman-g2, etc)
LOWLEVEL_PACKAGE_MANAGER=dpkg

Se avete cambiato VCS è giunto il momento di fare il vostro primo commit (non avete bisogno di questo se si utilizza bazar)

etckeeper init

Questo inizializza e imposta un repository Git, Mercurial, Bazaar, o darcs (a seconda dell’impostazione VCS in /etc/etckeeper/etckeeper.conf). Tipicamente questo viene eseguito per la /etc, una volta all’installazione di etckeeper su una macchina. Può anche essere utilizzato per inizializzare un clone del repository /etc ubicato altrove.

Usare etckeeper

Userò Bazar come sistema VCS nei seguenti esempi

Ora aggiungo il file “test” in /etc/ e dopo questo eseguo un commit, con i seguenti comandi:

$ sudo touch /etc/test
 
$ etckeeper vcs status /etc/
unknown:
  test
 
$ etckeeper commit "test"
Committing to: /etc/                                                                                                                         
modified .etckeeper
added test
Committed revision 2.              
 
$ etckeeper vcs log --line 
2: linuxaria 2012-06-02 test
1: linuxaria 2012-06-02 First Commit

Quindi, le opzioni di etckeeper che ho utilizzato fino ad ora sono:

vcs status È possibile utilizzare “VCS sottocomando” per eseguire ogni comando del VCS che è configurato per essere utilizzato in etckeeper. Sarà eseguito in /etc, Ad esempio, “etckeeper status vcs” eseguirà “bzr status /etc/”

commit “test” Esegue il commit di tutte le modifiche in /etc al repository. Un messaggio di commit può essere specificato, nel mio esempio è solo “test”. È inoltre possibile utilizzare il VCS sottostante e fare un commit manualmente. (etckeeper commit noterà se un utente ha utilizzato sudo o su per diventare root, e registrerà il nome originale nel commit.)

vcs log –line Qua usiamo ancora una volta l’opzione vcs che ci permette di chiamare un sottocomando bazar, in questo caso log che mostra i log storici per un ramo o un sottoinsieme di un ramo.

Un’altra utile opzione che è possibile utilizzare è vcs diff che mostra le differenze nell’attuale albero di lavoro, fra le revisioni, in questo esempio ci sono i cambiamenti nella mia revisione 2 (opzione -c2)

sudo etckeeper vcs diff -c2 
[sudo] password for linuxari: 
=== modified file '.etckeeper'
--- .etckeeper	2012-06-02 10:03:22 +0000
+++ .etckeeper	2012-06-02 10:08:53 +0000
@@ -1987,6 +1987,7 @@
 maybe chmod 0755 './systemd/system/multi-user.target.wants'
 maybe chmod 0755 './terminfo'
 maybe chmod 0644 './terminfo/README'
+maybe chmod 0644 './test'
 maybe chmod 0755 './texmf'
 maybe chmod 0755 './texmf/dvipdfm'
 maybe chmod 0755 './texmf/dvipdfm/config'
 
=== added file 'test'


Estendibilità di etckeeper

Un’0altra caratteristica di etckeeper è la sua estendibilità, infatti già dall’installazione base sono presenti nella cartella /etc/etckeeper una serie di directory con nome .d che rappresentano le varie operazioni che esegue etckeeper, abbiamo quindi questa struttura (output del comando tree)

.
├── commit.d
│   ├── 10vcs-test
│   ├── 30bzr-add
│   ├── 30darcs-add
│   ├── 30git-add
│   ├── 30hg-addremove
│   ├── 50vcs-commit
│   └── README
├── etckeeper.conf
├── init.d
│   ├── 10restore-metadata
│   ├── 20restore-etckeeper
│   ├── 40vcs-init
│   ├── 50vcs-ignore
│   ├── 50vcs-perm
│   ├── 50vcs-pre-commit-hook
│   ├── 60darcs-deleted-symlinks
│   ├── 70vcs-add
│   └── README
├── list-installed.d
│   └── 50list-installed
├── post-install.d
│   ├── 50vcs-commit
│   └── README
├── pre-commit.d
│   ├── 20warn-problem-files
│   ├── 30store-metadata
│   └── README
├── pre-install.d
│   ├── 10packagelist
│   ├── 50uncommitted-changes
│   └── README
├── unclean.d
│   ├── 50test
│   └── README
├── uninit.d
│   ├── 01prompt
│   ├── 50remove-metadata
│   ├── 50vcs-uninit
│   └── README
├── update-ignore.d
│   ├── 01update-ignore
│   └── README
└── vcs.d
    └── 50vcs-cmd

Così, quando eseguiamo etckeeper commit chiediamo ad etckeeper di eseguire tutti gli script che sono presenti nella directory /etc/etckeeper/commit.d, quindi è facile aggiungere nuovi comandi in quella cartella o creare una nuova directory command.d e mettere i vostri script all’interno di questa nuova directory, ampliando così le opzioni ed i comandi disponibili ad etckeeper.

Conclusioni

Etckeeper è un software facile da configurare che vi può salvare quando qualcosa di veramente brutto capita ad un file di configurazione. Ha hooks per i gestori di pacchetti più comuni in modo che quando si installa e rimuove il software sia consapevole di questo, e out of the box fa un commit al giorno del vostro /etc/. Potete ora rilassarvi..un po di più.

Popular Posts:

Flattr this!

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

*