Sabtu, Juli 14, 2012

Back to blogspot

Sudah cukup lama blog ini tidak saya update. Sekitar 2 tahun lalu saya memiliki blog lain menggunakan engine wordpress dan di hosting di dreamhost, dan sekarang ikut pindah hosting ke webfaction.

Walaupun ada blog yang baru, saya tetap menaruh alamat blog ini di signature email saya. Ada cukup banyak tulisan di blog ini yang bermanfaat baik bagi saya pribadi dan semoga juga untuk pengunjung blog ini.

Mulai hari ini, saya mungkin akan mengupdate lagi blog ini. Sudah ada komputer mini yang selalu terkoneksi ke internet di saku celana saya yang bisa saya gunakan untuk menulis dengan mudah kapanpun saya inginkan. Cerita ttg komputer mini ini mungkin akan saya tuliskan di tulisan lain kalau sempat.

Minggu, Februari 01, 2009

Akses file secara remote, beda antara linux dan windows

Beberapa waktu lalu ada pertanyaan di milis tanya-jawab@linux.or.id menanyakan editor teks yang memiliki kemampuan mengedit file remote secara langsung, baik lewat ftp maupun sftp. Pada tulisan ini saya tidak akan membahas aplikasi editor teksnya karena sudah dibahas di milis. Silahkan baca sendiri di arsip milis tersebut. Saya akan membahas perbedaan Windows dengan Linux tentang kemampuan mengedit file remote.

Sewaktu saya masih menggunakan Windows beberapa tahun yang lalu, saya memiliki kebutuhan yang sama, mengedit file remote secara langsung. Ada beberapa aplikasi teks editor yang memiliki kemampuan ini, dua diantaranya yang free adalah jEdit dan Notepad++.

Ketika akhirnya saya beralih penuh ke Ubuntu, saya mencari editor teks dengan kemampuan tersebut. Saya tidak menemukan fitur yang dimaksud di aplikasi teks editor, tetapi saya menemukan fitur yang jauh lebih hebat. Linux memiliki kemampuan me-mount direktori remote sehingga akses file bisa dilakukan secara transparan, seakan-akan file tersebut berada di lokal file sistem. Fitur ini belum saya temukan di Windows tanpa bantuan aplikasi third-party.

Linux memiliki fitur mount yang secara paradigma, sangat mumpuni. File sistem perlu di-mount ke dalam struktur file dibawah / . Dengan adanya FUSE, berbagai file sistem baru bisa dibuat dengan mudah. saat ini gmail, flick, bahkan amazon s3 sudah ada driver FUSE-nya, sehingga bisa di-mount dan diakses dengan mudah.

Windows sebaliknya masih memiliki arsitektur sistem yang sama semenjak versi awalnya. Windows hanya perduli dengan file dan direktori lokal. Mapping direktori lewat jaringan hanya mendukung protokol SMB dan DAV. Dukungan akses ftp dan sftp menjadi drive letter tidak tersedia di level OS, sehingga perlu disediakan oleh aplikasi.

Saya sangat puas dengan fitur-fitur Ubuntu. Tak ada lagi alasan saya untuk menggunakan Windows, kecuali untuk beberapa hal tertentu, dan ini bisa saya lakukan lewat VirtualBox. Ubuntu telah menjadi platform ideal saya untuk semua hal yang bisa saya lakukan lewat komputer.

Jumat, Januari 23, 2009

Langkah-langkah integrasi phpBB3 ke dalam sistem lain

Pada tulisan ini saya akan berbagi pengalaman mengintegrasikan phpBB3 ke sistem lain. Bagian yang diintegrasikan adalah data user, sehingga perlu dilakukan penanganan login, logout, add user, edit user, edit password, dan delete user. Versi phpBB3 yang saya gunakan adalah versi 3.0.4, dan saya menggunakan bantuan class phpbb_integrator yang bisa didownload http://www.phpclasses.org/browse/package/4826.html
Pada tulisan ini, hanya ada dua group pengguna pada sistem existing, yaitu admin dan user, sehingga dapat dilakukan mapping dengan mudah ke group Registered dan Administrators yang telah ada secara default di phpBB3.

