26
www.infolinux.web.id 05/2007 INFOLINUX 52 TUTORIAL POSTGRESQL Bahasa C dan Database PostgreSQL A nda membangun program dengan bahasa C? Membutuhkan database yang powerful? Silakan gunakan PostgreSQL. Dengan memanfaatkan pustaka yang telah tersedia, kita dapat membangun aplikasi dengan bahasa C, yang terhubung ke database PostgreSQL. Ketika Anda membutuhkan pustaka untuk melakukan koneksi ke database PostgreSQL dari program C yang Anda bangun, Anda tidak perlu mencari pustaka tersebut ke mana-mana. PostgreSQL telah datang di antaranya dengan pustaka libpq, yang bisa digunakan dengan mudah dan nyaman. Libpq datang dengan semua fungsi yang diperlukan untuk berkomunikasi dengan server database PostgreSQL. Di dalam “Tutorial” ini, kita akan mem- bahas beberapa contoh aplikasi yang be- kerja dengan database PostgreSQL, mulai dari yang sangat sederhana sampai contoh untuk kebutuhan dunia nyata: Contoh melakukan koneksi ke database server. Melakukan query select sederhana. Menampilkan isi tabel. Melakukan query delete dan insert. Contoh aplikasi data pasien. Versi PostgreSQL yang digunakan di dalam tulisan ini adalah PostgreSQL 8.2.1. Sebelum memulai, pastikan Anda telah menginstal paket develoment PostgreSQL (rujuklah kepada dokumentasi distro Anda). Untuk file header, kita akan memerlukan libpq-fe.h. Semua pembahasan di tulisan ini diba- ngun di atas sistem Zenwalk Linux 4.2, na- mun seharusnya bisa digunakan pada sistem lainnya tanpa banyak perubahan. Sebelum mengikuti pembahasan, perlu dimaklumi bahwa, contoh-contoh yang ada merupakan contoh yang dapat dikembangkan sesuai ke- butuhan Anda sendiri, sesuai dengan lisensi yang dipergunakan. Kami barangkali tidak membangun aplikasi yang berfungsi penuh, dengan segudang fitur, karena akan me- makan sangat banyak tempat dan sekaligus keluar dari batasan materi. Melakukan koneksi ke server Untuk melakukan koneksi ke server, kita akan menggunakan fungsi PQconnectdb() yang akan membutuhkan satu parameter berupa connection string PostgreSQL. Apa- bila koneksi berhasil, maka akan dihasilkan reference ke struktur data PGconn dengan status koneksi CONNECTION_OK. Di contoh ini, kita akan melakukan koneksi dengan connection string didapat- kan dari argumen yang diberikan oleh user. Selanjutnya, kita akan mencoba melakukan koneksi. Apabila koneksi gagal, kita akan menampilkan pesan kesalahan. Apabila koneksi berhasil, maka kita akan menampil- kan beberapa informasi koneksi. Sebelum aplikasi selesai, kita akan melakukan cleanup dengan memanggil fungsi PQfinish(). Berikut ini adalah source code 1.c: /* * (c) Nop, 2007, GPLv2. */ #include <stdio.h> #include <libpq-fe.h> int main(int argc, char * argv[]) { PGconn *conn; if (argc != 2) { fprintf (stderr, “usage: %s <connection_string>\n”, argv[0]); return 1; } conn = PQconnectdb (argv[1]); if (PQstatus (conn) != CONNECTION_OK) { fprintf (stderr, “Kesalahan koneksi: %s\n”, PQerrorMessage (conn)); } else { fprintf (stdout, “connected:\n”); fprintf (stdout, “\tto host: %s\n”, PQhost (conn)); fprintf (stdout, “\tto database: %s\n”, PQdb (conn)); fprintf (stdout,

52-77_Tutorial_05.pdf

Embed Size (px)

Citation preview

Page 1: 52-77_Tutorial_05.pdf

www.infolinux.web.id05/2007 � INFOLINUX52

TUTORIAL POSTGRESQL

Bahasa C dan Database PostgreSQL

Anda membangun program dengan bahasa C? Membutuhkan database yang powerful?

Silakan gunakan PostgreSQL. Dengan memanfaatkan pustaka yang telah tersedia,

kita dapat membangun aplikasi dengan bahasa C, yang terhubung ke database

PostgreSQL.

Ketika Anda membutuhkan pustaka untuk

melakukan koneksi ke database PostgreSQL

dari program C yang Anda bangun, Anda

tidak perlu mencari pustaka tersebut ke

mana-mana. PostgreSQL telah datang di

antaranya dengan pustaka libpq, yang bisa

digunakan dengan mudah dan nyaman.

Libpq datang dengan semua fungsi yang

diperlukan untuk berkomunikasi dengan

server database PostgreSQL.

Di dalam “Tutorial” ini, kita akan mem-

bahas beberapa contoh aplikasi yang be-

kerja dengan database PostgreSQL, mulai

dari yang sangat sederhana sampai contoh

untuk kebutuhan dunia nyata:

� Contoh melakukan koneksi ke database

server.

� Melakukan query select sederhana.

� Menampilkan isi tabel.

� Melakukan query delete dan insert.

� Contoh aplikasi data pasien.

Versi PostgreSQL yang digunakan di

dalam tulisan ini adalah PostgreSQL 8.2.1.

Sebelum memulai, pastikan Anda telah

menginstal paket develoment PostgreSQL

(rujuklah kepada dokumentasi distro Anda).

Untuk fi le header, kita akan memerlukan

libpq-fe.h.

Semua pembahasan di tulisan ini di ba-

ngun di atas sistem Zenwalk Linux 4.2, na-

mun seharusnya bisa digunakan pada sistem

lainnya tanpa banyak perubahan. Sebelum

mengikuti pembahasan, perlu dimaklumi

bahwa, contoh-contoh yang ada merupakan

contoh yang dapat dikembangkan sesuai ke-

butuhan Anda sendiri, sesuai dengan lisensi

yang dipergunakan. Kami barangkali tidak

membangun aplikasi yang berfungsi penuh,

dengan segudang fi tur, karena akan me-

makan sangat banyak tempat dan sekali gus

keluar dari batasan materi.

Melakukan koneksi ke serverUntuk melakukan koneksi ke server, kita

akan menggunakan fungsi PQconnectdb()

yang akan membutuhkan satu parameter

berupa connection string PostgreSQL. Apa-

bila koneksi berhasil, maka akan dihasilkan

reference ke struktur data PGconn dengan

status koneksi CONNECTION_OK.

Di contoh ini, kita akan melakukan

koneksi dengan connection string didapat-

kan dari argumen yang diberikan oleh user.

Selanjutnya, kita akan mencoba melakukan

koneksi. Apabila koneksi gagal, kita akan

menampilkan pesan kesalahan. Apabila

koneksi berhasil, maka kita akan menampil-

kan beberapa informasi koneksi.

Sebelum aplikasi selesai, kita akan

melakukan cleanup dengan memanggil

fungsi PQfi nish().

Berikut ini adalah source code 1.c:

/* * (c) Nop, 2007, GPLv2. */

#include <stdio.h>#include <libpq-fe.h>

int main(int argc, char * argv[]){ PGconn *conn;

if (argc != 2) { fprintf (stderr, “usage: %s <connection_string>\n”, argv[0]); return 1; }

conn = PQconnectdb (argv[1]);

if (PQstatus (conn) != CONNECTION_OK) {

fprintf (stderr, “Kesalahan koneksi: %s\n”, PQerrorMessage (conn)); } else { fprintf (stdout, “connected:\n”); fprintf (stdout, “\tto host: %s\n”, PQhost (conn)); fprintf (stdout, “\tto database: %s\n”, PQdb (conn)); fprintf (stdout,

Page 2: 52-77_Tutorial_05.pdf

www.infolinux.web.id INFOLINUX � 05/2007 53

TUTORIAL POSTGRESQL“\tas user: %s\n”, PQuser (conn));

}

fprintf (stdout, “disconnecting...”); PQfinish (conn); fprintf (stdout, “done\n”);

return 0;}

Lakukanlah kompilasi dengan memberi-

kan perintah berikut:

$ gcc -o 1 1.c -lpq

Setelah itu, jalankanlah program 1 yang

telah dihasilkan:

$ ./1usage: ./1 <connection_string>

Contoh koneksi gagal:

$ ./1 ‘dbname=notfound’ Kesalahan koneksi: FATAL: database “notfound” does not exist

disconnecting...done

Contoh koneksi berhasil 1:

$ ./1 ‘’connected: to host: (null) to database: nop as user: nopdisconnecting...done

Contoh koneksi berhasil 2:

$ ./1 ‘host=localhost dbname=nop user=nop’connected: to host: localhost to database: nop as user: nopdisconnecting...done

Penjelasan tambahan source code:

� PQstatus() dapat digunakan untuk me-

nguji status hasil koneksi.

� PQerrorMessage() dapat digunakan un-

tuk mendapatkan pesan kesalahan.

� PQhost() dapat digunakan untuk

mendapatkan informasi host dari

koneksi.

� PQdb() dapat digunakan untuk

mendapatkan informasi database dari

koneksi.

� PQuser() dapat digunakan untuk

mendapatkan informasi user dari

koneksi.

� Perhatikanlah juga cara penggunaan PQ-

connectdb() dan PQfi nish().

Mendapatkan versi PostgreSQLUntuk mendapatkan versi PostgreSQL,

kita akan memanggil fungsi version() yang

telah tersedia. Pada contoh ini, kita akan

memanggil fungsi tersebut, mendapatkan

hasilnya, kemudian menampilkannya ke

stdout.

Berikut ini adalah source code 2.c:

/* * (c) Nop, 2007, GPLv2. */

#include <stdio.h>#include <libpq-fe.h>

#define MAX_LEN 255

int main(int argc, char * argv[]){ PGconn *conn; PGresult *res; char * query = calloc (MAX_LEN, sizeof (char));

if (argc != 2) { fprintf (stderr, “usage: %s <connection_string>\n”, argv[0]); return 1; }

conn = PQconnectdb (argv[1]);

if (PQstatus (conn) != CONNECTION_OK) {

fprintf (stderr, “Kesalahan koneksi: %s\n”, PQerrorMessage (conn)); } else { sprintf (query,

“select version() as version”); res = PQexec (conn, query); if (PQresultStatus (res) == PGRES_TUPLES_OK) { fprintf (stdout, “version: %s\n”, PQgetvalue(res, 0,0)); } }

PQfinish (conn);

return 0;}

Lakukanlah kompilasi dengan memberi-

kan perintah berikut ini:

$ gcc -o 2 2.c -lpq

Setelah itu, jalankanlah program 2 yang

telah dihasilkan:

$ ./2 ‘user=nop’version: PostgreSQL 8.2.1 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.4.6

Penjelasan source code:

� Selain struktur data PGconn (koneksi),

kita juga menggunakan PGresult (hasil

query/result query).

� Pertama-tama, kita akan membangun

query berikut:

select version() as version

� Setelah itu, kita akan melempar query

ke fungsi PQexec() yang akan membu-

tuhkan parameter berupa struktur data

koneksi dan query string. Hasilnya akan

diarahkan ke struktur data PGresult.

� Untuk query yang mengembalikan

nilai (seperti select), maka kita akan

memeriksa apakah status result ber nilai

PGRES_TUPLES_OK. Apabila benar,

maka kita akan menampilkan infor-

masi yang telah didapatkan. Perhatikan

bahwa kita menggunakan fungsi PQre-

sultStatus() untuk mendapatkan status

result.

� Untuk mendapatkan nilai dari result

query, kita akan menggunakan fungsi

PQgetvalue(). Fungsi ini akan mem-

Page 3: 52-77_Tutorial_05.pdf

www.infolinux.web.id05/2007 � INFOLINUX54

TUTORIAL POSTGRESQLbutuhkan tiga parameter: struktur data

result query, baris dan kolom. Baris dan

kolom dihitung mulai dari 0.

Menampilkan isi tabelContoh berikut ini merupakan pengemba-

ngan lebih lanjut dari contoh sebelumnya.

Kita masih tetap akan bermain di perintah

select, namun kita tidak hanya mengambil

baris pertama saja, karena kita akan me-

nampilkan isi sebuah tabel.

Sebagai catatan, nama database yang

dipergunakan adalah test dan tabel yang di-

pergunakan adalah a.

Perintah untuk membuat database test:

$ createdb -e --owner=nop -Unop test CREATE DATABASE test OWNER nop;CREATE DATABASE

Perintah untuk membuat tabel a:

test=# create table a(id serial, nama varchar(128), alamat varchar(255), primary key(id));NOTICE: CREATE TABLE will create implicit sequence “a_id_seq” for serial column “a.id”NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index “a_pkey” for table “a”CREATE TABLEtest=#

Perintah-perintah untuk mengisikan

data ke table a:

test=# insert into a(nama, alamat) values (‘andi’,’aceh’);INSERT 0 1test=# insert into a(nama, alamat) values (‘budi’,’bandung’);INSERT 0 1test=# insert into a(nama, alamat) values (‘cherry’,’cimanggis’);INSERT 0 1test=# insert into a(nama, alamat) values (‘deni’,’denpasar’);INSERT 0 1test=# insert into a(nama, alamat) values (‘edi’,’enrekang’);INSERT 0 1

Berikut ini adalah source code 3.c

/* * (c) Nop, 2007, GPLv2. */

#include <stdio.h>#include <libpq-fe.h>

#define MAX_LEN 255

