FreeBSD — exim + rspamd

Идея о том чтобы выкинуть нафик непомерно прожорливый spamassassin из почтовой связки exim + dovecot давно мучила мне мозг. В особенности если учесть что поток почты единицы писем в сутки 🙂 Но вот случайно набрел на просторах инета инфо про замечательную альтернативу SA — rspamd. Заинтриговала невероятная легковесность решения при сохранении функциональности. Ну чтож … гоним метлой из системы жирного spammassassina и пробуем настроить rspamd. Вроде бы все должно быть просто, вот и документация есть — дел на пару минут, ан нет — установить с полпинка не получилось 🙂
Итак, как я говорил выше, на сервере установлен и работает exim + sa, для начала нужно отучить exim проверять письма spamassasin-ом, для этого уберите из конфига exim-а все что вяжет его с SA. Это просто, справится любой.
Дальше тоже просто — установить из портов rspamd. Тут и писать нечего, идем в порты и устанавливаем привычным способом.
А вот следующий шаг оказался для меня тяжеловат — нужно пересобрать exim с поддержкой rspamd, для этого есть patch patch-exim-src_spam.c.diff который можно скачать вот тут.
Патч скачал, скопировал на сервер в файл /root/exim_patch, дальше делаю так:

root@black:~# cd /usr/ports/mail/exim
root@black:/usr/ports/mail/exim# make deinstall
root@black:/usr/ports/mail/exim# make clean
root@black:/usr/ports/mail/exim# make extract
root@black:/usr/ports/mail/exim# cd work/exim-4.80.1
root@black:/usr/ports/mail/exim/work/exim-4.80.1# patch -p1 < /root/exim_patch

И нежданно-негадано получаю вот такую ошибку:

root@black:/usr/ports/mail/exim/work/exim-4.80.1# patch -p1 < /root/exim_patch
Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|diff --git a/src/OS/os.h-Linux b/src/OS/os.h-Linux
|index 3fead17..03fea75 100644
|--- a/src/OS/os.h-Linux
|+++ b/src/OS/os.h-Linux
--------------------------
File to patch: ^C
root@black:/usr/ports/mail/exim/work/exim-4.80.1#

Тоесть, diff не понял что мы хотим патчить и попросил явно указать файл. Смотрим в сам патч, в нем написано, что патчить нужно файлы которые находятся в директории src/src, вот к примеру кусок кода из патча:

diff --git a/src/src/expand.c b/src/src/expand.c
index 1da2225..7da567a 100644
--- a/src/src/expand.c
+++ b/src/src/expand.c
@@ -618,6 +618,7 @@ static var_entry var_table[] = {
   { "sn8",                 vtype_filter_int,  &filter_sn[8] },
   { "sn9",                 vtype_filter_int,  &filter_sn[9] },
 #ifdef WITH_CONTENT_SCAN
+  { "spam_action",         vtype_stringptr,   &spam_action },
   { "spam_bar",            vtype_stringptr,   &spam_bar },
   { "spam_report",         vtype_stringptr,   &spam_report },
   { "spam_score",          vtype_stringptr,   &spam_score },
diff --git a/src/src/globals.c b/src/src/globals.c
index 74b6edb..e6f02fb 100644
--- a/src/src/globals.c
+++ b/src/src/globals.c
@@ -1212,6 +1212,7 @@ BOOL    smtp_use_size          = FALSE;
 uschar *spamd_address          = US"127.0.0.1 783";
 uschar *spam_bar               = NULL;
 uschar *spam_report            = NULL;
+uschar *spam_action            = NULL;
 uschar *spam_score             = NULL;
 uschar *spam_score_int         = NULL;
 #endif
diff --git a/src/src/globals.h b/src/src/globals.h
index db436c0..fc4d9f6 100644
--- a/src/src/globals.h
+++ b/src/src/globals.h
@@ -769,6 +769,7 @@ extern BOOL    smtp_use_size;          /* Global for passed connections */
 extern uschar *spamd_address;          /* address for the spamassassin daemon */
 extern uschar *spam_bar;

Почему так? Зачем? Я так и не понял, притом что даже в обычном таре с исходниками exim нету в директории src вложенной директории src. Думаю может спецом разработчик так написал чтобы человек который это будет юзать, вдумчиво подошел к процессу установки. Ну типа не сработает в 100% случаев с первого раза, заставляет вникать в код, думать, еще раз думать и только потом пользовать 🙂
Параноидально … но всеже.
Ну это я одолел, как можно догадаться, достаточно убрать одну src в пути и все заработает 🙂 Для особо непонятливых, нужно сделать из вот этого:

a/src/src/globals.c

вот это:

a/src/globals.c

и так пройтись по всему файлику с патчем и поубирать лишний src.
Ну дальше все получилось как написано в доке, конфиг поправил без проблем, exim взлетел, rspamd тоже. Опять же по доке, создайте каталоги /var/run/rspamd и /var/log/rspamd и поменяйте на них овнера на nobody:nobody
Ну вобщем, думаю все дальше будет ясно, удачи!
P.S. Что касается целесообразности данной проги в продакшине, ничего сказать не могу. На свой личный сервак с парой-тройкой доменов поставил, но нагрузки по почте там особо нету, поэтому и сказать ничего не могу. А на бойкие сервера ставить не рискнул, уж больно хлопотно, пусть SA трудится пока ресурсы не поджимают.
Enjoy!

    • x0r
    • Май 30th, 2014 2:06дп

    patch -p2 < /root/exim_patch спасёт отца русской демократии от правки исходников.

  1. @x0r
    Спасибо за совет!
    Вполне возможно 🙂 Я «на Вы» с исходниками, поэтому делал все по оф.докам, ну и когда не получилось разбирался уже в меру своих умений 🙂

  1. Трэкбэков пока нет.

Why ask?