Home > World Of ICT > Mail Migration From Postfix-Mysql to Zimbra+LDAP Backend (Again ?????)

Mail Migration From Postfix-Mysql to Zimbra+LDAP Backend (Again ?????)


Memasuki puasa ke 4 di Ramadhan 1432 H ini, tangan sudah gatel ingin mengetikkan sesuatu. yah jadilah postingan ini. Semoga menjadi salah satu amalan ibadah yang pahalanya akan terus mengalir, amiinn.. Yra.

Judulnya Ngeri bin ribet gak yah ??? ,  tapi kira-kira seperti itulah, berawal karena ketidakpuasan terhadap interface  squirrelmail dan roundcube, kemudian manage mail account, dsb,  maka muncullah ide untuk memindahkan seluruh account email domain *unila.ac.id kedalam sebuah sistem baru dengan performance userfriendly dan powerfull.

Akhirnya terpilihlah Zimbra Appliance sebagai mail system backend untuk me-manage account mail domain *.unila.ac.id, dengan kelebihan paling utama yang tidak didapatkan pada system opensource lainnya :

  • Support Single Sign On dengan LDAP on It.
  • Kemudahan dalam entry+edit+report user email.
  • Support SMTP+IMAP+POP3+SSL Support, lebih aman dan menjanjikan.
  • Interface Webmail Client yang userfriendly.
  • Interfacfe Webmail Client mendekati yahoo mail beta.
  • Integrasi dengan Aplikasi Social Networking.
  • Integrasi dengan Calender online work collaboration.
  • Support Mail Filtering hingga ke end user broooo…. ini yg paling mantap.
  • Support HTML, AJAX, Mobile Phone View.
  • Dan Keunggulan Keunggulan lainnya.

Ah pokoknya banyak lah kelebihan system ini. setelah diujicobakan pada mail system puskom maka saya putuskan untuk memindahkan semua account email unila dari system sebelumnya (Postfix+Mysql) ke system baru dengan Zimbra+LDAP. Nah akan muncul pertanyaan bagaimana memindahkan/memigrasikan user user dengan base mysql diconvert menjadi format LDAP,  jika anda tertarik untuk bermigrasi silahkan ikuti briefhistory pengalaman saya.

Pertama Pastikan Bahwa Zimbra sudah berjalan dengan baik , jika belum maka ikutilagi petunjuk instalasi di Linux(Ubuntu) pada link berikut https://gigihfordanama.wordpress.com/2011/07/14/how-to-install-zimbra-collaboration-suite-zcs-on-ubuntu-10-04-64-server/

1.  Migrasi User Mail dari domain Unila dengan format mysql ke LDAP

Disini saya menggunakan script PHP untuk menarik data dari database dan  script BASH untuk mencreate user ke LDAP.

Asumsi bahwa database mail account (Mysql)  berada pada database postfix dan informasi user tersimpan pada mailbox;

#> server lama

maiser# mysql -u admin -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 33959 to server version: 5.0.24a
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> use postfix;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+-------------------+
| Tables_in_postfix |
+-------------------+
| Sub               |
| UK                |
| admin             |
| alias             |
| domain            |
| domain_admins     |
| log               |
| mailbox           |
| user_info         |
| vacation          |
+-------------------+
10 rows in set (0.00 sec)

mysql>

OK selanjutnya kita akan mengambil informasi dari table mailbox untuk digunakan informasi user,password,alias,dll diconvert ke dalam LDAP. caranya adalah sebagai berikut;

Buat Script PHP untuk mengambil data kurang lebih  seperti ini;   script.php

#!/usr/bin/php5
// Postfix.admin to Zimbra import
//
// Created by Jarosław Czarniak on 26-10-2008
// Modified By Gigih Forda Nama : 2011

<?php
/////////////////////////////////////////////////////////
$user="Your_mysql_login";
$pass="Your_mysql_pass";
$base="Your_mysql_database";
$tabl="Your_Table_mailbox"; //table
$file="exported.sh";

