1 TUTORIAL CLAMAV Menggunakan Antivirus ClamAV ClamAV merupakan salah satu antivirus UNIX/Linux yang sangat terkenal. Walaupun Linux kerap kali dikata...
lamAV merupakan salah satu antivirus UNIX/Linux yang sangat terkenal. Walaupun Linux kerap kali dikatakan sebagai sistem yang relatif aman, ada baiknya kalau kita selalu berjaga-jaga. Di dalam artikel ini, kita akan melihat bagaimana menggunakan ClamAV untuk menjaga sistem kita.
Dibandingkan dengan Windows, Linux saat ini relatif lebih aman dari gangguan virus. Namun, tidak ada yang bisa memastikan situasi ini akan sama terus beberapa saat ke depan. Suatu hari, bisa saja akan ada virus mematikan yang juga menyerang Linux. Untungnya, jauh sebelum ini terjadi, sebuah antivirus dengan nama ClamAV telah lahir dan saat ini, telah menjadi salah satu antivirus yang diperhitungkan. Model aplikasi yang cukup modular, arsitektur aplikasi yang bagus, serta dokumentasi yang cukup lengkap, menjadikan ClamAV telah dikembangkan untuk berbagai kebutuhan. ClamAV sendiri bahkan menyediakan daemon yang dapat dimanfaatkan untuk proteksi sistem secara menyeluruh. Selain itu, banyak servis seperti e-mail dan lainnya yang memanfaatkan clamav untuk memberikan proteksi kepada user. Di “Tutorial” kali ini, apa yang akan kita bahas hanyalah bagaimana menggunakan ClamAV untuk memeriksa file-file dari kemungkinan terinfeksi virus. Kita tidak akan menjalankan ClamAV daemon ataupun mengintegrasikannya dengan berbagai servis jaringan. Sebelum melanjutkan, kita akan membahas sekilas berbagai fitur yang dimiliki oleh ClamAV: Lisensi di bawah GPL versi 2. POSIX compliant dan portable. Waktu scan yang cepat. Mendukung On Access Scanning di
52
07/2006 INFOLINUX
Linux dan FreeBSD. Mendeteksi lebih dari 50000 virus, worm, trojan dan virus macro. Mampu scan ke dalam berbagai arsip seperti Zip, RAR, Tar, Gzip, Bzip2, OLE2, Cab, CHM dan SZDD. Mampu mendukung executable yang dikompres dengan UPX, FSG, Petite. Mail scanner yang powerful. Mendukung virus database update. ClamAV saat ini telah dimasukkan ke dalam hampir semua distribusi Linux populer. Tulisan ini akan menggunakan Debian GNU/Linux Sarge. Bagi Anda yang ingin men-download versi terbaru dari antivirus ini, akseslah ke website-nya, http://www. clamav.net. Di website tersebut, paket untuk berbagai distribusi Linux juga telah disertakan.
Instalasi ClamAV Di Debian GNU/Linux, installah beberapa paket berikut: clamav, paket clamav antivirus. clamav-base, base package. clamav-freshclam, virus database updater. clamav-testfiles, file test untuk menguji clamav. clamav-docs, dokumentasi. Berikanlah perintah berikut untuk melakukan instalasi ClamAV (keluaran perintah instalasi akan ditampilkan, dan
penjelasan akan diberikan): # apt-get install clamav clamav-base clamav-freshclam clamav-testfiles clamav-docs Reading Package Lists... Done Building Dependency Tree... Done Suggested packages: unrar lha The following NEW packages will be installed: clamav clamav-base clamav-docs clamav-freshclam clamav-testfiles 0 upgraded, 5 newly installed, 0 to remove and 0 not upgraded. Need to get 0B/3205kB of archives. After unpacking 4809kB of additional disk space will be used. Preconfiguring packages ... Selecting previously deselected package clamav-base. (Reading database ... 73616 files and directories currently installed.) Unpacking clamav-base (from .../ clamav-base_0.84-2.sarge.5_all. deb) ... Selecting previously deselected package clamav-freshclam. Unpacking clamav-freshclam (from .../clamav-freshclam_0.842.sarge.5_i386.deb) ... Selecting previously deselected package clamav. Unpacking clamav (from .../clamav_
www.infolinux.web.id
TUTORIAL CLAMAV 0.84-2.sarge.5_i386.deb) ... Selecting previously deselected package clamav-docs. Unpacking clamav-docs (from .../ clamav-docs_0.84-2.sarge.5_all. deb) ... Selecting previously deselected package clamav-testfiles. Unpacking clamav-testfiles (from .../clamav-testfiles_0.842.sarge.5_all.deb) ... Setting up clamav-base (0.842.sarge.5) ... Adding system user `clamav’... Adding new group `clamav’ (107). Adding new user `clamav’ (107) with group `clamav’. Not creating home directory.
Pada saat instalasi ClamAV, user dan group ClamAV akan dibuat secara otomatis. Setting up clamav-freshclam (0.842.sarge.5) ...
Pada saat pengaturan paket clamavfreshclam, beberapa pertanyaan berikut akan ditanyakan: Virus database update method. Pilihlah metode update yang diinginkan. Penulis memilih manual. Local database mirror site. Pilihlah db.id. clamav.net Should clamd be notified after updates? Saat ini, kita tidak menginstal daemon. Namun, menjawab Yes tidak akan menimbulkan masalah. Penulis memilih Yes.
Setelah itu, karena versi yang disertakan dalam Debian GNU/Linux Sarge lebih kuno dibandingkan dengan rilis saat ini, maka akan ada pesan yang ditampilkan. Virus database main.cvd kemudian akan di-download ke server yang telah ditentukan. Tunggulah beberapa saat. Virus database main.cvd yang penulis download pada tanggal 22 April 2005 berukuran sekitar 3.8 M. WARNING: Your ClamAV installation is OUTDATED! WARNING: Current functionality level = 4, recommended = 7 DON’T PANIC! Read http://www. clamav.net/faq.html Downloading daily.cvd [*] daily.cvd updated (version: 1414, sigs: 974, f-level: 7, builder: arnaud)
Setelah update virus database selesai, pesan Database updated (52180 signatures) ... menunjukkan bahwa ClamAV mengenali 52180 virus dan teman-temannya. ERROR: Clamd was NOT notified: Can’t connect to clamd through /var/run/clamav/clamd.ctl connect(): No such file or directory
Pesan bahwa clamd tidak dapat dinotifikasi ini bisa diabaikan karena clamd tidak terinstal.
Virus database daily.cvd kemudian akan di-download ke server yang telah ditentukan. Tunggulah beberapa saat. Virus database daily.cvd yang penulis download pada tanggal 22 April 2005 berukuran sekitar 135 K.
Setting up ... Setting up 2.sarge.5) Setting up 2.sarge.5)
WARNING: Your ClamAV installation is OUTDATED! WARNING: Current functionality
Sampai di sini, kita telah berhasil menginstal ClamAV. Sebuah program, yaitu clam-
Starting database update It takes freshclam ~3min to timeout and try the next mirror in the list ClamAV update process started at Sat Apr 22 16:36:47 2006 WARNING: Your ClamAV installation is OUTDATED! WARNING: Local version: 0.84 Recommended version: 0.88.1 DON’T PANIC! Read http://www. clamav.net/faq.html Downloading main.cvd [*] main.cvd updated (version: 38, sigs: 51206, f-level: 7, builder: tkojm)
www.infolinux.web.id
INFOLINUX 07/2006
53
TUTORIAL CLAMAV scan bisa dipergunakan untuk memeriksa file dari virus. Cara menggunakan program ini adalah: clamscan [options] [file/ directory/-]
Memeriksa test files Untuk menguji apakah ClamAV telah bekerja, kita dapat memeriksa file test yang telah diinstall sebelumnya. Di sistem Debian, file test diinstall pada /usr/share/clamav-testfiles/. Kita akan melakukan pemeriksaan dengan perintah berikut: $ clamscan /usr/share/clamavtestfiles/ LibClamAV Warning: *************** ********************************* ******** LibClamAV Warning: *** This version of the ClamAV engine is outdated. *** LibClamAV Warning: *** DON’T PANIC! Read http://www.clamav. net/faq.html *** LibClamAV Warning: *************** ********************************* ******** LibClamAV Warning: *************** ********************************* ******** LibClamAV Warning: *** This version of the ClamAV engine is outdated. *** LibClamAV Warning: *** DON’T PANIC! Read http://www.clamav. net/faq.html *** LibClamAV Warning: *************** ********************************* ******** /usr/share/clamav-testfiles/clamerror.rar: RAR module failure /usr/share/clamav-testfiles/clamerror.rar: OK /usr/share/clamav-testfiles/ debugm.c: OK /usr/share/clamav-testfiles/clam. cab: ClamAV-Test-File FOUND /usr/share/clamav-testfiles/clam. exe: ClamAV-Test-File FOUND /usr/share/clamav-testfiles/clam. rar: ClamAV-Test-File FOUND /usr/share/clamav-testfiles/clam. zip: ClamAV-Test-File FOUND /usr/share/clamav-testfiles/clam. exe.bz2: ClamAV-Test-File FOUND
Sebagai penjelasan: Warning yang muncul pada keluaran clamscan tersebut disebabkan karena engine ClamAV yang telah ketinggalan. Apabila Anda berada pada sistem production, maka update sangat disarankan. Apabila virus tidak ditemukan, maka pada akhir file yang discan, tulisan OK akan ditampilkan. Apabila virus ditemukan, maka pada akhir file yang discan, tulisan FOUND akan ditampilkan. Nama virus dan teman-temannya akan ditampilkan sebelum tulisan FOUND, yang dalam contoh sebelumnya adalah ClamAVTest-File. Sebuah summary akan ditampilkan. Di sini, kita bisa melihat bahwa jumlah virus yang dikenal adalah 52180, Versi engine adalah 0.84, file yang diperiksa berjumlah 7 (5 di antaranya terinfeksi) dan waktu yang dihabiskan adalah 2.3 detik. Pada saat memeriksa file arsip rar dalam contoh, terdapat pesan RAR modul failure. Hal ini disebabkan karena modul RAR tidak tersedia, disebabkan masalah lisensi. Kita akan melihat bagaimana mengatasi hal ini.
Mengatasi RAR module yang tidak tersedia Di Debian GNU/Linux Sarge, unrar tidak disertakan dan modul RAR pun tidak disertakan. Salah satu cara yang bisa dilakukan untuk mengatasi masalah ini adalah user dapat mendownload unrar dari rarlabs. com dan melakukan kompilasi sendiri. Kompilasi unrar berada di luar cakupan tulisan ini. Setelah binary unrar tersedia, masalah RAR module yang tidak tersedia pada saat scan pun bisa diatasi dengan memberikan opsi –unrar=/path/ke/unrar.
$ clamscan --unrar=/home/nop/ bin/unrar /usr/share/clamavtestfiles/*.rar LibClamAV Warning: *************** ********************************* ******** LibClamAV Warning: *** This version of the ClamAV engine is outdated. *** LibClamAV Warning: *** DON’T PANIC! Read http://www.clamav. net/faq.html *** LibClamAV Warning: *************** ********************************* ******** LibClamAV Warning: *************** ********************************* ******** LibClamAV Warning: *** This version of the ClamAV engine is outdated. *** LibClamAV Warning: *** DON’T PANIC! Read http://www.clamav. net/faq.html *** LibClamAV Warning: *************** ********************************* ******** /usr/share/clamav-testfiles/clamerror.rar: RAR module failure UNRAR 3.51 freeware Copyright (c) 1993-2005 Alexander Roshal
Extracting from /usr/share/clamavtestfiles/clam-error.rar Extracting clam.exe OK All OK /tmp/clamav-921da59211415184/clam. exe: ClamAV-Test-File FOUND /usr/share/clamav-testfiles/clamerror.rar: Infected.Archive FOUND /usr/share/clamav-testfiles/clam. rar: ClamAV-Test-File FOUND ---------- SCAN SUMMARY ---------Known viruses: 52180 Engine version: 0.84 Scanned directories: 1 Scanned files: 3 Infected files: 2 Data scanned: 0.00 MB Time: 1.163 sec (0 m 1 s)
www.infolinux.web.id
TUTORIAL CLAMAV Menyembunyikan warning Apabila pesan warning akibat versi engine clamav yang sudah ketinggalan dirasa cukup mengganggu, user bisa meredireksi stderr ke /dev/null. Sebagai contoh: $ clamscan /usr/share/clamavtestfiles/*.zip 2>/dev/null /usr/share/clamav-testfiles/clam. zip: ClamAV-Test-File FOUND ---------- SCAN SUMMARY ---------Known viruses: 52180 Engine version: 0.84 Scanned directories: 0 Scanned files: 1 Infected files: 1 Data scanned: 0.00 MB Time: 1.128 sec (0 m 1 s)
Membunyikan bell Untuk membunyikan bell pada saat file yang terinfeksi virus ditemukan, gunakanlah opsi –bell. Sebagai contoh: $ clamscan --bell /usr/share/ clamav-testfiles/*.zip 2> /dev/null /usr/share/clamav-testfiles/clam. zip: ClamAV-Test-File FOUND ---------- SCAN SUMMARY ---------Known viruses: 52180 Engine version: 0.84 Scanned directories: 0 Scanned files: 1 Infected files: 1 Data scanned: 0.00 MB Time: 1.147 sec (0 m 1 s)
Scan secara rekursif Secara default, clamscan tidak memeriksa direktori secara rekursif. Untuk memeriksa secara rekursif, tambahkan opsi -r. Sebagai contoh: $ clamscan test/a: OK
$ clamscan -r test/ 2>/dev/null test/1/a: OK test/1/b: OK test/1/c: OK test/2/a: OK test/2/b: OK test/2/c: OK test/3/a: OK test/3/b: OK test/3/c: OK test/a: OK ---------- SCAN SUMMARY ---------Known viruses: 52180 Engine version: 0.84 Scanned directories: 4 Scanned files: 10 Infected files: 0 Data scanned: 111.00 MB Time: 7.859 sec (0 m 7 s)
Tidak menampilkan summary Secara default, summary akan ditampilkan di akhir scan. Apabila ini tidak diinginkan, maka gunakanlah opsi –no-summary. Contoh:
Memeriksa file database virus Secara default, main.cvd dan daily.cvd yang merupakan database virus disimpan pada /var/lib/clamav: $ ls -alh /var/lib/clamav/ total 6.2M drwxr-xr-x 2 clamav clamav 144 2006-04-22 16:51 . drwxr-xr-x 34 root root 880 2006-04-22 16:24 .. -rw-r--r-1 clamav clamav 2.2M 2006-04-22 16:32 clamavb4fa6d92e6221b0d -rw-r--r-1 clamav clamav 135K 2006-04-22 16:51 daily.cvd -rw-r--r-1 clamav clamav 3.8M 2006-04-22 16:51 main.cvd
$ clamscan --no-summary test/ 2>/dev/null test/a: OK
File-file tersebut bisa diperiksa dengan program sigtool (bagian dari clamav). Sebagai contoh, kita bisa melihat informasi main.cvd dengan memberikan opsi -i:
Secara default, file arsip akan diperiksa. Apabila hal ini tidak diinginkan, gunakanlah opsi –no-archive (yang akan men-disable transparent decompressor yang dibangun ke dalam libclamav). Sebagai contoh: $ clamscan --no-archive /usr/ share/clamav-testfiles/ 2>/dev/null /usr/share/clamav-testfiles/clamerror.rar: OK /usr/share/clamav-testfiles/ debugm.c: OK /usr/share/clamav-testfiles/clam. cab: OK /usr/share/clamav-testfiles/clam. exe: ClamAV-Test-File FOUND /usr/share/clamav-testfiles/clam. rar: OK /usr/share/clamav-testfiles/clam. zip: OK /usr/share/clamav-testfiles/clam. exe.bz2: OK
ClamAV adalah antivirus yang luar biasa powerful dan kompleks. Apa yang kita bahas dalam artikel ini hanyalah bagian kecil. Sampai di sini dulu pembahasan kita. Selamat mencoba!! Noprianto [[email protected]]
INFOLINUX 07/2006
55
IKLAN
IKLAN
TUTORIAL SELINUX BAGIAN 2 DARI 2 ARTIKEL
Keamanan Lebih Lanjut dengan SELinux
P
ada bagian kedua tutorial SELinux ini, Anda akan ditunjukkan bagaimana caranya mengaktifkan dan menonaktifkan SELinux. Karena konfigurasi SELinux menggunakan m4, maka artikel ini juga akan memperkenalkan program m4 pada Anda. Selain itu, Anda juga akan diperkenalkan pada struktur direktori konfigurasi SELinux dan sintaks konfigurasi SELinux. Nama-nama tools SELinux merupakan teknologi yang relatif baru. Penerimaannya baru meluas akhir-akhir ini, sehingga ada beberapa hal yang tidak sama antara satu distribusi Linux dengan distribusi Linux yang lain. Salah satu perbedaan yang mencolok adalah nama tools. Ketika SELinux belum diterima secara luas, dibuat aneka macam tools dengan nama yang berbeda dengan nama tools standar, agar tidak ada bentrok antara tools SELinux dengan tools yang lain. Biasanya nama-nama tools ini berawalan dengan huruf “s”, contohnya ada tool bernama spasswd untuk menggantikan passwd, suseradd untuk menggantikan useradd, dan lain-lain. Sekarang SELinux sudah diterima secara luas. Aneka tools standar (ls, passwd, dan sebagainya) sudah memiliki dukungan terhadap SELinux, sehingga Anda tidak lagi memerlukan tools tersebut. Sayangnya, tidak semua distribusi Linux sudah menyertakan tools terbaru. Jika Anda masih menemukan program berawalan s untuk melakukan administrasi standar, kemungkinan distro Anda merupakan distro lama. Anda sebaiknya menggunakan tools tersebut alih-alih program standar.
sementara maupun permanen. Hal ini sangat penting karena jika Anda membuat kesalahan, Anda dapat mematikan SELinux. Dalam kasus tertentu ketika Anda membuat kesalahan yang besar sampai Anda tidak bisa mematikan SELinux (atau bahkan tidak bisa login), maka kemampuan untuk mematikan SELinux dari command line kernel sangat berguna. Untuk mengaktifkan SELinux secara temporer (jika SELinux sedang tidak aktif), gunakan perintah setenforce 1 atau setenforce enforcing. Untuk menonaktifkan SELinux secara temporer, gunakan perintah setenforce 0 atau setenforce permissive. Dengan perintah setenforce permissive, maka akses terhadap objek tidak akan ditolak, hanya akan dicatat dalam log. Jika program setenforce tidak tersedia, Anda bisa langsung menggunakan interface file /selinux/enforce untuk mengendalikan SELinux. Untuk menonaktifkan SELinux, gunakan: echo 0 > /selinux/enforce
Sedangkan untuk mengaktifkannya, gunakan: echo 1 > /selinux/enforce
Mengaktifkan dan menonaktifkan SELinux Hal paling dasar yang perlu diketahui mengenai SELinux adalah bagaimana mengaktifkan dan menonaktifkan SELinux, baik
58
07/2006 INFOLINUX
Untuk memeriksa apakah saat ini SELinux aktif atau tidak (1 artinya aktif, 0 artinya tidak), gunakan: cat /selinux/enforce
Jika file /selinux/enforce tidak ada, kemungkinan kernel Anda tidak mendukung SELinux. Agar SELinux tidak aktif ketika Linux dimulai, Anda bisa menambahkan parameter kernel selinux=0. Di boot loader GRUB, ini dilakukan dengan menekan tombol ‘e’ pada pilihan menu. Di LILO, ini bisa diketikkan dari command line LILO. Untuk menonaktifkan SELinux secara permanen, tambahkan command line selinux=0 pada parameter kernel Anda dengan mengedit file konfigurasi LILO (lilo.conf) atau GRUB (grub.conf atau menu.lst), tergantung yang mana yang Anda pakai.
Mengenal M4 File konfigurasi SELinux ditulis dalam suatu sintaks yang dapat dimengerti manusia (tidak seperti konfigurasi Sendmail). Anda dapat menulis atau mengedit langsung file konfigurasinya menggunakan editor teks biasa. Sayangnya, mengedit langsung file ini akan membutuhkan waktu lama, karena ada banyak pengulangan dalam file ini. Untuk mengatasi masalah pengulangan dalam file, SELinux menggunakan file macro yang akan diekspansi menjadi konfigurasi SELinux. File macro SELinux diproses menggunakan program macro processor yang bernama m4, sama seperti konfigurasi Sendmail. InfoLINUX sudah pernah membahas m4 beberapa tahun yang lalu, namun penulis akan mengulangnya agar seluruh pembaca
www.infolinux.web.id
TUTORIAL SELINUX bisa mengerti. M4 sebenarnya memiliki banyak fitur, namun pembahasan yang ada pada dokumen ini hanya sebatas pada fiturfitur m4 yang dipakai oleh SELinux. Masukan untuk m4 adalah sebuah file teks biasa yang berisi macro dan teks yang memakai macro, dan keluarannya adalah teks yang sudah disubstitusi dengan definisi macro. Untuk mendefinisikan macro, gunakan sintaks: define(namamacro, nilai)
Setelah definisi tersebut, maka semua namamacro akan disubstitusi menjadi nilai. Perhatikan bahwa tidak ada spasi sebelum maupun sesudah kurung buka dan kurung tutup. Contoh penggunaan m4 adalah seperti ini: $ cat > test.m4 define(AKU, joe) AKU yohanes $ m4 test.m4joe yohanes $
Seperti yang dapat Anda lihat, saya mendefinisikan AKU menjadi joe. Lalu di baris selanjutnya saya menuliskan teks AKU, teks joe, dan teks yohanes. Ketika m4 dijalankan, AKU pada baris kedua akan disubstitusi menjadi joe, dan karena tidak ada definisi macro untuk yohanes, maka teks tersebut tidak diubah dan dituliskan apa adanya. Mungkin Anda memperhatikan bahwa ada baris kosong sebelum keluaran joe. Baris tersebut dihasilkan oleh karakter enter setelah instruksi define. Ada dua cara untuk menghilangkan baris kosong tersebut, pertama dengan menuliskan langsung teks berikutnya di sebelah kanan define (tanpa menekan enter): define(AKU, joe)AKU
Namun dengan cara tersebut, definisi macro menjadi sulit dibaca. Cara lain untuk menghilangkan baris kosong adalah dengan menggunakan perintah khusus m4 yang bernama dnl (singkatan dari Delete Through New Line) setelah definisi macro. define(AKU, joe)dnl
M4 memiliki sifat rakus (greedy) yang mungkin dapat membingungkan Anda, jika saya menuliskan file m4 seperti ini: define(AKU, joe)dnldefine(AKU, yohanes)dnlAKU joe
www.infolinux.web.id
Maka keluarannya adalah ‘yohanes yohanes’ karena pada baris kedua, m4 akan menggantikan kata AKU dengan joe sehingga isi macro baris kedua sama dengan:
Tabel 1. Isi direktori /etc/selinux/strict dan /etc/selinux/targeted.
File/Direktori Isi contexts/* policy/*
define(joe, yohanes)
Untuk menghindari hal tersebut, gunakan tanda kutip pada definisi macro agar tidak diekspansi. Tanda kutip dalam m4 diawali dengan tanda kutip balik (backquote) dan diakhiri dengan tanda kutip tunggal (contoh: `Linux’). Supaya macro di atas menjadi benar (keluarannya menjadi yohanes joe), definisi macro kedua perlu diubah: define(AKU, joe)dnldefine(`AKU’, yohanes)dnlAKU joe
users/* src booleans
Konteks file dan user , dihasilkan oleh makefile Policy dalam bentuk biner, Dihasilkan oleh makefile Dihasilkan oleh makefile Berisi source (file yang perlu diedit), dijelaskan dalam tabel Konfigurasi boolean
Jika suatu teks hanya ingin dikeluarkan jika macro tertentu terdefinisi, maka gunakan ifdef seperti ini (ini digunakan oleh konfigurasi SELinux di banyak tempat untuk mengaktifkan konfigurasi berdasarkan distribusi Linux yang dipakai): define(`redhat’)dnl ifdef(`redhat’, ` Redhat didefinisikan ‘)
Karena sifat m4 yang dapat membingungkan, Anda sebaiknya selalu menggunakan tanda kutip ketika mendefinisikan macro baru, baik pada nama macro maupun definisi macro, sehingga sebaiknya semua definisi macro di atas diubah menjadi:
Contoh tersebut sekaligus menunjukkan bahwa definisi macro boleh lebih dari satu baris (ini juga akan sering Anda temui pada file konfigurasi SELinux).
define(`AKU’, `joe’)dnldefine(`AKU’, `yohanes’)dnlAKU joe
Struktur direktori konfigurasi SELinux
Anda dapat bereksperimen sendiri untuk lebih mengenal sifat m4. Jangan lupa bahwa tanda m4 diawali dengan backquote dan diakhiri dengan kutip tunggal. Jika Anda ingin menggantikan sebuah macro dengan definisi baru, Anda sebaiknya menghilangkan definisi macro tersebut, lalu definisikan macro yang baru. Untuk menghilangkan definisi macro gunakan perintah undefine, dengan sintaks undefine(namamacro). Macro juga dapat memiliki parameter (argumen). Argumen ini selalu berupa tanda dolar yang diikuti oleh digit (1, 2, dan seterusnya). Jumlah digit yang dapat diterima tergantung pada implementasi m4. Contoh penggunaan argumen adalah sebagai berikut: define(`ALAMAT’, `http://www.$1.$2’)dnl
Dan untuk menggunakannya: ALAMAT(`compactbyte’, `com’), hasilnya adalah:
File konfigurasi SELinux disimpan pada direktori /etc/selinux, di dalam direktori ini terdapat dua direktori yang berisi dua jenis kebijakan yang berbeda, yang pertama adalah strict (proteksi menyeluruh) dan yang kedua adalah targeted (proteksi hanya terhadap program yang terdaftar). Direktori /etc/selinux/strict dan /etc/selinux/targeted memiliki struktur yang sama, di dalamnya terdapat file-file yang tercantum pada tabel 1. Semua direktori kecuali src diciptakan oleh makefile setelah Anda mengubah konfigurasi. Jadi jika Anda tidak sengaja menghapus direktori-direktori tersebut, akibatnya tidak fatal. Anda dapat mencoba memindahkan direktori-direktori tersebut jika ingin membuktikan bahwa SELinux akan menciptakan kembali direktori-direktori tersebut. Direktori penting yang harus Anda kenal adalah /etc/selinux/[strict|targeted]/ src/policy. Di dalamnya ada banyak direktori dan file seperti yang tercantum pada tabel 2.
http://www.compactbyte.com
(Perhatikan bahwa semua karakter akan akan digabung tanpa ada penambahan spasi.)
Konfigurasi Sebuah konfigurasi lengkap SELinux terdiri atas:
INFOLINUX 07/2006
59
TUTORIAL SELINUX Definisi Flask, yang merupakan definisi dasar sistem. File ini hanya dibahas sedikit, karena tidak akan pernah diubah. Spesifikasi security context, yang menyatakan file X memiliki security context apa. Isi file ini akan dibahas di edisi ini. Deklarasi dan aturan TE (Type Enforcement) dan RBAC (Role Based Access Control), yang memberikan batasan untuk program dengan domain tertentu. Isi akan dibahas sedikit di edisi ini, dan akan diteruskan di edisi-edisi yang akan datang. Deklarasi user yang mendefinisikan role sebuah user. File ini akan dibahas di artikel lanjutan. Definisi constraint, digunakan untuk memastikan bahwa Anda sudah menulis rule yang benar. Juga akan dibahas di salah satu artikel lanjutan. Sebelum membahas mengenai spesifikasi security context dan sedikit mengenai TE dan RBAC, saya akan menjelaskan dulu apa itu Flask, TE, dan RBAC. SELinux menggunakan arsitektur security yang bernama Flask (Flask Operating System Security Architecture) yang sudah pernah diimplementasikan NSA untuk sistem operasi lain. Penjelasan lengkap mengenai arsitektur Flask tidak dijelaskan dalam artikel ini, namun segala macam konsep yang telah dijelaskan sebenarnya merupakan adaptasi Flask untuk Linux. Aturan dasar yang ada pada arsitektur Flask Tabel 2. /etc/selinux/[strict|targeted]/src/policy.
File
Isi
Makefile tunables/*.tun
Makefile untuk menginstall konfigurasi Policy yang bisa di-tune sesuai kebutuhan attrib.te Mendefinisikan type attribute macros/program/*.te Makro untuk program tertentu macros/*.te Makro umum types/*.te Tipe umum domains/user.te Domain user yang tidak memiliki privilege domains/admin.te Domain administrator domains/misc/*.te Aneka macam domain yang tidak berhubungan dengan program tertentu domains/program/*.te Domain yang berhubungan dengan program tertentu domains/programs/ Domain lain yang tidak dipakai unused/*.te (dijelaskan dalam artikel) assert.te Asersi untuk mencegah kesalahan file_contexts/* Konteks file default flask Definisi kelas security flask (dijelaskan dalam artikel)
60
07/2006 INFOLINUX
didefinisikan pada file-file dalam direktori flask. Karena aturan ini bersifat dasar, maka biasanya kita tidak akan pernah perlu untuk menyentuhnya. TE dan RBAC merupakan istilah yang dipakai dalam Flask untuk menyatakan model bagaimana proses kebijakan diberlakukan. Pada TE, kebijakan diaplikasikan per objek, sedangkan pada RBAC dilakukan berdasarkan security context objek tersebut. Dalam file konfigurasi, TE diindikasikan dengan rule yang berawalan dengan kata type sedangkan RBAC dengan rule yang berawalan dengan role. Namun Anda akan jarang melihat kata yang berawalan dengan type atau role di konfigurasi SELinux, karena sebagian besar sudah dibungkus macro m4. Pada tutorial kali ini, saya tidak akan menjelaskan sintaks secara detail masingmasing isi file konfigurasi, namun saya akan memperlihatkan isi file yang sudah ada dalam paket SELinux untuk memberikan gambaran apa saja isi konfigurasi SELinux.
Konfigurasi konteks file Salah satu konfigurasi sederhana milik SELinux adalah untuk program hostname (program untuk mencetak atau mengganti nama host). Sebagai catatan, program ini selain digunakan oleh user biasa, juga digunakan oleh program DHCP client untuk mendapatkan atau mengeset nama host saat ini (fakta ini penting untuk aturan transisi). Konfigurasi pertama yang perlu kita lihat untuk sebuah program adalah konfigurasi konteks file. Ini dapat dilihat pada direktori file_contexts. Di dalam direktori ini ada direktori program, dan di dalamnya terdapat file-file yang berekstensi .fc sesuai dengan nama program yang diatur. Konfigurasi untuk hostname bernama hostname. fc, konfigurasi untuk ssh bernama ssh.fc, dst.Isi file hostname.fc adalah sebagai berikut (hanya satu baris): /bin/hostname – system_u:object_r: hostname_exec_t
Setiap baris dalam file .fc terdiri dari tiga bagian, yaitu: bagian terkiri adalah nama file, bagian tengah (‘-’, dua strip) menyatakan flag (dalam kasus ini dua strip berarti nama di sebelah kiri adalah nama file,
bukan direktori atau yang lain), bagian terkanan (system_u:object_r:hostname_exec_ t) adalah security context file. File konfigurasi boleh diberi komentar dengan diawali tanda #. Contohnya kita bisa melihat file konfigurasi java.fc: # java /usr(/.*)?/bin/java.* - system_u:object_r:java_exec_t
Perhatikan bahwa nama file boleh mengandung regular expression seperti yang diterima oleh program vi. Bagian tengah boleh tidak dituliskan yang artinya regular expression di kiri boleh berupa file atau direktori. File di sebelah kiri juga tidak harus berupa sebuah program, bisa saja file konfigurasi atau file yang lain. Contoh hal ini bisa dilihat pada konfigurasi squid. # squid /usr/sbin/squid system_u:object_r:squid_exec_t #cache squid/var/cache/squid(/.*)? system_u:object_r:squid_cache_t /var/spool/squid(/.*)? system_u: object_r:squid_cache_t #log file squid/var/log/ squid(/.*)? system_u:object_r: squid_log_t #file konfigurasi squid/etc/ squid(/.*)? system_u:object_r: squid_conf_t #file lain-lain/var/run/squid\.pid - system_u:object_r:squid_var_run_ t /usr/share/squid(/.*)? system_u: object_r:squid_conf_t
Squid adalah program caching proxy server yang harus menyimpan data cache miliknya di suatu tempat (biasanya /var/ cache/squid). Jika Anda memiliki dedicated proxy yang memiliki cache ratusan gigabyte, mungkin Anda ingin memindahkan cache tersebut ke file system lain. Jika Anda mengubah path direktori cache di konfigurasi squid, maka Anda perlu mengedit file ini. Jika kita ingin menyatakan bahwa suatu nama haruslah suatu file nama direktori, atau harus berupa socket kita bisa menggunakan flag -d (direktori), -s (socket), atau kita bisa menggunakan flag yang lain sesuai dengan kolom mode pada tampilan program ls dengan parameter -l (kolom mode adalah kolom pertama). Anda mungkin bertanya-tanya, mengapa file ini harus ada, padahal security attribute
www.infolinux.web.id
TUTORIAL SELINUX sudah disimpan di file system? Seperti yang ditunjukkan oleh program ls pada edisi lalu. File ini berguna untuk melakukan labeling oleh program setfiles. Ketika Anda baru menginstall program squid misalnya, maka mungkin security context squid belum diset. Mungkin juga sudah tergantung apakah Anda menginstal manual atau dengan program tertentu. Berdasarkan isi file konteks ini, maka setfiles bisa mengeset konteks file dengan benar. Anda tidak perlu menjalankan setfiles secara manual, untuk melakukan pelabelan ulang, pergilah ke direktori /etc/selinux/[targeted|strict]/src/policy/ lalu ketikkan: make relabel
Security context untuk beberapa direktori umum seperti /tmp, /etc, /sbin, disimpan dalam file yang bernama types.fc sehingga Anda tidak perlu mendefinisikannya lagi. Aneka distro Linux memakai direktori yang berbeda untuk menyimpan file konfigurasinya sehingga file konfigurasi spesifik distro tertentu disimpan dalam file terpisah yang bernama distros.fc.
Konfigurasi Type Enforcement (TE) Konfigurasi konteks file menyatakan bahwa file X memiliki security context Y, tapi tidak mendefinisikan apa yang bisa dilakukan oleh program dengan security context tertentu. Aturan type enforcement disimpan dalam file .te yang ada di direktori /etc/selinux/targeted/src/policy/domains/program. File ini lebih rumit dibanding dengan file security context karena mendefinisikan secara detail apa saja yang boleh dilakukan oleh sebuah program. Dalam edisi ini saya hanya akan mencuplik sebagian isi file hostname.te. File-file ini akan saya bahas lagi di edisi berikutnya. Sebagian isi hostname.te adalah sebagai berikut: allow hostname_t etc_t:file { getattr read }; allow hostname_t net_conf_t:file { getattr read; can_resolve(hostname_t)read_ locale(hostname_t)
Baris pertama menyatakan bahwa program dengan domain hostname_t (ingat bahwa domain adalah bagian terakhir dari sebuah security context) diizinkan mem-
www.infolinux.web.id
baca dan mendapatkan atribut file dengan konteks etc_t. Baris kedua menyatakan bahwa program dengan domain hostname_t diizinkan membaca dan mendapatkan atribut file dengan security context net_conf. Perlu diingat bahwa security context etc_t dan net_conf berasal dari file types.fc dan distros.fc. Baris can_resolve sebenarnya adalah macro m4 yang isinya adalah mengijinkan program untuk melakukan resolve (memetakan nama menjadi IP). Baris terakhir menyatakan bahwa program boleh membaca informasi locale (informasi mengenai bahasa yang digunakan sistem, termasuk juga pesan error dalam bahasa yang dipakai sistem). Hal yang mungkin membuat heran adalah, dari mana domain hostname_t berasal, bukankah tadi file /bin/hostname memiliki security context system_u:object_r: hostname_exec_t? Jawabannya ada di file dhcpc.te. Type enforcement untuk hostname diberlakukan hanya jika dijalankan oleh program dhclient. Hal ini bisa dilihat dari transisi domain otomatis pada file dhcpc.te: domain_auto_trans(dhcpc_t, hostname_exec_t, hostname_t)
Ini berarti bahwa transisi domain (role) otomatis terjadi dari domain dhcpc_t menjadi hostname_t ketika file executable dengan domain hostname_exec_t dijalankan.
Ringkasan Dalam edisi ini saya telah memberitahukan bagaimana cara mengaktifkan dan menonaktifkan SELinux baik sementara maupun permanen. File konfigurasi SELinux ditulis menggunakan m4 sehingga pembahasan m4 juga telah diberikan. File konfigurasi SELinux cukup rumit, dan terdiri dari banyak file di banyak direktori. Dari lima jenis file konfigurasi, 2,5 sudah dibahas di edisi ini (setengah lagi belum karena saya belum membahas sintaks TE dan RBAC secara komplit). Di edisi yang akan datang, saya akan meneruskan pembahasan mengenai konfigurasi SELinux dan mulai menunjukkan bagaimana caranya mengutak-atik konfigurasi SELinux untuk mengamankan sistem Anda. Yohanes Nugroho [[email protected]]
INFOLINUX 07/2006
61
TUTORIAL LATEX
Membuat Makalah Profesional dengan LaTeX
M
enulis makalah bagi para pelajar, mahasiswa, peneliti, dan pekerja profesional lainnya adalah hal biasa. Suatu kepuasan tersendiri jika makalah yang dihasilkan memiliki pewajahan yang profesional, terkesan serius, dan tidak kekanak-kanakan. Untuk itu, LaTeX bisa menjadi salah satu alat bantunya.
Bukan rahasia lagi kalau membuat dokumen terstruktur yang rumit terasa menjadi lebih mudah dengan menggunakan LaTeX (baca: la-tekh). LaTeX membuat kita secara umum tak perlu lagi mengurusi ukuran huruf dan style untuk judul, kepala bab, badan teks, catatan kaki, dan sebagainya. LaTeX akan membantu kita dalam melakukan pemformatan. Kita hanya perlu berkonsentrasi pada isi tulisan. Jurnal-jurnal ilmiah kaliber internasional semisal Astronomy and Astrophysics, The Astrophysical Journal, dan lain-lain mengharuskan para penulis makalah yang akan diterbitkan membuat tulisannya dengan LaTeX. Jurnal-jurnal itu menggunakan documentclass khusus yang dibuat oleh tim redaksinya. Kali ini kita akan memanfaatkan documentclass “article” (kelas standar yang pasti terbundel di dalam paket LaTeX) dengan sedikit trik tambahan untuk membuat makalah ilmiah yang perupaannya mirip dengan jurnal profesional. Pembaca diharapkan memiliki pengetahuan dasar menulis dengan LaTeX. Dan di bagian akhir tulisan ini disediakan template pembuatan makalah untuk memudahkan. Paket distribusi TeX dan LaTeX tersedia untuk hampir semua platform dan sistem operasi, misalnya teTeX yang open source untuk *NIX (GNU/Linux dan sistem mirip UNIX lainnya), MikTeX yang freeware untuk Microsoft Windows, dan beberapa paket TeX yang komersial.
62
07/2006 INFOLINUX
Dokumentasi masif tentang TeX dan LaTeX bisa didapatkan baik secara lokal, terinstal bersama paket distribusi TeX, ataupun dari situs Comprehensive TeX Archive Network (CTAN) di alamat http://www.ctan. org serta banyak situs mirror-nya. Beberapa dokumen yang didaftarkan pada Bahan Bacaan selain bisa didapatkan dari CTAN juga biasanya sudah terinstal di komputer lokal. Program texdoc dan texdoctk bisa dimanfaatkan untuk membantu pencarian dokumentasi LaTeX.
samaan matematika yang diberi nomor dan cukup sepuluh dari persamaan itu kita rujuk di dalam teks. Lalu setelah direvisi ternyata di bagian tengah harus kita tambah beberapa persamaan yang harus dirujuk juga dalam teks, yang artinya harus dinomori juga. Mengubah nomor persamaan yang terpengaruh akibat tambahan tadi, serta mengubah isi teks yang merujuk persamaan, baik yang lama maupun yang baru, pasti menjadi pekerjaan yang kurang menyenangkan. LaTeX akan menolong menangani hal ini, asalkan kita memberi “label” dengan benar.
Persiapan Persiapan untuk bisa mengikuti langkahlangkah pada tulisan ini cukup sederhana. Installah paket teTeX, hampir semua distro GNU/Linux menyertakan paket ini pada CD instalasi. Siapkan editor teks yang disukai, dan viewer untuk dokumen yang dihasilkan: xdvi/kdvi untuk pengguna latex (output berupa file .dvi) atau GV/Adobe Reader untuk pengguna pdflatex (output berupa file .pdf). Program xdvi adalah bagian dari paket teTeX, sementara program Adobe Reader untuk GNU/Linux bisa di-download secara gratis dari situs Adobe. Beberapa distro yang tidak gratis bahkan sudah menyertakan Adobe Reader pada CD instalasi mereka. Contoh yang digunakan di dalam tulisan ini menggunakan pdflatex (LaTeX2e) dari paket teTeX3.0 pada mesin GNU/Linux. Ada keuntungan tersendiri dalam membuat dokumen dengan LaTeX. Bayangkan dalam makalah kita terdapat lima puluh per-
Membuat Preamble Menulis dengan LaTeX tidak seperti menggunakan pengolah kata layaknya OpenOffice. org yang menganut filosofi What You See Is What You Get, tapi lebih mirip dengan pemrograman. Yang pertama dilakukan adalah menulis kode sumber (source) ke dalam sebuah file teks biasa, dan disimpan dengan nama file berakhiran .tex. Kemudian dilakukan kompilasi (menggunakan latex atau pdflatex) sampai didapatkan file output berupa dokumen yang bisa ditampilkan di layar atau dicetak dengan printer. Bagian awal atau preamble dari setiap source dokumen LaTeX menyatakan kelas dokumen, serta paket apa saja yang akan disertakan untuk membantu pemformatan. Singkatnya, setting dokumen dideklarasikan di sini. Berikut adalah preamble yang digunakan untuk menghasilkan dokumen yang menjadi contoh pada tulisan ini.
pit batas halaman dari batas kertas sehingga terdapat ruang yang luas untuk teks. Tapi kemudian tiap baris jadi terlalu panjang dan menyulitkan pembaca. Karena itu dibuatlah makalah ilmiah ini dengan format dua kolom. Jika kita tidak mendeklarasikan linestretch (spasi antar baris), harga default adalah satu atau single spacing. Jika peraturan penulisan makalah anda menyatakan lain, perintah ini bisa ditambahkan pada preamble:
Kelas yang digunakan adalah “article” dengan ukuran kertas A4 yang biasa digunakan di Indonesia. Teks akan diformat dalam dua kolom. Opsi-opsi lain yang kita biarkan secara default adalah ukuran huruf 10 point, cetak pada satu sisi kertas, dokumen final (bukan draft), persamaan matematika rapi tengah, dan nomor persamaan matematika rapi kanan. Batas-batas teks dari pinggir kertas diatur dengan paket geometry. Paket babel dengan opsi bahasa (bahasa Indonesia) akan mengotomasi pemenggalan kata dan menerjemahkan istilah-istilah struktur tulisan ke bahasa Indonesia. Paket amsmath diperlukan untuk memudahkan penanganan persamaan matematika yang panjang. Paket graphicx digunakan agar kita bisa memasukkan gambar berformat PDF, PNG, dan JPEG (untuk pdflatex), atau PostScript dan EPS (untuk latex). Paket natbib berguna untuk menampilkan citation dalam format parenthetical “(penulis, tahun)” atau textual “penulis (tahun)” seperti yang lazim digunakan dalam tulisan ilmiah. Ada alasan kuat kenapa menggunakan dua kolom. Pertama, biasanya penulis harus membayar untuk tiap halaman makalah yang diterbitkan oleh sebuah jurnal, contohnya kedua jurnal di atas, sehingga diusahakan supaya jangan sampai ada bagian halaman yang terbuang dengan sia-sia. Solusinya adalah memperkecil ukuran huruf dan mempersem-
Angka di dalam kurung kurawal menyatakan ukuran spasi. Harga spasi ini berlaku pada seluruh isi dokumen.
Gambar 1. Source file LaTeX.
www.infolinux.web.id
\renewcommand\baselinestretch{1.5}
Judul dan Abstrak (Ringkasan) Setelah selesai dengan preamble, saatnya kita mulai menulis bagian kepala makalah yang berupa judul, diikuti dengan pengarang dan abstrak/ringkasan makalah. Untuk memulai input isi makalah, kita harus menulis setelah preamble: \begin{document} \pagestyle{headings}
Abstrak (ringkasan) tidak boleh lebih dari satu paragraf. LaTeX akan memberikan hasil tidak sesuai dengan yang kita maksud bila kita paksa untuk memproses abstrak yang lebih dari satu paragraf. Dalam source LaTeX, paragraf dipisahkan oleh satu atau lebih baris kosong. Langkah tadi bisa saja dilewati jika makalah yang dibuat tidak memiliki abstrak atau ringkasan. Untuk menampilkan judul, pengarang, dan tanggal pembuatan, cukup dengan perintah: \maketitle
Isi Teks Makalah Hirarki dokumen pada kelas article adalah sebagai berikut: \part (bagian), kemudian \section (seksi), \subsection (subseksi), \subsubsection (subsubseksi), paragraph (paragraf), dan \subparagraph (subparagraf). Selanjutnya \tableofcontents (daftar isi), \listoffigures (daftar gambar), \listoftables (daftar tabel), daftar pustaka, dan \appendix (lampiran) adalah setingkat dengan seksi.
Persamaan Matematika Perintah pagestyle tidaklah wajib, tapi akan mengautomasi page header. Secara default, untuk pemformatan dua kolom, abstrak akan ditampilkan pada kolom pertama yang selanjutnya diikuti dengan isi makalah. Trik sederhana untuk menampilkan badan tulisan dalam dua kolom utama adalah dengan menuliskan input seperti di bawah ini (CATATAN: Judul, penulis, dan abstrak ditampilkan dalam satu kolom yang lebarnya sama dengan dua kolom utama ini, seperti pada Gambar 2). \twocolumn[ \begin{@twocolumnfalse} \maketitle \centerline{ \parbox{.9\textwidth}{ \begin{abstract} Isi dari abstrak... \end{abstract} } } \vspace{5mm} \end{@twocolumnfalse} ]
Opsi “.9\textwidth” memerintahkan untuk menampilkan abstrak hanya selebar 0,9 kali lebar teks keseluruhan.
Persamaan matematika adalah bagian dari kalimat yang merupakan bagian dari paragraf yang akan ditampilkan atau dicetak secara inline. Sementara gambar atau tabel akan ditampilkan secara floating (mengambang). Dari segi cara penampilan, setidaknya ada tiga macam persamaan matematika, yaitu persamaan dalam baris, persamaan yang tidak dinomori, dan persamaan yang dinomori. Dengan dimasukkannya paket amsmath, kemampuan LaTeX dalam persamaan matematika yang panjang dan rumit semakin bisa diandalkan. Selain untuk memudahkan memecah persamaan yang panjang, disediakan pula berbagai simbol yang biasa digunakan dalam matematika tapi tidak ada dalam paket standar LaTeX. Berikut contoh penggunaan environment “multline”, salahsatu fasilitas dari amsmath: \begin{multline}\label{pers_1} f(\Omega_0)=(1-\Omega_0)^{-1} \\ -\frac{\Omega_0}{2}(1-\Omega_0)^{3/2}\cosh^{-1}(\frac{\Omega_0}{2}1), \end{multline}
Perintah di atas akan menghasilkan tampilan seperti pada Gambar 3. Beberapa
INFOLINUX 07/2006
63
TUTORIAL LATEX
Gambar 2. Kepala makalah dalam satu kolom lebar dan badan makalah dalam duakolom.
fasilitas lain dari paket amsmath sangat membantu menangani persamaan yang rumit untuk kasus berbeda.
Dengan cara ini, gambar yang ditampilkan memiliki lebar sama dengan lebar teks keseluruhan, tapi tidak akan tumpang tindih dengan gambar atau teks lain.
Untuk memasukkan gambar seperti yang tampak pada Gambar 4, kita gunakan input seperti berikut: \begin{figure}[!h] \centering \includegraphics[width=.45\ textwidth]{filegbr.png} \caption{Hubungan ...} \end{figure}
Perintah \includegraphics adalah bawaan dari paket graphicx. Dalam kurung kotak, sebelum kurung kurawal yang berisi nama file gambar, bisa diisi dengan ukuran penampilan gambar. Ukuran yang digunakan bisa menggunakan metrik, misalnya: “width=4cm,heig ht=4cm,angle=90”, ataupun relatif terhadap suatu ukuran seperti yang terlihat pada contoh di atas. Bila hanya width atau height yang kita set, maka LaTeX akan mengubah ukuran penampilan gambar dengan rasio yang sama dengan ukuran gambar yang sebenarnya. Environment figure akan menampilkan gambar dalam satu kolom tertentu, sehingga jika gambar yang dimasukkan terlalu lebar akan ditampilkan tumpang tindih dengan kolom di sebelah kanannya, atau terpotong oleh batas kertas jika gambar itu ada di kolom sebelah kanan. Untuk gambar yang terlalu lebar, lebih baik menggunakan environment “figure*”. Contohnya seperti berikut: \begin{figure*} \centering \includegraphics[width=\
64
Gambar 3. Persamaan dibagi menjadi lebih dari satu baris karena terlalu panjang.
07/2006 INFOLINUX
Tabel Cara memasukkan tabel mirip dengan cara memasukkan gambar. Hanya saja environment yang dipakai adalah “table” dan “table*”. Telah ada konvensi di antara para penulis bahwa caption untuk gambar adalah di bawah gambar, sementara untuk tabel adalah di atas tabel. Jadi \caption{} ditulis terlebih dahulu sebelum isi tabel ditulis.
Rujukan dan Daftar Pustaka Rujukan silang (cross reference) kerap diperlukan dalam sebuah tulisan untuk menghemat energi dan biaya, karena si penulis tak perlu menulis ulang sesuatu yang telah atau akan dijelaskan, atau menampilkan kembali gambar dan tabel yang menyita ruang halaman. Penulis cukup menunjukkan suatu bagian di dalam teks yang berkaitan dengan apa yang sedang dibahas. LaTeX memberikan \label{}, \ref{}, dan \pageref{} untuk bekerja dengan rujukan silang. \label{x} untuk menandai suatu bagian dengan kode “x”, \ref{x} untuk memanggil nomor dari bagian yang telah ditandai, \pageref{x} untuk memanggil nomor halaman dari bagian yang ditandai tadi. Contoh penggunaannya bisa dilihat pada template makalah yang diberikan di belakang. Selain rujukan silang, \footnote{Isi catatan kaki} bisa juga dimanfaatkan.
Penggunaan paket natbib untuk Daftar Pustaka dan citation ditunjukkan pada template makalah. Baik textual citation misalnya: “Krane (1982)” maupun parenthetical citation misalnya: “(Krane, 1982)” bisa digunakan.
Template Makalah Orang yang terbiasa dengan pengolah kata WSIWYG, biasanya akan merasa sedikit kesulitan menggunakan LaTeX, terutama karena harus mengetik banyak perintah (yang sebetulnya mudah diingat). Walau sebetulnya sekarang banyak sekali front-end grafis untuk LaTeX, misalnya LyX. Tapi bagi yang terbiasa dengan pemrograman dan juga dengan persamaan matematika yang segunung, LaTeX adalah sahabat. Untuk semakin memudahkan bekerja dengan LaTeX, berikut adalah template keseluruhan untuk membuat makalah seperti yang menjadi contoh dalam tulisan ini. %% begin preamble \documentclass[ a4paper, twocolumn]{article} \usepackage[ left=2cm, right=2cm, bottom=2cm, top=25mm]{geometry} \usepackage[bahasa]{babel} \usepackage{amsmath,graphicx} \usepackage{natbib} %\renewcommand\baselinestretch{1.5} %% end preamble %% begin main document \begin{document} \pagestyle{headings}
www.infolinux.web.id
TUTORIAL LATEX %% begin kepala makalah \title{Judul Tulisan} \author{Nama Penulis \\ \small Keterangan penulis \\ \small Keterangan penulis } \date{tanggal penulisan} \twocolumn[ \begin{@twocolumnfalse} \maketitle \centerline{ \parbox{.95\textwidth}{ \begin{abstract} Isi dari abstrak... \end{abstract} } } \vspace{5mm} \end{@twocolumnfalse} ] %% end kepala makalah %% begin badan makalah \section{judul seksi 1} \label{s1} Isi seksi 1. Contoh \ emph{citation}: \citet{kra1982} dan \citep{kra1982} \section{judul seksi 2} \label{s2} Persamaan dalam baris: $E=mc^2$ dan persamaan tanpa nomor: $$\mu=\cos\ gamma.$$ Persamaan biasa: \begin{equation} % contoh
Gambar 4. Gambar bitmap PNG yang dimasukkan ke dalam dokumen.
www.infolinux.web.id
F=\int^1_{-1}I\mu\ d\mu, \label{p1} \end{equation} dan persamaan multiline: \begin{multline} % contoh t(t-1)(t+1-b)J^m_{\beta,\gamma}\\ -\kappa^2(3t+4-a-3b-2m)t\\ +(t+a+1-b)J^m_{\beta,\gamma}=0. \label{p2} \end{multline} \subsection{judul 2.1} Sesuai dengan persamaan~\ref{p1} yang independen dari grafik pada Gambar~\ref{g1} apalagi dengan Bab~\ref{s1} di halaman~\ pageref{s1} \ldots \subsubsection{judul 2.1.1}
\section{judul seksi 3} \begin{figure}[!h] % masukkan gambar di baris ini \caption{gambar biasa} \label{g1} \end{figure} \begin{table}[!h] \caption{tabel biasa} % tulis tabel di baris ini \end{table}
Bila bekerja dengan rujukan silang dan atau citation, proses kompilasi dokumen LaTeX harus dilakukan setidaknya dua kali. Running yang pertama untuk mendaftar label (nomor serta halamannya), running yang kedua untuk mengisikan nomor-nomor tadi pada tempat di mana kita melakukan rujukan. Perhatikan tanda “?” pada dokumen yang sudah jadi (.dvi atau .pdf) ketika baru dikompilasi satu kali, yang akan berubah menjadi nomor yang dimaksud setelah kompilasi kedua. Biasanya akan muncul peringatan “LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right.” jika label atau entri Daftar Pustaka berubah, atau waktu pertama kali kompilasi. Harus diingat juga bahwa tidak boleh ada label (dalam teks ataupun Daftar Pustaka) yang kembar, semua harus berbeda.
\section{judul seksi 4} \begin{figure*} % masukkan gambar di baris ini \caption{gambar lebar} \end{figure*} \begin{table*} \caption{tabel lebar} \label{t1} % tulis tabel di baris ini
\section{Lampir 2} Isi Lampiran \begin{thebibliography}{99} \bibitem[Krane, 1982]{kra1982} K. Krane, \textbf{1982}, \ emph{Modern Physics}, Wiley \& Sons. %\bibitem[]{} \end{thebibliography} %% end badan makalah \end{document} %% end main document
ulisan ini akan membahas cara sederhana membuat paket Debian dan publikasi berbagai paket Debian melalui protokol HTTP. Dengan membuat paket Debian, distribusi aplikasi ke distro Debian bisa menjadi lebih mudah. Paket yang kita buat juga bisa simpan di apt-repository agar bisa diinstal dengan lebih mudah lagi.
Bagi Anda yang senang membangun program dan ingin mendistribusikan program Anda untuk Linux, setidaknya ada beberapa cara yang bisa dilakukan. Cara yang pertama dan sangat dianjurkan adalah membangun paket untuk distro target. Cara yang kedua adalah menggunakan installer. Dan, cara yang ketiga adalah dengan meng-copy-kan program Anda secara manual. Untuk cara pertama, setidaknya ada dua paket yang perlu Anda bangun: RPM dan DEB. Barangkali, Anda pun perlu membangun beberapa versi RPM dan DEB. Misal: RPM untuk SUSE 10, RPM untuk SUSE 9.3, RPM untuk Fedora Core 4, RPM untuk Fedora Core 3, dan lain sebagainya. Begitupun juga dengan DEB untuk Debian Sarge, DEB untuk Debian Woody, dan DEB untuk berbagai distro turunan Debian lainnya. Untuk membangun paket DEB dan RPM, setidaknya ada dua cara yang bisa dilakukan: Membangun secara natif. Mengonversi dari paket lain menggunakan Alien. Apa yang akan kita bahas di dalam tulisan ini adalah membangun paket Debian secara natif. Membangun paket Debian bisa merupakan pekerjaan yang rumit. Kita hanya akan membahas cara yang sederhana.
berapa langkah perlu disesuaikan dengan konfigurasi Anda.
1. Siapkan program Anda Dalam contoh kita kali ini, kita akan membangun paket Debian untuk noptest versi 0.1. Program noptest versi 0.1 hanya terdiri dari satu script dengan nama file noptest dan berisikan baris-baris kode berikut: #!/bin/sh echo noptest 1 echo noptest 2 echo noptest 3
68
07/2006 INFOLINUX
Package: noptest Version: 0.1-1 Section: base Priority: optional Architecture: i386 Depends: bash (>= 2.05) Maintainer: Noprianto Noprianto <[email protected]> Description: print noptest three times This is useless program Nothing else.
4. Siapkan script prerm 2. Siapkan struktur direktori Siapkan struktur direktori berikut: debian debian/DEBIAN debian/usr debian/usr/bin debian/usr/share debian/usr/share/doc debian/usr/share/doc/noptest debian/usr/share/man debian/usr/share/man/man1
Perintah berikut ini bisa digunakan: $ mkdir -p debian/DEBIAN debian/usr/bin debian/usr/share/doc/ noptest debian/usr/share/man/man1
Membangun paket Debian Berikut ini adalah langkah-langkah dalam membangun paket Debian. Tentunya, be-
ini. Simpanlah sebagai debian/DEBIAN/ control.
3. Siapkan file ‘control’ Siapkan file control dengan isi file berikut
Script prerm adalah script pre remove yang akan dijalankan sebelum proses remove paket. Simpanlah sebagai debian/DEBIAN/ prerm dan berikanlah hak akses 755. #!/bin/sh echo echo “checking system before removing noptest” echo
$ chmod 755 prerm
5. Siapkan script postinst Script postinst adalah script post install yang akan dijalankan setelah proses instalasi paket. Simpanlah sebagai debian/DEBIAN/postinst dan berikanlah hak akses 755.
www.infolinux.web.id
TUTORIAL DEBIAN #!/bin/sh echo echo “noptest has been installed successfully” echo
Gunakan program txt2man untuk mengkonversi noptest.man tersebut menjadi manual yang sesungguhnya. Berikan perintah berikut ini untuk menginstall txt2man: # apt-get install txt2man Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: gawk The following NEW packages will be installed: gawk txt2man 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 1005kB of archives. After unpacking 2265kB of additional disk space will be used. Do you want to continue? [Y/n] Get:1 http://192.168.0.1 sarge/ main gawk 1:3.1.4-2 [995kB] Get:2 http://192.168.0.1 sarge/ main txt2man 1.4.8-2 [9332B] Fetched 1005kB in 0s (7048kB/s) Selecting previously deselected package gawk. (Reading database ... 73366 files and directories currently
www.infolinux.web.id
Setelah itu, kompreslah file debian/usr/ share/man/man1/noptest.1 dengan program gzip: $ gzip --best debian/usr/share/man/man1/noptest.1
9. Membuat changelog.Debian Buatlah file changelog.Debian dengan contoh isi file berikut, kemudian, simpanlah sebagai debian/usr/share/doc/noptest/changelog.Debian. noptest Debian maintainer and upstream author are identical. Therefore see also normal changelog file for Debian changes.
Kompreslah file changelog.Debian tersebut dengan gzip: $ gzip --best debian/usr/share/ doc/noptest/changelog.Debian
10. Kopikan program Kopikanlah program noptest ke debian/ usr/bin $ mv noptest debian/usr/bin/ -v `noptest’ -> `debian/usr/bin/ noptest’
Jangan lupa berikan hak akses 755: $ chmod 755 debian/usr/bin/noptest
11. Membangun paket Debian 7. Mempersiapkan copyright Siapkanlah file copyright. Berikut ini adalah contoh file copyright, yang disimpan pada debian/usr/share/doc/noptest/: noptest (c) Noprianto <[email protected]>, 2005 Licensed under BSD See /usr/share/common-licenses/BSD
8. Membuat changelog Buatlah file changelog dengan contoh isi file berikut, kemudian, simpanlah sebagai debian/usr/share/doc/noptest/changelog. noptest (0.1-1) * Make Debian package clean
Sebelum membangun paket Debian, installah terlebih dahulu fakeroot dan lintian. # apt-get install fakeroot lintian Reading Package Lists... Done Building Dependency Tree... Done Suggested packages: binutils-multiarch The following NEW packages will be installed: fakeroot lintian 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 70.5kB/292kB of archives. After unpacking 1229kB of additional disk space will be used. Get:1 http://192.168.0.1 sarge/ main fakeroot 1.2.10 [70.5kB] Fetched 70.5kB in 0s (1976kB/s) Selecting previously deselected package fakeroot. (Reading database ... 73317 files and directories currently installed.) Unpacking fakeroot (from .../ fakeroot_1.2.10_i386.deb) ...
Setelah fakeroot terinstall, bangunlah paket Debian dengan perintah berikut: $ fakeroot dpkg-deb --build debian dpkg-deb: building package `noptest’ in `debian.deb’.
Fakeroot diperlukan karena: Kita membangun paket sebagai user biasa. File-file dalam paket debian noptest seharusnya dimiliki oleh root. Oleh karena itu, kita menipu dpkg-deb seolah-oleh dijalankan oleh root. Sebuah paket dengan nama debian.deb akan dihasilkan. Gantilah nama paketnya menjadi noptest_0.1-1_i386.deb: $ mv debian.deb noptest_0.11_i386.deb -v `debian.deb’ -> `noptest_0.11_i386.deb’
Pola nama paket Debian adalah: _.deb
Periksalah paket dengan dihasilkan dengan lintian. Lintian dapat digunakan untuk menguji seberapa benar suatu paket Debian. Usahakan untuk hanya men-deploy paket yang telah lulus uji lintian. $ lintian -v noptest_0.1-1_i386. deb N: Setting up lab in /tmp/ VDIXqASod3 ... N: Processing 1 packages... N: ---N: Processing binary package noptest (version 0.1-1) ... N: Removing /tmp/VDIXqASod3 ...
Apabila tidak ada pesan kesalahan yang terjadi, maka paket Debian pun telah kita hasilkan. Paket tersebut sudah bisa diinstal dengan dpkg -i. Sebagai contoh: # dpkg -i noptest_0.1-1_i386.deb
70
07/2006 INFOLINUX
Selecting previously deselected package noptest. (Reading database ... 73478 files and directories currently installed.) Unpacking noptest (from noptest_ 0.1-1_i386.deb) ... Setting up noptest (0.1-1) ... noptest has been installed successfully
binary-i386 pool/sarge/local/ noptest
3. Copy-kan paket noptest Selanjutnya, copy-kanlah Paket noptest_ 0.1-1_i386.deb ke pool/sarge/local/noptest/. Perintah berikut ini bisa digunakan: # cp -v noptest_0.1-1_i386.deb pool/sarge/local/noptest/ `noptest_0.1-1_i386.deb’ -> `pool/sarge/local/noptest/noptest_ 0.1-1_i386.deb’
Publikasi paket Debian Paket noptest_0.1-1_i386.deb yang kita hasilkan sebelumnya bisa diinstal dengan dpkg -i. Namun, seandainya paket tersebut tergantung pada berbagai paket lainnya, instalasi menjadi tidak sederhana lagi. Di Debian, instalasi paket kini sangat umum dilakukan melalui APT. Dengan demikian, segala dependency paket akan turut diinstall begitu kita menginstal suatu paket. Agar paket noptest tersebut bisa diinstal melalui APT, maka kita akan membangun sebuah APT repository yang dapat diakses melalui protokol HTTP. Berikut ini adalah langkah-langkah untuk membangun APT repository yang dapat diakses melalui protokol HTTP. Host HTTP server yang digunakan dalam tulisan ini adalah localhost.
4. Pembuatan file Package.gz
1. Siapkan HTTP server
Pindahkan file Package.gz ke dists/ sarge/local/binary-i386 dengan perintah berikut:
Instalasi HTTP server berada di luar cakupan artikel ini. Kita akan membuat sebuah direktori debian, relatif dari DocumentRoot HTTP server, sehingga repository bisa diakses dengan URL http://localhost/debian/.
Berikutnya, buatlah file Package.gz dengan prosedur berikut ini: Aktiflah pada direktori debian, relatif dari DocumentRoot HTTP Server. Berikanlah perintah berikut ini: # dpkg-scanpackages pool/sarge/ local/noptest/ /dev/null > Packages ** Packages in archive but missing from override file: ** noptest Wrote 1 entries to output Packages file.
Kompreslah file Package yang dihasilkan # gzip --best Packages
2. Siapkan struktur direktori untuk repository Siapkan struktur direktori berikut relatif di bawah direktori debian, relatif terhadap DocumentRoot HTTP Server.
Sampai di sini, repository kita pun telah selesai dibuat.
dists dists/sarge dists/sarge/local/ dists/sarge/local/binary-i386 pool pool/sarge pool/sarge/local pool/sarge/local/noptest
5. Menggunakan repository
Perintah berikut ini bisa diberikan: # mkdir -p dists/sarge/local/
Apabila user ingin menggunakan repository kita, maka tambahkanlah entry berikut ke /etc/apt/sources.list: deb http://localhost/debian/ sarge local
Jangan lupa untuk mengupdate indeks paket setelah memodifikasi /etc/apt/sources.list: # apt-get update
www.infolinux.web.id
TUTORIAL DEBIAN Get:1 http://localhost sarge/local Packages [278B] Hit http://192.168.0.1 sarge/main Packages Hit http://192.168.0.1 sarge/main Release Hit http://192.168.0.1 sarge/ contrib Packages Hit http://192.168.0.1 sarge/ contrib Release Hit http://192.168.0.1 sarge/main Packages Hit http://192.168.0.1 sarge/main Release Hit http://192.168.0.1 sarge/ contrib Packages Hit http://192.168.0.1 sarge/ contrib Release Ign http://localhost sarge/local Release Fetched 278B in 0s (4837B/s) Reading Package Lists... Done
Selanjutnya, noptest pun bisa diinstal menggunakan apt-get. Sebagai contoh: # apt-get install noptest Reading Package Lists... Done Building Dependency Tree... Done The following NEW packages will be installed: noptest 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 1594B of archives. After unpacking 0B of additional disk space will be used. Get:1 http://localhost sarge/local noptest 0.1-1 [1594B] Fetched 1594B in 0s (0B/s) Selecting previously deselected package noptest. (Reading database ... 73478 files and directories currently installed.) Unpacking noptest (from .../ noptest_0.1-1_i386.deb) ... Setting up noptest (0.1-1) ... noptest has been installed successfully
Apabila diinginkan, paket noptest juga bisa dicari dengan apt-cache: # apt-cache search noptest noptest - print noptest three times
www.infolinux.web.id
Apabila informasi detil paket noptest ingin ditampilkan, maka apt-cache show bisa digunakan: # apt-cache show noptest Package: noptest Version: 0.1-1 Priority: optional Section: base Maintainer: Noprianto Noprianto <[email protected]> Depends: bash (>= 2.05) Architecture: i386 Filename: pool/sarge/local/ noptest//noptest_0.1-1_i386.deb Size: 1594 MD5sum: cffbc2866d221925e0d4c4336 4a8a1b6 Description: print noptest three times This is useless program Nothing else.
Masih berhubungan dengan repository paket Debian, kita dapat mengopikan seluruh media CDROM/DVDROM Debian ke web server kita sehingga kita tidak perlu lagi mengganti CDROM/DVDROM setiap instalasi paket dilakukan. Ini akan sangat membantu bagi pengguna Debian yang mengandalkan CDROM/DVDROM Debian dalam instalasi paket, terutama bagi pengguna CDROM sehingga tidak perlu lagi berkali-kali mengganti CDROM ketika menginstal paket yang membutuhkan paket-paket lain di CDROM-CDROM lain (Debian Sarge datang dengan 14 CD; jumlah yang sangat banyak untuk paket distro). Sebagai contoh, penulis menggunakan server 192.168.0.1 sebagai host untuk debian repository. Direktori pada web server adalah: /pub/OS/LINUX/DEBIAN31/INSTALL/ sehingga URL yang diinginkan adalah: http://192.168.0.1/pub/ OS/LINUX/DEBIAN31/INSTALL/. Lakukan prosedur berikut ini untuk membuat repository Debian dari CDROM/ DVDROM yang ada: Kopikan semua isi CDROM/DVDROM Anda ke direktori yang diinginkan (yang bisa diakses dari web server). Usul penulis, kopikanlah semua isi CDROM/DVDROM, namun tetap dalam direktori terpisah. Sebagai contoh, penulis menggunakan media berupa DVDROM (2
buah), dan mengopikan isi DVDROM 1 ke direktori DVD1 dan meng-copy-kan isi DVDROM 2 ke direktori DVD2. Direktori ini kemudian bisa penulis akses melalui URL: http://192.168.0.1/pub/OS/LINUX/ DEBIAN31/INSTALL/DVD1/. http://192.168.0.1/pub/OS/LINUX/ DEBIAN31/INSTALL/DVD2/. Apabila Anda memiliki 14 CDROM, maka akan ada 14 direktori yang digunakan. Selanjutnya, user bisa menambahkan entry-entry berikut di dalam /etc/apt/ sources.list: deb http://192.168.0.1/pub/ OS/LINUX/DEBIAN31/INSTALL/DVD1 sarge main contrib deb http://192.168.0.1/pub/ OS/LINUX/DEBIAN31/INSTALL/DVD2 sarge main contrib
Apabila Anda mengekspor 14 direktori, maka tentu kita perlu menambahkan sebanyak 14 entry pada sources.list. Jalankanlah apt-get update untuk mengupdate indeks paket. Di sisi server, sebenarnya URL yang sama bisa digunakan pada sources.list. Namun, karena sebenarnya URL tersebut disimpan pada harddisk lokal, kita bisa menggunakan URI berupa file, sehingga apabila server yang juga menggunakan Debian ingin menginstall paket, tidak harus tergantung pada HTTP server (bayangkanlah ketika Anda sedang melakukan rescue pada server). Tambahkanlah entri berikut pada sources.list server: deb file:/home/PUB/PUB/OS/LINUX/ DEBIAN31/INSTALL/DVD1/ unstable main contrib deb file:/home/PUB/PUB/OS/LINUX/ DEBIAN31/INSTALL/DVD2/ unstable main contrib
Tentu saja, URI yang menggunakan http dan file bisa berbeda, tergantung di lokasi mana Anda menyimpan file asli, dan di lokasi mana Anda mengekspornya pada HTTP server. Sampai di sini dulu pembahasan kita. Selamat mencoba! Noprianto [[email protected]]
INFOLINUX 07/2006
71
TUTORIAL ORACLE DATABASE XE
Instalasi Oracle Database XE dan Konektivitas dengan PHP
B
elum lama ini, Oracle baru saja mengeluarkan versi gratis dari Oracle yaitu Oracle Database XE yang dapat digunakan untuk berbagai kebutuhan. Pada “Tutorial” kali ini, InfoLINUX akan menjelaskan cara instalasi Oracle Database XE beserta contoh konektivitas dengan bahasa pemrograman PHP.
Di dunia enterprise, perusahaan skala menengah ke atas seperti perbankan, asuransi, dan otomotif, banyak yang menggunakan Oracle sebagai software database server-nya. Sayangnya, lisensi untuk menggunakan Oracle tidak dirasakan murah harganya bagi sebagian orang. Sebagai solusinya, pihak Oracle telah merilis Oracle Database 10g Express Edition (Oracle Database XE) yang dapat digunakan secara free oleh siapa saja. Oracle Database XE ini ditujukan bagi kalangan developer, DBA, independent software vendor dan hardware vendor, serta institusi pendidikan dan pelajar. Dengan menggunakan Oracle Database XE, seorang developer diberi kesempatan untuk mencoba fitur-fitur umum yang terdapat dalam Oracle Database XE secara free untuk dihubungkan ke aplikasinya, dan pihak kampus dapat menggunakan di lingkungan labnya untuk praktikum desain database dan programming. Karena Oracle Database XE merupakan produk free, tentu saja banyak fitur Oracle komersial yang tidak terdapat di sini. Dalam versi ini, Anda hanya dapat menyimpan data sebesar 4 GB ke dalam database-nya, hanya dapat menggunakan sampai 1 GB memory, dan hanya dapat digunakan di satu CPU pada komputer host. Oracle Database XE mendukung banyak bahasa pemrograman, di antaranya: SQL, PL/SQL Java, C, and PHP Windows .NET
72
07/2006 INFOLINUX
Oracle Application Express C++, ODBC, OLE DB Keuntungan lain dari Oracle Database XE selain free, yaitu kemudahan dalam menggunakannya. Oracle Database XE mempunyai browser management, yaitu Oracle Aplication Express. Jika suka mendesain web, biasanya Anda memakai MySQL untuk penyimpanan database-nya. Apakah mungkin jika untuk database kita memakai Oracle Database XE ini? Jawabannya adalah mungkin. Pada tahun 2005, Oracle dan Zend Technologies membuat kerja sama membangun sebuah solusi untuk membantu developers membangun dan membuat database-driven aplikasi berbasis web dengan menggunakan bahasa pemrograman web yang popular, yaitu PHP. Bulan Oktober 2005, Oracle dan Zend berhasil membuat Zend Core for Oracle (ZCO). ZCO sangat mendukung distribusi PHP5 yang dapat dihubungkan dengan Oracle Database 10g client libraries. Dengan ZCO, para developer dapat menghubungkan PHP dengan Oracle. ZCO adalah inovasi baru bagi developer PHP yang memudahkan mereka dalam membuat dan memanajemen aplikasi dengan robust, scaleable, dan reliable infrastruktur. Produk ini berintegrasi tinggi dengan Oracle Database client libraries dan juga mensupport XML dan Web Service, kadang juga men-support adopsi increase SOA (service-oriented architecture).
Oracle juga membuat PHP Developer Center di Oracle Technology yang didedikasikan untuk PHP development dengan Oracle.
Persiapan Umum Langkah pertama yang akan kita lakukan adalah mempersiapkan apa saja yang dibutuhkan untuk menginstal Oracle Database XE server terlebih dahulu.
Software yang dibutuhkan 1. System penunjang Operating system. Salah satu dari RHEL3 dan RHEL4, Suse SLES-9, Fedora Core4, Red Flag DC Server 5.0/MIRACLE LINUS V4.0/Haansoft Linux 2006 Server(Asianux 2.0 Inside), Debian 3.1. Network Protokol : TCP/IP. RAM. Server component: 256 MB minimum, 512 yang direkomendasikan. Client component: 256 MB. Disk space. Server component: Total: 1.5 GB minimum, Client component :100 MB. Paket yang dibutuhkan: glibc-2.3.2 dan libaio-0.3.96. 2. Space untuk Swap Component Server Kapasitas swap yang sesuai dengan yang dibutuhkan untuk menginstal Oracle Database XE Server, sangatlah penting. Apabila tidak sesuai dengan yang diperlukan, maka tidak akan sukses dalam penginstalan dan ada peringatan bahwa swap space kurang.
www.infolinux.web.id
TUTORIAL ORACLE DATABASE XE Paling tidak 1 GB partisi swap yang dibutuhkan untuk dapat menginstalasi Oracle Database XE.
Hak Akses untuk dapat menginstal Oracle Database XE Anda harus mempunyai hak akses sebagai root untuk dapat menginstal Oracle Database XE
Web Browser Untuk semua server dan client Oracle Database XE, pastikan web browser Anda support Java Script dan HTML 4.0 dan CSS 1.0 standart. Pastikan cookies enable. Contoh Web browser yang memiliki kriteria diatas : Netscape Navigator 7.2 atau lebih Mozilla 1.7 atau lebih Firefox 1.0 atau lebih Untuk keperluan server HTTP, Oracle Database XE tidak menyertai. Sebagai alternatif dari server HTTP, kita bisa memakai Apache. Apache HTTP Server berfungsi untuk memenuhi permintaan dari client dengan browser seperti Mozilla, IE, dsb. Penulis disini memakai OS Fedora Core 4. Untuk mengetahui apakah telah terdapat web server apache httpd server, ketikkan perintah berikut di pada shell : # rpm -qa | grep httpd httpd-2.0.54-10
Prosedur untuk menginstal Oracle Database XE Setelah semua kebutuhan sistem terpenuhi, langkah berikutnya adalah melakukan in-
Gambar 1. Menu login Oracle Database XE.
www.infolinux.web.id
stalasi Oracle Database XE Server. Untuk melakukan hal tersebut, ikuti langkah di bawah ini: 1. Login sebagai root. # su Password:
2. Untuk mendapatkan Oracle Database XE, Anda bisa mengunjungi situs http://www.oracle.com/technology/products/database/xe/index.html. Klik free download dan ikuti instruksi untuk memilih dan men-download file yang sesuai dengan versi Linux yang Anda miliki. Untuk yang memakai Debian: Universal character set: oracle-xeuniversal_10.2.0.1-1.0_i386.deb Western European character set: oracle-xe_10.2.0.1-1.0_i386.deb Untuk semua yang mendukung OS Linux: Universal character set: oracle-xeuniv-10.2.0.1-1.0.i386.rpm. Western European character set: oracle-xe-10.2.0.1-1.0.i386.rpm. 3. Copy oracle-xe-10.2.0.1-1.0.i386.rpm to /tmp, lalu pindah direktory ke /tmp. # cp oracle-xe-10.2.0.11.0.i386.rpm /tmp # cd /tmp
4. Sebagai contoh, jika Anda telah mendownload oracle-xe-universal_10.2.0.11.0_i386.deb, untuk menginstalnya ketikkan perintah di bawah ini : $ dpkg -i downloads/oracle-xeuniversal_10.2.0.1-1.0_i386.deb
Jika Anda men-download oracle-xeuniv-10.2.0.1-1.0.i386.rpm, untuk menginstalnya ketikkan perintah ini: $ rpm -ivh downloads/oracle-xeuniv-10.2.0.1-1.0.i386.rpm
5. Langkah selanjutnya adalah mengonfigurasi. Ketika prompt kembali muncul, ketik: $ /etc/init.d/oracle-xe configure
Berikut beberapa informasi dari hasil konfigurasi di atas: HTTP port untuk Oracle Database XE graphical user interface (default-nya 8080). Port untuk Oracle database listener (default 1521). Password untuk SYS and SYSTEM administrasi user accounts (terserah Anda) Kalau Anda menginginkan database untuk start otomatis ketika komputer dinyalakan. Jika Anda memilih Yes, maka database starts immediately. Setelah itu, coba klik Start menu, otomatis akan ada menu Oracle Database 10g Express Edition.
Testing Oracle Database XE 1. Apabila dalam konfigurasi tadi Oraclenya tidak di set otomatis, maka untuk menjalankan secara manual ketik: $ /etc/init.d/oracle-xe start
Dan untuk menstop: $ /etc/init.d/oracle-xe stop
Gambar 2. Merubah account status user HR.
INFOLINUX 07/2006
73
TUTORIAL ORACLE DATABASE XE Selain itu, bisa juga dari start menu. Pilih Oracle Database 10g Express Edition, Start Database. 2. Buka web browser lalu ketikkan: http://127.0.0.1:8080/apex Note: 127.0.0.1 merupakan host, 8080 merupakan settingan default port TCP. Cara lain, yaitu dari start menu pilih Oracle Database 10g Express Edition, Go To Database Home Page.
SQL> select * from tab; SP2-0640: Not connected
Terdapat peringatan bahwa belum terkoneksi ke database. Untuk dapat connect ke database, kita harus login terlebih dahulu. Misal kita login sebagai account hr yang telah kita unlock tadi. Ketik: SQL> connect hr Enter password: Connected.
3. Isikan username dengan System atau Sys dan Password sesuai dengan password yang Anda setting pada saat instalasi. 4. Lalu klik login.
Setelah connect, maka kita bisa memanipulasi database. Coba ketikkan perintah yang tadi:
Unlock account sample user
Zend Core for Oracle
Untuk membuat sebuah aplikasi dalam Oracle ini, Anda harus login sebagai user yang tercantum dalam database user. Oracle Database XE menyediakan contoh user database dengan sebutan HR. User ini memiliki beberapa table database di skema sampel yang dapat dipakai untuk membuat aplikasi untuk Human Resource Departemen (HRD) fiksional. HR ini masih dalam keadaan “terkunci”. Cara untuk membukanya: 1. Loginlah sebagai System (database administrator). 2. Click icon Administrator, kemudian klik Database Users. 3. Click icon HR schema untuk melihat informasi HR. 4. Di bawah Manage Database User, isi pernyataan: Password and Confirm Password: . Account Status: ganti dengan Unlocked. Roles: Pastikan CONNECT dan RESOURCE terpilih. 5. Klik alter user. 6. Sekarang Anda siap untuk membuat aplikasi pertama Anda.
Setelah membahas Oracle Database 10g Express Edition, sekarang pembahasan tentang Zend Core For Oracle (ZCO). Yang akan dibahas, yaitu cara penginstalan, testing, dan contoh program menggunakan PHP yang akan menggunakan database Oracle. Sebelum itu biasanya untuk file extension PHP dan HTML diletakkan di direktory /var/www/html. Sekarang kita akan membuat direktory public virtual, yaitu public_ html untuk mengakses file PHP. Direktory ini nanti akan diletakkan pada direktory home pada user selain root. Buka file /etc/httpd/conf/httpd.conf menggunakan editor apa saja, misal menggunakan vi.
SQL*PLUS Dalam Oracle Database XE ini juga terdapat SQL*PLUS. Kita bisa melihat database yang ada di Oracle dari SQL*PLUS. Untuk start klik start menu, pilih Oracle Database 10g Express Edition, lalu Run SQL Command Line. Lalu akan muncul command prompt SQL>. Contoh sintaks sederhana untuk dalam oracle adalah melihat tabel yang ada
74
dalam database. Sintaks tersebut adalah:
07/2006 INFOLINUX
# directory, remove the “UserDir disable” line above, and uncomment # the following line instead: # UserDir public_html
Setelah itu, restart service apache. #/etc/init.d/htpd restart
Ini membuat browser dapat membuat request HTTP menggunakan registrasi user di system dan mengambil file dari direktory $HOME/public_html si user. Contoh: http://localhost/~user
SQL> select * from tab;
# vi /etc/httpd/conf/httpd.conf
Hapus tanda (#) di depan kalimat UserDir public_html, dan berikan tanda (#) di depan kalimat UserDir disable. Sebagian httpd.conf yang telah diubah: # # UserDir is disabled by default since it can confirm the presence # of a username on the system (depending on home directory # permissions). # #UserDir disable # # To enable requests to /~user/ to serve the user’s public_html
Loginlah di shell sebagai user biasa, misal user ati, lalu buat direktory public_html pada /home/ati: $ mkdir -p /home/ati/public_html
Berikutnya kita akan menginstalasi Zend Core for Oracle. Ikuti langkah-langkah di bawah ini untuk menginstalasi ZCO.
Install Zend Core For Oracle 1. Download Zend Core for Oracle dari url https://www.zend.com/core/oem_registration.php?access_code=OracleDB. 2. Extrak isi file Zend Core for Oracle sebagai user root: # su Password: <enter password> # tar -xzvf ZendCoreForOraclev1.2.1-Linux-x86.tar.gz
3. Secara otomatis biasanya file tersebut akan tersekstrak ke dalam sub-direktory bernama ZendCoreForOracle-v1.2.1Linux-x86. Untuk memulai proses instalasi ketikkan: #cd ZendCoreForOracle-v1.2.1Linux-x86. #./install
4. Lalu akan muncul halaman “Zend Core for Oracle Installation”, klik OK. 5. Di halaman “Zend Core for Oracle V.1”, bacalah perjanjian lisensinya. 6. Untuk melanjutkan instalasi, klik exit. Klik yes untuk menerima lisensi tersebut. 7. Ketika ada prompt untuk spesifikasi lokasi untuk instal ZCO, terima saja
www.infolinux.web.id
TUTORIAL ORACLE DATABASE XE
Gambar 3. Proses instalasi Zend Core for Oracle.
default-nya (atau isi dengan lokasi yang dituju), klik OK. Installer akan mengekstrak files yang dibutuhkan untuk instalasi. 8. Ketika jendela progress mengidentifikasi semua software yang akan diinstal, maka akan meminta inputan “Please enter the GUI password”. Di tempat pengisian, isilah password yang mudah untuk diingat, contoh Oracle, klik OK. Password itu nantinya berfungsi ketika nanti akan login ke dalam halaman web administrasi Zend Core for Oracle untuk konfigurasi engine directive Zend Core for Oracle ataupun nilai-nilai property yang ada. 9. Ketika terdapat prompt “Verify the password” , masukkan password yang sama dengan yang dimasukkan tadi. Klik OK. 10. Di halaman Zend Core Support, Anda diperbolehkan secara optional mengisi Zend network user ID dan password. Dalam hal ini, diasumsikan bahwa Anda telah registrasi Zend network user ID dan password ketika Anda men-download software ini, maka itu klik No. Jika Anda belum registrasi sebelumnya, tetap klik No, dan register lain waktu menggunakan http://www. zend.com. 11. Pada halaman selanjutnya, Anda memilih web server untuk Zend Core instalasi. Pilih yang pertama, yaitu Apache 2.0.52 (/etc/httpd/conf/httpd.conf), karena Apache sebagai default install dengan Linux. Klik OK. Jika Anda mau yang berbeda, Anda bisa melanjutkan install Zend Core for Linux dengan web server
www.infolinux.web.id
Gambar 4. Konfigurasi Zend Core for Oracle.
yang lain yang telah terinstal di komputer Anda. 12. Di halaman konfirmasi pemilihan web server, di “Do you wish to proceed?”, klik Yes. 13. Di halaman instalasi selanjutnya , ada pernyataan “Please select an installation method for Apache 2.0.52”. Pilihlah pilihan pertama Apache module method, dan klik OK. 14. Selanjutnya, “Please select a virtual server for the Zend Core GUI”, pilih yang pertama, Main Server. klik OK. 15. Setelah memilih virtual server, “Would you like to restart the Web Server” , klik Yes. 16. Ketika terdapat prompt “Would you like to configure another Web Server to use Zend Core”, klik No. 17. Di akhir instalasi berisi list “Thank you for installing Zend Core for Oracle”. Baca informasinya, kemudian klik EXIT. 18. Ketika halaman Zend Core Installation hilang, akan ada pesan yang tampak di jendela command. The Zend Core for Oracle installation is now complete.
3.
4.
5.
6.
7.
Konfigurasi Zend Core for Oracle Pada tahap ini, Anda akan mengonfigurasi environment variables, dan Zend Core Directives yang mengontrol laporan default error pada halaman web. Pada web browser, masukkan URL untuk mengakses Zend Core Administration. 1. http://localhost/ZendCore. Akan ada tampilan halaman selamat datang Zend Core for Oracle. 2. Lalu isilah Password pada tempat yang
8.
disediakan. Password tersebut yang tadi telah diisi pada saat proses instalasi. Klik icon login >>>. Di halaman GUI ZEO administration, tab “Control Center” yang tampil disertai tab “System Overview”. Untuk melihat option configurasi, klik tab configurasi. Di page tab PHP, yang terpilih secara default, menangani Error Handling dan konfigurasi logging dengan klik tanda +. Di page PHP Configuration, untuk memunculkan ketika ada errors pada output script HTML, set display_errors menjadi On. Aplikasi GUI memberitahu jika Anda belum men-save perubahan yang terjadi. Di bawah PHP Configuration page header terdapat pesan “Unsave Information”. Di page PHP Configuration, untuk men-save perubahan konfigurasi, klik link Save Settings. Dengan mensave perubahan yang terjadi, maka Apache server perlu untuk di-restart. Di bawah PHP Configuration page header terdapat pesan “Please Restart Apache” Pada page PHP Configuration, untuk me-restart Apache server klik link Restart Server. Page Configuration PHP akan me-refresh ketika Apache server selesai restart. Pada page Zend Core for Oracle administration klik link Logout. Sekarang dasar konfigurasi telah dibuat, Anda sekarang akan menuju seksi berikutnya untuk mengetes hasil Instalasi Zend Core for Oracle.
Testing Zend Core for Oracle 1. Pastikan PHP telah terinstal di kompu-
INFOLINUX 07/2006
75
TUTORIAL ORACLE DATABASE XE ter Anda. Jika belum yakin, cek dengan perintah:
Jika belum ada, installah PHP. 2. Jika telah terinstal, pertama-tama buat direktory misal contoh1 sebagai anak dari direktory $home/public_html. Dalam contoh ini, $home mengikuti home directory user yang Anda gunakan. Sebagai contoh user ati memiliki home directory /home/ati. $ cd $home/public_html $ mkdir contoh1 $ cd contoh1
3. Untuk mengecek apakah PHP telah berjalan dengan baik, buatlah sebuah file hello.php dengan editor apa saja yang berisi:
4. Buka web browser dan isikan : http://localhost/~<username>/ contoh1/hello.php
5. Maka di browser akan tampil Hai ... , tes aza!.
Koneksi ke Oracle dengan PHP menggunakan Zend Core for Oracle Sekarang kita akan mencoba mengoneksikan PHP dengan Oracle. Untuk connect ke Oracle, kita bisa memakai PHP’s oci_connect(). Sintaks umum: $conn = oci_connect($username,
Gambar 5. Menu Oracle yang terdapat pada Start Menu GNOME.
76
07/2006 INFOLINUX
Contoh:
Setiap koneksi oci_connect akan disimpan di cache. Ketika ada oci_connect() yang kedua kali dalam script yang sama, cache sebelumnya dikembalikan. Cache tersebut akan bersih ketika script tersebut finish. Selain itu, ada beberapa koneksi yang merupakan bagian dari koneksi yang lainnya. Sintaks di bawah ini bisa dipakai untuk bekerja dengan lebih dari satu database dalam waktu yang sama. $conn = oci_new_connect($username, $password, $dbname)
Koneksi yang persisten tidak akan otomatis tertutup saat PHP script berakhir. Tetapi akan terus terbuka untuk dipakai di script yang lain. Ini akan baik apabila intensitas untuk keperluan pembukaan koneksi yang tinggi. $conn = oci_pconnect($username, $password, $dbname)
Di setiap akhir script, koneksi yang terbuka dengan oci_connect() atau oci_new_ connect akan otomatis tertutup dengan sendirinya. Anda bisa menutupnya dengan memakai oci_close($c); Tetapi jika koneksi terbuka dengan oci_pconnect, maka tidak ditutup dengan oci_close(). Ini sama dengan cara kerja yang persisten resource dengan extention PHP yang lainnya. Oci_close() bekerja dengan perhitungan referensi. Hanya ketika semua referensi
kekoneksi selesai, maka koneksi akan segera tertutup. Contoh, $c1 dan$c2 merupakan satu koneksi, tetapi hanya akhir script yang membuat koneksi tertutup. Sekarang kita akan mencoba langsung contoh pemrograman dengan menggunakan PHP script. Namakan dengan contoh2. php dan simpan di /home/public_html/. Isi file contoh2.php: <meta httpequiv=”Content-Type” content=”text/html; charset=ISO-8859-1”> Any Co: Departements