int main(int argc, char * argv[]){ PGconn *conn; PGresult *res; char * query = calloc (MAX_LEN, sizeof (char)); int field_count; int rec_count; int i,j;

if (argc != 2) { fprintf (stderr, “usage: %s <connection_string>\n”, argv[0]); return 1; }

conn = PQconnectdb (argv[1]);

if (PQstatus (conn) != CONNECTION_OK) {

fprintf (stderr, “Kesalahan koneksi: %s\n”, PQerrorMessage (conn)); } else { sprintf (query, “select nama,alamat from a”); res = PQexec (conn, query); if (PQresultStatus (res) == PGRES_TUPLES_OK) { field_count = PQnfields (res); for (i=0; i< field_count; i++) { fprintf (stdout, “%-40s”, PQfname (res, i)); } fprintf (stdout, “\n”);

rec_count = PQntuples (res); for (i=0; i< rec_count; i++) { for (j=0; j< field_count; j++) { fprintf (stdout, “%-40s”, PQgetvalue (res, i, j)); } fprintf (stdout, “\n”); }

PQclear (res);

} }

PQfinish (conn);

return 0;}

Lakukanlah kompilasi dengan memberi-

kan perintah berikut:

$ gcc -o 3 3.c -lpq

Setelah kompilasi dilakukan, kita bisa

menjalankan program 3 yang dihasil-

kan. Pastikan kita mengikutkan informasi

dbname=test di dalam parameter koneksi.

Contoh output:

$ ./3 ‘dbname=test user=nop’nama alamat andi aceh budi bandungcherry cimanggis deni denpasar edi enrekang

Penjelasan source code:

� Lihatlah juga penjelasan 2.c

� Untuk mendapatkan jumlah fi eld, kita

mempergunakan fungsi PQnfi elds()

yang akan membutuhkan parameter

berupa result query.

� Untuk mendapatkan nama fi eld, melalui

perulangan, kita akan mempergunakan

Page 4: 52-77_Tutorial_05.pdf

www.infolinux.web.id INFOLINUX � 05/2007 55

TUTORIAL POSTGRESQLfungsi PQfname() yang akan mem-

butuhkan dua parameter, yaitu result

query dan nomor kolom. Nomor kolom

dimulai dari 0.

� Untuk mendapatkan jumlah baris, kita

mempergunakan fungsi PQntuples()

yang akan membutuhkan parameter

berupa result query.

� Dengan jumlah baris dan kolom telah

diketahui, kita bisa melakukan per-

ulangan untuk mendapatkan isi tabel

menggunakan fungsi yang juga telah

dibahas di 2.c, yaitu PQgetvalue().

� Apabila result query sudah tidak diper-

gunakan, lakukan cleanup dengan fungsi

PQclear(). Jangan lupakan yang satu ini.

Menghapus tabel, menambahkan 100000 recordDi dalam contoh ini, kita akan memberikan

perintah delete dan insert. Perintah delete

kita gunakan untuk menghapus seluruh isi

tabel. Setelah itu, kita mengisikan 100.000

record ke dalam tabel tersebut.

Sebagai catatan, database yang diper-

gunakan adalah database test dan tabel

yang dipergunakan adalah tabel b.

Perintah untuk membuat tabel b:

# create table b(b1 serial, b2 varchar, primary key(b1));NOTICE: CREATE TABLE will create implicit sequence “b_b1_seq” for serial column “b.b1”NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index “b_pkey” for table “b”CREATE TABLE

Berikut ini adalah source code 4.c:

/* * (c) Nop, 2007, GPLv2. */

#include <stdio.h>#include <libpq-fe.h>

#define MAX_LEN 255#define ROW_COUNT 100000

int main(int argc, char * argv[]){ PGconn *conn; PGresult *res; char * query = calloc

(MAX_LEN, sizeof (char)); int i;

if (argc != 2) { fprintf (stderr, “usage: %s <connection_string>\n”, argv[0]); return 1; }

conn = PQconnectdb (argv[1]);

if (PQstatus (conn) != CONNECTION_OK) {

fprintf (stderr, “Kesalahan koneksi: %s\n”, PQerrorMessage (conn)); }

else { sprintf (query, “delete from b”); res = PQexec (conn, query); if (PQresultStatus (res) == PGRES_COMMAND_OK) { fprintf (stdout, “done deleting content of b.\n”); PQclear (res); }

for (i=0; i< ROW_COUNT; i++) { sprintf (query, “insert into b(b2) values (‘row %d’)”, i); res = PQexec (conn, query); if (PQresultStatus (res) != PGRES_COMMAND_OK) { fprintf (stderr, “\tfailed on row: %d\n”, i);

exit (1); } PQclear (res);

} fprintf (stdout, “done adding %d rows\n”, ROW_COUNT);

}

PQfinish (conn);

return 0;}

Lakukanlah kompilasi dengan memberi-

kan perintah berikut:

$ gcc -o 4 4.c -lpq

Jalankanlah 4 dengan informasi

dbname=test ditambahkan ke connection

string.

Penjelasan source code:

� Untuk memberikan query, kita tetap

menggunakan PQexec().

� Untuk memeriksa status result yang ti-

dak mengembalikan data, menggunakan

fungsi PQresultStatus() kita akan me me-

riksa nilai PGRES_COMMAND_OK.

� Jangan lupa berikan PQclear() apabila

diperlukan.

Data pasienDi aplikasi contoh ini, kita akan me-

nyediakan fungsi untuk menambahkan data

pasien dan melihat data seluruh pasien.

Tampilan menu utama:

DATA PASIEN***********

a Tambah datab Tampil datax Keluar aplikasiPilihan Anda:

Berikut ini adalah source code 5.c:

/* * (c) Nop, 2007, GPLv2. */

#include <stdio.h>

Page 5: 52-77_Tutorial_05.pdf

www.infolinux.web.id05/2007 � INFOLINUX56

TUTORIAL POSTGRESQL#include <libpq-fe.h>

#define MAX_LEN 255

int main(int argc, char * argv[]){ PGconn *conn; PGresult *res; char * conninfo = calloc (MAX_LEN, sizeof (char)); char * query = calloc (MAX_LEN, sizeof (char)); char * nama = calloc (MAX_LEN, sizeof (char)); char * alamat = calloc (MAX_LEN, sizeof (char)); char * temp = calloc (MAX_LEN, sizeof (char)); int field_count; int rec_count; int c,menu; int i,j;

strcpy (conninfo, “dbname=test user=nop”); conn = PQconnectdb (conninfo);

if (PQstatus (conn) != CONNECTION_OK) {

fprintf (stderr, “Kesalahan koneksi: %s\n”, PQerrorMessage (conn)); exit (1); }

while ( 1 ) { fprintf(stdout, “\n\n\nDATA PASIEN\n”); fprintf(stdout, “***********\n\n”); fprintf(stdout, “a Tambah data\n”); fprintf(stdout, “b Tampil data\n”); fprintf(stdout, “x Keluar aplikasi\n”); fprintf(stdout, “Pilihan Anda: “); c = tolower(fgetc (stdin));

menu = c;

while (c != ‘\n’ && c != EOF) c = fgetc (stdin);

if (menu == ‘a’) { fprintf(stdout, “Tambah data\n”); fprintf(stdout, “===========\n”); fprintf(stdout, “Nama : “); fgets (nama, MAX_LEN-1, stdin); fprintf(stdout, “Alamat : “); fgets (alamat, MAX_LEN-1, stdin); sprintf (query, “insert into pasien (nama, alamat) values (‘%s’,’%s’)”, nama, alamat); res = PQexec (conn, query); PQclear (res); } else

if (menu == ‘b’) { fprintf(stdout, “Tampil data\n”); fprintf(stdout, “===========\n”); sprintf (query, “select nama,alamat from pasien”); res = PQexec (conn, query); field_count = PQnfields (res); for (i=0; i< field_count; i++) { fprintf (stdout, “%-40s”, PQfname (res, i)); } fprintf (stdout, “\n”);

rec_count = PQntuples (res);

for (i=0; i< rec_count; i++) { for (j=0; j< field_count; j++) { strcpy (temp, PQgetvalue (res, i, j)); temp[strlen(temp)-1] = 0; fprintf (stdout, “%-40s”, temp); } fprintf (stdout, “\n”); }

PQclear (res);

} else

if (menu == ‘x’) { fprintf(stdout, “Bye\n”); break;

} }; PQfinish (conn);

free (nama); free (alamat); free (query); free (conninfo); free (temp);

return 0;}

Lakukanlah kompilasi dengan memberi-

kan perintah berikut:

$ gcc -o 5 5.c -lpq

Agar tampilan lebih bagus dan mudah

digunakan, Anda bisa menggunakan pusta-

ka ncurses (sudah pernah dibahas di Info-

LINUX). Sampai di sini dulu pembahasan

kita. Selamat mengembangkan!

