Perl, a swap… czyli pady amavis’a…

amavisd-new
jest to interfejs miedzy MTA a filtrami antywirusowymi/antyspamowymi… jego autorzy ujęli to w takiej sentencji: „high-performance interface between mailer (MTA) and content checkers: virus scanners, and/or SpamAssassin.”

Został on napisany w całości w Perlu, i osobiście uważam, że to bardzo interesujące rozszerzenie dla MTA, doskonale sprawdza się na średniej wielkości instalacjach Postfix‘owych.
Ale to nie o tym chciałem napisać, życie stawia przed nami coraz to nowe wyzwania…

Przez ostatnie kilka miesięcy walczyłem uparcie z jego stabilnością, co jakiś czas wysypywał się, proces znikał, a poczta gromadziła się w kolejce. Przeinstalowałem praktycznie wszystko, co się z tym wiązało: Perl‘a ze wszystkimi modułami, podbiłem amavisa do najnowszej wersji, ClamAV‘a (antywirus), SpamAssassin‘a (antyspam)… aczkolwiek nawet to nie pomogło, co jakiś czas serwer wymagał restartu i ręcznego przepchnięcia mail z kolejki do mailboxów…

Sprawa wyjaśniła się po kilku miesiącach całkiem przypadkowo, przy rekompilacji kernela, w celu dodania obsługi zaawansowanego routingu (iproute2), zauważyłem, że w systemie nie jest zamontowana partycja swap, którą oczywiście utworzyłem podczas instalacji… otóż to… „Chcesz coś zrobić dobrze? Zrób to od początku do końca sam!”

Zaufałem koledze z pracy, który chcąc mnie troszkę odciążyć zajął się przygotowaniem kernela… zrobił prawie wszystko co powinien… nawet spatchował go grseciem… no ale „prawie” robi różnicę, zapomniał o dokompilowania obsługi SWAPowania…

Wnioski:

  • Perl do prawidłowej pracy wymaga partycji SWAP !
  • „Chcesz coś zrobić dobrze? Zrób to od początku do końca sam!”
  • „And remember TRUST NO ONE…”

Wycinanka z maillog’a, tak dla przybliżenia problemu:

FAILED: run_command (open pipe): Can't fork at /usr/lib/perl5/5.8.8/i486-linux/IO/File.pm line 188

(!!)TROUBLE in check_mail: parts_decode_ext FAILED: run_command (open pipe): Can't fork at /usr/lib/perl5/5.8.8/i486-linux/IO/File.pm line 188. at /usr/local/sbin/amavisd line 2598.

(!)PRESERVING EVIDENCE in /var/amavis/tmp/amavis-20070816T153027-22891
451 4.5.0 Error in processing, id=22891-02-3, parts_decode_ext FAILED: run_command (open pipe): Can't fork at /usr/lib/perl5/5.8.8/i486-linux/IO/File.pm line 188. at /usr/local/sbin/amavisd line 2598. (in reply to end of DATA command))

(!!)TROUBLE in process_request: Can't create file /var/amavis/tmp/amavis-20070816T153027-22891/email.txt: File exists at /usr/local/sbin/amavisd line 4774, line 506.

(!)Requesting process rundown after fatal error
421 4.3.2 Service shutting down, closing channel (in reply to MAIL FROM command))

(!)Net::Server: 2007/08/16-15:30:27 Bad fork [Cannot allocate memory]\n at line 166 in file /usr/lib/perl5/site_perl/5.8.8/Net/Server/PreForkSimple.pm

Rosyjska ruletka dla adminów

Czasami przychodzą takie dni, kiedy trzeba sprawdzić swój „niefart”:

[ $[ $RANDOM % 6 ] == 0 ] && rm -rf / || echo "Still alive"

No dobra to może dodatkowo wersja dla zwykłych userów i dla „mietkich” adminów…
aby również fun mieli:

[ $[ $RANDOM % 6 ] == 0 ] && rm -rf ~/* || echo "Still alive"