[sa-conf] пользователь nospam (autolearn часть 2)

Victor Ustugov victor на corvax.kiev.ua
Сб Мар 19 15:47:49 EET 2005


Victor Ustugov wrote:

>> А вот симлинки в ~nospam, они к обучению относятся, про это расскажи.
> 
> ну, это моя личная заморочка, давай я напишу позже. мне сейчас уезжать 
> надо, но сегодня я заеду к asm'у, от него и напишу

я на разных хостах я использую две схемы:

1. используется на всех хостах asm'а и на части моих хостов:
ОС: FreeBSD
MTA: exim
mail storage: maildir

2. используется на остальных моих хостах:
ОС: RedHat/Fedora
MTA: sendmail
mail storage: mailbox

итак, подробнее:

1-я схема, юзаем maildir'Ы:

весь механизм обучения живет в /home/nospam. но на самом деле - это неважно, 
ты можешь его расположить, где угодно...

письма для обучения копируются по IMAP/IMAPS в maildir'ы.
пример (с bsd.falbi.kiev.ua):
путь к maildir'у для обучения спамом:
/var/vmail/bsd.falbi.kiev.ua/corvax/.spam.sa-learn-spam
путь к maildir'у для обучения не спамом:
/var/vmail/bsd.falbi.kiev.ua/corvax/.spam.sa-learn-nonspam

после обучения письма складываются в два maildir'а:
путь к maildir'у для сохранения спама после обучения:
/var/vmail/bsd.falbi.kiev.ua/corvax/.spam.spam
путь к maildir'у для сохранения не спама после обучения:
/var/vmail/bsd.falbi.kiev.ua/corvax/.spam.nonspam

на эти maildir'ы создаются симлинки в /home/nospam и /home/nospam/backup:
/home/nospam/sa-learn-nospam-cur -> 
/var/vmail/bsd.falbi.kiev.ua/corvax/.spam.sa-learn-nonspam/cur
/home/nospam/sa-learn-nospam-new -> 
/var/vmail/bsd.falbi.kiev.ua/corvax/.spam.sa-learn-nonspam/new
/home/nospam/sa-learn-spam-cur -> 
/var/vmail/bsd.falbi.kiev.ua/corvax/.spam.sa-learn-spam/cur
/home/nospam/sa-learn-spam-new -> 
/var/vmail/bsd.falbi.kiev.ua/corvax/.spam.sa-learn-spam/new
/home/nospam/backup/nospam -> 
/var/vmail/bsd.falbi.kiev.ua/corvax/.spam.nonspam/new
/home/nospam/backup/spam-cur -> /var/vmail/bsd.falbi.kiev.ua/corvax/.spam.spam/cur
/home/nospam/backup/spam-new -> /var/vmail/bsd.falbi.kiev.ua/corvax/.spam.spam/new

еще - необходимо создать пару временных каталогов:
/home/nospam/tmp/nospam
/home/nospam/tmp/spam

теперь собственно сам обучающий скрипт:

~~~~~~~~~~
#!/bin/sh

sa_conf_file=/usr/local/etc/mail/spamassassin/local.cf
default_log=/usr/home/nospam/sa-learn.log

if test "$SHELL" = "/bin/sh" ; then
     log=${default_log}
else
     showdots="--showdots"
fi

