Cyrus kasutamine Gentooga
Sisukord
- 1 Sissejuhatus
- 2 Süsteemi kirjeldus
- 3 Tarkvara install gentool
- 4 Cyruse seadistus
- 5 Cyruse seadistus mysql baasi kasutama
- 6 cyruse haldus käsurealt
- 7 Kasutaja
- 8 Testimine
- 9 Cyruse veebiadministreerimine
- 10 Kirjade automaatne jagamine postkastidesse
- 11 Suurema mailisüstemi haldajale abiks olevat käsurea skriptid
- 12 Vead ja nende prandamine
Sissejuhatus
Cyrus IMAP is named after Cyrus the Great (559 - 530 BC), founder of the Persian kingdom, and King of the World. Cyrus the great is remembered for his tolerance of the various minorities and generally benevolant leadership.
Antud näide on kirjutatud seletamaks kuidas gentoole ehitada cyruse abil võimas mysql ja openmailadminiga hallatav mailiserver.
cyrus kasutab üsna maildir laadset formaati kuid lisanud sellele andmebaasi muutes nii kõike tunduvalt kiiremaks. Seetõttu on cyrus üsna hea valik väga suurte emaili süsteemide tarbeks. Netis väidetakse ,et ka meie kodumaine hot.ee http://www.hot.ee (The Hotmail of Estonia) kasutab cyrust ning sellel hetkel 300,000 users.
Cyruse poolt toetatud protokollid on IMAP, IMAPS, POP3, POP3S, KPOP, LMTP
Süsteemi kirjeldus
Tähele tasub panna ,et cyruse juures postfix ise failide kettale kirjutamisega ei tegele. See on usaldatud täielikult cyrusele endale. Peale kirja saamist posfix kontrollib mysql tabelitest domeeni olemasolu ning annab selle edasi cyruse teenusele mis. Kontrollib taaskord kasutajat mysql'ist pam_mysql abil ning salvestab kirja enda modifitseeritud maildir++ laadsesse formaati ning samuti peab kõikide kirjade kohta enda sisemist andmebaasi. Cyrusel eelnevalt luua vastav mailbox mis on samanimeline kui kasutaja süsteemis. Automaatselt seda ei tehta.
Cyrus töö käigus kasutatakse mitmeid nö andmebaase
- kirjade andmebaas - failisüsteemis salvestatakse iga kiri eraldi faili, vaikimisi asub see kataloogis /var/spool/cyrus/mail; igas postkasti kataloogis on lisaks kirjadele alati kolm faili, cyrus.cache, cyrus.index ja cyrus.header
- postkastide andmebaas - failis /var/lib/cyrus/mailboxes.db on kirjas süsteemi Cyrus kasutajate ja nende postkastide andmebaas ning mida redigeeritakse cyradmin programmiga
- duplikaatide andmebaas - failis /var/lib/cyrus/deliver.db on andmebaas, mida Cyrus kasutab topelt-sõnumite avastamiseks (nt kui saabub sama message id ja ümbriku väärtusega kiri mitu korda; käsuga '/usr/sbin/ctl_deliver -d' näeb selle baasi sisu)
- Cyruse kasutajate andmebaas - antud juhul asub Mysql andmebaasis
Kaustad
Vaikimisi tekitab installimisel cyrus enda kataloogi /var/imap/, suunates selle kausta ümber saab sealt originaalse ja vajaliku kaustapuu kätte. Kaustad peavad kõik olema cyruse kasutaja ja mail grupi omanduses Nt selleks veendumiseks võib anda käsu
# chown -R cyrus:mail /mail/imap
partition-default: /mail/spool/imap /mail/spool/imap mingeid erilisi faile rohkem ei sisalda kui tühjad tähestikufailid ja user fail kus reaalselt asuvad siis failid, pmst pole neid tähestiku järgi nimetatud faile vaja
configdirectory: /mail/imap /mail/imap/ kaustas asuvad veel migmesugused bdb failid mis on vajalikud nt mailboxes.db kus asuvad kõik mailboxide nimed, sieve kataloog on seal ning suus ülamainitud users fail seen failidele
seen file on kohaks kus asub info milline mail on juba loetud nt /var/imap/user/e/eenet.seen
Kirjade liikumise skeem postiserveris järgnevalt
andmebaas /|\ | mail --> postfix --> cyrus
Autentimine kasutajatel toimib skeemi alusel:
kasutaja --> cyrus imapd --> saslauthd --> pam ---> andmebaas
Mis siis täpsemalt starditakse
init-| |-master-+-anvil | |-5*[cleanup] | |-6*[local] | |-pickup | |-5*[pipe] (cyrus) | |-qmgr | |-scache | |-7*[smtp] | |-21*[smtpd] (amavisd socket) | |-tlsmgr | `-2*[trivial-rewrite] |-master-+-53*[imapd] | |-5*[lmtpd] | `-103*[pop3d] |-saslauthd -a pam -n 0
Tarkvara install gentool
emerge postfix emerge net-mail/cyrus-imapd emerge pam_mysql emerge cyrus-imap-admin emerge cyrus-sasl
Eelnevalt tuleks use flagid seadistada järgnevalt
cat >> /etc/portage/package.use <<EOT net-mail/cyrus-imapd pam sieve ssl tcpd net-mail/cyrus-imap-admin ssl dev-libs/cyrus-sasl crypt pam ssl mail-filter/amavisd-new spamassassin EOT
Lisaks vaja installida mysql juhul kui ei ole eraldiseisvat mysql serverit. Mysql install on kirjeldatud teises õpetuses.
rc-update add cyrus default rc-update add postfix default rc-update add saslauthd default
Cyruse seadistus
Kõik cyruse poolt starditavad teenused ja nende startimine tuleb defineerida failis cyrus.conf.
Näitekonfis stardime cyrus deemoni abil teenused imap, imaps, pop3 ja pop3s ning sieve.
/etc/cyrus.conf
START { recover cmd="ctl_cyrusdb -r" } SERVICES { imap cmd="imapd" listen="imap" prefork=5 imaps cmd="imapd -s -U 30" listen="imaps" prefork=0 maxchild=100 pop3 cmd="pop3d" listen="pop3" prefork=25 maxchild=-1 pop3s cmd="pop3d -s" listen="pop3s" prefork=25 maxchild=-1 sieve cmd="timsieved" listen="192.168.10:sieve" prefork=0 lmtpunix cmd="lmtpd" listen="/mail/imap/socket/lmtp" prefork=0 } EVENTS { checkpoint cmd="ctl_cyrusdb -c" period=30 delprune cmd="ctl_deliver -E 3" period=1440 tlsprune cmd="tls_prune" period=1440 }
lmtp peaks olema kindlasti samas kaustas kus configdirectory suunatud
Kõigi teenuste täpsemaks häälestamiseks on fail imapd.conf mis asub kaustas /etc
Sellest toimib kaustade paikamääramine. Sertifikaatide seadistamine. Imap, pop3, sieve täpsem häälestus jpm.
configdirectory: /mail/imap partition-default: /mail/spool/imap tls_ca_path: /etc/imap tls_cert_file: /etc/imap/mail.crt tls_key_file: /etc/imap/mail.key postmaster: postmaster sievedir: /mail/sieve sieve_maxscriptsize: 64 sieve_maxscripts: 5 sendmail: /usr/sbin/sendmail admins: cyrus allowanonymouslogin: no allowplaintext: yes autocreatequota: 10000 reject8bit: no quotawarn: 90 timeout: 30 poptimeout: 10 allowapop: no popminpoll: 0 sasl_pwcheck_method: saslauthd sasl_mech_list: PLAIN lmtp_overquota_perm_failure: no
Cyruse administratiivse kasutaja kasutajanimi võiks näiteks selleks olla 'cyrus'
Loome samuti kaustad /mail/imap ja /mail/spool/imap
Sasli seadistus /etc/sasl2/smtpd.conf
pwcheck_method: saslauthd mech_list: PLAIN LOGIN log_level: 0
saslauthd tuleks seadistada vähemalt gentoos vastavalt tekitama vaid ühe threadi. Ehk siis /etc/conf.d/saslauthd
SASLAUTHD_OPTS="${SASLAUTHD_OPTS} -n 0"
Cyruse seadistus mysql baasi kasutama
postfixi konf
järgnevad seaded teeme /etc/postfix kaustas
Esiteks on vaja lisada peamisse konfifaili järgnevad read, postfix on põhimõtteliselt vaid kirjade vastuvõtja ning edasi cyrusele andja, muid ülesandeid ta ei täida.
main.cf
mailbox_transport = cyrus virtual_alias_domains = mysql:/etc/postfix/mydestination.mysql virtual_alias_maps = mysql:/etc/postfix/virtual.mysql sender_canonical_maps = mysql:/etc/postfix/canonical.mysql
master.cf
cyrus unix - n n - - pipe flags=hu user=cyrus argv=/usr/lib64/cyrus/deliver -e -r ${sender} -m ${extension} ${user}
mysql kasutamiseks failid
/etc/postfix/mydestination.mysql
mydestination.mysql
hosts = localhost user = database password = parool dbname = mail table = domains select_field = domain where_field = domain
/etc/postfix/virtual.mysql
virtual.mysql
hosts = localhost user = baas password = parool dbname = mail table = virtual select_field = dest where_field = address additional_conditions = and active = '1'
/etc/postfix/canonical.mysql
canonical.mysql
hosts = host user = baas password = parool dbname = mail table = user select_field = canonical where_field = mbox additional_conditions = and active = '1' limit 1
Mysql baasi seadistus
Loome baasi mail. Seadistame sellele kasutaja ning parooli.
Vajalikud on kolm tabelit
- domains kus hoitakse domeene
- users kus loomulikult kasutajate info
- virtual mis täidab põhimõtteliselt sama ülesannet mis alias fail /mail kataloogis
Loome baasi mail tabelid. Järgneva info võib otse sql'is käivitada
--
-- Table structure for table `domains`
--
DROP TABLE IF EXISTS `domains`;
CREATE TABLE `domains` (
`ID` int(10) unsigned NOT NULL auto_increment,
`domain` varchar(64) collate utf8_estonian_ci NOT NULL default '',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1206 DEFAULT CHARSET=utf8 COLLATE=utf8_estonian_ci;
--
-- Table structure for table `user`
--
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`mbox` varchar(16) collate utf8_estonian_ci NOT NULL default '',
`person` varchar(150) collate utf8_estonian_ci NOT NULL,
`canonical` varchar(100) collate utf8_estonian_ci NOT NULL default '',
`password` varchar(40) collate utf8_estonian_ci NOT NULL default '',
`active` tinyint(1) NOT NULL default '0',
`created` int(10) unsigned NOT NULL default '0',
`last_login` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`mbox`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_estonian_ci;
--
-- Table structure for table `virtual`
--
DROP TABLE IF EXISTS `virtual`;
CREATE TABLE `virtual` (
`address` varchar(255) collate utf8_estonian_ci NOT NULL default '',
`dest` text collate utf8_estonian_ci,
`active` tinyint(1) NOT NULL default '1',
PRIMARY KEY (`address`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_estonian_ci;
Seejärel võime lisada tabelisse domeeni, kasutaja ning mõne aliase
Pam häälestus mysql tarbeks
Vajalik, et sasl saaks üle pami autentida end andmebaasi vastu tasub tähele panna, et kuigi hetkel kasutatakse mysqli võib autentida samahästi ka ükskõik mis muu toetatud süsteemi vastu
teeme imap pam konfiguratsiooni
# /etc/pam.d/imap #auth required pam_nologin.so #auth include system-auth #account include system-auth #session include system-auth auth sufficient pam_mysql.so user=mail passwd=parool host=localhost db=baas table=user usercolumn=mbox passwdcolumn=password crypt=1 sqlLog=0 account required pam_mysql.so user=mail passwd=parool host=localhost db=baas table=user usercolumn=mbox passwdcolumn=password crypt=1 sqlLog=0
Juhul kui pam autentimine mingil põhjusel tõrgubnvõb auto ja account ridade lõppu lisada verbose ,et saada rohkem infot /var/log/auth.log'i
Lisada võib samuti where=mailboxes.active=1 mis puhul disabletud kasutajate ligipääsu piiratakse.
Teeme loodud imap failist symlingid teistele pam failidele.
ln /etc/pam.d/imap /etc/pam.d/pop ln /etc/pam.d/imap /etc/pam.d/pop3 ln /etc/pam.d/imap /etc/pam.d/pop3s ln /etc/pam.d/imap /etc/pam.d/pops ln /etc/pam.d/imap /etc/pam.d/sieve ln /etc/pam.d/imap /etc/pam.d/smtp ln /etc/pam.d/imap /etc/pam.d/nntp
mkdir /var/lib/amavis
Crypt parameetri võtmete selgitus
- 0 (or "plain") = No encryption. Passwords stored in plaintext. HIGHLY DISCOURAGED.
- 1 (or "Y") = Use crypt(3) function
- 2 (or "mysql") = Use MySQL PASSWORD() function. It is possible that the encryption function used by pam-mysql is different from that of the MySQL server, as pam-mysql uses the function defined in MySQL's C-client * API instead of using PASSWORD() SQL function in the query.
- 3 (or "md5") = Use MySQL MD5() function
Lisaks on vigade tuvastamisel abiks verbose=1 võti
cyruse haldus käsurealt
Kõik cyruse tööd toimuvad cyradm utiliidi vahendusel
Serveri administraatoriks on kasutaja Cyrus. Selleks ,et saaks cyradm abil cyruse shelli kasutada on vaja esimesena seada cyrus kasutajale parool. muudame cyruse parooli ja testime selle toimimist
Selleks lisame mysql tabelisse kasutaja cyrus
INSERT INTO `user` VALUES (0,'cyrus','postiserveri admin','postmaster@zoo.edu.ee','d8e8fca2dc0f896fd7cb4cb0031ba249',1162296952,1189589660)
Kasutades lokaalseid cyruse kasutajaid ning mitte keskset andmebaasiserverit vaid bdb andmebaase võib tekitada admin kasutaja järgnevalt
saslpasswd2 -c cyrus
Parool salvestadakse seljuhul kaustas /etc/sasl2 asuvasse faili sasldb2
Nüüd võib logida cyruse konsoolile.
cyradm -user cyrus 127.0.0.1
Nimekiri peamistest vajalikest cyruse käskudest
cm Loob mailbox'i dm kustutabmailbox exit väljumiseks cyradm'ist lm nimekiri mailbox'idest lq Näitab quota informatsiooni lqm Quota info etteantud mailboxi kohta renm Muudab mailboxi nime sq Quota seadistamiseks
Cyruses kasutajale mailboxi luues tuleb pidada meeles ,et see tuleb luua kujul user.kasutajanimi
näiteks cyrus.mart
cm user.mart
Olemas on veel hulk käsurea abivahendeid näiteks
/usr/lib/cyrus/quota
mis näitab kasutajate nimistut koos quotaga ja näiteks /usr/lib/cyrus/deliver mailide saatmiseks viisil
echo tekst | /usr/lib/cyrus/deliver -q kasutajanimi
Kasutajate ümbernimetamine ehk renamemailbox käsk töötab ainult üksikute folderite peal, mitte ülemise taseme postkastidega, mistõttu vanade postkastide ümbernimetaimine on:
- Create a new top-level mailbox named for the new username (for example, user.newname).
- Create new sub-mailboxes for all the mailboxes in the user's old hierarchy (user.newname.sent-mail ).
- Replace the new, empty mailbox hierarchy with the old mailbox hierarchy. (failisüsteemis)
- Delete the old account.
- Reconstruct the new account using the Cyrus reconstruct utility.
- Set a quota root on the new account.
NB! 3. punkt tuleb teha failisüsteemis, mitte IMAPi vahenditega
Kasutaja
Loome test domeeni test.ee ja kasutaja mart
Genereerime parooli
$ echo test | md5sum d8e8fca2dc0f896fd7cb4cb0031ba249 -
Lisame kasutaja koos genereeeritud parooliga mysqli tabelisse
INSERT INTO `domains` VALUES (0,'test.ee') INSERT INTO `user` VALUES (0,'mart','mart metsast','mart@test.ee','d8e8fca2dc0f896fd7cb4cb0031ba249',1162296952,1189589660) INSERT INTO `virtual` VALUES (0,'test@test.ee','mart',1)
Ning tekitame kasutaja ka cyrusesse endasse
$ cyradm -user cyrus 127.0.0.1 cm user.mart
Kasutajaid saab teha ka kujul kasutaja@domeen.ee mille plussideks on, et jääb paremini meelde - meiliaadress tuleb nagunii meeles hoida, administreerimine selgem ehk vähem segadust administraatoril - pole mingeid numbritega jamamist.
cyrus nõuab selle jaoks 'virtdomains' sisse lülitamist, mis tähendab, et ta hakkab uusi postkaste tegema senise: /mail/spool/imap/user/kool123 asemel /mail/spool/imap/domain/kool.edu.ee/user/kool123
Virtdomeenide sisselülitamine võimaldab per-domeen adminne. Need tuleb aga kahjuks kõik imapd.confi kirjutada, mis võib tähendada sadade kontode sinna lisamist. Lisaks ei anna see midagi erilist. (võibolla, et iga admin saaks oma enda spets softi kasutada. võibolla IMPil on mõni plugid vmt)
Testimine
Gentoos on vaja telneti utiliidi kasutamiseks paigaldada kõigepealt vatav pakett
# emerge net-misc/netkit-telnetd
Seejärel võime asuda testima:
$telnet 192.168.1.10 143 Trying 192.168.1.10... Connected to 192.168.1.10. Escape character is '^]'. * OK gentoo20070412 Cyrus IMAP4 v2.2.12-Gentoo server ready 1 LOGIN mart parool 1 OK User logged in 1 logout Connection closed by foreign host.
Imapi käskudest leiab rohkem infot urlilt http://bobpeers.com/technical/telnet_imap.php
Testime mailisaatmist
mail käsk tuleb gentoosse paketist nail
# emerge nail
ja edasi kasutada kujul ehco "kiri" | mail mart@zoo.tartu.ee
Imap testimiseks sobib ka utiliit imtest
# imtest -m login -a test -u test localhost S: * OK [CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID STARTTLS AUTH=PLAIN SASL-IR] mail.eenet.ee Cyrus IMAP v2.3.14 server ready Please enter your password: C: L01 LOGIN test {9} ... Q01 OK Completed
Cyruse veebiadministreerimine
Kõigi puhul tuleks uurida mis kujul nad soovivad tabeleid ja vastavaid muudatusi läbiviia
http://openmailadmin.ossdl.de/
http://email.uoa.gr/projects/cyrusmaster/index.php
Openmailadmin vajab järgnevaid pakette gentool
# emerge php # emerge dev-php/PEAR-Log # emerge dev-php/adodb
Kirjade automaatne jagamine postkastidesse
Avaliku IP peal TCP portil 2000 kuulab programm sieve, tegemist Cyrus tarkvara koosseisu kuuluv deemoniga (ingk. k. sõel) mis võimaldab nt kirja päise ridade alusel korraldada kirjade salvestamist kasutaja postkasti erinevatesse kataloogidesse (ingl. k. folder). põhimõtteliselt procmail analoog imapi jaoks.
Selleks tuleb esmalt moodustada tekstifail, nt
$ cat /var/spool/sieve/m/mart/default require "fileinto"; if header :contains "List-Id" "debian-mirrors.lists.debian.org" { fileinto "INBOX.d-m";} elsif header :contains "To" "mart.kask@loomaaed.tartu.ee" { fileinto "INBOX.@loomaaed.tartu.ee";} else { fileinto "INBOX";}
Antud juhul ütleb sieve fail, et
- kirjad, mille päises List-Id: rida sisaldab väärtust debian-mirrors.lists.debian.org tuleb kopeerida kataloogi d-m
- kirjad, mille päises To: rida sisaldab väärtust mart.kast@loomaaed.ee tuleb kopeerida kataloogi @loomaaed.ee
- ülejäänud kirjad kopeeritakse lihtsalt inboxi
Tööks tuleb tekstifaili alusel moodustada nn byte-code fail öeldes
$ /usr/lib/cyrus/bin/sievec /var/spool/sieve/m/mart/default /var/spool/sieve/m/mart/defaultbc
Puhkuseteadete saatmiseks e vacationiks tuleb tekidada järgneva sisuga sieve
true { vacation :days 7 :addresses ["test@zoo.edu.ee"] text: This is an automated reply; I am away and will not be able to reply to you immediately.I will get back to you as soon as I return. . ; }
Automaatselt reeglite loomiseks on veebimailile nimega squirrelmail loodud näiteks komonent nimeg avelsieve http://email.uoa.gr/avelsieve/ Seda pole juba uuendatud küll mõnda aega. Ka on olemas plugin IMPile nimega Ingo
Neil mõlemal pluginal on aga see puudus, et nad ise ei parsi sieve skripte, vaid hoiavad andmebaasis oma versiooni skriptist ja muutmisel uuendavad ühesuunaliselt serverit. See tähendab, et korraga tohibki ainult üks taoline plugin aktiivne olla, muidu ei näksi siga ka enam, mis reeglid serveris aktiivsed on. Graafilisi sieve parsereid eriti pole. Ainukene rohkem universaalsem tundub olevat SmartSieve, mis vähemalt ei eira serveris juba olevaid skripte ja lubab neid toorel kujul muuta, pakkudes ise Avelsievele sarnast funktsionaalsust.
Tooret skriptimist võimaldab ka Thunderbirdi add-on: http://sieve.mozdev.org/
Suurema mailisüstemi haldajale abiks olevat käsurea skriptid
Mysql'ist ruby abil kasutajate nimekirja saamine
#!/usr/bin/env ruby # # skript kõikide postkastide loendamiseks require 'dbi' dbh = DBI.connect("DBI:Mysql:andmebaas:hostname","kasutaja","parool") dbh.execute("SET NAMES latin1") ret = dbh.select_all("select * from user where active = 1") ret.each{|row| puts row['mbox'] }
Ööpäev vanemate kirjade kustutamiseks
#!/usr/bin/env ruby piir = Time.now - 86400 # Ööpäevajagu sekundeid cmd = "/usr/bin/mailq | /usr/bin/cleanq" pipe = IO.popen(cmd) pipe.each_line{|line| # mingi probleem edastusega if line =~ /^([A-F0-9]{11})\s+\d+\s+(... ... .. ..:..:..).*\(delivery temporarily suspended/ id = $1 aeg = Time.parse($2) if aeg < piir #puts id puts line end end }
Kasutajate quotade tabeli vaatamiseks
# /usr/lib/cyrus/quota user.{a..z}
Soovides tabelit ,et näha palju kettaruumi kasutajad tarbivad sobib selline skript /mail/spool/imap/user tuleb asendada failisüsteemis kohaga kus asuvad kasutajate mailid
#!/bin/bash for g in $( ls /mail/spool/imap/user ) ; do hgd=`du -s /mail/spool/imap/user/$g` vbd=`echo $hgd | awk '{print $1}'` if [ $vbd -lt 92160 ]; then echo "v2iksem" > /dev/null else du -sh /mail/spool/imap/user/$g fi done
Kasutajate otseseks tuvastamiseks kes üle quota läinud aga
#!/bin/bash for i in `/usr/lib/cyrus/quota | tr -s ' '| awk '{print($2","$1","$4)}' | sed -e's/user\.//' |egrep "(^9[5-9])|(^digit:{3})"`; do protsent=`echo $i | cut -f1 -d',' ` limiit=`echo $i | cut -f2 -d','` kasutaja=`echo $i | cut -f3 -d','` echo "p: $protsent l: $limiit k: $kasutaja"; done
Ning kõigi kasutajate quota muutmiseks korraga taaskord tuleb muuta kataloogi rada kus asuvad failid kasutajatel näites antakse igale kasutale 500M
#!/bin/bash for g in $( ls /mail/spool/imap/user ) ; do echo "setquota user.$g 512000;quit" | cyradm -user cyrus -server 127.0.0.1 --pass parool done
Vead ja nende prandamine
Bdb seadistamine, vaikeseadistuste vaatamiseks tuleb anda käsk
# db4.7_stat -m -h /mail/imap/db < 642KB 24B Total cache size < 648KB Pool individual cache size > > 10MB 2KB 24B Total cache size > > 1MB 264KB Pool individual cache size
Neid saab muuta failist DB_CONFIG
set_cachesize 0 8388608 8 set_lg_regionmax 1048576 set_lg_bsize 2097152
http://www.cjc.org/blog/archives/2006/08/22/cyrus-imap-log-and-cache-settings/ http://cyrusimap.web.cmu.edu/imapd/install-perf.html http://www.oracle.com/technology/documentation/berkeley-db/db/programmer_reference/env_db_config.html
Kui logisse tekivad näiteks read.
Sep 3 03:43:43 mail lmtpunix[10604]: DBERROR db4: Logging region out of memory; you may need to increase its size Sep 3 03:43:43 mail lmtpunix[10604]: DBERROR: opening /var/imap/deliver.db: Cannot allocate memory Sep 3 03:43:43 mail lmtpunix[10604]: DBERROR: opening /var/imap/deliver.db: cyrusdb error Sep 3 03:43:43 mail lmtpunix[10604]: FATAL: lmtpd: unable to init duplicate delivery database Sep 3 03:43:43 mail master[5498]: service lmtpunix pid 10604 in READY state: terminated abnormally
Täpsemalt saab veel näha teadet käsuga
db4.7_stat /mail/imap/deliver.db -l
Kui veateateks on db4.7_stat: log.0000000001: log file unreadable: Read-only file system
Võib minna kausta /mail/imap ja anda seal käsu
touch log.0000000001 chown cyrus log.0000000001 chmod 600 log.0000000001
Ning tuleviku tarbeks võib tekidada ka logi 2
Probleeme berkeleydb'ga saab parandada saab järgneva käsuga andes ette cyruse andme failide asukoha
db4.2_recover -v -h /var/imap/db
Mitmesuguste andmebaasi vigade puhul aitab sageli kindlamalt osade failide kustutamine ning cyrusel nende uuesti tekitada laskmine, samuti tasuks dumpida ning restoreda mailboxes anembaas
rm /mail/imap/db/* rm /mail/imap/deliver.db rm /mail/imap/tls_sessions.db
Sasl testimiseks saab kasutada käsku
# testsaslauthd -u mart -p parool -s imap 0: OK "Success."
Kui cyrus ei tööta on erroriks (temporary failure. Command output: couldn't connect to lmtpd: Connection refused_ 421 4.3.0 deliver: couldn't connect to lmtpd_) ja kõik kirjad paigutatakse sabasse /var/spool/postfix/deferred/
Cyryse migreerimine 32 bitilt 64 bitile
32 bitisel platformil anda käsud
/usr/lib/cyrus/ctl_mboxlist -d > mailboxes.txt
seejärel 64 bitisel platformil kustutada kaustades vanad andmebaasifailid
rm /var/imap/db/* rm -rf /var/imap/db.backup* rm /var/imap/*.db
Cyrus kasutana seejärel anda käsud
Rekonstrueerime mailboxes.db faili
/usr/lib/cyrus/ctl_mboxlist -u < mailboxes.txt
Ehitame uuesti kõik andmebaasid tekitades /var/imap/user ja /var/imap/quota failid kuid kaovad annotations.db, deliver.db ja tls_sessions.db
Seda võib teha kiirelt käsuga
/usr/lib/cyrus/reconstruct -r -f user.mart
Võib aegamööda alloleva skriptiga, et mitte tekitada töötavale serverile liiga suurt koormust
#!/bin/sh for g in $(cat mailboxes.txt | awk '{ print $1 }' ) ; do echo $g /usr/lib/cyrus/reconstruct $g sleep 1 done
fatal region error detected; run recovery Vahel kui esineb sarmaseid db4 erroreid näiteks on tark kustutada .db failid imap ja imap/db kaustades
Viimase käsu täitmine võib suurte mailiserveritega võtta kaua aega
Veidi juttu imapist
http://oreilly.com/catalog/mimap/chapter/ch09.html
Kaunis näide tõeliselt suurest mailisüsteemist
https://docs.rice.edu/confluence/display/ITTUT/Cyrus+Email+Service+Design
Veel suurtest mailiserveritest
http://ebusiness.gbdirect.co.uk/case_studies/active_directory_imap_authentication.html