Instalasi

Instalasi phpBB3 dilakukan menggunakan installer default phpBB3. Download dan extract phpBB3 dari sumber resminya di http://www.phpbb.com/downloads/
Sebaiknya letakkan phpBB3 di direktori tersendiri, agar file-file php-nya tidak tercampur dengan file-file php dari sistem existing yang akan diintegrasikan. Saya menggunakan direktori /forum, sehingga akses ke forum dilakukan ke alamat http://<url-sistem>/forum

Setting phpbb_integrator

Extract phpbb_integrator ke salah satu direktori sistem yang ada. File yang dibutuhkan adalah phpbb.class.php
File ini akan di-include sewaktu diperlukan untuk melakukan integrasi sistem dengan phpBB3.

Untuk setiap pemanggilan fungsi integrasi berikut ini, inisialisasi objek dari class phpbb dengan kode:

$phpbb = new phpbb(FORUM_DIR, "php");


FORUM_DIR adalah konstanta yang berisi path lengkap di file sistem mengarah ke direktori tempat forum berada, contohnya:

define (FORUM_DIR, '/var/www/cms/forum');

Sesuaikan dengan kondisi sistem yang ada.

Penggunaan $db

phpbb_integrator menggunakan variabel $db milik phpBB3 untuk melakukan query ke database. Jika sistem existing juga menggunakan variabel yang sama, baik untuk keperluan akses database, maupun untuk keperluan lain, perlu dilakukan antisipasi mencegan variabel sistem ditimpa oleh variabel phpBB3.
Gunakan kode berikut ini:

//simpan variabel asli $db
$db_orig = $db;
//kode integrasi disini
//...
//kembalikan variabel $db
$db = $db_orig;


Kode-kode integrasi menggunakan phpbb_integrator

Login

$phpbb_vars = array("username" => $username, "password" => $password);
$phpbb_result = $phpbb->user_login($phpbb_vars);


Logout

$phpbb_result = $phpbb->user_logout();


Add user

//untuk administrators
$group_id = 2;
//untuk registered user
$group_id = 5;
$phpbb_vars = array("username" => $username, "password" => $password, "user_email" => $email, "group_id" => $group_id);
$phpbb_result = $phpbb->user_add($phpbb_vars);


Edit password

$phpbb_vars = array("username" => $username, "password" => $password);
$phpbb_result = $phpbb->user_change_password($phpbb_vars);


Edit user

$phpbb_vars = array("username" => $username, "user_email" => $email);
$phpbb_result = $phpbb->user_update($phpbb_vars);


Delete user

$phpbb_vars = array("username" => $username);
$phpbb_result = $phpbb->user_delete($phpbb_vars);


Setelah integrasi di sisi sistem existing, sekarang akan dilakukan penutupan registrasi dan login di sisi phpBB3. Hal ini karena user yang register di phpBB3 tidak akan masuk ke sistem, sehingga akan dilakukan pemaksaan register user baru di sistem existing melalui integrasi di atas. Data user memang akan tersimpan di dua tabel, karena itu cukup disimpan data minimum di sisi phpBB3, yaitu hanya username, password, group dan email.

Menghilangkan register new user dari phpBB3
Di halaman Administration Control Panel, tab GENERAL, klik menu 'User registration settings'.
Set 'Account activation' menjadi Disabled

Menghilangkan notifikasi email dari phpBB3
Pengiriman pesan lewat email seharusnya dihandle oleh sistem, sehingga fungsi kirim email di phpBB3 tidak diperlukan.
Di halaman Administration Control Panel, tab GENERAL, klik menu 'E-mail settings'.
Set 'Enable board-wide e-mails' dan 'Users send e-mail via board' menjadi Disabled