Noprianto [[email protected]

Page 6: 52-77_Tutorial_05.pdf

IKLAN

Page 7: 52-77_Tutorial_05.pdf

www.infolinux.web.id05/2007 � INFOLINUX58

TUTORIAL KAMUS

Membangun Kamus Dua BahasaBagian 1 dari 2 Tulisan

Di dunia komputer, program kamus dapat digunakan untuk membantu mempelajari

bahasa asing, termasuk ketika kita mempelajari dokumentasi program tertentu. Selain

menggunakan program kamus yang sudah tersedia, kita bisa pula membangun program

kamus sendiri. “Tutorial” ini akan membahas pembuatan kamus secara tuntas.

Program kamus yang akan kita buat kali

ini merupakan program kamus dua bahasa.

Sebagai contoh adalah Bahasa Inggris–

Indonesia. Agar lebih mantap, kita akan

memisahkan database kamus dengan pro-

gram kamusnya. Dengan demikian, program

kamus yang akan kita buat tidak akan secara

kaku menyebut dirinya program kamus ba-

hasa Inggris–Indonesia ataupun bahasa lain-

nya, melainkan akan membaca metadata

bahasa dari database kamus. Kondisi demiki-

an memungkinkan kita memiliki banyak

database kamus (misal: Inggris–Indonesia,

Jerman–Indonesia, dan lain-lain) dan tetap

menggunakan satu program pembaca.

Untuk saat ini, kemampuan penerjema-

han kamus kita masih berbasis kata. De ngan

demikian, user memasukkan kata yang ingin

dicari padanannya dalam bahasa lain, dan

output kamus adalah padanan kata yang

diinginkan. Agar lebih mantap, karena satu

kata terkadang memiliki hubungan dengan

kata lain, kita bisa memiliki beberapa kata

yang memiliki arti sama atau berhubungan

dengan satu kata di bahasa lain.

Sebagai contoh, kata “kerja” di dalam ba-

hasa Indonesia bisa memiliki padanan berikut

di bahasa Inggris: work, job, occupation, activity,

dan lain sebagainya. Oleh karena itu, penca-

rian work, job, occupation, dan lainnya akan

menghasilkan padanan “kerja”. Kita tidak per-

lu membuat pasangan kata tersebut satu demi

satu, namun cukup mencantumkan referensi

dari satu kata ke kata lainnya yang berhubung-

an. Di dalam contoh sebelumnya, kita tidak

perlu membuat entri kerja=work, kerja=job,

kerja=occupation, dan seterusnya, namun

cukup dengan kerja=work, di mana work

memiliki semacam referensi ke job, occupa-

tion, dan lainnya. Suatu hari, andaikata kata

‘kerja’ digantikan dengan kata lainnya, kita

hanya cukup mengubah satu entri.

Terkadang, suatu kata juga memiliki

informasi tambahan. Saat ini, sebuah infor-

masi tambahan tersedia untuk setiap kata,

di masing-masing bahasa. Informasi tam-

bahan ini belum digunakan secara intensif,

namun di masa depan, dapat di gunakan

di antaranya untuk informasi penguca-

pan, ataupun informasi lainnya. Dan, ini

sepenuhnya tergantung pada penyedia

database kamus.

Untuk format database, kita menyerah-

kan sepenuhnya kepada SQLite (http://

www.sqlite.org), sebuah database self-con-

tained dan embeddable yang luar biasa. Beri-

kut ini adalah beberapa fi tur SQLite:

� Transaksi ACID bahkan setelah system

crash dan kegagalan power.

� Zero-confi guration.

� Mengimplementasikan sebagian besar

standar SQL92.

� Satu fi le tunggal untuk satu database.

� Mendukung ukuran database sampai 2

tebibyte (2^41 byte).

� Ukuran string dan BLOB sampai 2 gibib-

yte (2^31 byte).

� Kecil, hanya berukuran 250 KB (atau

bahkan 150 KB dengan beberapa fi tur

tidak dimasukkan).

� Source code berada di dalam public do-

main.

Fitur-fi tur selengkapnya, termasuk

dokumentasi, bisa dibaca di website-nya.

Versi SQLite yang kita gunakan adalah

SQLite 3.x.

Bagaimana dengan user interface kamus

itu sendiri? Di tulisan ini, kita akan mencoba

untuk mengakomodasi kebutuhan berbagai

kalangan user. Berikut ini adalah beberapa

user interface yang kita sediakan:

� Command Line Interface, menggunakan

shell script.

� Command Line Interface, menggunakan

bahasa C.

� Text User interface, menggunakan shell

script dan dialog.

� Graphical User Interface, menggunakan

shell script dan Xdialog (satu code-base

dengan text user interface dengan shell

script).

� Web-based, menggunakan bahasa PHP.

Semua pembahasan di tulisan ini di ba-

ngun di atas sistem Zenwalk Linux 4.2, na-

mun seharusnya bisa digunakan pada sistem

lainnya tanpa banyak perubahan. Sebelum

mengikuti pembahasan, perlu dimaklumi

bahwa contoh-contoh yang ada merupakan

contoh yang dapat dikembangkan sesuai

kebutuhan Anda sendiri, sesuai dengan li-

sensi yang dipergunakan. Kami barangkali

tidak membangun aplikasi yang berfungsi

penuh, dengan segudang fi tur, karena akan

Page 8: 52-77_Tutorial_05.pdf

www.infolinux.web.id INFOLINUX � 05/2007 59

TUTORIAL KAMUSmemakan sangat banyak tempat dan sekali-

gus keluar dari batasan materi.

Pembahasan databaseDi bagian ini, kita akan membahas inti

kamus, yaitu database SQLite. Sebelum

melanjutkan pembahasan, pastikan SQLite

3.x telah terinstal pada sistem Anda. Rujuk-

lah kepada dokumentasi distro Anda untuk

instalasi paket program SQLite. Sebelum

men-download source atau binary yang

tersedia pada www.sqlite.org, periksalah

terlebih dahulu repository distro yang Anda

pergunakan. Saat ini, cukup banyak distro

telah memaketkan SQLite.

Jalankanlah perintah berikut untuk

menguji ketersediaan SQLite:

$ sqlite3 --version3.3.13

Setelah itu, kita bisa mulai merancang

sebuah database bahasa, di mana di dalam-

nya terdapat dua tabel:

� Info

� lang1_desc, bertipe string, berguna

untuk deskripsi bahasa pertama,

misal: English.

� lang2_desc, bertipe string, berguna

untuk deskripsi bahasa kedua, misal:

Bahasa Indonesia.

� version, bertipe string, berguna un-

tuk versi struktur database, saat ini,

kita sepakati versi 1.

� extra, bertipe string, berguna untuk

informasi tambahan. Saat ini, belum

dipergunakan.

� Dictionary

� lang1, bertipe string, menyimpan

kata bahasa pertama, misal: work.

� lang1_ext, bertipe string, menyim-

pan informasi tambahan kata bahasa

pertama. Bisa dipergunakan untuk

informasi pengucapan. Saat ini,

belum dipergunakan secara intensif.

� lang1_ref, bertipe string, menyim-

pan kata-kata yang berhubungan

dengan kata bahasa pertama, misal:

job. Apabila lang1_ref ini diisikan,

maka padanan pada bahasa lainnya

tidak diperlukan lagi (oleh karena itu,

dikosongkan saja).

� lang2, sama dengan lang1, namun

untuk bahasa kedua.

� lang2_ext, sama dengan lang1_ext,

namun untuk bahasa kedua.

� lang2_ref, sama dengan lang1_ref,

namun untuk bahasa kedua.

� extra, bertipe string, untuk infor-

masi tambahan. Saat ini, belum di-

pergunakan.

Catatan:Tabel info seharusnya hanya berisikan satu

record saja.

Jalankanlah program sqlite3, diikuti

nama fi le database. Untuk nama database,

disarankan untuk mengikuti aturan ISO

3166 (ISO 3166-1-alpha-2), dipisahkan

oleh karakter – untuk setiap kode (contoh:

en-id). Kita sepakati juga untuk memberi-

kan ekstensi .db untuk nama fi le database.

Sebagai contoh:

$ sqlite3 en-id.db SQLite version 3.3.13Enter “.help” for instructionssqlite>

Berikut ini adalah perintah SQL untuk

membangun struktur tabel:

CREATE TABLE dictionary(lang1 string, lang1_ext string, lang1_ref string, lang2 string, lang2_ext string, lang2_ref string, extra string);

CREATE TABLE info(lang1_desc string, lang2_desc string, version string,extra string);

Berikanlah perintah berikut untuk meng-

isikan metadata pada tabel info:

insert into info(lang1_desc, lang2_desc, version) values (‘English’,’Bahasa Indonesia’, “1.0”);

Berikanlah perintah-perintah berikut

untuk mengisikan beberapa baris padanan

kata:

insert into dictionary(lang1,lang1_ext,lang1_ref,lang2,lang2_ext, lang2_ref) values(‘eat’,’’,’’,’makan’,’’,’’);

insert into dictionary(lang1,lang1_ext,lang1_ref,lang2,lang2_ext, lang2_ref) values(‘work’,’’,’’,’kerja’,’’,’’);

insert into dictionary(lang1,lang1_ext,lang1_ref,lang2,lang2_ext, lang2_ref) values(‘occupation’,’’,’work’,’’,’’,’’);

insert into dictionary(lang1,lang1_ext,lang1_ref,lang2,lang2_ext, lang2_ref) values(‘job’,’’,’work’,’’,’’,’’);

Berikan perintah berikut untuk keluar

dari prompt sqlite:

sqlite> .exit

Perintah SQL yang digunakan pada pro-

gram:

� Membaca deskripsi bahasa pertama: se-

lect lang1_desc from info.

� Membaca deskripsi bahasa kedua: select

lang2_desc from info.

� Melihat jumlah entri kamus: select

count(*) from dictionary.

� Mencari bahasa 1:

� Mendapatkan ref: select lang1_ref

from dictionary where lang1=’<kata_

yang_dicari>’.

� Apabila ref kosong: select lang2 from

dictionary where lang1=’<kata_yang_

dicari>’.

� Apabila ref ditemukan: select lang2

from dictionary where lang1=’<ref>’.

� Kita juga akan membaca kolom

lang2_ext.

� Mencari bahasa 2:

� Mendapatkan ref: select lang2_ref

from dictionary where lang2=’<kata_

yang_dicari>’.

� Apabila ref kosong: select lang1 from

dictionary where lang2=’<kata_yang_

dicari>’.

� Apabila ref ditemukan: select lang1

from dictionary where lang2=’<ref>’.

� Kita juga akan membaca kolom

lang1_ext.

Setelah database selesai dikerjakan, kita

akan memasuki pembahasan pembuatan

aplikasi kamus.

Interface CLI dengan shell scriptProgram kamus yang dibangun dengan shell

script ini membutuhkan tiga para meter

ketika dijalankan:

� File database kamus.

� Bahasa yang dicari (diisikan 1 atau 2,

Page 9: 52-77_Tutorial_05.pdf

www.infolinux.web.id05/2007 � INFOLINUX60

TUTORIAL KAMUSdimana 1 adalah bahasa pertama dan 2

adalah bahasa kedua).

� Kata yang ingin dicari.

Berikut ini adalah source code fi le nka-

mus-cli.sh:

#!/bin/sh

#nkamus.sh v0.0.1#front end nkamus using shell script#interface: CLI

APP_NAME=”nkamus”APP_CMD=”nkamus-cli.sh”APP_VERSION=”0.0.1”APP_AUTHOR=”Noprianto”APP_LICENSE=”GPL”APP_WEBSITE=”http://www.noprianto.com/code.php”

SQLITE_BIN=”/usr/bin/sqlite3”APP_DBFILE=””

usage(){ echo “$APP_NAME version $APP_VERSION” echo “(c) $APP_AUTHOR, $APP_LICENSE” echo “usage: $1 <database_file> <source_lang> <search_string>” echo “<source_lang> = 1 | 2”}

if [ ! $# -eq 3 ]then usage $0 exit 1fi

APP_DBFILE=”$1”APP_SRCLANG=”$2”APP_SEARCHSTR=”$3”

if [ ! -r “$APP_DBFILE” ]then usage echo echo “Cannot open $APP_DBFILE” exit 2fi

if [ -z “$APP_SEARCHSTR” ] then usage exit 3fi

echo “$APP_NAME version $APP_VERSION”

LANG1=`$SQLITE_BIN $APP_DBFILE ‘select lang1_desc from info’`LANG2=`$SQLITE_BIN $APP_DBFILE ‘select lang2_desc from info’`ENTRY_COUNT=`$SQLITE_BIN $APP_DBFILE ‘select count(*) from dictionary’`

echo “Using database file: $APP_DBFILE”echo “Dictionary: $LANG1 <-> $LANG2”echo “Contains $ENTRY_COUNT entries”

case “$APP_SRCLANG” in 1) echo “Searching $LANG1” REF=`$SQLITE_BIN $APP_DBFILE “select lang1_ref from dictionary where lang1=’$APP_SEARCHSTR’”` if [ -z “$REF” ] then RES=`$SQLITE_BIN $APP_DBFILE “select lang2 from dictionary where lang1=’$APP_SEARCHSTR’”` RES2=`$SQLITE_BIN $APP_DBFILE “select lang2_ext from dictionary where lang1=’$APP_SEARCHSTR’”` else RES=`$SQLITE_BIN $APP_DBFILE “select lang2 from dictionary where lang1=’$REF’”` RES2=`$SQLITE_BIN $APP_DBFILE “select lang2_ext from dictionary where lang1=’$REF’”` fi ;; 2) echo “Searching $LANG2” REF=`$SQLITE_BIN $APP_DBFILE “select lang2_ref from dictionary where lang2=’$APP_SEARCHSTR’”`

if [ -z “$REF” ] then RES=`$SQLITE_BIN $APP_DBFILE “select lang1 from dictionary where lang2=’$APP_SEARCHSTR’”` RES2=`$SQLITE_BIN $APP_DBFILE “select lang1_ext from dictionary where lang2=’$APP_SEARCHSTR’”` else RES=`$SQLITE_BIN $APP_DBFILE “select lang1 from dictionary where lang2=’$REF’”` RES2=`$SQLITE_BIN $APP_DBFILE “select lang1_ext from dictionary where lang2=’$REF’”` fi ;;esac

echo

if [ -z “$RES” ]then echo “No result”else echo “$APP_SEARCHSTR:” if [ ! -z “$REF” ] then echo “Ref: $REF” fi echo “$RES” echo “$RES2”fi

Berikanlah hak akses executable dengan

perintah berikut:

$ chmod +x nkamus-cli.sh

Contoh output:

$ ./nkamus-cli.sh en-id.db 1 worknkamus version 0.0.1Using database file: en-id.dbDictionary: English <-> Bahasa IndonesiaContains 4 entriesSearching English

work:kerja

$ ./nkamus-cli.sh en-id.db 1 jobnkamus version 0.0.1Using database file: en-id.db

Page 10: 52-77_Tutorial_05.pdf

www.infolinux.web.id INFOLINUX � 05/2007 61

TUTORIAL KAMUSDictionary: English <-> Bahasa IndonesiaContains 4 entriesSearching English

job:Ref: workkerja

Penjelasan source code:

� Pada dasarnya, kita hanya mengambil

output dari perintah SQL yang kita beri-

kan melalui program sqlite3 (diberikan

sebagai argumen program).

� Untuk perintah SQL, lihatlah kembali

pada pembahasan sebelumnya tentang

database, untuk informasi selengkapnya.

Interface CLI dengan bahasa CProgram yang kita bangun dengan C ini

memiliki user interface yang sama persis

dengan program yang dibangun dengan

shell script. Lalu, apa yang istimewa? Apa-

bila dibandingkan dengan menggunakan

program time, untuk waktu yang diperlu-

kan secara rata-rata, program kamus yang

dibangun dengan C bisa berjalan lebih cepat

6 sampai 10 kali dibandingkan dengan yang

dibangun dengan shell script. Selain itu,

kita sudah tidak perlu lagi binary program

sqlite3. Kita hanya menggunakan pustaka

libsqlite3. so.

Berikut ini source code nkamus.c:

#include <stdio.h>#include <sqlite3.h>#include <string.h>#include <stdlib.h>

#define APP_NAME “nkamus”#define APP_VERSION “0.0.1”#define APP_AUTHOR “Noprianto”#define APP_LICENSE “GPL”#define APP_WEBSITE “http://www.noprianto.com/code.php”#define MAX_LEN 200

void usage(){ fprintf (stderr, “%s version %s\n”, APP_NAME, APP_VERSION); fprintf (stderr, “(c) %s, %s\n”, APP_AUTHOR, APP_LICENSE); fprintf (stderr, “usage: nkamus <database_file> <source_

lang> <search_string>\n”); fprintf (stderr, “<source_lang> = 1 | 2\n”);}

static int cb_get_first_rec(void *param, int argc, char *argv[], char *az_col_name[]){ int i; strcpy(param, argv[0]); return 0;}

