Controlul versiunilor pentru fișierele de configurare Linux (/etc) folosind etckeeper

Să ai la îndemână istoricul modificărilor survenite asupra fișierelor din /etc este un lucru de bază atunci când vine vorba de administrarea unui server sau a unei mașini de test.

Amintesc o parte mică doar din avantaje, lista bineînțeles, e lungă și nu cred că pot atinge toate punctele ei:
- Documentarea : mesajele de log (comentariile) asociate fiecărei schimbări în fișierele de configurare poate servi ca bază de documentație. În aceste mesaje de log se poate vedea cine, când și mai ales ce modificări a făcut. Apoi, înțelegerea unui fișier de configurare este mult mai ușoară dacă există comentarii cu referire la motivele, bucățile adăugate la un moment dat de către un administrator.
- Rezolvarea problemelor: O simplă virgulă tastată greșit într-un fișier de configurare de 10 sau de 1000 de linii poate influența un serviciu vital, sau poate face alt serviciu să nu mai funcționeze în parametri. Având la dispoziție o versiune mai veche a fișierului de configurare care a declanșat incidentul, poți identifica mult mai repede sursa problemei. Dacă are 10 linii… poate te prinzi mai ușor…dar la 1000 o posibilitate de a vedea diferențele poate scuti multe dureri de cap.

Fiecare are libertatea de a alege metoda de manipulare și salvare a fișierelor de configurare, creând depozite separate sau salvări manuale etc. Dar, pentru ușurarea muncii individuale, a apărut etckeeper, un utilitar care poate administra aceste probleme pentru tine, administratorul cu oricum mult prea multe pe cap. Acest utilitar, suporta sisteme multiple de control al versiunilor, cum ar fi: Git, Mercurial sau Bazaar. Alt avantaj îl reprezintă faptul că se integrează cu managerele de pachete din multe distribuții Linux, cum sunt: APT (pentru Ubuntu/Debian), YUM (RedHat, CentOS, Fedora), Pacman (Arch Linux).

Alte avantaje ale etckeeper ar mai fi:

  • integrarea cu managerele de pachete, care scutește utilizatorul de a face commit manual după instalarea/modificarea in /etc
  • etckeeper vine cu o lista pre-configurată de fișiere care se găsesc în mod normal în /etc dar care nu trebuie neapărat ținute sub control al versiunii, cum ar fi fișiere de cache etc.

Instalarea etckeeper

Instalarea etckeeper în Debian și Ubuntu se face rulând din consolă

$ sudo apt-get install etckeeper
sau folosing interfața grafică Synaptic.

La fel pentru restul distribuțiilor Linux, se caută și se instalează din managerul de pachete specific ditribuției. În cazul în care totuși nu se găsește în lista de pachete, se pot descărca sursele de pe site-ul oficial al etckeeper.

Configurarea etckeeper

Toate setările etckeeper se pot găsi în fișierul /etc/etckeeper/etckeeper.conf.
Orice modificare a configurației poate fi făcută din acest fișier, folosind editorul de text preferat.
Primul parametru care necesită atenție după instalare este VCS. Acesta este parametrul care specifică ce sistem de versionare vrem să folosim. Varianta propusă la început este git, dar poate fi modificată în hg su bzr după preferințe.
Un alt parametru asupra căruia vreau să atrag atenția este AVOID_COMMIT_BEFORE_INSTALL. Prin configurarea standard, etckeeper va face commit imediat după ce instalările se vor încheia. Personal evit acest lucru pentru că nu vreau să se facă commit cu niște fișiere a căror configurare poate nu am apucat să o termin. Acest lucru se poate evita setând valoarea AVOID_COMMIT_BEFORE_INSTALL la 1.
În cazul în care etckeeper a fost instalat din surse, este recomandat să ne uităm la parametrii HIGHLEVEL_PACKAGE_MANAGER și LOWLEVEL_PACKAGE_MANAGER, pentru a-i configura în funcție de managerul de pachete folosit în sistem.

Utilizarea etckeeper

Configurarea fiind finalizată, să trecem la utilizare etckeeper.
Primul lucru este să creăm un depozit:

$ cd /etc
$ sudo etckeeper init
$ sudo etckeeper commit "Import initial"

etckeeper

etckeeper

Aceasta ne va crea un depozit gol, apoi va urca în acest depozit tot conținutul directorului /etc.

De aici, folosirea etckeeper este similară folosirii sistemului de control al versiunii selectat. Să presupunem că folosim git și vrem să modificăm fișierul de configurare a MySQL. Edităm fișierul apoi îl urcăm pe server:


$ cd /etc
$ sudo vi /etc/mysql/my.cnf
$ sudo git commit -m "Modificarea 1"

Un sfat născut în urma multor dureri de cap cauzate de lenea personală… Versiunile trebuie ținute la nivel granular cât mai mic… atomic dacă se poate… E bine să se evite urcarea a două sau mai multe modificări într-o singură acțiune…

De asemenea, ca în orice sistem de control al versiunii, foarte importante sunt comentariile. Este bine ca ele să reprezinte cât mai clar modificarea adusă pentru a ușura munca în caz de restaurare undeva în viitor al unei versiuni antice.

O ultimă recomandare – dacă apare necesitatea instalării unui nou pachet, în timpul configurării altuia, e bine să se înregistreze modificarea întâi, apoi să se revină la starea “curată”, apoi abia să se instaleze pachetul nou și să se înregistreze din nou modificările făcute. În git, acest lucru se face astfel:

$ cd /etc
$ sudo vi mysql/my.cnf    # Aducem modificări fișierului.
$ sudo git stash          # Înregistrăm modificarea și revenim la starea inițială.
$ sudo apt-get install bc # Instalăm pachetul nou.
$ sudo git stash apply    # Aplicăm modificările făcute.

Mai multe informații pot fi găsite și în pagina de man a git-stash.

Pagina proiectului: http://kitenet.net/~joey/code/etckeeper/