TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Portsentry
Mengamankan Server dengan Portsentry Jika server Anda sering menjadi sasaran scanning keamanan maupun virus jaringan, Anda perlu memasang portsentry untuk menghalau berbagai ancaman tersebut.
P
ortsentry merupakan salah satu program aplikasi firewall, yang bisa melakukan pemblokiran terhadap user yang mencoba melakukan scanning port sistem atau mencoba melakukan aktivitas yang “tidak terpuji”, antara lain melakukan penyusupan melalui alamat port yang ada. Dengan adanya portsentry, semua alamat IP yang melakukan aktivitas yang dianggap “mencurigakan”, baik yang melalui port TCP maupun UDP akan segera diblokir. Sehingga semua user yang menggunakan alamat IP yang sama seperti warnet, perkantoran, dan anggota ISP, tidak akan bisa mengakses server kita lagi.
Download Untuk mendapatkan program portsentry, Anda bisa mengambilnya pada situs sourceforge.net berikut: http://sourceforge.net/projects/sentrytools/.
Instalasi portsentry Untuk melakukan instalasi portsentry, Anda bisa mengikuti petunjuk berikut ini: 1. Pada konsol, lakukan login sebagai root, seperti terlihat pada contoh berikut ini: login: root Password: password (ganti dengan pasword Anda)
2. Dengan asumsi Anda menyimpan file portsentry-1.1.tar.gz pada direktori /home/user, Anda bisa menjalankan langkah-langkah ekstraksi file berikut ini: [root@localhost:~] # cd /usr/ src [root@localhost:src] # tar -zxvf /home/user/portsentry1.1.tar.gz
50
INFOLINUX 05/2005
3. Selanjutnya, Anda masuk ke direktori portsentry-1.1 dan jalankan proses kompilasi sebagai berikut: [root@localhost:src] # cd portsentry-1.1 [root@localhost:portsentry1.1] # make linux [root@localhost:portsentry1.1] # make install
Konfigurasi portsentry Secara default, portsentry akan ditempatkan ke direktori: /usr/local/psionic/portsentry. Kemudian, kita akan melakukan setting konfigurasi portsentry sebagai berikut: 1. Anda masih login sebagai root dan masih berada pada direktori: /usr/src/portsentry-1.1
2. Masuk ke direktori /usr/local/psionic/ portsentry, dengan mengetikkan sintaks perintah sebagai berikut: [root@localhost:portsentry1.1] # cd /usr/local/psionic/ portsentry
3. Lakukan editing file portsentry.conf, dengan mengetikkan sintaks perintah berikut ini: [root@localhost:portsentry1.1] # vi portsentry.conf
4. Selanjutnya, Anda akan menjumpai isi dari file portsentry.conf, seperti berikut ini: # Un-comment these if you are really anal: #TCP_PORTS=”1,7,9,11,15,70, 79,80,109,110,111,119,138, 139,143,512,513,514,515,540, 635,1080,1524,2000,2001,[..]
www.infolinux.web.id
#UDP_PORTS=”1,7,9,66,67,68, 69,111,137,138,161,162,474, 513,517,518,635,640,641,666, 700,2049,31335,27444,34555, [..] # # Use these if you just want to be aware: TCP_PORTS=”1,11,15,79,111, 119,143,540,635,1080,1524, 2000,5742,6667,12345,12346, 20034,27665,31337,32771,32772, [..] UDP_PORTS=”1,7,9,69,161,162, 513,635,640,641,700,37444, 34555,31335,32770,32771,32772, 32773,32774,31337,54321” # # Use these for just barebones #TCP_PORTS=”1,11,15,110,111, 143,540,635,1080,1524,2000, 12345,12346,20034,32771,32772, 32773,32774,49724,54320” #UDP_PORTS=”1,7,9,69,161,162, 513,640,700,32770,32771,32772, 32773,32774,31337,54321”
Baris kalimat di atas menunjukkan port-port UDP/TCP standar yang akan diblokir setiap saat ada client melakukan scanning port-port tersebut. Anda bisa menambahkan port-port yang dibuka atau port-port yang Anda khawatirkan akan di-scan atau ada pihak yang mencoba menyusup ke dalamnya. 5. Anda juga akan menjumpai baris-baris kalimat sebagai berikut: IGNORE_FILE=”/usr/local/ psionic/portsentry/portsentry.
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Portsentry
ignore” HISTORY_FILE=”/usr/local/ psionic/portsentry/portsentry. history” BLOCKED_FILE=”/usr/local/ psionic/portsentry/portsentry. blocked”
IGNORE_FILE menunjukkan portsentry menempatkan file yang berisi useruser dengan alamat IP tertentu yang tetap diperbolehkan melakukan scanning sistem, misalnya dengan alasan untuk percobaan dan penelitian. Dengan demikian, jika ada scanning server dari alamat IP yang sudah terdaftar, portsentry akan mengabaikannya. File yang mencatat alamat IP dari user yang diijinkan melakukan scanning terletak pada file: /usr/local/psionic/portsentry/ portsentry.ignore
HISTORY_FILE merupakan konfigurasi yang menunjukkan tempat portsentry meletakkan file-file, yang berisi catatan/ log dari user-user beserta alamat IP yang sudah diblokir. Isi dari log-log ini diletakkan pada:
iptables -I INPUT -s $TARGET$ -j DROP”
da dengan mengetikkan sintaks perintah sebagai berikut: [Esc]:wq [Enter]
Kegunaan dari kalimat di atas adalah untuk memutus routing dari alamatalamat IP yang terdaftar pada file: /etc/ hosts.deny. Untuk mengaktifkannya, Anda bisa menghapus tanda pagar (#), yang terletak di depan kalimat tersebut. Anda juga harus memastikan jalur (path) direktori letak program iptables berada. Secara default (bawaan), iptables berada pada direktori: /sbin/. Namun jika Anda melakukan instalasi secara terpisah, program iptables akan diletakkan pada direktori: /usr/local/sbin. 7. Selain melakukan pemblokiran dengan iptables, Anda juga bisa melakukan pemblokiran dengan menggunakan tcp_ wrappers, dengan menggunakan parameter sebagai berikut: KILL_HOSTS_DENY=”ALL: $TARGET$ # Portsentry blocked”
8. Selanjutnya, simpan hasil pekerjaan An-
Membuat konfigurasi daemon Selanjutnya, agar portsentry bisa dijalankan secara otomatis setiap saat PC dinyalakan, Anda bisa membuat skrip untuk menjalankan daemon portsentry sebagai berikut: 1. Status Anda saat ini, masih login sebagai root. 2. Pada konsol, pindah ke direktori /etc/ init.d/, dengan mengetikkan sintaks perintah berikut ini: [root@localhost:~] # cd /etc/ init.d/
3. Buat file portsentry, dengan menggunakan vi: [root@localhost:init.d] # vi portsentry
4. Isikan kalimat sebagai berikut: #!/bin/bash # Program /etc/init.d/ portsentry
/usr/local/psionic/ portsentry/portsentry.history
BLOCKED_FILE merupakan konfigurasi, di mana portsentry menempatkan daftar dari user-user beserta alamat IP yang masuk dalam daftar hitam/black list dari portsentry. Daftar dari user-user beserta alamat IP ini ditempatkan pada file: /usr/local/psionic/portsentry/ portsentry.blocked
User-user ini akan diblokir secara permanen oleh portsentry, sehingga selamanya tidak akan diizinkan untuk mengakses server Anda, sampai Anda menghapusnya dari dua file berikut: /usr/local/psionic/portsentry/ portsentry.blocked /etc/hosts.deny
6. Selanjutnya, Anda cari kalimat sesuai contoh di bawah ini: #KILL_ROUTE=”/usr/local/sbin/
www.infolinux.web.id
INFOLINUX 05/2005
51
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Portsentry
# copyright (c) R. Kresno Aji <masaji@atlantisindonesia. com> # description: menjalankan portsentry secara daemon, sehingga portsentry akan \ # dijalankan secara otomatis, setiap kali komputer dinyalakan\ # processname: portsentry # chkconfig: - 3 5 # pidfile: /var/run/ portsentry.pid # config: /etc/sysconfig/ portsentry # source function library . /etc/init.d/functions [ -e /etc/sysconfig/portsentry ] && . /etc/sysconfig/ portsentry
Gambar 1. Portsentry di Sourceforge.
MODE=tcp PORTSENTRY=/usr/local/psionic/ portsentry/portsentry MODE=/etc/sysconfig/portsentry
fi daemon $PORTSENTRY $MODE RETVAL=$? echo [ $RETVAL -eq 0 ] && touch /var/lock/ subsys/portsentry
RETVAL=0 start() { echo -n $”Mengaktifkan portsentry: “ if [ -f “$MODE” ]; then . “$MODE” else echo $”( konfigurasi portsentry belum ada)” exit 0 fi if [ “$MODE” = “none” ]; then echo $”( konfigurasi portsentry belum ada)” exit 0 fi
if [ “$MODE” = “tcp” ]; then
52
INFOLINUX 05/2005
} stop()
{ echo -n $”Menonaktifkan portsentry: “ killproc $PORTSENTRY RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f /var/lock/ subsys/portsentry
start RETVAL=$? ;; condrestart) if [ -f /var/lock/subsys/ portsentry ]; then stop start RETVAL=$? fi ;; status) status portsentry RETVAL=$? ;; *) echo $”Usage: $0 {start|stop| restart|condrestart|status}” exit 1 esac exit $RETVAL
} case “$1” in start) start ;; stop) stop ;; restart|reload) stop
www.infolinux.web.id
5. Selanjutnya, simpan hasil pekerjaan Anda dengan mengetikkan sintaks perintah sebagai berikut: [Esc]:wq [Enter]
6. Ketikkan sintaks perintah berikut ini, agar portsentry bisa berjalan secara otomatis: [root@localhost:init.d] # chkconfig portsentry on
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
TUTORIAL Portsentry
7. Lanjutkan dengan membuat file parameter pada direktori: /etc/sysconfig/ portsentry, dengan mengetikkan sintaks perintah berikut ini: [root@localhost:init.d] # cd /etc/sysconfig [root@localhost:sysconfig] # vi portsentry
8. Isikan kalimat seperti contoh berikut: # Parameter dalam menjalankan portsentry # Copyright (c) R. Kresno Aji <
[email protected]> # portsentry -tcp (basic port-bound TCP mode) # portsentry -udp (basic port-bound UDP mode) # portsentry -stcp (Stealth TCP scan detection) # portsentry -atcp (Advanced TCP stealth scan detection) # portsentry -sudp (“Stealth” UDP scan detection) # portsentportsentry.htmlry -audp (Advanced “Stealth” UDP scan detection) MODE=atcp
9. Selanjutnya, simpan hasil pekerjaan Anda dengan mengetikkan sintaks perintah sebagai berikut: [Esc]:wq [Enter]
10. Pada kalimat tersebut di atas, Anda bisa mengisikan mode sebagai berikut: tcp–untuk monitoring port-port tcp standard. udp–untuk monitoring port-port udp standard. stcp–untuk monitoring port-port tcp dengan mode stealth. sudp–untuk monitoring port-port udp dengan mode stealth. atcp–untuk monitoring port-port tcp dengan mode advance. audp–untuk monitoring port-port udp dengan mode advance. Anda bisa mengubah isi variabel MODE, sesuai dengan kebutuhan Anda. 11. Anda bisa langsung menjalankan portsentry, dengan mengetikkan sintaks
perintah sebagai berikut: [root@localhost:init.d] # /etc/init.d/portsentry start
12. Sampai di sini, Anda sudah bisa mengamankan Server Anda dengan portsentry. Sebagai tambahan, berikut ini log history proses kerja dari portsentry yang selama ini berjalan di server kantor penulis: 1109617208 - 03/01/2005 02:00:08 Host: 81.52.197.215/81.52.197.215 Port: 42 TCP Blocked 1109620048 - 03/01/2005 02:47:28 Host: 82.76.167.211/ 82.76.167.211 Port: 22 TCP Blocked 1109629366 - 03/01/2005 05:22:46 Host: 218.232.187.58 /218.232.187.58 Port: 22 TCP Blocked 1109630388 - 03/01/2005 05:39:48 Host: tamilxtreme.com/ 213.251.132.169 Port: 22 TCP Blocked 1109634981 - 03/01/2005 06:56:21 Host: 219.238.239.10 /219.238.239.10 Port: 22 TCP Blocked 1109640274 - 03/01/2005 08:24:34 Host: ppp82.dyn190. pacific.net.ph/210.23.190.82 Port: 443 TCP Blocked 1109643610 - 03/01/2005 09:20:10 Host: 205.209.130.210/ 205.209.130.210 Port: 22 TCP Blocked 1109643912 - 03/01/2005 09:25:12 Host: adsl-63-194-162-2.dsl.sktn01. pacbell.net/63.194.162.2 Port: 57 TCP Blocked 1109646391 - 03/01/2005 10:06:31 Host: 210.108.91.29/ 210.108.91.29 Port: 901 TCP Blocked 1109648142 - 03/01/2005 10:35:42 Host: ppp155.dyn170.pacific.net. ph/210.23.170.155 Port: 443 TCP Blocked
R. Kresno Aji (
[email protected])
www.infolinux.web.id
INFOLINUX 05/2005
53
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Access Control List
Access Control List pada filesystem Linux Hak akses file Linux yang semula terbatas pada r,w, dan x harus diakui tidaklah selengkap sistem operasi lain. Untunglah, kini, kita dapat mempergunakan sistem hak akses berbasis access control yang lebih baik. Tutorial ini akan membahas bagaimana mengatur filesystem dengan kemampuan acl, serta membahas beberapa cara penggunaan hak akses tersebut.
B
icara soal keamanan server, tentunya tidak akan terlepas dari masalah keamanan filesystem. Ini adalah masalah yang mendasar. Pada sistem multiuser, adalah sangat tidak bijak apabila user yang satu dapat mengakses file milik user lain. Pemilik file sebenarnya dapat saja menutup semua akses dari luar ke file-file miliknya namun, akan kesulitan apabila beliau ingin membagi satu dua file ke pihak lain. Di Linux, kita tidak mengenal istilah membagi file ke user atau group tertentu secara eksplisit. Yang kita miliki adalah hak akses sebagai pemilik, memberi akses kepada group pemilik file dan memberi akses kepada dunia luar. Untuk lebih jelasnya, berikut ini adalah gambaran hak akses sebuah file: -rw-r--r-1 koljeng users 2005-02-10 09:59 test
0
Pada contoh tersebut, file test dimiliki oleh user koljeng, dan user tersebut memiliki hak baca dan tulis (dinotasikan dengan -rw------). Sementara, anggota group users memiliki hak baca saja (dinotasikan dengan ----r-----) dan dunia luar juga memiliki hak baca (------r--). Sebelum hadirnya fasilitas access control di Linux, akan sangat susah apabila user koljeng ingin membagi file hanya kepada satu user, misal user nop (dalam group users) namun tidak ke user lainnya (yang juga dalam group users). Hampir tidak mungkin dengan pendekatan hak akses filesistem apabila tetap menggunakan group users. Kompromi yang sangat umum dilakukan adalah dengan membuat masing-ma-
54
INFOLINUX 05/2005
sing user dalam masing-masing group yang berbeda. Pendekatan ini, setahu penulis digunakan oleh distro Red Hat dan turunannya. Jadi, nama group seorang user adalah sama dengan nama user-nya. Apabila nama usernya koljeng, maka user koljeng ini juga menjadi anggota group koljeng. Dengan demikian, apabila suatu file dimiliki oleh user koljeng dan group koljeng, dan user tersebut ingin membagi file ke user nop (dan hanya kepada nop), maka koljeng dapat menggunakan beberapa cara. Salah satunya adalah dengan mengubah kepemilikan group (membutuhkan hak root), atau dengan menjadikan user nop anggota group koljeng (cara yang lebih baik, tetap membutuhkan root). Walaupun kedua cara tersebut membutuhkan hak root, tapi setidaknya, berbagi file ke user tertentu bisa dilakukan. Pendekatan ini, bahwa seorang user memiliki group sendiri, menurut Anda, apakah merupakan pendekatan yang baik? Menurut penulis, rasanya bukan yang terbaik, walaupun dalam beberapa hal menyelesaikan solusi berbagi file kepada user tertentu (dengan beberapa kompromi). Tapi, harap diingat, bahwa cara seperti ini juga tetap memicu masalah baru, walaupun lebih ringan. Masalah tersebut adalah ketika kita ingin berbagi file kepada beberapa user yang tergabung dalam group tertentu. Apabila dengan gambaran pertama bahwa setiap user menjadi anggota group users, maka ini gampang sekali. Di sistem di mana setiap user memiliki group sendiri, untuk berbagi file kepada beberapa user yang tergabung dalam
www.infolinux.web.id
group tertentu, kita bisa saja menggunakan dua cara berikut. Yang pertama, menjadikan beberapa user tersebut sebagai anggota group kita, atau membuat group baru yang beranggotakan beberapa user tadi. Tentunya, kepemilikan file harus disesuaikan. Di Linux, seorang user memang bisa menjadi anggota beberapa group. Bagi pengguna rumahan, masalah berbagi file ini bukan masalah besar. Namun, penulis telah mendapati beberapa perusahaan yang tidak bisa berpindah hanya karena masalah hak akses ini. Wajar saja karena beberapa sistem operasi lain (hampir semua UNIX komersial, FreeBSD, WIndows Server) memiliki fleksibilitas yang lebih besar dalam hal ini. Ini tentu saja juga termasuk Novell yang sejak versi-versi awalnya sangat memperhatikan masalah hak akses file. Sebuah standar dengan nama IEEE POSIX 1003.1e draft 17, atau yang dikenal sebagai POSIX.1e dibuat untuk standardisasi ACL (Access COntrol List) untuk file dan direktori. Banyak sistem operasi yang kompatibel dengan standar POSIX telah mengadopsi dan mengimplementasikan standar ini. Termasuk Linux 2.6 yang telah mengimplementasikannya dengan sangat baik (di beberapa distro besar yang menggunakan 2.4, backport fasilitas ini mungkin tersedia). Di kernel 2.6, dukungan untuk ACL terdapat dalam hampir semua filesistem populer, yaitu EXT2, EXT3, XFS, ReiserFS, dan JFS, serta tidak tertutup kemungkinan untuk filesystem lain. Sebenarnya, apakah ACL itu? Singkatan ini dalam masalah keamanan sistem cukup
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Access Control List
populer. Dari namanya, Access Control, fungsinya adalah memungkinkan adanya akses control yang fine-grained terhadap resource. Jadi, untuk sistem yang mengimplementasikan ACL dengan sepenuhnya, berbagi resource sangatlah fleksibel untuk dilakukan. Di Windows, kita mengenal pula istilah ACE, yang menunjuk kepada entri yang diikutsertakan dalam ACL. Bagi Anda yang menggunakan Linux sebagai server, atau ingin lebih baik lagi dalam mengelola keamanan filesystem dan lebih mudah dalam membagi resource filesystem, ACL sangat disarankan untuk digunakan.
Kebutuhan sistem dan partisi Kebutuhan sistem untuk dapat menggunakan ACL sangatlah sederhana. Apalagi, jika Anda telah menggunakan kernel 2.6. Yang perlu diperhatikan adalah pada saat melakukan mounting partisi dan paket acl untuk bekerja dengan ACL itu sendiri. Paket acl bisa Anda dapatkan di http://acl.bestbits.at, walau hampir semua distro Linux umum telah menyediakan paket tersebut dalam CDROM distro. Kalau pun tidak, Anda selalu bisa mencari paket untuk distro Anda di Internet. Sebelum bekerja, untuk mudahnya, pastikan Anda telah menggunakan distro dengan kernel 2.6. Fedora Core 2 dan SUSE 9.1 adalah contoh distro dengan kernel 2.6. Kemudian, pastikan Anda tidak mencoba ACL di lingkungan kerja produktif. Sebaiknya Anda memiliki partisi kosong untuk cobacoba, atau Anda dapat mempergunakan partisi home Anda (apabila dibuat berbeda dengan partisi root). Sekali lagi, sebaiknya tidak di lingkungan kerja produktif. Satu catatan, sepertinya Fedora Core 2 tidak memiliki dukungan untuk filesystem ReiserFS untuk di-mount dengan fasilitas ACL. Apabila menggunakan distro Fedora Core 2, Anda bisa mencoba dengan filesistem EXT2, EXT3 ataupun XFS. Artikel ini akan menggunakan distro SUSE, dengan filesystem ReiserFS, dan penulis akan bekerja pada partisi root (pada lingkungan non produktif, untuk coba-coba). Secara default, SUSE telah menambahkan fasilitas ACL tanpa Anda minta. Amatilah fstab Anda. Berikut ini adalah contoh fstab penulis: /dev/hda5 / acl,user_xattr
reiserfs 1 1
/dev/hda1 /data1 auto noauto,user 0 0 /dev/hda2 /data2 auto noauto,user 0 0 /dev/hda3 swap swap pri=42 0 0 devpts /dev/pts devpts mode=0620,gid=5 0 0 proc /proc proc defaults 0 0 usbfs /proc/bus/usb usbfs noauto 0 0 sysfs /sys sysfs noauto 0 0 /dev/cdrom /media/cdrom subfs fs=cdfss,ro,procuid,nosuid,nodev, exec,iocharset=utf8 0 0 /dev/fd0 /media/floppy subfs fs=floppyfss,procuid,nodev, nosuid,sync 0 0
Pada partisi untuk bekerja dengan ACL, dalam hal ini adalah /, pastikan Anda memiliki opsi mount acl seperti pada baris berikut: /dev/hda5 / acl,user_xattr
reiserfs 1 1
Anda bisa menggunakan program mount dengan opsi (-o) acl ketika ingin melakukan mounting tanpa melalui fstab. Setelah Anda memiliki partisi yang dimount dengan fasilitas ini dan dengan paket acl telah terinstal di sistem, maka kita telah siap bekerja dengan ACL.
ACL dan utility lain Ketika ACL diperkenalkan dan diimplementasikan, beberapa utiliti seperti cp, mv, dan ls telah dipersiapkan untuk mampu bekerja dengan ACL. Namun sayangnya, aplikasi untuk archive seperti tar, cpio, pax dan dump tidak akan menyimpan informasi tentang ACL. Apabila Anda tetap ingin mempergunakan archive, sangat disarankan untuk menggunakan program star. Star adalah program yang mirip dengan tar, namun menawarkan fasilitas ACL.
Bekerja dengan acl: get dan set Pada dasarnya, Anda cukup mempergunakan dua program untuk bekerja dengan acl, yaitu getfacl dan setfacl. Yang pertama untuk mendapatkan informasi ACL, yang
www.infolinux.web.id
kedua untuk memberikan hak akses ACL. Mudah diingat, bukan? Untuk mudahnya, kita akan melihat penggunaan getfacl terlebih dahulu. Penulis akan mempergunakan file test yang kita lihat pada awal tulisan. Berikut ini adalah contohnya: $ ls -al test -rw-r--r-- 1 koljeng users 0 2005-02-10 09:59 test $ getfacl test # file: test # owner: koljeng # group: users user::rwgroup::r-other::r--
Pada perintah ls, kita melihat bahwa file test dimiliki oleh user koljeng, group users, dan hak akses adalah bisa dibaca tulis oleh koljeng, bisa dibaca oleh group users dan dunia luar. Pada perintah getfacl, kita dapat melihat hak akses ini apa adanya, tanpa fasilitas ACL. Mulai sekarang, file test ini akan kita buat hanya bisa dibaca tulis oleh user koljeng, sehingga pada ls akan terlihat seperti berikut: -rw------- 1 koljeng users 0 2005-02-10 09:59 test $ getfacl test # file: test # owner: koljeng # group: users user::rwgroup::--other::---
Apabila user nop ingin mengakses file test tersebut, maka pesan kesalahan seperti ini akan ditampilkan: $ cat test cat: test: Permission denied
Setelah melihat penggunaan getfacl, kita akan melihat penggunaan setfacl. Contoh yang pertama adalah mengizinkan user nop untuk membaca file tersebut. Sebagai informasi tambahan, user nop dan koljeng samasama termasuk dalam group users. User lain yang tergabung dalam group user, yaitu
INFOLINUX 05/2005
55
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Access Control List
buskota, tidak diizinkan untuk mengakses file test tersebut. $ setfacl -m u:nop:r-- test
Dengan perintah tersebut, kini user nop telah dapat membaca file tersebut. Kita akan melihat bagaimana tampilan ls dan getfacl terhadap file ini: $ ls -al test -rw-r-----+ 1 koljeng users 0 2005-02-10 09:59 test $ getfacl test # file: test # owner: koljeng # group: users user::rwuser:nop:r-group::--mask::r-other::---
Perhatikanlah tampilan keluaran ls. Ada yang berubah. Yang pertama adalah munculnya hak akses r pada group (padahal kita tidak melakukannya). Yang kedua adalah munculnya tanda + setelah hak akses. Mengenai munculnya r pada hak akses group, ini adalah notasi semata. User buskota, yang tidak memiliki hak baca padahal tergabung dalam group users, tetap tidak dapat membaca file ini. Bukti: $ id uid=1002(buskota) gid=100(users) groups=14(uucp),16(dialout),17(a udio),33(video),100(users) # cat test cat: test: Permission denied
Jadi, sekali lagi, r tersebut hanyalah sebagai penanda untuk penggunaan ACL. Program setfacl dapat pula digunakan untuk menggantikan program chmod. Caranya, sama seperti sebelumnya, hanya kita tidak menyebutkan username di opsi -m. Apabila kita menggunakan -m u:nop: r--, maka untuk menggantikan chmod, kita akan menggunakan -m u::rw-,g::---,o::---, sebagai contoh: $ setfacl -m o::rw-,g::---, o::--- test
Dengan cara yang sama, Anda bisa memberikan hak untuk group lain atau user lain
56
INFOLINUX 05/2005
mempergunakan perintah setfacl ini. Setelah memberikan akses, kita dapat pula menghapus akses user nop pada file test tersebut dengan opsi -x, seperti contoh berikut: $ setfacl -x u:nop test
Kini, user nop tidak lagi dapat membaca file test tersebut. Berikut ini adalah tampilan dari ls dan getfacl: $ ls -al test -rw-------+ 1 koljeng users 0 2005-02-10 09:59 test $ getfacl test # file: test # owner: koljeng # group: users user::rwgroup::--mask::--other::---
Walaupun kita menghapus ACL untuk user nop, file tersebut tetap masih memiliki atribut ACL walaupun tidak ada hak yang diberikan kepada user lain (karena ACL masih berlaku pada pemilik file, tentunya). Untuk meghapus ACL secara keseluruhan pada file tersebut, gunakan opsi --removeall seperti contoh berikut: $ setfacl --remove-all test
Tampilan perintah ls pun kembali normal: $ ls -al test -rw------- 1 koljeng users 0 2005-02-10 09:59 test
Bagi Anda yang ingin bekerja dengan ACL secara rekursif, berikanlah opsi -R seperti pada ls,chmod dan chown. Pembahasan berikut adalah bagaimana mempergunakan file ACL untuk memberikan hak pada file tertentu. Sebagai contoh, berikut ini adalah isi file dengan nama acl. entry: u:nop:r--
Contoh ini hanya berisikan satu baris ACL. Anda selalu bisa menambahkan baris lain, dengan mengulangi u, g atau o. Apabila ANda lebih suka mempergunakan bentuk panjang, Anda bisa mempergunakan user,
www.infolinux.web.id
group dan other. Untuk bekerja dengan file tersebut, berikan opsi -M pada setfacl: $ setfacl -M acl.entry test
Selain opsi -m yang kita selalu gunakan untuk memberikan ACL, kita mengenal pula opsi --set. Perbedaan dengan opsi -m adalah opsi --set akan mengatur ulang ACL, sementara opsi -m adalah untuk memodifikasi ACL. Anda bisa mempergunakan salah satu atau keduanya, tergantung situasi. Apabila ingin memodifikasi, gunaka -m, namun, apabila malas memodifikasi dan ingin mengatur ulang saja, gunakan --set.
Default ACL Kita telah bekerja dengan access ACL dan melihat bagaimana acl dapat dipergunakan untuk berbagi file. Sebenarnya, selain access ACL, ada pula istilah default ACL. Default ACL adalah ACL yang dikenakan pada direktori saja, dan sebagai akibat dari penggunaan default ACL ini, file dan direktori yang dibuat di dalam direktori yang dikenakan default ACL tersebut akan menurunkan dari direktori tersebut. Untuk mengenakan default ACL pada suatu direktori, caranya sama saja dengan cara sebelumnya, namun kita akan menambahkan opsi -d. Contoh: $ setfacl -d --set u::rwx,u:nop: r--,g::---,o::--- dir1/
Berikut ini adalah keluaran getfacl dir1: $ getfacl dir1/ # file: dir1 # owner: koljeng # group: users user::rwx group::--other::--default:user::rwx default:user:nop:r-default:group::--default:mask::r-default:other::---
Dengan ACL, kita bisa mengatur access control tanpa harus menyibukkan sysadmin. Ini tentu berbeda sekali dengan ilustrasi pada awal artikel ketika harus membuat group baru, menambahkan user ke suatu group dan lain sebagainya. Noprianto (
[email protected])
IKLAN INDOGLOBAL
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
rsync
Sinkronisasi File dengan rsync Dalam bekerja dengan lebih dari satu host, pertukaran dan sinkronisasi file adalah hal yang sangat umum dihadapi. Walaupun terdengar sederhana, sinkronisasi file bisa memicu proses maintenance yang berat apabila tidak dikelola dengan baik. Untuk melakukan sinkronisasi file, kita bisa mempergunakan beberapa cara. Salah satunya adalah dengan mempergunakan rsync. Kita akan membahas bagaimana mengatur rsync server dan mempergunakan rsync.
K
alau mau enak, beginilah bayangannya. Kita tinggal di lingkungan wireless di mana tidak perlu ada kabel-kabel yang menghambat. Lalu, semua juga mempergunakan notebook yang baterainya bisa tahan sampai 20 jam sehingga cukup di-charge sehari sekali (atau bahkan kurang). Selanjutnya, ada server yang selalu hidup dan memiliki hardware yang sangat bisa diandalkan. Lalu, sebagai perekatnya, ada koneksi broadband dengan harga yang masuk akal dan senantiasa bisa menyambungkan kita dengan server setiap saat. Dengan demikian, kita bahkan bisa menjalankan aplikasi dari server, sehingga Application Service Provider benar-benar menjadi nyata dan kita bisa menyimpan filefile kita di server tanpa harus selalu melakukan download/upload berulang-ulang untuk sekadar melakukan sinkronisasi file lokal dan remote. Namun, ini semua terlalu ideal. Jadi, untuk saat ini, belum bisa terwujud. Oleh karena itu, kita kembali ke permasalahan utama: sinkronisasi file. Masalah ini mungkin terdengar sederhana dan mengada-ada. Tapi, apabila tidak dikelola dengan baik, sinkronisasi dapat memicu usaha maintenance yang besar. Bayangkan saja skenario berikut, yang cukup sederhana. Anda adalah seorang web developer yang sayangnya tidak selalu terkoneksi ke Internet. Anda membuat website di lokal dan apabila sudah mencapai titik tertentu, Anda meng-upload ke Internet. Melalui FTP atau SCP misalnya. Anda selalu menghapus website yang lama di Internet, dan menimpa dengan yang Anda kirimkan dari lokal. Namun terkadang,
58
INFOLINUX 05/2005
untuk kesalahan kecil pada web, Anda akan kerepotan apabila harus menghapus keseluruhan, meng-update lokal dan mengirimkan kembali ke server. Anda pun masuk ke shell server dan mengedit satu dua hal yang sederhana. Setelah beberapa saat, karena perubahannya kecil, Anda lalu lupa dan kembali bekerja seperti biasa. Minimal terdapat dua hal yang tidak efisien atau bahkan bisa memicu masalah. Pertama, sebenarnya tidak perlu melakukan siklus hapus-upload seperti disebutkan. Yang kedua, Anda mungkin harus mengedit berulang kali file di server karena: 1) Anda lupa mengaplikasikan ke lokal dan 2) ketika melakukan update lagi, Anda juga menghapus perubahan di server karena menghapus file di server tersebut. Untuk kondisi pertama, di mana terjadi siklus hapus-upload, kita sebenarnya memboroskan bandwidth. Karena tidak yakin file mana saja yang berubah, maka yang termudah adalah meng-upload ulang. Untuk yang kedua, kita sebenarnya sedang melakukan hal konyol dengan mengedit berulang-ulang perubahan kecil. Ini hanyalah masalah sederhana dari sinkronisasi file. Yang bekerja juga Anda sendiri. Bagaimana kalau yang bekerja adalah banyak orang, dan lain sebagainya. Yang ingin ditekankan adalah, masalah sinkronisasi file tidak bisa dianggap remeh dan sejak awal, harus dikelola dengan baik. Kita mengenal berbagai cara untuk melakukan sinkronisasi lokal ke remote. Cara pertama telah disebutkan dalam contoh. Menghapus satu bagian dan menimpa dengan bagian lain. Tentu saja, cara ini tidak efisien. Cara kedua yang lebih baik adalah
www.infolinux.web.id
dengan menggunakan program tertentu, seperti rsync. Rsync adalah utiliti yang sangat hebat dari Andrew Tridgell (pembuat SAMBA; website rsync sendiri di host di samba.org: http://rsync.samba.org). Rsync dapat mengcopy hanya perubahan file, dapat pula dikompres dan dapat mempergunakan ssh untuk menjaga keamanan. Ini jauh lebih baik dengan script-script FTP yang mengcopy-kan keseluruhan file dan tidak mempergunakan protokol yang aman. Berikut ini adalah penjelasan lebih lanjut: Meng-copy-kan perubahan. Hanya bagian file yang berubah yang ditransfer. Ini akan membuat proses update berjalan lebih cepat, terutama untuk kita yang menghadapi masalah koneksi Internet lambat. Sebagai perbandingan, FTP akan meng-copy-kan keseluruhan file, walaupun hanya 1 byte yang berubah. Kompresi. Bagian yang berubah tadi, yang akan dikirimkan, masih dapat pula dikompres sehingga akan memperkecil ukuran file yang benar-benar dikirimkan. Rsync mempergunakan zlib, yang sudah teruji. Kerjasama dengan secure shell. Sejak awal, masalah ini harus kita perhatikan. Masalah keamanan adalah masalah fundamental. Rsync dapat mempergunakan ssh untuk mengenkripsi sesi rsync. Di luar semua keunggulan tersebut, berikut ini adalah beberapa fitur utama rsync: Mendukung peng-copy-an link, device, dan dapat mempertahankan atribut seperti pemilik, group, dan hak akses secara umum.
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
rsync
Kita dapat memberikan catatan kepada rsync untuk tidak memasukkan file-file tertentu dalam proses sinkronisasi. Ini juga berlaku untuk CVS, untuk mengabaikan file yang CVS abaikan. Tidak membutuhkan hak root. Melakukan pipelining transfer untuk meminimasi latensi. Mendukung akses anonim dan user. Anda dapat mempergunakan rsync untuk berbagai kebutuhan. Berikut ini adalah kegunaan rsync: Sinkronisasi lokal. Dengan demikian, rsync akan berfungsi seperti halnya program cp biasa, namun dengan kemampuan mendeteksi perubahan yang hebat. Tidak ada koneksi ke host lain dalam hal ini. Untuk meng-copy-kan file dari lokal ke remote mempergunakan remote shell seperti ssh. Untuk meng-copy-kan file dari remote ke lokal mempergunakan remote shell seperti ssh. Untuk meng-copy-kan file dari server rsync ke lokal. Untuk meng-copy-kan file dari lokal ke server rsync. Untuk meng-copy-kan file dari remote ke lokal dengan mempergunakan remote shell seperti ssh, mempergunakanserver rsync di remote. Untuk meng-copy-kan file dari lokal ke remote mempergunakan remote shell seperti ssh, mempergunakan server rsync di remote. Untuk melihat daftar file di remote. Untuk bekerja dengan rsync, kita dapat mengatur sebuah mesin sebagai rsync server dan satu mesin sebagai rsync client. Sebenarnya, terdapat banyak metode yang bisa kita lakukan, namun kita akan mengambil pendekatan sederhana untuk sinkronisasi file lokal ke remote dan sebaliknya. Pertama-tama, Anda harus memiliki rsync terinstal di sistem Anda. Cobalah memberikan perintah rsync dan seharusnya, hampir semua distro telah menginstal program ini pada saat instalasi distro (paket rsync). Apabila belum terinstal, cobalah cari ke CDROM atau DVD distro Anda. Hampir pasti akan ditemukan. Kalaupun tidak, cobalah cari rsync untuk distro Anda di in-
ternet, sebelum Anda melakukan kompilasi dari source code.
Rsync lokal ke lokal Untuk contoh sederhana, sebelum kita melanjutkan ke pembahasan rsync antarhost, kita akan berlatih untuk mempergunakan rsync dari lokal ke lokal. Untuk itu, penulis akan memiliki direktori A dan B, di mana isi B akan diselalu disinkronkan dengan isi A. Harap diperhatikan bahwa kita tidak membutuhkan paket server dan client, cukup paket rsync saja. Paket ini akan berisikan di antaranya program rsyncd dan rsync, yang berfungsi sebagai server dan client. Sebenarnya, keduanya adalah file yang sama (tipe multi call). Isi direktori A: drwxr-xr-x 2004-12-19 drwxr-xr-x 2004-12-19 -rw-r--r-2004-12-19 -rw-r--r-2004-12-19 -rw-r--r-2004-12-19 -rw-r--r-2004-12-19 -rw-r--r-2004-12-19 -rw-r--r-2004-12-19
2 nop users 192 12:02 ./ 4 nop users 96 12:00 ../ 1 nop users 14 12:01 file1 1 nop users 6 12:01 file2 1 nop users 17 12:01 file3 1 nop users 18 12:01 file4 1 nop users 2 12:02 file5 1 nop users 8 12:02 file6
Pada awalnya, direktori B belum berisi apapun. Pertama-tama, kita akan menyinkronisasi terlebih dahulu A dan , agar B memiliki isi yang sama dengan A. Berikut ini adalah perintahnya. $ rsync A/* B/
Untuk tampilan yang lebih baik, barangkali Anda akan memberikan perintah ini: $ rsync --verbose --progress A/* B/ file1 14 100% 0.00kB/s 0:00:00 file2 6 100% 0.00kB/s 0:00:00 file3 17 100% 0.00kB/s 0:00:00
www.infolinux.web.id
file4 18 100% file5 2 100% file6 8 100%
0.00kB/s
0:00:00
0.00kB/s
0:00:00
0.00kB/s
0:00:00
wrote 425 bytes read 140 bytes 1130.00 bytes/sec total size is 65 speedup is 0.12
Umumnya, Anda juga akan memberikan opsi –recursive untuk sinkronisasi rekursif, sehingga, perintah akan menjadi: $ rsync --recursive --verbose -progress A/* B/
Apabila Anda ingin mempertahankan atribut file (hak akses, waktu, group, pemilik), sekaligus meng-copy-kan secara rekursif, termasuk mengopikan symlink dan device, Anda dapat mempergunakan opsi -a. Tambahkan opsi -z, maka file Anda akan sekaligus dikompress. Opsi –verbose bisa dipersingkat menjadi -v. Sayang sekali, tidak terdapat versi pendek dari opsi –progress. Berikut ini adalah contohnya: rsync --progress -avz A/* B/
Satu hal yang harus diperhatikan adalah opsi kompress. Harus diperhatikan bahwa kompresi akan memakan CPU dan memory. Secara default, rsync telah menghindari untuk kompresi ulang file yang susah dikompress seperti file hasil kompresi. Namun, perhatikan juga ukuran file Anda. Apabila contoh file seperti pada contoh, yang memiliki ukuran sangat kecil, maka kompresi sebenarnya tidak diperlukan. Sekarang, kita akan memasuki tahapan selanjutnya, walaupun masih meng-copykan file dari lokal ke lokal. Yang pertama adalah masalah keamanan. Ini tidak sungguh-sungguh diperlukan dalam sinkronisasi lokal. Namun, apabila Anda ingin menerapkannya (dalam sinkronisasi lokal remote), Anda bisa mempergunakan opsi –rsh seperti pada contoh berikut: $ rsync --progress -avz rsh=/usr/bin/ssh A/* B/
--
Berikut ini adalah beberapa catatan penggunaan:
INFOLINUX 05/2005
59
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
rsync
Kita sebenarnya bisa saja menambahkan opsi -W untuk peng-copy-an file secara keseluruhan, tanpa pemeriksaan incremental. Ini tidak disarankan. Anda bisa mempergunakan opsi -n untuk dry run rsync. Dengan opsi ini, file-file yang akan ditransfer akan diperlihatkan. File tidak sungguh-sungguh ditransfer. Sebagai contoh: $ rsync --progress -avz -n A/* B/ building file list ... 6 files to consider file1 file2 file3 file4 file5 file6
wrote 154 bytes read 44 bytes 396.00 bytes/sec total size is 65 speedup is 0.33
Untuk operasi lebih lanjut, Anda mungkin akan memberikan opsi –delete untuk menghapus dari server remote yang juga telah dihapus secara lokal (menghapus apa yang tidak ada di pengirim). Masih berhubungan dengan penghapusan, untuk amannya, kita mungkin akan memberikan opsi –delete-after untuk menghapus file setelah transfer, bukan sebelum. Kita juga akan memberikan opsi –ignore-errors untuk tetap menghapus walaupun terjadi IO error. Berikan juga opsi –max-delete=NUM untuk membatasi jumlah file yang dihapus. Satu opsi yang berguna ketika diaplikasikan antar host adalah opsi –timeout. Dengan penambahan opsi ini, kita bisa mengatur berapa lama timeout dalam satuan detik. Timeout 10 menit cukup masuk akal. Pemberian opsi -c akan membuat checksum selalu dilakukan. Cukup disarankan. Pemberian opsi -R akan membuat rsync mempergunakan relative path name. Bagi Anda yang paranoid, Anda mungkin akan membuat backup dengan opsi –backup. Berhubungan dengan symlink, disa-
60
INFOLINUX 05/2005
rankan Anda memberikan opsi -l atau -a (yang mana di dalamnya telah mengandung opsi -l), sehingga symlink akan dikopikan sebagai symlink. Pemberian opsi -L akan menyebabkan pengcopy-an referent symlink. Opsi -a adalah sama dengan opsi -rlptgoD (rekursif, link, mempertahankan hak akses, mempertahankan waktu, mempertahankan pemilik dan group serta Device). Untuk mempertahankan ACL, Anda akan memberikan opsi -A (telah termasuk -p). Beberapa filesystem memiliki fitur yang tidak ada di filesystem lain. Oleh karena itu, peng-copy-an lintas filesystem mungkin akan menyebabkan masalah tersendiri. Berikan opsi -x untuk pengopian untuk satu filesystem. Pemberian opsi –existing akan menyebabkan rsync hanya akan meng-update file yang telah ada sebelumnya. Pemberian opsi –force akan menyebabkan penghapusan direktori walaupun tidak kosong. Opsi –partial akan menyebabkan rsync tetap mempertahankan file yang baru saja di-copy sebagian. Beberapa pengguna tidak menyarankan fitur ini untuk integrasi data. Pemberian opsi –stat akan memperlihatkan beberapa statistik. Sebagai contoh: $ rsync --progress -avz -stats A/* B/ building file list ... 6 files to consider Number of files: 6 Number of files transferred: 0 Total file size: 65 bytes Total transferred file size: 0 bytes Literal data: 0 bytes Matched data: 0 bytes File list size: 118 Total bytes written: 130 Total bytes read: 20 wrote 130 bytes read 20 bytes 300.00 bytes/sec total size is 65 speedup is 0.43
www.infolinux.web.id
Dalam memanfaatkan bandwidth secara bijak, apalagi untuk sinkronisasi yang tidak memiliki urgensi tinggi, Anda mungkin akan mempergunakan opsi –bwlimit=KBPS. Bandwidth diukur dalam satuan Kilo Byte (bukan bit). Pada pembahasan selanjutnya, kita akan akan membangun rsync server, di mana rsync dijalankan dengan memberikan perintah –daemon.
Mengatur rsync server Untuk menjalankan rsync sebagai server, kita perlu melakukan dua langkah: mengedit file /etc/rsyncd.conf dan mungkin /etc/rsyncd.secret. Menjalankan rsync dengan opsi –daemon. Kita akan melakukan langkah pertama terlebih dahulu. Isi dari rsyncd.conf dalam beberapa hal akan mirip dengan smb.conf (dibuat oleh orang yang sama) sehingga memiliki konfigurasi global dan konfigurasi lokal per “share”. Berikut ini adalah contoh rsyncd.conf yang sederhana: read only = true [MP3] path = /srv/mp3 comment = Beberapa MP3
Sebenarnya, kita tidak harus memiliki bagian global seperti opsi read only = true. Namun, ini disajikan sebagai contoh file konfigurasi sederhana yang terdiri dari bagian global dan lokal. Sementara, kita membuat semacam “share” atau “nick name“ dengan nama MP3, yang akan merujuk ke path /srv/mp3 (yang berisikan beberapa lagu MP3). Kita juga memberikan komentar dengan opsi comment. Selanjutnya, kita akan melanjutkan ke langkah kedua, yaitu menjalankan rsync dengan memberikan opsi –daemon. Berikut ini adalah contohnya: # rsync –daemon
Selanjutnya, kita dapat melakukan sinkronisasi dengan contoh berikut ini. Dalam contoh ini, password akan diminta sesuai user sistem yang aktif.
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
TUTORIAL rsync
$ rsync --progress -avz 192.168.0.50:/srv/mp3 M Password: receiving file list ... 12 files to consider mp3/ mp3/01 - Let’s Hang On.mp3 4503092 100% 1.93MB/s 0:00:02 mp3/01 Pejantan Tangguh.mp3 3321480 100% 1.92MB/s 0:00:01 mp3/02 Itu Aku....mp3 4467106 100% 1.73MB/s 0:00:02 mp3/03 Pemuja Rahasia.mp3 3706420 100% 1.80MB/s 0:00:01 mp3/04 Pilihlah Aku.mp3 4218420 100% 1.65MB/s 0:00:02 mp3/Backstreet Boys - It’s True. mp3 5070848 100% 1.87MB/s 0:00:02
mp3/Cat Stevens - Morning Has Broken.mp3 3142763 100% 1.81MB/s 0:00:01 mp3/Charlene - I’ve Never Been To Me.mp3 9509744 100% 1.85MB/s 0:00:04 mp3/Chicago - You’re Inspiration.mp3 3645568 100% 1.92MB/s 0:00:01 mp3/Clief Richard - The Best Of Me.mp3 10087572 100% 1.74MB/s 0:00:05 mp3/David Tao - Ai Hen Jian Dan. mp3 3342336 100% 1.59MB/s 0:00:02
wrote 236 bytes read 53924526 bytes 1711897.21 bytes/sec
www.infolinux.web.id
total size is 55015349 speedup is 1.02
Beberapa distro seperti SUSE telah menyediakan rsync untuk dijalankan sebagai proses xinetd. Beberapa initialization script juga disediakan sehingga Anda dapat memberikan perintah seperti berikut ini: /etc/init.d/rsyncd start
Merujuk kepada delapan pengunaan rsync yang dibahas pada awal tulisan, Anda sebenarnya tidak harus selalu menjalankan rsync server sebagai daemon untuk sekadar melakukan sinkronisasi file. Berikutnya, kita akan membuat file rsyncd.conf menjadi lebih kompleks dengan penambahan beberapa opsi, sekaligus mempergunakan rsyncd.secret. Berikut ini adalah contohnya: uid = nobody gid = nobody read only = true log format = %h %o %f %l %b log file = /var/log/rsyncd.log
INFOLINUX 05/2005
61
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
rsync
motd file = /etc/rsyncd.motd [MP3] path = /srv/mp3 comment = Beberapa MP3 auth users = userku secrets file = /etc/rsyncd. secrets
Berikut ini adalah isi dari rsyncd.secret: # user:passwd userku:passwordku
User yang tersimpan tidak harus selalu user yang ada di dalam sistem. Perhatikan bahwa file ini seharusnya hanya bisa diakses oleh root. Kita juga mempergunakan opsi motd file, yang akan menampilkan message of the day. Berikut ini adalah isi dari rsyncd.motd: SELAMAT DATANG !!! ================================ ini adalah ucapan selamat datang ini adalah ucapan selamat datang ini adalah ucapan selamat datang Selamat mempergunakan rsync server saya :) ================================
Selain cara koneksi seperti sebelumnya, rsync --progress -avz 192.168.0.50:/srv/mp3 M, Anda juga bisa memberikan perintah berikut ini (khas rsync, menggunakan rsync://). Dengan demikian, Anda bisa sekaligus menentukan user mana saja yang mencoba melakukan koneksi. Dengan cara ini, Anda juga bisa sekaligus mempergunakan “share” atau “nick” yang ditentukan dalam rsyncd. conf. Harap perhatikan tanda :: yang dipergunakan untuk memisahkan host dan “share”. $ rsync --progress -avz rsync://
[email protected]:873::/MP3 M SELAMAT DATANG !!! ================================ ini adalah ucapan selamat datang ini adalah ucapan selamat datang ini adalah ucapan selamat datang Selamat mempergunakan rsync server saya :) ================================ Password: receiving file list ... 12 files to consider
62
INFOLINUX 05/2005
./ 03 Pemuja Rahasia.mp3 3706420 100% 2.41MB/s 0:00:01 04 Pilihlah Aku.mp3 4218420 100% 2.44MB/s 0:00:01 Backstreet Boys - It’s True.mp3 5070848 100% 1.92MB/s 0:00:02 Cat Stevens - Morning Has Broken.mp3 3142763 100% 2.50MB/s 0:00:01 Charlene - I’ve Never Been To Me.mp3 9509744 100% 2.53MB/s 0:00:03 Chicago - You’re Inspiration.mp3 3645568 100% 1.85MB/s 0:00:01 Clief Richard - The Best Of Me.mp3 10087572 100% 2.65MB/s 0:00:03 David Tao - Ai Hen Jian Dan.mp3 3342336 100% 1.50MB/s 0:00:02 wrote 254 bytes read 41824820 bytes 1858892.18 bytes/sec total size is 55015349 speedup is 1.32
Berikut ini adalah beberapa opsi global yang mungkin berguna: syslog facility. Mengizinkan Anda untuk menentukan syslog facility yang dipakai. Anda bisa mempergunakan standar nama yang dipakai di sistem. Nilai defaultnya adalah daemon. Umumnya, opsiopsi berikut tersedia: auth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security, syslog, user, uucp, local0, local1, local2, local3, local4, local5, local6, dan local7. log format. Format log yang dituliskan dalam log file. Ini sangat penting ketika Anda ingin mengimplementasikan parser sendiri untuk log Anda. Umumnya, pengguna akan mempergunakan format standar dan mempergunakan log visualization tool yang umum.
www.infolinux.web.id
log file. Nama log file yang digunakan. motd file. Menentukan message of the day. Selanjutnya, berikut ini adalah opsi yang dipergunakan dalam “share” atau “nick”: comment. Menspesifikasikan komentar. path. Path yang digunakan. use chroot. Apabila diset, maka chroot akan dilakukan pada path. Ini akan memberikan proteksi ekstra, namun sekaligus memiliki kekurangan seperti membutuhkan hak akses root, tidak mampu mengambil symlink yang mengacu diluar root baru. Default dari opsi ini adalah true. Gunakan ini untuk filesistem yang sensitif terhadap masalah keamanan. read only. Menentukan hak akses read only. Berikan hak yang bersesuaian agar update menjadi lebih mudah. uid. Menentukan user yang digunakan pada saat rsync dijalankan sebagai root. gid. Menentukan group yang digunakan pada saat rsync dijalankan sebagai root. auth users. Menentukan user yang valid (tidak harus merupakan user yang aktif di sistem). secrets file. Digunakan bersama auth users untuk menyimpan username dan password. hosts allow. Menentukan host yang diizinkan. hosts deny. Menentukan host yang tidak diizinkan. dont compress. Menentukan file mana yang tidak perlu dikompres (karena tidak akan memberikan pengurangan ukuran yang berarti dan malah memberatkan CPU). Default-nya adalah *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz. Anda mungkin ingin menambahkan MP3 dan OGG misalnya. Setelah rsync server selesai dibuat, Anda bisa mempergunakan juga opsi-opsi yang telah dibahas pada bagian-bagian awal tulisan ini. Dalam pembahasan ini, kita telah melihat betapa mudah dan serunya membangun server rsync. Rsync adalah teknologi yang sangat berguna dalam melakukan mirroring. Selamat mencoba! Noprianto (
[email protected])
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
thttpd
Web Server Sederhana dengan thttpd Untuk melayani CGI atau html biasa, Anda tidak perlu harus selalu menginstal Apache. Web Server thttpd saja barangkali sudah mencukupi. Hemat, kecil, dan luar biasa.
T
ergantung kebutuhan Anda dalam mengatur web server, Anda bisa memilih web server besar seperti Apache atau berbagai web server kecil lainnya. Dari sekian banyak web server kecil yang menarik, thttpd adalah salah satu yang paling menarik. Bagi Anda yang pertama kali mencoba thttpd, dijamin akan terkagetkaget dan sekaligus terkagum-kagum. Sesuai namanya, thttpd (t untuk tiny) adalah web server yang berukuran kecil dan cepat. Thttpd sangatlah sederhana, portable dan juga aman. Dengan ukurannya yang kecil, dalam kondisi tertentu, thttpd sangatlah cepat, bahkan dapat mengalahkan apache. Thttpd dikatakan sederhana karena hanya menangani spesifikasi HTTP/1.1 yang diperlukan. Namun, pengertian yang diperlukan di sini umumnya sudah dapat memenuhi semua kebutuhan untuk melayani data statis, ditambah dengan sedikit data dinamis. Jadi, sudah lebih dari cukup. Sementara, walaupun kecil, thttpd dapat berjalan pada sangat banyak platform, mulai dari FreeBSD, Linux sampai Solaris. Terakhir, untuk semua fasilitas yang sediakan tersebut, thttpd terhitung cukup aman karena berjalan pada modus chroot. Untuk menambah kekaguman Anda, thttpd dapat pula bekerja dengan server side include, aplikasi CGI, proteksi halaman web, halaman web per user dan advanced feature seperti redireksi dan URL-trafficbased throttling di mana yang terakhir masih belum dimiliki oleh web server lain. Artikel kali ini akan membahas bagaimana mengatur web server thttpd, mulai dari instalasi, pembuatan script CGI, halaman per user, dan password protection. Untuk instalasi, thttpd terbukti sungguh sederhana. Tidak macam-macam pustaka
64
INFOLINUX 05/2005
yang dibutuhkan. Apabila Anda menggunakan sistem berbasis RPM (contoh: SUSE atau Fedora), maka instalasi akan lebih mudah lagi. Bagi Anda yang ingin melakukan kompilasi dari source code, dapatkan sourcenya di http://www.acme.com/software/thttpd/. Setelah instalasi, Anda bahkan tidak membutuhkan konfigurasi lebih lanjut. Thttpd bisa mempergunakan file konfigurasi, ataupun langsung memberikan opsi pada saat menjalankan thttpd. Satu catatan penting. Seperti yang kita ketahui bahwa thttpd berjalan pada modus chroot, di mana membutuhkan hak root, maka thttpd harus dijalankan oleh user root. Namun, setelah semua hak root yang diperlukan selesai digunakan, maka thttpd akan kembali dijalankan oleh user biasa. Jadi, tetap aman. Mekanisme ini digunakan oleh cukup banyak aplikasi yang pada awalnya membutuhkan hak root, namun tidak membutuhkan lagi setelah beberapa rutin selesai dijalankan. Salah satu contoh aplikasi dengan cara kerja demikian adalah ntop (network monitor). Chroot adalah system call yang membatasi program untuk bekerja pada suatu tree direktori seolah-olah direktori tersebut adalah root directory (/). Dengan demikian, program tidak dapat lagi mengakses tree filesystem yang sebenarnya karena hirarki tertinggi (/) telah diatur pada direktori aktif tersebut. Apabila mempergunakan SUSE, maka Anda bisa memberikan perintah berikut ini untuk menjalankan thttpd (sebagai root): # rcthttpd start
Setelah thttpd sukses dijalankan, Anda bisa segera membuka web browser Anda dan mengarahkan ke alamat http://localhost/
www.infolinux.web.id
untuk mendapatkan default home page dari web server ini. Apabila Anda menjumpai halaman web, maka instalasi thttpd Anda telah sukses, dan thttpd siap untuk digunakan lebih lanjut. Anda mungkin ingin segera mengubah default homepage tersebut. Masuklah ke document root thttpd Anda. Lokasi document root tergantung pada konfigurasi awal pada saat instalasi ataupun dari konfigurasi Anda. Di SUSE, document root untuk thttpd terletak di /srv/www/htdocs/ seperti halnya Apache. Apabila Anda hanya ingin melayani data statis, Anda bisa segera meng-copy-kan data Anda di dalam direktori tersebut.
CGI di thttpd Satu hal yang hebat dari thttpd adalah kemampuannya dalam menangani CGI walaupun menyebut dirinya sebagai web server sederhana. Satu hal yang harus diingat, thttpd berjalan di modus chroot. Oleh karena itu, Anda harus memastikan bahwa program CGI Anda harus mampu dijalankan pada lingkungan chroot tersebut. Atau, program Anda tidak akan berjalan. Pastikan Anda mengopikan semua file yang dibutuhkan ke dalam direktori yang di-chroot (!), atau Anda membangun aplikasi CGI statis. Sebagai contoh, Anda ingin membangun aplikasi CGI Anda dengan shell. Interpreter yang digunakan adalah /bin/sh. Maka, Anda harus memastikan pustaka apa yang yang diperlukan agar /bin/sh dapat berjalan ketika sedang dalam kondisi chroot. Gunakan program ldd seperti perintah berikut ini: $ ldd /bin/sh linux-gate.so.1 => (0xffffe000) libreadline.so.4 => /lib/ libreadline.so.4 (0x4001e000) libhistory.so.4 => /lib/
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
thttpd
Homepage default thttpd SUSE.
libhistory.so.4 (0x4004a000) libncurses.so.5 => /lib/ libncurses.so.5 (0x40051000) libdl.so.2 => /lib/libdl.so.2 (0x40097000) libc.so.6 => /lib/tls/libc. so.6 (0x4009a000) /lib/ld-linux.so.2 => /lib/ ld-linux.so.2 (0x40000000)
Setelah itu, Anda bisa mulai meng-copykan pustaka-pustaka tersebut sesuai dengan nama direktori dan hirarkinya dalam direktori yang di-chroot oleh thttpd. Anda keberatan? Begitu juga dengan penulis. Meng-copy-kan dengan cara seperti ini adalah konyol. Apalagi kalau Anda hanya ingin membangun CGI sederhana. Tidak akan sebanding dengan usahanya. Namun, kalau Anda ingin mempergunakan PHP misalnya, mau tidak mau, Anda harus meng-copy-kan PHP ke direktori chroot thttpd. Tidak mungkin membangun interpreter secanggih PHP sendiri. Dan, satu saran, apabila Anda sudah membutuhkan PHP, barangkali thttpd sudah tidak tepat bagi ANda. Gunakan saja Apache. Bagi Anda yang keberatan, kita akan mempergunakan cara kedua, yaitu membangun aplikasi statis, yang tidak membutuhkan pustaka apapun ketika aplikasi dijalankan. Semua pustaka yang dibutuhkan sudah dikompilasi ke dalam binary aplikasi itu sendiri. Untuk mengetahui statis atau tidaknya suatu aplikasi, Anda bisa kembali mempergunakan program ldd. Apabila ke-
Directory listing thttpd.
luaran dari ldd adalah seperti keluaran ketika kita memberikan ldd /bin/sh sebelumnya, maka aplikasi adalah aplikasi yang dikompilasi secara dinamis. Namun, apabila keluaran ldd adalah seperti berikut ini, maka aplikasi tersebut dikompilasi secara statis. $ ldd /usr/bin/ldd not a dynamic executable
Kita akan membangun sebuah program CGI yang akan mencetak tabel perkalian 5x5 ke web browser, dan aplikasi ini akan kita kompilasi secara statis. Berikut ini adalah source code aplikasi dalam bahasa C: include <stdio.h> int main() { int i=0; int j=0; printf(“content-type: text/ plain\n\n”); printf(“Hello, ini cgi yang dijalankan oleh thttpd\n”); printf(“Berikut ini adalah tabel perkalian 1 sampai 5\n\n”); for (i=1; i<=5; i++) { for (j=1; j<=5; j++) { printf(“ %02d x %02d = %02d “, i, j, i*j); } printf (“\n”); }
www.infolinux.web.id
return 0; }
Untuk contoh, simpanlah di direktori cgi-bin thttpd Anda (di SUSE, direktori cgi-bin thttpd adalah di /srv/www/htdocs/ cgi-bin) dengan nama test-cgi.c. Setelah itu, lakukanlah kompilasi dengan perintah berikut ini: $ gcc -static -o test-cgi testcgi.c
Opsi -static akan menyebabkan aplikasi kita dikompilasi secara statis. Semua pustaka yang dibutuhkan akan dimasukkan ke dalam binari aplikasi. Tentu saja, binari aplikasi kemudian akan menjadi besar. Di sistem penulis, contoh program tersebut akan berukuran lebih dari 2 MB setelah kompilasi. Anda bisa melakukan stripping dengan program objcopy apabila diinginkan. Setelah kompilasi selesai, Anda bisa menjalankan test-cgi dengan mengarahkan browser Anda ke http://localhost/cgi-bin/ test-cgi. Anda akan mendapatkan sebuah tabel perkalian 5x5. Apabila ingin lebih rapi, sebenarnya kita bisa bisa mengganti content-type dari text/plain ke text/html dan memberikan kode yang Anda inginkan. Tentu saja aplikasi CGI yang kita bangun tidak dapat mencerminkan CGI yang sesungguhnya dalam hidup sehari-hari. Apabila Anda termasuk salah seorang yang nekad dan menjadi sangat fanatik dengan CGI, Anda bisa mempelajari pemrograman
INFOLINUX 05/2005
65
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
thttpd
CGI dari berbagai tutorial di internet. Penulis pernah mendapatkan satu program CGI yang sangat menarik beberapa tahun lalu: sebuah webmail komplit yang hanya membutuhkan 1 buah file! Dibangun dengan C++!
User directory di thttpd Ketika kali pertama berkenalan dengan Apache dan berhasil mengonfigurasi user dir (setelah puluhan kali gagal mengonfigurasi Apache), betapa senangnya penulis ketika bisa menyediakan juga alamat http://server/~user/ yang selama ini hanya bisa penulis dapatkan di Internet. Nah, kemampuan untuk menghadirkan user directory di web server ini bukan hanya milik Apache. Namun, thttpd pun bisa. Dengan demikian, user meletakkan file direktori sendiri tanpa harus menulis ke document root. thttpd datang dengan sebuah program dengan nama makeweb, yang dijalankan oleh setiap user yang ingin memiliki user dir sendiri. Setelah dijalankan, program ini akan membuat direktori dengan nama user di bawah /users/ di document root Anda. Dengan demikian, apabila user nop menjalankan makeweb, maka akan direktori /srv/www/htdocs/users/nop/ akan dibuat. Kepemilikan akan diserahkan kepada user nop dan di dalam home direktori nop, sebuah symlink dengan nama public_html akan diarahkan ke /srv/www/htdocs/users/ nop/ tersebut. Hebat, bukan? Anda tidak harus mengarahkan ke http:// localhost/users/
untuk dapat
Basic Authentication thttpd.
66
INFOLINUX 05/2005
mengakses webpage user. Anda dapat mempergunakan notasi ~ sehingga webpage user dapat diakses dengan pola alamat http:// server/~user. Apabila browser diarahkan ke alamat user, maka directory listing akan ditampilkan. Namun, tampilannya tidak sama persis dengan Apache. Lebih sederhana dan cukup unik.
Basic Authentication Ini adalah salah satu fitur thttpd yang luar biasa. Walaupun kecil dan sederhana, thttpd mengizinkan pula basic authentication seperti halnya Apache dan file .htaccessnya yang mempergunakan Basic Auth. Caranya mudah sekali dan tidak mengutak-atik sedikitpun konfigurasi. Pertama-tama, tujulah direktori yang ingin diprotek. Sebagai contoh, penulis memiliki direktori /srv/www/htdocs/users/ koljeng/secret/. Maka, pertama-tama, penulis akan aktif di direktori tersebut. Setelah itu, gunakan program htpasswd untuk membuat file database user. Sebagai contoh: $ htpasswd -c .htpasswd nop Adding password for nop. New password: Re-type new password:
Dalam contoh tersebut, penulis membuat file database user dengan nama file .htpasswd dan membuat user baru nop. Kini, halaman ~/koljeng/secret/ hanya dapat diakses oleh user nop apabila password yang benar disertakan.
Tabel perkalian 5x5 aplikasi CGI.
www.infolinux.web.id
Advanced Feature Kita akan membahas beberapa fitur lanjutan thttpd. Salah satunya adalah fitur redirect. Anda dapat melakukan redireksi ke alamat lain dengan cara yang mudah. Bagi Anda yang berminat, Anda bisa membaca manual program redirect yang disertakan bersama web server ini. Fitur advanced lainnya adalah throttling. Dengan adanya fitur ini, kita bisa mengatur byte rate maksimal untuk URL atau grup URL. Kita juga dapat mengatur ukuran minimal apabila diinginkan. Throttling bekerja dengan memeriksa URL yang dilayani oleh thttpd. Setelah itu, pencocokan ke dalam throttle file akan dilakukan dan perhitungan bandwith yang telah dikonsumsi akan dilakukan. Selain itu, Anda juga dapat menyediakan virtual host dengan web server kecil-kecil cabe rawit ini. Luar biasa, bukan? Apabila diinginkan, Anda juga dapat membangun custom error untuk kesalahan yang terjadi. Dengan demikian, halaman web Anda akan terlihat lebih ramah. Dan, hal ini bisa dilakukan dengan mudah, sesuai petunjuk di manual. Demikianlah. kita telah sampai pada akhir pembahasan. Ketika kali pertama mencoba thttpd, penulis tidak habis kagum akan kemampuan server kecil ini. Penulis yakin bahwa banyak dari Anda pun akan merasakan yang sama setelah mencoba web server ini. Cobalah sendiri, dan rasakan kehebatannya! Noprianto ([email protected])
IKLAN Roadshow
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Apache Web Server
Apache Web Server di Berbagai Distro Anda yang berkecimpung di dunia web server, pasti pernah mendengar nama Apache, web server standar yang dipaket oleh berbagai macam distribusi Linux. Kemudahan konfigurasi, unjuk kerja yang bagus, dan arsitektur yang modular, menjadikannya sebagai web server yang terkenal.
W
eb server adalah software yang memberikan layanan web. Web server menggunakan protokol yang disebut dengan HTTP (HyperText Transfer Protocol). Anda mempunyai banyak pilihan di dunia open source, tergantung pada keperluan Anda. Dalam tulisan ini akan kita bahas salah satu web server yang sangat terkenal dan menjadi standar de facto setiap distribusi Linux, yaitu Apache. Apache adalah nama web server yang dibuat berbasiskan kode sumber dan ide-ide yang ada pada web server leluhurnya, yaitu web server NCSA. Sesuai namanya, web server NCSA dibuat oleh National Center for Supercomputing Applications. Tidak seperti poryek leluhurnya yang dibiayai oleh pemerintah Amerika, web server Apache dikembangkan oleh sekelompok programer yang bekerja tanpa dibayar oleh siapapun. Mereka mengerjakan proyek ini dengan berbagai macam alasan, akan tetapi alasan yang paling mendasar adalah mereka senang jika perangkat lunak mereka digunakan oleh banyak orang. Apache adalah web server yang kompak, modular, mengikuti standar protokol HTTP, dan tentu saja sangat digemari. Kesimpulan ini bisa didapatkan dari jumlah pengguna yang jauh melebihi para pesaingnya. Sesuai hasil survai yang dilakukan oleh Netcraft, bulan Januari 2005 saja jumlahnya tidak kurang dari 68% pangsa web server yang berjalan di Internet. Ini berarti jika semua web server selain Apache digabung, masih belum bisa mengalahkan jumlah Apache. Saat ini ada dua versi Apache yang bisa dipakai untuk server produksi, yaitu versi mayor 2.0 dan
68
INFOLINUX 05/2005
versi mayor 1.3. Anda bisa menggunakan salah satu dari keduanya. Tapi sangat dianjurkan Anda memakai versi 2.0. Mengapa kita harus memilih Apache? Tentu itu pertanyaan yang terfikir dalam benak Anda. Ya, tentu saja kita harus mempunyai alasan untuk segala hal, termasuk memilih Apache sebagai web server pilihan. Mungkin daftar berikut bisa menjadi jawabannya. Arsitektur modular. Mendukung banyak sistem operasi, termasuk di dalamnya adalah Windows NT/2000/XP dan berbagai varian Unix. Mendukung IP versi 6 (Ipv6). Mendukung CGI (Common Gateway Interface) dan SSI (Server Side Include). Mendukung otentifikasi dan kontrol akses. Mendukung SSL (Secure Socket Layer) untuk komunikasi terenkripsi. Konfigurasi yang mudah dipahami. Mendukung Virtual Host. Pesan kesalahan multi bahasa dan bisa dimodifikasi.
Instalasi Apache Proses instalasi dari paket binary, berbeda dalam berbagai distribusi atau distro Linux. Tergantung pada sistem pemaketan yang digunakan. Berikut ini pembahasan cara instalasi binary untuk tiga distro besar dan cara instalasi dari kode sumber. Untuk pembahasan selanjutnya akan kita pakai contoh instalasi dari kode sumber. Tujuannya, agar mudah diikuti dan seragam untuk berbagai variasi distribusi Linux.
Debian Sarge Debian menggunakan sistem pemaketan
www.infolinux.web.id
.deb. Sistem pemaketan yang mudah tapi berbasis text ini memungkinkan untuk melakukan proses pendeteksian ketergantungan paket secara otomatis. Paket Apache versi 2.0 terdapat dalam CD kedua dari lima belas CDROM distribusi Debian. Dalam contoh ini dipakai versi unstable yang diberi nama kode Sarge. Untuk memasukkan daftar paket dari CD distro, gunakan perintah berikut ini: # apt-cdrom add Using CD-ROM mount point /cdrom/ Unmounting CD-ROM Please insert a Disc in the drive and press enter
Masukkan CD kedua ke dalam CD drive dan tekan tombol [Enter]. Tunggu sebentar, sistem Debian akan membaca informasi semua paket yang terdapat pada CD tersebut. Setelah proses tersebut selesai, jalankan perintah berikut: # apt-get install apache2 Reading Package Lists... Done Building Dependency Tree... Done The following NEW packages will be installed: apache2 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 0B/31.2kB of archives. After unpacking 77.8kB of additional disk space will be used. Media Change: Please insert the disc labeled ‘Debian GNU/Linux testing
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Apache Web Server
_Sarge_ - Official Snapshot i386 Binary-2 (20041225)’in the drive ‘/cdrom/’ and press enter
Masukkan CD ROM kedua distribusi Debian Sarge, kemudian tekan [Enter]. Setelah selesai jalankan skrip untuk menjalankan server web. # /etc/init.d/apache2 start
Fedora Core 3 Fedora Core 3 adalah proyek lanjutan dari Red Hat setelah Red Hat versi 9.0. Yang berarti juga memakai sistem pemaketan perangkat lunak sama dengan Red Hat yaitu RPM (RedHat Package Manager). Untuk menginstal paket Apache, Anda memerlukan CD pertama distribusi Fedora Core 3. Masukkan CDROM pertama tersebut, aktifkan terminal dan jalankan perintah: # mount /media/cdrom/ # rpm -ivh /media/cdrom/Fedora/ RPMS/httpd-2.0.52-3.i386.rpm
Menjalankan server Apache dengan cara menjalankan skrip: # /etc/init.d/httpd start
Kemudian akses dengan browser web kesukaan Anda ke http://localhost.
Mandrake 10 Seperti Fedora Core 3, Mandrake memakai
sistem manajemen paket RPM. Karena memang Mandrake juga distro turunan dari Red Hat. Perbedaannya pada pemaketannya saja. Untuk menginstall Apache di Mandrake sangat mudah dengan menjalankan perintah berikut di terminal (masukkan CD yang diminta dan tekan tombol [Enter], maka pengecekan dependensi dan proses instalasi akan dijalankan oleh URPMI):
################################ 1:apache2-common ###### ################################ 2:apache-conf ###### ################################ 3:apache2-modules ###### ################################ 4:apache2 ###### ################################
# urpmi apache2 To satisfy dependencies, the following packages are going to be installed (1 MB): apache-conf-2.0.48-2mdk.i586 apache2-2.0.48-6mdk.i586 apache2-common-2.0.48-6mdk.i586 apache2-modules-2.0.48-6mdk.i586 Is this OK? (Y/n) Please insert the medium named “Mandrakelinux 10.0 Official Download CD 1” on device [/dev/hdc] Press Enter when ready... installing /mnt/cdrom/Mandrake/ RPMS/apache2-modules-2.0.486mdk.i586.rpm /mnt/cdrom/ Mandrake/RPMS/apache-conf2.0.48-2mdk.i586.rpm /mnt/ cdrom/Mandrake/RPMS/apache22.0.48-6mdk.i586.rpm /mnt/cdrom/ Mandrake/RPMS/apache2-common2.0.48-6mdk.i586.rpm Preparing... ######
Untuk menjalankan server gunakan perintah: # /etc/init.d/httpd start
Instalasi dari kode sumber Proses instalasi dari kode sumber memang sedikit lebih merepotkan daripada instalasi dari paket-paket binary semacam rpm atau deb. Akan tetapi instalasi dengan cara ini tidak bergantung dari distro Linux yang Anda pakai. Jadi bisa dipastikan berjalan di semua distribusi. Sebelum melakukan proses instalasi menggunakan kode sumber sebaiknya Anda periksa sistem Linux Anda apakah sudah terinstal semua perangkat lunak dalam kategori “development”. Karena ini akan diperlukan dalam proses kompilasi. Anda tidak perlu takut-takut melakukan kompilasi dari kode sumber. Karena dalam proses tersebut akan dilakukan pengecekan perangkat lunak yang diperlukan. Bila terjadi kegagalan, perhatikan pesan kesalahan yang terakhir. Penyebab kesalahan yang umum adalah belum terinstalnya paket pengembangan yang diperlukan. Sebelum melakukan proses kompilasi, dapatkan terlebih dahulu file kode sumber yang diperlukan dari url berikut: http://apache.the.net.id/httpd/ httpd-2.0.52.tar.bz2
Jika url tersebut tidak bisa diakses, Anda bisa mencari mirror-mirror lain dari situssitus resmi Apache. Salin file tersebut ke direktori /usr/local/src/. # cp httpd-2.0.52.tar.bz2 /usr/ local/src/
Setelah itu ikuti langkah-langkah berikut: 1. Uraikan file terkompresi di direktori / usr/local/src/ # cd /usr/local/src/ # tar -xjvf httpd-2.0.52.tar. bz2
Gambar 1. Test Page web server Apache.
www.infolinux.web.id
INFOLINUX 05/2005
69
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Apache Web Server
2. Konfigurasi kode sumber sesuai dengan lingkungan pengembangan di komputer tempat Anda bekerja. # cd httpd-2.0.52/ # ./configure --prefix=/usr/ local/apache –-enable-so
dah bisa melihat halaman “Test Page for Apache” seperti ditunjukkan pada gambar 1. Tambahkah perintah ini ke dalam file / etc/rc.local agar setiap kali sistem booting, server web akan dijalankan.
Konfigurasi Apache Dengan konfigurasi ini root direktori httpd server akan terletak pada direktori /usr/local/apache/. Pilihan --enable-so, mengaktifkan dukungan terhadap modul shared object. Tujuannya agar nanti Anda bisa menambahkan modul-modul DSO (Dynamic Shared Object). DSO adalah modul-modul Apache yang diletakkan dalam file-file terpisah, tidak dikompilasi ke dalam Apache web server itu sendiri. Modul-modul tersebut bisa dimuat ketika Apache dijalankan. Yakinkan dalam proses ini tidak ada masalah sebelum Anda melanjutkan ke tahap selanjutnya. Dan kegagalan yang sangat mungkin terjadi adalah di tahap ini. 3. Jalankan proses kompilasi dan instalasi. # make # make install
Perintah make akan mengompilasi semua kode sumber, kemudian perintah make install akan menyalin program-program hasil kompilasi ke direktori masing-masing sesuai tempat yang telah ditentukan pada proses konfigurasi. 4. Salin skrip startup ke direktori startup. # cp support/apachectl /etc/ init.d/ # chmod 755 /etc/init.d/ apachectl
Jika direktori /etc/init.d/ tidak ada dalam distribusi Linux And a, lewati saja langkah ini. 5. Jalankan server web Apache dengan perintah berikut: # /etc/init.d/apachectl start
Jika distro yang Anda pakai tidak memiliki direktori /etc/init.d/ gunakan perintah ini: # /usr/local/apache/bin/ apachectl start
Kemudian coba akses dengan browser alamat http://localhost. Mestinya Anda su-
70
INFOLINUX 05/2005
Apache mempunyai direktori-direktori khusus. Masing-masing digunakan untuk keperluan yang berbeda, yaitu: conf/ untuk menyimpan file-file konfigurasi. logs/ untuk menyimpan file-file log. htdocs/ untuk menyimpan dokumendokumen HTML dan yang lainnya yang akan diakses oleh pengunjung situs Anda. modules/ berisi module-module yang akan dimuat ke memory oleh Apache ketika diperlukan. cgi-bin/ berisi skrip-skrip CGI. Jika Instalasi dilakukan dari paket binary, letak masing-masing direktori ini tergantung pada kebijakan dari masing-masing distribusi Linux. Sebagai contoh letak direktori konfigurasi dan namanya ditunjukkan pada tabel 1. Selanjutnya kita akan membahas konfigurasi Apache berdasarkan instalasi dari kode sumber.
Konfigurasi web server untuk domain Anda mempunyai sebuah domain, katakan domainku.lab. Dan Anda ingin membuat sebuah situs web dengan nama www.domainku.lab. Sengaja diambil contoh domain yang tidak sesuai dengan top level domain, agar tidak mengacaukan jaringan yang sudah terstruktur dengan baik. Tentu saja untuk membuat web server yang bisa diakses oleh orang di seluruh dunia melalui Internet, Anda harus mendaftarkan domain di perusahaan-perusahaan pendaftaran nama domain. Dan tentu saja harus sudah dipersiapkan DNS server. Bagaimana cara mendaftarkan domain dan mempersiapkan DNS server tidak dibahas dalam tulisan ini. Sistem operasi Linux akan menerjemahkan sebuah nama menjadi nomor IP, paling tidak bisa melalui dua cara, yaitu: File /etc/hosts (hosts). DNS server (bind). Urutannya diatur dalam file konfigurasi /etc/host.conf. Contoh isi file ini adalah:
www.infolinux.web.id
order hosts,bind multi on
artinya komputer akan melakukan translasi nama ke nomor IP melalui file /etc/hosts terlebih dahulu. Jika gagal maka akan dicari dari DNS server. Tentu saja akan timbul pertanyaan, dari mana komputer mendapatkan informasi? Informasi ini didapatkan dari file /etc/resolv.conf atau resolver yang contoh isinya seperti berikut: nameserver 202.159.32.2 nameserver 192.168.1.1
Komputer akan mengirimkan permintaan translasi pertama kali pada server dengan nomor IP 202.159.32.2, jika gagal akan mengulang permintaan ke server dengan nomor IP 192.168.1.1. Dalam kasus kita kali ini, kita cukup memasukkan nama web server kita dalam file /etc/hosts. Tambahkan baris berikut dalam file tersebut. 192.168.1.192 www.domainku.lab
Misalkan nomor IP komputer kita adalah 192.168.1.192. Terlebih dahulu cek apakah nama ini bisa diterjemahkan ke nomor IP yang benar dengan perintah ping. # ping -c3 www.domainku.lab PING www.domainku.lab (192.168. 1.192) 56(84) bytes of data. 64 bytes from www.domainku. lab (192.168.1.192): icmp_seq=1 ttl=64 time=0.052 ms 64 bytes from www.domainku. lab (192.168.1.192): icmp_seq=2 ttl=64 time=0.048 ms 64 bytes from www.domainku. lab (192.168.1.192): icmp_seq=3 ttl=64 time=0.059 ms --- www.domainku.lab ping Table 1. Letak konfigurasi web server Apache.
Distribusi Letak File Konfigurasi Debian Sarge Fedora Mandrake Kompilasi dari kode sumber (.tar.gz)
/etc/apache2/ /etc/httpd/ /etc/httpd/ /usr/local/apache/conf/
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
TUTORIAL Apache Web Server
Gambar 2. Pesan larangan akses dokumen web.
Gambar 3. Hasil tampilan web browser setelah web server selesai dikonfigurasi.
statistics --3 packets transmitted, 3 received, 0% packet loss, time 1999ms rtt min/avg/max/mdev = 0.048/0.053/0.059/0.004 ms
Selesai. Sekarang kita harus siapkan web servernya. Edit file konfigurasi Apache dengan editor kesukaan Anda, misalnya vi. # vi /usr/local/apache/conf/ httpd.conf
Semua karakter yang diawali dengan tanda sharp (#) dianggap komentar saja sampai akhir baris. Untuk mempermudah proses pengeditan gunakan fasilitas search editor vi pada mode perintah. Caranya adalah dengan mengetikkan karakter slash (/) diikuti katakunci yang ingin dicari. Misalnya, /ServerName. Untuk menentukan nama host web server, gunakan direktif ServerName. Seperti contoh ini, ServerName www.domainku.lab
Ganti informasi administrator web server dengan direktif ServerAdmin. Ingat, gunakan alamat e-mail yang benar, agar jika terjadi masalah dengan web server Anda, pengunjung akan tahu siapa yang harus dihubungi. Berikan tanda komentar pada baris lain yang mengandung kata kunci ini. ServerAdmin webmaster@domainku. lab
Tentukan juga direktori utama yang dipetakan dengan nama host kita dengan di-
rektif DocumentRoot. DocumentRoot “/home/httpd/html”
Ketika pengunjung menuliskan nama host web server, maka yang diberikan adalah dokumen yang berada di direktori ini. Jangan lupa membuat direktori ini. # mkdir -p /home/httpd/html
Restart web server dengan menjalankan perintah berikut. # /usr/local/apache/bin/ apachectl restart
Sebelum mencoba mengakses web server, kita sediakan terlebih dahulu dokumen html sederhana pada direktori /home/ httpd/html. # echo “Ini web server www. domainku.lab” >> /home/httpd/ html/index.html
Dan coba akses dengan browser dengan mengetikkan nama web server kita, yaitu www.domainku.lab. Jika browser menampilkan seperti gambar 2, Anda tidak perlu panik. Pesan larangan akses ini disebabkan karena direktori yang disebutkan dalam direktif DocumentRoot tidak bisa diakses oleh web server. Sedangkan web server secara default dijalankan oleh user nobody. Perhatikan hasil perintah ps berikut. # ps axuf|grep httpd root 30521 0.0 0.2 560 pts/1 S+ 19:06 \_ grep httpd root 21317 0.0 0.6
www.infolinux.web.id
1820 0:00 3616
1792 ? Ss 16:15 0:00 /usr/local/apache/bin/httpd -k start nobody 29977 0.0 0.7 3616 1904 ? S 18:56 0:00 \_ /usr/local/apache/bin/httpd -k start nobody 29978 0.0 0.7 3616 1816 ? S 18:56 0:00 \_ /usr/local/apache/bin/httpd -k start nobody 29979 0.0 0.7 3616 1816 ? S 18:56 0:00 \_ /usr/local/apache/bin/httpd -k start nobody 29980 0.0 0.7 3616 1816 ? S 18:56 0:00 \_ /usr/local/apache/bin/httpd -k start nobody 29981 0.0 0.7 3616 1816 ? S 18:56 0:00 \_ /usr/local/apache/bin/httpd -k start nobody 30026 0.0 0.7 3616 1816 ? S 18:56 0:00 \_ /usr/local/apache/bin/httpd -k start
Agar web server bisa mengakses direktori tersebut, ada dua cara: Mengubah kepemilikan direktori /home/ httpd/html menjadi milik user nobody, Mengubah hak akses direktori tersebut agar bisa diakses oleh user nobody. Gunakan perintah chown untuk mengubah kepemilikan direktori. # chown -R nobody /home/httpd/ html/
Untuk mengubah hak akses direktori gunakan perintah chmod. # chmod 755 /home/httpd/ # chmod 755 /home/httpd/html/
Gunakan salah satu saja dari alternatif tersebut, kemudian akses lagi web server dengan browser. Seharusnya browser akan menampilkan hasil seperti ditunjukkan pada gambar 3. Selesai. Tugas selanjutnya bagi Anda adalah membangun situs Anda sendiri dengan format HTML. Selamat bekerja! Salman AS ([email protected])
INFOLINUX 05/2005
71
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Wx
Wx dan Perancangan User Interface Bagian 1 dari 2 Artikel Pada artikel sebelumnya, kita telah membahas dasar-dasar penggunaan wx untuk pemrograman GUI multiplatform. Artikel kali ini dan sambungannya akan membahas berbagai topik-topik lanjutan seperti penggunaan internationalization, pembuatan tip of the day, dan bekerja dengan form-form MDI. Selamat mengikuti!
P
ustaka wx dapat Anda gunakan untuk membuat aplikasi yang serius. Banyak sekali aplikasi GUI yang dibangun menggunakan pustaka multiplatform ini. Di pembahasan sebelumnya, kita banyak membahas alasan penggunaan wx sampai contoh program wx yang sederhana. Di artikel sebelumnya, kita membahas pula separasi class dalam setiap file serta separasi deklarasi dan tubuh class. Dasar yang kita bahas sebelumnya akan kita gunakan dalam artikel kali ini. Di pembahasan sebelumnya, secara sekilas kita telah membahas penggunaan beberapa widget seperti button, statusbar, menu, dan text control. Wx menyediakan banyak sekali widget dasar dan lanjutan yang bisa Anda gunakan. Dalam merancang UI, aplikasi yang baik haruslah berpatokan pada panduan interaksi manusia dan komputer yang baik. Dalam penggunaan widget saja, ada banyak patokan yang bisa kita jadikan sebagai panduan dalam mengembangkan aplikasi. Salah satunya adalah dasar pemilihan widget untuk tugas tertentu. Sebagai contoh, apabila user harus memasukkan input dan nilai input tersebut bisa merupakan pilihan terbatas, maka sebaiknya kita mempergunakan widget seperti combobox daripada inputbox. Di artikel ini, kita akan banyak memfokuskan diri pada isu seputar pengembangan user interface. Termasuk di dalamnya adalah penggunaan i18n, tip of the day dan mdi (pada edisi berikut). Semua pembahasan tersebut akan kita kupas untuk menyajikan program terbaik bagi user.
72
INFOLINUX 05/2005
Internationalization Umumnya, program-program yang kita gunakan disajikan dalam bahasa Inggris, selaku bahasa Internasional. Oleh karena itu, pengguna komputer umumnya harus bisa berbahasa Inggris, minimal pasif. Namun di lain sisi, tidak semua user bisa berbahasa Inggris. Dan, jumlahnya banyak. Oleh karena itu, kita mengenal penggunaan bahasa lain dalam penyajian user interface. Pengguna dapat memilih bahasa yang dikuasai untuk menggunakan suatu program. Kita mengenal istilah penyajian dalam berbagai bahasa ini sebagai internationalization (i18n) dan localization (l10n). Masingmasing disebut i18n dan l10n karena terdapat 18 karakter antara huruf pertama dan terakhir dalam internationalization, serta terdapat 10 karakter antara huruf pertama dan terakhir dalam localization. Dahulu, ketika belum banyak pustaka yang datang bersama kemampuan i18n, banyak cara manual yang ditempuh ketika membangun suatu program yang mendukung banyak bahasa. Salah satunya adalah dengan menyajikan sebagian besar string yang ditampilkan kepada user sebagai konstanta, memasukkan ke dalam header dan selanjutnya, berbagai header untuk berbagai bahasa dibuat. Tergantung target, header yang bersesuaian akan digunakan. Cara lain yang digunakan adalah dengan menggunakan teks file dan mengasosiasikan isinya sebagai variabel atau konstanta untuk string yang ditampilkan ke user. Hal ini untuk mengurangi efek rekompilasi seperti
www.infolinux.web.id
yang ditemukan pada cara sebelumnya. Dengan penggunaan text file yang dibaca pada saat runtime, pengubahan tidak mengharuskan adanya rekompilasi. Kedua cara ini dahulu banyak digunakan. Namun, kedua cara tersebut juga memiliki banyak kelemahan. Sebagai contoh, kedua cara tersebut sangatlah manual dan tidak efisien. Selain itu, cara pemrograman pun haruslah disesuaikan. Bukan cara yang baik. Pustaka-pustaka modern seperti wx datang dengan kemampuan untuk memproses penggunaan bahasa. Cara yang digunakan juga sama seperti penggunaan pustaka modern lain. User cukup menyajikan file-file bahasa pendukung dan program secara otomatis akan mengganti teks yang ditampilkan kepada user sesuai bahasa yang dipilih. File-file tersebut dibuat khusus dan disajikan dalam format binari. Sementara, cara pemrograman pun tidak berbeda jauh. Kita hanya perlu mempergunakan macro tertentu. Urusan membaca file bahasa, penggantian teks dan lain sebagainya tidak perlu kita pikirkan lagi. Berikut ini adalah langkah-langkah dalam mempergunakan pemilihan bahasa, dalam contoh program yang sangat sederhana.
Langkah 1: mempersiapkan program sederhana Kita akan membuat program sederhana, yang terdiri dari satu form, dengan sebuah menu, text control dan status bar, yang masing-masing akan menampilkan teks di dalamnya. Teks tersebut akan berganti se-
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Wx
suai bahasa yang dipergunakan. Begitu juga dengan menu dan sub menu di dalamnya. Sebutlah program ini sebagai hello world. Berikut ini adalah file-file yang digunakan: helloword.cpp sebagai tubuh class dari aplikasi. helloword.h sebagai deklarasi class dari aplikasi. MainFrame.cpp sebagai tubuh class frame utama. MainFrame.h sebagai deklarasi class frame utama. makefile.unx sebagai makefile. Setelah kompilasi dilakukan, akan terbentuk file-file sebagai berikut: helloword.o sebagai objek hasil kompilasi class wxHelloWorld. MainFrame.o sebagai objek hasil kompilasi class wxMainFrame. helloworld sebagai binary aplikasi.
{ MENU_QUIT, MENU_ABOUT,
DECLARE_APP (wxHelloWorld) #endif // HelloWorld_H
};
isi helloword.cpp: #include <wx/wx.h> #include “helloworld.h” #include “MainFrame.h” IMPLEMENT_APP (wxHelloWorld) bool wxHelloWorld :: OnInit () { wxMainFrame *frame = new wxMainFrame (_(“Hello World”), wxPoint (50,50), wxSize (200,200));
class wxMainFrame : public wxFrame { public: wxMainFrame (const wxString &title, const wxPoint &pos, const wxSize &size); void OnQuit (wxCommandEvent &event); void OnAbout (wxCommandEvent &event); protected: DECLARE_EVENT_TABLE ();
frame -> Show (TRUE); SetTopWindow (frame);
isi helloworld.h: #ifndef HelloWorld_H #define HelloWorld_H
return TRUE;
private: wxMenuBar *menubar; wxMenu *FileMenu; wxTextCtrl *textctrl;
}; class wxHelloWorld : public wxApp { public: virtual bool OnInit (); };
}; isi MainFrame.h: #ifndef MainFrame_H #define MainFrame_H
#endif// MainFrame_H
enum
isi MainFrame.cpp: #include <wx/wx.h> #include “MainFrame.h” BEGIN_EVENT_TABLE (wxMainFrame, wxFrame) EVT_MENU (MENU_QUIT, wxMainFrame :: OnQuit) EVT_MENU (MENU_ABOUT, wxMainFrame :: OnAbout) END_EVENT_TABLE ()
wxMainFrame :: wxMainFrame (const wxString &title, const wxPoint &pos, const wxSize &size): wxFrame ( (wxFrame *) NULL, -1, title, pos, size ) { CreateStatusBar (2); SetStatusText (_(“Hello World”));
Contoh i18n.
www.infolinux.web.id
INFOLINUX 05/2005
73
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Wx
.cpp.o : $(CXX) -c `wx-config -cxxflags` -o $@ $< all:
$(PROGRAM)
$(PROGRAM): $(OBJECTS) $(CXX) -o $(PROGRAM) $(OBJECTS) `wx-config --libs` clean: rm -f *.o $(PROGRAM)
Situs web wx.
&wxMainFrame :: OnAbout); menubar = new wxMenuBar; }; FileMenu = new wxMenu; FileMenu -> Append (MENU_ ABOUT, _(“&About”), _(“Show about info...”)); FileMenu -> AppendSeparator (); FileMenu -> Append (MENU_ QUIT, _(“&Quit”), _(“Quit from application...”)); menubar -> Append (FileMenu, _(“&File”));
SetMenuBar (menubar); textctrl = new wxTextCtrl (this, -1, wxString (_ (“Halo”)), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE);
void wxMainFrame :: OnQuit (wxCommandEvent &event) { Close (TRUE); }; void wxMainFrame :: OnAbout (wxCommandEvent &event) { wxMessageBox (_(“Hello World Example v0.1”), _(“About Hello World”), wxOK | wxICON_ INFORMATION, this); };
isi makefile.unx: CXX = $(shell wx-config --cxx) PROGRAM = helloworld
Connect (MENU_QUIT, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction) &wxMainFrame :: OnQuit); Connect (MENU_ABOUT, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction)
74
INFOLINUX 05/2005
OBJECTS = helloworld.o MainFrame.o # implementation .SUFFIXES:
.o .cpp
www.infolinux.web.id
Penjelasan program: Kita telah mempersiapkan program untuk dukungan multibahasa. Tidak ada yang berbeda dengan program satu bahasa. Yang berbeda hanyalah penggunaan macro _ () yang digunakan untuk mengapit teks yang ingin kita tampilkan. Dengan demikian, sebagai kesimpulan, untuk mempersiapkan program untuk dukungan multibahasa atau i18n, apa yang perlu dilakukan pada mempergunakan macro _(), _T() atau wxT() dalam penulisan string yang ingin ditampilkan kepada user. Umumnya, apabila kita tidak mempergunakan unicode, maka kita hanya perlu mempergunakan _(). wxT() dan _T() umumnya dipergunakan untuk dukungan unicode. wxT() dan _T() sebenarnya sama saja dan dihadirkan untuk kompatibilitas dengan programer Windows.
Langkah 2: mempersiapkan message catalog Kita asumsikan bahwa kita akan membuat program untuk dua bahasa: Inggris dan Indonesia. Katalog untuk bahasa Inggris tidak perlu kita buat karena kita sudah mempergunakan bahasa Inggris di dalam kode program. Kita sebut bahasa Inggris ini sebagai bahasa default. Katalog yang perlu kita buat hanyalah katalog untuk bahasa Indonesia. Untuk itu, Anda akan membutuhkan program gettext. Program ini tersedia dalam hampir semua semua distribusi Linux. Berikut ini adalah langkah-langkah dalam pembuatan katalog. pembuatan direktori bahasa untuk menampung katalog. Gunakan kode negara sesuai ISO 3166. Sebagai contoh, karena
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
TUTORIAL Wx
kita akan membuat direktori untuk bahasa Indonesia, maka kita akan membuat direktori id di bawah direktori program kita. $ mkdir id $ cd id
Program gettext selanjutnya akan mengambil teks di dalam program kita $ xgettext -C -n -k_ -o helloworld.po ../*.cpp
Perhatikan bahwa -C digunakan untuk menandakan bahwa kita ingin membuat katalog untuk bahasa pemrograman C++. Opsi -k digunakan untuk menandakan nama macro yang digunakan (dalam hal ini kita mempergunakan _). Opsi -o digunakan untuk nama file keluaran. Setelah program ini dijalankan, kita akan memiliki file helloword.po di dalam direktori id kita. Mengedit file helloword.po Kita selanjutnya akan mengedit file hello-
word.po kita dengan editor favorit. Berikut ini adalah contoh helloword.po milik penulis setelah diedit. # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE’S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid “” msgstr “” “Project-Id-Version: PACKAGE VERSION\n” “Report-Msgid-Bugs-To: \n” “POT-Creation-Date: 2004-1211 12:48+0700\n” “PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n” “Last-Translator: FULL NAME <EMAIL@ADDRESS>\n” “Language-Team: LANGUAGE
www.infolinux.web.id
\n” “MIME-Version: 1.0\n” “Content-Type: text/plain; charset=CHARSET\n” “Content-Transfer-Encoding: 8bit\n” #: ../helloworld.cpp:11 ../ MainFrame.cpp:14 msgid “Hello World” msgstr “Hello World” #: ../MainFrame.cpp:20 msgid “&About” msgstr “&Tentang program” #: ../MainFrame.cpp:20 msgid “Show about info...” msgstr “Tampilkan informasi program” #: ../MainFrame.cpp:22 msgid “&Quit” msgstr “&Keluar”
INFOLINUX 05/2005
75
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Wx
#: ../MainFrame.cpp:22 msgid “Quit from application...” msgstr “Keluar dari aplikasi”
digunakan untuk standard wx (file-file .po ini datang bersama wx).
#: ../MainFrame.cpp:24 msgid “&File” msgstr “&Berkas”
Kita akan memodifikasi file helloword.h menjadi berikut ini (penebalan pada perubahan atau penambahan):
#: ../MainFrame.cpp:29 msgid “Halo” msgstr “Hola hola” #: ../MainFrame.cpp:44 msgid “Hello World Example v0.1” msgstr “Contoh Aplikasi Hello World v0.1” #: ../MainFrame.cpp:44 msgid “About Hello World” msgstr “Tentang program Hello World”
Langkah 3: memodifikasi program untuk menggunakan message catalog
#ifndef HelloWorld_H #define HelloWorld_H class wxHelloWorld : public wxApp { public: virtual bool OnInit (); protected: wxLocale locale;
$ msgfmt -o helloworld.mo helloworld.po
Setelah perintah ini dilakukan, Anda akan mendapatkan sebuah file helloword. mo. Ini adalah message catalog bahasa Indonesia untuk program ini. Sampai di sini, pembuatan message catalog telah selesai. Anda dapat melakukan cara serupa untuk bahasa lain. Hanya, untuk cara yang lebih mudah, barangkali Anda ingin mempergunakan program poedit (http:// poedit.sourceforge.net) yang dibuat oleh Vaclav Slavik , salah satu developer Wx. Dengan menggunakan poedit, proses pembuatan message catalog akan menjadi jauh lebih mudah. Satu catatan. Terkadang, Wx sendiri juga memiliki teks-teks yang ditampilkan kepada user. Contoh yang paling baik adalah teks yang dipergunakan dalam Open file dialog. Kata-kata seperti show hidden file adalah bahasa Inggris. Dan, akan terlihat jelek sekali apabila suatu program menggunakan beraneka ragam bahasa sekaligus. Solusinya, dalam membuat message catalog, Anda juga perlu membuat katalog bahasa yang ingin
76
INFOLINUX 05/2005
locale.AddCatalog(_ (“helloworld”)); wxMainFrame *frame = new wxMainFrame (_(“Hello World”), wxPoint (50,50), wxSize (200,200), locale); frame -> Show (TRUE); SetTopWindow (frame);
};
return TRUE; DECLARE_APP (wxHelloWorld)
Membuat message catalog
switch (lng) { case 0: locale. Init(wxLANGUAGE_DEFAULT); break; case 1: locale. Init(wxLANGUAGE_INDONESIAN); break; };
#endif // HelloWorld_H
Kita akan memodifikasi file helloword. cpp menjadi berikut ini (penebalan pada perubahan atau penambahan): #include <wx/wx.h> #include “helloworld.h” #include “MainFrame.h”
};
Kita akan memodifikasi file MainFrame. h menjadi berikut ini (penebalan pada perubahan atau penambahan): #ifndef MainFrame_H #define MainFrame_H enum { MENU_QUIT, MENU_ABOUT,
IMPLEMENT_APP (wxHelloWorld) bool wxHelloWorld :: OnInit () { const wxString langs[] = { _(“(System default)”), _(“Bahasa Indonesia”), }; SetExitOnFrameDelete(FAL SE); int lng = wxGetSingleChoiceIndex(_ (“Please choose language:”), _(“Language”), WXSIZEOF(langs), langs); SetExitOnFrameDelete(TR UE);
www.infolinux.web.id
};
class wxMainFrame : public wxFrame { public: wxMainFrame (const wxString &title, const wxPoint &pos, const wxSize &size, wxLocale &locale); void OnQuit (wxCommandEvent &event); void OnAbout (wxCommandEvent &event); wxLocale &locale; protected:
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Wx
(wxObjectEventFunction) &wxMainFrame :: OnQuit); Connect (MENU_ABOUT, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction) &wxMainFrame :: OnAbout);
};
void wxMainFrame :: OnQuit (wxCommandEvent &event) { Close (TRUE); };
Situs web poedit.
DECLARE_EVENT_TABLE (); private: wxMenuBar *menubar; wxMenu *FileMenu; wxTextCtrl *textctrl; }; #endif// MainFrame_H
Kita akan memodifikasi file MainFrame. cpp menjadi berikut ini (penebalan pada perubahan atau penambahan): #include <wx/wx.h> #include “MainFrame.h” BEGIN_EVENT_TABLE (wxMainFrame, wxFrame) EVT_MENU (MENU_QUIT, wxMainFrame :: OnQuit) EVT_MENU (MENU_ABOUT, wxMainFrame :: OnAbout) END_EVENT_TABLE ()
wxMainFrame :: wxMainFrame (const wxString &title, const wxPoint &pos, const wxSize &size, wxLocale &l): wxFrame ( (wxFrame *) NULL, -1, title, pos, size),
locale (l) { CreateStatusBar (2); SetStatusText (_(“Hello World”));
menubar = new wxMenuBar; FileMenu = new wxMenu; FileMenu -> Append (MENU_ ABOUT, _(“&About”), _(“Show about info...”)); FileMenu -> AppendSeparator (); FileMenu -> Append (MENU_ QUIT, _(“&Quit”), _(“Quit from application...”)); menubar -> Append (FileMenu, _(“&File”));
SetMenuBar (menubar); textctrl = new wxTextCtrl (this, -1, wxString (_ (“Halo”)), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE); Connect (MENU_QUIT, wxEVT_COMMAND_MENU_SELECTED,
www.infolinux.web.id
void wxMainFrame :: OnAbout (wxCommandEvent &event) { wxMessageBox (_(“Hello World Example v0.1”), _(“About Hello World”), wxOK | wxICON_ INFORMATION, this); };
Penjelasan: Secara umum, kita memang menambahkan atribut locale bertipe wxLocale ke dalam kedua class. Kita mengubah constructor untuk wxMainFrame dengan menambahkan atribut locale. Kita juga menambahkan pilihan bahasa pada saat program dijalankan.
Langkah 4: kompilasi, jalankan, dan selesai Lakukanlah kompilasi seperti biasa. Pada saat program dijalankan, pemilihan bahasa akan disajikan kepada user. tergantung pada bahasa yang dipilih, program akan mempergunakan katalog yang bersesuaian. Program ini masih memiliki kekurangan. Hal ini karena beberapa bagian pada helloword.cpp belum dimasukkan sebagai katalog. Pada program sesungguhnya, bahasa yang dipilih oleh user akan disimpan di dalam file konfigurasi. Wx telah menyediakan pustaka untuk penanganan file konfigurasi. Di edisi depan, kita akan melanjutkan dengan tip of the day dan form MDI. Noprianto ([email protected])
INFOLINUX 05/2005
77