Menghilangkan edit profil dari phpBB3
Di halaman Administration Control Panel, tab SYSTEM, klik menu 'User Control Panel'.
Klik 'Profile'
Pindahkan 'Edit avatar' dan 'Edit signature' ke atas, sehingga menjadi urutan pertama dan kedua.
Set 'Edit account settings' dan 'Edit profile' menjadi disable dengan mengklik tulisan 'Disable'.
Option yang telah di-disable ditandai dengan icon gembok dan tulisan di kanan menjadi 'Enable'

Menghilangkan form login dari phpBB3
Halaman login akan dihilangkan dengan mengedit template. Sebelum melakukan pengeditan, lakukan setting berikut ini terlebih dahulu, agar kode php di template bisa dijalankan oleh phpBB3:
Di halaman Administration Control Panel, tab GENERAL, klik menu 'Security settings'.
Set 'Allow php in templates' menjadi 'Yes'

Edit template:
Di halaman Administration Control Panel, tab STYLES, klik menu 'Templates'.
Klik link edit di template yang sedang digunakan.
Edit 3 file berikut ini:

index_body.html
cari baris ini (di sekitar pertengahan file)

<!-- IF not S_USER_LOGGED_IN and not S_IS_BOT -->

Ubah menjadi

<!-- IF not S_USER_LOGGED_IN and S_USER_LOGGED_IN and not S_IS_BOT -->

untuk menghilangkan tampilan login form di halaman forum.

login_body.html
Tambahkan baris berikut di bagian atas file, sehingga template menjadi:

<!-- IF not S_ADMIN_AUTH -->
<!-- PHP -->
header( 'Location: /' ) ;
<!-- ENDPHP -->
<!-- ENDIF -->
<!-- INCLUDE overall_header.html -->
...


Kode ini akan me-redirect halaman login ke halaman system. Jika sistem berada di sub direktori, atau memiliki halaman login, sesuaikan parameter 'Location' untuk mengarah ke halaman sistem yang diinginkan.

overall_header.php
Cari baris:

<li class="icon-logout"><a href="{U_LOGIN_LOGOUT}" title="{L_LOGIN_LOGOUT}" accesskey="l">{L_LOGIN_LOGOUT}</a></li>

Ubah menjadi:

<li class="icon-logout">{L_LOGIN_LOGOUT}</li>

Saya mempertahankan label L_LOGIN_LOGOUT agar user tahu bahwa dia sedang login di forum. Untuk keperluan ini saya mengedit file berikut ini:

/forum/language/en/common.php
Cari baris:

'LOGIN' => 'Login',

Ubah menjadi:

'LOGIN' => '&nbsp;',
'LOGIN_BTN' => 'Login',


Cari baris:

'LOGOUT_USER' => 'Logout [ %s ]',

Ubah menjadi:

'LOGOUT_USER' => '[ %s ]',


Selanjutnya edit kembali template login_body.html:
Cari baris:

<dd>{S_HIDDEN_FIELDS}<input name="login" tabindex="6" value="{L_LOGIN}" class="button1" type="submit"></dd>

Ubah menjadi:

<dd>{S_HIDDEN_FIELDS}<input name="login" tabindex="6" value="{L_LOGIN_BTN}" class="button1" type="submit"></dd>


Sekarang login di phpBB3 sudah tidak bisa dilakukan, harus melalui login di sistem yang telah dipasang phpbb_integrator.

Semoga tulisan singkat ini bisa membantu.

Sabtu, Januari 10, 2009

Setting Squid di Intrepid Ibex Ubuntu untuk YM dan GTalk pakai GAIM

Beberapa hari ini saya baru menginstall squid di laptop saya. Tujuannya selain ingin belajar cara setting squid, juga untuk mengetahui detail koneksi internet saya. Dari beberapa panduan di internet, dan juga komentar pada file /etc/squid/squid.conf, saya berhasil menjalankan squid dan hasilnya cukup memuaskan. Koneksi saya rasakan menjadi lumayan stabil ketimbang koneksi langsung tanpa squid.

Satu hal yang baru saya sadari kemaren, adalah YM dan GTalk pakai GAIM ga bisa connect. Semula saya kira masalah koneksi Isat Eco yang memang kadang lambat. Setelah melihat log squid di /var/log/squid/access.log, saya mendapati baris log berikut ini:


1231494883.082 0 127.0.0.1 TCP_DENIED/403 1422 CONNECT scs.msg.yahoo.com:5050 - NONE/- text/html
1231494883.962 0 127.0.0.1 TCP_DENIED/403 1418 CONNECT talk.google.com:5222 - NONE/- text/html


Dari baris diatas terlihat bahwa koneksi ke port 5050 Yahoo dan port 5222 GTalk di-deny oleh squid. Berikut ini isi konfigurasi squid di /etc/squid/squid.conf terkait port:

#Recommended minimum configuration:
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 # https
acl SSL_ports port 563 # snews
acl SSL_ports port 873 # rsync
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 22 # ssh
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl Safe_ports port 995 # SSL
acl Safe_ports port 587 # TLS
acl purge method PURGE
acl CONNECT method CONNECT


Di konfigurasi, port 1025 s/d 65535 sudah ada di acl Safe_ports, tetapi koneksi ke port 5050 dan 5222 masih di-deny oleh squid. Saya coba juga tanya ke oom Google, tapi hanya menemukan pertanyaan yang sama tanpa ada solusi yang menjelaskan sebab di-deny-nya koneksi. Akhirnya saya coba solusi yang terlintas di pikiran.

Pada konfigurasi ada dua acl untuk port. Sayapun mencoba menambahkan port YM dan GTalk ke acl SSL_ports, sehingga konfigurasi sekarang menjadi:

...
acl SSL_ports port 443 # https
acl SSL_ports port 563 # snews
acl SSL_ports port 873 # rsync
acl SSL_ports port 5050 # YM
acl SSL_ports port 5222 # GTalk
...


Setelah squid di-restart, sekarang saya sudah bisa terhubung lagi ke YM dan GTalk pakai GAIM. Di log sekarang ada baris:

1231514336.530 883324 127.0.0.1 TCP_MISS/200 24334 CONNECT scs.msg.yahoo.com:5050 - DIRECT/66.163.181.184 -
1231514828.691 11193 127.0.0.1 TCP_MISS/200 81031 GET http://address.yahoo.com/yab/us?v=XM&prog=ymsgr&.intl=us&diffs=1&t=0&tags=short&rt=0&prog-ver=8.1.0.249&useutf8=1&legenc=codepage-1252 - DIRECT/209.191.93.51 text/xml
...
1231515222.670 247205 127.0.0.1 TCP_MISS/200 40954 CONNECT talk.google.com:5222 - DIRECT/72.14.235.125 -


Saya masih penasaran, kenapa sampai perlu dua acl untuk port. Ternyata saya menemukan jawabannya di file konfigurasi squid, di baris berikut ini

#Recommended minimum configuration:
#
# Only allow cachemgr access from localhost
http_access allow manager localhost
http_access deny manager
# Only allow purge requests from localhost
http_access allow purge localhost
http_access deny purge
# Deny requests to unknown ports
http_access deny !Safe_ports
# Deny CONNECT to other than SSL ports
http_access deny CONNECT !SSL_ports


Ternyata acl SSL_ports digunakan untuk membolehkan akses `CONNECT` yang memang dilakukan oleh GAIM untuk YM dan GTalk. Konfigurasi default squid akan melakukan deny terhadap semua koneksi ke port selain yang ada pada acl SSL_ports. Ini sebabnya kenapa YM dan GTalk tidak bisa terhubung, jika portnya tidak ditambahkan ke acl SSL_ports.

Semoga tulisan singkat ini dapat membantu rekan-rekan yang mengalami masalah serupa.

Rabu, Desember 31, 2008

Belajar Ruby

Berawal dari sebuah kebutuhan untuk mengetahui kapan DHCP Client memperbaharui IP Address, saya akhirnya malah belajar Ruby dan jadilah script sederhana berikut ini. FYI, saya menggunakan GNU/Linux Ubuntu Intrepid Ibex. Saya butuh informasi waktu perbaharuan IP berikutnya dari DHCP Client. Dari file /var/log/daemon.log saya bisa mendapatkan informasi berikut ini


