Difference between revisions of "User Migration"

(Calendar and Contacts Migration)
 
(21 intermediate revisions by 6 users not shown)
Line 1: Line 1:
{{Unsupported}}
+
{{BC|Community Sandbox}}
 +
__FORCETOC__
 +
<div class="col-md-12 ibox-content">
 +
=User Migration=
 +
{{KB|{{Unsupported}}|{{ZCS 8.0}}|{{ZCS 7.0}}|}}
 +
{{WIP}}
  
Migrating your users means you're going to have to deal with [[Mail Migration|mail]],  [[Calendar Migration|calendar]], [[Contacts Migration|contacts]] and [[Password Migration|passwords]]. This page used to be one monolith sized monstrosity -- but has now been broken down into sections:
+
{{Archive}}{{WIP}}
 +
 
 +
First, note that you'll want to create accounts in Zimbra first before you do the migration. If you want to do it in one shot, read [[Bulk Provisioning]].
 +
 
 +
Migrating your users means you're going to have to deal with [[Mail Migration|mail]],  [[Calendar and Contacts Migration|calendar, contacts]] and [[Password Migration|passwords]]. This page used to be one monolithic monstrosity -- but has now been broken down into separate pages:
  
 
* [[Mail Migration]]
 
* [[Mail Migration]]
 +
* [[Outlook NK2 Cache Rebuild]]
 
* [[Calendar and Contacts Migration]]
 
* [[Calendar and Contacts Migration]]
 
* [[Password Migration]]
 
* [[Password Migration]]
 +
* [[Email Rules Migration]]
 +
* [[Aliases file Migration]]
 +
* [[Migrating_from_Postfix_and_MySQL_with_bash|Postfix+MySQL aliases and accounts migration]]
 +
* [[Migrating_from_Dovecot_passwd_with_bash|Migrating from Dovecot passwd]]
 +
* [[Zimbra to Zimbra Server Migration]]
 +
* [[Prevent duplicates messages for POP3 users post migration]]
  
 +
Please see [http://wiki.zimbra.com/index.php?title=User_Migration_Troubleshooting User Migration Troubleshooting] if you are having problems migrating data to your Zimbra installation.
  
 
+
[[Category:Migration]]
 
+
{{Article_Footer|Zimbra Collaboration Suite 7.0|3/7/2006}}
 
 
 
 
 
 
= Zimbra To Zimbra Server Migration =
 
 
 
== as a whole method ==
 
 
 
Unofficial method (work with 5.0, may work with <5.0):
 
http://www.zimbra.com/forums/migration/22697-zimbra-zimbra-migration-script.html
 
 
 
Official method (only work > 5.0.9)
 
http://www.zimbrablog.com/blog/archives/2008/09/zcs-to-zcs-migrations.html
 
 
 
== item to item method ==
 
Here is a script that is a modification of the script above for using curl to migrate users between zimbra boxes using imap protocol.  It also transfers calendars and contacts from zimbra server to zimbra server.  I just started working on it and here is what i have so far.  It worked on two servers i just migrated last week, i hope it helps :) 
 
 
 
NOTE: Modified perl below: was not using IO::Scalar or File::Path so no need to use; now supports user names with "@" via wget; support for command line arguments; support for SSL imap; support for various input file separators; other samll tweaks - scottp@dd.com.au
 
 
 
<pre>
 
#!/usr/bin/perl
 
use strict;
 
use warnings;
 
 
 
#############################################################################
 
# Please make changes below to suit your system and requirements
 
 
 
# NOTE: hard code host1 & host2 - or pass in as first two parameters to script
 
my $host1=shift; #host1 is Source
 
my $host2=shift; #host2 is Dest
 
 
 
# NOTE: enable ssl for imapsync
 
my $imapsync = " -ssl1 -ssl2";
 
 
 
##############################
 
# NOTE: Do not set these here - they come from userlist.txt
 
my $user;
 
my $pass;
 
 
 
my $data_file="userlist.txt";
 
open(DAT, $data_file) || die("Could not open file!");
 
