Migrasi Email Antar Server yang Berbeda OS dan Panel

Migrasi data antar server akan lebih mudah kalau platformnya sama (terutama OS dan Panel nya). Misalnya migrasi akun antar server cPanel sangat mudah karena difasilitasi oleh cPanel.

Nah, bagaimana kalau beda? Misalnya yang barusan saya lakukan dari sPanel nya MWN ke cPanel. Kalau kita punya akses root ke server sPanel sih mudah karena sPanel memberikan fasilitas migrasi ke cPanel. Lha kalau hanya sebagai user biasa bagaimana?

Kalau untuk file web dan database mudah migrasinya. Untuk file web tinggal download dan masukkan ke server baru. Untuk database bisa di-dump/export dulu baru dimasukkan ke server baru.

Nah, untuk email ini yang kadang masalah, karena bisa jadi beda software dan letak direktorinya. Cara yang paling efektif adalah login dengan protokol yg sudah disepakati semua server misalnya imap. Ada tool yang sangat membantu migrasi email bernama imapsync.

Berikut ini cara install dan menjalankannya. (Saya menggunakan debian based server)

sudo apt-get install makepasswd rcs perl-doc libio-tee-perl git libmail-imapclient-perl libdigest-md5-file-perl libterm-readkey-perl libfile-copy-recursive-perl build-essential make automake libunicode-string-perl

git clone git://github.com/imapsync/imapsync.git

sudo cpan
cpan> install Unicode::String
cd imapsync
mkdir dist
sudo make install

#check
imapsync -v
1.678

#jalankan

imapsync –host1 server1 -user1 [email protected] –password1 user1password –ssl1  –host2 server2 –user2 [email protected] –password2 user2password –ssl2

server1 : server asal
user1 : user asal
pass1 : password asal

server2 : server tujuan
user2 : user tujuan
pass2 : password tujuan

Tuning Slow ZFS

Saya telah menginstall ZFS dengan setting default. Ternyata performa untuk write nya sangat lambat sekitar 50 Mb/s, jauh di bawah harapan saya menggunakan ZFS.

Setelah membaca artikel dari https://icesquare.com/wordpress/how-to-improve-zfs-performance/ dan mencoba beberapa sarannya, saya dapat bahwa yang paling berpengaruh adalah kompresi.

Jadi, inilah obat paling mujarabnya:

zfs set compression=lz4 namaPoolAnda

Setelah itu, performa write menjadi lebih dari 1Gb/s. Mantab.

That’s all folks.

Install Zimbra Collaboration – Open Source Version di Ubuntu 12.04

  • Install ubuntu server 12.04 yang 64bit. Bisa install di server fisik atau sebagai virtual server.
  • Karena ada bug di systat bawaan, maka kita harus menghapusnya dan mengganti dengan versi yg lebih baru.

sudo apt-get remove –purge sysstat

wget https://launchpad.net/ubuntu/+source/sysstat/9.0.6-2/+build/1453608/+files/sysstat_9.0.6-2_amd64.deb

sudo dpkg -i sysstat_9.0.6-2_amd64.deb

sudo apt-mark hold sysstat

  • Hapus semua paket yang bisa bertabrakan dengan zimbra

sudo apt-get remove –purge apache2 apache2-doc apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common bind9 bind9-host bind9utils sendmail sendmail-base sendmail-bin sendmail-cf sendmail-doc-sensitive mda rmail samba bsd-mailx

  • Install dependencies

sudo apt-get install netcat-openbsd libgmp3c2 sysstat sqlite3 pax

#nama file bisa berbeda tergantung versi zimbra terbaru.

wget http://files2.zimbra.com/downloads/8.0.6_GA/zcs-8.0.6_GA_5922.UBUNTU12_64.20131203103702.tgz

  • Install

tar -xzvf zcs-8.0.6_GA_5922.UBUNTU12_64.20131203103702.tgz

cd zcs-8.0.6_GA_5922.UBUNTU12_64.20131203103702

./install.sh

Hal hal yang perlu dilakkan setelah selesai install:

  • Membuat ECDSA key

