TUTORIAL NCURSES
Membangun Text User Interface dengan ncurses
W
alaupun graphical user interface saat ini kian populer, Text user interface tetap memiliki tempat di hati pengguna. Terutama pengguna yang memanfaatkan Linux untuk kebutuhan server dan lainnya yang tidak membutuhkan GUI, namun tetap mengharapkan aplikasi yang mudah digunakan.
Berbeda dengan DOS, walaupun dapat bekerja pada basis command line, fungsionalitas Linux tetaplah sama seperti halnya ketika bekerja pada basis graphical interface. Pada mode command line atau text mode, pengguna tetap dapat melakukan pengeditan dokumen, menjelajahi web, chatting IRC ataupun Yahoo!, mengatur server, memutar lagu (dan bahkan video!), dan lain sebagainya. Graphical user interface memang sangat menarik dan mandatory bagi sebagian pengguna, namun seperti disebutkan pada awal tulisan, text interface tetaplah masih dibutuhkan oleh kalangan tertentu. Sejatinya, pada text mode, kita mengenal dua macam interface: command line interface (CLI) dan text user interface (TUI). Pada CLI, kita memberikan perintah dengan sederet argumen, yang terkadang menjadikan pengguna yang tidak terbiasa menganggap Linux sangat mengerikan. Pada TUI, kita cukup menjalankan aplikasi dan akan berhadapan dengan window-window, dialog dan lain sebagainya (walaupun tetap pada modus teks). Terdapat banyak sekali aplikasi yang berjalan pada modus TUI. Contoh yang sangat populer adalah Mignight Commander. Dalam beberapa kondisi dan bagi sebagian kalangan, TUI bahkan sangatlah powerful. Sebagian user bahkan menganggap Midnight Commander jauh lebih powerful dan mudah digunakan daripada file manager graphical seperti Nautilus ataupun Konqueror.
52
12/2006 INFOLINUX
Sebagai catatan, semua contoh di dalam tulisan ini dibangun di atas sistem Debian GNU/Linux 3.1, namun seharusnya dapat diterapkan tanpa masalah pada sistemsistem lainnya.
Sekilas tentang NCURSES Bagi developer yang bekerja dengan bahasa pemrograman C di DOS, misal menggunakan Turbo/Borland C, header conio bisa digunakan dan developer kemudian bisa memindahkan posisi kursor, mengubah atribut layar, dan melakukan berbagai operasi yang berhubungan dengan layar secara mudah. Sayangnya, conio tidaklah tersedia di Linux. Di jaman dahulu kala (bahkan sampai saat ini), untuk menghadirkan warna dan atribut lainnya, developer di UNIX menggunakan escape character seperti contoh berikut: $ echo “^[[0;36;40mHalo apa kabar” Halo apa kabar
(sebagai catatan, karakter escape ^[ pertama diketikkan dengan cara menekan kombinasi tombol CTRL-V dan menekan tombol Esc). Setelah perintah tersebut dijalankan, tulisan Halo apa kabar akan tampil dengan warna cyan. Terminal akan terus berwarna demikian sampai perintah berikut ini dijalankan: $ echo “^[[0;37;40m”
Bisa kita bayangkan betapa repotnya kalau kita harus terus mengetikkan perin-
tah tersebut hanya untuk mengubah warna misalnya? Agar lebih mudah, developer UNIX kemudian menemukan mekanisme kerja yang dinamakan sebagai termcap. Termcap merupakan sebuah file yang mendaftar semua kapabilitas suatu terminal, lengkap dengan escape sequence yang diperlukan untuk menghadirkan efek tertentu. Mekanisme ini kemudian digantikan dengan terminfo, yang mengijinkan aplikasi untuk melakukan query ke database terminfo untuk mendapatkan karakter kontrol. Cara ini mengharuskan semua aplikasi yang ingin menghadirkan user interface yang lebih ramah harus melakukan query ke database terminfo dan melakukan berbagai aksi ‘low level’ lainnya. Cara ini sangatlah merepotkan. Untunglah, CURSES (cursor optimization) kemudian lahir dan menghadirkan API yang lebih fleksibel dan efisien. CURSES menghadirkan kemampuan untuk memindahkan kursor, membuat window, bekerja dengan warna, bekerja dengan mouse dan sebagainya. Developer tidak perlu khawatir dengan terminal yang digunakan. Di artikel ini, kita akan menggunakan NCURSES (new CURSES), yang merupakan klon CURSES dari System V Release 4.0 (Svr4) dan sepenuhnya kompatibel dengan CURSES versi sebelumnya serta bebas digunakan. Saat ini, pustaka NCURSES dapat ditemukan di dalam (hampir) semua distribusi Linux. Untuk membangun aplikasi dengan NCURSES, kita perlu menginstal
www.infolinux.web.id
TUTORIAL NCURSES dinat aktif adalah 0,0, maka pencetakan akan dilakukan pada sudut kiri atas layar. Harap diperhatikan bahwa koordinat adalah y,x dan bukannya x,y. Ketika kita memanggil printw(), data sebenarnya dicetak pada window imajiner dan tidak diupdate pada layar. Untuk menampilkan perubahan pada layar, kita perlu memanggil fungsi refresh(). Fungsi getch() akan membaca karakter dari window. Sebagai catatan, selalu gunakanlah program man untuk melihat catatan tentang fungsi yang diinginkan. Halaman manual untuk fungsi NCURSES (section 3) boleh dikatakan cukup lengkap. Kita tidak akan membahas detil parameter fungsi. Sebagai gantinya, bacalah manual fungsi tersebut. Sebagai contoh: $ man 3 initscr Window, color dan multitasking sederhana.
Menerima input paket dengan nama semacam libncurses5 dan libncurses5-dev (atau libncurses5-devel).
Hello World Kita akan memulai pembahasan kita dengan contoh aplikasi Hello World berikut ini (disimpan sebagai 1.c). Pembahasan akan dilakukan setelah source code: #include
int main() { initscr(); printw (“Hello World\n”); refresh (); getch(); endwin(); return 0; }
Apabila tombol keyboard ditekan, maka aplikasi akan keluar. Harap diperhatikan bahwa layar akan dikembalikan seperti sebelum aplikasi dijalankan.
Kompilasi aplikasi: $ gcc -o 1 1.c -lncurses
Output aplikasi: Ketika dijalankan, layar baru akan ditampilkan. Tulisan Hello World akan tampil di sudut kiri atas layar. Kursor akan berada di baris bawah tulisan Hello World tersebut.
www.infolinux.web.id
Penjelasan source code: Pertama-tama, kita perlu menggunakan header ncurses.h. Untuk menggunakan ncurses, kita perlu melakukan inisialisasi layar dengan initscr(). Fungsi ini akan melakukan inisialisasi mode curses, melakukan alokasi memori dan struktur data lainnya. Kita akan memiliki sebuah window dengan nama stdscr. Setelah menggunakan ncurses, kita melakukan deinisialisasi dengan memanggil fungsi endwin(). Fungsi ini akan mendealokasikan memori dan struktur data lainnya serta mengembalikan terminal ke mode normal. Jangan lupa memanggil fungsi ini, karena lupa memanggil berarti akan menyebabkan terminal bertindak aneh, seperti: apa yang diketikkan tidak akan tampil, karakter enter seperti tidak bekerja dan lain sebagainya. Apabila hal yang aneh tersebut terjadi, jalankanlah perintah reset. Fungsi printw() bertindak seperti halnya fungsi printf(), namun akan mencetak ke stdscr pada koordinat aktif. Karena koor-
Kita telah bisa mencetak ke layar dengan printw(). Berikut ini kita akan membahas beberapa contoh menerima input.
2.c Contoh pertama adalah bagaimana menerima input satu tombol dan menampilkannya ke layar. Berikut ini adalah source code-nya: #include int main() { int ch; initscr(); raw(); noecho (); keypad (stdscr, TRUE); printw (“Tekan sembarang tombol. Tekan tombol F10 untuk keluar.\n”); while ( 1 ) { ch = getch(); if ( ch == KEY_F(10)) { break; } else { printw (“Tombol yang ditekan %c\n”, ch);
INFOLINUX 12/2006
53
TUTORIAL NCURSES } refresh (); } endwin(); return 0;
Untuk mengetahui apakah tombol yang ditekan merupakan tombol F10, perhatikanlah contoh berikut: ch = getch(); if ( ch == KEY_F(10)) { break; }
}
Kompilasi aplikasi: $ gcc -o 2 2.c -lncurses
2b.c
Output aplikasi: Ketika dijalankan, layar baru akan ditampilkan. Tulisan “Tekan sembarang tombol. Tekan tombol F10 untuk kelaur.” akan tampil di sudut kiri atas layar. User selanjutnya bisa menekan tombol seperti 1,2,3, A, b, C, F1, F2, Ctrl C, Ctrl Z, dan lain sebagainya. User bisa menekan tombol F10 untuk keluar.
Penjelasan source code: Lihatlah juga penjelasan pada contoh hello world sebelumnya. Apakah Anda merasa aneh ketika penekanan kombinasi CTRL-C yang secara default mengirimkan SIGINT tidak menyebabkan aplikasi diinterupsi, namun malah menampilkan tulisan ^C? Lebih aneh lagi, kita tidak memblok signal secara eksplisit. Hal ini disebabkan karena kita memanggil fungsi raw(). Fungsi raw() ini akan mematikan line buffering (sehingga apa yang diketik bisa langsung didapat tanpa harus menekan ENTER terlebih dahulu) dan tidak akan menginterpretasikan interrupt, quit, suspend dan karakter flow control. Lawan dari raw() adalah noraw(). Apabila kita ingin mematikan line buffering namun ingin menerjemahkan interrupt dan karakter flow control, maka gunakanlah cbreak() dan bukannya raw(). Lawan dari cbreak() adalah nocbreak(). Fungsi noecho() akan mematikan echo karakter untuk fungsi getch(). Lawan dari fungsi ini adalah echo(). Keypad() digunakan untuk mengatur agar kita dapat menerima input function key (seperti tombol panah) dan getch() akan mengembalikan nilai tunggal representasi function key tersebut, seperti KEY_LEFT, KEY_F(10).
54
12/2006 INFOLINUX
Contoh berikut ini adalah bagaimana kita dapat menerima input dari user dengan scanw(). Berikut ini adalah source code-nya:
2c.c Contoh berikut ini adalah bagaimana kita dapat menerima input dari user dengan getstr(). Berikut ini adalah source code-nya: #include int main() { char nama[50]; initscr(); printw (“Masukkanlah nama Anda: “);
#include int main() { char nama[50]; initscr();
refresh(); getstr(nama); printw (“Halo %s, selamat datang.\nTekan sembarang tombol untuk keluar...”, nama); refresh(); getch(); endwin(); return 0;
printw (“Masukkanlah nama Anda: “); refresh();
}
scanw(“%s”, nama);
Kompilasi aplikasi: printw (“Halo %s, selamat datang.\nTekan sembarang tombol untuk keluar...”, nama); refresh(); getch(); endwin(); return 0; }
Kompilasi aplikasi:
$ gcc -o 2c 2c.c -lncurses
Output aplikasi: Secara umum sama. Perbedaan hanya pada cara kerja scanw() dan getstr(). Contoh: Masukkanlah nama Anda: clark kent Halo clark kent, selamat datang. Tekan sembarang tombol untuk keluar...
$ gcc -o 2b 2b.c -lncurses
Memindahkan posisi kursor
Output aplikasi: Ketika dijalankan, layar baru akan ditampilkan. Tulisan “Masukkanlah nama Anda:” akan tampil di sudut kiri atas layar. User selanjutnya bisa memasukkan string dan menekan tombol ENTER. Input string pun akan ditampilkan.
Untuk memindahkan kursor, kita bisa memanggil fungsi move(). Berikut ini adalah dua catatan penting: Koordinat adalah y,x dan bukan x,y seperti telah disebutkan sebelumnya. Posisi kursor tidak benar-benar dipindahkan sampai kita memanggil fungsi refresh().
Contoh:
3a.c
Masukkanlah nama Anda: kingkong Halo kingkong, selamat datang. Tekan sembarang tombol untuk keluar...
Pada contoh ini, kita akan menggunakan move untuk meminta input pada posisi tertentu di layar. Berikut ini adalah source code-nya:
www.infolinux.web.id
TUTORIAL NCURSES #include
nya: #include
int main() { char nama[50]; initscr(); move (5, 10); printw (“Masukkanlah nama Anda: “); move (5, 50); refresh(); getstr(nama); move (10, 10); printw (“Halo %s, selamat datang. Tekan sembarang tombol untuk keluar...”, nama); refresh(); getch(); endwin(); return 0; }
int main() { int ch; int x, y; int dx, dy; int col, row; initscr(); raw(); noecho (); keypad (stdscr, TRUE); getmaxyx (stdscr, row, col); x = y = 1; dx = dy = 1; while ( 1 ) { mvaddch (y, x, ‘O’); refresh (); sleep (1); mvaddch (y, x, ‘ ‘); refresh (); x += dx; y += dy;
Kompilasi aplikasi: $ gcc -o 3a 3a.c -lncurses
Output aplikasi: Ketika dijalankan, layar baru akan ditampilkan. Tulisan “Masukkanlah nama Anda:” akan tampil di posisi y=5, x=10. User selanjutnya bisa memasukkan string di posisi y=5, x=50 dan menekan tombol ENTER. Kalimat yang mengandung Input string pun akan ditampilkan di posisi y=x=10.
if (x < 2 || x > col - 2 ) dx = -dx; if (y < 2 || y > row - 2 ) dy = -dy; nodelay (stdscr, TRUE); ch = getch(); if (ch == KEY_F(10)) { break; } else if (ch == KEY_F(9)) { attron (A_BOLD); } else if (ch == KEY_F(8)) { attroff (A_BOLD); }
Contoh: Masukkanlah nama Anda: PINGGIR KALI
Halo PINGGIR KALI, selamat datang. Tekan sembarang tombol untuk keluar...
3b.c Contoh berikut ini akan menampilkan bola pantul di dalam stdscr. Namun, bola pantul kita bukanlah bola pantul biasa, karena ditengah-tengah bola memantul, kita bisa mengatur agar bola ditampilkan tebal ataupun tidak. Berikut ini adalah source code-
www.infolinux.web.id
} endwin(); return 0; }
Kompilasi aplikasi: $ gcc -o 3b 3b.c -lncurses
Output aplikasi: Ketika dijalankan, layar baru akan ditampilkan Bola (yang diwakili oleh karakter O) akan berjalan dari kiri atas dan akan memantul apabila mencapai batas layar. Penjelasan source code: Karena jumlah baris dan kolom terminal bisa berbeda, maka kita pun akan memeriksa maksimal baris dan kolom dengan fungsi getmaxyx(). getmaxyx (stdscr, row, col);
Untuk memindahkan kursor ke posisi tertentu sekaligus mencetak sebuah karakter, kita bisa menggunakan mvaddch(). Di dalam pemrograman C di DOS menggunakan Borland/Turbo C atau Pemrograman pascal menggunakan Turbo Pascal, kita mengenal kbhit() ( C ) atau keypressed (Pascal) untuk memeriksa apakah tombol ditekan. Apabila tombol ditekan, barulah kita memeriksa tombol yang ditekan tersebut. Di NCURSES, kita tetap menggunakan getch() namun dengan memanggil juga fungsi nodelay(), yang akan menjadikan getch() nonblocking. Jika tidak ada tombol ditekan, maka getch() akan mengembalikan ERR. Jika ada tombol ditekan, maka barulah kita proses. Untuk menjadikan bola tebal, kita menggunakan fungsi attron (A_BOLD) dan sebaliknya, kita menggunakan attroff (A_BOLD).
Mengenal window Secara default, kita akan memiliki satu window (seperti disebutkan pada penjelasan aplikasi hello world di awal tulisan), yaitu stdscr. Untuk kegiatan sederhana seperti menulis ke layar, menerima input dan lain sebagainya, maka satu window umumnya cukup. Namun, untuk tugas yang lebih kompleks seperti melakukan animasi, maka sangat disarankan untuk bekerja dengan window-window (tergantung kebutuhan). Sampai bagian ini, kita telah membahas berbagai fungsi seperti getch(), printw(), refresh(), scanw(), getstr(), move() dan mvaddch(), dan lain sebagainya. Fungsi-fungsi tersebut dimaksudkan untuk bekerja dengan window stdscr.
INFOLINUX 12/2006
55
TUTORIAL NCURSES Untuk bekerja dengan window, kita akan menggunakan fungsi yang nama fungsinya ditambahkan w seperti: wgetch(), wprintw(), wrefresh(), wscanw(), wgetstr(), wmove() dan mvwaddch(), dan lain sebagainya. Fungsi-fungsi tersebut juga sebenarnya bisa diterapkan pada stdscr. Fungsi-fungsi tanpa embel-embel w yang kita bahas pada contoh-contoh sebelumnya digunakan untuk mempermudah kita. Sebagai catatan, dalam menentukan ukuran window, sebaiknya tidak melakukan ‘hard code’ ukuran window, namun selalu menggunakan proporsi sesuai ukuran kolom dan baris terminal.
4.c Berikut ini adalah contoh pertama penggunaan window. Kita akan membangun satu aplikasi yang terdiri dari dua window. Tak lupa, aplikasi ini juga akan membahas perpindahan dari window satu ke window lain. Berikut ini adalah source code-nya: #include int main() { WINDOW *win1; WINDOW *win2; int ch; char msg[] = “active”; initscr(); cbreak(); noecho(); keypad (stdscr, TRUE);
2, msg);
Aplikasi yang lebih kompleks
} else if (ch == KEY_F(2)) { mvwprintw ( win1, 2, 2, “ “); mvwprintw ( win2, 2, 2, msg); } else if (ch == KEY_F(10)) { break; } wrefresh(win1); wrefresh(win2); } endwin(); }
Contoh berikut merupakan contoh terakhir di dalam tulisan ini. Berikut ini adalah fitur aplikasi: Ketika aplikasi dijalankan, tiga buah window akan dibuat. Window satu adalah window kiri, window dua adalah window kanan, dan window tiga adalah window bawah. Window satu akan berisikan bola pantul, window dua akan berisikan teks untuk mencoba warna dan window tiga lebih bersifat sebagai information bar. Pengguna dapat berpindah antara window 1 dan window 2. Aplikasi ini akan mencoba bekerja seperti sistem multitasking sederhana di dalam aplikasi ini sendiri, dalam pengertian, bola pantul dapat terus memantul walaupun kita berpindah window dan melakukan hal lainnya. Contoh ini juga sekaligus memperkenalkan cara bekerja dengan warna.
Kompilasi aplikasi: $ gcc -o 4 4.c -lncurses
Output aplikasi: Ketika dijalankan, layar baru akan ditampilkan. Dua buah window akan ditampilkan. Ketika tombol F1 ditekan maka window pertama akan menjadi aktif. Ketika tombol F2 ditekan, maka window kedua akan menjadi aktif. Window aktif akan diberikan tulisan active. Ketika tombol F10 ditekan, maka aplikasi keluar. Penjelasan source code: Deklarasi sturktur data window:
refresh(); win1 = newwin (10, 40, 5, 5); box (win1, 0, 0); wrefresh (win1);
WINDOW *win1; WINDOW *win2;
Pembuatan window, pemberian border window dan refresh window: win1 = newwin (10, 40, 5,
win2 = newwin (6, 60, 16, 10); box (win2, 0, 0); wrefresh (win2); while ( 1 ) { ch = getch(); if (ch == KEY_F(1)) { mvwprintw ( win2, 2, 2, “ “); mvwprintw ( win1, 2,
56
12/2006 INFOLINUX
5); box (win1, 0, 0); wrefresh (win1); win2 = newwin (6, 60, 16, 10); box (win2, 0, 0); wrefresh (win2);
Mencetak di window pada posisi tertentu dengan mvwprintw. Harap perhatikan, koordinat selalu y,x.
Berikut ini adalah source code aplikasi (5.c): #include #include <string.h> int main() { WINDOW *win1; WINDOW *win2; WINDOW *win3; int ch; char msg[] = “active”; char msg2[] = “TEST STRING”; int col, row; int col_win1, row_win1; int col_win2, row_win2; int color_pair = 0; int active_win = 0; unsigned int clock_tick = 1; int count; int dx,dy,x,y; x = y = dx = dy = 1; initscr(); cbreak(); noecho(); keypad (stdscr, TRUE); start_color(); getmaxyx (stdscr, row, col);
www.infolinux.web.id
TUTORIAL NCURSES refresh(); win1 = newwin (row-4, (col10)/2, 1, 1); box (win1, 0, 0); wrefresh (win1); getmaxyx (win1, row_win1, col_win1);
1, 1, “
init_pair COLOR_BLACK); init_pair COLOR_BLACK); init_pair COLOR_WHITE); init_pair COLOR_WHITE);
(1, COLOR_RED, (2, COLOR_GREEN, (3, COLOR_BLACK, (4, COLOR_RED,
while ( 1 ) { clock_tick++; if (clock_tick > 1000) clock_tick = 0; if (clock_tick % 7 == 0) { nodelay (stdscr, TRUE); ch = getch();
1, 1, “
if (ch == KEY_F(1)) { mvwprintw ( win2, “); mvwprintw ( win1,
1, 1, msg);
endwin(); wrefresh(win1); wrefresh(win2);
}
active_win = 2;
$ gcc -o 5 5.c -lncurses
Kompilasi aplikasi: } else if (ch == KEY_F(3)) { if (active_win == 2) { color_pair++; if (color_pair > 4) color_pair=1; wattron(win2, COLOR_PAIR(color_pair)); mvwprintw ( win2, row_win2/2, (col_win2strlen(msg2))/2, msg2); wattroff(win2, COLOR_PAIR(color_pair)); wrefresh(win2); } } else if (ch == KEY_F(10)) { break; } } else if (clock_tick % 11 == 0) { mvwaddch (win1, y, x, ‘o’); wrefresh (win1); for (count=0; count < 2000000; count++); mvwaddch (win1, y,
}
www.infolinux.web.id
Penjelasan source code: Lihatlah juga pada penjelasan contoh 4.c. Multitasking kita hadirkan dengan terus menambahkan counter (dalam contoh ini, variabel clock_tick) dan mengembalikan ke 0 ketika mencapai batas tertentu (dalam contoh ini: 1000), di dalam sebuah perulangan abadi. Kemudian, setiap beberapa saat, kita akan bergantian memroses tugas yang diinginkan (mewakili setiap task). Dalam contoh ini, apabila clock_tick habis dibagi 7, maka kita akan memroses penekanan tombol dan menentukan window aktif. Kita juga akan mengubah warna teks apabila user menekan tombol F3 dan window aktif adalah window dua. Apabila clock_tick habis dibagi 11, maka kita akan memproses bola pantul. Jeda antara waktu tersebut sangatlah cepat sehingga seolah-olah, dua tugas jalan bersamaan dalam satu waktu. Untuk menghadirkan warna, kita menggunakan fungsi start_color(). Di NCURSES, warna selalu berpasangan antara warna foreground dan background. Untuk membuat pasangan warna, kita menggunakan fungsi init_ pair(). Untuk mengubah warna di dalam window, kita menggunakan wattron(). Perhatikanlah macro COLOR_PAIR(n) di potongan kode tersebut.
x, ‘ ‘); wrefresh (win1);
wrefresh(win1); wrefresh(win2); active_win = 1;
if (x < 2 || x > col_win1 - 3 ) dx = -dx; if (y < 2 || y > row_win1 - 3 ) dy = -dy; } }
1, 1, msg);
win2 = newwin (row-4, (col10)/2, 1, ((col-10)/2)+1); box (win2, 0, 0); wrefresh (win2); getmaxyx (win2, row_win2, col_win2); win3 = newwin (3, col-10, row3, 1); box (win3, 0, 0); mvwprintw (win3, 1, 1, “F1=Window 1 F2=Window 2 F3=Change Color F10=Quit”); wrefresh (win3);
else if (ch == KEY_F(2)) { mvwprintw ( win1, “); mvwprintw ( win2,
x += dx; y += dy;
Sampai di sini dulu perkenalan kita dengan NCURSES. Di kesempatan lain, kita akan membahas lagi contoh lain bekerja dengan NCURSES. Selamat mencoba! Noprianto [[email protected]]
INFOLINUX 12/2006
57
TUTORIAL SSHFS DAN FUSE
Mount Filesistem dengan SSHFS dan FUSE
B
agi Anda yang sering bekerja meng-copy file menggunakan SCP atau SFTP ke server yang menjalankan SSHD, menjalankan perintah scp dan sftp terus menerus tentunya sangat merepotkan. Bagaimana kalau kita mount saja home directory kita di server yang menjalankan SSHD ke direktori lokal?
Dengan melakukan mount ke direktori lokal, tentunya kita lebih mudah untuk mengakses file-file tersebut dibandingkan ketika kita harus melakukan scp atau sftp. Ketika ingin mengakses file video berukuran besar misalnya, dengan sistem mount, kita bisa langsung memutar video tersebut. Dengan menggunakan scp atau sftp, kita harus mengopinya terlebih dahulu. Proses peng-copy-an file dengan sistem mount juga jauh lebih mudah dan dapat menggunakan file manager favorit Anda. Bagaimana hal yang hebat dan canggih ini mungkin terjadi? Kita perlu berterimakasih atas hadirnya FUSE dan SSHFS. Ditulisan ini, kita akan membahas cara kompilasi dan implementasi FUSE dan SSHFS langkah demi langkah. Sebagai catatan, implementasi FUSE dan SSHFS ditulisan ini dilakukan pada sistem Debian GNU/Linux 3.1, namun harusnya dapat diikuti oleh pengguna sistem lain tanpa masalah berarti. Tulisan ini juga sepenuhnya berasumsi kernel yang digunakan adalah kernel 2.6.
Mengenal FUSE FUSE merupakan singkatan dari Filesystem in Userspace, yang beralamat di http://fuse. sourceforge.net/. Berikut ini adalah beberapa fitur FUSE: API yang sederhana. Instalasi yang sederhana (tidak perlu patch atau kompilasi ulang kernel). Implementasi yang aman.
58
12/2006 INFOLINUX
Interface ke kernel yang efisien. Dapat digunakan oleh user biasa. Mendukung kernel 2.4 dan 2.6. Secara umum, tergolong stabil. Sangat banyak filesistem dikembangkan di atas FUSE. Salah satunya adalah yang kita bahas di dalam tulisan ini: SSHFS.
directory... /usr/src/kernelheaders-2.6.8-2-386 checking kernel build directory... /usr/src/kernel-headers-2.6.8-2-386 checking kernel source version... 2.6.8-2-386 ...
Untuk menggunakan SSHFS, kita perlu menginstal FUSE terlebih dahulu. Downloadlah FUSE di website-nya. Versi FUSE yang digunakan di tulisan ini adalah fuse2.5.3.tar.gz. Sebelum melakukan konfigurasi, pastikan Anda memiliki source code kernel yang terkonfigur. Berikut ini adalah langkah-langkah instalasi FUSE: Ekstraklah paket fuse-2.5.3.tar.gz tersebut dan masuklah ke direktori hasil ekstraksi. Lakukan konfigurasi. Penulis akan menyimpan FUSE ke direktori non-standar, oleh karena itu, penulis memberikan –prefix tertentu. Silakan sesuaikan dengan kebutuhan dan keinginan Anda.
Lakukan kompilasi dengan menjalankan perintah make:
$ ./configure –prefix=/home/nop/ temp/program/USE/fuse
(Pastikan konfigurasi menemukan source code kernel. Sebagai contoh:) ... ... ... ... checking kernel source
$ make
(pastikan modul kernel dibangun dengan sukses. Sebagai contoh:) Making all in kernel make[1]: Entering directory `/ home/DATA/NOP/home/temp/program/ Devel/fuse-2.5.3/kernel’ make -C /usr/src/kernel-headers2.6.8-2-386 SUBDIRS=/home/DATA/ NOP/home/temp/program/Devel/fuse2.5.3/kernel modules make[2]: Entering directory `/usr/ src/kernel-headers-2.6.8-2-386’ CC [M] /home/DATA/NOP/home/ temp/program/Devel/fuse-2.5.3/ kernel/dev.o CC [M] /home/DATA/NOP/home/ temp/program/Devel/fuse-2.5.3/ kernel/dir.o CC [M] /home/DATA/NOP/home/ temp/program/Devel/fuse-2.5.3/ kernel/file.o CC [M] /home/DATA/NOP/home/ temp/program/Devel/fuse-2.5.3/
www.infolinux.web.id
TUTORIAL SSHFS DAN FUSE kernel/inode.o LD [M] /home/DATA/NOP/home/ temp/program/Devel/fuse-2.5.3/ kernel/fuse.o Building modules, stage 2. MODPOST CC /home/DATA/NOP/home/ temp/program/Devel/fuse-2.5.3/ kernel/fuse.mod.o LD [M] /home/DATA/NOP/home/ temp/program/Devel/fuse-2.5.3/ kernel/fuse.ko make[2]: Leaving directory `/usr/ src/kernel-headers-2.6.8-2-386’ make[1]: Leaving directory `/home/ DATA/NOP/home/temp/program/Devel/ fuse-2.5.3/kernel’ ...
Lakukanlah instalasi (sebagai root): # make install
Catatan penting: Karena penulis melakukan instalasi ke path non standar, maka penulis perlu mengatur lokasi pencarian pustaka (dan path apabila diinginkan). Sebagai contoh: export LD_LIBRARY_PATH=$LD_ LIBRARY_PATH:/home/nop/temp/ program/USE/fuse/lib
Proses instalasi akan menginstal juga modul kernel fuse.ko, yang secara default, terinstal pada: /lib/modules// kernel/fs/fuse/fuse.ko
sebagai contoh: /lib/modules/2.6.8-2-386/kernel/ fs/fuse/fuse.ko
Pastikanlah modul ini telah di-load sebelum bekerja dengan FUSE. FUSE datang di antaranya dengan sebuah aplikasi fusermount. Cobalah pastikan aplikasi tersebut dapat dijalankan dengan sukses (tidak gagal menemukan pustaka sistem ataupun kesalahan inisialisasi lainnya). Sebagai contoh: $ fusermount fusermount: missing mountpoint argument
Instalasi SSHFS Setelah instalasi FUSE selesai dan sukses,
www.infolinux.web.id
maka saatnya kita beralih ke SSHFS. Downloadlah SSHFS di website-nya: http://fuse. sourceforge.net/sshfs.html. Sebagai contoh, versi SSHFS yang digunakan di tulisan ini adalah sshfs-fuse-1.6.tar.gz. Berikut ini adalah beberapa fitur SSHFS berbasis FUSE: Multithreading. Mengijinkan pembacaan berukuran besar. Mendukung caching untuk isi direktori. Lakukanlah langkah-langkah berikut ini untuk melakukan instalasi: Ekstraklah arsip sshfs-fuse-1.6.tar.gz tersebut dan masuklah ke direktori hasil ekstraksi. Sebagai catatan, karena FUSE diinstal pada lokasi non standar, maka pada saat konfigurasi SSHFS, penulis perlu mengatur direktori tempat mengandung file-file pkgconfig. Sesuaikanlah dengan konfigurasi sistem Anda. $ export PKG_CONFIG_PATH=/usr/ lib/pkgconfig/:/home/nop/temp/ program/USE/fuse/lib/pkgconfig/
Lakukanlah konfigurasi. Penulis juga melakukan instalasi ke path non standar, dan oleh karenanya memberikan –prefix tersendiri. $ ./configure –prefix=/home/nop/ temp/program/USE/sshfs
Pastikan pada saat konfigurasi, FUSE ditemukan dengan baik: ... ... ... checking for SSHFS_CFLAGS... -D_FILE_OFFSET_BITS=64 -I/usr/ include/glib-2.0 -I/usr/lib/ glib-2.0/include -I/home/nop/ temp/program/USE/fuse//include/ fuse checking for SSHFS_LIBS... -L/ home/nop/temp/program/USE/fuse// lib -lfuse -lpthread -lglib-2.0 ...
$ make install
Apabila diperlukan (terutama pada instalasi path non standar), aturlah juga path sistem. SSHFS datang di antaranya dengan aplikasi sshfs. Pastikanlah aplikasi ini dapat dijalankan dengan sempurna (tidak ada masalah pada inisialisasi). Sebagai contoh: $ sshfs missing host see `sshfs -h’ for usage
Untuk dapat dijalankan, sshfs membutuhkan libfuse. Pastikanlah pustaka ini dapat ditemukan: $ ldd ~/temp/program/USE/sshfs/ bin/sshfs libfuse.so.2 => /home/ nop/temp/program/USE/fuse/lib/ libfuse.so.2 (0x40018000) libpthread.so.0 => /lib/ tls/libpthread.so.0 (0x40033000) libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x40042000) libc.so.6 => /lib/tls/ libc.so.6 (0x400c2000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Mount ke SSH Untuk melakukan mount ke SSH, gunakanlah program sshfs (datang bersama SSHFS). Sebagai contoh, penulis (user [email protected]) akan melakukan mount home directory [email protected] ke /tmp/a. $ mkdir /tmp/a $ sshfs [email protected]: /tmp/a Password:
Setelah login berhasil, maka kita pun dapat mengakses home kita di server SSH sebagai direktori lokal. Menarik, bukan? Untuk melakukan umount, gunakanlah program fusermount (datang bersama FUSE). Sebagai contoh: $ fusermount -u /tmp/a/
Lakukanlah kompilasi: $ make
Lakukanlah instalasi (penulis menggunakan user biasa):
Sampai di sini dulu pembahasan kita tentang penggunaan FUSE dan SSHFS. Selamat mencoba dan sampai jumpa pada kesempatan lainnya! Noprianto [[email protected]]
INFOLINUX 12/2006
59
TUTORIAL DPKG-SPLIT
Memecah Paket Debian dengan dpkg-split
D
ebian datang dengan semua tool yang dibutuhkan untuk bekerja dengan file paketnya. Beberapa tool bahkan menawarkan fungsionalitas lebih, seperti dpkg-split yang dapat digunakan untuk memecah file paket Debian ke pecahan-pecahan yang berukuran lebih kecil, dan menggabungkannya kembali dengan aman.
Untuk memecah file, kita memang bisa menggunakan berbagai tool yang telah tersedia di sistem ataupun tool pihak ketiga yang bisa didapatkan dengan mudah di internet. Namun, Debian juga datang dengan dpkg-split yang didesain khusus untuk paket Debian. Tulisan ini akan membahas bagaimana bekerja dengan dpkg-split dan di akhir tulisan, kita akan membangun script yang dapat digunakan untuk membuat laporan pemecahan paket ke file HTML. Secara default, program dpkg-split telah terinstall di sistem karena program ini merupakan anggota paket dpkg (essensial). Program ini dapat dijalankan oleh user non-root.
Memecah file paket Sebagai contoh, kita akan mencoba memecah paket openoffice.org_1.1.3-9_all.deb yang berukuran 6,6 MB ke pecahan-pecahan yang berukuran default. Berikut ini adalah perintah yang dapat digunakan: $ dpkg-split -s openoffice. org_1.1.3-9_all.deb Splitting package openoffice.org into 15 parts: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 done
Perintah tersebut akan memecah file openoffice.org_1.1.3-9_all.deb ke dalam 15 pecahan. Hal ini disebabkan karena ukuran pecahan default adalah 450 Kb. Berikut ini adalah format nama pecahan yang dihasilkan: prefix.NofM.deb
60
12/2006 INFOLINUX
Sebagai catatan, N merupakan nomor pecahan dan M merupakan jumlah pecahan. Berikut ini adalah pecahan yang dihasilkan oleh perintah sebelumnya: $ ls -1 openoffice.org_1.1.3-9_all.10of15. deb ... ... openoffice.org_1.1.3-9_all.8of15. deb openoffice.org_1.1.3-9_all.9of15. deb
openoffice.org_1.1.3-9_all.6of7. deb openoffice.org_1.1.3-9_all.7of7. deb
Mengubah prefix Bagi Anda yang ingin mengubah prefix pecahan, deretkanlah prefix yang diinginkan setelah nama file paket yang ingin dipecah. Sebagai contoh: $ dpkg-split -S 1000 -s openoffice.org_1.1.3-9_all.deb ooo Splitting package openoffice.org into 7 parts: 1 2 3 4 5 6 7 done
Mengubah ukuran pecahan Apabila kita ingin mengubah ukuran pecahan default, berikanlah opsi tambahan -S. Sebagai contoh, kita akan menjadikan setiap pecahan berukuran 1000 Kb: $ dpkg-split -S 1000 -s openoffice.org_1.1.3-9_all.deb Splitting package openoffice.org into 7 parts: 1 2 3 4 5 6 7 done $ ls -1 openoffice.org_1.1.3-9_all.1of7. deb openoffice.org_1.1.3-9_all.2of7. deb openoffice.org_1.1.3-9_all.3of7. deb openoffice.org_1.1.3-9_all.4of7. deb openoffice.org_1.1.3-9_all.5of7. deb
$ ls -1 ooo.1of7.deb ooo.2of7.deb ooo.3of7.deb ooo.4of7.deb ooo.5of7.deb ooo.6of7.deb ooo.7of7.deb
Melihat informasi pecahan Setiap pecahan akan memiliki ekstensi nama file .deb. Berikut ini kita akan melihat output program ‘file’ untuk salah satu pecahan paket dari contoh-contoh sebelumnya: $ file ooo.1of7.deb ooo.1of7.deb: part of multipart Debian package (format 2.1)
Dari perintah tersebut, kita tahu bahwa program ‘file’ juga mengenali bahwa file
www.infolinux.web.id
TUTORIAL DPKG-SPLIT tersebut merupakan pecahan dari paket Debian. Informasi program ‘file’ tersebut tidak dapat menampilkan informasi pecahan ke berapa file pecahan tersebut. Apabila informasi detil ingin diketahui, gunakanlah kembali program dpkg-split dengan opsi -I untuk melihat informasi setiap file pecahan yang diinginkan. Contoh: $ dpkg-split -I ooo.1of7.deb ooo.1of7.deb: Part format version: 2.1 Part of package: openoffice.org ... version: 1.1.3-9 ... MD5 checksum: 0defe876947ee09d6aa8bcd8fd7c6db1 ... length: 6873694 bytes ... split every: 1022976 bytes Part number: 1/7 Part length: 1022976 bytes Part offset: 0 bytes Part file size (used portion): 1023184 bytes
Dari informasi tersebut, kita tahu bahwa file tersebut merupakan pecahan dari paket openoffice.org dan merupakan pecahan pertama dari tujuh.
Menggabungkan pecahan paket Kita telah memiliki tujuh file pecahan berikut: $ ls -1 ooo.1of7.deb ooo.2of7.deb ooo.3of7.deb ooo.4of7.deb ooo.5of7.deb ooo.6of7.deb ooo.7of7.deb
Kita dapat menggunakan program dpkgsplit dengan opsi -j untuk menggabungkan file: $ dpkg-split -j ooo.* Putting package openoffice.org together from 7 parts: 1 2 3 4 5 6
www.infolinux.web.id
Contoh laporan npy-dpkg-split.py.
7 done
Perintah tersebut akan menghasilkan file paket: openoffice.org-1.1.3-9.deb. Setelah diperiksa dengan md5sum file paket asli (0defe876947ee09d6aa8bcd8fd7 c6db1), hasil penggabungan rupanya tetap utuh tanpa kurang apapun:
9.deb 0defe876947ee09d6aa8bcd8fd7c6db1 openoffice.org-1.1.3-9.deb
Pemeriksaan yang menyeluruh
Rupanya hasil penggabungan tetap valid! Luar biasa. Pada saat penggabungan, dpkgsplit akan memeriksa sendiri informasi di dalam setiap pecahan daripada menerima mentah-mentah urutan pecahan yang diberikan sebagai argumen. Contoh lainnya, apabila kita lupa memberikan pecahan tertentu seperti contoh, maka dpkg-split akan mencetak pesan kesalahan yang sangat user friendly:
Bagaimana kalau kita secara tidak sengaja menggabungkan dalam urutan pecahan yang salah? Sebagai contoh, kita sengaja menderetkan urutan pecahan secara berantakan:
$ dpkg-split -j ooo.3of7. deb ooo.1of7.deb ooo.2of7. deb ooo.4of7.deb ooo.5of7.deb ooo.7of7.deb dpkg-split: part 6 is missing
$ md5sum openoffice.org-1.1.39.deb 0defe876947ee09d6aa8bcd8fd7c6db1 openoffice.org-1.1.3-9.deb
$ dpkg-split -j ooo.3of7. deb ooo.1of7.deb ooo.2of7. deb ooo.4of7.deb ooo.5of7.deb ooo.7of7.deb ooo.6of7.deb Putting package openoffice.org together from 7 parts: 1 2 3 4 5 6 7 done
Sekarang, kita akan bandingkan kembali md5sum paket yang dihasilkan dengan md5sum paket asli ( 0defe876947ee09d6aa 8bcd8fd7c6db1): $ md5sum openoffice.org-1.1.3-
Begitupun juga kalau kita ingin menggabungkan pecahan yang tidak valid: $ dpkg-split -j ooo.3of7. deb ooo.1of7.deb ooo.2of7. deb ooo.4of7.deb ooo.5of7.deb ooo.7of7.deb /bin/ls dpkg-split: file `/bin/ls’ is not an archive part: Success
Permasalahan nama paket Pada bagian awal tulisan, nama file paket asli adalah: openoffice.org_1.1.3-9_all.deb.
INFOLINUX 12/2006
61
TUTORIAL DPKG-SPLIT Sementara, nama file paket yang dihasilkan adalah: openoffice.org-1.1.3-9.deb. $ dpkg-split -j ooo.3of7. deb ooo.1of7.deb ooo.2of7. deb ooo.4of7.deb ooo.5of7.deb ooo.7of7.deb ooo.6of7.deb Putting package openoffice.org together from 7 parts: 1 2 3 4 5 6 7 done $ ls -1 ooo.1of7.deb ooo.2of7.deb ooo.3of7.deb ooo.4of7.deb ooo.5of7.deb ooo.6of7.deb ooo.7of7.deb openoffice.org-1.1.3-9.deb
Sebenarnya, tidak adalah masalah yang terlalu besar dengan nama file paket tersebut. Namun, agar segala sesuatu berada semestinya, kita dapat menggunakan program dpkg-name untuk memperbaiki nama file paket yang dihasilkan: $ dpkg-name openoffice.org-1.1.39.deb moved `openoffice.org-1.1.3-9.deb’ to `./openoffice.org_1.1.3-9_all. deb’
Sebagai catatan, dpkg-name merupakan anggota dari paket dpkg-dev.
Menghasilkan laporan HTML Berikut ini, kita akan membuat sebuah script python untuk membuat laporan untuk tugas pemecahan paket. Script yang akan kita bangun juga berfungsi sebagai wrapper untuk program dpkg-split itu sendiri. Script ini akan berfungsi sama persis seperti dpkg-split (karena akan melempar semua parameter yang dikirimkan ke dpkgsplit), namun begitu diketahui bahwa aksi yang dikerjakan adalah memecah file, file laporan HTML pun akan di-generate. Kita akan memberikan nama npy-dpkgsplit.py. Berikut ini adalah source code-nya:
import import import import import
sys string commands glob time
dpkg_split = ‘/usr/bin/dpkg-split’ def split(data): data = data.split(‘Splitting package’) package_info = data[1]. split(‘parts:’) package_split = package_ info[0].split(‘into’) package_name = package_ split[0].strip() package_parts = int(package_ split[1].strip()) parts = glob.glob(package_name + ‘*.*of*.deb’) parts.sort() if package_parts != len(parts): #internal error print (‘internal error’) sys.exit(2) else: htmlfile = package_name + ‘.html’ header = “”” “”” package_name_big = ‘’ + package_name + ‘
’ table_open = ‘’ table_header = ‘part th> | information | ’ table_close = ‘
’
#!/usr/bin/python #npy-dpkg-split #v 0.1 #(c) Noprianto, 16 August 2006 #GPL
62
12/2006 INFOLINUX
footer = “”” “””
f = open(htmlfile,’w’) f.writelines (header) f.writelines (package_ name_big) f.writelines (table_open) f.writelines (table_ header)
counter = 1 for part in parts: line_part = ‘’ + str(counter) + ‘ | ’ + part + ‘ |
’ f.writelines (line_ part) cmd = dpkg_split + ‘ -I ‘ + part + ‘ | grep -i \’part length:\’’ out = commands. getoutput(cmd) line_length = ‘ | ’ + out + ‘ |
’ f.writelines (line_ length) cmd = dpkg_split + ‘ -I ‘ + part + ‘ | grep -i \’part file size\’’ out = commands. getoutput(cmd) line_size = ‘ | ’ + out + ‘ |
’ f.writelines (line_ size) cmd = dpkg_split + ‘ -I ‘ + part + ‘ | grep -i \’md5\’’ out = commands. getoutput(cmd) out = string. replace(out, ‘.’,’’).strip() md5_info = ‘ | ’ + out + ‘ |
’ f.writelines (md5_ info) counter = counter + 1 line_time = ‘
www.infolinux.web.id
TUTORIAL DPKG-SPLIT noshade>generated by npy-dpkgsplit on ‘ + time.ctime() + ‘’
f.writelines (table_close) f.writelines (line_time) f.writelines (footer) f.close() def main(): args = string.join (sys. argv[1:], ‘ ‘) cmd = dpkg_split + “ “ + args res = commands.getstatusoutput (cmd) res_status = res [0]
Script akan memeriksa error code dari dpkg-split, apabila sukses, maka akan diteruskan. Apabila gagal, maka pesan kesalahan akan ditampilkan. res_status = res [0] if res_status == 0: res_out = res [1] action = res_out.split() action = action [0] print res_out if action == ‘Splitting’: split (res_out) print ‘npy-dpkg-split DONE’
if res_status == 0: res_out = res [1] action = res_out.split() action = action [0] print res_out if action == ‘Splitting’: split (res_out) print ‘npy-dpkg-split
else: print “npy-dpkg-split ERROR:\n” + res [1] sys.exit (1)
Script akan mendeteksi pesan sukses ketika Splitting dan akan meneruskan ke fungsi split() untuk membuat HTML if action == ‘Splitting’: split (res_out)
DONE’ else: print “npy-dpkg-split ERROR:\n” + res [1] sys.exit (1) if __name__ == ‘__main__’: main()
Penjelasan source code: Pertama-tama, script akan menyusun semua argumen yang diberikan kepadanya, kemudian melempar semuanya ke dpkg-split. args = string.join (sys. argv[1:], ‘ ‘) cmd = dpkg_split + “ “ + args
Dpkg-split kemudian dijalankan. res = commands. getstatusoutput (cmd)
www.infolinux.web.id
Di dalam fungsi split(), kita akan melakukan: Mengambil jumlah pecahan dari pesan sukses dpkg-split. Mengambil nama paket dari pesan sukses dpkg-split. Mencari file dengan pola nama_ paket*.*of*.deb. Membandingkan jumlah pecahan yang didapat dari pesan sukses dengan jumlah file yang didapat dengan pola nama_paket*.*of*.deb tersebut. Apabila tidak sama, maka sesuatu yang tidak diinginkan telah terjadi. Apabila sama, maka kita akan menggunakan dpkg-split untuk memeriksa setiap pecahan dan menulis ke dalam file HTML. Demikianlah pembahasan kita tentang pemecahan paket Debian. Selamat mencoba! Noprianto [[email protected]]
INFOLINUX 12/2006
63
TUTORIAL FEDORA DIRECTORY SERVER
Review: Integrasi Samba dengan Fedora Directory Server
O
penLDAP telah menjadi pilihan sejak pertama release tahun 1998 dan sampai sekarang masih digunakan dengan baik. Namun seiring dengan meningkatnya kebutuhan user yang beragam maka bermunculan directory server yang menawarkan fasilitas lebih baik. Fedora Directory Server (FDS) adalah salah satu yang layak dipilih.
LDAP atau Lightweight Directory Access Protocol sudah menjadi pilihan bagi individu maupun instansi yang memerlukan tiga hal berikut: 1. Data statis yang banyak dan sering diakses. 2. Dapat diakses tanpa batasan platform. 3. Dapat diakses oleh banyak aplikasi yang berbeda. Salah satu data yang sering kali disimpan pada directory server adalah user account beserta informasi detailnya. Dalam satu user account terdapat banyak informasi detail, antara lain real name, e-mail, foto, alamat rumah, dan lain sebagainya. Otentikasi user dengan menggunakan FDS dalam suatu domain dapat dimungkinkan dengan mengintegrasikannya dengan Samba server. Dengan demikian pada saat user pada PC client melakukan otentikasi, maka akan dilayani oleh Samba server. Kemudian Samba server akan menghubungi LDAP server (fedora-ds) untuk validasi user yang akan login tersebut. Setelah user divalidasi, maka Samba server akan memberikan layanannya sesuai permission pada user tersebut yang sudah didefinisikan sebelumnya.
Dokumentasi Paket aplikasi Samba sudah mempunyai banyak dokumentasi, baik yang online maupun berupa PDF file. Sehingga konfigurasi dan troubleshoot akan lebih cepat dapat dilakukan apalagi dengan adanya bantuan milis–milis TI
64
12/2006 INFOLINUX
serta Linux khususnya. Namun, sebagai referensi kita dapat langsung menuju ke http:// directory.fedora.redhat.com/wiki/Howto:Samba untuk integrasi dengan fedora-ds. Paket fedora-ds meskipun baru dirilis bulan Desember 2005, namun memiliki dokumentasi yang baik dan cukup mudah untuk dipahami. Pada saat penulis mencoba fedorads versi terbaru yaitu 1.0.2 dokumentasinya sudah bertambah lengkap dan dapat ditemui di http://directory.fedora.redhat.com/.
Instalasi dan konfigurasi Paket aplikasi fedora-ds tidak dimasukkan dalam cd/dvd Fedora core 5, jadi harus download terlebih dahulu di http://directory. fedora.redhat.com/. Setelah paket FDS terinstal, sebaiknya Anda memastikan terlebih dahulu layanan web server (httpd) sudah berjalan dengan baik. Hal ini dikarenakan apache web server diperlukan agar FDS Console yang berbasis java dapat berhubungan dengan directory server. Berikut ini langkah-langkah utamanya: Setelah instalasi FDS dilakukan maka akan muncul pada layar sebuah konfirmasi yang meminta anda untuk mengkonfigurasikan FDS. Pada konfigurasi ini anda akan diminta memasukkan informasi–informasi yang nantinya akan digunakan untuk inisialisasi server. Setelah layanan fedora-ds dijalankan tiba saatnya kita mengubah konfigurasi PAM agar melakukan otentikasi melalui fedora-ds.
Menu Login ke Fedora Directory Server - Management Console.
Paket samba, samba-client dan sambacommon juga harus anda instalasikan karena paket tersebut nanti yang akan dikonfigurasikan sebagai domain (samba domain). Setelah paket–paket Samba terinstal, selanjutnya adalah mengonfigurasikan Samba sebagai Primary Domain Controller. Jika paket aplikasi FDS (fedora-ds) dan Samba masing–masing sudah terinstal pada server, maka selanjutnya kita dapat mengintegrasikan keduanya. Agar masalah yang terjadi pada saat integrasi dapat diminimalkan, sebaiknya kita pastikan dulu bahwa fedora-ds dan samba dapat berjalan dengan baik. Pada LDAP server setiap aplikasi yang akan dihubungkan dengannya harus dapat dikenali melalui schema–schema yang sudah di-load sebelumnya. Karena itu, samba schema harus di-load pada saat fedora-ds dijalankan. Dengan demikian jika nanti pada user account
www.infolinux.web.id
TUTORIAL FEDORA DIRECTORY SERVER yang 100 persen menggunakan Linux sebagai sistem operasi. Pada client Windows, konfigurasi yang dilakukan sama seperti jika kita join domain pada Microsoft Windows NT atau Microsoft Active Directory. Jika diinginkan untuk menggunakan Linux client, dapat menggunakan NFS sebagai pengganti Samba dan mengaktifkan LDAP support untuk otentikasinya.
Kekurangan Interface grafis fedora-ds/FDS console masih belum bisa penulis gunakan untuk melakukan manipulasi pada server lain. Tidak seperti LDAP client lain seperti pada webmin maupun LDAPAdmin yang dapat dipakai untuk memanipulasi server LDAP lain dengan konfigurasi yang terbilang mudah.
Kesimpulan Administrasi LDAP melalui Webmin.
kita tambahkan object atau atribute yang berkaitan dengan samba, maka fedora-ds dapat memprosesnya. Setelah samba schema didefinisikan dan di-load oleh fedora-ds, maka selanjutnya kita dapat memasukkan entri PDC kedalam object dan atribute samba dalam fedora-ds. Entri PDC yang dimaksud adalah samba ID, samba domain name, samba domain group serta samba administrator account.
Administrasi sistem Meskipun dalam user guide kita akan lebih banyak dihadapkan pada layar hitam alias console, namun untuk administrasinya akan dapat lebih bervariasi. Hal tersebut dapat dimungkinkan karena fedora-ds memiliki console gui berbasis java sebagai alternatif. Dan untuk samba server tentunya bisa kita gunakan SWAT atau webmin. Setelah fedora-ds dan samba terintegrasi dan layanan tersebut siap digunakan, Anda masih harus menambahkan account user, group, dan mesin/komputer. Hal tersebut juga dapat anda lakukan baik melalui console maupun dengan gui. Untuk interface grafis dapat Anda gunakan webmin (http://www.webmin.com) yang berbasis web atau dapat juga menggunakan LDAPAdmin (http://ldapadmin.sourceforge.net) yang berbasis sistem operasi Windows.
www.infolinux.web.id
Replikasi Salah satu kelebihan yang menonjol dibandingkan OpenLDAP adalah kemampuan fedora-ds untuk mereplikasi secara multimaster. Pada fedora-ds bisa dilakukan multimaster dengan dua jalur sampai dengan empat jalur replikasi.
Akses Dari Client Karena pada sistem ini menggunakan Samba, dapat dipastikan bahwa client memiliki sistem operasi Microsoft Windows. Meskipun demikian tidak menutup kemungkinan jika akan diimplementasikan pada lingkungan
Secara umum kinerja pasangan fedora-ds 1.0.2 dengan Samba 3.0.21b pada Fedora Core 5 dapat diandalkan. Meskipun waktu konfigurasinya memakan waktu yang lebih lama dibandingkan dengan konfigurasi pada directory server komersil. Namun, mengingat hampir tidak ada biaya pembelian software ditambah dengan dokumentasi yang memadai, maka fedora-ds layak dipertimbangkan. Saat ini sistem tersebut sudah penulis coba dengan beban 239 PC client user account dan melayani 297 user account. Meskipun belum mencobanya untuk melayani lebih banyak user dan PC client. Sigid ([email protected])
Fedora Directory Server-Management Console.
INFOLINUX 12/2006
65
TUTORIAL ENUM
Implementasi ENUM di Linux
P
engguna VoIP dapat dihubungi dengan nomor telepon seperti pengguna telepon biasa. Konsep penomoran telepon ENUM mirip dengan konsep penamaan domain di server DNS. Dengan cara ini, maka sebetulnya penentuan nomor tidak lagi menjadi monopoli operator, rakyat biasa pun mampu untuk memperoleh nomor telepon sendiri.
ENUM adalah sebuah mekanisme pemetaan nomor telepon Telkom yang kita kenal, seperti, +628113334567 atau +62555334567, agar dikenali di dunia VoIP yang menggunakan nomor telepon khusus, seperti [email protected] atau [email protected]. Jadi sebetulnya isi sebuah ENUM hanya tabel saja. Tentunya konsep ENUM tidak terbatas pada pemetaan saja, karena dengan menggunakan ENUM sebuah nomor telepon +6255534567 dapat mempunyai beberapa pesawat penerima dengan sistem prioritas, misalnya: +6255534567 prioritas 1 [email protected] +6255534567 prioritas 2 [email protected] +6255534567 prioritas 3 +62215678976 (nomor kantor) +6255534567 prioritas 4 +62856789654 (nomor handphone) +6255534567 prioritas 5 mail:[email protected]
Dalam bahasa yang lebih manusiawi, jika seseorang berusaha menelepon ke +6255534567 akan diusahakan untuk menghubungi ke VoIP Rakyat [email protected]. Jika gagal maka akan berusaha menghubungi nomor VoIP di Pulver [email protected]. Jika gagal maka akan berusaha menghubungi kantor di +62215678976. Jika gagal lagi, maka akan berusaha menghubungi ponsel
66
12/2006 INFOLINUX
di +62856789654. Terakhir jika semua cara gagal, apa boleh buat masuk ke voice mail untuk [email protected]. Cara penulisan ENUM di Internet, misalnya menggunakan top level domain e164. id, adalah sebagai berikut: +6255512345678 8.7.6.5.4.3.2 .1.5.5.5.2.6.e164.id +6281812345678 8.7.6.5.4.3.2 .1.8.1.8.2.6.e164.id
Perhatikan nomor ENUM mempunyai urutan terbalik dari nomor telepon yang kita kenal biasa.
Contoh ENUM Salah satu contoh ENUM yang paling baik adalah e164.org, kita dapat mendaftarkan diri secara otomatis dengan mekanisme authentikasi yang baik dengan cara menelepon nomor telepon yang akan di mapping ke account VoIP. Tentunya e164.org bukan satu-satunya ENUM server di dunia. Rekan-rekan VoIP Rakyat-pun mengembangkan ENUM sendiri yang dapat di akses di http://www.enum. voiprakyat.or.id. Tampilan maupun menu ENUM VoIP Rakyat akan secara berangsur-angsur berubah dengan akan diadakannya ENUM Indonesia yang menggunakan domain e164. id. Jika e164.id sudah berjalan dengan baik, maka akan digunakan delegasi dari ARPA menggunakan domain 2.6.e164.arpa untuk kode negara +62 (Indonesia).
Konsep delegasi nomor telepon dan ENUM Untuk mengerti dengan jelas konsep ENUM, ada baiknya Anda sudah mengerti cara kerja Domain Name System (DNS) karena ENUM menggantungkan dirinya pada DNS. Pada kesempatan ini tidak akan diterangkan cara kerja DNS. Jadi, pada dasarnya logika berpikir ENUM adalah sama dengan sistem DNS, hanya saja yang dilakukan di sini adalah mendelegasikan nomor telepon. Mohon diresapi bahwa server ENUM berbeda sama sekali dengan SIP Server yang kita gunakan, walaupun dapat disatukan. Bayangkan pada tingkat nasional sebuah alokasi nomor +62555 dengan domain 5.5.5.2.6.e164.id, mempunyai beberapa ENUM Name Server (NS) sebagai berikut: ENUM Server Domain 5.5.5.2.6.e164.id +62555 ENUM NS 202.123.123.124 +62555 ENUM NS 235.123.123.234
Perhatikan bahwa pada tingkat nasional, ENUM server tidak perlu mempunyai data lengkap dari nomor-nomor pesawat telepon / pelanggan. Misalnya, sebuah operator telekomunikasi memperoleh alokasi nomor sentral 4444, maka alokasi nomor yang dapat digunakan oleh operator tersebut adalah: +6255544440000 s/d +6255544449999
Artinya, operator dapat memberikan
www.infolinux.web.id
TUTORIAL ENUM nomor bagi 10000 pelanggan. Maka, operator telekomunikasi tersebut harus mempunyai ENUM sendiri untuk domain 4.4.4.4.5.5.5.2.6.e164.id, misalnya dengan NS: ENUM Server Domain 4.4.4.4.5.5.5.2.6.e164.id +62555444 ENUM NS 212.234.234.234 +62555444 ENUM NS 212.234.234.235
Dalam proses delegasi, informasi NS dari 4.4.4.4.5.5.5.2.6.e164.id harus dimasukkan ke ENUM 5.5.5.2.6.e164.id yang memberitahukan bahwa: 4.4.4.4.5.5.5.2.6.e164.id IN NS 212.234.234.234 4.4.4.4.5.5.5.2.6.e164.id IN NS 212.234.234.235
Tentunya konsep ENUM tidak dibatasi hanya untuk operator, sebuah perusahaan yang besar dengan 100 extension dapat saja mempunyai nomor ENUM misalnya dengan alokasi nomor: +6255566666600 s/d +6255566666699
Maka perusahaan tersebut harus mempunyai ENUM sendiri untuk domain 6.6.6.6 .6.6.5.5.5.2.6.e164.id, misalnya dengan NS: ENUM Server Domain 6.6.6.6.6.6.5 .5.5.2.6.e164.id +62555666666 ENUM NS 212.234.234.4 +62555666666 ENUM NS 212.234.234.5
Dalam proses delegasi, informasi NS dari 6.6.6.6.6.6.5.5.5.2.6.e164.id harus dimasukan ke ENUM 5.5.5.2.6.e164.id yang memberitahukan bahwa: 6.6.6.6.6.6.5.5.5.2.6.e164.id IN NS 212.234.234.4 6.6.6.6.6.6.5.5.5.2.6.e164.id IN NS 212.234.234.5
Tentunya konsep ini tidak terbatas pada perusahaan saja, sebuah RT/RW-net dapat juga membangun ENUM sendiri, dan sebagainya. Dengan cara ini, maka sebetulnya nomor tidak lagi menjadi monopoli operator, rakyat biasa pun sebetulnya mampu untuk memperoleh nomor telepon sendiri.
www.infolinux.web.id
Pendafaran Enum di e164.org.
Tentunya mekanisme authentikasi dan juga tanggung jawab perlu dikembangkan karena nomor telepon akan menjadi resource yang terbatas seperti juga IP address.
Install dan Operasional ENUM Server Pada dasarnya sebuah ENUM server adalah sebuah DNS server. Jadi jika anda mempunyai sebuah DNS server, dapat langsung berfungsi sebagai ENUM server. Untuk menginstalasi ENUM Server, yang perlu dilakukan tidak banyak, yaitu: Install DNS Server, pada Linux biasanya sudah ada paket BIND yang merupakan DNS server yang dapat di operasikan dengan mudah. Edit file /etc/named.conf untuk memberitahukan dimana kita menyimpan data untuk domain yang akan kita buat. Edit file data-data ENUM untuk memasukan nomor telepon masing-masing pelanggan. Misalnya kita memperoleh alokasi nomor +6255566666600 s/d +6255566666699, maka kita perlu mengedit file /etc/named. conf untuk domain 6.6.6.6.6.6.5.5.5.2.6.e1 64.id dengan cara menambahkan entry: zone “6.6.6.6.6.6.5.5.5.e164.id” IN { type master; file “6.6.6.6.6.6.5.5.5.e164.id.db”; allow-update { none; };
};
Semua data nomor telepon harus dimasukkan ke file 6.6.6.6.6.6.5.5.5.e164.id.db yang pada Fedora Core 5 terletak di /var/named/chroot/var/named/6.6.6.6.6.6.5.5.5.e164.id.db. Contoh entry file 6.6.6.6.6.6.5.5.5.e164.id.db adalah sebagai berikut: $TTL 86400 @ IN SOA ns.warnet.co.id admin. warnet.co.id. ( 42 ; serial (d. adams) 3H ; refresh 15M ; retry 1W ; expiry 1D ) ; minimum IN NS ns.warnet.co.id. 0.0 NAPTR 10 100 “u” “E2U+sip” “!^.*$!sip:[email protected]!” . 1.0 NAPTR 10 100 “u” “E2U+sip” “!^.*$!sip:[email protected]!” . 2.0 NAPTR 10 100 “u” “E2U+sip” “!^.*$!sip:[email protected]!” . 7.8 NAPTR 10 100 “u” “E2U+sip” “!^.*$!sip:[email protected]!” .
Yang artinya: +6255566666600 .5.2.6.e164.id +6255566666601 .5.2.6.e164.id +6255566666602
0.0.6.6.6.6.6.6.5.5 [email protected] 1.0.6.6.6.6.6.6.5.5 [email protected] 2.0.6.6.6.6.6.6.5.5
INFOLINUX 12/2006
67
TUTORIAL ENUM .5.2.6.e164.id [email protected] +6255566666687 7.8.6.6.6.6.6.6.5.5 .5.2.6.e164.id [email protected]
Setelah proses editing file dilakukan, jangan lupa untuk mengaktifkan dan menstart DNS melalui perintah: # chkconfig named on # service named restart
Konfigurasi asterisk enum.conf Agar ENUM mekanisme dapat berjalan dengan baik di Asterisk, kita perlu mengedit file enum.conf dan menambahkan entry berikut: search => e164.id search => e164.org search => e164.arpa
Jika kita mempunyai ENUM server sendiri, dapat saja menambahkan entry sendiri misalnya: search => 6.6.6.6.6.6.5.5.5.2.6. e164.id
Tentunya sebuah ENUM server tidak harus menggunakan kata-kata e164, dapat saja enum server menggunakan domain seperti di VoIP Rakyat: search => voiprakyat.or.id
Konfigurasi asterisk extensions.conf Agar proses pencarian ENUM dapat berjalan dengan baik, maka sebaiknya ditambahkan pada file /etc/asterisk/extensions.conf entry berikut:
GSM, CDMA, Internet VoIP, maupun PSTN telkom Anda. Semua orang dapat menggunakan nomor +627771781945 untuk menghubungi Anda. Tentunya dengan kompensasi, misalnya Anda membayar iuran kepada negara. Pertanyaannya, mungkinkah itu terjadi? Jawaban singkatnya secara teknologi AMAT SANGAT MUNGKIN SEKALI. Di seluruh dunia, pada saat ini terdapat dua ENUM server besar yang menjadi acuan para penyelenggara Internet Telepon, Next Generation Network, maupun 4G, yaitu e164. org dan e164.arpa. Di beberapa negara, mereka membuat test bed ENUM server sendiri, seperti Taiwan menggunakan e164.tw. Bagaimana dengan Indonesia? Pada saat tulisan ini disusun, ENUM server yang beroperasi di Indonesia hanya voiprakyat. or.id dan e164.groups.or.id. Rekan-rekan ICT Center yang dipimpin oleh Anton Raharja bahkan sudah membuatkan prototype untuk registrasi nomor ENUM yang bisa diakses di http://www.enum.voiprakyat.or.id. Alokasi nomor ENUM tidak tergantung geografi, tapi lebih menempelkan diri pada entitas. Jadi tidak ada kode lokasi di ENUM untuk menunjukkan anda berada di mana. Yang mungkin ada hanya kode entitas. Misalnya, negara memberikan alokasi kode area 555 untuk ENUM. Kita mempunyai kemungkinan untuk memberikan nomor ke seratus juta nomor telepon menggunakan alokasi tersebut yang mempunyai digit +62555nnnnnnnn, delapan digit di belakang kode area 555. Jauh lebih
besar dari total jumlah pelanggan telepon tetap dan selular hari ini. Yang akan seru adalah bagi rakyat biasa, RT/RW-net dan corporate/perusahaan. Dengan adanya ENUM, sebuah perusahaan yang sangat besar dan mempunyai banyak cabang dapat mengintegrasikan PBX-nya menjadi satu kesatuan dan dikenali di jaringan telepon dalam sebuah kode area saja. Misalnya, bank yang banyak cabangnya, seperti BCA dan BRI dapat saja mereka meminta blok nomor +62555oooonnnn, dengan kemungkinan memberikan nomor ke 10,000 pesawat telepon. Tentunya internal bank harus melakukan alokasi nomor sendiri untuk masing-masing lokasi. Hal yang sama dapat juga dilakukan RT/RW-net, misalnya memperoleh blok +62555oooooonn yang dapat memberikan nomor ke 100 pelanggan RT/RW-net. Sementara untuk perorangan, sebaiknya dihandel oleh registrar yang ditunjuk oleh Top Level ENUM, sama seperti proses registrasi domain. Misalnya, alokasi untuk perorangan adalah +6255512nnnnnn dengan kemungkinan mengalokasikan nomor ke 1,000,000 orang secara personal. Registrar harus menghandel permohonan perorangan tersebut menggunakan mekanisme authentikasi, misalnya menelepon orang tersebut, seperti dicontohkan di www.e164.org. ENUM akan memecah dominasi dan paradigma yang selama ini dianut bahwa nomor hanya dapat dimiliki oleh operator saja. Onno W. Purbo ([email protected])
exten => _62X.,1,ENUMLOOKUP(${EX TEN},sip,,1,e164.id) exten => _62X.,2,Dial(${ENUM}) exten => _62X.,102,Playback(imsorry)
Atau untuk entry yang juga mencakup Internasional, dapat menggunakan entry: exten => _+X.,1,ENUMLOOKUP(${EXT EN},sip,,1,) exten => _+X.,2,Dial(${ENUM}) exten => _+X.,102,Playback(imsorry)
Alokasi nomor telepon Pernahkan Anda membayangkan mempunyai nomor sendiri, misalnya +627771781945? Nomor tersebut milik anda, tidak tergantung pada operator manapun dan dapat dihubungkan dengan nomor
68
12/2006 INFOLINUX
Direktori Enum Voip Rakyat Indonesia.
www.infolinux.web.id
Kuisioner InfoLINUX Jawablah pertanyaan-pertanyaan di bawah ini yang sesuai dengan hati Anda. TENTANG LINUX
TENTANG INFOLINUX
1. Seberapa sering menggunakan Linux: 1. Saya pengguna Linux sejati 2. Ketika bekerja 3. Hanya di rumah 4. Sewaktu-waktu kalau ingin 5. Lainnya, ...
7. Aplikasi Office Suite favorit Anda: 1. KOffice 2. OpenOffice.org 3. StarOffice 4. GnomeOffice 5. Lainnya, ...
13. Anda mengetahui InfoLINUX dari: 1. Teman 2. Informasi Internet 3. Lihat di toko buku atau kios 4. Iklan koran atau majalah 5. Lainnya, ...
2. Perkembangan Linux saat ini: 1. Sudah semakin baik 2. Masih kurang populer 3. Kebanyakan distro 4. Instalasi masih susah 5. Lainnya, ...
8. Browser Internet favorit Anda: 1. Firefox 2. Konqueror 3. Opera 4. Mozilla 5. Lainnya, ...
14. Memperoleh InfoLINUX dari: 1. Berlangganan 2. Beli eceran 3. Pinjem dari teman 4. Ketemu di jalan 5. Lainnya, ...
3. Linux sebaiknya di masa depan: 1. Tetap free 2. Permudah instalasi 3. Perbanyak game Linux 4. Perlulas dukungan hardware 5. Lainnya, ...
9. Aplikasi e-mail client favorit Anda: 1. Evolution 2. Kmail 3. Mozilla 4. Thunderbird 5. Lainnya, ...
15. Penampilan InfoLINUX saat ini: 1. Memuaskan 2. Baik 3. Cukup 4. Kurang 5. Lainnya, ...
4. Distro Linux favorit Anda: 1. Fedora Core 2. Mandriva Linux 3. SUSE Linux 4. Ubuntu 5. Lainnya, ...
10. Aplikasi multimedia video favorit Anda: 1. MPlayer 2. Real Player 3. Totem 4. Xine 5. Lainnya, ...
16. Yang kurang dari InfoLINUX: 1. Kurang murah 2. Kurang tebal 3. Kurang jumlah rubrik 4. Kurang pembahasan pemula 5. Lainnya, ...
5. Distro Linux Indonesia favorit Anda: 1. Waroeng IGOS 2. BlankOn 3. PC Linux 4. IGOS Desktop 5. Lainnya, ...
11. Aplikasi multimedia audio favorit Anda: 1. Amarok 2. JukeBox 3. Rhythmbox 4. XMMS 5. Lainnya, ...
17. Rubrik yang kali pertama dibaca: 1. Utama 2. Tutorial 3. Alternatif 4. Praktik Instan 5. Lainnya, ...
6. Window manager favorit Anda: 1. Blackbox 2. Gnome 3. IceWM 4. KDE 5. Lainnya, ...
12. Aplikasi database favorit Anda: 1. DB2 2. MySQL 3. Oracle 4. PostgreSQL 5. Lainnya, ...
18. Topik bahasan favorit Anda: 1. Administrasi 2. Database 3. Networking 4. Programming 5. Lainnya, ...
20
ion Ku is
Kirimkan jawaban-jawaban dari kuisioner di atas pada sebuah Kartu Pos paling lambat 1 Januari 2007 ke: Redaksi InfoLINUX, Jl. Kramat IV No. 11, Jakarta 10430. www.infolinux.web.id Para pemenang akan diumumkan pada InfoLINUX edisi 02/2007.
er
Caranya:
06
Inf
oL
IN UX
Dapatkan hadiah-hadiah menarik seperti: Motherboard, Video Card, Speaker Aktif, MP3 Player, dan SUSE Linux 10.1 Box untuk 16 orang pemenang!
INFOLINUX 12/2006
69
TUTORIAL REMOTE CONTROL
Ponsel sebagai Remote Control di Linux
D
engan bermodalkan sebuah bluetooth adapter, Anda dapat menggunakan ponsel dengan bluetooth sebagai remote control berbagai aplikasi di Linux, seperti Amarok, Kaffeine, KPlayer, KSCD, XMMS, dan lain-lain. Bahkan Anda dapat mengendalikan mouse melalui ponsel.
Tutorial ini disusun dengan SUSE Linux Enterprise Desktop 10. Namun, tidak menutup kemungkinan langkah-langkah berikut dapat diaplikasikan pada distro Linux yang lain. Hanya saja, ada beberapa langkah yang harus disesuaikan dengan distro tersebut. Dan tidak menutup kemungkinan dapat digunakan dengan menggunakan ponsel dari merk dan tipe lainnya yang memiliki fasilitas bluetooth. Dalam penulisan artikel ini, penulis menggunakan sistem sebagai berikut: SUSE Linux Enterprise Desktop 10. Siemens CX75. Bluetooth USB Stick (Merk tidak jelas : p). KAnyRemote v1.2 atau (http://anyremote.sourceforge.net/), RPM untuk SLED 10 dan beberapa contoh file configurasinya bisa di-download di http:// donnie.110mb.com/downloads.php?cat_ id=2. Xautomation v0.96 (http://hoopajoo. net/projects/xautomation.html), RPM untuk SLED 10 bisa di-download di http://donnie.110mb.com/downloads. php?cat_id=2. Paket ini diperlukan untuk mengendalikan mouse melalui ponsel. Berikut ini langkah-langkah instalasi dan konfigurasi Bluetooth dan KAnyRemote di SUSE Linux Enterprise Desktop 10: 1. Pastikan paket Bluez sudah terinstal di komputer Anda (www.bluez.org). Paket
70
12/2006 INFOLINUX
ini umumnya sudah tersedia di media instalasi SUSE. 2. Jalankan Yast, lalu masuk ke Hardware | Bluetooth. Pilih Enable Bluetooth Service. Pada Basic Configuration, masukkan Device Name sesuai keinginan Anda. Pada Security Manager, pilih Use Local PIN for Incoming Connections. Lalu masukkan PIN sesuai keinginan Anda (jangan sampai lupa dengan PIN ini). Klik Advance Daemon Configuration. Lalu Enable semua Daemon yang terdaftar lalu klik OK. Klik Security Options. Lalu hilangkan tanda pada Authentication, lalu beri tanda pada Inquiry Scan dan Page Scan. Klik OK. Klik Device and Service classes. Untuk Device Class pilih Desktop. Lalu tandai semua Service yang tertera. Klik OK lalu klik Finish. 3. Masih di Yast, masuk ke System | System Services (Runlevel). Pilih Bluetooth | klik Enable | klik Finish. 4. Untuk memastikan bluetooth daemon sudah berjalan, pada konsole ketik perintah berikut (sebagai root):
# rcbluetooth status Checking service bluetooth (enabled) : hcid (activated) running hidd (activated) running hid2hci (activated) sdpd (activated) running opd (activated) running rfcomm (activated) pand (activated) running dund (activated) running
Jika belum running, jalankan perintah berikut (sebagai root): # rcbluetooth start
5. Nyalakan bluetooth pada handphone anda, pada Konsole ketik perintah: $hcitool scan
Perintah tersebut akan menghasilkan output Bluetooth Address dan Bluetooth Name dari ponsel Anda dan semua perangkat bluetooth yang berada dalam jangkauan bluetooth adapter Anda, seperti berikut:
# rcbluetooth status
Bluetooth daemon sudah berjalan bila outputnya seperti berikut:
KAnyRemote dan file konfigurasi Amarok.
www.infolinux.web.id
TUTORIAL REMOTE CONTROL $hcitool scan Scanning ... 00:01:E3:5A:05:B7 Kowal Daemon
00:01:E3:5A:05:B7 merupakan bluetooth address ponsel saya, bluetooth address ponsel Anda sudah pasti akan berbeda dengan saya. Catat baik-baik bluetooth address ponsel Anda. 6. Sebagai root jalankan perintah: #rfcomm connect /dev/rfcomm0 00:01:E3:5A:05:B7
Ganti 00:01:E3:5A:05:B7 dengan bluetooth address ponsel Anda. Lalu jalankan perintah: #chmod 0666 /dev/rfcomm0
7. Install paket KAnyRemote dan XAutomation, bisa melalui Yast maupun melalui Konsole: #rpm -ivh kanyremote-1.21SLED10DSB.i686.rpm #rpm -ivh xautomation-0.961SLED10DSB.i686.rpm
Untuk instalasi melalui source code, silakan ikuti langkah-langkah yang ada pada file README dan INSTALL yang ada pada masing-masing paket. 8. Jalankan KAnyRemote melalui KMenu anda, dan masukkan salah satu file configurasi (.cfg) pada kotak konfigurasinya. Di sini saya menggunakan file amarok.
cfg untuk mengendalikan amarok melalui ponsel saya. 9. Klik kanan pada icon KAnyRemote yang berada pada system tray anda lalu klik connect. Bila koneksi berhasil, maka icon tanda silang pada icon akan hilang. Sekarang Anda dapat mengendalikan Amarok melalui ponsel Anda. Tekan tombol 1 pada ponsel anda untuk menjalankan aplikasi Amarok. Bila playlist pada Amarok anda sudah berisi file, tekan tombol 5 untuk memulai lagu (Play). Fungsi tombol-tombol lainnya, antara lain: Tombol 2 : Mute Tombol 3 : Pause Tombol 4 : Seek -10 detik Tombol 6 : Seek +10 detik Tombol 7 : Previous Tombol 8 : Stop Tombol 9 : Next Tombol 0 : Quit Amarok Untuk mengetahui fungsi tombol pada aplikasi lainnya, silakan lihat pada file .cfg terkait. Bagaimana jika ingin menggunakan ponsel Anda sebagai remote control pada saat presentasi dengan menggunakan OpenOffice.org Impress? Mudah saja, pada kotak konfigurasi KAnyRemote pilih file mouse. cfg. Buka file presentasi anda lalu jalankan dalam modus Slide Show (tombol F5). Gu-
Konfigurasi Bluetooth.
nakan tombol 1 ponsel Anda untuk Next Slide, dan tombol 3 untuk Previous Slide. Eitt..jangan keasyikan dulu, masih ada beberapa langkah yang harus dilakukan. Anda tidak mau kan, kalau harus melakukan semua langkah di atas setiap kali Anda restart komputer? Untuk menghindari hal tersebut, lakukan langkah-langkah berikut: 1. Sebagai root, edit file /etc/bluetooth/rfcomm.conf menjadi: # # RFCOMM configuration file. # rfcomm0 { # Automatically bind the device at startup bind yes; # Bluetooth address of the device device 00:01:e3:5a:05:b7; # Ganti 00:01:e3:5a:05:b7 dengan Bluetooth Adress HP anda. # RFCOMM channel for the connection channel 1; # Description of the connection comment “HP gue (silahkan ganti)”; }
2. SUSE memiliki kecenderungan mengembalikan file permission dari /dev/rfcomm0 kembali menjadi 0600 pada setiap restart. Untuk mengatasi hal ini, edit file /etc/init.d/boot.local (sebagai root) dan tambahkan line berikut pada baris paling akhir: chmod 0666 /dev/rfcomm0
Nah, ternyata ponsel Anda bisa digunakan sebagai remote control. Tampilan Amarok Audio Player.
www.infolinux.web.id
Donnie S Bhayangkara ([email protected])
INFOLINUX 12/2006
71
TUTORIAL SMARTY
Pengenalan Dasar Smarty PHP Template
D
ari beberapa pertanyaan yang banyak dikemukakan para programer PHP, salah satunya adalah bagaimana cara membuat script PHP yang dapat terbebas dari layout. Ada beberapa cara untuk menangani hal ini. Salah satunya adalah menggunakan Smarty, aplikasi PHP Template yang bersifat open source.
Dari beberapa pertanyaan di milis pemrograman PHP, terdapat beberapa pertanyaan tentang bagaimana caranya untuk memisahkan script PHP yang dibuat agar terpisah dari layout atau tag HTML suatu situs. Karena pada umumnya, saat membuat halaman situs yang menggunakan script PHP, antara script PHP dan tag HTML menyatu ke dalam satu file. Hal ini menyebabkan isi file PHP dan HTML tersebut akan terlihat panjang dan akan terasa menyulitkan jika ingin melakukan perubahan. Untuk menangani hal ini, Anda dapat menggunakan aplikasi template engine. Salah satu aplikasi template engine yang dapat digunakan adalah Smarty. Dengan menggunakan Smarty, kita dapat memisahkan pembuatan design dan coding dengan mudah. Hal ini sesuai dengan tujuan Smarty, yaitu memisahkan antara business logic (coding part) dengan presentation part (design part). Dengan demikian, jika dalam suatu projek aplikasi yang dikerjakan secara kelompok, maka bagian desainer dan programmer dapat bekerja secara bersamaan, karena bagian mereka masing-masing sudah dipisahkan dengan penggunaan Smarty. Untuk mengetahui lebih lanjut mengenai penggunaan Smarty, “Tutorial” kali ini akan membahas cara instalasi dan penggunaan dasar Smarty. Saat penulisan, Tutorial ini dibuat dan diuji coba dengan menggunakan Fedora Core 5. Namun, seharusnya tutorial ini juga dapat diterapkan pada sistem lain tanpa masalah yang berarti.
72
12/2006 INFOLINUX
Instalasi Smarty Proses instalasi Smarty dapat dilakukan dengan mudah pada sistem Linux Anda. Sebelum menginstalasi Smarty, ada baiknya paket pendukung lainnya seperti Apache, MySQL, dan PHP telah terinstalasi dengan baik pada sistem Anda. Secara umum, proses instalasi Smarty adalah sebagai berikut: 1. Paket tarball terbaru Smarty dapat di download dari url http://smarty.php. net/download.php. Anda juga dapat menemukan paket tarball Smarty 2.6.14 dalam bonus DVD InfoLINUX edisi ini. 2. Login sebagai root, kemudian lakukan proses extract file tarball Smarty ke sembarang direktori.
-----
Smarty_Compiler.class.php debug.tpl internals/ plugins/
4. Sampai tahapan ini, proses instalasi Smarty sudah selesai.
Penggunaan dasar Smarty
Seharusnya, saat ini Anda sudah memiliki struktur direktori Smarty seperti di bawah ini.
Setelah melakukan proses instalasi Smarty, berikutnya kita akan melakukan sejumlah latihan untuk lebih memahami cara kerja Smarty. Sebelum dapat menjalankan Smarty, kita memerlukan empat directori setup agar Smarty dapat berjalan. Keempat direktori ini dipergunakan untuk meletakkan file-file templates, compiled templates, cache templates, dan config file. Meskipun terkadang kita tidak membutuhkan caching atau config file, akan lebih baik jika keempat direktori ini selalu dibuat. Direktori-direktori ini juga disarankan agar diletakkan pada direktori luar document root web server. Direktori cache dan config file juga membutuhkan write akses ke direktori cache dan compile agar dapat berjalan dengan baik. Dalam contoh ini, di misalkan letak document root terletak pada /var/www/ html, dengan web server username adalah apache. Untuk letak file Smarty-nya, dalam contoh ini akan diletakkan pada direktori /web/smarty.
/usr/lib/php/Smarty/ -- Config_File.class.php -- Smarty.class.php
# mkdir -p /web/smarty # mkdir -p /web/smarty/templates # mkdir -p /web/smarty/templates_c
$ su # tar xzvf Smarty-2.6.14.tar.gz
3. Berikutnya, copykan seluruh isi file yang terdapat dalam folder libs Smarty, ke direktori lib PHP Anda. Sebagai contoh disini, direktori lib PHP berada dalam direktori /usr/lib/php/Smarty. # mkdir -p /usr/lib/php/Smarty # cp -r Smarty-2.6.14/Smarty2.6.14/libs/* /usr/lib/php/ Smarty/
www.infolinux.web.id
TUTORIAL SMARTY kan http://localhost/testsmarty/test.php pada alamat url-nya. Jika Anda melihat text “Hello, World!”, berarti uji coba pertama Smarty ini sudah dapat bekerja dengan baik. Setelah ini, kita akan melanjutkan ke beberapa contoh kecil penggunaan Smarty, untuk lebih mempermudah penggunaannya.
Operasi dasar Smarty Dalam Smarty, operasi dasar yang banyak digunakan adalah cara memberikan variabel atau array, kemudian mengintegrasikannya ke halaman HTML. Contoh di bawah ini menjelaskan cara menggunakan variabel dan array di Smarty.
Gbr-1. Hasil output program test2.php.
# mkdir -p /web/smarty/cache # mkdir -p /web/smarty/configs # chown apache:apache smarty/ templates_c # chown apache:apache smarty/cache # chmod 775 smarty/templates_c # chmod 775 smarty/cache
Selanjutnya, buat direktori bernama testsmarty pada dokumen root Apache Anda (dalam contoh ini di /var/www/html), dan buat sebuah file bernama test.php untuk menguji coba Smarty. # cd /var/www/html/ # mkdir testsmarty # cd testsmarty # vim test.php
Buat sebuah file bernama test.tpl yang akan digunakan sebagai file template Smarty, di direktori /web/smarty. # vim /web/smarty/templates/test. tpl Smarty Hello, {$name}!
Untuk menjalankan script yang baru saja dibuat, buka web browser, kemudian ketik-
# vim /var/www/html/testsmarty/ test2.php template_dir = “/web/ smarty/templates”; $smarty->compile_dir = “/web/ smarty/templates_c”; $smarty->cache_dir = “/web/smarty/ cache”; $smarty->config_dir = “/web/ smarty/configs”; // cara mendefinisikan variabel secara langsung
$smarty->template_dir = “/web/ smarty/templates”; $smarty->compile_dir = “/web/ smarty/templates_c”; $smarty->cache_dir = “/web/smarty/ cache”; $smarty->config_dir = “/web/ smarty/configs”; $smarty->assign(“name”, “World”); $smarty->display(“test.tpl”); ?>
www.infolinux.web.id
Gbr-2. Hasil output program test3.php.
INFOLINUX 12/2006
73
TUTORIAL SMARTY
Gbr-3. Hasil output program test4.php.
$smarty->assign(“name”, “Supri”); // cara mendefinisikan variabel menggunakan array $friends = array(“Supri”, “Wiryadi”, “Arie”, “Fanny”, “Leli”, “Mardiana”); $smarty->assign (“friends”, $friends); $smarty->display(“test2.tpl”); ?>
Untuk templatenya, buat file bernama test2.tpl, dan isikan dengan baris berikut. # vim /web/smarty/templates/test2. tpl Smarty Hello, {$name}!
Friends List: {section name=i loop=$friends} {$friends[i]}
{/section}
Output program di atas, dapat terlihat seperti pada Gbr-1. Smarty juga memiliki fitur menarik yang dapat menguntungkan prinsip design, yaitu terdapatnya fitur variable modifier. Fitur ini digunakan untuk mengubah output yang diberikan kepada suatu variabel dengan menggunakan template. Sebagai contoh, dalam contoh ini akan digunakan modifier capitalize, escape, dan date_format yang
74
12/2006 INFOLINUX
Gbr-4. Hasil output program test5..php.
terdapat di Smarty untuk mengubah output dari variabel yang diberikan. # vim /var/www/html/testsmarty/ test3.php template_dir = “/web/ smarty/templates”; $smarty->compile_dir = “/web/ smarty/templates_c”; $smarty->cache_dir = “/web/smarty/ cache”; $smarty->config_dir = “/web/ smarty/configs”; // mendefinisikan variabel name dan address $smarty->assign(‘name’, ‘tri haryati’); $smarty->assign(‘address’, ‘45th & Harris’); $smarty->display(“test3.tpl”); ?>
Untuk template-nya, buat file bernama test3.tpl, dan isikan dengan baris berikut. # vim /web/smarty/templates/test3. tpl User Info User Information:
Name: {$name|capitalize}
Addr: {$address|escape}
Date: {$smarty.now|date_ format:”%Y-%m-%d”}
Output program di atas, dapat terlihat seperti pada Gbr-2. Selain variable modifier, Smarty juga memiliki fitur template function. Dengan menggunakan template function, Anda dapat menyertakan suatu template ke template lainnya dengan menggunakan include function. Sebagai contoh, misalkan kita mempunyai beberapa file header dalam suatu aplikasi sebagai berikut : # vim /web/smarty/templates/ header.tpl
{$title|default:”no title”} # vim /web/smarty/templates/ footer.tpl # vim /web/smarty/templates/ test4.tpl {include file=”header.tpl” title=”User Info”} User Information: Name: {$name|capitalize}
Address: {$address|escape}
{include file=”footer.tpl”}
www.infolinux.web.id
IKLAN
TUTORIAL SMARTY Dari situ kita lihat, file test4.tpl dapat memanggil dua file template lain yang dibutuhkan. Kita tinggal mendefinisikan file test4.tpl dari index skrip PHP yang kita buat. # vim /var/www/html/testsmarty/ test4.php template_dir = “/web/ smarty/templates”; $smarty->compile_dir = “/web/ smarty/templates_c”; $smarty->cache_dir = “/web/smarty/ cache”; $smarty->config_dir = “/web/ smarty/configs”; // memberikan variabel name dan address $smarty->assign(‘name’, ‘tri haryati’); $smarty->assign(‘address’, ‘45th & Harris’); $smarty->display(“test4.tpl”); ?>
Output program di atas, dapat terlihat seperti pada Gbr-3.
Mengakses database dengan Smarty Setelah mengenal operasi dasar dari Smarty, berikutnya kita akan mempelajari cara akses database ke MySQL. Secara umum, tidak terdapat perbedaan yang terlalu mencolok antara metode pengaksesan PHP ke database MySQL dengan menggunakan Smarty maupun tanpa menggunakan Smarty. Hal yang paling utama Anda ketahui adalah mengenai konfigurasi database yang akan digunakan seperti username, password, dan nama database. Sebagai contoh, informasi database yang akan digunakan pada contoh di bawah ini adalah sebagai berikut (username=supriyanto, password=123456, nama database=friends). Pertama, buat database bernama kawan. $ mysqladmin -u supriyanto -p create kawan
Lakukan proses dump isi file friends.sql
76
12/2006 INFOLINUX
Gbr-5. Hasil output program test6.php.
yang ada dalam DVD InfoLINUX edisi ini ke database kawan. $ mysql -u supriyanto -p kawan < friends.sql
Berikutnya buat skript php bernama test5.php untuk menampilkan isi database kawan. Isi lengkap file test5.php dapat Anda temukan dalam DVD majalah InfoLINUX edisi ini. Copykan file test5. php ke /var/www/html/testsmarty/. Output program test5.php, dapat dilihat pada Gbr-4.
Membuat aplikasi guestbook Sebagai contoh terakhir, kita akan membuat aplikasi guestbook dengan menggunakan Smarty. Tujuan dari contoh ini adalah mendemontrasikan bagaimana cara Smarty bekerja dalam suatu aplikasi dan bagaimana cara membaginya pada level presentation. Contoh guestbook Dalam contoh ini, di misalkan letak document root untuk aplikasi guestbook terletak pada /var/www/html/testsmarty. Untuk file konfigurasi, template, dan compile dari aplikasi ini, akan kita letakkan pada direktori /web/smarty/guestbook. Secara umum, gambaran tree dari file dan folder dari aplikasi guestbook yang akan kita buat adalah sebagai berikut: /web/smarty/guestbook/ -- cache -- configs
-- libs -- guestbook.lib.php -- guestbook_setup.php -- sql.lib.php -- template -- guestbook.tpl -- guestbook_form.tpl -- template_c /var/www/html/testsmarty/ -- guestbook.php
Dari gambaran tree tersebut, terdapat lima file utama guestbook yang fungsinya adalah sebagai berikut: guestbook.php. File ini merupakan aplikasi utama dari guestbook. Dalam file ini terdapat sejumlah definisi, yang di antaranya direktori aplikasi, include the setup script, dan beberapa yang lainnya. Konfigurasi utama yang perlu diperhatikan dalam file ini adalah pendefinisian dari direktori aplikasi, smarty lib, dan setup script. Ketiga direktori tersebut didefinisikan ke dalam label GUESTBOOK_DIR, SMARTY_DIR, dan GUESTBOOK_DIR. guestbook_setup.php. File ini ini berisi sejumlah konfigurasi dasar seperti database dan konfigurasi template. Untuk mengakses database dalam aplikasi ini, instalasikan paket php-pear-DB terlebih dahulu.
www.infolinux.web.id
TUTORIAL SMARTY sql.lib.php. File ini merupakan database wrapper class untuk PEAR::DB. Dalam file ini akan dilakukan sejumlah proses selection database, dan menampilkan record yang diinginkan. guestbook.tpl dan guestbook_form.tpl. File ini berfungsi sebagai template untuk aplikasi guestbook. Guestbook. tpl digunakan untuk menampilkan isi guestbook, sedangkan guestbook_form. tpl digunakan untuk menambah entry ke guestbook. Setelah mengetahui fungsi dari masingmasing file guestbook, berikut penjelasan singkat langkah-langkah untuk menjalankannya. Sebagai catatan, semua isi file dalam tutorial ini, sudah kami sertakan dalam file zip bernama guestbook-tutorial. zip yang dapat Anda peroleh dalam DVD InfoLINUX edisi ini. 1. Ekstrak file guestbook-tutorial.tar.gz yang terdapat dalam DVD InfoLINUX edisi ini. # tar xzvf guestbook-tutorial. tar.gz
smarty/guestbook/libs # cp sql.lib.php /web/smarty/ guestbook/libs # cp guestbook.tpl /web/smarty/ guestbook/template # cp guestbook_form.tpl /web/ smarty/guestbook/template
5. Instalasikan paket php-pear-db sesuai dengan distro yang Anda gunakan. 6. Berikutnya buat file bernama guestbook. sql, dengan isi sebagai berikut. CREATE DATABASE GUESTBOOK; CONNECT GUESTBOOK; CREATE TABLE GUESTBOOK ( id int(11) NOT NULL auto_ increment, Name varchar(255) NOT NULL default ‘’, EntryDate datetime NOT NULL default ‘0000-00-00 00:00:00’, Comment text NOT NULL, PRIMARY KEY (id), KEY EntryDate (EntryDate) ) TYPE=MyISAM; GRANT ALL ON GUESTBOOK.* to guestbook@localhost identified by ‘foobar’;
7. Lakukan proses dump file guestbook.sql ke database MySQL Anda. # mysql -u -p < guestbook.sql
8. Langkah terakhir adalah pengujian. Buka browser Anda, kemudian ketikkan http://localhost/testsmarty/guestbook.php. Jika berhasil, maka Anda akan mendapatkan output seperti yang terdapat pada Gbr-5. Jika masih belum berhasil, coba periksa kembali file konfigurasinya, agar sesuai letak path dalam file konfigurasi tersebut dengan kondisi sistem Anda. Demikian pengenalan dasar mengenai Smarty PHP Template. Diharapkan dari penjelasan singkat ini, dapat lebih membuka pemahaman kita mengenai teknik pemrograman di PHP yang lebih baik dan terstruktur. Masih banyak fitur lain dari Smarty yang tidak dibahas pada “Tutorial” ini. Anda dapat mempelajari lebih lanjut penggunaan Smarty dari file manual Smarty yang disertakan dalam DVD InfoLINUX edisi ini. Akhir kata, selamat mencoba! Supriyanto ([email protected])
2. Copy file guestbook.php ke direktori / var/www/html/testsmarty/. # cp guestbook.php /var/www/ html/testsmarty/
3. Buat direktori yang diperlukan untuk file konfigurasi, template, dan compile dari aplikasi guestbook. # mkdir -p /web/smarty/guestbook # mkdir -p /web/smarty/ guestbook/cache # mkdir -p /web/smarty/ guestbook/configs # mkdir -p /web/smarty/ guestbook/libs # mkdir -p /web/smarty/ guestbook/template # mkdir -p /web/smarty/ guestbook/template_c # chmod 777 /web/smarty/ guestbook/template_c
4. Lakukan proses copy file-file berikut ini. # cp guestbook.lib.php /web/ smarty/guestbook/libs # cp guestbook_setup.php /web/
www.infolinux.web.id
INFOLINUX 12/2006
77