while (<DAT>) {
 
        chomp;
 
        # NOTE: userlist.txt can have username@domain password (or comma, tab or |)
 
        ($user,$pass)=split(/[\|\s\t,]+/,$_);
 
 
 
        ##############
 
        open (TESTOUT, "imapsync --buffersize 18192000 --nosyncacls --subscribe --syncinternaldates --noauthmd5 --host1 $host1 --user1 $user --password1 $pass --host2 $host2 --user2 $user --password2 $pass $imapsync|");
 
        while (<TESTOUT>){
 
                print $_;
 
        }
 
        close TESTOUT;
 
 
 
        ### get contacts
 
        open (TESTOUT, "wget --user $user --password $pass https://$host1/zimbra/user/$user/contacts.csv --no-check-certificate|");
 
        while (<TESTOUT>){
 
                print $_;
 
        }
 
        close TESTOUT;
 
 
 
        ### get calendar
 
        open (TESTOUT, "wget --user $user --password $pass https://$host1/zimbra/user/$user/calendar.ics --no-check-certificate |");
 
        while (<TESTOUT>){
 
                print $_;
 
        }
 
        close TESTOUT;
 
 
 
        ### import calendars
 
        open (TESTOUT, "curl -u $user:$pass --data-binary \@calendar.ics https://$host2/service/home/$user/calendar?fmt=ics --insecure|");
 
        while (<TESTOUT>){
 
                print $_;
 
        }
 
        close TESTOUT;
 
 
 
        ### import contacts
 
        open (TESTOUT, "curl -u $user:$pass --data-binary \@contacts.csv https://$host2/service/home/$user/contacts?fmt=csv --insecure|");
 
        while (<TESTOUT>){
 
                print $_;
 
        }
 
        close TESTOUT;
 
 
 
        ### remove files
 
        unlink 'calendar.ics';
 
        unlink 'contacts.csv';
 
        ###############
 
}
 
</pre>
 
 
 
users and passwords go in a text file userlist.txt in the format: username|password.
 
 
 
