Anda di halaman 1dari 26

TUTORIAL NS2

SIMULASI JARINGAN NIRKABEL PADA


NS2

N
irkabel merupakan salah satu bidang TI yang sedang berkembang. Melakukan riset atau
percobaan di bidang wireless dengan jumlah mobile node yang sangat banyak, bukanlah hal
yang mudah. Kendala biaya merupakan salah satu penghalang. Software open source NS2
menyediakan simulasi jaringan nirkabel dengan disertai protokol-protokol baru.

Node merupakan suatu kelas dalam Otcl, $ns_ at 10.0 “$n0 setdest 5.0 10.0 $ns_ node-config -agentTrace ON -
yang dapat didefinisikan sebagai mobile de- 5.0” ;# pada detik ke-10 n0 pada routerTrace ON \
vice atau komputer. Nilai-nilai yang diperlu- posisi(5,10,5) -macTrace ON -movementTrace ON
kan dalam konfigurasi node ada di Tabel 1. Buat file yang bertugas melakukan pen-
Misalkan tipe Link Layer kita ganti seper- Membuat Topografi catatan tersebut.
ti di bawah ini. Topografi ini merupakan tempat di mana set jejak [open nirkabel.tr w]
set val(ll) LL node bergerak. Penentuan daerah topografi $ns_ trace-all $jejak
LL set mindelay_ 50us ditentukan oleh panjang dan lebar. Berikut
LL set delay_ 25us contoh pembuatan topografi: Pembuatan Access Point
Untuk mengonfigurasi sebuah node, set val(panjang) 100 Access point dalam NS2 juga dianggap se-
dapat menggunakan perintah: set val(lebar) 100 bagai node. Untuk menentukan node yang
$ns_ node-config -parameter set daerah [new Topography] menjadi access point, maka kita perlu
konfigurasi nilai $daerah load_flatgrid $val(panjang) mendapatkan MAC dari node tersebut.
Contoh: $val(lebar) set ap [$ns node]
$ns_ node-config -llType $val(ll) Setelah membuat topografi, nama varia- set mac_ap [$ap getMac 0]
-phyType $val(netif) bel topografi yang kita buat ditambahkan set n1 [$ns node]
pada konfigurasi node. set mac_n1 [$ap getMac 0]
Posisi Node $ns_ node-config -topoInstance daerah Setelah mendapatkan MAC, kita perlu
Dalam sebuah jaringan nirkabel, setiap node menentukan alamat Access point tersebut
dapat bergerak dalam sebuah area. Posisi Pembuatan GOD dan memberitahukan kepada node lainnya.
node dalam NS2 dinyatakan dalam sumbu GOD merupakan kepanjangan dari General set Alamat_AP [$mac_ap id]
X, Y dan Z. Operations Director, yang berguna untuk me- $mac_ap bss_id $Alamat_AP
set n0 [$ns node] nyimpan informasi global tentang jumlah $mac_n1 bss_id $Alamat_AP
$n0 set X_ 0.0 node dan pergerakan node. Contoh Skenario Simulasi jaringan nir-
$n0 set Y_ 0.0 set val(jumlahnode) 10 kabel
$n0 set Z_ 0.0 set god_ [create-god Pada skenario ini terdapat satu access
Jika kita menentukan sendiri gerakan $val(jumlahnode)] point, dan dua buah mobile node dengan
node selanjutnya, maka kita harus mem- menggunakan agen UDP dan trafik CBR.
buat nilai random motion node menjadi 0. Pembuatan File Pencatatan Jejak #nama file : nirkabel.tcl
Jika kita beri nilai selain 0, maka node akan Pada tutorial sebelumnya, telah dijelaskan set val(jumlahnode) 3
bergerak secara acak. pencatatan jejak dengan NAM. Untuk kali set val(panjang) 200
$n0 random-motion 0 ini, kita buat file pencatatan jejak agen, set val(lebar) 200
Untuk menentukan gerak suatu node, router, perpindahan dan MAC. Untuk meng- set ns_ [new Simulator]
dapat menggunakan penjadwalan dengan aktifkan apa saja yang dicatat, kita buat set jejak [open nirkabel.tr w]
perintah setdest. nilainya menjadi ON. $ns_ trace-all $jejak

52 06/2007  INFOLINUX www.infolinux.web.id


TUTORIAL NS2
#pembuatan topografi $n0 set X_ 50.0 $ns_ at 10.0 “$n0 reset”
set daerah [new Topography] $n0 set Y_ 50.0 $ns_ at 10.0 “$n1 reset”
$daerah load_flatgrid $val(panjang) $n0 set Z_ 0.0 #panggil prosedur stop
$val(lebar) $n1 set X_ 150.0 $ns_ at 11.00 “stop”
set god_ [create-god $n1 set Y_ 150.0 $ns_ at 10.00 “puts \”Selesai\””
$val(jumlahnode)] $n1 set Z_ 0.0 proc stop {} {
#konfigurasi node # perpindahan node global ns_ jejak
$ns_ node-config -adhocRouting DSDV $ns_ at 3.0 “$n0 setdest 55.0 40.0 0.0” $ns_ flush-trace
-llType LL \ $ns_ at 6.0 “$n0 setdest 65.0 30.0 0.0” close $jejak
-macType Mac/802_11 \ $ns_ at 4.0 “$n1 setdest 125.0 120.0 exit 0 }
-ifqType Queue/ 0.0” puts “Mulai ...........”
DropTail/PriQueue $ns_ at 7.0 “$n1 setdest 130.0 160.0 $ns_ run
\ 0.0” Untuk menjalan skenario di atas, ketik-
-ifqLen 50 -antType #membuat agent UDP dengan trafik kan perintah:
Antenna/OmniAntenna CBR n0 sebagai pengirim n1 sebagai aini@luaini:$ ns nirkabel.tcl
\ penerima num_nodes is set 3
-propType set udp0 [new Agent/UDP] warning: Please use -channel as
Propagation/ $udp0 set class_ 0 shown in tcl/ex/wireless-mitf.tcl
TwoRayGround \ $ns_ attach-agent $n0 $udp0 INITIALIZE THE LIST xListHead
-phyType Phy/ set cbr0 [new Application/Traffic/CBR] Mulai ...........
WirelessPhy \ $cbr0 set packetSize_ 500 channel.cc:sendUp - Calc
-channelType $cbr0 set interval_ 0.005 highestAntennaZ_ and distCST_
Channel/ $cbr0 attach-agent $udp0 highestAntennaZ_ = 1.5, distCST_ =
WirelessChannel \ set null1 [new Agent/Null] 550.0
-topoInstance $ns_ attach-agent $n1 $null1 SORTING LISTS ...DONE!
$daerah -agentTrace $ns_ connect $udp0 $null1 Selesai ........
OFF \ #penjadwalan aliran trafik CBR Jika skenario tersebut selesai dijalan-
-routerTrace OFF - $ns_ at 2.0 “$cbr0 start” kan, file nirkabel.tr dapat dibuka untuk
macTrace ON - $ns_ at 9.0 “$cbr0 stop” melihat proses yang terjadi selama
movementTrace ON \ #reset semua node skenario.
-txPower 0.0075 - $ns_ at 10.0 “$ap reset” Nur Aini R, Sistem Informasi, FTIF, ITS [iin@its-sby.edu]
rxPower 1
#membuat node baru Tabel 1. Nilai-nilai yang diperlukan dalam konfigurasi node.
set ap [$ns_ node] Opsi Nilai Default
set n0 [$ns_ node] addressType flat, hierarchical flat
set n1 [$ns_ node] MPLS ON, OFF OFF
wiredRouting ON, OFF OFF
#mengambil nilai MAC
llType LL, LL/Sat w “”
set mac_ap [$ap getMac 0]
macType Mac/802_11, Mac/Csma/Ca, Mac/Sat, “”
set mac_n0 [$ap getMac 0] Mac/Sat/UnslottedAloha, Mac/Tdma
set mac_n1 [$ap getMac 0] ifqType Queue/DropTail, Queue/DropTail/PriQueue “”
#node ap sebagai AP phyType Phy/WirelessPhy, Phy/Sat “”
adhocRouting DIFFUSION/RATE, DIFFUSION/PROB, DSDV, “”
set Alamat_AP [$mac_ap id]
DSR, FLOODING, OMNIMCAST, AODV, TORA
#semua node diberi tahu base sation
propType Propagation/TwoRayGround, Propagation/Shadowing “”
ID propInstance Propagation/TwoRayGround, Propagation/Shadowing “”
$mac_ap bss_id $Alamat_AP antType Antenna/OmniAntenna “”
$mac_n0 bss_id $Alamat_AP channel Channel/WirelessChannel, Channel/Sat “”
topoInstance file topologi jaringan “”
$mac_n1 bss_id $Alamat_AP
mobileIP ON, OFF OFF
#gerakan acak ditiadakan
energyModel EnergyModel “”
$ap random-motion 0 initialEnergy Nilai dalam joule “”
$n0 random-motion 0 rxPower Nilai dalam watt “”
$n1 random-motion 0 txPower Nilai dalam watt “”
idlePower Nilai dalam watt “”
#penentuan posisi masing2 node
agentTrace ON, OFF OFF
$ap set X_ 100.0
routerTrace ON, OFF OFF
$ap set Y_ 100.0 macTrace ON, OFFs OFF
$ap set Z_ 0.0 movementTrace ON, OFF OFF

www.infolinux.web.id INFOLINUX  06/2007 53


TUTORIAL GNUPLOT

Visualisasi Interaktif dengan gnuplot

P
engguna komputer dari kampus dan lembaga penelitian yang kerap bergelut dengan
data, grafis, atau perhitungan matematis yang rumit, biasanya sudah mengenal
MATLAB, Maple, atau MathCad. Salah satu pengganti software sejenis itu di Linux
adalah gnuplot.

Software MATLAB, Maple, atau MathCad turut menggunakannya untuk membuat hasilkan makalah atau karya tulis ilmiah
merupakan peranti hitung canggih, ber- peta cuaca. dengan tampilan berkualitas tinggi.
antarmuka cantik, dan mengusung se- Kini, dengan rentang usia yang panjang,
gudang kemampuan numerik. Namun sa- Tentang gnuplot apa yang bisa diberikan gnuplot? Berikut ini
yang, software tersebut merupakan produk Merujuk dokumentasi resminya, gnuplot beberapa di antaranya:
komersial yang tidak murah harganya. Satu adalah program untuk mengeplot grafik  Mengeplot fungsi dan titik-titik data
hal unik, para penggunanya sering kali (plotting) secara interaktif. Software ini dua dimensi dengan berbagai gaya (titik,
hanya mengeksplorasi dan menggunakan dapat digunakan untuk mengeplot fungsi garis, ralat).
sejumput saja, dari segudang kecanggihan matematis maupun data, semisal data dari  Mengeplot fungsi dan titik-titik data tiga
yang dibawa software tersebut. hasil eksperimen. Dengan gnuplot, penggu- dimensi dengan berbagai gaya (kontur,
Bagaimana di GNU/Linux? Adakah na bisa memperoleh grafik 2D maupun 3D. mesh).
peranti kerja yang bisa menggantikan peran Meski ada embel-embel “gnu”, software  Komputasi aljabar dengan bilangan ulat,
software di atas? Hohoho..., jangan khawa- ini bukanlah keluarga GNU Project mau- float, maupun kompleks.
tir! Kalau sekedar software matematika pun Free Software. Meski demikian, dalam  Mulus dijalankan pada beragam sistem
atau sains, di GNU/Linux sangat melimpah. perjalanannya, software ini memiliki kaitan operasi (antara lain UNIX, GNU/
Lagipula, sistem operasi ini dan beragam erat dengan beberapa proyek keluaran GNU. Linux, MS Windows, MS DOS, dan
aplikasinya terus tumbuh berkembang, ter- Contohnya adalah GNU Octave yang meng- IBM OS/2).
utama oleh kalangan akademisi dan saintis. gunakan gnuplot sebagai mesin-pengeplot  Mendukung beragam format gambar
Beberapa software yang layak dicoba (plotting-engine). (antara lain EPS, PNG, SVG, dan JPEG).
di antaranya adalah Scilab, GNU Octave, Satu hal yang juga sering keliru adalah  Memiliki fasilitas history dan pengeditan
Grace, dan gnuplot. Software tersebut bukan- tentang penulisan nama software ini. baris perintah secara interaktif.
lah berkelas “ecek-ecek”, karena lahir dari Bukan “GNU Plot” atau “GNUplot”. Menu-
otak brilian para saintis. Software tersebut rut Thomas Williams, salah satu kreator Memasang gnuplot
telah terbukti dapat memenuhi kebutuhan software ini, penamaan yang benar adalah Versi teranyar pada saat artikel ini di-
penggunanya, terutama untuk komputasi “gnuplot”. Dengan demikian, meski ditulis tulis adalah gnuplot 4.2, yang dirilis pada 3
saintifik, dan mengeplot grafik. di awal kalimat atau judul naskah, penu- Maret 2007. Ada rentang waktu sekitar tiga
Pada artikel ini, penulis akan mengupas lisannya tetap menggunakan huruf kecil tahun dari versi sebelumnya, yaitu gnuplot
sebagian kemampuan gnuplot. Software (lower case letter). 4.0, yang dirilis 16 April 2004. Untuk me-
berwajah lugu yang dijalankan melalui mode Sejak kelahirannya pada tahun 1986, ngunduh, ada baiknya Anda masuk dulu ke
CLI (command line interface) ini, ternyata di- fungsi utama gnuplot adalah untuk situs http://www.gnuplot.info/.
gemari pengguna dari lingkungan kampus menampilkan visualisasi data saintifik. Namun bila koneksi Internet belum
dan lembaga penelitian. Grafik yang ditelur- Meski tampilan antarmukanya tak mewah, memungkinkan, Anda tak perlu khawatir.
kan gnuplot sudah tak terhitung banyaknya, software ini mampu menghadirkan grafik Software pengeplot ini telah dipaketkan
dan bisa dijumpai di berbagai publikasi yang indah. Bersama dengan TeX/LaTeX, bersama ratusan software lainnya di distro
ilmiah. Bahkan, lembaga sekaliber NASA gnuplot bisa dikolaborasikan untuk meng- GNU/Linux yang Anda pakai.