/////////////////////////////////////////////////////////
echo "Usage: as \"zimbra\" user on destination server:\n";
echo "# sh ./exported.sh\n\n";
echo "";

$mydb = mysql_connect('localhost',$user, $pass) or die ('Error of connection with server');
mysql_select_db($base);
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET NAMES utf8");

$query = "SELECT username,password,name,maildir,quota,domain FROM ".$tabl;
$dane = mysql_query($query) or die ('Error during query for bazy1'.mysql_error());

$handle = fopen($file, "w");

while ($row = mysql_fetch_array($dane, MYSQL_NUM))
{
    $StringData = "zmprov ca ".$row[0]." dsfs123hsdyfgbsdgfbsd displayName '".$row[2]."'\n";
    fwrite($handle, $StringData);
    $StringData = "zmprov ma ".$row[0]." userPassword '{crypt}".$row[1]."'"."\n";
    fwrite($handle, $StringData);
}
?>

Script script.php ini akan membaca database postfix, table mailbox kemudian disesuaikan dengan format ZIMBRA dengan output file adalah exported.sh , untuk kasus pada domain yang saya handle kira kira penampakan exported.sh adalah sebagai berikut;

maiser# more exported1.sh
zmprov ca fp@unila.ac.id dsfs123hsdyfgbsdgfbsd displayName 'Wan Abbas Zakaria'
zmprov ma fp@unila.ac.id userPassword '{crypt}$1$.asds.'
zmprov ca wan_abbas@unila.ac.id dsfs123hsdyfgbsdgfbsd displayName 'Wan Abbas Zakaria'
zmprov ma wan_abbas@unila.ac.id userPassword '{crypt}$1$sdsdsdsd'
zmprov ca tek-sipil@unila.ac.id dsfs123hsdyfgbsdgfbsd displayName 'Iwan Maryawan'
zmprov ma tek-sipil@unila.ac.id userPassword '{crypt}$1$/FARbsdsdsdsd'
zmprov ca sekrpr3@unila.ac.id dsfs123hsdyfgbsdgfbsd displayName 'Margono'
zmprov ma sekrpr3@unila.ac.id userPassword '{crypt}$1$/sdsdsds'
zmprov ca meizano@unila.ac.id dsfs123hsdyfgbsdgfbsd displayName 'M. Meizano ardi'
zmprov ma meizano@unila.ac.id userPassword '{crypt}$1$/WXsdsdsdsd'
############################## SNIFFF CUTED CUTED ################

Terakhir tinggal script ini dijalankan pada zimbra server

root@zimbra:# su zimbra
zimbra@zimbra:$
zimbra@zimbra:./exported.sh

cb635fdb-b82b-4a7f-8bfe-9d580001bacb
16ae8c20-773d-4fed-a0be-3e70488f4828
5110e0b6-cab6-4b99-bc70-4214191ea3f1
8d7576b7-3e3e-4561-8555-36e43e0dbf7f
c8e86af7-1c4a-4f65-9de7-8af3bdfb9a8f
ERROR: account.ACCOUNT_EXISTS (email address already exists: 131620767@unila.ac.id, at DN: uid=131620767,ou=people,dc=unila,dc=ac,dc=id)

Yap beres jika ada 1000 account tinggal menunggu saja si zimbra menjalankan script tersebut. dan check pada web zimbra panel admin apakah user sudah masuk dengan password lama yang masih bisa digunakan.

Beres deh untuk urusan user, nah sekarang bagaimana dengan urusan isi email, apakah bisa kita pindahkan ?????? jawabnya Owww Tentu Sajaaaaaaaaaaaaaaaa   Bisaaaaaaaaaaaaaaaaaaaaaa…………..sodara-sodara …….

Ikuti saja langkah berikut;

2. Proses Pemindahan data email.