ssh-keygen -b 521 -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key

  • Menjalankan zmlog pertama kali

sudo su – zimbra

/opt/zimbra/libexec/zmstatuslog

  • Restart

zmcontrol restart

  • Check Status

zmcontrol status

  • Memulai administrasi zimbra

https://nama-domain-anda::7071/zimbraAdmin/

User: admin

Password: sesuai yang dibuat saat instalasi

  • User biasa masuk ke:

https://nama-domain-anda/

 

 

 

 

 

 

MySQL Auto Increment vs PostgreSQL Sequence untuk Distributed System

Di semua engine database yang  pernah saya pakai, ada fasilitas untuk membuat sebuah baris data unik dengan cara selalu menambahkan angka secara otomatis dari baris sebelumnya. Biasanya menambahkan 1 dari sebelumnya, walaupun sebenarnya tidak harus tambah 1, bisa tambah 2,5, 10, dan seterusnya. Demikian juga dengan database populer seperti MySSQL dan PostgreSQL yang biasa saya pakai. Di MySQL namanya AUTO INCREMENT sedangkan di PostgreSQL namanya SEQUENCE.

Saya tidak akan menjelaskan bagaimana membuatnya, namun saya ingin menyampaikan pendapat pribadi bahwa SEQUENCE di PostgreSQL lebih “keren” dari pada AUTO INCREMENT di MySQL untuk implementasi sistem yang terdistribusi di mana setiap node server bisa menulis baris data sendiri dan di-broadcast ke node yang lainnya. Diperlukan cara agar tidak bentrok nilainya antara node satu dengan node lainnya.

Pendekatan yang sering dipakai adalah dengan membedakan start dan step increment-nya. Misalnya:

  • Node 1: dimulai dari 1 dan step incrementnya 10, artinya akan menghasilkan angka 1, 11, 21, 31, 41, dst.
  • Node 2: dimulai dari 2 dan step incrementnya 10, sehingga akan menghasilkan angka 2,12, 22, 31, 41, dst.

Dengan pendekatan tersebut di atas maka antara node 1 dan node 2 tidak akan bentrok nilainya.

Di MySQL hal tersebut hanya bisa dilakukan dengan melakukan setting di konfigurasi server atau di variable global yang akan mempengaruhi semua database dan tabel yang ada. Di PostgreSQL bisa di-setting di sebuah object sequence sendiri.

bagaimana kalau node nya lebih dari 10? bagaimana kalau lebih dari 100? lebih dari 1000? Maka step increment nya jadi semakin lebar. Ini bisa cepat menghabiskan digit angka. Mungkin untuk record database yang sedikit tidak masalah. Tapi kalau menatat jutaan record setiap hari bagaimana?

Saya tidak suka dengan pendekatan tersebut.  Saya lebih suka menggunakan key lain yang alhanumeric, misalnya UUID, atau microtime + random number yang harus digabung dengan ID dari node. Dengan demikian, akan selalu unik entah dari node mana record berasal.

Namun ada kalanya kita memang harus membuat sebuah key yang berupa angka, misalnya untuk transaksi pembayaran di bank, di mana di ATM tidak bisa input huruf untuk nomor pembayarannya. Untuk itu, SEQUENCE dari PostgreSQL lebih enak digunakan.

bagimana bisa? Lanjut nanti…

perintah “setup” tidak ada atau hilang di centos

[[email protected] ~]# setup
-bash: setup: command not found

Biasanya ini terjadi kalau install centos yang minimal

Solusinya:

yum –y install setuptool
yum –y install system-config-network*
yum -y install system-config-firewall*
yum –y install system-config-securitylevel-tui
yum –y install system-config-keyborad

Ketinggalan Pesawat