54 06/2007  INFOLINUX www.infolinux.web.id


TUTORIAL GNUPLOT

Memulai gnuplot dari Konsole. Tampilan awal gnuplot.

Untuk memasangnya, gunakan saja fasili- (overwritten) oleh gnuplot, tanpa ada Membuat Grafik 2D
tas penginstalan yang diberikan oleh distro peringatan terlebih dahulu. Jadi, pakailah Untuk mengeplot grafik 2 dimensi,
tersebut. Misalnya, YaST di openSUSE dan nama yang berbeda, unik, namun mudah gnuplot menyediakan perintah “plot”.
MCC di Mandriva Linux. dimengerti. Sebagai contoh pertama, untuk membuat
Berkas yang telah disimpan, dapat di- grafik y = sin(x), perintahnya adalah se-
Memulai gnuplot panggil dari prompt gnuplot dengan cara perti berikut:
Untuk mulai mencicipi gnuplot, jalankanlah berikut: gnuplot> plot sin(x)
Terminal yang Anda suka. Di KDE, klik ikon gnuplot> load “simpan01.plt” Hasil penggambaran fungsi tersebut
Konsole di Panel. Di GNOME, caranya tak Setelah gnuplot membaca berkas terse- akan muncul di jendela baru. Jendela
beda jauh. but, Anda akan dibawa kembali ke prompt visualisasi ini bisa ditutup dengan menekan
Saat Konsole tampil di layar, berikan gnuplot>. tombol Q.
perintah berikut, dan lanjutkan dengan Pemanggilan berkas bisa juga dilaku- Garis kotak hitam-tebal yang meling-
menekan tombol Enter. kan dari prompt Terminal – misal Konsole kupi grafik disebut “border”. Untuk mem-
$ gnuplot – dengan cara berikut: beri nama pada sumbu-X, Anda bisa meng-
Segera setelah tombol Enter ditekan, $ gnuplot simpan01.plt aturnya pada parameter “xlabel”. Untuk
gnuplot akan menyajikan banner dan Setelah gnuplot selesai membaca ber- sumbu-Y, parameternya adalah “ylabel”.
penjelasan singkat tentang software ini. Di kas tersebut, Anda akan dibawa kembali ke Jangkauan (range) untuk sumbu-X dan
baris bawah akan muncul prompt berbentuk prompt Terminal. sumbu-Y bisa pula diatur. Secara default,
gnuplot> . Di depan prompt inilah tempat jangkauan untuk sumbu-X adalah dari -
untuk menuliskan perintah-perintah yang Mengedit Perintah 10 hingga 10, sedangkan jangkauan pada
akan dieksekusi gnuplot. Saat mengetikkan perintah di prompt sumbu-Y akan disesuaikan oleh gnuplot.
Beberapa perintah penting adalah gnuplot, tak jarang akan terjadi kesalahan Untuk mengatur jangkauan sumbu-
perintah untuk mengeplot grafik, menyim- ketik. Untuk mengedit dan membetul- X, digunakan perintah “xrange”. Untuk
pan daftar perintah yang telah diberikan ke kannya tidaklah susah. Anda bisa meman- jangkauan sumbu-Y, perintahnya adalah
sebuah berkas (file), memanggil berkas, dan faatkan tombol Control untuk keperluan “yrange”. Grafik yang dihasilkan bisa di-
perintah untuk keluar. seperti ini. Pada tabel, disajikan cara beri judul dengan mengatur parameter
Untuk keluar dari gnuplot, perintah mengedit perintah pada prompt gnuplot. perintah “title”.
yang bisa diberikan adalah “exit” maupun Contoh berikut akan menampilkan
Tombol Perintah Fungsi
“quit”. Namun bisa juga dengan perintah Ctrl+B Mundur satu karakter
fungsi y = cos(x) dengan jangkauan sum-
“q”. Perlu diperhatikan, bila telah keluar Ctrl+F Maju satu karakter bu-X dari 0 hingga 7, dan jangkauan untuk
dari gnuplot, maka segala perintah yang Ctrl+A Bergerak ke awal baris perintah sumbu-Y dari -1,5 hingga 1,5. Sumbu-X
pernah dibuat tidak akan terdokumentasi Ctrl+E Bergerak ke akhir baris perintah akan diberi label “Sumbu X”, dan sumbu-Y
Ctrl+H Menghapus karakter sebelum kursor
dan hilang. Untuk itu, ada baiknya Anda dengan label “Sumbu Y”. Grafik ini diberi
Ctrl+D Menghapus karakter pada kursor
menyimpan perintah-perintah untuk se- Ctrl+K Menghapus dari posisi kursor hingga
judul “Grafik fungsi y=cos(x)”. Perintah-
tiap grafik yang dibuat. Caranya adalah akhir baris perintah perintah yang diberikan adalah seperti
dengan memberi perintah “save”, diikuti Ctrl+U Menghapus seluruh baris perintah berikut ini:
nama berkas. Misalnya: Ctrl+W Menghapus kata hingga akhir baris gnuplot> set title “Grafik fungsi
perintah
gnuplot> save “simpan01.plt” y=cos(x)”
Panah atas Memanggil perintah yang pernah
Bila di direktori tempat menyimpan ditulis
gnuplot> set xlabel “Sumbu X”
berkas itu telah ada berkas dengan nama Panah bawah Memanggil perintah yang pernah gnuplot> set ylabel “Sumbu Y”
sama, maka berkas lama akan ditimpa ditulis gnuplot> set xrange [0:7]

www.infolinux.web.id INFOLINUX  06/2007 55


TUTORIAL GNUPLOT

Menampilkan grafik fungsi y = sin(x). Hasil penggambaran fungsi y = cos(x).

gnuplot> set yrange [-1.5:1.5] Grafik 3D secara umum dirumuskan dengan


gnuplot> plot cos(x) persamaan z = f(x,y). Pada perintah splot,
Untuk fleksibilitas penggunanya, titik-nol sumbu-Z terletak di atas bidang-
gnuplot mampu mengenali konstanta. XY. Agar berpindah pada bidang-XY, Anda
Konstanta yang diberikan bisa berupa kon- bisa menggunakan perintah “set ticslevel”.
stanta yang dikenal oleh gnuplot, maupun Dengan ticslevel bernilai 0, maka titik-nol
konstanta yang didefinisikan oleh peng- sumbu-Z akan bergeser pada bidang-XY.
guna. Salah satu konstanta yang dikenal Contoh berikut akan menampilkan
gnuplot adalah π. sebuah grafik 3D:
Sebelum membuat grafik baru, ada gnuplot> reset
baiknya layar visualisasi dikembalikan ke gnuplot> set xrange [-3:3] Menggeser grafik pada bidang XY.

pengaturan default. Hal ini bisa dilaku- gnuplot> set yrange [-3:3] memudahkan proses analisis. Fitur ini
kan dengan memberikan perintah “reset”. gnuplot> set isosample 40 bisa dinikmati, mulai gnuplot versi 4.0.
Contoh berikut akan menampilkan fungsi y gnuplot> splot exp(-x*x)*exp(- Parameter penting yang diperlukan adalah
= a * sin(x) dengan -2π <x<2 π. Konstanta y*y) “pm3d”. Contoh berikut akan menunjuk-
a bernilai 2. Perintah yang diberikan adalah kannya:
seperti berikut: gnuplot> reset
gnuplot> reset gnuplot> set isosample 40
gnuplot> set title “Grafik fungsi gnuplot> set pm3d
y=a*sin(x), a=2.0” gnuplot> splot sin(sqrt(x**2+y**2))/
gnuplot> set xlabel “Sumbu X” sqrt(x**2+y**2)
gnuplot> set ylabel “Sumbu Y”
gnuplot> set xrange [-2*pi:2*pi]
gnuplot> a=2.0
gnuplot> plot a*sin(x)

Grafik 3D fungsi z = exp(-x*x)*exp(-y*y).

Sekarang kita coba menggeser sumbu-Z,


agar berada pada bidang-XY, dengan mem-
beri nilai 0 pada ticslevel. Perintah “replot”
digunakan untuk mengeplot ulang fungsi
yang diberikan sebelumnya. Tampilan berwarna pada grafik 3D.
gnuplot> reset
gnuplot> set xrange [-3:3] Membuat Visualisasi Data
gnuplot> set yrange [-3:3] Bagi saintis maupun mahasiswa yang
Grafik fungsi dengan pemberian konstanta. gnuplot> set isosample 40 sedang melakukan penelitian, data
gnuplot> set ticslevel 0 eksperimen adalah harta yang sangat
Membuat Grafik 3D gnuplot> replot berharga. Data eksperimen belum mudah
Untuk membuat grafik 3 dimensi, perintah Pada beberapa kasus, tampilan grafik dianalisis, bila masih tersaji dalam bentuk
yang disediakan gnuplot adalah “splot”. yang berwarna sangat diperlukan untuk angka. Untuk mempermudah analisis,

56 06/2007  INFOLINUX www.infolinux.web.id


