• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Cyrus liefert mails nicht in IMAP mailboxen

Status
Für weitere Antworten geschlossen.

Purpi

Newbie
Hallo Liste,

ich weiss, das Prob ist schon mehrfach aufgetaucht. Ich habe auch fleissig dieses Forum durchsucht und gegoogelt, aber eine Lösung finde ich nicht.
Bei fast jedem thread werden andere configs gepostet, ich weiss einfach nicht, was ich ändern muss.

Ich hoffe, Ihr habt noch Zeit und Lust mir zu helfen, ich kriege bald Hörner! :x

Die Ausgangssituation:
* SuSE 9.1, letzter patch-Stand
* Mailsystem auf pop-Basis (fetchmail -> procmail -> postfix -> qpopper) funktionierte einwandrei.
* Dann wollte ich auf IMAP umsetellen. Also HOWTO von Roland Huber durchgearbeitet. Montag, 6. Juni Tag X: qpopper in YAST -> Netzwerkdienste -> inetd ausgeschaltet. Cyrus gestartet.
* Mailtest web.de Adresse - Erfolg!
* Mailtest intern - Nachricht landet in der Warteschlange.

Als Basis für die weitere Beschreibung erstmal die installierten Pakete:
# rpm -qa |egrep -i '(cyrus|sasl|postfix|db)'
unixODBC-2.2.8-55
db1-1.85-85
qca-sasl-1.0-5
qt3-unixODBC-3.3.4-8
db-utils-4.2.52-85
perl-Cyrus-SIEVE-managesieve-2.2.3-79
cyrus-sasl-gssapi-2.1.18-29
perl-Authen-SASL-Cyrus-0.07-119
db-4.2.52-85
gdb-6.1-1
cyrus-sasl-2.1.18-33.8
perl-DBD-mysql-2.9003-22
perl-DBI-1.41-28.4
perl-Cyrus-IMAP-2.2.3-79
cyrus-sasl-crammd5-2.1.18-29
cyrus-sasl-digestmd5-2.1.18-29
cyrus-sasl-otp-2.1.18-29
perl-Authen-SASL-2.06-26
cyrus-imapd-2.2.3-83.22
gdbm-1.8.3-225
postfix-2.1.1-1.12
cyrus-sasl-plain-2.1.18-29

und meine configs:
1. master.cf (Habe ich nach einigen Versuchen mit dem Muster in der Anleitung wieder in den Original-SuSE-Stand gebracht)
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp inet n - n - - smtpd
#smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes
# -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes
#submission inet n - n - - smtpd
# -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes -o smtpd_etrn_restrictions=reject
#628 inet n - n - - qmqpd
pickup fifo n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
qmgr fifo n - n 300 1 qmgr
#qmgr fifo n - n 300 1 oqmgr
#tlsmgr fifo - - n 300 1 tlsmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - 0 bounce
defer unix - - n - 0 bounce
trace unix - - n - 0 bounce
verify unix - - n - 1 verify
flush unix n - n 1000? 0 flush
proxymap unix - - n - - proxymap
smtp unix - - n - - smtp
relay unix - - n - - smtp
# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq unix n - n - - showq
error unix - - n - - error
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
anvil unix - - n - 1 anvil
#localhost:10025 inet n - n - - smtpd -o content_filter=
#
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
#
# maildrop. See the Postfix MAILDROP_README file for details.
#
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
cyrus unix - n n - - pipe
user=cyrus argv=/usr/lib/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail unix - n n - - pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix - n n - - pipe
flags=Fq. user=foo argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient
vscan unix - n n - 10 pipe
user=vscan argv=/usr/sbin/amavis ${sender} ${recipient}
procmail unix - n n - - pipe
flags=R user=nobody argv=/usr/bin/procmail -t -m /etc/procmailrc ${sender} ${recipient}

main.cf (Entspricht dem Muster der Anleitung. mydomain und myorigin habe ich auskommentiert, da eine interne Mail sonst statt mit dem korrekten Empfänger user@Terminalserver.intranet mit user@intranet.intranet verschickt wird.)
# Einrichtung postfix gemäß Anleitung von Roland Huber

# Einstellungen:
# --------------

# Der relayhost (der Server, der unsere e-mails annehmen soll)
relayhost = mail.ecomas.de

program_directory = /usr/lib/postfix
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
queue_directory = /var/spool/postfix
mailq_path = /usr/bin/mailq
default_privs = nobody
mail_spool_directory = /var/mail
mailbox_command = /usr/lib/cyrus/bin/deliver
mailbox_transport = cyrus
fallback_transport = cyrus
local_destination_concurrency_limit = 2
default_destination_concurrency_limit = 10
default_peer_level = 2

