Como posso substituir corretamente as políticas de logrotate?

5

Vários pacotes Debian, incluindo logrotate e rsyslog , colocam suas próprias definições de rotação de log em /etc/logrotate.d/

Qual é a maneira correta de substituir essas definições?

Se eu modificar os arquivos, receberei avisos em todas as atualizações do sistema e correrei o risco de perder as alterações se eu (ou outra pessoa) der a resposta errada; ou corre o risco de não obter novas definições upstream para novos arquivos de log se eu (ou outra pessoa) não conseguir mesclar os arquivos manualmente. Ambas as coisas aconteceram regularmente nos últimos anos.

Eu tentei substituir a definição em 00_* ou zz_* arquivos, mas recebo um erro duplicado:

error: zz_mail:1 duplicate log entry for /var/log/mail.log
error: found error in /var/log/mail.log , skipping

Existe alguma solução limpa? Devo escrever um script cron para reaplicar minhas alterações aos arquivos de definição todos os dias?

Editar: para ficar mais claro, idealmente gostaria de manter 99% das definições de rotação de log do rsyslog em vigor e atualizadas automaticamente com o APT. Exceto por uma definição única, a de /var/log/mail.log , para a qual preciso aplicar uma política de rotação diferente.

Se o Logrotate permitisse definições duplicadas e usasse apenas o primeiro ou o último para cada arquivo, meu problema seria resolvido. Se tivesse uma opção override , para marcar uma definição como substituindo uma anterior de propósito, isso também a resolveria.

Mas, infelizmente, parece que preciso substituir todo o /etc/logrotate.d/rsyslog (e nginx e outros) por minhas próprias versões.

    
por Tobia 31.07.2017 / 14:59

4 respostas

6

Antes de tudo, recomendo usar uma ferramenta como etckeeper para acompanhar as alterações nos arquivos em /etc ; que evita a perda de dados durante as atualizações (entre outros benefícios).

A maneira “correta” de sobrescrever as definições é para editar diretamente os arquivos de configuração; é por isso que dpkg sabe como lidar com arquivos de configuração e pergunta quando atualizações introduzem alterações. Infelizmente isso não é ideal, como você descobriu.

Para realmente abordar seu problema de configuração específico, de uma maneira amigável ao Debian, sugiro que, na verdade, registre suas mensagens de e-mail em um arquivo de log diferente e configure esse em logrotate :

  • adicione um novo arquivo de configuração de log em /etc/rsyslog.d , direcionando mail.* para um novo arquivo de log, ex. /var/log/ourmail.log (supondo que você esteja usando rsyslog - altere conforme apropriado);
  • configure /var/log/ourmail.log em um novo arquivo de configuração logrotate .

Como isso envolve apenas a adição de novos arquivos de configuração, não há problema de atualização. Os arquivos de log existentes ainda serão gerados e girados usando a configuração padrão, mas seus arquivos de log seguirão sua configuração.

    
por 31.07.2017 / 15:13
7

No Debian, uma maneira de manter cópias de configuração / binários diferentes das desejadas pelos padrões da distribuição é "desviar" o arquivo. por exemplo. dizendo ao gerenciador de pacotes ao instalar / atualizar para novas versões de qualquer pacote deb, para instalar um arquivo em particular para outro diretório fora do caminho.

Eu tenho usado a funcionalidade dpkg-divert para manter um wrapper init.d sys V para BIND e ISC-DHCP por anos, que verifica a consistência dos arquivos de configuração DNS e DHCP e aumenta automaticamente o número de série de arquivos alterados zonas ao reiniciar o serviço no BIND.

Eu também uso no meu servidor nfsen para manter uma versão de um binário compilado para mim, ao invés da versão do pacote deb.

Dessa forma, você pode modificar o local original para o conteúdo do seu coração.

Eu gerencio muitos sistemas para o meu gosto, por assim dizer, e para alterar locais padrão de configurações de sistemas de arquivos - portanto, usando essa funcionalidade em uma configuração mais esotérica, onde não quero que a modificação seja esmagada, mas ainda queira se beneficiar as atualizações.

Você pode até mesmo ter divergências de arquivos no lugar usadas pelo Debian por padrão, apenas use o seguinte comando para listá-las:

dpkg-divert --list

De man dpkg-divert

EXAMPLES

   To  divert  all  copies  of  a /usr/bin/example to /usr/bin/example.foo, i.e.
   directs  all  packages  providing   /usr/bin/example   to   install   it   as
   /usr/bin/example.foo, performing the rename if required:

   dpkg-divert --divert /usr/bin/example.foo --rename /usr/bin/example

   To remove that diversion:

   dpkg-divert --rename --remove /usr/bin/example

   To    divert    any   package   trying   to   install   /usr/bin/example   to
   /usr/bin/example.foo, except your own wibble package:

   dpkg-divert   --package   wibble   --divert   /usr/bin/example.foo   --rename
          /usr/bin/example

   To remove that diversion:

   dpkg-divert --package wibble --rename --remove /usr/bin/example

Veja também no site Debian-Administration.org Substituindo binários por dpkg-divert

Obviamente, embora a directiva seja bastante útil, não recomendo abusando demais.

Quanto ao @Stephen Kitt abordar possíveis problemas com arquivos de configuração, o que acontece é que os upgrades tocarão no arquivo desviado, e se a configuração tiver mudanças significativas, por exemplo, as chances são maiores que atualizando para uma nova versão Debian, o daemon não inicializa, e essa situação tem que ser endereçada manualmente. Além disso, para ser inteiramente justo, isso também pode acontecer mesmo sem ter o arquivo de configuração desviado.

IMO dkpg-divert é uma das funcionalidades que mostra a verdadeira flexibilidade do gerenciador de pacotes Debian em comparação com outras distribuições Linux.

    
por 31.07.2017 / 15:35
2

Como Stephen disse, você precisa editar os arquivos de configuração diretamente, mas isso não significa que você tenha que colocar suas diretivas personalizadas lá.

Edite /etc/logrotate.d/rsyslog adicionando no final das diretivas existentes, apenas uma linha que inclui um arquivo separado contendo suas próprias diretivas de substituição:

/var/log/syslog
{
        ... existing directives ...

        include /etc/logrotate.d/override/rsyslog
}

Em seguida, crie seu arquivo de substituição, contendo nada mais do que suas diretivas de substituição:

/etc/logrotate.d/override/rsyslog

weekly
rotate 0

Você ainda precisa prestar atenção durante a atualização do sistema, mas é realmente simples corrigir novamente a configuração padrão fornecida pelos pacotes: é apenas uma linha para adicionar.

Para mim, é um compromisso aceitável, pois pelo menos me impede de mesclar manualmente as diferenças em cada atualização do sistema, mantendo os padrões do meu sistema em conformidade, e acha claro e compreensível.

    
por 23.09.2018 / 01:13
1

Retorna um momento e pensa no aviso do arquivo de configuração alterado. Por que você entende e o que isso significa? Isso é bom?

Na maioria dos casos, o Debian envia arquivos de configuração padrão que geralmente fazem o que é desejado. Existem duas maneiras pelas quais elas podem mudar, o administrador ou o empacotador as altera. Ou é normal e esperado, mas se ambos o que é a coisa correta a fazer? O ideal seria que ambos fizessem a mesma alteração e pudessem ser mesclados, mas até isso é difícil de fazer e nunca vi isso acontecer. Na maioria dos casos, você deseja observar as alterações feitas pelo empacotador e aceitá-las e mesclá-las ou rejeitá-las linha por linha. Até o momento, houve apenas uma maneira de fazer isso de forma limitada, e isso é um diretório de fragmentos de configuração que permite adicionar adicional de maneira fácil, mas não alterações ou remoções, e ainda não é tão útil quanto poderia ser desejado no caso de mudanças significativas, abrace o aviso, encaminhe-o e tire um momento para comparar as mudanças para que você possa fazer a coisa certa.

Dito no seu caso específico (uma vez que é uma pequena alteração), desabilitaria o fragmento incorreto (revogando todas as permissões de leitura, desviando-o ou renomeando) e criaria um novo fragmento com um nome diferente. Eu também recomendo usar o etckeeper, pois os backups são uma coisa boa.

    
por 31.07.2017 / 23:38