Seperti halnya kereta api, pesawat itu punya kesaktiannya sendiri. Jika kita yang telat maka akan ditinggal, tapi jika pesawatnya yang telat kita susah untuk ninggalin tuh pesawat. Penumpang sudah harus check in dan menunggu 1 jam sebelum berangkat. Beberapa maskapai memang menerapkan city check in atau web check in, tapi tetap aja penumpang tidak boleh telat. Karena telat itu lah saya sering hampir ketinggalan pesawat. Bahkan ada pesawat di Jambi yang mau terbang gak jadi karena saya baru dateng. Tangga dipasang lagi. hehehe. Dan karena telat itu juga saya beberapa kali ketinggalan pesawat beneran. Hehehe.

Pertama, pagi hari saat mau ke Surabaya bersama teman saya H. Lima belas menit sebelum keberangkatan baru nyampe bandara. Wal hasil, check in sudah tutup dan terpaksa mencari tiket lagi dan dapetlah sore. Saya mengisi masa penantian dengan mainin laptop di bandara. Dan temen saya H, malah memilih pulang ke Depok dulu. Bayangkan Cengkareng Depok berapa lama. Ajaibnya,  1 jam sebelum pemberangkatan H sudah muncul. Masak di Depok cuman mau numpang kencing doang? hehehe.

Kedua, saat mau ke Palembang malam hari bersama S. Kami sudah 2 jam sebelum pemberangkatan nyampe bandara. Check in lancar sampai di ruang tunggu. Aman kan? Ternyata tidak. Kami berdua asyik ngobrol sampai tidak tahu ada pengumuman pemberangkatan di pindah ke gate lain. Begitu pas jam pemberangkatannya saya tanya ke petugas dan diberi tahu kalau melalui gate lain. Saat kami sampai ke gate tersebut pesawat sudah terbang. Nah loh. Karena tidak ada penerbangan lagi setelah itu akhirnya kami kleleran semaleman di bandara. hehehe.

Ketiga, pagi hari saat mau ke Jember lewat Surabaya bersama rombongan Pak D. karena saya telat bangunnya (ataukah jemputan pak D yang telat) akhirnya kami tiba di bandara 5 menit sebelum keberangkatan. Tentu saja sudah telat. Akhirnya berkat kebaikan hati Pak D yang bapaknya artis itu mbayarin tiket kami bertiga, kami bisa ke Surabaya pada penerbanyan pesawat lain. hehehe.

Keempat, sore hari dari Jember bersama Pak D tadi. Kami hanya berdua saja. Kami sudah membeli tiket secara online dari Jember untuk penerbangan jam lima sore melalui Denpasar Bali. Kami berangkat dari Jember dan sampai bandara Ngurah Rai jam empat sore, satu jam sebelum pemberangkatan. Aman kan? Oh tidak. Ternyata di Bali itu Waktu Indonesia Tengah dan jam kami Waktu Indonesia Barat. Jam 5 di Bali itu harusnya jam 4 di Jawa. Dan akhirnya ketinggalan pesawat lagi. Pak D akhirnya membelikan lagi tiket malam ke Jakarta.

Semoga tidak ada yang kelima. 😀

Sleeping Child – Michael Learns to Rock

The Milky Way upon the heavens
Is twinkling just for you
And Mr. Moon he came by
To say goodnight to you
I’ll sing for you I’ll sing for mother
We’re praying for the world
And for the people everywhere
Gonna show them all we care

[Chorus]
Oh my sleeping child the world’s so wild
But you’ve build your own paradise
That’s one reason why I’ll cover you sleeping child

If all the people around the world
They had a mind like yours
We’d have no fighting and no wars
There would be lasting peace on Earth

If all the kings and all the leaders
Could see you here this way
They would hold the Earth in their arms
They would learn to watch you play

[Chorus]

I’m gonna cover my sleeping child
Keep you away from the world so wild

Install SMSlib di Ubuntu / Debian

Ada beberapa software untuk SMS gateway, namun setelah saya banding-bandingkan SMSlib lah yang paling lengkap fiturnya, terutama pada kemampuan menangani SMS lebih dari 160 karakter (multipart). SMSlib dikembangkan berbasis Java, sehingga bisa dijalankan di berbagai sistem operasi. Untuk kali ini saya pakai Ubuntu Server 10.04 LTS. Seharusnya Versi terbaru atau distro Debian sama saja. Untuk Versi Windows, logikanya sama saja. Silahkan cek di http://smslib.org/doc/installation/

