migrating Cyrus IMAPd from i386 to amd64 system

Jukka Salmi j+asg at 2010.salmi.ch
Fri Jul 2 14:21:18 EDT 2010

Jukka Salmi --> info-cyrus (2010-06-25 02:30:49 +0200):
> Hi
> I'm currently running Cyrus IMAPd 2.2.13p1 on NetBSD/i386 without any
> problems.  During the next few days I need to move the users' mailboxes
> to a NetBSD/amd64 system which will run Cyrus IMAPd 2.3.16.  Some hints
> about this would be appreciated.
> The cleanest way would probably be to get Cyrus IMAPd running on the new
> system and then to copy the mailboxes via IMAP (using imapsync(1) or
> similar); but since the upstream on the old system is very slow I'd like
> to avoid this approach if possible.
> Since I can afford some hours of mail system downtime I'd prefer to copy
> over a compressed archive containing all the mailboxes, extract it on
> the new system and recursively run reconstruct(8) for all mailboxes;
> then I'd probably copy over the contents of $configdirectory/user/ and
> start Cyrus IMAPd.  Does this make sense?  And what data will I be
> missing? ;-)
> Some basic questions:
> - Is Cyrus on amd64 able to read skiplist files created by Cyrus on
>   i386?  (If not, I'd probably have to use cvt_cyrusdb(8) to dump and
>   restore the relevant files.)
> - What about the cyrus.{cache,header,index,squat} files?  Can I expect
>   Cyrus on amd64 to be able to read them just fine?  (This seems not to
>   be that important since those files are easily recreated IIUC.)
> TIA, Jukka

Thanks for all the hints I got on this.

Just copying $configdirectory, $partition-default and $sievedir from the
old server to the new one and starting Cyrus there did -- as expected --
not work because of Berkeley DB:

  ctl_cyrusdb[23411]: DBERROR db4: Build signature doesn't match environment

I didn't even try to fix the problem by dumping and restoreing the DB,
but instead removed the copied directories again and did the following:

  - added users to SASLdb (saslpasswd2 -c ...)
  - started cyrus (init script created directories and called mkimap)
  - created users' INBOXes (cyradm)
  - stopped cyrus
  - copied $configdirectory/user, $partition-default/user and $sievedir
    from old server
  - started cyrus
  - for user in $(ls $partition-default/user); do
        reconstruct -f user.$user
  - manually adjusted server and mailbox annotations, user quota and
    ACLs (cyradm)

This resulted in a working Cyrus IMAPd 2.3.16 on the new amd64 system.

However, after a while I started to see the following errors in the

  ctl_cyrusdb[2085]: DBERROR: error listing log files: No such file or directory
  ctl_cyrusdb[2085]: DBERROR: archive /var/imap/db: cyrusdb error

This seems to be triggered by the `checkpoint' entry from the EVENTS
section of cyrus.conf:

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

However, running `ctl_cyrusdb -c' manually (as user cyrus...) worked

  ctl_cyrusdb[3296]: checkpointing cyrus databases
  ctl_cyrusdb[3296]: done checkpointing cyrus databases

and since then, I haven't seen the problem occur anymore.  Hmm...

Regards, Jukka

This email fills a much-needed gap in the archives.

More information about the Info-cyrus mailing list