Learn the Rules, Break The Rules, and Create the New Ones...

Hi... My name is Rizky Prihanto. You can call me RQ, or Rizky either. I am currently living on Bandung, Indonesia. Had a lot of works and research about Enterprise Information Systems (majoring on education and e-governments). I have bunch of interests (some friends call it 'freakz') about MySQL Opensource Database and now I am one of the administrator of MySQL Indonesia User Group - the opensource community initialized by Sun Microsystems Indonesia.

My Company PT Cinox Media Insani, Bandung, Indonesia. I work here since 2008 and I take responsibility as Chief of Software Architect. My job is about planning, imaginating, fantasy-ing, concepting, and build the infrastructure of the new information systems (or app engines) which going to be implemented.

This blog This is my blog that represent my current opinion, research and experiences about anything in Software Engineering. Written since 2007 (actually) and has been vaccum for a lot of while. And now I wanna ressurrect this blog (optimistically) from the long-long-hibernation with something fresh and new ideas -- still about MySQL, software engineering, development, and may be something managerial here.

About the tagline I've learned the statement above from some paper written by Kent Beck about Extreme Programming (XP) methodology -- some sort of practical software development methods which have no boundaries. That's very inspiring me a lot. I have written some article on this blog that tell my interpretation about that statement here.

My Another Blogs I have classifying my blogs into some sort of genre. The blog that you read here right now is my primary blog that tell you (majoring) about IT stuff. But if you wanna look another side of me, you can visit here, here, here,or here. Hope it'll be interesting for some of you.

Credits I would thanks to Blogger for this great blog platform. Skinpress who designed this Wordpress template (which is bloggerized by Free Blogger Templates). My appreciate is also going to you who give your generously time for visiting my blog.

Mendistribusikan MyODBC dalam Installer Aplikasi

Ada yang nanya di milis mysql-indonesia@googlegroups.com tentang bagaimana caranya nginstall MyODBC secara otomatis dalam mendistribusikan aplikasi kita. Kadang, ketika kita memaketkan produk software kita (platform desktop, windows) -- kita ngga bisa menjamin apakah di komputer client sudah terinstall MyODBC yang diperlukan supaya aplikasi kita bisa connect ke database MySQL (tentunya bagi yang mempergunakan ODBC sebagai bridge koneksi. Kalo yang makae native API seperti vbmysqldirect, MyDAC, dbExpress, atau MySQL Connector yang lain -- ya ngga perlu MyODBC).
Gw jadi ingat jaman-jaman kelam dulu, pas masih develop pakae VB6, ribet bangedd rasanya 'menginstallkan' pre-requisites aplikasi kita ke client macam OCX, DLL, flash player plugins, dan tentu saja.. MyODBC. Tapi sejak gw mulai bosan ama keribetan itu -- gw akhirnya riset mengenai teknik-teknik membuat instalasi yang membuat gw sempet terjerembab 'sedikit alih profesi' jadi Deployment Engineer di tim gw dulu. Tentu saja gw musti memastikan bahwa aplikasi gw ketika di-distribusikan ngga bakal gagal di-execute selain di kompie gw sendiri, termasuk diantaranya menjalin koneksi dengan MySQL melalui MyODBC.
Di artikel kali ini gw mencoba mengupas mengenai teknik-teknik 'memaksakan' client menginstall secara otomatis MyODBC supaya program kita bisa running well.



caranya (gw asumsikan kita akan redistribute-kan MyODBC 5.1) :

1. di installer loe, u copy-kan file2 berikut ke %SYSDIR% (terserah sih mo dimana sebenarnya):
    a) libmysql.dll
    b) myodbc5.dll
    c) myodbc5.lib
    d) myodbc5S.dll
    e) myodbc5S.lib

2. Lakukan install driver manual dengan nge-add registry berikut ini :
  classkey = HKEY_LOCAL_MACHINE
  sectionkey = "SOFTWARE\ODBC\ODBCINST.INI\MySQL ODBC 5.1 Driver"
    trus bikin beberapa key yaitu :
  a) nama key = "Driver"
     tipe = REG_SZ
     value = "C:\WINDOWS\System32\myodbc5.dll" --> sesuaikan ini dgn tempat di mana u nge-extract (step 1)
  b) nama key = "Setup"
     tipe = REG_SZ
     value = "C:\WINDOWS\System32\myodbc5S.dll"
  c) nama key = "UsageCount"
     tipe = REG_DWORD
     value = 1

