Versionando o seu /etc

Backup da forma padrão pode ser bastante tedioso e burocrático de se usar quando precisamos obter apenas um arquivo de configuração antigo para testes ou mesmo para desfazer alguma modificação indevida e rapidamente.

Por conta disso é comum que o sysadmin invente coisas como “cp niginx.conf nginx.conf.2020-09-10” ou “cp nginx.conf.antes-de-ativar-o-ssl” só para ter uma recuperação rápida em caso de falha durante uma mudança.

Isso [as vezes] funciona mas não é seguro e nem organizado, então, se você usa isso com frequência pode estar na hora de conhecer uma solução mais limpa e organizada como o versionamento do /etc.

Um diretório que mantém a configuração do seu servidor

O /etc é onde estão as principais configurações de seu servidor, e seus serviços fundamentais, como seu serviço DNS, DHCP, Apache, Nginx, etc.

Se você administra máquinas Linux ou outras baseadas no padrão POSIX, é fundamental zelar pela organização deste diretório e preservar os seus arquivos de qualquer incidente e manter um histórico de mudanças pode ser bastante benéfico caso você tenha que reconfigurar seus sistemas ou mesmo entender o que houve com o seu serviço que até ontem funcionava e de repente parou.

Mantendo um controle das alterações do seu /etc

É aqui que entra o versionamento dos arquivos, pois com um simples comando, ou talvez dois, você já terá o seu arquivo recuperado e sem muita complicação. Como “recurso brinde” você ainda manterá um registro das mudanças.

Minha preferência pelo uso do Git como sistema de controle de versões é meramente por comodismo e ela quem será usada durante este texto, mas esteja confortável a usar a ferramenta de sua preferência e que tenha mais afinidade.

Você pode simplesmente transformar o seu /etc em um repositório Git com dois comandos básicos e a partir daí começara controlar o seu diretório de configurações:

cd /etc
sudo git init .

Você pode ir a frente sem medo de ser feliz, mas se você já usou algum sistema de controle de versões sabe que sempre há aqueles arquivos que não valem a pena versionar. Seja porque são binários, ou por serem dinâmicos e criados quando se altera algum outro arquivo etc.

No /etc não é diferente. Arquivos “*.pyc”, “*.pyo”, “mtab”, “lvm/cache/*” entre outros são alguns dos exemplos que você estará versionando desnecessariamente (mas não se preocupe se o fizer não há risco nisso).

Você pode levar algum tempo refinando isso alterando o .gitignore (arquivo de exceções do Git) então para poupar o trabalho e ter ainda algum bônus, nós podemos aproveitar o trabalho de quem já trilhou por estes caminhos pedregosos.

Se optar por esta opção você deverá usar manualmente os comandos de versionamento do Git todas as vezes que alterar algo:

sudo git add fstab
sudo git commit -m "Automount do volume NFS de caixas postais"

Usando uma ferramenta especializada para versionar o /etc

A ferramenta que costumo usar quando necessito desta abordagem de controle do /etc é chamada de EtcKeeper.

Provavelmente ela já está no repositório de pacotes da sua distribuição e a instalação é feita seguindo a mesma receita trivial que você já sabe, usando o gerenciador de pacotes da sua distribuição (yum, dnf, apt etc)

apt install git
apt install etckeeper

A sua instalação automaticamente iniciará um repositório local dentro de /etc/.git , adiciona um script em seu /etc/cron.daily para que diariamente ocorra um commit versionando as atualizações dos arquivos (que, se preferir, pode movê-lo ou copiá-lo para /etc/cron.hourly, ou mesmo para cron.weekly) e ainda um “gancho” no gerenciador de pacotes para que todas as vezes que ocorrer uma instalação de pacotes ele seja acionado antes e depois do processo.

Uma vez instalado você deverá editar o arquivo /etc/etckeeper/etckeeper.conf e, se necessário, alterar as configurações para usar o seu sistema de controle de versões preferido, ou alguma configuração “exótica”, embora o padrão já seja o ideal para maioria dos casos.

Caso tenha mudado o controle de versões, digamos, do Git para o Darc, você deverá iniciar o etckeeper novamente com o comando:

etckeeper init

A partir daqui, o versionamento ocorrerá automaticamente conforme o agendamento definido no Cron da sua máquina com uma mensagem de commit padrão, por isso, caso você altere algum arquivo, teste e o sistema esteja OK, você deve submeter suas alterações para o repositório manualmente.

Digamos que eu altere alguma configuração do Apache, reiniciei o serviço, testei está tudo OK, então agora é hora de guardar as mudanças:

etckeeper commit "Criando o Virtualhost para o hotsite do novo produto"

O EtcKeeper irá adicionar todos os arquivos alterados ao “stage” do Git e executará o commit. Inclusive, se você fizer as devidas configurações, um “push” para um repositório remoto poderá ocorrer também. Só esteja atendo a necessidade deste repositório ser privado, OK!? Nada de fazer commit do etc do seu servidor para um repositório público no Github ou outro servidor de versionamento público.

Para completar o conjunto de instruções básicas para o seu uso você só precisa saber que os comandos padrões do seu sistema de controle de versões estão sempre disponíveis e pode ser invocado com o comando “etckeeper vcs”.

Por exemplo, se para ver os logs de um repositório git eu normalmente uso o comando “git log”, para ver os logs no EtcKeeper eu uso:

etckeeper vcs log

O restante é com vocês. Partindo deste comando de exemplo, com o perdão do trocadilho, o “céu git é o limite”.

Por exemplo, se você conhece bem o git, vai perfeitamente entender o que estou fazendo nos comandos abaixo:

etckeeper vcs checkout -- httpd2.conf
etckeeper vcs rm mailname
etckeeper vcs annotate passwd
etckeeper vcs push

Referências

https://etckeeper.branchable.com/README/
https://wiki.archlinux.org/index.php/etckeeper
https://www.tecmint.com/manage-etc-with-version-control-using-etckeeper/

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.