você está aqui: Home  → Arquivo de Mensagens

Verificando bases do bogofilter

Colaboração: Rodrigo Bernardo Pimentel

Data de Publicação: 17 de Fevereiro de 2004

Já foram enviadas algumas dicas sobre o bogofilter, então não vou entrar em detalhes sobre sua configuração. Mas é útil saber que o bogofilter armazena suas informações (ou seja, as palavras e probabilidades com que ele decide o que é e o que não é spam) em um sistema de banco de dados chamado "Berkeley DB". Esse banco de dados, no caso do bogofilter, é um arquivo que, por padrão, fica em ~/.bogofilter/wordlist.db.

Com o uso, é possível que esse arquivo acabe corrompido (por quedas de luz, interrupções do bogofilter ou disco lotado quando ele está escrevendo no arquivo etc), e isso pode gerar classificações erradas e resultados muito pobres.

Para estar atento a esse problema, segui a sugestão de Dave Relson (um desenvolvedor do bogofilter) e escrevi o seguinte script em ~/.bogofilter/backup.sh:

  #!/bin/bash
  
  BOGO_HOME=~/.bogofilter
  TODAY=$(date +%w)
  WORDLIST=$BOGO_HOME/wordlist.db
  DIR=$BOGO_HOME/$TODAY
  DB_VERIFY=db4.1_verify
  
  if $DB_VERIFY $WORDLIST; then
      # Mantem soh ontem e hoje
      rm -f $BOGO_HOME/$(date -d '2 days ago' +%w)/wordlist.db
      cp -f $WORDLIST $DIR
  fi

Então, crio 7 diretórios, um para cada dia da semana:

  cd ~/.bogofilter && mkdir $(seq 0 6)

O script acima, quando rodado, usa o programa db_verify, distribuído junto com o Berkeley DB (na Debian, o nome varia dependendo da versão; eu estou usando o pacote db4.1-util: "apt-get install db4.1-util" e o nome do programa é db4.1_verify). Esse programa checa a integridade do arquivo de dados e o copia para o diretório referente ao dia atual. Em seguida, apaga (se houver) o arquivo correspondente a 2 dias atrás. Ou seja, tenho backup da base atual (na hora em que o script é rodado) e do dia anterior.

Para automatizar o processo, basta colocar no crontab:

  crontab -e

E, no arquivo editado, colocar:

  MAILTO=seu_email
  0 6 * * * /home/rbp/.bogofilter/backup.sh

Isso executa o script todo dia às 6 da manhã. É claro, você precisa trocar "/home/rbp/.bogofilter/backup.sh" pelo caminho até o script (e lembre-se, ele precisa ser executável) e "seu_email" pelo seu endereço de e-mail (isto porque se o db_verify falha ele imprime erros na tela e o crontab envia toda a saída do comando por e-mail).

Finalmente, se você receber um e-mail do crontab mostrando algum erro no db_verify, não se apavore: ele pode acusar erros se estiver verificando o arquivo enquanto este estiver sendo escrito (ou seja, se o bogofilter estiver rodando naquele momento). Portanto, se receber erro, rode novamente "db_verify ~/.bogofilter/wordlist.db" (em alguma hora em que não esteja recebendo e-mails, ou, se for o caso, copie o arquivo para outro nome em que ele não vá ser modificado durante a verificação). Se seu fluxo de e-mail for muito grande 24h por dia, pode alterar o script para copiar e verificar a cópia. Se continuar recebendo erro, basta copiar o arquivo backupeado mais recente sobre o arquivo corrompido, você perderá no máximo um dia de "treinamento" do bogofilter.

   Rodrigo Bernardo Pimentel                         <rbp@isnomore.net>
   http://isnomore.net                          GPG KeyId: <0x0DB14978>
  
  So cold... Can't move... Can't feel... Can't make complete sentences...
            -- Humphrey, "Cannibal the Musical"

Cryptoloop HOWTO v1.0

Colaboração: Caio Souza Mendes <<caio_sm (a) yahoo com br>>

HOWTO escrito por Ralf Holzer, explicando como criar sistemas de arquivos criptografados com a funcionalidade Cryptoloop, parte do CryptoAPI da série 2.6 do Kernel Linux...

http://tldp.org/HOWTO/Cryptoloop-HOWTO/



Veja a relação completa dos artigos de Rodrigo Bernardo Pimentel

 

 

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script