Asumsinya Anda sudah punya server yang sudah diinstal Ubuntu dengan konfigurasi Jaringan yang bisa terhubung ke Internet (Untuk ambil file yang diperlukan). Dan Anda dari PC yang sudah terhubung SSH ke server tersebut melalui putty misalnya.

INSTALL JDK

 

Download Sun JDK (Sekarang Oracle) di http://java.sun.com/javase/downloads/widget/jdk6.jsp (Atau versi 7 yang terbaru. Untuk kali ini saya pakai yang versi jdk1.6.0_37). Anda harus daftar sebagai member lalu download melalui browser Firefox atau Chrome. Nah, saat dalam proses download itu stop download, dan klik kanan pada download file lalu copy link, pastekan di sheel dengan cara klik kanan di shell.

$ apt-get install wget
$ cd /usr/src
$ wget  http://download.oracle.com/otn/java/jdk/6u37-b06/jdk-6u37-linux-i586.bin?AuthParam=1357142400_9be1c9645d18d994488cb41ba371b5a8
$mv jdk-6u37-linux-i586.bin?AuthParam=1357142400_9be1c9645d18d994488cb41ba371b5a8 jdk-6u37-linux-i586.bin
$ chmod +x jdk-6u37-linux-i586.bin
$ ./jdk-6u37-linux-i586.bin

Edit file ~/.bashrc dan tambahkan export PATH=”/usr/src/jdk1.6.0_37/bin:$PATH” pada file tersebut.

$ export PATH=”/usr/src/jdk1.6.0_37/bin:$PATH”
$ java -version
java version “1.6.0_37”
Java(TM) SE Runtime Environment (build 1.6.0_37-b06)
Java HotSpot(TM) Client VM (build 20.12-b01, mixed mode, sharing)

INSTALL DATABASE SMSlib dengan MYSQL SERVER

$ apt-get install mysql-server

Anda akan diminta membuat password root untuk MySQL.

$ mysql -p -u root

mysql> create database smslib ;
Query OK, 0 rows affected (0.01 sec)
mysql> grant all on smslib.* to [email protected] identified by ‘smslib’ ;
Query OK, 0 rows affected (0.02 sec)

PREPARE SMServer and DEPENDENCIES

$ cd /usr/src
$ mkdir smslib_sources
$ cd smslib_sources
$ mkdir smslib
$ cd smslib
$ wget http://smslib.googlecode.com/files/smslib-v3.5.2.zip
$ apt-get install unzip
$ unzip smslib-v3.5.2.zip

Install Dependencies

$ apt-get install librxtx-java
$ cp /usr/share/java/RXTXcomm.jar /usr/src/jdk1.6.0_37/jre/lib/ext/
$ cd /usr/src/smslib_sources/
$ wget http://www.trieuvan.com/apache/ant/binaries/apache-ant-1.8.4-bin.tar.gz
$ tar xzvf apache-ant-1.8.4-bin.tar.gz

Edit file ~/.bashrc dan pada bagian ini menjadi export PATH=”/usr/src/jdk1.6.0_37/bin:/usr/src/smslib_source/apache-ant-1.8.4/bin:$PATH” pada file tersebut.

$ export PATH=”/usr/src/jdk1.6.0_37/bin:/usr/src/smslib_source/apache-ant-1.8.4/bin:$PATH”
$ ant -version
Apache Ant(TM) version 1.8.4 compiled on May 22 2012

$ wget http://www.eng.lsu.edu/mirrors/apache/logging/log4j/1.2.17/log4j-1.2.17.tar.gz
$ tar xzvf log4j-1.2.17.tar.gz
$ cp apache-log4j-1.2.17/log4j-1.2.17.jar /usr/src/jdk1.6.0_37/jre/lib/ext/

