Se você já trabalha a certo tempo com T.I., com certeza já ouviu falar dos controladores de versões usados pelos desenvolvedores de sistemas. Em resumo, eles servem para guardar as várias versões do software usadas em cada cliente, entre muitas outras utilidades. E se você, como eu, não tem o costume de programar, talvez não tenha percebido o quanto um controlador de versão pode ser útil para nós administradores de redes. Com tantos arquivos de configuração e shell scripts para gerenciar, é importante termos um jeito prático de colocar tudo funcionando novamente de forma rápida caso algo pare de funcionar.

 

Sendo assim, vamos ver nesse artigo como usar o GIT, o controlador de versão criado pelo próprio Linus Torvalds e usado para gerenciar os fontes do Kernel do Linux, entre outros projetos importantes pelo mundo inteiro. Também veremos o etckeeper, uma ferramenta muito útil para automatizar o uso do GIT no controle do diretório /etc.

Para instalar, basta usarmos o gerenciador de pacotes da distribuição, como em:

#apt-get install git-core gitk

Aqui vamos configurar para utilizar seu nome e e-mail para identificá-lo nos commits:

 #git config --global user.name '<name>'
 #git config --global user.email '<email>'

Substitua '<name>' e '<email>' pelo seu nome e e-mail respectivamente.

Para configurar o vim como editor de texto padrão utilizado pelo git:

 #git config --global core.editor "vim"

Dentro da pasta home do seu usuário foi criado um arquivo chamado .gitconfig, onde essas configurações podem ser alteradas.

Agora que o GIT já está configurado, vamos criar nosso primeiro repósitorio de versões. Dentro da pasta /etc/, ou qualquer outra pasta que você quiser controlar:

#git init 

Esse comando cria uma pasta chamada .git dentro da pasta corrente, com informações e históricos dos arquivos.

Agora precisamos adicionar os arquivos e pastas que queremos que o git gerencie, com o comando add:

#git add firewall.sh

Ao invés de especificarmos um por um, é mais fácil informar o diretório atual inteiro, passando um ponto (.) como parâmetro:

#git add .

E então damos o primeiro “commit” com o comando:

 #git commit -a -m "Commit inicial" 

Dar um commit nada mais é do que criar uma espécie de ponto de restauração, em que caso ocorra algum problema futuro, você pode voltar os arquivos de configuração exatamente ao estado que estavam nesse exato momento.

A opção -a adiciona todos os arquivos alterados ao commit, e -m inclui uma mensagem, ou rotulo, no commit.

Vamos para outro exemplo. Vamos dizer que você alterou uma regra de firewall. Você pode antes disso dar o seguinte comando:

#git commit -a -m “Antes de criar o nat para o servidor web"

 Assim caso dê algo errado e você precisa voltar rapidamente a como era antes, basta usar o comando:

#git log

(Para ver o código do commit que você quer retornar)

#git checkout 9ffea2d40d2f361e5665b5d9b79e6f9b71472e31

(Para retornar ao commit)

Ok, então cada vez que der um problema é só dar um checkout que vai voltar tudo ao normal, certo?Mas e se eu esqueci de dar um commit antes de fazer as modificações?

Para esse caso existe o etckeeper.

O etckeeper é um aplicativo especialmente criado para fazer controle de versão do /etc. Ele se associa aos principais gerenciadores de pacotes, e sempre que houver uma modificação, cria um commit automaticamente.

Para instala-lo:

 #apt-get install etckeeper

O arquivo de configuração é o /etc/etckeeper/etckeeper.conf.

Primeiro, na sessão “The VCS to use”, comente as outras linhas e deixe funcionando apenas a do GIT:

VCS="git"

Mais para o final do arquivo, informe os gerenciadores de pacotes da sua distribuição, como o apt e o dpkg do Debian ou Ubuntu:

HIGHLEVEL_PACKAGE_MANAGER=apt
LOWLEVEL_PACKAGE_MANAGER=dpkg

Ótimo, agora quando instalar ou atualizar pacotes a partir dos gerenciadores e “bugar” o sistema, basta usar o git checkout. Mas e quanto às maiores fontes de problemas, que são as instalações a partir do código-fonte e as alterações manuais nas configurações?

Ao instalar o etckeeper, apareceu um script na pasta /etc/cron.daily chamado etckeeper. Se você já estudou sobre o crontab, sabe que esse script será executado diariamente. Se você quiser que ele seja executado a cada hora, pasta move-lo para a pasta cron.hourly, ou use sua criatividade para modifica-lo conforme sua necessidade.

Após terminar de configurar, é necessário iniciar o etckeeper:

#etckeeper init

Pronto, está configurado o seu backup periódico do /etc!

 

É claro, o GIT possui muitas outras funcionalidades, como ter um repositório centralizado de versões, onde você pode ter os commit de todos os seus servidores, além da possibilidade de criar diversos “galhos”, com as diferentes versões do /etc. Mas isso fica para um próximo artigo!