$ grep renewal /var/log/daemon.log
Dec 29 10:32:41 hantulab dhclient: bound to 192.168.1.31 -- renewal in 14563182 seconds.
Dec 29 10:39:10 hantulab dhclient: bound to 192.168.1.31 -- renewal in 14168572 seconds.
Dec 29 12:18:45 hantulab dhclient: bound to 192.168.1.31 -- renewal in 13948234 seconds.
Dec 30 08:08:48 hantulab dhclient: bound to 10.2.13.34 -- renewal in 1496 seconds.
Dec 30 08:33:44 hantulab dhclient: bound to 10.2.13.34 -- renewal in 21496 seconds.
Dec 30 14:32:00 hantulab dhclient: bound to 10.2.13.34 -- renewal in 18630 seconds.
Dec 31 08:53:45 hantulab dhclient: bound to 10.2.13.34 -- renewal in 1446 seconds.


Ide awalnya adalah mengubah angka detik menjadi format jam. Dari tiga bahasa scripting yang terinstall di laptop saya, Perl, Python, dan Ruby, saya memutuskan untuk coba menggunakan Ruby sambil belajar. Dengan bekal panduan dari http://pine.fm/LearnToProgram/, sayapun membuat script sederhana berikut ini:

#!/usr/bin/env ruby

hour = ARGV[0].to_i / 3600
reminder = ARGV[0].to_i % 3600
minute = reminder / 60
second = reminder % 60

puts ARGV[0] + ' = ' + hour.to_s + ':' + minute.to_s + ':' + second.to_s


Lalu saya coba jalankan

$ ruby sectomin.rb 1446
1446 = 0:24:6


Hmm, lumayan. Script simple pertamaku pake Ruby. Selanjutnya aku juga perlu penjumlahan jam nih. Cari-cari nama fungsi dengan fungsionalitas sama dengan explode di PHP, nemu method split. Sekalian aku edit scriptnya dengan membuat fungsi.

#!/usr/bin/env ruby

def sectohour sec
hour = sec / 3600
reminder = sec % 3600
minute = reminder / 60
second = reminder % 60

hour.to_s + ':' + minute.to_s + ':' + second.to_s
end

def houradd hour1 hour2
arr_hour1 = hour1.split(':')
arr_hour2 = hour2.split(':')
result = (arr_hour1[0].to_i + arr_hour2[0].to_i) * 3600
+ (arr_hour1[1].to_i + arr_hour2[1].to_i) * 60
+ (arr_hour1[2].to_i + arr_hour2[2].to_i)
sectohour result
end

hour = sectohour ARGV[0].to_i

puts ARGV[0] + ' = ' + hour
puts ARGV[1] + ' + ' + ARGV[0] + ' = ' + houradd ARGV[1] hour


Coba dijalankan:

$ ruby sectomin.rb 1446 08:53:45
sectomin.rb:12: syntax error, unexpected tIDENTIFIER, expecting '\n' or ';'
sectomin.rb:19: syntax error, unexpected kEND, expecting $end


Wah...wah... koq error yah. Sebelum buka manual, coba-coba lagi, kali ini nambah koma sebagai pemisah argumen, ternyata berhasil. Untuk statemen multi baris juga mesti pake backslash, karena ga ada akhir baris pake ' seperti php. Untuk manggil fungsi dua argumen mesti pake tanda kurung. Inilah hasil script yang jalan, plus penyempurnaan sectohour.

#!/usr/bin/env ruby

def sectohour sec
hour = sec / 3600
reminder = sec % 3600
minute = reminder / 60
second = reminder % 60

hour.to_s \
+ ':' + (minute.to_s.length < 2 ? '0' : '') + minute.to_s \
+ ':' + (second.to_s.length < 2 ? '0' : '') + second.to_s
end