$ wget http://jsmpp.googlecode.com/files/jsmpp-2.1.0-bin.zip
$ unzip jsmpp-2.1.0-bin.zip
$ cp jsmpp-2.1.0/*.jar /usr/src/jdk1.6.0_37/jre/lib/ext/

$ wget http://mirror.nexcess.net/apache/commons/net/binaries/commons-net-3.2-bin.tar.gz
$ tar xzvf commons-net-3.2-bin.tar.gz
$ cp commons-net-3.2/*.jar /usr/src/jdk1.6.0_37/jre/lib/ext/

$ wget http://cdn.mysql.com/Downloads/Connector-J/mysql-connector-java-5.1.22.tar.gz
$ tar xzvf mysql-connector-java-5.1.22.tar.gz
$ cp mysql-connector-java-5.1.22/mysql-connector-java-5.1.22-bin.jar /usr/src/jdk1.6.0_37/jre/lib/ext/

COMPILE SMSServer

$ cd /usr/src/smslib_source/smslib
$ ant
$ ant clean
$ ant build-smsserver
$ cd dist/classes/
$ cp ../../src/java/org/smslib/smsserver/SMSServer.conf . (Jangan lupa ada spasi dan titik di belakang)

Sesuaikan Konfigurasi yang diinginkan di file SMSServer.conf (Dokumentasi ada di www.smslib.org). Jalankan SMSServer dengan perintah sebagai berikut:

$ java org.smslib.smsserver.SMSServer (Atau sesuaikan dengan opsi yang diinginkan, misalnya limit RAM, dll. Silahkan cek dokumentasi Java)

That’s all.

Download Attachment Email Otomatis dengan M$ Outlook

Integrasi dengan sistem lain paling mudah adalah integrasi di level database atau dengan messaging semacam web service (WSDL). Atau  integrasi di level aplikasi yg bisa jadi ribet jika pembuat dan bahasanya beda. Dalam melakukan integrasi perlu dipertimbangan beberapa hal misalnya jaringan, protokol, dan kebijakan di lingkungan IT. Integrasi dua sistem dengan lingkungan dan kebijakan berbeda bisa sulit, terutama jika (pengelola) masing-masing sistem tidak mau membuka diri. Maka cara yang paling mudah tanpa saling mengganggu adalah melalui Email. Memang terdengan cupu tapi cukup efektif untuk memecah kebuntuan. Dengan email, kita bisa kirim file dalam atachment. Dan itulah yang dipertukarkan.

Sebenarnya untuk mennangani attachment tersebut saya lebih suka menggunakan PHP dan dijalankan di background. Cukup dengan fungsi-fungsi imap_*** semua bisa dilakukan. Tapi dalam situasi tertentu, PHP tidak bekerja. Salah satunya situasi yang saya alami dimana mail servernya menggunakan microsoft exchange dan mengaksesnya harus pakai vpn plus tidak bisa otentifikasi pakai plain login. Bukanya harus pakai outlook yang ada sertifikat khusus.

Setelah muter-muter dengan PHP selama 3 hari dan berujung pada kebuntuan, akhirnya menemukan solusi yang sangat sederhana yaitu MACRO pada Microsoft outlook. Intinya memanfaatkan 2 tool di Ms Outlook yaitu macro dan  “Rules and Alert”. Berikut ini saya share caranya:

  1. Buka Ms Outlook
  2. Buka Macro VB Script melalui Tools -> Macro -> Visual Basic Editor (atau tekan Alt+F11)
  3. Klik Insert -> New Module
  4. Copy dan modifikasi script berikut:

    Sub ambilAttachment(msg As Outlook.MailItem)
    Dim attachmentObject As Outlook.Attachment
    Dim FolderToSave As String
    FolderToSave= “D:\data”
    For Each attachmentObject In msg.Attachments
    attachmentObject.SaveAsFile FolderToSave & “\” & attachmentObject.DisplayName
    Set objAtt = Nothing
    Next
    End Sub

  5.  Save dan tutup Visual Basic Editor
  6. Buka Tool -> Rules and Alert dan buat rule jika ada email masuk dengan attachment maka diproses dengan script ambilAttachment. Banyak juga aturan lain misalnya judul, pengirim dan lain-lain, silahkan disesuaikan dengan kebutuhan.

Semoga membantu.