Untuk proses pemindahan data email kita cukup menggunakan BASH Script tidak perlu repot repot menggunakan fungsi imapsiync.  kondisi existing kira kira seperti ini;

  • Data Email berada pada direktory /data/mail_user/  dengan format Maildir-nya Postfix
  • maiser# /data/mail_user/
    maiser# du -h -d2
     28K    ./.sunarto@unila.ac.id/.Trash
    1.2M    ./.sunarto@unila.ac.id/.Sent
     27M    ./.sunarto@unila.ac.id/new
    4.0K    ./.sunarto@unila.ac.id/courierimapkeywords
     28K    ./.sunarto@unila.ac.id/.Drafts
    4.0K    ./.sunarto@unila.ac.id/tmp
     42M    ./.sunarto@unila.ac.id/cur
     70M    ./.sunarto@unila.ac.id
     41M    ./susilawati@unila.ac.id/Maildir
     41M    ./susilawati@unila.ac.id
     92M    ./joko_prasetyo@unila.ac.id/Maildir
     92M    ./joko_prasetyo@unila.ac.id
     39M    ./rizki_hanriko@unila.ac.id/Maildir
     39M    ./rizki_hanriko@unila.ac.id
    252K    ./peserta10@unila.ac.id/Maildir
    256K    ./peserta10@unila.ac.id
    250M    ./huda28@unila.ac.id/Maildir
    250M    ./huda28@unila.ac.id
     20K    ./ka-mm-agro-industri@unila.ac.id/Maildir
     24K    ./ka-mm-agro-industri@unila.ac.id
    644K    ./kasubag-tu-cetak@unila.ac.id/Maildir
    648K    ./kasubag-tu-cetak@unila.ac.id
    9.5M    ./damanhuri@unila.ac.id/Maildir
    9.5M    ./damanhuri@unila.ac.id

ok sekarang tinggal kita copy semua file tersebut dengan rsync atau scp ke server zimbra saya contohkan file email akan saya copy ke direktori /usr/local/virtual pada server zimbra.

Setelah dikopi kita harus tertibkan dahulu format foldernya; dengan format baku adalah sebagai berikut;

"domain/username/{cur|new|tmp}"
"domain/username/subfolder1/{cur|new|tmp}"
"domain/username/subfolder2/{cur|new|tmp}"

Mengikuti format diatas maka pertama kita buat dahulu folder domain yaitu unila.ac.id , kemudian dibawahnya adalah folder user dengan format user, selanjutnya dibawah folder barulah berisi folder mail dengan format Maildir, kira-kira struktur filenya akan menjadi seperti ini;

root@zimbra:/usr/local/virtual# pwd
/usr/local/virtual
root@zimbra:/usr/local/virtual# ll
-rwxr-xr-x  1 root root 2083 2011-08-04 02:28 mailconvert.sh*
drwxr-xr-x  3 root root 4096 2011-08-04 02:26 unila.ac.id/
root@zimbra:/usr/local/virtual#

root@zimbra:/usr/local/virtual# du -h | more
4.0K    ./unila.ac.id/muji/.inbox_baru/new
4.0K    ./unila.ac.id/muji/.inbox_baru/courierimapkeywords
4.0K    ./unila.ac.id/muji/.inbox_baru/tmp
13M     ./unila.ac.id/muji/.inbox_baru/cur
13M     ./unila.ac.id/muji/.inbox_baru
4.0K    ./unila.ac.id/muji/.hack-unila/new
4.0K    ./unila.ac.id/muji/.hack-unila/tmp
40K     ./unila.ac.id/muji/.hack-unila/cur
52K     ./unila.ac.id/muji/.hack-unila
4.0K    ./unila.ac.id/muji/.PELATIHAN WEB-2010/new
8.0K    ./unila.ac.id/muji/.PELATIHAN WEB-2010/courierimapkeywords
4.0K    ./unila.ac.id/muji/.PELATIHAN WEB-2010/tmp
520K    ./unila.ac.id/muji/.PELATIHAN WEB-2010/cur

Oke sekarang kita buat script baru menggunakan BASH script  mailconvert.sh dan akan dieksekusi oleh user zimbra ;

#!/bin/bash

# Postfix virtual transport -> Zimbra mailbox migration
# written by NERvOus (http://www.nervous.it) - 2009-12-25, Modified By Gigih Forda Nama 2011