def houradd hour1,hour2
arr_hour1 = hour1.split(':')
arr_hour2 = hour2.split(':')
result = (arr_hour1[0].to_i + arr_hour2[0].to_i) * 3600 \
+ (arr_hour1[1].to_i + arr_hour2[1].to_i) * 60 \
+ (arr_hour1[2].to_i + arr_hour2[2].to_i)
sectohour result
end

hour = sectohour ARGV[0].to_i

puts ARGV[0] + ' = ' + hour
puts ARGV[1] + ' + ' + ARGV[0] + ' = ' + (houradd ARGV[1],hour)


Hasil running:

$ ruby sectomin.rb 1446 08:53:45
1446 = 0:24:6
08:53:45 + 1446 = 9:17:51


Setelah ini selesai, selanjutnya perlu otomatisasi dari pembacaan log sampai didapatkan hasil penjumlahannya. Dengan kombinasi grep dan tail, saya bisa dapat info ini:

$ grep renewal /var/log/daemon.log | tail -n 1
Dec 31 08:53:45 hantulab dhclient: bound to 10.2.13.34 -- renewal in 1446 seconds.


Selanjutnya dengan bantuan gawk yang powerfull, saya bisa membentuk string ini

$ grep renewal /var/log/daemon.log \
| tail -n 1 \
| gawk '{print "ruby sectomin.rb " $12 " " $3;}'
ruby sectomin.rb 1446 08:53:45