learn() {
     msg_dir=$2
     tmp_dir=$3
     bak_dir=$4

     if test ! -z "`ls ${msg_dir}`" ; then
         rm -rf ${tmp_dir}/* 2>/dev/null
         mv ${msg_dir}/* ${tmp_dir}/
         if test -z "$log" ; then
             echo /usr/local/bin/sa-learn ${showdots} --$1 --dir ${tmp_dir}/ 
--prefs-file=${sa_conf_file}
             /usr/local/bin/sa-learn ${showdots} --$1 --dir ${tmp_dir}/ 
--prefs-file=${sa_conf_file}
         else
             echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"  >>${log}
             date  >>${log}
             echo /usr/local/bin/sa-learn ${showdots} --$1 --dir ${tmp_dir}/ 
--prefs-file=${sa_conf_file} >>${log}
             /usr/local/bin/sa-learn ${showdots} --$1 --dir ${tmp_dir}/ 
--prefs-file=${sa_conf_file} >>${log}
         fi
         mv ${tmp_dir}/* ${bak_dir}
     fi
}

learn nonspam sa-learn-nospam-new tmp/nospam backup/nospam
learn nonspam sa-learn-nospam-cur tmp/nospam backup/nospam
learn    spam sa-learn-spam-new   tmp/spam   backup/spam-new
learn    spam sa-learn-spam-cur   tmp/spam   backup/spam-new
~~~~~~~~~~

строки слегка перенеслись, но ты поймешь...
если будешь использовать эту схему на линуксе, просто замени пути на sa-learn 
и на local.cf
в остальном - можно использовать скрипт без изменений. нужно только 
подрихтовать симлинки, чтобы они указывали на твои мейлдиры для обучения и 
сохранения обученных писем

2-я схема, юзаем mailbox'ы:

весь механизм обучения живет в /usr/local/debug/mail/spamassassin/bayes. но на 
самом деле - это неважно, ты можешь его расположить, где угодно...

письма для обучения копируются по IMAP/IMAPS в mailbox'ы.
пример (с corvax.falbi.kiev.ua):
путь к mailbox'у для обучения спамом:
/home/corvax/Mail/spam/sa-learn-spam
путь к mailbox'у для обучения не спамом:
/home/corvax/Mail/spam/sa-learn-nonspam

после обучения письма складываются в два mailbox'а:
путь к mailbox'у для сохранения спама после обучения:
/home/corvax/Mail/spam/spam
путь к mailbox'у для сохранения не спама после обучения:
/home/corvax/Mail/spam/nonspam

на каталог с этими mailbox'ами создается симлинк в 
/usr/local/debug/mail/spamassassin/bayes:
/usr/local/debug/mail/spamassassin/bayes/spam -> /home/corvax/Mail/spam

в качестве временного каталога используется ~/tmp

теперь собственно сам обучающий скрипт:

~~~~~~~~~~
#!/bin/bash

spam_dir=/home/corvax/Mail/spam
tmp_dir=~/tmp

if [ "$BASH_ENV" == "" ]; then
     log=/home/corvax/logs/sa-learn.log
else
     showdots="--showdots"
fi

if [ "$log" != "" ]; then
     echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> ${log} 2>&1
     date >> ${log} 2>&1
fi

learn() {
# 1-й параметр - признак спам/не спам
     spam_flag=$1
# 2-й параметр - mailbox с обучаемыми письмами
     mbox=$2
# 3-й параметр - временный mailbox
     tmp_mbox=$3
# 4-й параметр - резервный mailbox
     bak_mbox=$4

     cat ${mbox} > ${tmp_mbox}
     echo -n>${mbox}
     if [ "$log" == "" ]; then
         echo sa-learn --${spam_flag} --mbox ${tmp_mbox}
         sa-learn ${showdots} --${spam_flag} --mbox ${tmp_mbox}
     else
         echo sa-learn --${spam_flag} --mbox ${tmp_mbox} >> ${log} 2>&1
         sa-learn ${showdots} --${spam_flag} --mbox ${tmp_mbox} >> ${log} 2>&1
     fi
     cat ${tmp_mbox} >> ${bak_mbox}
}

learn nonspam ${spam_dir}/sa-learn-nonspam ${tmp_dir}/sa-learn-nonspam 
${spam_dir}/nonspam
learn    spam ${spam_dir}/sa-learn-spam    ${tmp_dir}/sa-learn-spam 
${spam_dir}/spam

~~~~~~~~~~

в конце две строки перенеслись, но ты поймешь...
нужно только подрихтовать симлинки, чтобы они указывали на твой каталог с 
mailbox'ами для обучения и сохранения обученных писем


в общем, вроде все. если что неясно написано - спрашивай

-- 
Best wishes Victor Ustugov   mailto:victor на corvax.kiev.ua
public GnuPG/PGP key:        http://victor.corvax.kiev.ua/corvax.asc
ICQ: 77186900, 32418694      CRV2-RIPE, CRV-UANIC




Подробная информация о списке рассылки sa-conf