3. Langkah terakhir, lakukan register driver ke ODBC driver, juga dgn maen-maen registry berikut :
    classkey = HKEY_LOCAL_MACHINE
    sectionkey = "SOFTWARE\ODBC\ODBCINST.INI\ODBC Driver"
    bikin key :
    nama = "MySQL ODBC 5.1 Driver"
    tipe = REG_SZ
    value = "installed"

udah. itu cara bikin installer sendiri utk MyODBC 5.1
kalo utk versi MyODBC 3.51, silakan sesuaikan sendiri (tapi buat apa makae 3.51 hare gene?)

bisa loe adopsi di :

  1. jalankan ntu script di setiap app.initialization (tentu cek dulu, execute cuman kalo if not exists)
  2. atau embedd ke dalam script installer loe (semua installer pastinya bisa nge-manipulate registry kan?)
  3. atau bikin program exe sendiri yang akan menjalankan "silent-install" ntu proses, trus masukin ke script installer loe n loe program supaya ntar installer akan jalanin otomatis ntu myodbc-silent-installer setelah proses nginstall aplikasi loe selesai.
mau cara gampang?
Bikin installer-nya pakae NSIS (Nullsoft Scriptable Install System). Berhubung output installer dia bukan berbasis *.msi, loe bisa lakukan proses instalasi paralel (installer dalam installer) dengan file-file setup laen (pre-requisites software) yg mungkin elo butuhkan dalam redistribute aplikasi loe (misal : driver, connector, plugins, codec, bahkan automatic-install server mysql sendiri!).

Cara :
1. siapkan installer MySQL ODBC 5.1 terbaru (anggap namanya : mysql-connector-odbc-5.1.5-win32.msi)
2. sisipkan di script NSIS loe begini :
  SetOutPath "$TEMP"
  SetOverwrite On
  File "..\resources\mysql-connector-odbc-5.1.5-win32.msi"
  ExecWait 'msiexec /i "$TEMP\mysql-connector-odbc-5.1.5-win32.msi"' $0
3. compile script installer loe untuk menghasilkan 1 file installer (aplikasi loe + prerequisites-nya)

Penjelasan Script NSIS:
baris pertama, itu akan melakukan change-dir ke direktori tujuan ekstrak sebuah file (dalam hal ini TEMP DIR)
baris kedua, itu akan melakukan flagging kalo file yg akan di-ekstrak udah ada, dia akan di-overwrite
baris ketiga, itu meng-copy-kan dari installer berupa file setup mysql-connector-odbc-5.1.5-win32.msi ke TEMP DIR. parameter dari File itu adalah alamat dari paket instalan mysql-connector-odbc-5.1.5-win32.msi ketika installer sedang dibentuk
baris keempat, itu akan melakukan eksekusi file installer mysql-connector-odbc-5.1.5-win32.msi -- efeknya, ntar user pas nginstall aplikasi loe, dia akan "dipaksa" masuk ke installer MyODBC. ExecWait adalah sebuah mekanisme shell-execute yang akan menunggu proses sampai proses instalasi MyODBC selesai dijalanin user, baru kemudian lanjut ke proses install sisanya.

kelebihan dari cara gampang ini?
  • loe gag perlu pusing2 ria maen2 registry (seperti cara "manual" gw di atas -- walo ada kelebihannya juga cara manual ini : loe jadi ngerti struktur registrasi ODBC Driver di sistem operasi loe. Jadi klo mo pakae connector apapun utk connect ke DBMS apapun: mudah!)
  • loe bisa replace source install-an mysql odbc versi berapapun dgn mudah
  • file installer yang kelak akan di-distribusikan ke user cuman 1 doank. udah all in one.
Kira-kira begitu...
Happy exploring...
_______________________


Rizky Prihanto
Software Architect PT Cinox Media Insani

3 comments:

Anonim mengatakan...

thanks tip nya bro........

Anonim mengatakan...

mantap ... dah lama nyari artikel kayak gini, thanks berat

®@mÐäÑ mengatakan...

Mantaaapp... thx for sharing sob.. :))

Posting Komentar