Quando comecei a utilizar Linux pouco mais de uma década atrás, enfrentávamos um probleminha chato que era guardar as configurações do sistema sempre antes de fazer uma alteração. Comumente fazíamos uma cópia do arquivo antes de editá-lo. Assim, poderíamos ter, por exemplo ‘/etc/X11/xorg.conf-05-08-2005’ ou ‘/etc/resolv.conf-opendns’ ou ainda ‘/etc/fstab-home-com-problemas-de-permissao’…
Isso em ambiente local de usuário era um inferno de chato. Imagine isso em um servidor onde você tivesse que alterar uma configuração remotamente e as conexões não eram lá muito rápidas e você tem um cenário não muito satisfatório, sabendo que você precisaria lembrar o nome dos arquivos copiados caso precisasse voltar à configuração esperada em algum momento posterior. Pra mim isso era horrível.
Isso mudou um pouco quando passei a usar mercurial para controlar versões de minhas configurações. Era muito simples iniciar um repositório no diretório /etc e toda vez que fizesse uma mudança, ir lá e fazer um commit. Era simples mas não era intuitivo. Esquecia frequentemente de submeter as mudanças e pior, não as guardava num serviço remoto. Comecei a guardar configurações no bitbucket mas mesmo assim falhava em adicionar novas alterações. A dificuldade era parar pra revisar e ‘comitar’ alterações a cada nova atualização de sistema. Inicialmente, pensei em utilizar a api Inotify do kernel mas pesquisando, encontrei o etckeeper. Testei, gostei e passei a utilizar
Etckeeper é perfeito para o propósito a que se propõe: Uma vez instalado e configurado é só alegria.
Instalando etckeeper
Etckeeper está disponível para Linux e pode ser instalado utilizando o gerenciador de pacotes de sua distribuição.
No Debian e derivados:
apt-get install etckeeper
Configurar o etckeeper é simples e por padrão, o arquivo de configuração pode ser encontrado em /etc/etckeeper/etckeeper.conf
. Você pode, porém, alterar o local onde a configuração deve ser armazenada, bastando para tanto, definir uma variável de ambiente ETCKEEPER_CONF_DIR
. Eu uso o padrão mesmo, apenas alterando os valores do arquivo como segue:
# /etc/etckeeper/etckeeper.conf
VCS="git" # git|hg|bzr|darcs
HIGHLEVEL_PACKAGE_MANAGER=apt
LOWLEVEL_PACKAGE_MANAGER=dpkg
PUSH_REMOTE="origin"
A maioria das opções vem configurada por padrão e só precisamos definir o repositório remoto para onde nossas confs serão enviadas e, sim, podemos utilizar vários repositórios remotos, por exemplo:
PUSH_REMOTE=”origin bitbucket”
Para conseguirmos ter isso funcionando, apenas precisamos usar uma janela de emulador de terminal e executar alguns comandos usando uma conta administrativa ou o usuário root do sistema:
# cd /etc
# etckeeper init
# git add remote origin git@github.com:githubuser/githubrepo.git
# git add remote bitbucket ssh://git@bitbucket.org/bitbucketuser/bitbucketrepo.git
Também se faz necessário gerar um par de chaves ssh e adicioná-la nos serviços remotos:
# ssh-keygen




Feito isso, a cada nova instalação ou atualização o etckeeper guardará um rastro das alterações.
Você ainda poderá melhorar as coisas se preferir desabilitar o commit diário. Eu prefiro deixá-lo lá por que sempre to alterando alguma coisa ou outra.
Outros benefícios
Sabe aquele tweak temporário que você quer experimentar e ver como afeta o sistema como um todo, como por exemplo, uma mudança na configuração de cgroups? Pois é… fica fácil proteger o sistema de um problema maior. Basta criar um branch e alterar lá pra seus testes.
Sabe aquela configuração de servidores que você precisa testar pra conferir se realmente funciona? Cria um branch também.
Bem melhor que precisar fazer cópia de segurança de arquivo de configuração toda vez que alterar algo.
PS.: Há forks do etckeeper para ser utilizado em MacOS, FreeBSD.
PSII.: Há um tutorial da Digital Ocean demonstrando como utilizar etckeeper em CentOS. O tutorial contém também dicas de como configurar melhor o etckeeper para aquele ambiente.
Deixe um comentário