Versionamento de arquivos de configuração no FreeBSD com git

Uma das coisas que todo administrador de sistemas aprende mais cedo ou mais tarde (por bem ou por mal) é que ele sempre deve documentar as alterações que fizer nos arquivos de configuração de um servidor, desenvolver esse habito simples vai lhe poupar muita dor de cabeça no dia a dia, principalmente se você não for o único responsável pela administração do servidor 🙂

No FreeBSD os arquivos de configuração ficam localizados /etc e /usr/local/etc.

Existem diversas ferramentas (cvs, svn, git, mercurial, etc) para se versionar e documentar alterações em um arquivo, a ferramenta que eu utilizo no dia a dia para essa finalidade é o Git.

A instalação do git no FreeBSD através do sistema de ports é bastante simples, basta executar:

# cd /usr/ports/devel/git && make install clean distclean

Depois que o software for instalado devemos utilizá-lo para criar um repositório dos nossos arquivos de configuração.

Por exemplo, para criar um repositório do /etc, basta executar:

# cd /etc   
# git init 
# git add . 
# git commit -am "Carga inicial dos arquivos do /etc"

A sequência de comandos acima irá criar o diretório /etc/.git  e populá-lo com a versão inicial dos arquivos do /etc.

Uma vez criado o repositório e feita a carga inicial do mesmo, já estamos prontos para utilizar o git para versionar nossos arquivos 🙂

Exemplos de uso:

  • Sempre que você fizer uma alteração em um arquivo do /etc basta executar o comando abaixo para documentar a alteração:
# git add <nome do arquivo alterado>  
# git commit -m "Descrição da alteração que foi realizada" 
  • Se você tiver feito alterações em vários arquivos e quiser fazer o commit de todas de uma unica vez, você  deve substituir os 2 comandos anteriores pelo comando:
# git commit -am "Descrição de todas as alterações que foram realizadas"
  • Sempre que você criar um novo arquivo no /etc você deve executar o comando:
# git add . 
# git commit -a "Adicionado o(s) arquivo(s) X, Y, Z"
  • Sempre que você deletar um arquivo do /etc você deve executar o comando abaixo para removê-lo do repositório :
# git add -u . 
# git commit -a "Removido o(s) arquivo(s) X, Y, Z"
  • Sempre que você quiser verificar se algum arquivo foi alterado e se as alterações estão pendentes de commit no repositório, basta executar o comando:
# git status
  • Sempre que você quiser visualizar o histórico de alterações que foram realizadas em um determinado arquivo, basta executar o comando abaixo. Por exemplo, para ver todas as alterações feitas no /etc/hosts , a sintaxe seria:
# git log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short hosts 
* 930e30f 2012-07-16 | alteracao do hosts (HEAD, master) [Charlie Root] 
* 30b1fa5 2012-07-16 | Carga inicial dos arquivos do /etc [Charlie Root]
  • Se você quiser ver o que mudou de uma versão para a outra de um determinado arquivo, basta usar o comando acima para listar as revisões disponíveis do arquivo desejado e usar os hashs das revisões desejadas com a opção diff, como mostrado no exemplo abaixo para o arquivo /etc/hosts:
# git diff 30b1fa5 930e30f hosts
diff --git a/hosts b/hosts
index b9e6f6a..5b7246f 100644
--- a/hosts
+++ b/hosts
@@ -29,3 +29,4 @@
# numbers but instead get one from your network provider (if any) or
# from your regional registry (ARIN, APNIC, LACNIC, RIPE NCC, or AfriNIC.)
#
+192.168.192.1 server05 server05.ebrandi.eti.br
  • Caso precise desfazer alguma alteração e restaurar uma versão anterior de algum arquivo, basta usar o hash da versão desejada com a opção checkout, como mostrado no exemplo abaixo para o arquivo /etc/hosts:
# git checkout 30b1fa5 hosts
  • Se o rollback for permanente você deverá fazer um commit para tornar a reversão permanente.
# git commit -m "Rollback do /etc/hosts para a versão 30b1fa5"

Em linhas gerais estas são as opções do git que você vai precisar usar no seu dia a dia para controlar os arquivos de configuração do seu servidor.

O Git lhe permite fazer muito mais do que o mostrado acima, você pode usá-lo por exemplo para gerenciar os deploys de uma aplicação web, ou mesmo para gerir os arquivos de configuração em um servidor remoto, podendo inclusive automatizar o restart de uma aplicação depois que determinado arquivo for atualizado 🙂

Sugiro que leia o manual para conhecer todas as opções, de forma que possa tirar o máximo proveito do mesmo.

No google você irá encontrar farta documentação sobre ele 🙂 , mas sugiro que comece por:

http://git-scm.com/book

Boa sorte

[ ]’s Edson

Comments are closed.