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:
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
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"