# base folder where msgs will be imported
BFOLDER="Arsip-Mail"
ZMMBOX="/opt/zimbra/bin/zmmailbox"
BDIR=$(pwd)

echo You must run $0 from inside /var/mail/virtual directory
echo $0 expects to find the mailboxes in the current path!
echo The structure of maildirs must be as follows:
echo
echo "domain/username/{cur|new|tmp}"
echo "domain/username/subfolder1/{cur|new|tmp}"
echo "domain/username/subfolder2/{cur|new|tmp}"
echo ...
echo
echo All folders will be stored in a subfolder called $BFOLDER
echo The hierarchy of subfolders will be maintained under $BFOLDER.
echo
echo Press Enter to start, CTRL+C to abort.
read

# handle folders with a space inside, they are more common than you may
# think
IFS='
'
for p in $(find . -type d -name cur); do
        DOMAIN=`echo $p | cut -d'/' -f2`
        UNAME=`echo $p | cut -d'/' -f3`
        DIRNAME=`echo $p | cut -d'/' -f4`
        # this may fail, if folder already exists. Who cares. Ignore the
        # error.
        echo createFolder /$BFOLDER | $ZMMBOX -z -m $UNAME@$DOMAIN
        if [ "$DIRNAME" == "cur" ]; then
                echo Importing INBOX folder for $UNAME@$DOMAIN from $BDIR/$DOMAIN/$UNAME/ 1>&2
                # we are importing the top level folder
                echo addMessage /$BFOLDER $BDIR/$DOMAIN/$UNAME/cur | $ZMMBOX -z -m $UNAME@$DOMAIN
                echo addMessage /$BFOLDER $BDIR/$DOMAIN/$UNAME/new | $ZMMBOX -z -m $UNAME@$DOMAIN
        else
                DIRNAME=$(echo $DIRNAME | sed -e 's/\/cur$//')
                echo Importing folder $DIRNAME for $UNAME@$DOMAIN from $BDIR/$DOMAIN/$UNAME/$DIRNAME 1>&2
                echo createFolder \'/$BFOLDER/$DIRNAME\' | $ZMMBOX -z -m $UNAME@$DOMAIN
                echo addMessage \'/$BFOLDER/$DIRNAME\' \'$BDIR/$DOMAIN/$UNAME/$DIRNAME/cur\' | $ZMMBOX -z -m $UNAME@$DOMAIN
                echo addMessage \'/$BFOLDER/$DIRNAME\' \'$BDIR/$DOMAIN/$UNAME/$DIRNAME/new\' | $ZMMBOX -z -m $UNAME@$DOMAIN
        fi
done

Jangan lupa untuk merubah mode file mailconvert.sh ini menjadi executable;

root@zimbra:/usr/local/virtual# chmod +x mailconvert.sh

Pastikan bahwa script mailconvert berada pada directory utama /usr/local/virtual

jika sudah ok, maka tinggal eksekusi script tersebut, otomatis akan diconvert format Maildir ke Format Zimbra dengan terlebih dahulu masuk sebagai user zimbra.

root@zimbra:/usr/local/virtual# su zimbra
zimbra@zimbra:/usr/local/virtual$ ./mailconvert.sh
You must run ./mailconvert.sh from inside /var/mail/virtual directory
./mailconvert.sh expects to find the mailboxes in the current path!
The structure of maildirs must be as follows:

domain/username/{cur|new|tmp}
domain/username/subfolder1/{cur|new|tmp}
domain/username/subfolder2/{cur|new|tmp}
...

All folders will be stored in a subfolder called Arsip-Mail
The hierarchy of subfolders will be maintained under Arsip-Mail.

