Gera uma diferença entre a configuração atual de / etc / e a configuração padrão

7

Após a instalação e várias configurações personalizadas, é possível usar, por exemplo. apt e algum shell-fu para produzir um diff para cada arquivo em / etc / que difere da configuração padrão? Isso forneceria um meio de gerar um breve resumo do estado da configuração após o fato, em vez de depender do registro manual ao longo do caminho, caso alguém desejasse lembrar o que foi alterado posteriormente.

    
por Sarah 16.12.2012 / 15:10

2 respostas

3

Você deve dar uma olhada em etckeeper :

  

etckeeper é uma coleção de ferramentas para deixar / etc ser armazenado em um git,   repositório mercurial, darcs ou bzr. Encaixa-se no apt (e em outros   gerenciadores de pacotes, incluindo yum e pacman-g2) para confirmar automaticamente   alterações feitas em / etc durante atualizações de pacote. Ele rastreia os metadados do arquivo   que os sistemas de controle de revisão normalmente não suportam, mas isso é   importante para / etc, como as permissões de / etc / shadow. É bastante   modular e configurável, além de ser simples de usar se você   entender os conceitos básicos de como trabalhar com o controle de revisão.

    
por Cédric Julien 19.12.2012 / 09:30
0

Estou no meio do desenvolvimento de uma solução para o mesmo tipo de problema.

Basicamente, meu objetivo é um sistema que permite desfazer e refazer com granularidade em nível de arquivo.

Começando com sua pergunta e trabalhando de trás para frente ...

  • Para comparar com a configuração padrão, temos que armazenar os originais de todos esses arquivos em algum lugar primeiro. Então podemos produzir o que você quer com algo como ...
DIFFDIR= ......
ARCDIR=./.archives                         # see below

function getlastarchive() {
  ... code to return last archived version ...
}

for FILE in /etc/*
do
  ARCFILE="$(getlastarchive $FILE)"
  diff $ARCDIR/$ARCFILE /etc/$FILE  >$DIFFDIR/$FILE.diff
done
  • Para armazenar os originais, optei por adotar a convenção de ter um único subdiretório .archives em qualquer diretório com um arquivo alterado. Ele é criado conforme necessário por um script file-archive .
  • Se você quiser apenas um nível de desfazer, só precisará copiar o arquivo inalterado para o diretório .archives antes que ele seja alterado.
  • Para desfazer ilimitado, precisamos de um esquema de controle de versão. Uma escolha óbvia é um carimbo de data e hora anexado ao nome da versão arquivada. Algo como ...
Files:                      /etc/hosts
                            /etc/resolv.conf

Archived Versions:          /etc/.archives/hosts.20121219015459
                            /etc/.archives/resolv.conf.20121219015459
  • Em vez disso, estou usando apenas uma versão incremental calculada automaticamente, como em ...
Files:                      /etc/hosts
                            /etc/resolv.conf

Archived Versions:          /etc/.archives/hosts.00
                            /etc/.archives/resolv.00.conf
  • A versão # é antes da extensão, pois eu também uso isso para versões editadas de imagens que precisam de suas extensões (.jpg, .png, etc) intactas para que para ser detectado corretamente por um monte de software. Se um arquivo não tiver extensão, a versão # será anexada ao final. O código para fazer isso é mais complexo, mas é executado instantaneamente, sem problemas. Um caso pode ser feito para vários outros esquemas, mas isso funciona para mim.

Espero que isso ajude!

    
por DocSalvager 19.12.2012 / 08:38