TUTORIAL GNUPLOT
data tersebut perlu divisualisasikan ke
dalam bentuk grafik.
Data hasil eksperimen biasanya dita-
bulasikan menjadi 2 kolom. Data jenis ini
akan menghasilkan grafik 2D. Ada kalanya
data eksperimen disajikan menjadi 3 kolom.
Data jenis ini bisa disulap membentuk
grafik 3D.
Pada dasarnya, data hasil eksperimen
bisa disimpan sebagai berkas teks biasa
(plain text). Antarkolom bisa dipisah-
kan oleh spasi kosong, maupun dengan
tombol Tab. Penyimpanan berkas data
seperti ini dikenali gnuplot. Baris yang
diawali dengan tanda #, akan diabaikan
oleh gnuplot.
Berikut ini satu contoh file data eks- Mengolah hasil visualisasi gnuplot menggunakan The GIMP.
perimen yang disimpan dalam bentuk 2
kolom. File ini disimpan dengan nama hanya segitu. Anda tentu menginginkan tulis perintah berikut untuk kembali ke
data2D.dat. hasil visualisasi tersimpan menjadi berkas prompt milik gnuplot,
gambar semisal PNG atau JPG. Dengan $ exit
#X Y
1.00 1.00 cara ini, dokumen laporan penelitian yang Langkah-langkah yang Anda lakukan
2.00 4.00 ditulis dengan pengolah kata seperti OOo di atas akan menghasilkan sebuah berkas
3.00 9.00 Writer, akan bisa diperkaya dengan grafik bernama visual01.xwd. Berkas ini bisa di-
4.00 16.00 yang representatif. buka menggunakan The GIMP. Dengan The
Jika kolom pertama digunakan untuk Anda menginginkan format JPG? Bisa! GIMP, Anda bisa mengubahnya menjadi
sumbu-X dan kolom kedua untuk sumbu- Cara ini agak panjang tetapi tidak sulit. berkas gambar berformat JPEG, PNG, atau
Y, maka untuk mengeplotnya perlu dit- Langkah yang perlu dilakukan adalah me- format gambar lainnya.
ambahkan perintah “using”, sehingga minta bantuan xwd dan pengolah gambar Cara lain yang biasa dilakukan adalah
perintah yang diberikan menjadi seperti semisal The GIMP. Caranya demikian: dengan menyimpannya menjadi berkas
berikut: gnuplot> reset postscript. Langkah ini biasanya dilakukan
gnuplot> plot “data2D.dat” using 1:2 gnuplot> set xrange [-3.5:3.5] bila dokumen dibuat menggunakan pem-
Berikut ini contoh berkas data eks- gnuplot> set yrange [-5.0:5.0] formatan LaTeX. Untuk menyimpan hasil
perimen yang disimpan dalam bentuk 3 gnuplot> set hidden3d visualisasi gnuplot menjadi berkas post-
kolom. Berkas ini disimpan dengan nama gnuplot> set isosample 40 script tidaklah sulit. Dengan asumsi berkas
data3D.dat. gnuplot> splot x*x*exp(- keluarannya disimpan dengan nama grafik1.
x*x)*y*y*exp(-y*y) eps, berikut ini caranya:
#X Y Z
1.00 1.00 1.00 Sampai pada perintah ini, gnuplot akan gnuplot> reset
2.00 4.00 8.00 menampilkan jendela baru yang memvisuali- gnuplot> set terminal postscript eps
3.00 9.00 27.00 sasikan persamaan tersebut. Berpindahlah gnuplot> set output “grafik1.eps”
4.00 16.00 64.00 kembali ke jendela Terminal (Konsole), gnuplot> plot [x=-2*pi:2*pi] sin(x)
Seperti halnya pada contoh data 2D di kemudian berikan perintah berikut: title “Grafik sin(x)”
atas, untuk menjadikan kolom pertama gnuplot> shell Di KDE, berkas postscript bisa dibuka
sebagai data untuk sumbu-X, kolom Perintah di atas akan membawa Anda menggunakan KGhostViewer.
kedua sebagai sumbu-Y, dan kolom pada prompt shell (Konsole). Selanjutnya,
ketiga sebagai sumbu-Z, maka pemakaian ketikkan perintah berikut: Penutup
parameter “using” untuk mengeplot data $ xwd > visual01.xwd Pada artikel ini, penulis hanya menyajikan
ini menjadi: Perhatikan bahwa kursor tetikus akan sekelumit kemampuan gnuplot. Tentu saja
gnuplot> plot “data3D.dat” using berubah. Ini menunjukkan bahwa Anda ha- masih banyak kemampuan gnuplot yang
1:2:3 rus menangkap jendela visualisasi hasil ke- belum tersaji. Penulis berharap, semoga
luaran gnuplot. Tampilkan jendela tersebut. Anda akan menemukan keasyikan saat
Mengolah Hasil Visualisasi Anda bisa menggunakan kombinasi tombol berkutat dengan grafik fungsi matematis,
Secara default, hasil visualisasi gnuplot lang- Alt+Tab untuk berpindah antar jendela. dan memiliki inspirasi baru saat bergelut
sung terpampang di layar monitor. Tentu ti- Setelah jendela visualisasi aktif, klik jendela dengan data.
dak akan menarik, bila kemampuan gnuplot tersebut. Selanjutnya, pada prompt shell Adi Nugroho [axireaxi@yahoo.co.id]

www.infolinux.web.id INFOLINUX  06/2007 57


TUTORIAL KAMUS

Membangun Kamus Dua Bahasa


Bagian 2 dari 2 Tulisan

D
i edisi sebelumnya, kita sudah membahas tentang struktur database dan cara kerja
kamus secara umum. Sudah kita bahas pula berbagai user interface, termasuk CLI
dengan bahasa C dan shell script, Text user interface dengan shell script+dialog,
dan GUI dengan shell script+Xdialog. Di edisi ini, kita akan membahas interface
web dengan PHP.
Seperti telah dibahas sebelumnya, database PHP Api Version: 20041225 sqlite3, load-lah terlebih dahulu modul
yang kita gunakan adalah sqlite versi 3. PHP Zend Module Api No: 20060613 tersebut di awal script Anda, dengan perin-
sendiri, yang sudah dengan dukungan akan Zend Extension Api No: tah berikut ini:
sqlite. Namun pada saat tulisan ini dibuat, 220060519 dl(“sqlite3.so”);
versi sqlite yang didukung adalah sqlite 2.x  Lakukanlah konfigurasi dengan perintah
(Sqlite 3 didukung melalui PDO Sqlite). Agar berikut: nkamus-web.php
bisa mengakses database sqlite versi 3 den- $ ./configure Program web ini hanya membutuhkan satu
gan mudah, kita perlu terlebih dahulu meng- file saja, yaitu nkamus-web.php, di mana
instal modul php-sqlite3. Setelah modul <output tidak ditampilkan> source code-nya akan dibahas setelah ini.
tersebut diinstal, barulah kita bisa masuk ke Ketika dijalankan, script akan menampilkan
pembahasan source code.  Lakukanlah kompilasi dengan perintah form dengan dua field yang bisa diisi/dipilih
Semua contoh di tulisan ini diban- berikut: oleh user:
gun di atas sistem Zenwalk Linux 4.4.1, $ make  search string, kata yang ingin dicari
namun seharusnya bisa bekerja tanpa ... padanannya
masalah di sistem lainnya. Versi Apache ...  search language, bahasa yang dicari
yang digunakan adalah 2.2.3, dan versi ...
PHP yang digunakan adalah 5.2.0. Versi Build complete. Seperti program-program sebelumnya,
modul php-sqlite3 yang digunakan adalah (It is safe to ignore warnings bahasa-bahasa yang tersedia juga akan di-
0.4. about tempnam and tmpnam). baca dari database kamus.
 Lakukanlah instalasi dengan perintah Setelah user menekan tombol translate,
Instalasi php-sqlite3 berikut: maka pencarian akan dilakukan. Apabila
Pertama-tama, download-lah terlebih dahulu # make install padanan kata ditemukan, maka akan di-
modul php-sqlite3 di http://sourceforge. tampilkan. Apabila tidak, No Result akan
net/project/showfiles.php?group_id=150569. Sebagai catatan, bagi yang tidak ingin ditampilkan.
Setelah itu, lakukanlah langkah-langkah melakukan instalasi otomatis dengan Sebagai catatan, apabila user tidak me-
berikut ini: perintah make install, kopikan saja file masukkan kata yang ingin terjemahkan,
 Ekstrak archive, dan masuk ke direktori modules/sqlite3.so ke direktori exten- maka halaman utama akan tetap ditampil-
hasil ekstrak sions PHP, dimana beberapa distro me- kan.
$ tar zxvf sqlite3-0.4.tgz letakkannya di /usr/lib/php/extensions/. Berikut ini adalah source code nkamus-
$ cd sqlite3-0.4 Apabila diperlukan, restart-lah web server web.php:
 Lakukanlah phpize dengan perintah Anda. <?
berikut: dl (“sqlite3.so”);
$ phpize Catatan untuk Script PHP
Configuring for: Untuk bisa bekerja dengan modul php- $app_name = “nkamus”;

58 06/2007  INFOLINUX www.infolinux.web.id