int main(int argc, char *argv[]){ sqlite3 *db; char * error_msg = calloc (MAX_LEN, sizeof (char)); char * query = calloc (MAX_LEN, sizeof (char)); char * ref = calloc (MAX_LEN, sizeof (char)); char * str_res = calloc (MAX_LEN, sizeof (char)); char * str_res2 = calloc (MAX_LEN, sizeof (char)); char * lang1 = calloc (MAX_LEN, sizeof (char)); char * lang2 = calloc (MAX_LEN, sizeof (char)); int res; if (argc != 4) { usage(); return 1; }

if (strcmp(argv[3],””) == 0) { usage(); return 2; } res = sqlite3_open (argv[1], &db); if (res != SQLITE_OK) { fprintf(stderr, “Cannot open %s\n”, argv[1]); return 3; }

fprintf (stdout, “%s version %s\n”, APP_NAME, APP_

VERSION); fprintf (stdout, “Using database file: %s\n”, argv[1]);

sqlite3_exec(db, “select lang1_desc from info”, cb_get_first_rec, lang1, &error_msg); sqlite3_exec(db, “select lang2_desc from info”, cb_get_first_rec, lang2, &error_msg); fprintf(stdout, “Dictionary: %s <-> %s\n”, lang1, lang2); sqlite3_exec(db, “select count(*) from dictionary”, cb_get_first_rec, str_res, &error_msg); fprintf(stdout, “Contains: %s entries\n”, str_res);

strcpy(str_res, “”); strcpy(str_res2, “”);

if (strcmp(argv[2],”1”) == 0) { fprintf(stdout, “Searching %s\n”, lang1); sprintf(query, “select lang1_ref from dictionary where lang1=’%s’”, argv[3]); sqlite3_exec(db, query, cb_get_first_rec, ref, &error_msg); if (strlen(ref) < 1) { sprintf(query, “select lang2 from dictionary where lang1=’%s’”, argv[3]); sqlite3_exec(db, query, cb_get_first_rec, str_res, &error_msg); sprintf(query, “select lang2_ext from dictionary where lang1=’%s’”, argv[3]); sqlite3_exec(db, query, cb_get_first_rec, str_res2, &error_msg);

} else

Page 11: 52-77_Tutorial_05.pdf

www.infolinux.web.id05/2007 � INFOLINUX62

TUTORIAL KAMUS { sprintf(query, “select lang2 from dictionary where lang1=’%s’”, ref); sqlite3_exec(db, query, cb_get_first_rec, str_res, &error_msg); sprintf(query, “select lang2_ext from dictionary where lang1=’%s’”, ref); sqlite3_exec(db, query, cb_get_first_rec, str_res2, &error_msg); } }

else if (strcmp(argv[2],”2”) == 0) { fprintf(stdout, “Searching %s\n”, lang2); sprintf(query, “select lang2_ref from dictionary where lang2=’%s’”, argv[3]); sqlite3_exec(db, query, cb_get_first_rec, ref, &error_msg); if (strlen(ref) < 1) { sprintf(query, “select lang1 from dictionary where lang2=’%s’”, argv[3]); sqlite3_exec(db, query, cb_get_first_rec, str_res, &error_msg); sprintf(query, “select lang1_ext from dictionary where lang2=’%s’”, argv[3]); sqlite3_exec(db, query, cb_get_first_rec, str_res2, &error_msg); } else { sprintf(query, “select lang1 from dictionary where lang2=’%s’”, ref); sqlite3_exec(db, query, cb_get_first_rec,

str_res, &error_msg); sprintf(query, “select lang1_ext from dictionary where lang2=’%s’”, ref); sqlite3_exec(db, query, cb_get_first_rec, str_res2, &error_msg); } } fprintf(stdout, “\n”); if (strlen (str_res) < 1) { fprintf (stdout, “No Result\n”); } else { fprintf (stdout, “%s:\n”, argv[3]); if (strlen(ref) > 0) { fprintf (stdout, “Ref: %s\n”, ref); } fprintf (stdout, “%s\n”, str_res); fprintf (stdout, “%s\n”, str_res2);

}

free (query); free (ref); free (str_res); free (str_res2); free (lang1); free (lang2); sqlite3_free (error_msg); sqlite3_close (db); return 0;}

Untuk kompilasi, berikanlah perintah

berikut ini:

$ gcc -o nkamus nkamus.c -lsqlite3

Setelah itu, program nkamus akan di-

hasilkan. Cara penggunaanya sama persis

dengan program yang dibangun dengan

shell script sebelumnya.

Penjelasan source code:

� Yang pertama-tama, kita akan meng-

gunakan header sqlite3.h.

� Untuk membuka database fi le, kita

menggunakan fungsi sqlite3_open()

� Untuk memberikan perintah SQL, kita

menggunakan fungsi sqlite3_exec(). Un-

tuk kebutuhan mendapatkan record perta-

ma, kita telah menyiapkan sebuah fungsi

callback dengan nama cb_get_fi rst_rec().

� Untuk menutup database, gunakanlah

fungsi sqlite3_close().

� Untuk dokumentasi selengkapnya,

bacalah dokumentasi di www.sqlite.org.

Interface TUI dengan shell script dan dialogUser yang menggunakan program ini tidak

perlu lagi memberikan argumen apapun

ketika menjalankan program. Melainkan,

user akan dipandu menggunakan dialog-

dialog yang mudah digunakan. Agar program

dapat dijalankan dengan benar, pastikan pro-

gram dialog telah terinstal di sistem Anda.

Berikut ini adalah source code nkamus-

tui.sh

#!/bin/sh

#nkamus.sh v0.0.1#front end nkamus using shell script#interface: TUI using dialog

APP_NAME=”nkamus”APP_CMD=”nkamus-tui.sh”APP_VERSION=”0.0.1”APP_AUTHOR=”Noprianto”APP_LICENSE=”GPL”APP_WEBSITE=”http://www.noprianto.com/code.php”SQLITE_BIN=”/usr/bin/sqlite3”

APP_DBFILE=””DIALOG=/bin/dialogalias adialog=”$DIALOG --backtitle ‘$APP_NAME version $APP_VERSION, (c) $APP_AUTHOR, $APP_LICENSE’”

TEMP=/tmp/nkamus.tmp

adialog --fselect `pwd` 10 40 2>$TEMP[ $? -ne 0 ] && exit -1APP_DBFILE=`cat $TEMP`if [ ! -r “$APP_DBFILE” ]then adialog --msgbox “Cannot open $APP_DBFILE” 10 40

Page 12: 52-77_Tutorial_05.pdf

www.infolinux.web.id INFOLINUX � 05/2007 63

exit 2fi

LANG1=`$SQLITE_BIN $APP_DBFILE ‘select lang1_desc from info’`LANG2=`$SQLITE_BIN $APP_DBFILE ‘select lang2_desc from info’`ENTRY_COUNT=`$SQLITE_BIN $APP_DBFILE ‘select count(*) from dictionary’`

while [ 1 ]do adialog --menu “$LANG1 <-> $LANG2 ($ENTRY_COUNT entries)”\ 10 60 4 1 “$LANG1 -> $LANG2” 2 “$LANG2 -> $LANG1” 2> $TEMP [ $? -ne 0 ] && break APP_SRCLANG=`cat $TEMP`

while [ 1 ] do adialog --inputbox “search string” 10 40 2>$TEMP [ $? -ne 0 ] && break APP_SEARCHSTR=`cat $TEMP` [ -z “$APP_SEARCHSTR” ] && continue case “$APP_SRCLANG” in 1) REF=`$SQLITE_BIN $APP_DBFILE “select lang1_ref from dictionary where lang1=’$APP_SEARCHSTR’”` if [ -z “$REF” ] then RES=`$SQLITE_BIN $APP_DBFILE “select lang2 from dictionary where lang1=’$APP_SEARCHSTR’”` RES2=`$SQLITE_BIN $APP_DBFILE “select lang2_ext from dictionary where lang1=’$APP_SEARCHSTR’”` else RES=`$SQLITE_BIN $APP_DBFILE “select lang2 from dictionary where lang1=’$REF’”` RES2=`$SQLITE_BIN $APP_DBFILE

“select lang2_ext from dictionary where lang1=’$REF’”` fi ;; 2) REF=`$SQLITE_BIN $APP_DBFILE “select lang2_ref from dictionary where lang2=’$APP_SEARCHSTR’”` if [ -z “$REF” ] then RES=`$SQLITE_BIN $APP_DBFILE “select lang1 from dictionary where lang2=’$APP_SEARCHSTR’”` RES2=`$SQLITE_BIN $APP_DBFILE “select lang1_ext from dictionary where lang2=’$APP_SEARCHSTR’”` else RES=`$SQLITE_BIN $APP_DBFILE “select lang1 from dictionary where lang2=’$REF’”` RES2=`$SQLITE_BIN $APP_DBFILE “select lang1_ext from dictionary where lang2=’$REF’”` fi ;; esac

if [ -z “$RES” ] then adialog --msgbox “No result” 10 40 else RES_STR=”” if [ ! -z “$REF” ] then RES_STR=”Ref: $REF” fi RES_STR=”$RES_STR \n $RES” RES_STR=”$RES_STR \n $RES2” adialog --title “$APP_SEARCHSTR:” --msgbox “$RES_STR” 10 40 fi donedone

unalias adialogrm -f $TEMP

Berikanlah hak akses executable dengan

perintah berikut:

$ chmod +x nkamus-tui.sh

Selanjutnya, user bisa menjalankan pro-

gram kamus dengan memberikan perintah:

$ ./nkamus-tui.sh

Penjelasan source code:

� Logika program sama persis dengan pro-

gram-program sebelumnya.

� Hanya, beberapa perintah tambahan di-

berikan untuk mengantisipasi input ko-

song yang diberikan, ataupun penekan-

an tombol cancel.

Interface GUI dengan shell script dan XdialogBagi user yang lebih suka interface grafi -

kal, kita akan menyediakannya juga. Agar

tetap dapat memanfaatkan program yang

dibangun dengan bantuan dialog, dan tetap

menggunakan code base yang sama, kita

akan menggunakan bantuan Xdialog untuk

dialog grafi kal. Pastikan Xdialog terinstal

pada sistem Anda.

Dengan demikian, kita bisa meng-copy-

kan fi le nkamus-tui.sh ke nkamus-gui.sh,

kemudian melakukan beberapa perubahan

berikut di fi le nkamus-gui.sh:

Mengubah variabel DIALOG, dari /bin/

dialog sebelumnya ke /usr/bin/Xdialog.

Setiap defi nisi height dan width di setiap

dialog, masing-masing height dan width

kita kalikan dengan 5.

Contoh di nkamus-tui.sh:

adialog --inputbox “search string” 10 40 2>$TEMP

Contoh di nkamus-gui.sh:

Setelah height dan width masing-masing

dikalikan dengan 5, menjadi:

adialog --inputbox “search string” 50 200 2>$TEMP

Selanjutnya, cara penggunaannya sama

persis.

Untuk interface berbasis web, karena keter-

batasan tempat, kita akan membahasnya pada

edisi berikut. Sampai di sini dulu pembahasan

kita. Selamat mengembangkan!

Noprianto [[email protected]

TUTORIAL KAMUS

Page 13: 52-77_Tutorial_05.pdf

www.infolinux.web.id05/2007 � INFOLINUX64

TUTORIAL NS2

Simulator Jaringan Komputer NS2

Jaringan kabel maupun nirkabel dapat disimulasikan dalam NS2. Sebagian besar orang

menggunakan NS2 dalam penelitian, namun tidak menutup kemungkinan digunakan

untuk menguji trafik jaringan. Anda dapat belajar jaringan tanpa harus memasang kabel

atau peralatan wireless.

Struktur NS2 (Network Simulator versi 2)

seperti terlihat dalam Gambar 1.

Otcl merupakan kepanjangan dari MIT

Object TCL, sebagai perluasan dari Tcl/Tk

untuk pemrograman berbasis objek. tclcl

berfungsi menghubungkan C++ dengan otcl.

Implementasi NS2 terlihat dalam Gambar 2.

Pada Gambar 2 terdapat dua bahasa yang

digunakan oleh NS2, yaitu bahasa C++ dan Tcl.

Mengapa NS-2 menggunakan dua bahasa?

Berikut ini beberapa kelebihan dan

kekurangan bahasa C++:

� Manipulasi byte, pemrosesan paket, dan

implementasi algoritma.

� Kecepatan running sangat penting.

� C++ cepat namun lebih lama untuk

mengganti kode.

Berikut ini kelebihan dan kekurangan

bahasa Tcl:

� Cepat membuat berbagai skenario, di mana

kita dapat membuat simulasi. dalam ber-

bagai macam parameter dan konfi gurasi.

� Tcl mudah dalam penggantian kode pro-

gram, tapi berjalan lambat.

� Tcl secara periodik dapat mengontrol

dan membangkitkan sebuah aksi.

Beberapa fi tur dalam NS2 adalah:

1. TCP dan implementasinya.

2. Mobilitas.

3. Node berupa satelit yang dapat kita tentu-

kan longtitude, latitude, dan altitude.

4. Internet routing protocol.

5. Berbagai macam model link loss.

6. Berbagai macam penghasil traffi c (con-

toh: web, telnet, dan sebagainya).

7. Kemampuan mengemulasikan jaringan.

Banyak fi tur baru NS2, yang biasanya

perlu tambahan modul.

Instalasi NS21. Download NS2 dari http://sourceforge.

net/, atau Anda dapat menemukannya

di dalam DVD InfoLINUX edisi ini. Pas-

tikan juga, kalau di sistem operasi sudah

memiliki Tcl, Tk, Otcl, dan Tclcl.

2. Ekstrak fi le ns-allinone-2.30.tar.gz

# tar zxvf ns-allinone-2.30.tar.gz

Struktur direktori NS2 terlihat seperti

dalam Gambar 3.

3. Jalankan instalasi dengan lebih dulu

masuk ke direktori hasil ekstrak, lalu

jalankan perintah ./install.

# cd ns-allinone-2.30 # ./instal

4. Jika tidak ada kesalahan dan instalasi

berjalan lancar, copy-kan isi folder bin

pada /usr/sbin :

# cp bin/* /usr/sbin

5. Cek instalasi dengan dengan lebih dulu

masuk direktori ns-2.30/tcl/ex, lalu

jalankan perintah “ns simple.tcl”.

# cd ns-2.30/tcl/ex/# ns simple.tcl

Pada konsole akan terdapat tulisan:

2100.0037499999999999999running nam...

Dan akan tampil GUI NAM seperti ter-

lihat dalam Gambar 4.

6. Jika kita tekan tombol play, maka kita

akan mengetahui bagaimana simulasi

jaringan di antara 4 node tersebut.

Membuat simulasi dalam NS2Untuk membuat simulasi kita perlu

me ngetahui bahasa Tcl. Bahasa Tcl tidak

terlalu sulit, tapi salah line break bisa mem-

buat syntax error. Berikut ini sedikit contoh

penggunaan bahasa Tcl:]:

