Oops, I attached the wrong version.  Please discard the previous version
I sent out.

regards,
~ Dairenn Lombard
Systems Administration Department, Los Angeles
BroadSpire, Inc.

> -----Original Message-----
> From: Dairenn Lombard [mailto:[EMAIL PROTECTED] 
> Sent: Wednesday, December 12, 2007 10:36 AM
> To: qmailtoaster-list@qmailtoaster.com
> Subject: RE: [qmailtoaster] Migration
> 
> 
> Hello Sandip,
> 
> I've attached a shell script I wrote for my company that can 
> automatically migrate a single domain from one qmail toaster 
> server to another using SCP (you need to create an RSA key 
> for the root user on the source server, and then add it to 
> the /root/.ssh/authorized_keys file on the destination server 
> in order to not have to keep re-entering your root 
> password/passphrase for every SCP operation).
> 
> One warning is that if you decided to compile 
> vpopmail-toaster using one table for all domains rather than 
> one table per domain, this script wont work for you.
> 
> Another issue has to do with the pathnames of directories on 
> toasters with lots of domain names.  After so many domains 
> are added, instead of customer's e-mail being setup inside of 
> /home/vpopmail/domains/example.com it shifts to a 
> subdirectory in /home/vpopmail/domains/1/example.com with 1 
> becoming 2, 2 becoming 3 (etc, etc.) as more and more domains 
> are added.  When my script re-creates the account being 
> migrated on the new server, it then gets from vpopmail on the 
> destination server the new pathname as it exists on that 
> server, and then tries to go through and update a bunch of 
> things. Things like the dump file of that domain's mysql 
> table and various
> .qmail* files.
> 
> Unfortunately, I couldn't come up with a way of doing this to 
> the individual ".qmail" files that can appear in some user 
> directories where things like forward+save a local copy have 
> been enabled using qmailadmin.  Therefore, my script simply 
> deletes these files, because if they exist but use the wrong 
> directory, extremely strange behavior results (no mail 
> showing up, duplicates of mail showing up, etc).
> 
> You can comment out that part of the script which does delete 
> user's .qmail files, but you'll need to remember to change 
> those files by hand post-migration so that the 
> /home/vpopmail/domains directory referenced matches the 
> pathname of the domain you're currently working with.
> 
> If anyone would like to improve my script, I would love to 
> know about it.
> 
> 
> regards,
> ~ Dairenn Lombard
> Systems Administration Department, Los Angeles
> BroadSpire, Inc.
> 
> 
> 
> -----Original Message-----
> From: Sandip Kumar Das, RDG Systems [mailto:[EMAIL PROTECTED] 
> Sent: Wednesday, December 05, 2007 4:47 AM
> To: qmailtoaster-list@qmailtoaster.com
> Subject: [qmailtoaster] Migration
> 
> 
> Dear all,
> 
> 
> How do i copy vpopmail domains & mailboxes of all users 
> manually from one server to another ? In old server domains 
> uids are 7797 (  checking /var/qmail/users/assign ) but in 
> new server domains uids are 89. If I manually created all old 
> domains in new server , the uids will be 89. and then how do 
> i copy all the users and their maildirectories from old 
> server to new server ? pl suggest. Am I to copy vpopmail 
> database from old to new ? 
> 
> Thanks in advance,
> 
> Sandip
#!/bin/sh
# /usr/local/sbin/toastercp.sh
# Copy qmail toaster domains onto another qmail toaster.
#
# Usage: /usr/local/sbin/toastercp.sh domain.com remote.mail.server.hostname
#
# CAUTION - this is only going to work if BOTH vpopmail-toaster installs were
# compiled with --disable-many-domains, otherwise, there will be a MySQL table
# mismatch and IMAP/POP authencation will fail.  It's Okay to enable many
# domains, but again, BOTH servers must have already had vpopmail-toaster
# installed that way, otherwise you need to manually convert the vpopmail
# tables from one format to the other - which this script does not do.
#
#
# Change Log:
# Version       - Feature
# -----------------------------------------------------------------------------
# 1.02          - Older mysqldumps don't write dump files to include dropping
#                 the tables being backed up, so now this script inserts that
#                 (this may produce MySQL warnings, as newer mysqldumps will
#                 have this, and therefore, complain that it can't drop a table
#                 that doesn't exist.  Because .qmail-default files don't
#                 always exist, added find statements to not bother with it if
#                 it is not there.  When using cpio to build a skeleton of
#                 files, find now looks for these files in the correct
#                 directory.
# 1.01          - Patches .qmail-default for the Unix pathname on the new mail
#                 server if catchall is set to another local e-mail address
#                 rather than catchall-to-bounce, catchall-to-delete, or
#                 catchall-forward.  Not doing this results in maildrop
#                 creating duplicate messages in users' inboxes.
#                 Removes individual user .qmail files to cause qmail to
#                 re-create the file (sometimes, these files, when copied
#                 causes unwanted behavior when using webmail other other
#                 system features).  The bad news is that this will delete
#                 any non-vpopmail based forwards (such as rules like forward
#                 and save a local copy).
# 1.00          - Initial Release

echo ; echo "toastercp.sh v1.02"
echo "Copyright (c) 2007 BroadSpire, Inc."
echo ; echo "Report bugs!!  E-Mail them to [EMAIL PROTECTED]" ; echo
echo "This script PUSHES existing domains from the origin mail server onto a 
NEW"
echo "mail server, and requires this server's id_rsa.pub file in /root/.ssh to 
be"
echo "copied into the authorized_keys2 file in the remote server's /root/.ssh"
echo "directory.  It is also necessary to have this server's hostname in the"
echo "/etc/hosts.allow file on the remote mail server for sshd." ; echo

SSH=`which ssh`
GREP=`which grep`
AWK=`which awk`
TAIL=`which tail`
CAT=`which cat`
RM=`which rm`
SED=`which sed`
DUMP=`which mysqldump`
CPIO=`which cpio`
CP=`which cp`
SCP=`which scp`
CUT=`which cut`
HEAD=`which head`
FIND=`which find`

# Get domain name from the command line syntax used...
domain=$1
rhost=$2

# If operator entered no name at the shell prompt, ask for it.
if [ -z "$domain" ] ; then
        echo -n "Enter the domain name to copy: "
        read domain
fi

# If operator entered no name at the shell prompt, ask for it.
if [ -z "$rhost" ] ; then
        echo -n "Enter the destination mail server hostname: "
        read rhost
fi

# Make new account
echo "Adding $domain to $rhost..."
$SSH [EMAIL PROTECTED] "/home/vpopmail/bin/vadddomain -r $domain"
if [ "$?" -ne "0" ] ; then
        echo "Uh oh, that didn't work; aborting."
        exit 1
fi

echo "Determining local Unix pathname of $domain..."

# I know this is ugly as sin, but I couldn't figure out a better way to get
# the pathname into a variable and using awk failed due to a variable conflict.

echo -n "/" > /var/tmp/.localunixpath.txt
/home/vpopmail/bin/vdominfo $domain | $GREP "dir:" | $CUT -d "/" -f 2- | $HEAD 
-1 >> /var/tmp/.localunixpath.txt
localdir=`$CAT /var/tmp/.localunixpath.txt`
grep $domain /var/tmp/.localunixpath.txt > /dev/null
if [ "$?" -ne "0" ] ; then
        echo "Could not determine local pathname for $domain.  You sure $domain 
"
        echo "is on this server?"
        echo ; echo "Exiting" ; echo
        exit 1
fi
$RM -f /var/tmp/.localunixpath.txt
echo "Got it."

echo ; echo "Determining remote Unix pathname of $domain..."
echo -n "/" > /var/tmp/.remoteunixpath.txt
$SSH [EMAIL PROTECTED] /home/vpopmail/bin/vdominfo $domain | $GREP "dir:" | 
$CUT -d "/" -f 2- | $HEAD -1 >> /var/tmp/.remoteunixpath.txt
remotedir=`$CAT /var/tmp/.remoteunixpath.txt`
grep $domain /var/tmp/.remoteunixpath.txt > /dev/null
if [ "$?" -ne "0" ] ; then
        echo "Could not determine $domain Unix pathname on $rhost.  Exiting."
        exit 1
fi
$RM -f /var/tmp/.remoteunixpath.txt
echo "Got it."

echo ; echo "Exporting $domain MySQL vpopmail database table..."
echo "$domain" > /var/tmp/.vpopmail-mysql-table.txt
$SED -i s/\\./_/ /var/tmp/.vpopmail-mysql-table.txt
mysqltable=`$CAT /var/tmp/.vpopmail-mysql-table.txt`
$RM -f /var/tmp/.vpopmail-mysql-table.txt
mysqlfile="/var/tmp/$domain.vpopmail.sql"
# This is because older mysqldump versions don't generate this line on their
# own; this now means newer dump files will have this line twice, generating
# a warning during the remote server import process.
echo "DROP TABLE IF EXISTS \`$mysqltable\`;" > $mysqlfile
$DUMP vpopmail $mysqltable >> $mysqlfile

echo ; echo "Changing $localdir to $remotedir in $mysqlfile..."
$SED -i s:"$localdir":"$remotedir":g $mysqlfile

if [ -f "$localdir/.qmail-toaster" ] ; then
        echo ; echo "Changing the same thing in .qmail-default..."
        $CP $localdir/.qmail-toaster /var/tmp/.qmail-toaster
        $SED -i s:"$localdir":"$remotedir":g /var/tmp/.qmail-toaster 
fi

echo ; echo "Building list of Maildir directories and files..."
cd $localdir
$FIND ./ ! -name '*bspmail*' | $CPIO -co > /var/tmp/$domain.maildir.cpio

echo ; echo "Sending file list and SQL dump to $rhost..."
$SCP /var/tmp/$domain.maildir.cpio [EMAIL PROTECTED]:/var/tmp
# Only delete the temp files if SCP exits successfully
if [ "$?" -eq "0" ] ; then
        $RM -f /var/tmp/$domain.maildir.cpio
fi
$SCP $mysqlfile [EMAIL PROTECTED]:/var/tmp
if [ "$?" -eq "0" ] ; then
        $RM -f $mysqlfile
fi

echo ; echo "Remotely building Maildir skeleton and send .qmail-default file..."
$SSH [EMAIL PROTECTED] "cd $remotedir && cat /var/tmp/$domain.maildir.cpio | 
cpio -idmuR vpopmail:vchkpw"
# Don't delete anything if something went wrong.
if [ "$?" -eq "0" ] ; then
        $SSH [EMAIL PROTECTED] "rm -f /var/tmp/$domain.maildir.cpio"
fi

if [ -f "/var/tmp/.qmail-default" ] ; then
        $SCP -p /var/tmp/.qmail-default [EMAIL PROTECTED]:$remotedir
        if [ "$?" -eq "0" ] ; then 
                $RM -f /var/tmp/.qmail-default
        fi
fi

echo ; echo "Remotely importing vpopmail MySQL database table for $domain"
# mysqldump files already instruct MySQL server to drop tables if they already
# exist before trying to create them again.
$SSH [EMAIL PROTECTED] "mysql vpopmail < /var/tmp/$domain.vpopmail.sql"
if [ "$?" -eq "0" ] ; then
        $SSH [EMAIL PROTECTED] "rm -f /var/tmp/$domain.vpopmail.sql"
fi

# Message migration...

echo ; echo "Backing up existing e-mail messages..."
$CP -a --target-directory=/var/tmp $localdir
cd /var/tmp/$domain
$FIND ./ -name '*bspmail*' | $CPIO -co > /var/tmp/$domain.messages.cpio
cd /var/tmp
$RM -rf $domain

echo ; echo "Copying mail messages onto $rhost"
echo "This could take a while if this domain is using lots of disk space."

# Since huge amounts of text compresses very easily, and will improve transfer
# speed.
$SCP -C /var/tmp/$domain.messages.cpio [EMAIL PROTECTED]:/var/tmp
# Don't delete unless SSH was successful.
if [ "$?" -eq "0" ] ; then
        $RM -f /var/tmp/$domain.messages.cpio
fi

echo ; echo "Removing individual user .qmail files to prevent random unwanted 
behavior."
$SSH [EMAIL PROTECTED] "find $remotedir -name .qmail -exec rm -f {} \;"

$SSH [EMAIL PROTECTED] "cd $remotedir && cat /var/tmp/$domain.messages.cpio | 
cpio -idmuR vpopmail:vchkpw"
if [ "$?" -eq "0" ] ; then
        $SSH [EMAIL PROTECTED] "rm -f /var/tmp/$domain.messages.cpio"
fi

echo ; echo "$domain copied to $rhost." ; echo
---------------------------------------------------------------------
     QmailToaster hosted by: VR Hosted <http://www.vr.org>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to