Migrating from qmail that using vpasswd
From Qmailtoaster
Sometimes, we have to migrate a mail server using qmail which using vpasswd to save user data to qmailtoaster which using mysql as the backend to save user data.
vpasswd file is saved in domains directory.
For example, if the domain name is qmailtoaster.com, take a look at /home/vpopmail/domains/qmailtoaster.com.
There should be a file named vpassed there.
The file contain exactly the same data as we need in qmailtoaster.
So, we will only have to import this file to mysql.
My script is not yet general.
Please help me to make it more general to all common needs
Here is my step by step of migration:
1. create the domain in the new server using command:
/home/vpopmail/bin/vadddomain domainname.com
2. copy the domains directory from the old server using the command:
rsync -avz user@host:/home/vpopmail/domains/domainname.com /home/vpopmail/domains/domainname.com
3. See, there is vpasswd file in /home/vpopmail/domains/domainname.com
4. Convert the vpasswd file to mysqldump file using command:
awk -F : -v OFS="" '{print "replace into domainname_com (pw_name,pw_passwd,pw_uid,pw_gid,pw_gecos,pw_dir,pw_shell,pw_clear_passwd) values (\"",$1,"\",\"",$2,"\",\"",$3,"\",\"",$4,"\",\"",$5,"\",\"",$6,"\",\"",$7,"\",\"",$8,"\");" }' vpasswd > /home/adi/domainname_com.sql
Please make sure you typed domainname_com, NOT domainname.com
Replace DOT (.) with UNDERSCORE (_)
5. There is one mistake. We used doublequote ("), not singlequote (') in awk command above, just because I don't know how to use singlequote on awk :)
So, we have to replace it.
Use vi to open the file
vi domainname_com.sql
and replace all doublequote to singlequote using command:
:%s/"/'/g
6. Insert the dump file to mysql
mysql vpopmail -u vpopmail -p <domainname_com.sql
7. Recheck. If there is invalid character in the old domain, for example singlequote character in full name (pw_gecos), step6 will failed. Just edit the sql file to make it run.
That's it.
7 steps only.
Please help me to make above steps is more general.
Would be nice if we can make a simple script to do it.