1. Komentar menggunakan tanda pagar

(#), namun jika satu baris dengan

perintah tambahkan tanda titik koma (;)

di depan. Contoh:

#ini komentarset q 3 ;#komentar dan perintah

Gambar 2. Implementasi NS2.

Gambar 1. Struktur NS2.

Page 14: 52-77_Tutorial_05.pdf

www.infolinux.web.id INFOLINUX � 05/2007 65

TUTORIAL NS2

2. Variabel tidak perlu dideklarasikan,

langsung pakai. Contoh set b 1 sebagai

pengganti b=1.

3. Ekspresi harus eksplisit: set a [expr 3+4]

4. Menggunakan $ untuk membaca varia-

bel : set a $b.

5. Menampilkan output: puts “hallo”.

6. Objek pada Otcl diperlukan seperti

variabel. Cara pemanggilan metode pada

objek Otcl: “$nama objek metode para-

meter1 parameter2”.

Urutan pembuatan simulasi:

1. Pembuatan simulator baru (new Simula-

tor).

2. Skrip berisi skenario dan penjadwalan se-

tiap kejadian. Untuk penjadwalan ini dapat

digunakan kata kunci at waktu perintah.

3. Di akhir skrip ada $ns run.

4. Ns akan menghasilkan fi le output jika kita

buat.

5. Simulasi akan terlihat interaktif jika

kita menampilkannya pada network

animator(NAM). Namun fi le nam ini

sangat besar.

6. Hasil simulasi dapat ditampilkan dalam

xgraph.

Berikut ini contoh sederhana skrip Tcl tan-

pa ada kaitannya dengan simulasi jaringan.

# Skrip Tcl sederhanaset ns [new Simulator] ;# membuat simulator baru$ns at 1 “puts \”INFOLINUX\”” ;#tampilkan tulisan INFOLINUX pada detik ke-1

proc coba {} { ; #membuat prosedur cobaset a 3 ; #a=3for {set k 0} {$k < 10} {incr k} { ; #for (k=0;k<10;k++)

set b [expr $a + $k] ; #b=a+k; puts “a = $b” }}

$ns at 1.1 “coba” ;# jalankan prosedur coba pada detik ke-1.1$ns at 1.5 “exit” ;# keluar dari aplikasi pada detik ke-1.5$ns run ;# jalankan simulasi

Kode dasar pembuatan simulator jari-

ngan pada skrip Tcl adalah:

#membuat objek simulatorset ns [new Simulator]

#membuat file trace bernama out.nam yang akan ditampilkan pada namset nf [open out.nam w]#semua kejadian dicatat dalam nf$ns namtrace-all $nf

#deklarasikan proses penyelesaian simulasi dengan menutup file trace dan memulai Namproc selesai {} { global ns nf $ns flush-trace close $nf exec nam out.nam & exit 0}#perintah finish akan dijalankan 5 detik setelah simulasi.$ns at 5.0 “selesai”

#jalankan simulasi$ns run

Kode di atas belum terdapat isi jaringan-

nya. Berikut ini kita mulai pembuatan simu-

lasi jaringan.

1. Membuat Node:

set n0 [$ns node]

Node adalah anggota dari class

Simulator. Jika node bukan router kita

perlu mendefi nisikan traffi c agents

(TCP, UDP, dan lain-lain) dan traffi c

source (FTP, CBR, dan lain-lain).

Menghubungkan antar-node dapat

mengunakan simplex link (satu arah)

atau duplex link (dua arah). Hubung-

an antara dua node membutuhkan

parame ter bandwitdh, waktu delay dan

jenis antrian paket. Jenis antrian paket

yang pa ling sederhana adalah DropTail

di mana mengantrikan paket berdasar-

kan waktu kedatanganya(FIFO). Con-

toh:

$ns simplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n0 $n1 1Mb 10ms DropTail

2. Membuat Agent, aplikasi, dan sumber

trafi k.

Agent yang sering digunakan pada NS-2

adalah UDP dan TCP. Sedangkan untuk

aplikasi dan sumber trafi k yang sering

digunakan adalah:

� Application/FTP: menghasilkan data

yang akan dikirim oleh TCP.

� Application/Traffi c/CBR: menghasil-

kan paket dengan nilai bit konstan.

� Application/Traffi c/Trace: Trafi k di-

hasilkan dari fi le trace di mana uku-

ran dan waktu pengiriman sudah

ditentukan.

Cara membuat Agent:

� Membuat agent UDP

set udp0 [new Agent/UDP]

� Meletakkan UDP pada node0

$ns attach-agent $n0 $udp0

� Cara membuat aplikasi

set ftp [new Application/FTP]$ftp set type_ FTP

� Meletakkan ftp pada agent tcp

$ftp attach-agent $tcp

Gambar 3. Struktur Direktori NS-2. Gambar 4. Tampilan NAM.

Page 15: 52-77_Tutorial_05.pdf

www.infolinux.web.id05/2007 � INFOLINUX66

TUTORIAL NS2

Berikut ini contoh program Tcl sederhana

dalam simulator jaringan:

#file contoh.tcl#membuat simulator baruset ns [new Simulator]

#definisi warna merah$ns color 0 red

#membuat file untuk dijalankan pada NAMset nf [open tampilan.nam w]$ns namtrace-all $nf

#membuat prosedur selesaiproc selesai {} { global ns nf $ns flush-trace ;# menutup file trace close $nf exec nam out.nam & ;#Ekesekusi file nam setelah selesai simulasi exit 0}

#Membuat 2 nodeset n0 [$ns node]set n1 [$ns node]

#Membuat duplex link antara node 1 dan 2 dengan antrian droptail$ns duplex-link $n0 $n1 1Mb 5ms DropTail ;# bandwith 1Mb dengan kecepatan 5ms

#Membuat agen TCP, TCPSink(penerima TCP) dan FTPset tcp [new Agent/TCP]set sink [new Agent/TCPSink]set ftp [new Application/FTP]

$ns attach-agent $n0 $tcp ;# letakkan tcp pada node 0$ns attach-agent $n1 $sink ;# letakkan sink pada node 1$ns connect $tcp $sink ;# hubungkan trafik node0(tcp) dan node1(sink)$ftp attach-agent $tcp ;#jenis TCP yang dikirim adalah ftp$tcp set fid_ 0 ;#warna paket merah pd NAM

#penjadwalan$ns at 0.5 “$ftp start” ;#detik ke 0.5 ftp paket dikirim$ns at 1.0 “$ftp stop” ;#detik ke 1.0 ftp paket dihentikan

# memanggil prosedur selesai pada detk ke 1.5$ns at 1.5 “selesai”# jalankan simulasi$ns run

Hasil dari skrip di atas, setelah dijalan-

kan dengan perintah “#ns contoh.tcl”, akan

terlihat seperti pada Gambar 5 dan 6.

Tampilan node pada NAM dapat kita

ubah melalu skrip. Skrip tersebut antara lain

dapat menentukan warna, label, dan bentuk.

1. Warna.

$nama_variabel_node color warnaContoh:

$n0 color blue$n1 color chocolate

2. Label.

$nama_variabel_node label “keterangan”

Contoh:

$n0 label “ftp server”$n1 label “ftp client”

3. Bentuk pada Node ada tiga jenis, yaitu

circle, box, dan hexagon.

$nama_variabel_node shape jenis_bentuk

Contoh:

$n0 shape box$n1 shape hexagon

Untuk bentuk node tidak dapat kita

ubah-ubah selama simulasi berlangsung,

namun warna dan label dapat kita ganti.

Contoh:

$ns at 0.7 “$n0 color green”

Jika kita tambahkan kode-kode di atas, dan

di jalankan lagi #ns contoh.tcl maka akan ter-

lihat Gambar 7 yang menunjukkan tampilan

sebelum detik ke 0, 7, dan 8 yang menunjuk-

kan tampilan sesudah detik ke 0,7.

Nur Aini R, Sistem Informasi, FTIF, ITS [[email protected]]

Gambar 5. Sebelum detik ke 0.5. Gambar 6. Setelah detik ke 1.

Gambar 7. Pada saat detik ke 0.4Gambar 8. Setelah detik ke 0.71

Page 16: 52-77_Tutorial_05.pdf

www.infolinux.web.id INFOLINUX � 05/2007 67

TUTORIAL VPN

Koneksi VPN di Linux untuk e-Banking

Artikel ini bukan iklan. Penulis membagi pengalaman kepada Anda cara menggunakan

koneksi VPN di Linux, dengan studi kasus aplikasi Internet banking dari salah satu bank

swasta. Anda dapat menggunakan Linux, meskipun bank hanya menyediakan software

VPN Client untuk Windows.

Pernahkah Anda mendengar “KlikBCA Bis-

nis”? Itu merupakan aplikasi internet bank-

ing untuk pengusaha atau perusahaan bagi

pelanggan bank BCA. Selain koneksi internet,

aplikasi ini menggunakan dalam VPN dan PIN

generator.

Jika Anda menggunakan layanan ini,

akan memperoleh KeyBCA (PIN genera-

tor) dan VPN client (berbasis Windows).

Bagaimanakah dengan pengguna Linux?

Pertanyaan ini pernah penulis lontarkan ke

Customer Service KlikBCA Bisnis, dan mereka

menjawab, “Selain Windows, belum ada”.

Dengan diundangkannya UU No. 19 Ta-

hun 2002 tentang Hak Cipta, diperkirakan

banyak perusahaan yang beralih ke OS Linux.

Adanya keterbatasan support dari KlikBCA

Bisnis terhadap pengguna Linux, penulis

mencari solusi ini dengan bantuan mesin pen-

cari Internet, Google.

Untuk koneksi ke KlikBCA Bisnis ini,

penulis menggunakan Cisco VPN Client versi

4.8 yang di-download dari Universitiet Gent:

http://helpdesk.ugent.be/vpn/en/linux.php.

Dasar dari penggunaan “Cisco VPN Client

for Linux” ini disebabkan oleh isi CD/disk kit

yang dibagikan BCA untuk pengguna KlikBCA

Bisnis, terdapat instalasi VPN Client for Win-

dows dari Cisco. Dengan vendor yang sama,

kita tidak bingung dengan konfi gurasi koneksi

VPN.

Saat instalasi, penulis menggunakan

Ubuntu 6.10 karena cukup simpel untuk user

biasa (bukan orang TI). Ubuntu termasuk

distro yang populer. Selain cepat dan mudah

dalam instalasi, dukungan update-nya cukup

banyak di server-server lokal Indonesia.

Sebelumnya kita perlu mempersiapkan

PC yang sudah terinstal Linux dan fi le profi le

tentang KlikBCA Bisnis (diambil dari PC yang

terinstall Cisco VPN client for Windows). File

profi le ini sangat kita butuhkan dalam instala-

si, karena berisi konfi gurasi tunnel, IP server,

username, dan password (terenkripsi) untuk

terhubung ke VPN server milik KlikBCA. VPN

server ini semacam dialup server di dalam me-

dia network/Internet. Oleh BCA, Username

dan password di sini tidak diberikan ke user

tetapi terinstal secara default, karena hanya

digunakan sebagai koneksi/tunnel.

Dalam koneksi VPN dari Cisco ini, ada

dua macam otentikasi, yaitu otentikasi untuk

koneksi dan otentikasi untuk User. Otentikasi

untuk User diberikan BCA dengan password-

nya dari KeyBCA. Otentikasi untuk koneksi

tersimpan dalam fi le profi le “KlikBCA Bisnis.

pcf”.

Instalasi� Sebaiknya disediakan satu komputer

khusus untuk client KlikBCA Bisnis ini.

Dalam arti, tidak digunakan untuk fi le/

printer sharing, internet server, atau cli-

ent email. VPN dari Cisco ini akan me-

mutuskan koneksi dengan LAN saat log-

in sukses. IP untuk komputer ini boleh

private, tetapi harus dapat terhubung

secara langsung (via NAT) ke server

klikBCA. Jika sering mencetak transkrip

transaksi, sebaiknya disediakan printer

yang terhubung langsung ke komputer.

Bisa juga disimpan/dicetak dulu ke fi le,

di simpan, dan dicetak ke printer sharing

LAN setelah koneksi VPN selesai.

� Copy fi le KlikBCA Bisnis.pcf dari kom-

puter Windows yang sudah terinstal ke

dalam disket atau CD. Untuk memudah-

kan penggunaan, ubah nama (rename)

fi le di dalam disket/CD tersebut menjadi

klikbca.pcf (huruf kecil semua, tanpa

spasi).

� Langkah kedua, copy fi le vpnclient-linux-

x86_64-4.8.00.0490-k9.tar.gz ke folder

home di Ubuntu, contoh /home/aku.

Setelah itu, exctract. Jika menggunakan

Ubuntu, ada Archive Manager yang siap

membantu. Contoh menggunakan termi-

nal, ketik:

$ cd /home/aku$ tar xvzf vpnclient-linux-x86_64-4.8.00-0490-k9.tar.gz

� Masuk ke folder yang sudah terbuat, lalu

sebagai root jalankan perintah vpn_in-

stall. Jika perintah sudo tidak ada atau

belum di-setup, Anda dapat menjalankan

perintah su lebih dahulu dengan syarat

Anda sudah membuat password root se-

belumnya.

$ cd vpnclient$ sudo ./vpn_install

� Kemudian akan muncul dialog sebagai

berikut:

Cisco Systems VPN Client Version

Page 17: 52-77_Tutorial_05.pdf

www.infolinux.web.id05/2007 � INFOLINUX68

TUTORIAL VPN

4.8.00 (0490) Linux InstallerCopyright (C) 1998-2005 Cisco Systems, Inc. All Rights Reserved.

By installing this product you agree that you have read thelicense.txt file (The VPN Client license) and will comply withits terms.

Directory where binaries will be installed [/usr/local/bin]

Automatically start the VPN service at boot time [yes]

In order to build the VPN kernel module, you must have thekernel headers for the version of the kernel you are running.

Directory containing linux kernel source code [/lib/modules/2.6.17-10-generic/build]

* Binaries will be installed in “/usr/local/bin”.* Modules will be installed in “/lib/modules/2.6.17-10-generic/CiscoVPN”.* The VPN service will be started AUTOMATICALLY at boot time.* Kernel source from “/lib/modules/2.6.17-10-generic/build” will be used to build the module.

Is the above correct [y]

� Setelah menekan Enter, proses kompilasi

akan berjalan, dan hasilnya akan muncul

sebagai berikut:

Setting permissions. /opt/cisco-vpnclient/bin/cvpnd (setuid root) /opt/cisco-vpnclient (group bin readable) /etc/opt/cisco-vpnclient (permissions not changed)* You may wish to change these permissions to restrict access to root.* You must run “/etc/init.d/vpnclient_init start” before using the client.* This script will be run AUTOMATICALLY every time you reboot your computer.

Catatan: vpnclient_init merupakan

“driver” yang dibutuhkan untuk menjalan-

kan vpnclient. vpnclient_init akan dijalan-

kan saat komputer menyala kali pertama

(booting). Anda tidak perlu melakukan re-

boot untuk menjalankan vpnclient setelah

install ini, tetapi cukup ketik perintah sudo

/etc/init.d/vpnclient_init start di terminal.

� Langkah berikutnya, copy fi le klikbca.pcf

ke folder /etc/opt/vpnclient/Profi le.

� Sampai langkah ini, KlikBCA Bisnis siap

dijalankan.

Penggunaan� Buka terminal dan jalankan perintah beri-

kut ini:

$ sudo vpnclient connect klikbca

Password:

Cisco Systems VPN Client Version 4.8.00 (0490)Copyright (C) 1998-2005 Cisco Systems, Inc. All Rights Reserved.Client Type(s): LinuxRunning on: Linux 2.6.17-10-generic #2 SMP Tue Dec 5 22:28:26 UTC 2006 i686Config file directory: /etc/opt/cisco-vpnclient

Initializing the VPN connection.Initiating TCP to 202.6.211.33, port 10000Contacting the gateway at 202.6.211.33User Authentication for klikbca...

The server has requested the following information to complete the user authentication:

Username []:Password :

Catatan:

� Setelah kita ketik perintah di atas, akan

ada pertanyaan password. Password ini

untuk menjalankan perintah setingkat

root. Untuk menghilangkan pertanyaan

ini, kita akan bahas selanjutnya.

� Username yang ditanyakan adalah user-

name sesuai yang diberikan dari BCA,

dengan format: [namaperusahaan][id

pengguna].

Tampilan setelah login di KlikBCA Bisnis.Layar di browser jika VPN sukses terhubung.

Page 18: 52-77_Tutorial_05.pdf

www.infolinux.web.id INFOLINUX � 05/2007 69

� Password yang ditanyakan (di baris ter-

bawah), merupakan hasil “generate” dari

KeyBCA.

� Setelah login sukses, komputer yang di-

gunakan untuk KlikBCA ini akan terputus

hubungan network dengan komputer lain

secara total. Sebelum menjalankan VPN

ini, sebaiknya tutup semua aplikasi ja-

ringan (email client, ftp, dan lainnya) agar

tidak terganggu.

Jika login berhasil, akan muncul teks se-

perti ini:

Username []: ibsxxxxxxPassword []: Authenticating user.Negotiating security policies.Securing communication channel.

Welcome to KlikBCA Bisnis Secure Network

https://ibc.klikbca.com:8002/sme/login.jsp

Do you wish to continue? (y/n): y

Your VPN connection is secure.

VPN tunnel information.Client address: 172.16.10.247Server address: 202.6.211.33Encryption: 168-bit 3-DESAuthentication: HMAC-MD5IP Compression: NoneNAT passthrough is active on port TCP 10000Local LAN Access is disabled

Anda bisa melanjutkan dengan me-mini-

mize terminal dan membuka Firefox, lalu

masuk di http://www.klikbca.com/smelogin.

html .

Untuk menutup VPN, buka kembali ter-

minal, dan tekan Ctrl-C. Koneksi VPN akan

terputus, dan network kembali normal.

Disconnecting the VPN connection.

Trik agar eksekusi VPN client tanpa password rootPada Linux distro Debian dan turunannya

(termasuk Ubuntu), yang dapat menjalan-

kan eksekusi sebagai root (dengan meng-

gunakan sudo) adalah user yang dibuat saat

instal kali pertama dan user lain yang ter-

cantum di fi le /etc/sudoers. Sudoers akan

ditanya ulang password-nya untuk men-

jalankan program sebagai root (sudo). User

root sendiri di-disable secara default saat

instalasi.

VPNClient Cisco ini harus dijalankan se-

bagai root, agar bisa terkoneksi. Agar user

biasa (bukan sudoers) bisa ikut menjalankan

vpnclient ini, ataupun agar sudoers tidak se-

lalu ditanya password saat akan menjalankan-

nya, kita harus masukkan aplikasi vpnclient

ini dalam fi le sudoers.

Agar dapat eksekusi VPNClient tanpa

password root , buka fi le /etc/sudoers dengan

perintah visudo, dan ketik:

[user di ubuntu] ALL= NOPASSWD: /usr/

local/bin/vpnclient

Lihat contoh di bawah ini:

# /etc/sudoers#root ALL=(ALL) ALLmichael ALL= NOPASSWD: /usr/local/bin/vpnclientuserlain ALL= NOPASSWD: /usr/local/bin/vpnclient

Membuat shortcut di desktopAgar user mudah untuk terhubung ke Inter-

net banking, buatlah launcher (shortcut) di

desktop Gnome dengan cara sebagai berikut

(Jika menggunakan desktop KDE, ikuti pe-

tunjuk di KDE):

1. Kecilkan semua window, sehingga hanya

desktop yang terlihat.

2. Klik Kanan di tempat kosong, pilih Create

Launcher…

3. Pilih Type : Application in Terminal, ketik

nama dengan VPN KlikBCA, command

diisi dengan sudo vpnclient klikbca. Jika

punya icon khusus untuk ini, silakan tekan

tombol no icon. Jika selesai, klik OK.

4. Akan muncul di desktop icon bernama

VPN KlikBCA. User bisa langsung pakai

dengan klik ini, isi username dan password

lalu buka Firefox setelah VPN terhubung.

Bagi yang tidak terbiasa dengan

Firefox, bisa menggunakan IEs4Linux.

Tutorial instalasinya bisa dibaca di Info-

LINUX 01/2007.

Dengan suksesnya instalasi ini, Linux

Anda sudah bisa digunakan sebagai terminal

Internet banking, dalam contoh ini KlikBCA

Bisnis.

Indra Sanjaya [[email protected]]

TUTORIAL VPN

Page 19: 52-77_Tutorial_05.pdf

www.infolinux.web.id05/2007 � INFOLINUX70

TUTORIAL WINK

Mudah Membuat Tutorial dengan Wink

Membuat tutorial secara “live” via teknik desktop recording sudah bisa dilakukan dengan

mudah di Linux. Dari beberapa cara yang bisa dilakukan, dua di antaranya yang cukup

populer adalah menggunakan software Wink dan xvidcap. Dalam kesempatan ini, kita

akan mencoba menggunakan free software Wink sebagai tool desktop recording.

Penulis telah berhasil menggunakan Wink

di distro Linux Kubuntu 6.06, SUSE 10.0

dan openSUSE 10.2. Tentu saja Wink bisa

diinstal di distro lain secara langsung atau-

pun dengan modifi kasi library. Khusus un-

tuk pengguna openSuse 10.2, Wink sudah

tidak perlu diinstal secara manual, karena

sudah disertakan dalam DVD instalasi

(penulis menggunakan DVD dari InfoLINUX

02/2007).

Installer Wink bisa didapatkan dari web-

site www.debugmode.com. Untuk menginstal

secara manual, ekstrak fi le instalasi dan

simpan ke suatu direktori, misal ke folder

wink15. Dari console masuk ke folder hasil

ekstrak:

$ cd wink15$ ./installer.sh

Jika semua dependensi yang dibutuhkan

sudah dimiliki, akan muncul pertanyaan

folder tujuan instalasi Wink. Gunakan fi le

explorer (Nautilus) dan masuk ke folder ha-

sil instalasi tersebut, kemudian eksekusi fi le

wink. Bagi yang menggunakan OpenSuse

10.2, menu Wink ada di Applications|Offi c

e|Presentation. Tampilan pertama Wink se-

perti pada Gambar 1.

Nah, sekarang kita sudah bisa lang-

sung mulai melakukan desktop recording.

Klik tombol New Project atau dari menu

File|New. Kita akan diberikan New Project

Wizard yang sederhana.

Step #1 Proses recording� Pertama-tama kita memilih area yang

direkam. Untuk merekam seluruh layar

desktop, pilih “Screen”. Jika ingin me-

rekam aktivitas di satu software terten-

tu saja, pilih “Window”. Untuk memilih

software/window yang ingin direkam

klik “Choose” kemudian klik window

yang diinginkan. Pilih “Hide Wink Win-

dow” agar window utama Wink hilang

dan tidak ikut terrekam. Gunakan Cap-

ture Rate = 4 (default) karena hasilnya

nanti sudah cukup baik. Setelah itu, klik

“OK”. Lihat Gambar 2.

� Sebelum mulai merekam, jangan lupa

klik “Minimize To Tray”. Untuk mu-

lai merekam, tekan “Shift + Pause”.

Silakan mengoperasikan software

yang ingin dibuat tutorialnya. Semua

aktifitas visual menggerakan mouse,

mengklik tombol, ataupun mengetik

keyboard di dalam area window yang

dipilih akan direkam oleh Wink. Lihat

Gambar 3.

� Untuk berhenti merekam, ketik “Shift +

Pause” sekali lagi. Kemudian klik kanan

pada icon wink di system tray lalu klik

“Finish Capture” untuk menyelesaikan

wizard recording. Lihat Gambar 4.

Gambar 1. Tampilan pertama Wink.

Gambar 2. Wizard membuat project baru.

Gambar 3. Saatnya mulai merekam.

Gambar 4. Mengakhiri rekaman.

Page 20: 52-77_Tutorial_05.pdf

www.infolinux.web.id INFOLINUX � 05/2007 71

TUTORIAL WINK

Step #2 Menambahkan komentar� Untuk memberikan komentar ke dalam

rekaman yang dibuat, klik nomor frame

yang ingin diberi komentar, kemudian

klik opsi “Textbox”. Klik tombol “Edit

Callout Text” untuk menulis komentar.

Lihat Gambar 5 dan 6.

� Untuk mengubah bentuk callout, klik

“Choose Callout” dan pilih bentuk call-

out yang diinginkan. Untuk memberi-

kan komentar di tempat lain, ulangi lagi

proses ini pada nomor frame yang ber-

beda. Lihat Gambar 7.

Step #3 Me-render hasil recording� Klik “Render”. Pilih output fi le type se-

bagai Macromedia Flash (*.swf). Klik

“Browse” untuk menentukan tempat

dan nama fi le. Klik “OK”. Biarkan set-

ting-an lain secara default. Kemudian

klik “OK” lagi untuk melakukan render-

ing. Lihat Gambar 8 dan 9.

Ya, kini kita sudah berhasil meng-

gunakan Wink untuk melakukan desktop

recording. Kita bisa menyimpan project

ini jika mau, klik File|Save. Cukup seder-

hana, tapi tutorial yang dihasilkan sangat

bermanfaat bagi orang-orang yang baru

mengenal Linux. Pemanfaatan desktop

recording untuk pembuatan tutorial juga

sangat baik digunakan untuk mengajar-

kan cara pengoperasian suatu software

secara cepat.

Tentang Output FileWink bisa menghasilkan tipe fi le fl ash (*.swf)

maupun executable (*.exe). Secara default,

distro seperti openSuse sudah memberikan

fl ash player pada saat instalasi. Hal ini sa-

ngat mempermudah dalam pendistribusian

tutorial yang dibuat karena sudah banyak

Linux yang siap untuk menjalankan fl ash.

Jika memilih tipe fi le fl ash sebagai

output, wink secara otomatis membuat-

kan sebuah fi le *.htm yang terintegrasi de-

ngan fi le fl ash. User tinggal membuka fi le

*.htm tersebut dengan browser Firefox atau

Mozilla yang sudah dilengkapi dengan plu-

gin fl ash. Keuntungan me-render hasil out-

putnya sebagai fi le fl ash adalah hasil reka-

man ini bisa digunakan multiplatform. User

cukup memiliki web browser standar yang

dilengkapi dengan fl ash plugin, maka meng-

gunakan sistem operasi manapun user akan

bisa melihat hasil rekaman kita.

Adapun untuk Linux yang belum dileng-

kapi fl ash player secara default, bisa men-

download fi le installer fl ash player lang-

sung dari website pembuat fl ash player.

Cara instalasinya pun sangat mudah. Atau

bisa juga melalui cara yang lebih mudah

lagi, yaitu dengan melakukan koneksi ke

Internet menggunakan browser, misal kita

gunakan fi refox, dan membuka website

yang ada content fl ash-nya. Nanti akan ada

permintaan untuk menginstal plugin fl ash

secara otomatis.

Saat ini, kode fl ash player sudah ada

yang diberikan ke pengembang open source

(Mozilla). Selain itu, juga sudah ada Gnash

yang menjadi alternatif fl ash player versi

open source. Kita juga tidak perlu kha-

watir jika menyimpan ke dalam fi le execut-

able. Dengan menginstal wine, tinggal klik

pada fi le executable tersebut, maka secara

otomatis wine akan menjalankannya.

Untuk keperluan belajar bersama, fi le-fi le

hasil rekaman ini bisa disimpan di server.

Misal kita menggunakan web server Apache,

fi le-fi le hasil rendering tersebut cukup di-

le takkan pada sebuah folder di document

root httpd. User tinggal mengakses folder

tersebut, misalnya http://192.168.1.1/

nama_folder untuk menampilkan seluruh

hasil rendering.

Walaupun hasil rendering yang kita

peroleh sudah cukup bagus dengan vi-

sualisasi yang sangat jelas dan ukuran fi le

cukup kecil, masih terasa ada yang kurang.

Alangkah lebih baiknya kalau rekaman yang

dihasilkan dilengkapi dengan suara. Misal,

jika kita menekan beberapa tombol shortcut

keyboard, kita bisa memberikan informasi

tersebut melalui audio, karena informasi

tombol keyboard mana saja yang kita tekan

tidak tampil di layar rekaman.

Jika kita membuatnya menggunakan

software recording yang hasilnya dalam

bentuk fi le movie, tipe fi le dan jenis en-

coder-decoder-nya pun perlu diperhatikan.

Untuk menghasilkan output rekaman yang

berupa movie, kita bisa menggunakan

software desktop recording xvidcap atau

istanbul.

Jika ingin berpartisipasi pada project

pembuatan tutorial open source software,

termasuk yang berbasis multimedia se per-

ti Wink ini, silakan bergabung ke milis

[email protected].

Yusuf Kurniawan [[email protected]]

Gambar 5. Edit Callout Text.

Gambar 6. Kotak edit callaout.

Gambar 7. Mengubah bentu callout.

Gambar 8. Menyiapkan render. Gambar 9. Menentukan file output.

Page 21: 52-77_Tutorial_05.pdf

www.infolinux.web.id05/2007 � INFOLINUX72

TUTORIAL LVM

Logical Volume Manager atau yang biasa disingkat dengan LVM merupakan metode

alokasi kapasitas di suatu media penyimpanan, yang lebih fleksibel daripada skema

partisi konvensional. Dengan menggunakan LVM, kita dapat dengan mudah mengubah

kapasitas harddisk tanpa perlu khawatir kehilangan data.

Pada edisi sebelumnya, kita telah mengenal

bagaimana metode penggunaan dasar LVM.

Di edisi ini, kita akan melihat teknik peng-

gunaan metode LVM yang lainnya, se perti

cara menambah kapasitas harddisk, LVM

dalam RAID, dan sebagainya.

Menambah dan menghapus partisi harddiskSejauh ini, kita belum pernah menggunakan

partisi /dev/sdf. Untuk itu, sekarang kita

akan membuat partisi /dev/sdf1 sebesar 25

GB, dan menambahkannya ke dalam volume

group fi leserver yang sudah kita buat di edisi

sebelumnya.

server1:~# fdisk /dev/sdf....................................Command (m for help): n....................................Command action e extended p primary partition (1-4)pPartition number (1-4): 1

(Note: ketikkan p, kemudian pilih 1, untuk

membuat sebuah partisi di primary parti-

tion di partisi ke-1).

....................................First cylinder (1-10443, default 1): Using default value 1Last cylinder or +size or +sizeM or +sizeK (1-10443, default 10443): +25000M(Note : Tekan 1 atau isikan 1 untuk fi rst

cylinder, kemudian isikan +25000M untuk

membuat partisi sebesar 25 GB).

....................................Command (m for help): tSelected partition 1Hex code (type L to list codes): 8eChanged system type of partition 1 to 8e (Linux LVM)

(Note: Isikan t untuk memberikan sistem di

partisi yang baru saja kita buat. Lalu isikan

8e di option Hex code untuk memberikan

Linux LVM sebagai fi le system-nya).

....................................Command (m for help): wThe partition table has been altered!

(Note: Isikan w untuk menulis semua pe-

rubahan option yang telah dilakukan di

fdisk).

....................................Calling ioctl() to re-read partition table.Syncing disks.

Jalankan fdisk -l, untuk sekedar memasti-

kan kalau partisi /dev/sdf1 yang baru saja kita

buat sudah ada.

server1:~# fdisk -l

Berikutnya kita akan menyiapkan partisi

/dev/sdf1 agar dapat digunakan dalam LVM.

server1:~# pvcreate /dev/sdf1

Physical volume “/dev/sdf1” successfully created

Tambahkan partisi /dev/sdf1 ke dalam

volume group fi leserver.

server1:~# vgextend fileserver /dev/sdf1 Volume group “fileserver” successfully extended

Jalankan vgdisplay untuk melihat kapa-

sitas total dari volume group fi leserver. Dari

hasil output-nya, kita dapat melihat bahwa

kapasitas total volume group fi leserver

telah bertambah daripada kapasitas total

sebelumnya.

server1:~# vgdisplay

Sekarang kita akan menghapus partisi /

dev/sdb1. Tetapi sebelum melakukan hal ini,

kita akan meng-copy semua data yang terdapat

pada partisi tersebut ke partisi /dev/sdf1.

server1:~# pvmove /dev/sdb1 /dev/sdf1

Berikutnya, kita akan menghapus partisi

/dev/sdb1 dari volume group fi leserver.

server1:~# vgreduce fileserver /dev/sdb1 Removed “/dev/sdb1” from volume group “fileserver”

Jalankan kembali vgdisplay. Dari hasil

output-nya, terlihat kalau kapasitas volume

group fi leserver telah berkurang setelah par-

Manajemen KapasitasHarddisk Menggunakan LVMBagian 2 dari 2 artikel

Page 22: 52-77_Tutorial_05.pdf

www.infolinux.web.id INFOLINUX � 05/2007 73

TUTORIAL LVM

tisi /dev/sdb1 dihapus dari volume group

fi leserver.

server1:~# vgdisplay

Sekarang kita akan menghapus partisi /

dev/sdb1 dari LVM.

server1:~# pvremove /dev/sdb1

Jalankan perintah pvdisplay untuk me-

lihat apakah partisi /dev/sdb1, sudah tidak

terdapat dalam sistem LVM.

server1:~# pvdisplay

Dari hasil latihan di atas, Anda telah ber-

hasil menghapus partisi /dev/sdb dari sistem

LVM. Hal ini membuktikan, kalau proses me-

nambahkan atau menghapus suatu partisi ke

dalam sistem LVM, dapat dilakukan secara

mudah.

Mengembalikan ke posisi sistem semulaPada bagian ini, kita akan mengembalikan

dahulu sistem yang telah kita buat, ke posisi

sistem semula. Langkah ini hanya sebagai

latihan, yang bertujuan agar kita dapat

mempelajari bagaimana untuk meng-undo

LVM setup.

Pertama, kita harus melakukan proses

unmount terhadap semua logical volume

yang sedang dalam proses mount. Jalankan

perintah di bawah ini untuk melakukan hal

tersebut:

server1:~# umount /var/share

server1:~# umount /var/backup

server1:~# umount /var/media

Selanjutnya, kita akan menghapus semua

logical volume, volume group, dan partisi

LVM yang telah dibuat.

server1:~# lvremove /dev/fileserver/share Do you really want to remove active logical volume “share”? [y/n]: y Logical volume “share” successfully removed

server1:~# lvremove /dev/fileserver/backup Do you really want to remove active logical volume “backup”? [y/n]: y Logical volume “backup” successfully removed

server1:~# lvremove /dev/fileserver/media Do you really want to remove active logical volume “media”? [y/n]: y Logical volume “media” successfully removed

server1:~# vgremove fileserver Volume group “fileserver” successfully removed

server1:~# pvremove /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 Labels on physical volume “/dev/sdc1” successfully wiped Labels on physical volume “/dev/sdd1” successfully wiped Labels on physical volume “/dev/sde1” successfully wiped Labels on physical volume “/dev/sdf1” successfully wiped

server1:~# vgdisplay No volume groups found

server1:~# pvdisplay

Berikutnya, kita akan mengembalikan

isi fi le /etc/fstab, ke isi awal fi le /etc/fstab

semula, untuk melindungi agar system

tidak mencoba untuk melakukan proses

mount devices yang sudah tidak ada. Untuk

itu, berikan tanda remark (#), pada bagian

berikut di dalam fi le /etc/fstab :

server1:/etc# vim /etc/fstab ....................................#/dev/fileserver/share /var/share ext3 rw,noatime 0 0#/dev/fileserver/backup /var/backup xfs rw,noatime 0 0#/dev/fileserver/media /var/media reiserfs rw,noatime 0 0

Save dan lakukan proses reboot sistem.

server1:~# shutdown -r now

Setelah masuk ke dalam sistem kembali,

coba ketikkan perintah df -h untuk memasti-

kan kalau sistem hanya melakukan mount

seperti kondisi awal.

server1:~# df -h

Saat ini, kondisi sistem sudah kembali ke

posisi semula. Hanya saja partisi /dev/sdb1-

/dev/sdf1 tetap ada, dan direktori /var/share,

/var/backup, dan /var/media, tidak perlu kita

delete lebih dahulu.

LVM di RAID1Pada bagian ini, kita akan mempelajari cara

konfi gurasi LVM dan memindahkannya ke

RAID1 array agar terjamin ketersediaan-

nya. Sebagai gambaran, sistem yang kita

buat nantinya akan terlihat seperti gambar

Skema LVM Full RAID1.

Dari gambaran tersebut, kita akan mem-

buat RAID array /dev/md0 dari partisi /

dev/sdb1+/dev/sdc1, dan RAID array /dev/

Menambahkan partisi /dev/sdf ke dalam volume group fileserver. Menghapus semua logical volume, volume group, dan partisi LVM yang telah dibuat.

Page 23: 52-77_Tutorial_05.pdf

www.infolinux.web.id05/2007 � INFOLINUX74

TUTORIAL LVMmd1 dari partisi /dev/sdd1+/dev/sde1. Par-

tisi /dev/md0 dan /dev/md1, nantinya akan

menjadi physical volume untuk LVM.

Sebelum melakukan hal tersebut, kita akan

mengonfi gurasi LVM sebagai berikut:

server1:~# pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

server1:~# vgcreate fileserver /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

server1:~# lvcreate --name share --size 40G fileserver

server1:~# lvcreate --name backup --size 5G fileserver

server1:~# lvcreate --name media --size 1G fileserver

server1:~# mkfs.ext3 /dev/fileserver/share

server1:~# mkfs.xfs /dev/fileserver/backup

server1:~# mkfs.reiserfs /dev/fileserver/media

Lakukan proses mount kembali logical volume yang telah dibuat.server1:~# mount /dev/fileserver/share /var/share

server1:~# mount /dev/fileserver/backup /var/backup

server1:~# mount /dev/fileserver/media /var/media

Sekarang kita akan memindahkan selu-

ruh isi dari partisi /dev/sdc1 dan /dev/sde1

(/dev/sdc1 merupakan partisi kedua dari

RAID array /dev/md0, sedangkan /dev/

sde1 merupakan partisi kedua dari RAID

array /dev/md1) ke partisi sisa-nya. Kare-

na setelah ini kita akan menghapus par-

tisi tersebut dari LVM, dan memformatnya

dengan tipe fd (Linux RAID autodetect), dan

me mindahkan dari /dev/md0 yang direpre-

sentasikan ke /dev/md1. Untuk melakukan

hal ini, jalankan perintah berikut:

server1:~# modprobe dm-mirror

server1:~# pvmove /dev/sdc1

server1:~# vgreduce fileserver /dev/sdc1

server1:~# pvremove /dev/sdc1

server1:~# pvdisplay

server1:~# pvmove /dev/sde1

server1:~# vgreduce fileserver /dev/sde1

server1:~# pvremove /dev/sde1

server1:~# pvdisplay

Berikutnya, kita akan memformat par-

tisi /dev/sdc1 dengan menggunakan tipe fd

(Linux RAID autodetect).

server1:~# fdisk /dev/sdc....................................

Command (m for help): tSelected partition 1Hex code (type L to list codes): fdChanged system type of partition 1 to fd (Linux raid autodetect)Command (m for help): wThe partition table has been altered!

Calling ioctl() to re-read partition table.Syncing disks.

Berikutnya kita akan melakukan hal yang

sama terhadap partisi /dev/sde1.

server1:~# fdisk /dev/sde

Saat Anda mengetikkan fdisk -l, Anda

dapat melihat bahwa partisi /dev/sdc1 dan

partisi /dev/sde1 sudah berubah menjadi fi le

system Linux RAID autodetect.

server1:~# fdisk -l

Sekarang kita akan menambahkan /

dev/sdc1 ke /dev/md0 dan /dev/sde1 ke

/dev/md1. Karena node kedua (/dev/sdb1

dan /dev/sdd1) belum siap, maka kita harus

menjelaskannya dengan perintah berikut:

server1:~# mdadm --create /dev/md0 --auto=yes -l 1 -n 2 /dev/sdc1 missingmdadm: array /dev/md0 started.

server1:~# mdadm --create /dev/md1 --auto=yes -l 1 -n 2 /dev/sde1 missingmdadm: array /dev/md1 started.

Next, kita akan menyiapkan /dev/md0

dan /dev/md1 untuk partisi LVM.

server1:~# pvcreate /dev/md0 /dev/

Skema LVM Full RAID1.

Proses konfigurasi LVM kembali. Mengubah file system /dev/sdc menjadi Linux RAID autodetect.

Page 24: 52-77_Tutorial_05.pdf

www.infolinux.web.id INFOLINUX � 05/2007 75

TUTORIAL LVM

md1

server1:~# vgextend fileserver /dev/md0 /dev/md1

server1:~# pvdisplay

server1:~# vgdisplay

Sekarang kita akan memindahkan isi

dari partisi /dev/sdb1 ke /dev/md0 dan

isi dari /dev/sdd1 ke /dev/md1, kemudian

hapus partisi /dev/sdb1 dan /dev/sdd1 dari

LVM.

server1:~# pvmove /dev/sdb1 /dev/md0

server1:~# pvmove /dev/sdd1 /dev/md1

server1:~# vgreduce fileserver /dev/sdb1 /dev/sdd1

server1:~# pvremove /dev/sdb1 /dev/sdd1

Sekarang hanya /dev/md0 dan /dev/md1

yang terdapat di physical volumes.

server1:~# pvdisplay

Lanjutkan dengan melakukan format par-

tisi /dev/sdb1 dan sdd1 dengan tipe fd (Linux

RAID autodetect).

server1:~# fdisk /dev/sdb....................................Command (m for help): tSelected partition 1Hex code (type L to list codes): fdChanged system type of partition 1 to fd (Linux raid autodetect)

....................................Command (m for help): wThe partition table has been altered!

Calling ioctl() to re-read partition table.Syncing disks.

Lakukan hal yang sama terhadap /dev/

sdd.

server1:~# fdisk /dev/sdd

Tambahkan /dev/sdb1 ke /dev/md0 dan

/dev/sdd1 ke /dev/md1.

server1:~# mdadm --manage /dev/md0 --add /dev/sdb1mdadm: added /dev/sdb1

server1:~# mdadm --manage /dev/md1 --add /dev/sdd1

Sekarang kedua RAID array telah di sinkro-

nisasi. Langkah ini akan memakan sedikit

waktu, dan Anda dapat mengeceknya dengan

menjalankan perintah berikut:

server1:~# cat /proc/mdstat....................................md1 : active raid1 sdd1[2] sde1[0] 24418688 blocks [2/1] [U_] [===================>.] recovery = 99.5% (24304768/24418688) finish=0.0min speed=74082K/sec....................................unused devices: <none>

Dan akan terlihat seperti berikut jika pros-

es sinkronisasi RAID array telah selesai.

server1:~# cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10] md1 : active raid1 sdd1[1] sde1[0] 24418688 blocks [2/2] [UU] md0 : active raid1 sdb1[1] sdc1[0] 24418688 blocks [2/2] [UU] unused devices: <none>

Jalankan perintah pvdisplay untuk meli-

hat kapasitas total dari Physical Volume.

server1:~# pvdisplay

Dari hasil output pvdisplay, dapat ter-

lihat kalau ukuran total physical volume

tersedia sebesar 2 * 23.29GB = 46.58GB.

Jadi kita masih memiliki space kosong

sebesar 0.5GB, yang dapat diberikan ke salah

satu logical volume yang ada (40 GB (share),

Proses sinkronisasi RAID array.

Menandai dan menghapus partisi /dev/sdc1 dan /dev/sde1 ke dalam RAID array.

Page 25: 52-77_Tutorial_05.pdf

www.infolinux.web.id05/2007 � INFOLINUX76

TUTORIAL LVM5GB (backup), 1GB (media) = 46 GB). Se-

bagai contoh di sini, kita akan memberikan

kapasitas 0.5GB pada partisi media.

server1:~# lvextend -L1.5GB /dev/fileserver/media

server1:~# resize_reiserfs /dev/fileserver/media

Jika Anda menginginkan agar logical

vo lume dapat di-mount secara otomatis se-

tiap kali booting, maka Anda harus memodi-

fi kasi isi fi le /etc/fstab kembali (dengan

jalan menghilangkan kembali tanda remark

(#), pada bahasan sebelumnya).

Setelah diedit, lakukan reboot system

server1:~# shutdown -r now

Mengganti kapasitas harddiskSaat ini kita sudah menggunakan empat

buat harddisk dengan kapasitas masing-

masing harddisk sebesar 25 GB. Sekarang

kita asumsikan kapasitas harddisk sudah

tidak mencukupi lagi, dan kita membutuh-

kan lebih banyak kapasitas untuk konfi -

gurasi RAID ini. Maka dari itu, kita akan

mengganti kapasitas harddisk 25 GB yang

kita miliki dengan harddisk 80 GB. Dengan

cara ini, sekarang kita tetap dapat meng-

gunakan kapasitas harddisk yang sudah

ada, ditambah dengan kapasitas harddisk

yang baru ditambah.

Prosedur yang akan kita lakukan adalah

sebagai berikut: pertama remove /dev/sdb

dan /dev/sdd dari RAID array, ganti dengan

harddisk yang lebih besar, kemudian letakkan

kembali ke dalam RAID array. Hal ini yang

akan kita lakukan juga untuk /dev/sdc dan

/dev/sde.

Untuk melakukan hal ini, lakukan langkah

berikut. Pertama, kita akan menandai kalau

/dev/sdb1 sebagai failed.

server1:~# mdadm --manage /dev/md0 --fail /dev/sdb1

Maka saat menjalankan perintah cat /

proc/mdstat, hasil output-nya akan terlihat

sebagai berikut:

server1:~# cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10] md0 : active raid1 sdc1[0] sdb1[2](F) 24418688 blocks [2/1] [U_]

md1 : active raid1 sde1[0] sdd1[1] 24418688 blocks [2/2] [UU] unused devices: <none>

Selanjutnya kita akan menghapus /dev/

sdb1 dari RAID array /dev/md0.

server1:~# mdadm --manage /dev/md0 --remove /dev/sdb1

Maka saat menjalankan perintah cat /

proc/mdstat, hasil outputnya akan terlihat

sebagai berikut:

server1:~# cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10] md0 : active raid1 sdc1[0] 24418688 blocks [2/1] [U_] md1 : active raid1 sde1[0] sdd1[1] 24418688 blocks [2/2] [UU] unused devices: <none>

Lakukan hal yang sama untuk /dev/sdd1.

server1:~# mdadm --manage /dev/md1 --fail /dev/sdd1

server1:~# mdadm --manage /dev/md1 --remove /dev/sdd1

Dalam sistem sebenarnya, mungkin

kita harus melakukan shutdown komputer,

mengganti kapasitas harddisk 25 GB di

/dev/sdb dan /dev/sdd dan menggantinya

dengan kapasitas 80GB. Namun di sistem

LVM+RAID ini, kita tidak perlu melakukan

hal ini karena semua harddisk saat ini telah

memiliki kapasitas 80 GB.

Selanjutnya kita harus melakukan for-

mat /dev/sdb dan /dev/sdd. Kita harus

membuat partisi /dev/sdb1 resp. ke /dev/

sdd1, menggunakan tipe fd (Linux RAID

autodetect), kapasitas 25 GB (setting yang

sama seperti di harddisk yang lama), dan

/dev/sdb2 resp. partisi /dev/sdd2. type fd,

dan mencangkup diharddisk. Sama halnya

dengan /dev/sdb1 dan /dev/sdd1 yang di-

tampilkan dalam harddisk. kita juga perlu

menciptakan /dev/sdb2 dan /dev/sdd2 di

special example.

server1:~# fdisk /dev/sdb....................................

Command (m for help): nCommand action e extended p primary partition (1-4)pPartition number (1-4): 2First cylinder (3041-10443, default 3041): Using default value 3041Last cylinder or +size or +sizeM or +sizeK (3041-10443, default 10443): Using default value 10443

Command (m for help): tPartition number (1-4): 2Hex code (type L to list codes): fdChanged system type of partition 2 to fd (Linux raid autodetect)

Command (m for help): wThe partition table has been altered!

Calling ioctl() to re-read partition table.Syncing disks.

Lakukan hal yang sama untuk /dev/sdd.

server1:~# fdisk /dev/sdd

Berikutnya, kita akan menambahkan

/dev/sdb1 ke /dev/md0 kembali, dan /dev/

sdd1 ke /dev/md1.

server1:~# mdadm --manage /dev/md0 --add /dev/sdb1mdadm: re-added /dev/sdb1

server1:~# mdadm --manage /dev/md1 --add /dev/sdd1mdadm: re-added /dev/sdd1

Sekarang isi antara RAID array akan

disinkronisasikan. Tunggu sampai proses

sinkronisasi RAID array selesai. Kita dapat

mengecek status sinkronisasi ini dengan

menggunakan perintah berikut:

server1:~# cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10] md0 : active raid1 sdb1[1] sdc1[0] 24418688 blocks [2/2] [UU] md1 : active raid1 sdd1[1] sde1[0] 24418688 blocks [2/2] [UU]

Page 26: 52-77_Tutorial_05.pdf

www.infolinux.web.id INFOLINUX � 05/2007 77

TUTORIAL LVM unused devices: <none>

Sekarang kita akan melakukan proses yang

sama kembali. Kali ini untuk mengganti /dev/

sdc dan /dev/sde. Lakukan perintah-perintah

di bawah ini:

server1:~# mdadm --manage /dev/md0 --fail /dev/sdc1

server1:~# mdadm --manage /dev/md0 --remove /dev/sdc1

server1:~# mdadm --manage /dev/md1 --fail /dev/sde1

server1:~# mdadm --manage /dev/md1 --remove /dev/sde1

server1:~# fdisk /dev/sdc(Note: Berikan kapasitas sisa sebagai partisi

/dev/sdc2, dengan tipe fi le sistem fd.)

server1:~# fdisk /dev/sde(Note : Berikan kapasitas sisa sebagai partisi

/dev/sde2, dengan tipe fi le sistem fd.)

Lihat proses sinkronisasi dengan meng-

gunakan cat /proc/mdstat, dan tunggu sampai

proses sinkronisasi selesai.

server1:~# cat /proc/mdstat

Berikutnya, kita akan membuat RAID ar-

ray /dev/md2 dari /dev/sdb2 dan /dev/sdc2,

dan RAID array /dev/md3 dari /dev/sdd2 dan

/dev/sde2.

server1:~# mdadm --create /dev/md2 --auto=yes -l 1 -n 2 /dev/sdb2 /dev/sdc2mdadm: array /dev/md2 started.

server1:~# mdadm --create /dev/md3 --auto=yes -l 1 -n 2 /dev/sdd2 /dev/sde2mdadm: array /dev/md3 started.

RAID array yang baru, seharusnya sudah

dapat disinkronisasikan sekarang. Silakan di

check dengan menggunakan perintah:

server1:~# cat /proc/mdstat

Setelah proses sinkronisasi selesai, kita

akan menyiapkan /dev/md2 dan /dev/md3

untuk LVM.

server1:~# pvcreate /dev/md2 /dev/md3

Physical volume “/dev/md2” successfully created Physical volume “/dev/md3” successfully created

Selanjutnya, tambahkan /dev/md2 dan /

dev/md3 ke dalam volume group fi leserver.

server1:~# vgextend fileserver /dev/md2 /dev/md3 Volume group “fileserver” successfully extended

Kita dapat melihat dengan mengguna-

kan perintah pvdisplay, bahwa phsyical vol-

ume /dev/md2 dan /dev/md3, telah masuk

ke dalam volume group fi leserver.

server1:~# pvdisplay

Sekarang, kita telah sukses dalam

melakukan penggantian kapasitas harddisk

berukuran kecil dengan yang lebih besar.

Kita juga telah memiliki kapasitas harddisk

yang lebih besar (2*23.29GB+2*56.71GB=1

60GB). Dengan ini, kita dapat memberikan

kapasitas tambahan kepada logical volume

yang ada. Sebagai contoh, kita akan menam-

bahkan kapasitas logical volume backup.

server1:~# lvextend -L10G /dev/fileserver/backup

Extending logical volume backup to 10.00 GB Logical volume backup successfully resized

Untuk menambah kapasitas xfs fi lesys-

tem, jalankan perintah berikut:

server1:~# xfs_growfs /dev/fileserver/backup

Dengan menggunakan perintah df -h,

Anda dapat melihat bahwa kapasitas logical

volume back-up telah bertambah menjadi 10

GB.

server1:~# df -h

Jika Anda telah melalui semua proses

ini dengan benar, berarti Anda telah

berhasil mengonfigurasi LVM dan LVM

dalam RAID. Dengan memahami cara

penggunaan dan konfigurasi LVM dan

LVM dalam RAID di Linux, diharapkan

kita dapat menangani permasalahan

kapasitas harddisk secara mudah. Aplikasi

LVM dan RAID di Linux sudah cukup

mapan, sehingga cukup baik diterapkan

untuk kebutuhan perusahaan. Akhir kata,

selamat mencoba!

Supriyanto [[email protected]]