Back
On destination host
Install QMT, Rocky 8 or 9
qmailctl stop && systemctl stop dovecot
On source host Source host most likely EL7
# dhost=192.168.1.3 Change IP address for your needs
# ssh-keygen
# ssh-copy-id $dhost
# ssh $dhost
First rsync email db
# rsync --progress -zv -are ssh /home/vpopmail/domains/ root@$dhost:/home/vpopmail/domains
Stop services for 2nd rsync
# qmailctl stop && systemctl stop dovecot
Second rsync subsequent changes to email db
# rsync --progress -zv -are ssh /home/vpopmail/domains/ root@$dhost:/home/vpopmail/domains
Bring over the rest of the data
# rsync --progress -zv -are ssh /var/qmail/control/ root@$dhost:/var/qmail/control
# rsync --progress -zv -are ssh /var/qmail/users/ root@$dhost:/var/qmail/users
# rsync --progress -zv -are ssh /etc/tcprules.d/ root@$dhost:/etc/tcprules.d
# rsync --progress -zv -are ssh /usr/share/toaster/include/admin.pass root@$dhost:/usr/share/toaster/include
# rsync --progress -zv -are ssh /usr/share/toaster/include/admin.htpasswd root@$dhost:/usr/share/toaster/include
# [ ! -d /etc/mail/spamassassin ] && sqadj= || sqadj=mail/
# rsync --progress -zv -are ssh /etc/${sqadj}spamassassin/.spamassassin/ root@$dhost:/etc/mail/spamassassin/.spamassassin
# rsync --progress -zv -are ssh /etc/${sqadj}spamassassin/*.cf root@$dhost:/etc/mail/spamassassin
# rsync --progress -zv -are ssh /usr/share/squirrelmail/plugins/ root@$dhost:/usr/share/squirrelmail/plugins
# rsync --progress -zv -are ssh /var/lib/squirrelmail/prefs/ root@$dhost:/var/lib/squirrelmail/prefs
Dovecot files are not necessary for EL 8/9 they are only for reference
# rsync --progress -zv -are ssh /etc/dovecot/toaster.conf root@$dhost:/etc/dovecot
# rsync --progress -zv -are ssh /etc/dovecot/local.conf root@$dhost:/etc/dovecot
Bring over MySQL DBs
# mysqldump -u root -p dspam > dspam.sql
# mysqldump -u root -p spamassassin > spamassassin.sql
# mysqldump -u root -p roundcube > roundcube.sql
# mysqldump -u root -p vpopmail > vpopmail.sql
# scp *.sql root@$dhost:/root
On destination host
Create credentials
# credfile=~/sql.cnf
# echo -e "[client]\nuser=root\npassword=mysqlpass\nhost=localhost" > $credfile Edit credentials file and update password setting
Load vpopmail
# mysqladmin --defaults-extra-file=$credfile vpopmail < vpopmail.sql
Load DSpam
# mysqladmin --defaults-extra-file=$credfile create dspam
# mysql --defaults-extra-file=$credfile -e "CREATE USER dspam@localhost IDENTIFIED BY 'p4ssw3rd'"
# mysql --defaults-extra-file=$credfile -e "GRANT ALL PRIVILEGES ON dspam.* TO dspam@localhost"
# mysql --defaults-extra-file=$credfile dspam < dspamdb.sql
Load Roundcube
# mysql --defaults-extra-file=$credfile -e "create database roundcube character set utf8 collate utf8_bin"
# mysql --defaults-extra-file=$credfile -e "CREATE USER roundcube@localhost IDENTIFIED BY 'p4ssw3rd'"
# mysql --defaults-extra-file=$credfile -e "GRANT ALL PRIVILEGES ON roundcube.* TO roundcube@localhost"
# mysql --defaults-extra-file=$credfile roundcube < roundcube.sql
Load Spamassassin
# mysqladmin --defaults-extra-file=$credfile create spamassassin
# mysql --defaults-extra-file=$credfile -e "CREATE USER spamassassin@localhost IDENTIFIED BY 'p4ssw3rd'"
# mysql --defaults-extra-file=$credfile -e "GRANT ALL PRIVILEGES ON spamassassin.* TO spamassassin@localhost"
# mysql --defaults-extra-file=$credfile spamassassin < spamassassin.sql
If you're migrating from a Many-Domain to Many-Domain backend nothing more is required
If you're migrating from a Domain-Table backend to a Many-Domain backend you'll need to run this script
If you're migrating from a Domain-Table to Domain-Table backend and want to convert to Many-Domain
# qmailctl cdb && qmailctl start && sleep 2s && systemctl start dovecot && toaststat
Questions, comments, suggestions, corrections...contact Eric on the QMT list