TUTORIAL KAMUS
$app_cmd = “nkamus-web.php”; if ($_POST)
$app_version = “0.0.1”; {
$app_author = “Noprianto”; $search_str = trim ($_
$app_license = “GPL”; POST[“search_str”]);
$app_website = “http://www. $search_lang = trim ($_
noprianto.com/code.php”; POST[“search_lang”]);
if ($search_str != “” && $search_
$app_dbfile = “/tmp/en-id.db”; lang != “”)
{
$db = sqlite3_open($app_dbfile); echo “
$res = sqlite3_query($db, “select <tr>
lang1_desc,lang2_desc from info”); <td valign=’top’>Result</td>
$l = sqlite3_fetch_array($res); <td>
$lang1 = $l[‘lang1_desc’]; “;
$lang2 = $l[‘lang2_desc’];
if ($search_lang == “1”)
$res = sqlite3_query($db, “select {
count(*) as count from dictionary”); $res = sqlite3_query($db,
$l = sqlite3_fetch_array($res); “select lang1_ref from dictionary
$entry_count = $l[‘count’]; where lang1=’$search_str’”);
$l = sqlite3_fetch_array($res);
echo “ $ref = $l[‘lang1_ref’];
<html> if ($ref == “”)
<head> {
<title>$app_name version $app_ $res = sqlite3_query($db,
version</title> “select lang2,lang2_ext from
</head> dictionary where lang1=’$search_
<body> str’”);
<b>$app_name version $app_version</ $l = sqlite3_fetch_
b><br> array($res);
(c) $app_author, $app_license<br> $res1 = $l[‘lang2’];
<a href=’$app_website’>$app_ $res2 = $l[‘lang2_ext’];
website</a><br><br>
Using database file $app_dbfile<br> }
Dictionary $lang1 <-> $lang2<br> else
Contains $entry_count entries<br> {
<br> $res = sqlite3_query($db,
<hr> “select lang2,lang2_ext from
<form action=’$app_ dictionary where lang1=’$ref’”);
cmd?action=translate’ method=’post’> $l = sqlite3_fetch_
<table> array($res);
<tr> $res1 = $l[‘lang2’];
<td>Search string</td> $res2 = $l[‘lang2_ext’];
<td><input type=’text’ name=’search_ }
str’> }
</tr> else
<tr> if ($search_lang == “2”)
<td>Search Language</td> {
<td><select name=’search_lang’> $res = sqlite3_query($db,
<option value=’1’>$lang1</option> “select lang2_ref from dictionary
<option value=’2’>$lang2</option> where lang2=’$search_str’”);
</select> $l = sqlite3_fetch_array($res);
</tr> $ref = $l[‘lang2_ref’];
“; if ($ref == “”)
{

www.infolinux.web.id INFOLINUX  06/2007 59


TUTORIAL KAMUS
server Anda untuk informasi selengkap-
nya.
User kemudian dapat menjalankan
script tersebut, dengan memberikan alamat
berikut di web browser:
http://<SERVER>/[<INFORMASI_
PATH_TAMBAHAN>]/nkamus-web.php
Contoh:
http://192.168.0.1/nkamus-web.php

Penjelasan source code:


 Apabila diperlukan, rujuklah ke bagian
pembahasan database di edisi sebelum-
nya.
 Perhatikanlah variabel $app_dbfile yang
berisi path ke file database kamus. Di
contoh ini, file database yang digunakan
adalah /tmp/en-id.db. Ubahlah sesuai
dengan konfigurasi Anda.
Nkamus web menerjemahkan kata.
 File database, kemudian kita buka deng-
$res = sqlite3_query($db, echo “$res2<br>”; an sqlite3_open(). Contoh:
“select lang1,lang1_ext from } $db = sqlite3_open($app_dbfile);
dictionary where lang2=’$search_  Selanjutnya, query bisa diberikan dengan
str’”); echo “ sqlite3_query(). Contoh:
$l = sqlite3_fetch_ </td> $res = sqlite3_query($db, “select
array($res); </tr> lang1_desc,lang2_desc from
$res1 = $l[‘lang1’]; “; info”);
$res2 = $l[‘lang1_ext’]; }  Untuk mendapatkan hasil query select
}; misalnya, kita bisa menggunakan
} sqlite3_fetch_array(). Contoh:
else $l = sqlite3_fetch_array($res);
{ echo “ $lang1 = $l[‘lang1_desc’];
$res = sqlite3_query($db, <tr> $lang2 = $l[‘lang2_desc’];
“select lang1,lang1_ext from <td>&nbsp;</td>  Untuk menutup database, kita meng-
dictionary where lang2=’$ref’”); <td> gunakan sqlite3_close(). Contoh:
$l = sqlite3_fetch_ <input type=’reset’ sqlite3_close ($db);
array($res); value=’reset’>&nbsp;  Kita akan selalu menampilkan form
$res1 = $l[‘lang1’]; <input type=’submit’ value=’transla HTML (dengan metode post, action ke
$res2 = $l[‘lang1_ext’]; te’>&nbsp; nkamus-web.php?action=translate).
} </td> Apabila kita mendapatkan $_POST
</tr> dan user memasukkan informasi
} </table? dengan benar, maka barulah kita
</form> mencari ke database. Logika program
if ($res1 == “”) </body> ini sama dengan contoh-contoh di
{ </html> edisi sebelumnya.
echo “No Result”; “;
} Dengan selesainya pembahasan nkamus-
else web.php ini, kita sudah memiliki cukup
{ sqlite3_close ($db); banyak interface yang bisa digunakan oleh
echo “$search_str:<br>”; berbagai kalangan user. Aplikasi kamus ini
if ($ref != “”) ?> masih terdapat kelemahan, baik di struktur
{ Kopikanlah script tersebut ke lokasi yang database ataupun front end. Silakan di-
echo “Ref: $ref<br>”; bisa diakses oleh user melalui web browser, kembangkan dan dibagi bersama, untuk
} misalnya di DocumentRoot web server. kemajuan bersama.
echo “$res1<br>”; Rujuklah kepada dokumentasi web Noprianto [noprianto@infolinux.co.id]

60 06/2007  INFOLINUX www.infolinux.web.id


TUTORIAL YAHOO! MESSENGER

Membangun Yahoo! Messenger


Sendiri

Y
ahoo! Messenger adalah salah satu instant messenging yang sangat terkenal di
Internet. Yahoo! IM sendiri tersedia untuk hampir semua platform, mulai Windows,
Mac, Unix/Linux, sampai perangkat handheld. Anda pun bisa membangun client
Yahoo! Messenger sendiri, baik untuk dijalankan standalone ataupun untuk di-embed
ke dalam aplikasi Anda.

Dengan meng-embed fasilitas Yahoo! Instant Yang tidak didukung adalah Voice mes- bz2
Messenging ke dalam aplikasi, Anda bisa sage dan Imvironment. $ cd libyahoo2-0.7.5
mengintegrasikan aplikasi yang Anda bangun Beberapa aplikasi IM yang memanfaat-  konfigurasi:
dengan fasilitas komunikasi dengan pengguna kan libyahoo2 adalah: ayttm, everybuddy, $ ./configure –prefix=/usr
Yahoo!. Selain itu, kalaupun Anda membang- Fire, KYIM, Yahoo pager, Qazoo, Freehoo,  kompilasi:
un untuk sekedar iseng, riset ataupun tujuan Miranda, dan Center ICQ. Libyahoo2 sen- $ make
lainnya, selalu menarik untuk menghadirkan diri merupakan turunan modul Yahoo dari  instalasi (sebagai root):
instant messenging client a la Anda sendiri. Gaim. # make install
Client Yahoo! Messenger akan kita bang- Untuk menggunakan libyahoo2, down-
un dengan pustaka libyahoo2, yang bisa di- load-lah terlebih dahulu pustaka tersebut Catatan Penting
download dari website-nya, http://libyahoo2. dari website-nya. Sampai tulisan ini dibuat, Pustaka ini mewajibkan kita untuk mengim-
sourceforge.net/. Sebagai pustaka untuk Ya- versi terbaru libyahoo2 adalah 0.7.5, yang plementasikan semua callback yang terdapat
hoo!, libyahoo2 datang cukup lengkap deng- dirilis pada 8 Agustus 2004. pada file yahoo2_callbacks.h di direktori src
an beberapa fitur berikut ini: Program yang akan kita bangun, nsim- relatif terhadap direktori arsip. Untungnya,
 Pengiriman pesan yang mendukung pleyahoo, adalah program IM yang sangat semua parameter dan penjelasan juga diser-
UTF8 dan typing notification. sederhana, yang memiliki fitur: takan di file tersebut. Fungsi-fungsi tersebut
 Penanganan buddy (add, remove, change  Dapat menampilkan daftar buddy. harus kita implementasikan, walaupun
group, ignore, unignore, reject, status up-  Dapat menerima pesan instan. tidak berisikan apa-apa. Apabila kita tidak
date, group rename, dan search).  dapat menampilkan notifikasi pengeti- melakukannya, kesalahan akan terjadi pada
 Mendukung Yahoo! Address Book. kan. saat linking.
 Pengubahan status.  Dapat mengirim pesan ke buddy. Dengan demikian, pada pembahasan
 Mendukung Conference (new conference,  Berjalan pada text terminal. source code, Anda akan melihat puluhan
join, invite member, decline join, leave con- fungsi yang tidak memiliki isi.
ference, dan send message). Sebagai catatan, nsimpleyahoo dibangun Catatan penting lainnya adalah kita akan
 Mendukung Yahoo! Chat (list chatroom, di atas sistem Zenwalk Linux 4.4.1, libya- menggunakan header-header berikut:
join/leave chatroom). hoo2 versi 0.7.5 dan GCC versi 3.4.6. yahoo2.h
 Mendukung webcam (melihat webcam yahoo2_callbacks.h
orang lain, broadcast gambar webcam). Instalasi
 File Transfer (send/receive melalui server Lakukanlah langkah-langkah berikut ini Source Code
file transfer Yahoo, ataupun menerima untuk instalasi libyahoo2: Pustaka ini datang dengan satu client,
file langsung dari client lainnya).  Ekstraksi arsip, dan masuk ke direktori di mana source codenya tersimpan pada
 Notifikasi e-mail. hasil ekstrak: file src/sample_client.c (membutuhkan
 Identity. $ tar jxvf libyahoo2-0.7.5.tar. yahoo_util.c dan yahoo_util.h), relatif ter-

www.infolinux.web.id INFOLINUX  06/2007 61


TUTORIAL YAHOO! MESSENGER
hadap direktori arsip. Namun, sample_cli- char *msg; id, char *who, int stat, char *msg,
ent.c tersebut sangat besar dan rumit. } yahoo_local_account; int away)
Penulis mengambil fungsi-fungsi utama {
(yang dibutuhkan untuk aplikasi kita) dari typedef struct yahoo_account * ya=NULL;
source code tersebut (pada kenyataannya, { YList * b;
fungsi-fungsi tersebut umumnya siap pak- char yahoo_id[255]; for(b = buddies; b; b = b->next)
ai; apabila diperlukan, kita bisa melakukan char name[255]; {
modifikasi). Karena source code tersebut int status; if(!strcmp(((yahoo_account *)b-
dilisensikan secara GPL, maka source code int away; >data)->yahoo_id, who))
yang dibahas di tulisan ini pun dilisensi- char *msg; {
kan GPL. Begitupun jika Anda membangun char group[255]; ya = b->data;
aplikasi berbasiskan source di tulisan ini, } yahoo_account; break;
ataupun dari sample_client.c. }
Berikut ini adalah source code nsim- static yahoo_local_account * ylad = }
pleyahoo.c: NULL; print_message((“%s (%s) [%d]”,
/* static YList * buddies = NULL; ya?ya->name:who, who, stat))
* nsimpleyahoo.c
* very simple yahoo client struct connect_callback_data }
* based on sample_client.c from {
libyahoo2 yahoo_connect_callback callback; void ext_yahoo_got_buddies(int id,
* stripped down version void * callback_data; YList * buds)
* plus some mods. int id; {
* nop, 2007, GPL. int tag; while(buddies)
* http://www.noprianto.com/code.php }; {
*/ FREE(buddies->data);
YList *connections = NULL; buddies = buddies->next;
#include <stdio.h> if(buddies) FREE(buddies->prev);
#include <stdlib.h> struct _conn }
#include <string.h> { for(; buds; buds = buds->next)
#include <time.h> int tag; {
#include <errno.h> int fd; yahoo_account *ya = y_new0(yahoo_
#include <netdb.h> int id; account, 1);
#include <sys/types.h> yahoo_input_condition cond; struct yahoo_buddy *bud = buds-
#include <sys/socket.h> void *data; >data;
#include <netinet/in.h> int remove; strncpy(ya->yahoo_id, bud->id,
#include <arpa/inet.h> }; 255);
#include <yahoo2.h> if(bud->real_name) strncpy(ya-
#include <yahoo2_callbacks.h> static int connection_tags=0; >name, bud->real_name, 255);
strncpy(ya->group, bud->group,
#define FREE(x) if(x) static char * get_buddy_name(char 255);
{free(x); x=NULL;} * yid) ya->status = YAHOO_STATUS_
#define y_new0(type, n) (type { OFFLINE;
*)calloc((n), sizeof(type)) YList * b; buddies = y_list_append(buddies,
#define print_message(x) { printf x; for (b = buddies; b; b = b->next) ya);
printf(“\n”); } { }
yahoo_account * ya = b->data; }
static char *local_host = NULL; if(!strcmp(yid, ya->yahoo_id))
return ya->name&&*ya->name?ya->name: void ext_yahoo_got_im(int id, char
typedef struct ya->yahoo_id; *who, char *msg, long tm, int stat,
{ } int utf8)
char yahoo_id[255]; {
char password[255]; return yid; char *umsg = msg;
int id; } if(stat == 2) return;
int fd; if(!msg) return;
int status; void ext_yahoo_status_changed(int who = get_buddy_name(who);

62 06/2007  INFOLINUX www.infolinux.web.id


TUTORIAL YAHOO! MESSENGER
if(tm) OFFLINE; if(fatal) yahoo_logout();
{ yahoo_login(ylad->id, login_mode); }
char timestr[255]; }
int ext_yahoo_add_handler(int id,
strncpy(timestr, ctime((time_t void ext_yahoo_login_response(int int fd, yahoo_input_condition cond,
*)&tm), sizeof(timestr)); id, int succ, char *url) void *data)
timestr[strlen(timestr) - 1] = { {
‘\0’; if (succ == YAHOO_LOGIN_OK) struct _conn *c = y_new0(struct
{ _conn, 1);
print_message((“[Offline message ylad->status = yahoo_current_ c->tag = ++connection_tags;
at %s from %s]: %s”, timestr, who, status(id); c->id = id;
umsg)) print_message((“Login OK.”)); c->fd = fd;
} return; c->cond = cond;
else } c->data = data;
{ else if(succ == YAHOO_LOGIN_
if(!strcmp(umsg, “<ding>”)) PASSWD) connections = y_list_
printf(“\a”); { prepend(connections, c);
print_message((“%s: %s”, who, print_message ((“Wrong
umsg)) password.”)); return c->tag;
} }
}
if(utf8) FREE(umsg); else if(succ == YAHOO_LOGIN_LOCK) void ext_yahoo_remove_handler(int
} { id, int tag)
print_message ((“Account locked. {
void ext_yahoo_typing_notify(int id, Please visit %s”, url)); YList *l;
char *who, int stat) } for(l = connections; l; l =
{ else if(succ == YAHOO_LOGIN_ y_list_next(l))
if(stat) print_message((“%s is DUPL) {
typing...”, who)); { struct _conn *c = l->data;
print_message ((“Duplicate if(c->tag == tag)
} login.”)); {
c->remove = 1;
void yahoo_logout() } return;
{ else if(succ == YAHOO_LOGIN_SOCK) }
if (ylad->id <= 0) return; { }
print_message ((“Server closed }
yahoo_logoff(ylad->id); the socket.”));
yahoo_close(ylad->id); static void connect_complete(void
} else *data, int source, yahoo_input_
ylad->status = YAHOO_STATUS_ { condition condition)
OFFLINE; print_message ((“General {
ylad->id = 0; error.”)); struct connect_callback_data *ccd
} = data;
print_message((“logged out”)); int error, err_size =
} ylad->status = YAHOO_STATUS_ sizeof(error);
OFFLINE;
void ext_yahoo_login(yahoo_local_ yahoo_logout(); ext_yahoo_remove_handler(0, ccd-
account * ylad, int login_mode) } >tag);
{ getsockopt(source, SOL_SOCKET,
void ext_yahoo_error(int id, char SO_ERROR, &error, (socklen_t *)&err_
ylad->id = yahoo_init_with_ *err, int fatal) size);
attributes(ylad->yahoo_id, ylad- {
>password, “local_host”, local_host, fprintf(stdout, “Yahoo Error: “); if(error)
“pager_port”, 23, NULL); fprintf(stdout, “%s”, err); {
ylad->status = YAHOO_STATUS_ fprintf(stdout, “\n”); close(source);

www.infolinux.web.id INFOLINUX  06/2007 63


TUTORIAL YAHOO! MESSENGER
source = -1; } char yaccount[255] = {0};
} char message[705] = {0};
if((servfd = socket(AF_INET, SOCK_ int i,j, index;
ccd->callback(source, error, ccd- STREAM, 0)) < 0) char c;
>callback_data); { i=0; c=0;
FREE(ccd); return -1; do
} } {
if(read(source, &c, 1) <= 0)
void yahoo_callback(struct _conn *c, memset(&serv_addr, 0, sizeof(serv_ c=’\0’;
yahoo_input_condition cond) addr)); if(c == ‘\r’) continue;
{ serv_addr.sin_family = AF_INET; if(c == ‘\n’) break;
int ret=1; memcpy(&serv_addr.sin_addr.s_addr, if(c == ‘\b’)
char buff[1024]={0}; *server->h_addr_list, server->h_ {
if(c->id < 0) length); if(!i)
{ serv_addr.sin_port = htons(port); continue;
connect_complete(c->data, c->fd, c = ‘\0’;
cond); error = connect(servfd, (struct i--;
} sockaddr *) &serv_addr, sizeof(serv_ }
else addr)); if(c)
{ {
if(cond & YAHOO_INPUT_READ) ret if(!error) line[i++] = c;
= yahoo_read_ready(c->id, c->fd, c- { line[i]=’\0’;
>data); callback(servfd, 0, data); }
if(ret>0 && cond & YAHOO_INPUT_ return 0; } while(i<1023 && c != ‘\n’);
WRITE) ret = yahoo_write_ready(c- } if(line[0])
>id, c->fd, c->data); else if(error == -1 && errno == {
EINPROGRESS) for (i=0; i<strlen (line); i++)
if(ret == -1) snprintf(buff, { {
sizeof(buff), “Yahoo read error ccd = calloc(1, sizeof(struct if (line[i] != ‘ ‘)
(%d): %s”, errno, strerror(errno)); connect_callback_data)); {
else ccd->callback = callback; cmd[i] = line[i];
if(ret == 0) snprintf(buff, ccd->callback_data = data; }
sizeof(buff), “Yahoo read error: ccd->id = id; else
Server closed socket”); {
ccd->tag = ext_yahoo_add_ index = i + 1;
if(buff[0]) print_ handler(-1, servfd, YAHOO_INPUT_ break;
message((buff)); WRITE, ccd); }
} return ccd->tag; }
} } cmd[i] = 0;
else for (i = index, j = 0; i <
int ext_yahoo_connect_async(int id, { strlen(line) ; i++, j++)
char *host, int port, yahoo_connect_ if(error == -1) {
callback callback, void *data) { data[j] = line[i];
{ }
struct sockaddr_in serv_addr; close(servfd); }
static struct hostent *server; return -1; data[j] = 0;
int servfd; }
struct connect_callback_data * } if (strcmp(cmd, “keepalive”) == 0)
ccd; {
int error; static void local_input_callback(int print_message ((“>> Sending keep
source) alive command”));
if(!(server = gethostbyname(host))) { yahoo_keepalive(ylad->id);
{ char line[1024] = {0}; }
errno=h_errno; char cmd[64] = {0}; else if (strcmp(cmd, “im”) == 0)
return -1; char data[960] = {0}; {

64 06/2007  INFOLINUX www.infolinux.web.id


TUTORIAL YAHOO! MESSENGER
for (i=0; i < strlen (data); ext_yahoo_login(ylad, YAHOO_ YList *tmp = connections;
i++) STATUS_AVAILABLE); struct _conn * c = connections-
{ >data;
if (data[i] != ‘ ‘) while(1) close(c->fd);
{ { FREE(c);
yaccount[i] = FD_ZERO(&inp); connections = y_list_remove_
data[i]; FD_ZERO(&outp); link(connections, connections);
} FD_SET(fd_stdin, &inp); y_list_free_1(tmp);
else tv.tv_sec=1; }
{ tv.tv_usec=0; yahoo_logout();
index = i + 1 ; lfd=0; FREE(ylad);
break; return 0;
} for(l=connections; l; ) }
} {
yaccount[i] = 0; struct _conn *c = l->data; int ext_yahoo_log(char *fmt,...)
if(c->remove) {
for (i = index, j=0; i < strlen { }
(data); i++, j++) YList *n = y_list_next(l); int ext_yahoo_connect(char *host,
{ connections = y_list_remove_ int port)
message[j] = data[i]; link(connections, l); {
} y_list_free_1(l); }
message[j] = 0; free(c); void ext_yahoo_got_cookies(int id)
l=n; {
print_message ((“Sending IM to } }
%s”, yaccount)); else void ext_yahoo_got_ignore(int id,
yahoo_send_im(ylad -> id, NULL, { YList * igns)
yaccount, message, 0); if(c->cond & YAHOO_INPUT_ {
} READ) FD_SET(c->fd, &inp); }
else if(c->cond & YAHOO_INPUT_ void ext_yahoo_rejected(int id, char
{ WRITE) FD_SET(c->fd, &outp); *who, char *msg)
print_message ((“Unknown if(lfd < c->fd) lfd = c->fd; {
command.”)); l = y_list_next(l); }
} } void ext_yahoo_contact_added(int id,
} } char *myid, char *who, char *msg)
} {
select(lfd + 1, &inp, &outp, }
int main(int argc, char * argv[]) NULL, &tv); void ext_yahoo_game_notify(int id,
{ char *who, int stat)
int status; if(FD_ISSET(fd_stdin, &inp)) {
int log_level; local_input_callback(0); }
int lfd=0; void ext_yahoo_mail_notify(int id,
fd_set inp, outp; for(l = connections; l; l = char *from, char *subj, int cnt)
struct timeval tv; y_list_next(l)) {
int fd_stdin = fileno(stdin); { }
YList *l=connections; struct _conn *c = l->data; void ext_yahoo_got_webcam_image(int
if(c->remove) continue; id, const char *who, const unsigned
ylad = y_new0(yahoo_local_account, if(FD_ISSET(c->fd, &inp)) yahoo_ char *image, unsigned int image_
1); callback(c, YAHOO_INPUT_READ); size, unsigned int real_size,
if(FD_ISSET(c->fd, &outp)) unsigned int timestamp)
printf(“Yahoo Id: “); yahoo_callback(c, YAHOO_INPUT_ {
scanf(“%s”, ylad->yahoo_id); WRITE); }
printf(“Password: “); } void ext_yahoo_webcam_viewer(int id,
scanf(“%s”, ylad->password); } char *who, int connect)
printf(“\n”); while(connections) {
{ }

www.infolinux.web.id INFOLINUX  06/2007 65


TUTORIAL YAHOO! MESSENGER
void ext_yahoo_webcam_closed(int id, char *who, char *room) tik pesan untuk kita, sebuah notifikasi akan
char *who, int reason) { ditampilkan, dan apabila ada pesan masuk,
{ } akan ditampilkan juga langsung.
} void ext_yahoo_conf_userleave(int Untuk mengetikkan pesan, berikanlah
void ext_yahoo_webcam_data_ id, char *who, char *room) format perintah berikut ini:
request(int id, int send) { im<spasi><yahoo_id_
{ } tujuan><spasi><pesan>
} void ext_yahoo_conf_message(int id, Agar sesi yahoo! kita dianggap tetap
void ext_yahoo_webcam_invite(int id, char *who, char *room, char *msg, aktif, berikanlah perintah berikut ini setiap
char *from) int utf8) beberapa saat tidak ada aktivitas:
{ { keepalive
} } Perintah-perintah tersebut adalah kreasi
void ext_yahoo_webcam_invite_ void ext_yahoo_chat_cat_xml(int id, penulis sendiri. Kreasikan sendiri pula
reply(int id, char *from, int char *xml) perintah yang ingin Anda gunakan.
accept) {
{ } Informasi Selanjutnya
} void ext_yahoo_chat_join(int id,  Kita mengimplementasikan semua call-
void ext_yahoo_system_message(int char *room, char * topic, YList back, dan ketika suatu event terjadi, call-
id, char *msg) *members, int fd) back yang bersesuaian yang dijalankan.
{ { Rujuklah selalu ke file src/yahoo2_call-
} } backs.h untuk informasi selengkapnya.
void ext_yahoo_got_file(int id, char void ext_yahoo_chat_userjoin(int id, Semua dijelaskan dengan cukup baik di
*who, char *url, long expires, char char *room, struct yahoo_chat_member file tersebut.
*msg, char *fname, unsigned long *who)  Bacalah file README yang disertakan
fesize) { untuk alur kerja, dan fungsi-fungsi yang
{ } bisa digunakan.
} void ext_yahoo_chat_userleave(int  Sekali lagi, bacalah kedua file tersebut
void ext_yahoo_got_identities(int id, char *room, char *who) dengan sangat teliti. Penulis menghabis-
id, YList * ids) { kan waktu cukup lama untuk debug, hanya
{ } karena tidak membaca dengan teliti.
} void ext_yahoo_chat_message(int id,  Ketika login selesai dilakukan, callback
void ext_yahoo_chat_yahoologout(int char *who, char *room, char *msg, ext_yahoo_login_response akan dijalan-
id) int msgtype, int utf8) kan. Pada saat itu, daftar buddy belum
{ { tersedia. Kita harus menunggu ext_ya-
} } hoo_got_buddies dan ext_yahoo_got_
void ext_yahoo_chat_yahooerror(int Lakukanlah kompilasi dengan perintah cookies.
id) berikut:  Untuk notifikasi pengetikkan, callback
{ $ gcc -o nsimpleyahoo nsimpleyahoo. ext_yahoo_typing_notify akan dijalan-
} -lyahoo2 kan, ketika event terjadi.
void ext_yahoo_got_search_result(int Setelah itu, jalankanlah program kita  Ketika kita menerima IM, callback ext_
id, int found, int start, int total, dengan perintah berikut: yahoo_got_im akan dijalankan.
YList *contacts) $ ./nsimpleyahoo  Untuk mengirim pesan, kita menggunak-
{ Yahoo Id: an fungsi yahoo_send_im.
} Sebagai catatan, pada saat memasukkan  Untuk memberitahu server bahwa kita
void ext_yahoo_got_conf_invite(int password, apa yang diketikkan akan terlihat. masih aktif, gunakan fungsi yahoo_kee-
id, char *who, char *room, char Lihatlah sample_client.c untuk menjadikan- palive. Pada aplikasi sesungguhnya, ini
*msg, YList *members) nya tidak terlihat. seharusnya dilakukan otomatis.
{  Untuk pengembangan lebih lanjut,
} Ketika login sukses dilakukan, semua bacalah file src/sample_client.c
void ext_yahoo_conf_userdecline(int buddy aktif akan ditampilkan, lengkap
id, char *who, char *room, char dengan kode yang ditulis di dalam kurung Sampai di sini, Anda sudah memiliki
*msg) siku. Kode 0 berarti available. Untuk kode Yahoo!Messenger Anda sendiri. Menarik
{ selengkapnya, lihatlah pada file src/ya- bukan? Silakan kembangkan lebih lanjut,
} hoo2_types.h. sesuai keinginan Anda!
void ext_yahoo_conf_userjoin(int id, Apabila ada buddy yang sedang menge- Noprianto [noprianto@infolinux.co.id

66 06/2007  INFOLINUX www.infolinux.web.id


IKLAN
TUTORIAL LINUX LIVE SCRIPT

Membuat Linux LiveCD dengan


Linux Live Script

T
utorial singkat ini akan membahas bagaimana menjadikan sistem Linux yang Anda
gunakan menjadi Linux Live, yang dapat berjalan langsung dari CD. Dengan demikian,
Anda dapat membawa sistem Linux Live Anda ke manapun. Tentu saja, ini berarti Anda
dapat bekerja atau menikmati komputer dengan Linux, di manapun Anda berada.

Seperti kita ketahui bersama, Linux mendu- di komputer Anda, yang telah berisikan 2. Dukungan aufs dan squashfs
kung sistem live CD, sehingga dapat dijalan- sejumlah aplikasi pilihan Anda? Tentulah (opsional squashfs-lzma)
kan langsung dari CD, tanpa harus diinstal akan sangat menarik. Selain itu, kalau Anda Linux LiveCD yang kita bangun adalah
terlebih dahulu ke harddisk. Kemampuan ini menggunakan aplikasi yang tidak lazim Linux Live yang modern, yang melibat-
sangatlah membantu, di antaranya untuk ditemukan di berbagai Linux LiveCD, Anda kan penggunaan aufs (Another Union File
mempromosikan Linux kepada masyarakat tetap bisa bekerja tanpa harus kerepotan System), dan Squashfs (opsional squashfs
luas yang sudah mendengar tentang Linux, melakukan instalasi aplikasi tersebut, setiap dengan dukungan kompresi LZMA).
namun belum berani/memiliki kesempa- kali Anda berpindah komputer.
tan untuk menginstal Linux di komputer Untungnya, pembuatan Linux LiveCD Menggunakan Precompiled Kernel
mereka masing-masing. berdasarkan sistem Anda tidaklah rumit un- Bagi Anda yang menggunakan distro slack-
Beberapa waktu yang lalu, salah satu tuk dilakukan. Tutorial ini akan membahas ware atau turunannya, Anda bisa mem-
distribusi Linux LiveCD yang sangat populer langkah-langkah untuk membuat Linux pergunakan kernel yang dibangun oleh
adalah Knoppix. Sampai-sampai, banyak LiveCD Anda sendiri. developer Linux Live Script, yang sudah
sekali distribusi Linux Live yang dikem- mendukung kedua filesystem tersebut.
bangkan dari Knoppix. Setelah puas dengan 1. Siapkan Sistem Anda Download-lah di: ftp://ftp.slax.org/Linux-
CD, Knoppix pun dapat pula dijalankan dari Langkah pertama adalah langkah yang Live/kernels/2.6.20/linux-2.6.20-i486-1.tgz.
DVD. Versi CD sendiri, walaupun hanya paling penting. Installah distribusi Linux Pengguna slackware dan turunannya bisa
mampu menampung 650 MB, isinya telah favorit Anda ke harddisk. Aturlah agar Anda melakukan instalasi dengan installpkg.
dikompres terlebih dahulu, sehingga isi hanya memasukkan program-program yang # installpkg linux-2.6.20-i486-1.tgz
sesungguhnya bisa sampai sekitar 2 GB. paling penting saja, sehingga berukuran
Dengan DVD berukuran 4 GB, Knoppix maksimal lebih kurang 2 GB. Tidak Menggunakan Precompiled Kernel
memiliki hampir semua aplikasi populer Anda bebas untuk menginstal distri- Bagi Anda yang tidak ingin menggunakan
Linux/open source yang terinstal di DVD, busi Linux apapun, hanya disarankan un- precompiled kernel, Anda dapat memilih
dan siap digunakan. tuk menggunakan distribusi Linux dengan untuk melakukan kompilasi sendiri modul
Seperti disebutkan sebelum, dengan kernel 2.6 (sangat umum ditemukan pada kernel untuk aufs dan squashfs (opsional
membawa Linux LiveCD, Anda bisa bekerja distribusi Linux yang dirilis lebih kurang squashfs-lzma). Pastikan Anda memiliki
di manapun, selama komputer tersebut mulai tahun 2004). Developer Linux Live kernel source terkonfigurasi, dan semua tool
memiliki CD-ROM drive, dan memiliki spe- Script merekomendasikan Slackware, yang dibutuhkan untuk kompilasi. Pastikan
sifikasi yang cukup tinggi untuk menjalan- namun tentu saja distribusi ini bukanlah Anda menggunakan kernel 2.6.20, atau
kan Linux Live CD yang Anda bawa. persyaratan. Penulis menggunakan sistem yang lebih baru untuk patch sqlzma.
Sekarang, bagaimana kalau Linux Live Linux Zenwalk 4.4.1.  instruksi untuk instalasi aufs bisa di-
yang Anda bawa bukanlah Knoppix, atau Instalasi distribusi Linux berada di dapatkan di http://aufs.sourceforge.net/.
Puppy Linux, atau distribusi-distribusi lain- luar cakupan tulisan ini. Rujuklah kepada  squashfs bisa didapatkan di http://
nya? Bagaimana kalau Linux Live yang Anda dokumentasi distribusi Linux yang Anda squashfs.sourceforge.net/. Bacalah file
bawa adalah sistem Linux yang terinstal gunakan. INSTALL yang terdapat dalam arsip.

68 06/2007  INFOLINUX www.infolinux.web.id


TUTORIAL LINUX LIVE SCRIPT
tulisan ini adalah /tmp/live_data_1799).
Linux Live scripts were installed
successfuly in /
Enter path for the kernel you’d
like to use [hit enter for /boot/
vmlinuz]:
...
...

5. Membangun ISO
Masukanlah ke direktori temporary yang
sudah Anda lihat, dan ingat pada langkah
sebelumnya (contoh di dalam tulisan ini
adalah /tmp/live_data_1799).
# cd /tmp/live_data_1799/
# cd mylinux/
# ./make_iso.sh
Target ISO file name [ Hit enter for
../../mylinux.iso ]:
Situs web Linux Live Script.
Masukkanlah path ke file ISO yang Anda
 Squashfs-lzma bisa didapatkan di http:// 4. Pembuatan Sistem Linux LiveCD inginkan (tulisan ini akan menggunakan
www.squashfs-lzma.org/. Bacalah juga file Sistem Linux LiveCD siap untuk diban- path default), dan tunggulah proses pem-
http://www.squashfs-lzma.org/dl/sqlzma. gun. Login-lah sebagai root, dan berikanlah buatan ISO berlangsung.
txt. perintah berikut ini: Setelah file ISO selesai dibangun, Anda
# cd /tmp/ bisa membakarnya ke CD dengan cdrecord/
Sampai di sini, pastikan kernel Anda su- # ./build wodim. Rujuklah ke dokumentasi cdrecord/
dah mendukung semua yang dibutuhkan: wodim untuk informasi selanjutnya.
 Dikompilasi ke kernel (built in). Changing current directory to /tmp Setelah CD selesai dibakar, Anda pun
 ext2 (CONFIG_EXT2_FS=y). Name of your live distro [hit enter kini memiliki Linux LiveCD milik Anda
 tmpfs (CONFIG_TMPFS=y) . for mylinux]: sendiri. Anda bisa mempromosikannya
 ramdisk (CONFIG_BLK_DEV_ Isikanlah dengan nama live distro yang kepada rekan Anda yang lain, sambil mem-
RAM=y). Anda inginkan, dan tunggulah proses beri- bawanya ke mana-mana (berjaga-jaga, apa-
 initrd (CONFIG_BLK_DEV_ kutnya sampai selesai. Tulisan ini akan bila sewaktu-waktu diperlukan). Selamat
INITRD=y). menggunakan nama default. Catatlah direk- mencoba!
 Dikompilasi ke kernel atau dijadikan tori temporary pembuatan (contoh di dalam Noprianto [noprianto@infolinux.co.id]
modul kernel.
 loop.
 isofs.
 Modul Aufs dan Squashfs.
 aufs.
 squashfs (sqlzma dan unlzma).

3. Download dan Instal Linux Live


Script
Linux Live Script bisa di-download di ftp://
ftp.slax.org/Linux-Live/linux-live-6.0.7.tar.
gz . Setelah itu, ekstraklah ke /tmp dengan
perintah:
$ tar zxvf linux-live-6.0.7.tar.gz
$ mv linux-live-6.0.7/.config /tmp/
$ mv linux-live-6.0.7/* /tmp/
$ rmdir linux-live-6.0.7
Sebagai catatan, Linux Live Script di-
bangun oleh Tomas Matejicek, yang juga
merupakan developer SLAX. Situs web SLAX

www.infolinux.web.id INFOLINUX  06/2007 69


TUTORIAL VMWARE SERVER

Virtualisasi Komputer
Menggunakan VMware Server

A
plikasi virtualisasi sedang menjadi tren yang banyak dibahas saat ini. Pada platform
Linux, sudah terdapat beberapa aplikasi virtualisasi yang free dan sangat powerful.
Salah satunya adalah VMware Server, versi free dari VMware yang dapat digunakan
untuk membuat virtual PC.

Salah satu tren aplikasi yang sedang ramai Persiapan instal virtual machine kita nantinya. Le-
dibicarakan akhir-akhir ini adalah aplikasi vir- Sebelum menggunakan VMware Server, ada tak direktori ini juga dapat Anda ubah,
tualisasi. Konon kabarnya, kerja sama yang di- beberapa persiapan yang harus dilakukan: sesuai dengan keinginan Anda. Hanya
lakukan antara Microsoft dengan Novell salah 1. Instalasi Linux. saja yang perlu diingat, virtual machine
satunya adalah untuk meningkatkan kemam- Tutorial ini dibuat dengan menggunakan membutuhkan kapasitas harddisk yang
puan aplikasi virtualisasi di antara produk distro Debian 4.0 sebagai bahan uji coba- lumayan besar. Untuk itu, pastikan bahwa
Microsoft dan Novell. nya. Namun dengan sedikit penyesuaian, partisi folder yang akan digunakan, masih
Kabar terbaru mengenai virtualisasi juga tutorial ini dapat juga dijalankan pada memiliki kapasitas yang mencukupi.
datang dari Red Hat. Keterlambatan rilis ter- versi distro yang lain tanpa mengalami 4. Login sebagai root, kemudian jalankan script
baru Red Hat 5.0, yang menyebabkan versi ini masalah. installer vmware-install.pl yang terdapat
baru dirilis pada bulan Maret 2007 yang lalu, 2. Paket VMware Server. dalam direktori /tmp/vmware-server-dis-
juga dikarenakan pihak Red Hat ingin mening- Paket VMware Server dapat Anda download trib hasil extract file Vmware-server-1.0.2-
katkan fitur dan integrasi aplikasi virtualisasi langsung dari situs http://www.vmware. 39867.tar.gz.
dengan menggunakan aplikasi Xen. com/download/server. Paket ini juga dapat $ su -
Banyak hal yang dapat Anda lakukan ditemukan dalam bonus DVD InfoLINUX # cd /tmp/vmware-server-distrib
dengan menggunakan aplikasi virtualisasi. edisi ini. Pada saat instalasi, VMware Serv- # ./vmware-install.pl
Beberapa keuntungan menggunakan aplikasi er akan menanyakan serial number instalasi
virtualisasi diantaranya: software ini. Untuk mendapatkan serial Berikutnya proses instalasi akan menanya-
 Mempermudah pembuatan software dan number ini, Anda dapat memperolehnya kan beberapa pertanyaan. Untuk mudahnya,
development testing. secara free, dengan cara melakukan regis- ikuti saja dengan jawaban default yang sudah
 Menghemat biaya pembelian hardware. trasi langsung pada halaman situsnya. terdapat pada proses instalasi.
 Testing dan disaster recovery server. Creating a new installer database
Instalasi VMware Server using the tar3 format.
Pada platform Linux, sudah terdapat Beikut ini proses instalasi VMware Server di
beberapa aplikasi virtualiasasi yang bersifat Debian 4.0: Installing the content of the
free dan powerful. Mulai dari User Mode 1. Copy semua file DVD InfoLINUX yang ter- package.
Linux (UML), Xen, Qemu, VMware, dan dapat pada folder “rubrik/tutorial/vmwa-
Virtual Box. Khusus untuk VMware, saat ini reserver”, ke direktori /tmp. In which directory do you want to
sudah terdapat VMware Server yang dapat 2. Unpack file VMware-server-1.0.2-39867. install the binary files?
kita gunakan secara free. Fitur yang ter- tar.gz yang terdapat pada folder /tmp. [/usr/bin] <-- /usr/bin
dapat pada VMware Server, hampir serupa $ cd /tmp
dengan VMware Workstation. Bahkan hasil $ tar xzvf Vmware-server-1.0.2- What is the directory that contains
pembuatan virtual machine yang tercipta dari 39867.tar.gz the init directories (rc0.d/ to rc6.
VMware Server, dapat juga dijalankan oleh 3. Buat sebuah direktori bernama /var/vm d/)?
produk VMware yang lainnya. yang akan kita gunakan untuk meng- [/etc] <-- /etc

70 06/2007  INFOLINUX www.infolinux.web.id


TUTORIAL VMWARE SERVER

Proses Instalasi VMware Server. Proses extract dan instalasi VMware Management Interface.

1.0.2 build-39867 for Linux icons


What is the directory that contains completed
the init scripts? successfully. You can decide to The path “/usr/share/icons” does not
[/etc/init.d] <-- /etc/init.d remove this software from your exist currently. This program is
system at any going to
In which directory do you want to time by invoking the following create it, including needed parent
install the daemon files? command: “/usr/bin/vmware-uninstall. directories. Is this what you want?
[/usr/sbin] <-- /usr/sbin pl”. [yes] <-- yes

In which directory do you want to Before running VMware Server for What directory contains your desktop
install the library files? the first time, you need to configure menu entry files? These files have a
[/usr/lib/vmware] <-- /usr/lib/ it by .desktop file extension. [/usr/
vmware invoking the following command: share/applications] <-- /usr/share/
“/usr/bin/vmware-config.pl”. Do you applications
The path “/usr/lib/vmware” does not want this
exist currently. This program is program to invoke the command for In which directory do you want to
going to you now? [yes] <-- yes install the application’s icon?
create it, including needed parent [/usr/share/pixmaps] <-- /usr/share/
directories. Is this what you want? Making sure services for VMware pixmaps
[yes] <-- yes Server are stopped.
Trying to find a suitable vmmon
In which directory do you want to Stopping VMware services: module for your running kernel.
install the manual files? Virtual machine monitor done
[/usr/share/man] <-- /usr/share/man None of the pre-built vmmon modules
You must read and accept the End for VMware Server is suitable for
In which directory do you want to User License Agreement to continue. your
install the documentation files? Press enter to display it. <-- running kernel. Do you want this
[/usr/share/doc/vmware] <-- /usr/ [ENTER] program to try to build the vmmon
share/doc/vmware module for
..... snip [LICENCE TEXT] ...... your system (you need to have a C
The path “/usr/share/doc/vmware” compiler installed on your system)?
does not exist currently. This Do you accept? (yes/no) <-- yes [yes] <-- yes
program is
going to create it, including needed Configuring fallback GTK+ 2.4 Using compiler “/usr/bin/gcc”. Use
parent directories. Is this what you libraries. environment variable CC to override.
want?
[yes] <-- yes In which directory do you want to What is the location of the
install the mime type icons? directory of C header files that
The installation of VMware Server [/usr/share/icons] <-- /usr/share/ match your running

www.infolinux.web.id INFOLINUX  06/2007 71


TUTORIAL VMWARE SERVER
kernel? [/lib/modules/2.6.18-
4-486/build/include]<-- /lib/
modules/2.6.8-2-386/build/include

[...]

Do you want networking for your


virtual machines? (yes/no/help)
[yes] <-- yes

Configuring a bridged network for


vmnet0.

The following bridged networks have


been defined:

. vmnet0 is bridged to eth0

Do you wish to configure another


Halaman login VMware Management Interface.
bridged network? (yes/no) [no] <-
- no vmnet1. API.

Do you want to be able to use NAT Do you want this program to probe Using compiler “/usr/bin/gcc”. Use
networking in your virtual machines? for an unused private subnet? (yes/ environment variable CC to override.
(yes/no) no/help)
[yes] <-- yes [yes] <-- yes Installing the VMware VmPerl
Scripting API.
Configuring a NAT network for vmnet8. Probing for an unused private subnet
(this can take some time)... The installation of the VMware
Do you want this program to probe VmPerl Scripting API succeeded.
for an unused private subnet? (yes/ The subnet 192.168.35.0/255.255.255.
no/help) 0 appears to be unused. Generating SSL Server Certificate
[yes] <-- yes
The following host-only networks In which directory do you want to
Probing for an unused private subnet have been defined: keep your virtual machine files?
(this can take some time)... [/var/lib/vmware/Virtual Machines]
. vmnet1 is a host-only network on <-- /var/vm
The subnet 172.16.232.0/255.255.255. private subnet 192.168.35.0.
0 appears to be unused. Please enter your 20-character
Do you wish to configure another serial number.
The following NAT networks have been host-only network? (yes/no) [no]
defined: <-- no Type XXXXX-XXXXX-XXXXX-XXXXX or
‘Enter’ to cancel: <-- your VMware
. vmnet8 is a NAT network on private [...] Server serial number
subnet 172.16.232.0.
Please specify a port for remote Starting VMware services:
Do you wish to configure another NAT console connections to use [902] Virtual machine monitor done
network? (yes/no) [no] <-- no <-- 902 Virtual ethernet done
Bridged networking on /dev/vmnet0
Do you want to be able to use host- Restarting internet superserver: done
only networking in your virtual inetd. Host-only networking on /dev/vmnet1
machines? Configuring the VMware VmPerl (background) done
[yes] <-- yes Scripting API. Host-only networking on /dev/vmnet8
(background) done
Configuring a host-only network for Building the VMware VmPerl Scripting NAT service on /dev/vmnet8 done

72 06/2007  INFOLINUX www.infolinux.web.id


TUTORIAL VMWARE SERVER
Ware Management Interface. Prosesnya Installing the content of the
The configuration of VMware Server kurang lebih sama dengan proses instalasi package.
1.0.2 build-39867 for Linux for this VMware-server. Anda hanya perlu menekan
running Enter untuk mengikuti jawaban default dari In which directory do you want to
kernel completed successfully. pertanyaan yang diberikan selama tahapan install the binary files?
instalasi. [/usr/bin] <-- /usr/bin
Setelah tahapan instalasi di atas dapat ber- 1. Unpack file VMware-mui-1.0.2-39867.tar.
jalan tanpa masalah, berarti paket VMware gz yang terdapat pada folder /tmp. What is the directory that contains
Server sudah dapat terinstalasi dengan baik. cd /tmp the init directories (rc0.d/ to rc6.
Sekarang kita berlanjut ke tahap selanjutnya. $ tar xzvf Vmware-mui-1.0.2-39867. d/)?
tar.gz [/etc] <-- /etc
Instalasi VMware Management 2. Login sebagai root, kemudian lakukan
Interface proses instalasi. What is the directory that contains
VMWare Management Interface merupakan $ su - the init scripts?
tool manajemen berbasis web yang dapat kita # cd /tmp/vmware-mui-distrib [/etc/init.d] <-- /etc/init.d
gunakan untuk beberapa hal berikut: # ./vmware-install.pl
 Memonitor status virtual machine dan In which directory do you want
VMware Server host yang sedang berjalan. Berikutnya proses instalasi akan menanya- to install the VMware Management
 Melakukan proses kontrol (power on, sus- kan beberapa pertanyaan. Untuk mudahnya, Interface
pend, resume, reset, dan power off) virtual ikuti saja dengan jawaban default yang sudah files? [/usr/lib/vmware-mui] <-- /
machine di suatu host. terdapat pada proses instalasi. usr/lib/vmware-mui
 Menampilkan detail proses setiap virtual Creating a new installer database
machine, termasuk laporan sistem, in- using the tar3 format. The path “/usr/lib/vmware-mui” does
formasi hardware, user yang sedang ter- not exist currently. This program
koneksi, dan file log dari proses yang ter- You must read and accept the End is going
jadi. User License Agreement to continue. to create it, including needed
Press enter to display it. <-- parent directories. Is this what you
Satu hal yang perlu dicatat, VMWare [ENTER] want?
Management Interface tidak dapat digunakan [yes] <-- yes
untuk menciptakan Virtual PC. Untuk ... license text ...
melakukan hal ini, Anda dapat menggunakan In which directory would you like to
VMware console di PC client, yang installer-nya Do you accept? (yes/no) <-- yes install the documentation files?
tersedia, baik pada platform Linux maupun [/usr/lib/vmware-mui/doc] <-- /usr/
Windows. Thank you. lib/vmware-mui/doc
Sekarang kita akan menginstalasi VM-
The path “/usr/lib/vmware-mui/doc”
does not exist currently. This
program is
going to create it, including needed
parent directories. Is this what you
want?
[yes] <-- yes

The installation of VMware


Management Interface 1.0.1 build-
29996 for Linux
completed successfully. You can
decide to remove this software from
your system
at any time by invoking the
following command:
“/usr/bin/vmware-uninstall-mui.pl”.

Before running VMware Management


Status sistem operasi dalam VMware Management Interface. Interface for the first time, you

www.infolinux.web.id INFOLINUX  06/2007 73


TUTORIAL VMWARE SERVER

Memasukkan alamat IP komputer host yang menjalankan VMwareServer. Guest OS Debian Linux yang berjalan dalam Host OS Debian Linux.

need to ment Interface, maupun VMware Server machine. Klik menu File -> New -> Virtual
configure it by invoking the Console. Machine. Berikutnya akan terdapat sejumlah
following command: Berikut langkah untuk menginstalasi wizard yang akan menanyakan beberapa per-
“/usr/bin/vmware-config-mui.pl”. Do aplikasi VMware Server Console. tanyaan berikut:
you want this program to invoke the 1. Unpack file VMware-server-linux-client-  Sistem Operasi (Linux, Windows, Novell
command 1.0.2-39867.zip yang terdapat pada folder Netware, Solaris or other operating sys-
for you now? [yes] <-- yes /tmp. tem).
.................................. $ cd /tmp  Versi sistem operasi yang ingin diinstal.
.................................. $ unzip Vmware-server-linux-  Lokasi dan nama virtual machine. Letakkan
.................................. client-1.0.2-39867.zip pada direktori /var/vm atau folder lainnya
$ tar xzvf Vmware-server-console- yang Anda gunakan untuk meletakkan file
This interface shows status 1.0.2-39867.tar.gz virtual machine.
information of the installed VM 2. Login sebagai root, kemudian lakukan  Networking. Pilih bridge, jika Anda ingin
instances and you are able to start proses instalasi menggunakan network yang sama dengan
and stop VM instances: $ su - server yang menjalankan VMware server.
# cd /tmp/vmware-server-console- Jika ingin menggunakan virtual NAT, pilih
Setelah paket VMWare Management In- distrib Network address translation.
terface terinstalasi dengan baik, Anda dapat # ./vmware-install.pl  Menentukan besar kapasitas harddisk.
segera mengakses halaman VMWare Manage- Disarankan untuk meng-uncheck pilihan
ment Interface dengan menggunakan web Seperti proses instalasi aplikasi sebelum- Allocate all disk space now, untuk lebih
browser. Caranya adalah dengan mengetik- nya, cukup ikuti saja jawaban wizard yang menghemat ruang harddisk komputer
kan alamat https://<alamat-ip-pc>:8333, pada diberikan sampai proses instalasi selesai. host yang menjalankan.
kotak halaman url web browser. Setelah Berikutnya, Anda dapat menemukan  Setelah menyelesaikan semua wizard
tampil ke halaman login VMWare Manage- icon VMware Server Console yang sudah pembuatan virtual machine, selanjutnya
ment Interface, isikan dengan username root terinstalasi pada menu Applications -> Sys- Anda dapat langsung menginstalasi sistem
dan password root pada sisten Linux Anda. tem Tools -> VMware Server Console. Klik operasi yang diinginkan dengan memasuk-
Hasilnya dapat terlihat kurang lebih seperti dan jalankan aplikasi tersebut, sampai me- kan CD/DVD drive di server, dan langsung
pada Gambar 3. nampilkan halaman login VMware Server mengklik tombol Power On untuk mulai
Console. menjalankan Virtual Machine.
Instalasi VMware Server Console Jika Anda menjalankan aplikasi VMware
Aplikasi terakhir yang harus kita instalasi Server Console pada PC yang sama, cukup Demikian penjelasan mengenai VMware
untuk dapat membuat virtual machine adalah pilih Localhost. Namun jika menjalankan ap- Server kali ini. Dengan menggunakan solusi
VMware Server Console. Aplikasi ini sendiri likasi VMware Server Console pada PC yang aplikasi virtualisasi di Linux, diharapkan
dapat kita instalasikan pada PC yang men- berbeda, pilih Remote host, kemudian isikan Anda dapat makin produktif, karena dapat
jalankan VMware Server, maupun pada PC parameter Remote host yang sesuai. menciptakan banyak sistem hanya dengan
lainnya. Dalam latihan ini, InfoLINUX hanya Setelah masuk ke halaman utama VMware menggunakan sebuah PC. Akhir kata, selamat
menggunakan satu PC saja baik untuk men- Server Console, Anda dapat memulai proses mencoba dan tetap semangat!
jalankan VMware Server, VMware Manage- instalasi berbagai sistem operasi dalam virtual Supriyanto [supriyanto@infolinux.co.id]

74 06/2007  INFOLINUX www.infolinux.web.id


TUTORIAL UBUNTU FEISTY

Tip dan Trik


Ubuntu 7.04 (Feisty Fawn)

U
buntu baru saja merilis versi terbarunya, yakni Ubuntu 7.04 yang memiliki code name
“feisty fawn”. Namun sejumlah paket seperti codec multimedia dan beberapa paket
multimedia tidak disertakan secara default. Untuk mengatasi masalah tersebut, pada
tutorial kali ini akan dibahas sejumlah Tip dan Trik Ubuntu Feisty.

Ada yang spesial pada bonus DVD Info- DVD Ubuntu Feisty. Jika memiliki ruang Berikutnya, Anda dapat memasukan daf-
LINUX edisi 06/2007 ini. Pada edisi ini, harddisk yang cukup berlebih, silakan buat, tar repositori lokal yang baru saja dibuat
kami menyertakan bonus DVD tambahan dan gunakan repositori local yang terdapat ke dalam file /etc/apt/source.list. Caranya,
yang berisi distro Ubuntu Feisty dan tu- pada harddisk PC. rename terlebih dahulu file /etc/apt/source.
runannya, seperti Kubuntu dan Edubuntu, list menjadi nama lain (misal: /etc/apt/
pada InfoLINUX edisi regular. Dalam Membuat Repositori Lokal Ubuntu sources.list.bak), dan buat kembali file /etc/
Ubuntu Feisty ini, Anda dapat menemukan Dalam DVD ini sudah terdapat beberapa apt/source.list.
sejumlah paket aplikasi, yang sering digu- paket extras multimedia Ubuntu Feisty $ sudo mv /etc/apt/sources.list
nakan untuk kebutuhan sehari-hari. yang kami sertakan. Jika Anda berniat /etc/apt/sources.list.bak
Meski default aplikasi dalam paket dis- untuk mengopinya ke sistem Ubuntu Anda, $ sudo touch /etc/apt/sources.list
tronya sudah mencukupi untuk kebutuhan buat sebuah repositori lokal di harddisk Tambahkan repositori lokal yang sudah
kerja, bagi pengguna komputer kebanyakan untuk digunakan secara pribadi maupun dibuat dengan menambahkan baris berikut
tentu saja masih terasa ada yang kurang. Be- oleh user lainnya di dalam jaringan. Lang- di file /etc/apt/sources.list.
berapa paket seperti codec multimedia, audio kah pertama, cari dan instal terlebih dahulu deb file:/home/supriyanto ubuntu_
dan video player, dvd ripping, nvidia driver, paket paket dpkg-dev_1.13.24ubuntu6_all. feisty/
chm viewer, dan sebagainya, belum diser- deb yang terdapat pada DVD InfoLINUX Save dan simpan hasil editan di atas.
takan secara default pada distro ini. Selain edisi ini. Jalankan proses instalasi dpkg- Berikutnya, jalankan perintah apt-get check
berkaitan dengan jumlah ruang iso CD, juga dev dari Terminal, dengan menggunakan update untuk melakukan indeks paket-
dikarenakan kebijakan pihak Ubuntu yang perintah berikut: paket yang terdapat pada repositori lokal
tidak akan menyertakan paket-paket restric- $ sudo dpkg -i dpkg-dev_ tersebut.
tion secara langsung dalam distribusinya. 1.13.24ubuntu6_all.deb $ sudo apt-get update
Pada tutorial kali ini, InfoLINUX akan Sebagai uji coba, buat sebuah folder ber-
membahas proses instalasi sejumlah paket nama ubuntu_feisty pada home direktori Instalasi NVIDIA driver
restriction yang sering digunakan sehari- Anda, kemudian buat index paket dengan Driver NVIDIA generic bawaan dari X.Org
hari, untuk menambah kenyamanan Anda menggunakan perintah dpkg-scanpackages. yang terdapat di Ubuntu Feisty, tidak dapat
saat menggunakan Ubuntu Feisty. Dalam contoh ini, path direktori yang me- menampilkan fitur 3D yang optimal. Aki-
nyimpan paket file deb berada di /home/su- batnya, Anda tidak akan dapat memain-
Persiapan priyanto/ubuntu_feisty. kan sejumlah game 3D yang terdapat di
Sebelum menjalankan tutorial ini, pastikan $ sudo cd /home/supriyanto Ubuntu Feisty dengan nyaman. Untuk
kalau Ubuntu Feisty sudah terinstalasi de- $ sudo dpkg-scanpackages ubuntu_ mengatasinya, Anda dapat menginstalasi
ngan baik pada sistem Anda. Selanjutnya feisty /dev/null | gzip -9c > driver NVIDIA pada sistem Ubuntu.
untuk melakukan langkah instalasi paket ubuntu_feisty/Packages.gz Buka Terminal, kemudian jalankan
yang dijelaskan pada tutorial ini, Anda dapat Jika tidak terdapat masalah setelah perintah berikut untuk menginstalasi driver
melakukannya langsung dengan menggu- menjalankan perintah di atas, langkah pem- NVIDIA.
nakan paket deb yang terdapat pada bonus buatan repositori Ubuntu sudah selesai. $ sudo apt-get install nvidia-glx

www.infolinux.web.id INFOLINUX  06/2007 75


TUTORIAL UBUNTU FEISTY

XMMS sedang memutar file MP3. VLC sedang memutar film DVD.

Setelah paket driver nvidia-glx telah Sayangnya, secara default beberapa format Read/Write Partisi NTFS
terinstalasi dengan baik, jalankan perintah video belum dapat dijalankan dengan baik Kebanyakan pengguna Linux di Indonesia
berikut untuk mengaktifkan fungsi driver oleh Totem, karena codec video untuk adalah pengguna dual boot antara Windows
NVIDIA yang baru saja Anda instal. membuka format ini belum tersedia. XP dan Linux di dalam satu PC-nya. Secara
$ sudo nvidia-xconfig Untuk mengatasi hal ini, Anda dapat default, Ubuntu sudah dapat mendeteksi
Lakukan proses Logout atau Restart. Jika menginstalasikan paket w32codecs yang secara langsung partisi NTFS yang terdapat
sebelum masuk ke halaman login GDM ter- sudah memuat beragam codec video yang pada suatu PC. Hanya saja mount partisi
lihat logo Ubuntu, berarti Anda sudah dapat ada saat ini. Selain itu, kita juga dapat meng- NTFS yang dilakukan Ubuntu ini hanya
menginstalasi driver NVIDIA dengan baik. gunakan video player lain seperti VLC dan bersifat Read Only. Jika menginginkan ke-
Gxine misalnya, yang memiliki kemampuan mampuan Read/Write pada partisi NTFS
Instalasi Plugins dan Audio Player fitur lebih baik daripada Totem. yang terdapat pada sistem, Anda dapat
Format MP3, seakan sudah menjadi standar $ sudo apt-get install w32codecs vlc menginstalasikan paket ntfs-3g. Selain
de facto format musik yang terdapat di PC gxine dapat membaca partisi NTFS, paket ntfs-3g
dan beragam perangkat multimedia player Selanjutnya, Anda dapat mencoba me- juga dapat menulis ke partisi NTFS.
yang ada di pasaran saat ini. Berkaitan mutar file video, atau memasukkan keping Untuk instalasi paket ntfs-3g, cukup
dengan masalah lisensi, codec untuk me- film DVD pada drive DVD, untuk segera jalankan perintah berikut dari Terminal.
mutar format MP3 tidak disertakan secara menikmati DVD film melalui VLC. $ sudo apt-get install ntfs-3g
default pada Ubuntu Feisty. Namun tidak Setelah paket ntfs-3g terinstalasi dengan
perlu khawatir, karena pada paket extras Instalasi Acrobat Reader baik, selanjutnya Anda dapat langsung
yang terdapat di DVD Ubuntu InfoLINUX Meskipun di Ubuntu Feisty sudah terdapat melakukan proses mount partisi NTFS agar
edisi regular, Anda dapat menginstalasikan beberapa aplikasi untuk membaca file PDF dapat di Read dan Write. Dimisalkan par-
paket gstreamer0.10-plugins-ugly untuk yang bersifat free dan open source, seperti tisi NTFS berada di /dev/hda1 dan ingin di-
memutar file MP3. Jalankan perintah beri- evince, xpdf, dan kpdf, aplikasi buatan Ado- mount ke direktori /media/hda1. Pertama,
kut dari Terminal untuk menginstalasinya. be ini tetap menarik untuk digunakan. Un- lakukan proses umount terlebih dahulu jika
$ sudo apt-get install tuk menginstalasi Acrobat Reader, jalankan partisi tersebut masih dalam proses mount.
gstreamer0.10-plugins-ugly perintah berikut dari Terminal. Selanjutnya, Anda dapat langsung melaku-
Berikutnya, Anda dapat menginstal $ sudo apt-get install acroread kan proses mount dengan menggunakan
XMMS sebagai aplikasi audio player untuk perintah berikut:
memutar file MP3. Aplikasi Burning CD/DVD $ sudo mount ntfs-3g /dev/hda1
$ sudo apt-get install xmms Pada platform Linux, nama aplikasi K3B /media/hda1
Jalankan XMMS dari menu Applications sangat dikenal sebagai aplikasi yang dapat Test dengan membuat sebuah direktori
-> Sound & Video, kemudian test dengan digunakan untuk melakukan proses burning atau file di partisi NTFS yang baru saja di-
menjalankan salah satu file MP3. CD/DVD. Aplikasi berbasis KDE ini, me- mount. Jika sudah bisa melakukan proses
miliki tampilan yang user friendly, dan Read dan Write, berarti aplikasi ntfs-3g
Instalasi Codecs dan Video Player mudah digunakan oleh para user pemula sudah dapat bekerja dengan baik.
Menonton video di saat senggang dapat sekalipun.
menghilangkan kepenatan setelah bekerja. Untuk menginstalasi K3B, cukup jalan- File Sharing
Pada Ubuntu Feisty, sudah disertakan kan perintah berikut dari Terminal. Kebanyakan para pengguna komputer
Totem sebagai default aplikasi video player. $ sudo apt-get install k3b saat ini, melakukan pekerjaan dalam suatu

76 06/2007  INFOLINUX www.infolinux.web.id


TUTORIAL UBUNTU FEISTY
jaringan komputer. Berkaitan dengan hal Anda juga dapat menginstalasi KAudio- Setelah terinstal, Anda dapat melihat
ini, kegiatan file/printer sharing antarkom- Creator yang berbasis aplikasi KDE. Untuk informasi plugins yang telah terdapat pada
puter dalam suatu jaringan dapat dilakukan instalasi KAudioCreator, jalankan perintah Mozilla Firefox, dengan mengetikkan perin-
secara mudah dan terpusat. berikut dari Terminal. tah berikut pada kotak halaman url-nya:
Pada Ubuntu Feisty, proses file shar- $ sudo apt-get install kaudiocreator about:plugins
ing dapat dilakukan secara mudah. Dua
protocol sharing seperti NFS dan Samba, Firefox Plugins Konversi Paket RPM
sudah terdapat pada aplikasi Shared Folder Browser Mozilla Firefox, merupakan Adakalanya kita mendapatkan suatu
yang terdapat pada distro Ubuntu. Untuk browser open source yang paling banyak paket software yang hanya berbentuk bi-
melakukan proses file sharing, Anda dapat digunakan saat ini. Selain dapat diperoleh nary RPM. Jika ingin menginstalasi for-
mengikuti langkah sebagai berikut: secara gratis dan dapat berjalan di berbagai mat RPM di Ubuntu, kita harus mengon-
1. Jalankan aplikasi Shared Folder dari macam platform, Firefox juga sudah dileng- versinya terlebih dahulu menggunakan
menu System -> Administration -> kapi dengan ratusan extensions yang dapat aplikasi Alien. Instalasi paket Alien dapat
Shared Folder. menambah fungsionalitas. dilakukan dengan menjalankan perintah
2. Jika muncul halaman yang menanyakan Selain extensions, Firefox juga memi- berikut:
apakah Anda ingin melakukan proses liki sejumlah tambahan plugins yang dapat $ sudo apt-get install alien
file sharing menggunakan NFS atau digunakan untuk menjalankan suatu Berikutnya, Anda dapat segera melaku-
Samba, pilih saja Samba. Setelah dipilih, format yang terdapat di suatu website. kan konversi paket RPM menjadi paket DEB,
tak lama kemudian aplikasi ini akan Beberapa format yang umumnya sering dengan menggunakan perintah berikut:
langsung menginstalasi paket Samba disertakan pada suatu website diantara- $ sudo alien --to-deb <namapaket.rpm>
server pada sistem Anda. nya, flash, pdf, realplayer, java, dan video.
3. Tak lama kemudian, halaman Shared Untuk dapat menjalankan secara lang- Demikian sejumlah Tip dan Trik seputar
Folder akan muncul. Klik button Add un- sung format-format tersebut, Anda dapat Ubuntu Feisty dalam kesempatan kali ini.
tuk memilih folder yang ingin di-share. menginstal sejumlah paket berikut dari Beberapa tip dan trik lainnya dapat Anda
Uncheck pilihan Read Only, jika Anda Terminal. temukan di sejumlah halaman dokumentasi
ingin memberikan permission Read dan $ sudo apt-get install mozilla- Ubuntu Guide, Wiki Ubuntu, dan Forum
Write pada folder yang di-sharing. acroread mozilla-mplayer mozilla- Ubuntu yang terdapat di Internet. Akhir
4. Pada Tab General Properties, sesuai- plugin-vlc libflash-mozplugin kata, selamat ber-Ubuntu ria!
kan Domain/Workgroup yang digunakan j2re1.4-mozilla-plugin Supriyanto [supriyanto@infolinux.co.id]
pada jaringan Anda. Pilihan WINS server
juga dapat Anda isikan, jika Anda meng-
inginkan komputer yang menjalankan
service Samba tersebut sebagai WINS
Server.
5. Terakhir, restart service Samba di
komputer tersebut.
$ sudo /etc/init.d/samba restart

Sekarang rekan dalam workgroup Anda


sudah dapat mengakses folder yang sudah
Anda share.

CD Audio
Meski format CD Audio sudah tidak se-
populer seperti dahulu, untuk urusan kuali-
tas suara, format CD Audio masih jauh lebih
bagus daripada format MP3. Tak heran
jika CD Audio masih tetap digunakan oleh
sebagian besar album musik yang terdapat
di pasaran.
Pada Ubuntu Feisty, sudah terdapat
aplikasi Sound Juicer dan Serpentine Audio
CD Creator yang dapat digunakan untuk
memutar dan mengekstrak file dalam CD
Audio ke komputer. Jika masih kurang,

www.infolinux.web.id INFOLINUX  06/2007 77

Anda mungkin juga menyukai