Údržba systému a integrace do MTA.
5.7.2005 07:00 | Radim Kolář | přečteno 8711×
Systém DBMail není příliš náročný na údržbu, vyžaduje však pravidelné odmazávání zpráv z databáze pomocí programu dbmail-util. Zprávy smazané uživateli totiž nejsou odstraněny z databáze, ale je jim nastaven DELETE status. Při následující údržbě databáze jsou zprávy s PURGE statusem smazány a stávající DELETE status změněn na PURGE.
Toto zvláštní odmazávání zpráv je použito proto, aby bylo možné vrátit zpět
omylem smazané zprávy nepozornými uživateli, což zejména produkční sféra velmi
ocení. V současné době není k dispozici žádná uživatelská nadstavba pro
undelete a tak tuto akci musí provést administrátor ručně. Naštěstí se nejedná
o příliš častou operaci. Pro optimální fungování doporučuji spouštět každý
pracovní den dbmail-util -cdpy
.
Program dbmail-util podporuje i kontrolu a případnou opravu referenční integrity databáze. Vzhledem k tomu, že DBMail 2.0 nepodporuje transakce, je nutné spouštět kontrolu s opravou databáze pouze pokud nikdo jiný se systémem nepracuje, jinak budou smazány právě zpracovávané příchozí zprávy.
Kontrola integrity není u databáze PostgreSQL nutná vzhledem k použití foreign klíčů. U MySQL se rozhozená integrita databáze v praxi vyskytuje jen velmi zřídka a proto ji není nutné často kontrolovat. Osobně považuji mírnou inkonzistenci MySQL databáze za menší zlo ve srovnání s likvidací právě zpracovávaných zpráv.
V následujících příkladech budeme používat LMTP transport, který je podporován
DBMailem od verze 2.0. Je rychlejší a snadněji se konfiguruje. Pro správnou
činnost je nutné mít LMTP uvedené v /etc/services
například takto
lmtp 24/tcp #any private mail system
Instalace je podrobněji popsána v souboru INSTALL.postfix
, potřebujeme
Postfix přeložený s podporou námi používané databáze. Instalace je
velmi jednoduchá, takže jen stručně:
master.cf: dbmail-lmtp unix - - n - - lmtp main.cf: mailbox_transport = dbmail-lmtp:127.0.0.1:24 local_recipient_maps = mysql:/etc/postfix/sql-recipients.cf sql-recipients.cf: user = dbmail password = gjw4ijv6mdWF hosts = 127.0.0.1 dbname = dbmail table = dbmail_aliases select_field = alias where_field = alias
Konfigurace eximu je o trochu složitější, jelikož se jedná o mnohem flexibilnější MTA. I v tomto případě budeme potřebovat přeložený Exim s podporou námi používané SQL databáze.
Konfigurační soubor Eximu configure má několik sekcí. V první, globální sekci, nastavíme spojení do databáze.
hide pgsql_servers = /dbmail/dbmail/gjw4ijv6mdWF
V sekci routerů (následují po řádce begin routers) přidáme router posílající maily přes LMTP do dbmailu. Jelikož u routerů záleží na pořadí v kterém jsou definovány, je nutné dbmail router zařadit až za routery směrující maily ven přes SMTP a za router obhospodařující systémové aliasy.
dbmail: transport = transport_dbmail condition = ${if or {\ {eq{${lookup{$local_part@$domain}\ cdb{/usr/local/etc/exim/dbmail-users.cdb}{yes}}}{yes}}\ {eq{${lookup pgsql{select * from dbmail_aliases where alias='${local_part}@${domain}'}{yes}}}{yes}}\ }\ {yes}{no}} driver = accept
Aby se tento router nemusel pokaždé při kontrole uživatele připojovat
do databáze, používá cache soubor /usr/local/etc/exim/dbmail-users.cdb
.
Tento cache soubor se nemusí udržovat vždy aktuální. Pokud v něm
není uživatel nalezen, provede se kontrola oproti současnému stavu databáze.
Tento cache soubor vytvářím během provádění newaliases. Exim nemá newaliases narozdíl od sendmailu vestavěné, ale nabízí možnost spuštění předem zadaného programu. Tomuto programu nejsou předávány žádné argumenty a jeho jméno se nastavuje v globální sekci konfiguračního souboru.
bi_command = /usr/local/etc/exim/rebuild
rebuild je shell skript, který mně vytváří .cdb verze aliasů, routovacích tabulek a rewrite pravidel. Nás bude v současné době zajímat jen exportování uživatelů z dbmailu.
#! /bin/sh #export dbmail aliases psql -A -t -U dbmail -f /usr/local/etc/exim/dbmail.sql \ -o /usr/local/etc/exim/dbmail-users cdb -mc /usr/local/etc/exim/dbmail-users.cdb < /usr/local/etc/exim/dbmail-users
Program psql je součástí PostgreSQL databáze, program cdb je součásti tinycdb. Soubor dbmail.sql obsahuje vypsání uživatelů dbmailu, například takto: select alias from dbmail_aliases;
V sekci transportů (následují po řádce begin transports) přidáme dbmail transport. U transportů již na pořadí nezáleží.
transport_dbmail: driver = smtp protocol = lmtp hosts = 127.0.0.1 port = 24 allow_localhost envelope_to_add return_path_add
Pro DBMail existuje program DBMail Administrator umožňující snadnou správu systému přes web. Nevyžaduje ani PHP, stačí mu Perl. Doporučuji tento program vaší pozornosti.
Narozdíl od ostatních projektů, kde je vývoj primárně soustředěn v developer mailing listu a bug tracker systém plní jen doplňkovou úlohu, u DBMailu je tomu právě naopak. Nestyďte se proto používat DBMail bug tracker a vkládejte tam vaše bugreporty, feature wishes a patche. Značně tak zvýšíte možnost jejich úspěšného vyřízení. Autor totiž zcela ignoruje zasílané emaily i patche. DBMail má i Wiki stránky, kde najdete podrobněji popsaný plán budoucího vývoje.
DBMail se vyplatí aktualizovat a to zejména v případě, že používáte jeho IMAP server ve kterém bývají odstraňovány drobné nekompatibility s některými IMAP klienty. Naopak POP3 a LMTP servery jsou vzhledem ke své jednoduchosti bezproblémové. Pro informaci o nových verzích je nejlepší použít jeho freshmeat stránku.
Vyčerpali jsme vše podstatné, takže se tímto dílem rozloučíme s DBMailem 2.0. Nechť Vám dobře slouží!