Hi,
I'm trying to set up replication with dsync, and I'm getting errors like
this:
dsync-local(david at mandelberg.org)<...>: Error: dsync(...): Received
unexpected input d != N
I tried the `doveadm -D sync` command from
https://doc.dovecot.org/configuration_manual/replication/#administration
and its output looked like:
...
dsync-local(david at mandelberg.org)<...>: Debug: brain M: Locking done by
remote (local hostname=..., remote hostname=...)
dsync-local(david at mandelberg.org)<...>: Debug: brain M: Local mailbox
tree: ...
[line above repeated many times for different mailboxes]
dsync-local(david at mandelberg.org)<...>: Error: dsync(...): Received
unexpected input d != N
dsync-local(david at mandelberg.org)<...>: Error: dsync(...): Received
unexpected input d != N
dsync-local(david at mandelberg.org)<...>: Debug: auth-master: conn
unix:/run/dovecot/auth-userdb (pid=47097,uid=0): Disconnected:
Connection closed (fd=8)
I'm a bit stuck. Does anybody have any ideas what's going on? The output
of `doveconf -n` is attached.
-------------- next part --------------
# 2.3.13 (89f716dc2): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.5.13 (cdd19fe3)
# OS: Linux 5.10.0-9-amd64 x86_64 Debian 11.1 ext4
# Hostname: mail-storage-bbf78862.virgo.mandelberg.org
auth_username_chars = +-.0123456789 at
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
dsync_remote_cmd = nc.openbsd -U /run/dovecot/dovecot-replication-client
lda_mailbox_autosubscribe = yes
mail_gid = vmail
mail_home = /var/cache/mail/%{domain}/%{username}/dovecot-home
mail_location =
maildir:/var/local/mail/persistent/mail/%{domain}/%{username}/Maildir
mail_plugins = listescape notify replication
mail_uid = vmail
namespace inbox {
inbox = yes
location =
mailbox Archive {
special_use = \Archive
}
mailbox Drafts {
special_use = \Drafts
}
mailbox Junk {
special_use = \Junk
}
mailbox Sent {
special_use = \Sent
}
mailbox Trash {
special_use = \Trash
}
prefix =
separator = /
}
passdb {
args = /etc/dovecot/conf.d/10-passwd.passdb
driver = passwd-file
}
plugin {
mail_replica = remoteprefix:foo at mail-storage-acadbae1.fornax.mandelberg.org
sieve =
file:/usr/local/etc/mail/%{domain}/%{username}/sieve;active=/var/cache/mail/%{domain}/%{username}/active.sieve;bindir=/var/cache/mail/%{domain}/%{username}/sieve
sieve_before = file:/etc/dovecot/sieve-before
sieve_filter_bin_dir = /etc/dovecot/sieve-filter-bin
sieve_filter_exec_timeout = 540s
sieve_global_extensions = +vnd.dovecot.filter
sieve_plugins = sieve_extprograms
sieve_user_log =
/var/local/mail/persistent/mail/%{domain}/%{username}/sieve.log
}
postmaster_address = postmaster@%{hostname}
protocols = " imap lmtp"
service aggregator {
fifo_listener replication-notify-fifo {
user = vmail
}
unix_listener replication-notify {
user = vmail
}
}
service auth-worker {
user = $default_internal_user
}
service auth {
unix_listener auth-userdb {
group = vmail
mode = 0660
}
}
service imap-login {
inet_listener imaps {
port = 993
ssl = yes
}
}
service lmtp {
unix_listener lmtp {
group = stunnel4
mode = 0660
}
user = vmail
}
service replicator {
process_min_avail = 1
unix_listener replicator-doveadm {
mode = 0600
user = vmail
}
}
service stats {
unix_listener stats-writer {
mode = 0666
}
}
ssl = required
ssl_cert =
</etc/letsencrypt/live/mail-storage-general.private.mandelberg.org/fullchain.pem
ssl_cipher_list = HIGH:!kRSA:!eNULL:!aNULL:@SECLEVEL=2:@STRENGTH
ssl_key = # hidden, use -P to show it
ssl_min_protocol = TLSv1.2
userdb {
args = /etc/dovecot/conf.d/10-passwd.userdb
driver = passwd-file
}
protocol lmtp {
mail_plugins = listescape notify replication sieve
}
local_name mail-storage-general.private.mandelberg.org {
ssl_cert =
</etc/letsencrypt/live/mail-storage-general.private.mandelberg.org/fullchain.pem
ssl_key = # hidden, use -P to show it
}
local_name mail-storage-strict.private.mandelberg.org {
ssl_cert =
</usr/local/etc/x509/mail-storage-strict.private.mandelberg.org/cert.pem
ssl_key = # hidden, use -P to show it
}
Op 02-11-2021 om 22:43 schreef David Mandelberg:> Hi, > > I'm trying to set up replication with dsync, and I'm getting errors like > this:I figured it out :)> dsync-local(david at mandelberg.org)<...>: Error: dsync(...): Received > unexpected input d != NTo debug this, I changed dsync_remote_cmd to a script with these contents: #!/bin/sh tee /tmp/tmp.MsfWIQCvNk/outbound.log | nc.openbsd -U /run/dovecot/dovecot-replication-client | tee /tmp/tmp.MsfWIQCvNk/inbound.log Then looking at the inbound.log file, the lines that seemed to be causing the "d != N" errors looked like this: dsync-remote(david at mandelberg.org)<...>: Error: dsync(local): Remote dsync doesn't use compatible protocol I had written a wrapper script in python that did this: username = sys.stdin.readline().rstrip('\n') os.execvp('doveadm', ('doveadm', 'dsync-server', '-u', username)) Apparently sys.stdin.readline() reads more than just the one line from stdin, so it was consuming the VERSION line. The actual issue was totally my fault for the wrapper script, but is there any chance dovecot could log the "Remote dsync doesn't use compatible protocol" lines instead of (or in addition to) sending them to the other end? That would have saved some debugging effort.