With some versions of wget you may need to specify the username and password as command line arguements (ie --http-passwd=thepass --http-user=user@dom.com) instead of in the URL (ie https://usersname:pass@theurl).  If you are getting the error Bad Port, then give this a try.
 
 
 
== Copy Calendar From One Zimbra User to Another ==
 
In this example we will export a calendar called "LPO calendar" from one user
 
to another user and name it "LPO" in the destination account.
 
 
 
* Export the calendar "LPO calendar" from user SRC_USER:
 
<nowiki>[root@zimbra ~]# curl -u admin 'https://zimbra:7071/home/SRC_USER/LPO%20calendar?fmt=ics' > LPO.ics</nowiki>
 
 
 
* Adjust all the meeting organizer addresses. If you don't do this, the destination user will see the appointments, but can not edit them.
 
<nowiki>[root@zimbra ~]# cat LPO.ics | sed 's/SRC_USER@/DST_USER@/g' > LPO-dest.ics</nowiki>
 
 
 
* Create empty calendar in destination user account.
 
<nowiki>[root@zimbra ~]# su - zimbra -c 'zmmailbox -z -m DST_USER createFolder --view appointment /LPO'</nowiki>
 
 
 
* Import modified ical data into new calendar.
 
<nowiki>[root@zebra ~]# curl -u "admin" --data-binary @LPO-dest.ics 'https://zimbra:7071/home/DST_USER/LPO?fmt=ics'</nowiki>
 
 
 
 
 
== Copy All Messages, Contacts, Calendars, and Mail Filters ==
 
 
 
I have written a script, which can be run in batch, to copy user data between servers or between mailboxes.  This will copy contacts and calendars from every folder no just /Contacts and /Calendar.  I used this script two times to copy pretty much everything important when migrating from 4.5.8 to 5.0.2. It doesn't support shared folders, task lists, documents, briefcase, and some other things (I recreated shared folders manually with zmmailbox) but support could be added given enough motivation :)
 
 
 
[http://sourceforge.net/projects/zcstools/ ZCS Tools] currently contains these Migration scripts written in Python/Bash.  These scripts are packaged as zimbraMigration-0.x and require imapsync to be installed.
 
 
 
== Import distribution list ==
 
I wrote a simply bash script to migrate distribution lists from one Zimbra server
 
to another it creates a provisioning script for each list.
 
 
 
<pre>myPath=$(pwd)
 
/opt/zimbra/bin/zmprov gadl | while read listname;
 
do
 
  echo "/opt/zimbra/bin/zmprov cdl $listname" > $myPath/$listname
 
  /opt/zimbra/bin/zmprov gdl $listname | grep zimbraMailForwardingAddress >  $myPath/$listname.tmp
 
  cat $myPath/$listname.tmp | sed 's/zimbraMailForwardingAddress: //g' |
 
  while read member; do
 
    echo "/opt/zimbra/bin/zmprov adlm $listname $member" >> $myPath/$listname
 
  done
 
  /bin/rm $myPath/$listname.tmp
 
done</pre>
 
 
 
= Migrating Sieve Filter Rules =
 
 
 
You have a few options to migrate Sieve rules.  Generally you can take existing rules and then just dump them into the account attribute zimbraMailSieveScript.  The server will be able to process these rules.  However, if you intend to enable the client to edit the rules you will need to make sure they conform to a ZCS-specific set of characteristics.  There are two ways to do this.
 
 
 
== Using zmmailbox addFilterRule ==
 
 
 
Within the zmmailbox command there is a "addFilterRule" command.  This allows you to add a named filter to a particular user.  Its usage defines the parameters that ZWC can understand for editing.  Given that for any migration scenario you'll likely end up parsing the rules, this will let you reconstruct the rules in a syntax ZWC understands.  You will need to find a "name" for each rule.  It could be as simple as "rule1", "rule2", etc.
 
 
 
Here's the usage for addFilterRule
 
<code>
 
[zimbra@qa03 ~]$ zmmailbox help filter
 
 
 
  addFilterRule(afrl)                    add filter rule
 
 
 
  deleteFilterRule(dfrl)                add filter rule
 
 
 
  getFilterRules(gfrl)                  get filter rules
 
 
 
  modifyFilterRule(mfrl)                add filter rule
 
 
 
  {conditions}:
 
    header "name" is|not_is|contains|not_contains|matches|not_matches "value"
 
    header "name" exists|not_exists
 
    date before|not_before|after|not_after "YYYYMMDD"
 
    size under|not_under|over|not_over "1|1K|1M"
 
    body contains|not_contains "text"
 
    addressbook in|not_in "header-name"
 
    attachment exists|not_exists
 
 
 
  {actions}:
 
    keep
 
    discard
 
    fileinto "/path"
 
    tag "/tag"
 
    mark read|flagged
 
    redirect "address"
 
    stop
 
 
 
</code>
 
Also, for add filter rule:
 
mbox> afrl
 
usage:
 
 
 
  addFilterRule(afrl)          [opts] {name} [*active|inactive] [any|*all] {conditions}+ {actions}+
 
    -a/--after <arg>            add after filter-name
 
    -f/--first                  add as first filter rule
 
    -l/--last                    add as last filter rule
 
    -b/--before <arg>            add before filter-name
 
 
 
 
 
Each zmmailbox script invokes a Java VM (just like zmprov).  So you'll want to create a script to be loaded into zmmailbox.  That script would look something like
 
<code>
 
<br>
 
adminAuthenticate ...<br>
 
selectMailbox user1 ...<br>
 
addFilterRule rule1 header "from" contains "kevin" discard<br>
 
addFilterRule rule2 ....<br>
 
...<br>
 
selectMailbox user2<br>
 
addFilterRule ....<br>
 
...<br>
 
 
 
</code>
 
Then you can run it via <code>zmmailbox < scriptname</code>.
 
 
 
== Processing a Sieve script and inserting it via zmprov ==
 
 
 
Alternately you can process the existing Sieve scripts to conform to ZCS expectations and then insert the whole script via <code>zmprov ma account zimbraMailSieveScript ....</code>.  You'll need to restrict the entered rules to the Sieve commands as documented above (if ZWC or ZCO are expected to edit them).  Each filter rule will need a comment above it; this comment is the filter's name as identified in addFilterRule.  Creating one or two simple rules using the web client will give you a framework for the created rule.
 
 
 
[[Category:Pending Certification]]
 
 
 
 
 
= Troubleshooting =
 
 
 
Please see [http://wiki.zimbra.com/index.php?title=User_Migration_Troubleshooting User Migration Troubleshooting] if you are having problems migrating data to your Zimbra installation.
 

Latest revision as of 03:11, 11 July 2015

User Migration

   KB 1340        Last updated on 2015-07-11  




0.00
(0 votes)



First, note that you'll want to create accounts in Zimbra first before you do the migration. If you want to do it in one shot, read Bulk Provisioning.

Migrating your users means you're going to have to deal with mail, calendar, contacts and passwords. This page used to be one monolithic monstrosity -- but has now been broken down into separate pages:

Please see User Migration Troubleshooting if you are having problems migrating data to your Zimbra installation.

Verified Against: Zimbra Collaboration Suite 7.0 Date Created: 3/7/2006
Article ID: https://wiki.zimbra.com/index.php?title=User_Migration Date Modified: 2015-07-11



Try Zimbra

Try Zimbra Collaboration with a 60-day free trial.
Get it now »

Want to get involved?

You can contribute in the Community, Wiki, Code, or development of Zimlets.
Find out more. »

Looking for a Video?

Visit our YouTube channel to get the latest webinars, technology news, product overviews, and so much more.
Go to the YouTube channel »


Jump to: navigation, search