mynetworks = 192.168.1.0/24, 127.0.0.0/8
myhostname = Terminalserver.intranet
#mydomain = intranet
#myorigin = $mydomain

mail_owner = postfix

default_transport = smtp

sender_canonical_maps = hash:/etc/postfix/sender_canonical

smtpd_banner = $myhostname ESMTP

alias_maps = hash:/etc/aliases
#virtual_alias_maps = hash:/etc/postfix/virtual

setgid_group = maildrop
luser_relay = $root@Terminalserver.intranet

# SMTP Auth
# SMTP mit SASL-Authentification
smtp_sasl_auth_enable = yes
# Die Passwörter stehen in der Datei /etc/postfix/smtp_auth
smtp_sasl_password_maps = hash:/etc/postfix/smtp_auth
# Zusatz-Optionen: Keine anonyme-Anmeldung verwenden
smtp_sasl_security_options = noanonymous

So, jetzt wird es interessant:
cyrus.conf (prefork habe ich auf 0 gelassen, mit 1 funktioniert es auch nicht.)
# standard standalone server implementation

START {
# do not delete this entry!
recover cmd="ctl_cyrusdb -r"

# this is only necessary if using idled for IMAP IDLE
idled cmd="idled"
}

# UNIX sockets start with a slash and are put into /var/lib/imap/socket
SERVICES {
# add or remove based on preferences
imap cmd="imapd" listen="imap" prefork=0
# imaps cmd="imapd -s" listen="imaps" prefork=0
pop3 cmd="pop3d" listen="pop3" prefork=0
# pop3s cmd="pop3d -s" listen="pop3s" prefork=0
sieve cmd="timsieved" listen="sieve" prefork=0

# at least one LMTP is required for delivery
# lmtp cmd="lmtpd" listen="lmtp" prefork=0
lmtpunix cmd="lmtpd" listen="/var/lib/imap/socket/lmtp" prefork=0

# this is only necessary if using notifications
# notify cmd="notifyd" listen="/var/lib/imap/socket/notify" proto="udp" prefork=1
}

EVENTS {
# this is required
checkpoint cmd="ctl_cyrusdb -c" period=30

# this is only necessary if using duplicate delivery suppression
delprune cmd="cyr_expire -E 3" at=0400

# this is only necessary if caching TLS sessions
tlsprune cmd="tls_prune" at=0400

# Uncomment the next entry, if you want to automatically remove
# old messages of EVERY user.
# This example calls ipurge every 60 minutes and ipurge will delete
# ALL messages older then 30 days.
# enter 'man 8 ipurge' for more details

# cleanup cmd="ipurge -d 30 -f" period=60

imapd.conf
configdirectory: /var/lib/imap
partition-default: /var/spool/imap
# sievedir: /var/lib/sieve
admins: cyrus root
srctab: /var/lib/imap/srvtab
allowanonymouslogin: no
autocreatequota: 50000
reject8bit: no
quotawarn: 90
timeout: 480
# poptimeout: 10
# dracinterval: 0
# drachost: localhost
# sasl_pwcheck_method: pam
sasl_pwcheck_method: auxprop
sasl_mesh_list: plain login PLAIN LOGIN
lmtpsocket: /var/lib/imap/socket/lmtp
# lmtp_overquota_perm_failure: no
#
# if you want TLS, you have to generate certificates and keys
#
#tls_cert_file: /usr/ssl/certs/cert.pem
#tls_key_file: /usr/ssl/certs/skey.pem
#tls_ca_file: /usr/ssl/CA/CAcert.pem
#tls_ca_path: /usr/ssl/CA

Was dann geschah:
In meiner /var/log/messages erscheint diese Fehlermeldung:
Jun 7 08:27:15 Terminalserver lmtpunix[1836]: DBERROR: opening /var/lib/imap/deliver.db: cyrusdb error
Jun 7 08:27:15 Terminalserver lmtpunix[1836]: FATAL: lmtpd: unable to init duplicate delivery database
Jun 7 08:27:15 Terminalserver master[22190]: process 1836 exited, status 75
Jun 7 08:27:15 Terminalserver master[22190]: service lmtpunix pid 1836 in READY state: terminated abnormally
Jun 7 08:27:15 Terminalserver master[1837]: about to exec /usr/lib/cyrus/bin/lmtpd
Jun 7 08:27:15 Terminalserver lmtpunix[1837]: DBERROR db4: Berkeley DB library configured to support only DB_PRIVATE environments
Jun 7 08:27:15 Terminalserver lmtpunix[1837]: DBERROR: dbenv->open '/var/lib/imap/db' failed: Invalid argument
Jun 7 08:27:15 Terminalserver lmtpunix[1837]: DBERROR: init() on berkeley
Jun 7 08:27:15 Terminalserver lmtpunix[1837]: executed
Jun 7 08:27:15 Terminalserver lmtpunix[1837]: DBERROR db4: environment not yet opened
Jun 7 08:27:15 Terminalserver lmtpunix[1837]: DBERROR: opening /var/lib/imap/deliver.db: Invalid argument
Jun 7 08:27:15 Terminalserver lmtpunix[1837]: DBERROR: opening /var/lib/imap/deliver.db: cyrusdb error
Jun 7 08:27:15 Terminalserver lmtpunix[1837]: FATAL: lmtpd: unable to init duplicate delivery database
Jun 7 08:27:15 Terminalserver master[22190]: process 1837 exited, status 75
Jun 7 08:27:15 Terminalserver master[22190]: service lmtpunix pid 1837 in READY state: terminated abnormally
Jun 7 08:27:15 Terminalserver master[1838]: about to exec /usr/lib/cyrus/bin/lmtpd
Jun 7 08:27:15 Terminalserver lmtpunix[1838]: DBERROR db4: Berkeley DB library configured to support only DB_PRIVATE environments
Jun 7 08:27:15 Terminalserver lmtpunix[1838]: DBERROR: dbenv->open '/var/lib/imap/db' failed: Invalid argument
Jun 7 08:27:15 Terminalserver lmtpunix[1838]: DBERROR: init() on berkeley
Nach den verschiedenen Infos muss man die Berkeley db downgraden auf Version 4.2.52-85, aber die habe ich ja! Also kann es das nicht sein.

Auch solche Fehler erscheinen:
Jun 8 21:05:28 Terminalserver postfix/pipe[6678]: 2981515CFE: to=<root@Terminalserver.intranet>, orig_to=<root>, relay=cyrus, delay=0, status=deferred (temporary failure. Command output: couldn't connect to lmtpd: Connection refused_ 421 4.3.0 deliver: couldn't connect to lmtpd_ )
Das deutet wohl auf eine Inkonsistenz zwischen cyrus.conf und imapd.conf. Aber hier habe ich doch die gleichen Verzeichnisse angegeben, oder?
In anderen Threads habe ich gelesen, dass man auch auf "/var/spool/postfix/public/lmtp" verweisen kann. Aber in dem entsprechenden Verzeichnis ist keine Datei lmtp.

Nach allem, was ich gelesen habe, muss es an der Anmeldung an lmtp liegen. Aber ich komme nicht weiter! habe auch nach jeder Änderung immer mit rccyrus, rcpostfix und rcfetchmail restart neu gestartet.

Ich hoffe, Ihr könnt mir helfen! Schonmal vielen Dank!

Gruß,

Purpi
 
OP
P

Purpi

Newbie
Hallo nochmal,

hab' natürlich auch selber weitergesucht.

Ansatz: Test-Einrichtung auf meinem Laptop (SuSE Linux 9.3). Gleiche configs (bis auf imapd.conf, die habe ich weitestgehend im Original belassen).
Und siehe da: Es funktioniert! Werde jetzt noch prüfen, ob ich falsche Pakete installiert habe oder ob es an der imapd.conf liegt, aber ich befürchte, SuSE 9.1 ist einfach keine Basis für Cyrus. :cry:
Werde meine weiteren Erkenntisse posten.

Also: Alle, die meine configs checken sollten: Ihr könnt erstmal aufhören.
Aber auf jeden Fall vielen Dank.

Gruß,

Purpi
 
OP
P

Purpi

Newbie
Hier die Ergebnisse meiner weiteren Tests:

Habe meinen Server von 9.1 auf 9.3 upgedatet. OHNE Änderung irgendwelcher config-Dateien lief das Mailsystem nach dem Update problemlos.

Fazit: Newbies, Finger weg von cyrus auf einem 9.1-System! Zumindest wenn Ihr Euch nervige Sucherei und Ausprobiererei sparen wollt. Mit 9.3 klappt's und man kann sich den wirklich wichtigen Fragen widmen.

Gruß,

Purpi
 
Status
Für weitere Antworten geschlossen.
Oben