Lalu saya tambahkan backtick (`) sehingga saya bisa mendapatkan:

$ grep renewal /var/log/daemon.log \
| tail -n 1 \
| `gawk '{print "ruby sectomin.rb " $12 " " $3;}'`
1446 = 0:24:6
08:53:45 + 1446 = 9:17:51


Jreng...jreng... selesailah script sederhana Ruby pertama saya, plus parsing log. Semoga tulisan singkat saya ini bermanfaat. Ruby ternyata asik juga, cuman kadang saya terbawa kebiasaan di php. Belajar bahasa baru memang harus merubah paradigma dan pola pikir. Nantikan tulisan saya selanjutnya di blog ini.

Jumat, Desember 05, 2008

OSS Week di ITB

Saya membaca info rilis OpenSolaris 2008.11 dari blognya mas Alex Budiyanto. Di akhir tulisan blognya, ada link mengenai OSS Week yang diadakan di ITB. Karena itu, siang ini saya sempatkan berkunjung ke bekas kampus saya itu, setelah sholat Jumat.

Saya datang dari arah Borromeus menuju jalan Ganeshe. Karena jalan Ganesha sehabis sholat Jumat pasti macet, saya putuskan untuk memarkir motor di parkir Timur. Setelah itu, saya berjalan kaki menuju aula barat dan mendapati aula barat penuh kursi, panggung, dan peralatan band. Install Fest kok gini yah, curiga ini bukan acara Install Fest, akhirnya saya coba mencari outlet POSS ITB yang katanya ada di jalan Ganesha No 15A.

Karena tidak tahu letaknya, saya sempat tanya di Pusat Inkubasi ITB yang di depannya ada tulisan alamat Ganesha. Saya diberitahu bahwa POSS ITB ada di sebelah. Saya pun jadi sempat nyasar masuk Plasa Telkom, dan diberitahu bahwa POSS ada di belakang Plasa Telkom ini.

Saya masuk ke ruangan POSS ITB dan langsung nodong CD OpenSolaris dan NetBeans. Sebenarnya saya ingin berkenalan lebih lanjut dengan rekan-rekan di POSS, tapi berhubung saya sudah capek jalan-jalan di kampus nyari-nyari letak POSS, dan juga harus segera kembali ke kantor karena jam istirahat akan segera berakhir, saya pun tidak sempat berkenalan dan memperkenalkan diri.

Untuk rekan-rekan di POSS ITB, terima kasih atas CD OpenSolaris dan NetBeans-nya. Mungkin lain kali kita bisa berkenalan dan saling berbagi pengalaman. Semoga berhasil memperkenalkan Open Source di bekas kampus saya ini :)

Rabu, November 19, 2008

Panduan Instalasi modul OCI8 pada PHP5 Ubuntu

Pada tulisan ini saya akan mencoba menerangkan langkah-langkah menginstall modul OCI8 untuk PHP5 sehingga PHP bisa melakukan koneksi ke database Oracle. Pada tulisan saya terdahulu, saya melakukan kompilasi ulang PHP-nya. Cara ini kurang menguntungkan, karena dengan keluarnya versi baru PHP, kita perlu melakukan kompilasi ulang. Dengan menggunakan modul, kita tetap dapat mengupdate PHP dengan versi terbaru, tanpa perlu repot kompilasi ulang setiap saat.

Operating System yang digunakan adalah Ubuntu 8.04 Hardy Heron, tetapi langkah2 ini juga sama untuk versi sebelum maupun sesudahnya. Paling-paling hanya berbeda versi PHP dan OCI8-nya saja.

Persiapan

Berikut ini adalah paket aplikasi dan library yang harus dipersiapkan.

Paket kompilasi

Paket-paket berikut ini dibutuhkan agar kita bisa melakukan kompilasi modul OCI8. Install dengan menggunakan perintah :

sudo apt-get install
checkinstall build-essential gcc re2c

Paket development PHP5

Paket-paket berikut ini adalah paket development PHP5 yang dibutuhkan untuk mengkompile modul-modul PHP5

apt-get install php-pear php5-dev

Oracle Client

Agar kita bisa melakukan koneksi ke database Oracle, dibutuhkan library Oracle Client. Untuk modul OCI8 kita cukup menggunakan instantclient. Download melalui alamat http://www.oracle.com/technology/software/tech/oci/instantclient/index.html

Setelah download selesai, lakukan langkah berikut ini sebagai root:

mkdir -p /opt/oracle/instantclient
cd /opt/oracle/instantclient
unzip instantclient-basic-linux32-<version>.zip
unzip instantclient-sdk-linux32-<version>.zip
echo "/opt/oracle/instantclient"
>> /etc/ld.so.conf.d/oracle.conf
ldconfig
ln -s libclntsh.so.10.1 libclntsh.so
ln -s libocci.so.10.1 libocci.so

Kompilasi dan Instalasi modul OCI8

Setelah paket-paket aplikasi yang kita butuhkan tersedia, sekarang kita akan melakukan kompilasi modul OCI8. Berikut ini langkah-langkah yang akan kita lakukan.

Download modul OCI8

Kita akan mendownload source code modul OCI8. Untuk melakukannya, lakukan perintah berikut ini sebagai root.

mkdir -p /usr/local/src
cd /usr/local/src
pecl download oci8

Ekstrak dan konfigurasi modul

Setelah langkah diatas selesai dilakukan, kita akan mendapatkan file oci8-1.3.3.tgz (versi terbaru mungkin telah tersedia, sehingga sesuaikan nama filenya dengan nama file yang didapat dari langkah diatas). Selanjutnya kita akan mengekstrak file ini dan mengkonfigurasi modul oci8

tar xzf oci8-1.3.3.tgz
cd oci8-1.3.3
phpize5
./configure
--with-oci8=shared,instantclient,/opt/oracle/instantclient

Kompilasi dan Instalasi

Setelah kita mengkonfigurasinya sesuai dengan library instantclient yang ada, sekarang waktunya kita melakukan kompilasi. Jalankan perintah berikut ini;

make
make install

Selesai? Belum juga :) Modul OCI8 sekarang sudah berada di direktori modul PHP5, tetapi PHP5 belum ditambahkan setting agar meload modul tersebut. Kita akan menambahkan setting ini dengan perintah

echo "extension=oci8.so" >
/etc/php5/conf.d/oci8.ini

Selanjutnya silahkan restart server apache httpd, lalu cek dengan phpinfo. Saat ini modul OCI8 seharusnya telah dikenali oleh PHP5 dan muncul di halaman phpinfo. PHP5 siap melakukan koneksi ke database Oracle.

Selamat mencoba.

Sumber tulisan:

http://ubuntuforums.org/showthread.php?t=92528