Convert standalone mbox to standalone Maildir with Dsync - hierarchy separator error
Sam Kuper
sampablokuper at posteo.net
Thu May 21 06:16:26 EEST 2020
On Wed, May 13, 2020 at 11:03:37AM +0300, Aki Tuomi wrote:
> Edit your dovecot.conf and add
>
> namespace {
> inbox = yes
> # or use '.' here.
> separator = /
> }
Thanks for the suggestion! I added those lines to the bottom of
/etc/dovecot/dovecot.conf .
However, when I attempted the mbox to maildir conversion afterwards, I
still received an error, albeit a different one:
$ dsync -Dv \
-o 'mail_location=maildir:/tmp/dsync_test/maildir' \
backup \
mbox:/tmp/dsync_test/mbox/:INBOX=/tmp/dsync_test/mbox/2002-September
Debug: Loading modules from directory:
/usr/lib/dovecot/modules/doveadm
Debug: Skipping module doveadm_acl_plugin, because dlopen() failed:
/usr/lib/dovecot/modules/doveadm/lib10_doveadm_acl_plugin.so:
undefined symbol: acl_lookup_dict_iterate_visible_next (this is
usually intentional, so just ignore this message)
Debug: Skipping module doveadm_expire_plugin, because dlopen()
failed:
/usr/lib/dovecot/modules/doveadm/lib10_doveadm_expire_plugin.so:
undefined symbol: expire_set_deinit (this is usually intentional, so
just ignore this message)
Debug: Skipping module doveadm_quota_plugin, because dlopen()
failed:
/usr/lib/dovecot/modules/doveadm/lib10_doveadm_quota_plugin.so:
undefined symbol: quota_user_module (this is usually intentional, so
just ignore this message)
Debug: Skipping module doveadm_fts_lucene_plugin, because dlopen()
failed:
/usr/lib/dovecot/modules/doveadm/lib20_doveadm_fts_lucene_plugin.so:
undefined symbol: lucene_index_iter_deinit (this is usually
intentional, so just ignore this message)
Debug: Skipping module doveadm_fts_plugin, because dlopen() failed:
/usr/lib/dovecot/modules/doveadm/lib20_doveadm_fts_plugin.so:
undefined symbol: fts_user_get_language_list (this is usually
intentional, so just ignore this message)
Debug: Skipping module doveadm_mail_crypt_plugin, because dlopen()
failed:
/usr/lib/dovecot/modules/doveadm/libdoveadm_mail_crypt_plugin.so:
undefined symbol: mail_crypt_box_get_pvt_digests (this is usually
intentional, so just ignore this message)
doveadm(sampablokuper): Debug: Effective uid=1000, gid=1000,
home=/home/sampablokuper
doveadm(sampablokuper): Debug: Namespace inbox: type=private,
prefix=, sep=, inbox=yes, hidden=no, list=yes, subscriptions=yes
location=maildir:/tmp/dsync_test/maildir
doveadm(sampablokuper): Debug: maildir++:
root=/tmp/dsync_test/maildir, index=, indexpvt=, control=,
inbox=/tmp/dsync_test/maildir, alt=
doveadm(sampablokuper): Debug: Namespace : type=private, prefix=,
sep=/, inbox=yes, hidden=no, list=yes, subscriptions=yes
location=maildir:/tmp/dsync_test/maildir
doveadm(sampablokuper): Debug: maildir++:
root=/tmp/dsync_test/maildir, index=, indexpvt=, control=,
inbox=/tmp/dsync_test/maildir, alt=
doveadm(sampablokuper): Error: User initialization failed: namespace
configuration error: Duplicate namespace prefix: ""
doveadm(sampablokuper): Error: User init failed
I was able to resolve this error by commenting out this line in my
/etc/dovecot/dovecot.conf:
include conf.d/*.conf
Even after that, though, dsync still failed to migrate the source mbox's
contents to the target maildir, but this time with a "Skipping unchanged
mailbox" message. See below for full output.
(Dsync did however replace the source mbox's contents with a dummy
message: "This text is part of the internal format of your mail folder,
and is not a real message. ...".)
I would be grateful for assistance to make dsync convert the mbox to a
maildir.
Here is dsync's output:
$ dsync -Dv -o mail_location=maildir:/tmp/dsync_test/maildir backup
mbox:/tmp/dsync_test/mbox/:INBOX=/tmp/dsync_test/mbox/2002-September
Debug: Loading modules from directory:
/usr/lib/dovecot/modules/doveadm
Debug: Skipping module doveadm_acl_plugin, because dlopen() failed:
/usr/lib/dovecot/modules/doveadm/lib10_doveadm_acl_plugin.so:
undefined symbol: acl_lookup_dict_iterate_visible_next (this is
usually intentional, so just ignore this message)
Debug: Skipping module doveadm_expire_plugin, because dlopen()
failed:
/usr/lib/dovecot/modules/doveadm/lib10_doveadm_expire_plugin.so:
undefined symbol: expire_set_deinit (this is usually intentional, so
just ignore this message)
Debug: Skipping module doveadm_quota_plugin, because dlopen()
failed:
/usr/lib/dovecot/modules/doveadm/lib10_doveadm_quota_plugin.so:
undefined symbol: quota_user_module (this is usually intentional, so
just ignore this message)
Debug: Skipping module doveadm_fts_lucene_plugin, because dlopen()
failed:
/usr/lib/dovecot/modules/doveadm/lib20_doveadm_fts_lucene_plugin.so:
undefined symbol: lucene_index_iter_deinit (this is usually
intentional, so just ignore this message)
Debug: Skipping module doveadm_fts_plugin, because dlopen() failed:
/usr/lib/dovecot/modules/doveadm/lib20_doveadm_fts_plugin.so:
undefined symbol: fts_user_get_language_list (this is usually
intentional, so just ignore this message)
Debug: Skipping module doveadm_mail_crypt_plugin, because dlopen()
failed:
/usr/lib/dovecot/modules/doveadm/libdoveadm_mail_crypt_plugin.so:
undefined symbol: mail_crypt_box_get_pvt_digests (this is usually
intentional, so just ignore this message)
doveadm(sampablokuper): Debug: Effective uid=1000, gid=1000,
home=/home/sampablokuper
doveadm(sampablokuper): Debug: Namespace : type=private, prefix=,
sep=/, inbox=yes, hidden=no, list=yes, subscriptions=yes
location=maildir:/tmp/dsync_test/maildir
doveadm(sampablokuper): Debug: maildir++:
root=/tmp/dsync_test/maildir, index=, indexpvt=, control=,
inbox=/tmp/dsync_test/maildir, alt=
doveadm(sampablokuper): Debug: Namespace : Using permissions from
/tmp/dsync_test/maildir: mode=0755 gid=default
dsync(sampablokuper): Debug: Effective uid=1000, gid=1000,
home=/home/sampablokuper
dsync(sampablokuper): Debug: Namespace : type=private, prefix=,
sep=/, inbox=yes, hidden=no, list=yes, subscriptions=yes
location=mbox:/tmp/dsync_test/mbox/:INBOX=/tmp/dsync_test/mbox/2002-September
dsync(sampablokuper): Debug: fs: root=/tmp/dsync_test/mbox, index=,
indexpvt=, control=, inbox=/tmp/dsync_test/mbox/2002-September, alt=
dsync(sampablokuper): Debug: Namespace : Using permissions from
/tmp/dsync_test/mbox: mode=0755 gid=default
dsync(sampablokuper): Debug: brain M: Local mailbox tree: INBOX
guid=49147222caefc55e0851000041fea997 uid_validity=1590030282
uid_next=1 subs=no last_change=0 last_subs=0
dsync(sampablokuper): Debug: brain S: Local mailbox tree: INBOX
guid=aa02c63478e7c55eff3a000041fea997 uid_validity=1590028152
uid_next=1 subs=no last_change=0 last_subs=0
dsync(sampablokuper): Debug: brain M: Remote mailbox tree: INBOX
guid=aa02c63478e7c55eff3a000041fea997 uid_validity=1590028152
uid_next=1 subs=no last_change=0 last_subs=0
dsync(sampablokuper): Debug: brain S: Remote mailbox tree: INBOX
guid=49147222caefc55e0851000041fea997 uid_validity=1590030282
uid_next=1 subs=no last_change=0 last_subs=0
dsync(sampablokuper): Debug: brain M: Remote mailbox tree deletion:
guid=ab02c63478e7c55eff3a000041fea997 type=mailbox
timestamp=1590028152 name= local update=not found
dsync(sampablokuper): Debug: brain M: Mailbox INBOX:
local=49147222caefc55e0851000041fea997/0/1,
remote=aa02c63478e7c55eff3a000041fea997/0/1: GUIDs conflict - will
be merged later
dsync(sampablokuper): Debug: brain S: Mailbox INBOX:
local=aa02c63478e7c55eff3a000041fea997/0/1,
remote=49147222caefc55e0851000041fea997/0/1: GUIDs conflict - will
be merged later
dsync(sampablokuper): Debug: brain S: Deleting mailbox 'INBOX' (GUID
aa02c63478e7c55eff3a000041fea997): UIDVALIDITY changed (1590030282
-> 1590028152)
dsync(sampablokuper): Debug: Namespace :
/tmp/dsync_test/mbox/2002-September doesn't exist yet, using default
permissions
dsync(sampablokuper): Debug: Namespace : Using permissions from
/tmp/dsync_test/mbox: mode=0755 gid=default
dsync(sampablokuper): Debug: Namespace :
/tmp/dsync_test/mbox/2002-September doesn't exist yet, using default
permissions
dsync(sampablokuper): Debug: Namespace : Using permissions from
/tmp/dsync_test/mbox: mode=0755 gid=default
dsync(sampablokuper): Debug: brain S: Skipping unchanged mailbox
49147222caefc55e0851000041fea997
And here is my full /etc/dovecot/dovecot.conf :
## Dovecot configuration file
# If you're in a hurry, see http://wiki2.dovecot.org/QuickConfiguration
# "doveconf -n" command gives a clean output of the changed settings. Use it
# instead of copy&pasting files when posting to the Dovecot mailing list.
# '#' character and everything after it is treated as comments. Extra spaces
# and tabs are ignored. If you want to use either of these explicitly, put the
# value inside quotes, eg.: key = "# char and trailing whitespace "
# Most (but not all) settings can be overridden by different protocols and/or
# source/destination IPs by placing the settings inside sections, for example:
# protocol imap { }, local 127.0.0.1 { }, remote 10.0.0.0/8 { }
# Default values are shown for each setting, it's not required to uncomment
# those. These are exceptions to this though: No sections (e.g. namespace {})
# or plugin settings are added by default, they're listed only as examples.
# Paths are also just examples with the real defaults being based on configure
# options. The paths listed here are for configure --prefix=/usr
# --sysconfdir=/etc --localstatedir=/var
# Enable installed protocols
!include_try /usr/share/dovecot/protocols.d/*.protocol
# A comma separated list of IPs or hosts where to listen in for connections.
# "*" listens in all IPv4 interfaces, "::" listens in all IPv6 interfaces.
# If you want to specify non-default ports or anything more complex,
# edit conf.d/master.conf.
#listen = *, ::
# Base directory where to store runtime data.
#base_dir = /var/run/dovecot/
# Name of this instance. In multi-instance setup doveadm and other commands
# can use -i <instance_name> to select which instance is used (an alternative
# to -c <config_path>). The instance name is also added to Dovecot processes
# in ps output.
#instance_name = dovecot
# Greeting message for clients.
#login_greeting = Dovecot ready.
# Space separated list of trusted network ranges. Connections from these
# IPs are allowed to override their IP addresses and ports (for logging and
# for authentication checks). disable_plaintext_auth is also ignored for
# these networks. Typically you'd specify your IMAP proxy servers here.
#login_trusted_networks =
# Space separated list of login access check sockets (e.g. tcpwrap)
#login_access_sockets =
# With proxy_maybe=yes if proxy destination matches any of these IPs, don't do
# proxying. This isn't necessary normally, but may be useful if the destination
# IP is e.g. a load balancer's IP.
#auth_proxy_self =
# Show more verbose process titles (in ps). Currently shows user name and
# IP address. Useful for seeing who are actually using the IMAP processes
# (eg. shared mailboxes or if same uid is used for multiple accounts).
#verbose_proctitle = no
# Should all processes be killed when Dovecot master process shuts down.
# Setting this to "no" means that Dovecot can be upgraded without
# forcing existing client connections to close (although that could also be
# a problem if the upgrade is e.g. because of a security fix).
#shutdown_clients = yes
# If non-zero, run mail commands via this many connections to doveadm server,
# instead of running them directly in the same process.
#doveadm_worker_count = 0
# UNIX socket or host:port used for connecting to doveadm server
#doveadm_socket_path = doveadm-server
# Space separated list of environment variables that are preserved on Dovecot
# startup and passed down to all of its child processes. You can also give
# key=value pairs to always set specific settings.
#import_environment = TZ
##
## Dictionary server settings
##
# Dictionary can be used to store key=value lists. This is used by several
# plugins. The dictionary can be accessed either directly or though a
# dictionary server. The following dict block maps dictionary names to URIs
# when the server is used. These can then be referenced using URIs in format
# "proxy::<name>".
dict {
#quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
#expire = sqlite:/etc/dovecot/dovecot-dict-sql.conf.ext
}
# Most of the actual configuration gets included below. The filenames are
# first sorted by their ASCII value and parsed in that order. The 00-prefixes
# in filenames are intended to make it easier to understand the ordering.
#!include conf.d/*.conf
# A config file can also tried to be included without giving an error if
# it's not found:
!include_try local.conf
# Added 16/5/2020, per Aki Tuomi advice:
namespace {
inbox = yes
# or use '.' here.
separator = /
}
Thank you again!
--
A: When it messes up the order in which people normally read text.
Q: When is top-posting a bad thing?
() ASCII ribbon campaign. Please avoid HTML emails & proprietary
/\ file formats. (Why? See e.g. https://v.gd/jrmGbS ). Thank you.
More information about the dovecot
mailing list