Press Enter to start, CTRL+C to abort.
=858594:2,S)
20462 (/usr/local/virtual/unila.ac.id/muji/.timkerja-pr1/cur/1274571713.M335097P65841V0000005BI002A0D39_7.groups.unila.ac.id,S=7974499:2,)
20463 (/usr/local/virtual/unila.ac.id/muji/.timkerja-pr1/cur/1296099883.M715630P2540V0000005DI008BF247_63.groups.unila.ac.id,S=7526:2,RS)
20464 (/usr/local/virtual/unila.ac.id/muji/.timkerja-pr1/cur/1291862684.M911904P4439V0000005FI008BF1B7_23.groups.unila.ac.id,S=91216:2,S)
20465 (/usr/local/virtual/unila.ac.id/muji/.timkerja-pr1/cur/1274571713.M719459P65841V0000005BI002A0D56_36.groups.unila.ac.id,S=191511:2,)
20467 (/usr/local/virtual/unila.ac.id/muji/.timkerja-pr1/cur/1296099883.M715716P2540V0000005DI008BF248_64.groups.unila.ac.id,S=9363:2,S)
20468 (/usr/local/virtual/unila.ac.id/muji/.timkerja-pr1/cur/1274571713.M567468P65841V0000005BI002A0D49_23.groups.unila.ac.id,S=4460:2,S)
20470 (/usr/local/virtual/unila.ac.id/muji/.timkerja-pr1/cur/1291862684.M893990P4439V0000005FI008BF17C_16.groups.unila.ac.id,S=566805:2,S)
20471 (/usr/local/virtual/unila.ac.id/muji/.timkerja-pr1/cur/1274571713.M236030P65841V0000005BI002A0D35_3.groups.unila.ac.id,S=2837825:2,)
20472 (/usr/local/virtual/unila.ac.id/muji/.timkerja-pr1/cur/1291862646.M739803P4439V0000005FI008BF1AB_9.groups.unila.ac.id,S=53479:2,S)
20473 (/usr/local/virtual/unila.ac.id/muji/.timkerja-pr1/cur/1274571713.M512228P65841V0000005BI002A0D40_14.groups.unila.ac.id,S=4039:2,RS)
20474 (/usr/local/virtual/unila.ac.id/muji/.timkerja-pr1/cur/1274571713.M531710P65841V0000005BI002A0D46_20.g

Tinggal menunggu saja proses conversi selesai, jika selesai maka pada folder home direktori email user pada zimbra akan berisi mail backup dari Maildir dalam bentuk format MBOX Zimbra. dengan nama folder adalah Arsip-Mail

Struktur data email ditiap-tiap user adalah dengan format MBOX Next Generation dengan fitur lebih baik dari format Maildir; kira kira hierarchy nya adalah sebagai berikut;

root@zimbra:/opt/zimbra/db/data# ll
total 1042856
drwxr-xr-x 105 zimbra zimbra      4096 2011-08-03 10:48 ./
drwxr-xr-x   3 zimbra zimbra      4096 2011-08-03 02:13 ../
-rw-rw----   1 zimbra zimbra  18874368 2011-08-04 03:23 ibdata1
-rw-rw----   1 zimbra zimbra 524288000 2011-08-04 03:23 ib_logfile0
-rw-rw----   1 zimbra zimbra 524288000 2011-07-14 07:10 ib_logfile1
drwx------   2 zimbra zimbra      4096 2011-07-14 07:14 mboxgroup1/
drwx------   2 zimbra zimbra      4096 2011-07-14 12:45 mboxgroup10/
drwx------   2 zimbra zimbra      4096 2011-08-03 10:48 mboxgroup100/
drwx------   2 zimbra zimbra      4096 2011-07-14 23:00 mboxgroup11/
drwx------   2 zimbra zimbra      4096 2011-07-14 23:00 mboxgroup12/
drwx------   2 zimbra zimbra      4096 2011-07-15 00:38 mboxgroup13/
drwx------   2 zimbra zimbra      4096 2011-08-02 06:29 mboxgroup14/

root@zimbra:/opt/zimbra/db/data# cd mboxgroup99
root@zimbra:/opt/zimbra/db/data/mboxgroup99# ll
total 1880
drwx------   2 zimbra zimbra   4096 2011-08-03 10:42 ./
drwxr-xr-x 105 zimbra zimbra   4096 2011-08-03 10:48 ../
-rw-rw----   1 zimbra zimbra   8716 2011-08-03 10:42 appointment_dumpster.frm
-rw-rw----   1 zimbra zimbra 131072 2011-08-03 10:42 appointment_dumpster.ibd
-rw-rw----   1 zimbra zimbra   8716 2011-08-03 10:42 appointment.frm
-rw-rw----   1 zimbra zimbra 131072 2011-08-03 10:42 appointment.ibd
-rw-rw----   1 zimbra zimbra   8776 2011-08-03 10:42 data_source_item.frm
-rw-rw----   1 zimbra zimbra 114688 2011-08-03 10:42 data_source_item.ibd
-rw-rw----   1 zimbra zimbra     61 2011-08-03 10:42 db.opt
-rw-rw----   1 zimbra zimbra  12886 2011-08-03 10:42 imap_folder.frm
-rw-rw----   1 zimbra zimbra 131072 2011-08-03 10:42 imap_folder.ibd
-rw-rw----   1 zimbra zimbra   8718 2011-08-03 10:42 imap_message.frm
-rw-rw----   1 zimbra zimbra 131072 2011-08-03 10:42 imap_message.ibd
-rw-rw----   1 zimbra zimbra  13438 2011-08-03 10:42 mail_item_dumpster.frm
-rw-rw----   1 zimbra zimbra 278528 2011-08-03 10:42 mail_item_dumpster.ibd
-rw-rw----   1 zimbra zimbra  13438 2011-08-03 10:42 mail_item.frm
-rw-rw----   1 zimbra zimbra 294912 2011-08-04 02:58 mail_item.ibd
-rw-rw----   1 zimbra zimbra   8638 2011-08-03 10:42 open_conversation.frm
-rw-rw----   1 zimbra zimbra 114688 2011-08-04 02:58 open_conversation.ibd
-rw-rw----   1 zimbra zimbra   8686 2011-08-03 10:42 pop3_message.frm
-rw-rw----   1 zimbra zimbra 114688 2011-08-03 10:42 pop3_message.ibd
-rw-rw----   1 zimbra zimbra   8990 2011-08-03 10:42 revision_dumpster.frm
-rw-rw----   1 zimbra zimbra  98304 2011-08-03 10:42 revision_dumpster.ibd
-rw-rw----   1 zimbra zimbra   8990 2011-08-03 10:42 revision.frm
-rw-rw----   1 zimbra zimbra  98304 2011-08-03 10:42 revision.ibd
-rw-rw----   1 zimbra zimbra   8698 2011-08-03 10:42 tombstone.frm
-rw-rw----   1 zimbra zimbra 114688 2011-08-03 10:42 tombstone.ibd
root@zimbra:/opt/zimbra/db/data/mboxgroup99#

Penampakan mailbackup yang lama adalah sebagai berikut;

Yap Demikianlah Sekilah Info dari puasa hari ke 4 ini, mudah-mudahan ada gunanya.

  1. March 12, 2012 at 6:36 am

    Eh msh ada meiser yak…

  2. Arief
    May 24, 2013 at 6:21 am

    Saya sudah mengikuti langkah nomor 1 untuk memindahkan user postfix ke zimbra.
    Memang semua akun sudah masuk ke zimbra tetapi ketika mau login menggunakan
    email lama, kenapa tidak bisa ya?

  3. Arief
    May 24, 2013 at 7:20 am

    Maksud saya tidak mau login menggunakan password yang lama. Itu kenapa ya?

    Arief :
    Saya sudah mengikuti langkah nomor 1 untuk memindahkan user postfix ke zimbra.
    Memang semua akun sudah masuk ke zimbra tetapi ketika mau login menggunakan
    email lama, kenapa tidak bisa ya?

  4. September 26, 2013 at 8:22 am

    Wow, marvelous blog layout! How long have you been blogging for?
    you make blogging look easy. The overall look of your website is wonderful, as well
    as the content!

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: