TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Gambas dan MySQL
Database Programming dengan Gambas dan MySQL
P
ucuk dicinta ulam tiba, inilah yang dirasakan penulis ketika dikenalkan oleh InfoLINUX tentang Gambas pada edisi April 2003 yang lalu. Karena selama ini penulis telah mempelajari bahasa Visual Basic dan tak ingin keahlian itu hilang sewaktu berpindah ke Linux, akhirnya bertemu dengan Gambas (Gambas Almost Mean Basic). Berdasarkan rujukan yang diberikan, penulis langsung mempelajari dokumentasi Gambas di situs http:// gambas.sourceforge.net. Salut dan terimakasih untuk Benoit Minisini yang telah membuat Gambas dalam waktu luangnya dan melepasnya dalam bentuk lisensi GPL yang free. Gambas memang memiliki kemudahan Visual Basic dan kekuatan OOP dari Java. Dari alamat situs di atas, Anda dapat mengambil versi terakhir Gambas 0.58. Penulis menggunakan versi Gambas 0.57 dengan Linux Red Hat 7.3. Proses instalasi program cukup mudah, tidak ada kendala sama sekali sesuai dengan petunjuk InfoLINUX edisi April 2003. Meskipun Gambas masih dalam tahap pengembangan, sampai saat ini penulis belum menemukan Bug Program yang signifikan. Ok, tanpa panjang lebar, kita
akan coba mempelajari salah satu komponen yang disediakan Gambas untuk pengolahan database, yaitu Connection Class. Connection Class adalah sebuah kelas yang digunakan untuk dapat mengakses database server seperti MySql atau PgSql, yang terdiri dari beberapa Property dan Method seperti terlihat pada Tabel 1. Untuk dapat menggunakan Connection Class, kita harus mendeklarasikan sebuah variabel objek dan merujuk Connection Class ke variabel tersebut, kemudian memberi nilai untuk properti-properti yang diperlukan dan menjalankan metode .Open untuk membuka koneksi ke database server. Setelah koneksi terbentuk, kita dapat mengolah data pada satu tabel atau lebih dengan menggunakan metode .Exec(sql_statement). Metode .Exec() akan mengembalikan hasil eksekusinya ke sebuah variabel object bertype Result, variabel tersebut boleh dikatakan sebagai variabel object yang bertipe Recordset di VB.
Contoh program Koneksi Ke database server MySql: PUBLIC MyConn AS Connection PUBLIC SUB Koneksi()
Connection Class Property
KEGUNAAN
.Host .Login .Password
String untuk nama komputer / Host (“localhost”) String untuk nama user pada MySql (“root”) String untuk kata sandi pada MySql (“”)
.Type .Name Method
String untuk jenis server database (“mysql” / “pgsql”) String untuk nama database (“sahabat”) KEGUNAAN
.Open .Exec
Membuka Koneksi ke Server Database Mengeksekusi Perintah SQL
INFOLINUX SEPTEMBER 2003
Gambar 1. Startup class, Constructor, dan Destructor
MyConn = New Connection MyConn.Type= “mysql” MyConn.Host= “localhost” MyConn.Login= “root” MyConn.Password=”” MyConn.Name=”sahabat” ‘buka koneksi MyConn.Open ‘Tampilkan messagebox bila ada kesalahan CATCH Message.error(Error.text) END Mengambil Data Tertentu: PUBLIC SUB ambildata() Dim sql AS String DIM MyRS AS Result Dim vNama AS String Dim vTelp AS String Sql = “select nama, telp from tsahabat where id = 1” MyRS = MyConn.Exec(sql) ‘pindahkan data ke variable vNama = MyRS!nama vTelp = MyRS!telp
Tabel 1.
52
Bagi Anda yang ‘maniak’ Visual Basic, jangan ragu-ragu lagi untuk terjun bebas ke Linux. Sekarang sudah ada Gambas yang masih muda dan cepat kemajuannya, sehingga Anda dapat mengikuti perkembangan dan mendalaminya betul-betul dari awal.
www.infolinux.web.id
CATCH Message.error(Error.text) END Menghapus data tertentu: PUBLIC SUB hapusdata() DIM sql AS String DIM MyRS AS Result
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Gambas dan MySQL
Sql=”delete from tsahabat where id = 1” MyRS = MyConn.Exec(sql) CATCH Message.error(Error.text) END Menambah data: PUBLIC SUB tambahdata() DIM sql AS String DIM MyRS AS Result Sql=”insert into tsahabat (nama,almt1,almt2,telp) values (‘Tamrin Syah’, ‘Jl. Patimura No. 77’, ‘Kec. Telanaipura – Jambi’, ‘(0741) 60852’) MyRS = MyConn.Exec(sql) CATCH Message.error(Error.text) END Memperbaiki data tertentu: PUBLIC SUB editdata() DIM sql AS String DIM MyRS AS Result Sql=”update tsahabat set nama = ‘Yudi Fitra’, telp = ‘207277’ where id = 1” MyRS = MyConn.Exec(sql) CATCH Message.error(Error.text) END
mysql >insert into tsahabat (nama,almt1,almt2,telp) values (‘Tamrin S’,’Jl. Raden Mattaher No. 96’,’Kel. Pasar – Jambi’,’0741-22105’) mysql >insert into tsahabat (nama,almt1,almt2,telp) values (‘Yudi Fitra’,’Jl. Patimura No. 77’,’Kel. Jelutung – Jambi’,’0741-27277’) mysql >insert into tsahabat (nama,almt1,almt2,telp) values (‘Siti Nirwana’,’Jl. Barau-barau No. 07’,’Kel. Pasir Putih – Jambi’,’0741-65028’)
Membuat program Setelah proses pembuatan database SAHABAT di MySql selesai, kita mulai membuat interface untuk pengolahan datanya dengan Gambas. Jalankan program Gambas dari command shell: #/usr/bin/gambas Pilih New Project, ketik nama proyek: sahabat, lalu tentukan direktori mana proyek tersebut disimpan dan klik OK. Pada jendela utama proyek, klik kanan pada nama proyek “sahabat”, pilih New – Form, ketik nama form: “fsahabat”, dan tentukan tipe form tersebut sebagai: Startup class, Constructor, dan Destructor. Seperti terlihat pada Gambar 1. Letakkan beberapa objek label dan textbox ke dalam form tersebut sesuai dengan Gambar 2 dan atur properties seperti pada Tabel 2.
Seletelah selesai setting objek-objek di atas, tiba saatnya mengetik kode program yang diperlukan. Aktifkan jendela kode dengan cara mengklik ganda Classes “fsahabat” dan mulailah mengetik kode program seperti listing lengkap yang cukup panjang berikut ini: ‘ Gambas class file PUBLIC MyConn AS Connection PUBLIC MyRS AS Result PUBLIC vCari AS String STATIC PUBLIC SUB Main() DIM oForm AS form oForm = NEW fsahabat oForm.showModal() END PUBLIC SUB _new() ME.Title=”Buku Sahabat” ME.center koneksi ambildata pindahkan isilistbox END PUBLIC SUB koneksi() MyConn = NEW Connection MyConn.Close MyConn.Type = “mysql” MyConn.Host = “localhost” MyConn.Login = “root” MyConn.Password = “” MyConn.Name = “sahabat”
Database sahabat Pada tulisan ini, penulis menggunakan database server MySql untuk mengolah data sahabat. Buatlah sebuah database dengan nama “SAHABAT” yang terdiri atas satu tabel “TSAHABAT” menggunakan MySql Client. Isi beberapa data. Pada console atau “jendela command sheel” ketik perintah-perintah berikut: #mysql -u root -p Masukkan password untuk user “root” mysql>create database sahabat; mysql >use sahabat; mysql >create table tsahabat (id int(7) AUTO_INCREMENT, nama char(25), almt1 char(25), almt2 char(25), telp char(10), PRIMARY KEY (id))
Tabel 2.
Setting Properties OBJECT
PROPERTIES
VALUE
Label1 Label2 Label3
Text Text Text
Nama : Alamat : Telpon :
Label4 Textbox Textbox
Text NameBackground NameBackground
DATA SAHABAT Textbox1&H55AAFF& Textbox2&H55AAFF&
Textbox Textbox Button
NameBackground NameBackground NameText
Textbox3&H55AAFF& Textbox4&H55AAFF& btnTambahTambah
Button Button Button
NameText NameText NameText
btnSimpanSimpan BtnHapusHapus BtnBatalBatal
Frame ListBox
NameText NameBackground
Frame1Navigator ListBox1&H55AAFF&
www.infolinux.web.id
INFOLINUX SEPTEMBER 2003
53
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Gambas dan MySQL
MyConn.Open CATCH Message.error(Error.text) END
PUBLIC SUB pindahkan() vCari = Str(MyRS!id) textbox1.text = MyRS!nama textbox2.text = MyRS!almt1 textbox3.text = MyRS!almt2 textbox4.text = MyRS!telp CATCH Message.error(Error.text) END PUBLIC SUB isilistbox() DIM i AS Integer DIM vKode AS String listbox1.Clear FOR i = 1 TO MyRS.Count vKode = Space$( 7 - Len(Str(MyRS!id)) ) & Str(MyRS!id) listbox1.add(vKode & “ | “ & MyRS!nama) MyRS.MoveNext NEXT CATCH Message.error(Error.text) END PUBLIC SUB listbox1_Click() DIM sql AS String vCari = Trim(Left$(listbox1.text,7)) sql = “select * from tsahabat where id = “ & vCari MyRS = MyConn.Exec(sql) pindahkan CATCH Message.Error(Error.Text) END
54
INFOLINUX SEPTEMBER 2003
Gambar 2. Form Gambas untuk Data Sahabat
PUBLIC SUB btnTambah_Click() kosongkan btnTambah.Enabled = FALSE END PUBLIC SUB btnSimpan_Click() DIM sql AS String IF btnTambah.Enabled = FALSE THEN sql = “insert into tsahabat (nama,almt1,almt2,telp) values (‘“ & textbox1.text & “‘,’” & textbox2.text & “‘,’” & textbox3.text & “‘,’” & textbox4.text & “‘)” MyRS = MyConn.Exec(sql) btnTambah.Enabled = TRUE ELSE sql = “update tsahabat set “ sql = sql & “nama = ‘“ & textbox1.text sql = sql & “‘,almt1 = ‘“ & textbox2.text sql = sql & “‘,almt2 = ‘“ & textbox3.text sql = sql & “‘,telp = ‘“ & textbox4.text & “‘ where id = “ & vCari MyRS = MyConn.Exec(sql) ENDIF ambildata isilistbox CATCH Message.Error(Error.Text) END PUBLIC SUB btnHapus_Click() DIM sql AS String sql = “delete from tsahabat where id = “ & vCari MyRS = MyConn.Exec(sql)
www.infolinux.web.id
sql = “select * from tsahabat order by id” MyRS = MyConn.Exec(sql) CATCH Message.error(Error.text) END
PUBLIC SUB ambildata() DIM sql AS String
Gambar 3. Contoh aplikasi database dengan Gambas
ambildata pindahkan isilistbox END PUBLIC SUB btnBatal_Click() DIM sql AS String vCari = Trim(Left$(listbox1.text,7)) btnTambah.Enabled = TRUE sql = “select * from tsahabat where id = “ & vCari MyRS = MyConn.Exec(sql) pindahkan CATCH Message.Error(Error.Text) END PRIVATE SUB kosongkan() textbox1.text = “” textbox2.text = “” textbox3.text = “” textbox4.text = “” END PUBLIC SUB _free() MyConn.Close Message.Info(“Terimakasih..., Salam Linux”) END ‘End of program Selanjutnya untuk mencoba program, Anda dapat menjalankannya dengan menekan tombol F5. Apabila tidak ada kesalahan yang muncul, akan tampak seperti Gambar 3, dan program sudah dapat Anda kompilasi dengan memilih menu Project – Compile. Tamrin Syah, S.Kom (
[email protected])
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
TUTORIAL Deteksi Hardware
Deteksi Hardware dengan discover Bertahun-tahun lamanya masalah pengenalan hardware di Linux menghantui calon pengguna atau bahkan pengguna Linux sekalipun. Sekarang tidak lagi. Anda ingin bukti? Mari kita buat frontend untuk discover agar deteksi perangkat keras menjadi jauh lebih mudah.
B
ukan cerita baru kalau orang menanyakan apakah hardware yang dimiliki dapat dikenali baik oleh Linux. Bukan cerita baru pula orang tidak berani menginstal Linux hanya karena ketakutan kalau-kalau hardwarenya ternyata belum didukung. Dan sudah cerita lama kalau hal yang satu ini digunakan oleh para saingan Linux untuk menjelek-jelekkan Linux. Dan kita tidak akan membiarkan itu terjadi, Sekali lagi, tidak akan!
Sekilas cerita untuk plug and play Beberapa tahun yang lalu, setelah melewati usaha yang cukup rumit, akhirnya tibalah seperangkat komputer dengan CPU Intel Pentium 133 MHz di kamar penulis. Masih teringat bahwa RAM yang terpasang hanyalah 8 MB. Dan karena sistem operasi Microsoft Windows 95 sangat umum dipakai oleh teman-teman (beberapa sekolah masih berjaya dengan MSDOS 6 dan Microsoft Windows 3.1), maka penulis pun segera meminjam CD-ROM installer sistem operasi tersebut. Ada satu istilah yang sangat menarik: pnp atau plug and play. Teorinya, tancapkan saja hardware Anda dan hardware tersebut akan langsung bekerja. Karena ingin menikmati suara dan saat itu tidak memiliki sound card, maka langkah menghemat uang jajan pun segera dilakukan. Akhirnya, sebuah sound card pun nongol di komputer penulis dan rasa bahagia pun menyelimuti ketika pada akhirnya game Street Fighter yang menjadi idola saat itu mulai bisa
bersuara. Istilah plug and play benarbenar dapat dipercaya! Penulis bahkan hanya perlu memasukkan sebuah disket berisi driver. Dan semuanya selesai! Betapa mudahnya hidup. Di saat itu, sistem operasi Windows benar-benar pujaan. Penulis bahkan sempat sinis ketika melihat sebuah iklan tempel OS/2. Lebih sinis lagi ketika beberapa mahasiswa bertandang ke sekolah dan menawarkan Linux. Bahkan, saking sinisnya, penulis sempat berjanji setia untuk tidak akan menggunakan Linux. Alasannya? Karena Windows bisa plug and play. Waktu pun berlalu. Saatnya kuliah dan meninggalkan kampung halaman. Tidak lupa komputer pun diangkut. Sampai di Jakarta, penulis pun segera memilih Mangga Dua sebagai tempat wisata kali pertama. Keliling sana sini, akhirnya penulis kembali menemukan Linux. Linux lagi , Linux lagi! Dengan pengenalan hardware yang menjijikkan, begitulah pemikiran waktu itu. Setengah tahun kemudian, penulis pun mencoba Linux karena kabarnya yang cukup santer terdengar, sekadar iseng, dan rupanya masih sama juga, kurang ramah dengan hardware. Waduh! Sampai sekarang pun, isu bahwa Linux kurang ramah dengan hardware masihlah tedengar.
Linux dulu dan sekarang Kalau ada lirik lagu yang menyatakan bahwa “Aku masih seperti yang dulu”, maka Linux sepertinya tidak setia-setia amat, tentunya dalam arti yang positif. Linux masih setia dengan keandalannya,
www.infolinux.web.id
Linux masih setia dengan kebebasannya, Linux masih setia dengan komitmen untuk terus maju. Tapi Linux tidak setia untuk kurang ramah pada hardware. Linux kini jauh lebih ramah kalau berhubungan dengan hardware. Kernel 2.6 yang akan keluar jelas akan lebih ramah lagi dengan hardware. Anda mungkin mengalami apa yang pernah penulis alami ketika hardware yang telah dibeli dengan uang tabungan ternyata belum didukung oleh Linux. Tapi itu dulu. Sekarang, lihatlah dukungan vendor. Lihatlah OSDL tempat Linus sekarang bekerja penuh. Lihatlah siapa yang mendukung OSDL. Lihatlah seberapa banyak hacker Linux yang bekerja pada perusahaan hardware terkemuka. Dan sebagai hasilnya, seberapa sering Anda membutuhkan driver ketika Anda menambahkan hardware baru? Penulis tidak pernah menambahkan driver tertentu hanya supaya sebuah hardware dapat bekerja. VGA card, sound card, ethernet, dan lain sebagainya. Apa yang penulis lakukan adalah mencari dukungan kernel (umumnya telah ada), melakukan kompilasi ulang kernel atau modul kalau perlu dan meminta kepada Debian agar load modul tersebut pada saat boottime. Semua beres. Di penyimpanan CD-ROM milik penulis, tidak ada satupun CD-ROM driver dari vendor. Semuanya hanyalah CD-ROM data , CD-RW, CD-R kosong, dan Debian Woody/Sarge. Kadangkadang tentunya ada juga beberapa VCD. Linux mungkin belum mengenali semua hardware. Akan tetapi, masih tegakah seseorang berpendapat bahwa Linux tidak ramah dengan hardware?
Pendeteksian hardware Prinsip pengenalan hardware sebenarnya bersumber pada kernel. Pada sistem operasi closed source seperti Microsoft Windows, kernel mereka telah dilengkapi dengan berbagai modul (lebih dikenal dengan istilah driver) yang mereka buat sendiri atau disumbangkan oleh vendor hardware. Apabila ternyata hardware baru dirilis ketika sistem operasi telah
INFOLINUX SEPTEMBER 2003
55
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
dirilis dan digunakan banyak orang, maka umumnya hardware tersebut datang dengan CD-ROM Driver. Pengguna tetap butuh untuk menginstal driver yang terdapat di dalam CD-ROM tersebut. Dan dengan demikian, pihak marketing lantas menyebutnya sebagai plug and play. Suatu pujian untuk pihak marketing. Namun terkadang, istilah plug and play tersebut dapat juga bertransformasi menjadi plug and pray (tancapkan dan berdoalah agar bisa bekerja). Pada sistem operasi open source seperti Linux, kernel umumnya juga telah dilengkapi dengan berbagai modul untuk dukungan hardware. Modul-modul tersebut umumnya dibuat oleh para kernel hacker di seluruh dunia ataupun disumbangkan oleh perusahaan tertentu. Sangat wajar pula apabila suatu hardware dirilis ketika kernel Linux tersebut telah dirilis dan digunakan oleh orang banyak. Apabila vendor tidak menyediakan driver (modul)-nya, maka kita masih punya harapan karena sistem rilis bazaar yang dianut oleh komunitas free software menyebabkan suatu kernel Linux bisa dirilis dalam tempo yang sangat cepat. Kita pun dapat menikmati hardware baru. Rasa-rasanya, kita tidak perlu khawatir. Pada dasarnya, ketika Anda menggunakan kernel terbaru, maka hampir kebanyakan hardware telah didukung. Apabila belum, Anda mungkin perlu melakukan kompilasi ulang kernel atau modul. Untuk hardware, cukup gunakan saja Xserver terbaru. Rasarasanya semuanya akan beres. Untuk printer, gunakan saja CUPS. Pada saat artikel ini ditulis, rekan penulis baru saja menguji printer Lexmark E323 dan bekerja dnegan sangat mulus.
Deteksi hardware dari sisi pengguna Permasalahannya, apakah orang yang baru saja menggunakan Linux perlu sibuk melakukan kompilasi kernel atau modul kernel? Atau perlukan seorang pemula mengutak atik /proc untuk mendapatkan informasi real time kernel? Atau katakanlah seseorang membeli ethernet X dan tahu persis bahwa ethernet X tersebut telah
56
INFOLINUX SEPTEMBER 2003
Deteksi Hardware
Interface
disco
didukung oleh kernel. Lantas apakah beliau harus berbengong ria untuk mencari tahu apa yang harus dilakukan agar ethernet tersebut bekerja, karena ketika ditancapkan ethernet tersebut belum bisa digunakan? Saat ini, beberapa pendeteksi hardware seperti Kudzu (oleh Red Hat), Detect (MandrakeSoft), dan Discover (Progeny, berbasis pada Detect) memang cukup diandalkan. Secara umum, Kudzu sudah sangat memuaskan. Lantas, bagaimana dengan Discover? Untuk fleksibilitas, Discover dijalankan pada Command Line Interface. Di artikel ini, kita akan menjadikan Discover jauh lebih indah dan mudah untuk digunakan.
Menggunakan discover Discover, merujuk ke situsnya, http:// hackers.progeny.com/discover/, adalah program pendeteksi hardware yang menggunakan modul-modul kernel dalam pendeteksiannya. Discover dapat Anda gunakan untuk mendeteksi hardware di sistem Anda. Penulis mencoba Discover pada berbagai perangkat yang berbeda, dan secara umum memberikan hasil yang sangat memuaskan. Sebelum kita membuat interface yang ramah dengan Discover, kita akan melihat bagaimana menyenangkannya
www.infolinux.web.id
menggunakan Discover. Anda dapat men-download Discover di http:// archive.progeny.com/progeny/discover/. Bagi pengguna Debian, Anda dapat menginstal Discover dengan memberikan perintah: apt-get install discover. Untuk menjalankan Discover, berikanlah perintah sebagai berikut: discover Discover dapat mengenali bus dengan tipe berikut ini: pci, isa, pcmcia, usb, ide, scsi, parallel, dan serial. Untuk device, Discover dapat mendeteksi bridge, cdrom, ide, scsi, usb, ethernet, modem, sound, dan video. Selain itu, Discover dapat pula menampilkan informasi seputar vendor, model, modul kernel, nama device, dan xserver serta modul untuk xserver. Luar biasa, bukan? Berikut ini adalah beberapa contoh penggunaan Discover yang penulis coba di komputer redaksi InfoLINUX.
Pendeteksian VGA card: # discover —vendor video ATI Technologies, Inc. # discover —model video 3D Rage IIc [264GT2c GV]
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
TUTORIAL
IKLAN
www.infolinux.web.id
INFOLINUX SEPTEMBER 2003
57
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Deteksi Hardware
# discover —xserver video XFree86 # discover —xdriver video ati
Pendeteksian ethernet: # discover —vendor ethernet Compaq Computer Corporation # discover —model ethernet ProLiant Integrated Netelligent 10/100
Dengan demikian, dengan Discover, kita bagaikan seorang Sherlock Holmes. Luar biasa! Khusus untuk video, tentunya kita tidak mendeteksi modul kernel. Demikian pula kita tidak akan mendeteksi xserver dan modul untuk xdriver pada ethernet.
Interface Discover yang lebih ramah Discover sendiri telah datang dengan interface yang sangat memudahkan, terutama ketika Anda menggunakannya dalam pembuatan instalasi distro. Sayangnya, bagi pengguna akhir yang ingin melihat informasi hardware, interface CLI seperti ini akan sedikit merepotkan. Sekarang, bagaimana kalau kita membuatnya lebih ramah? Pada prinsipnya, kita akan menampilkan segala hal yang dapat dideteksi oleh Discover pada interface utama kita. Kita akan menampilkan pendeteksian bridge, cdrom, ide, scsi, usb, ethernet, modem, sound, dan video. Setelah pengguna memilih salah satunya, kita akan melakukan pendeteksian semua hal yang berhubungan dengan device-device tersebut, mulai dari informasi seputar vendor, model, modul kernel, nama device, dan xserver serta modul untuk xserver. Tentunya, untuk mempersingkat waktu deteksi, kita hanya akan mendeteksi informasi yang relevan saja. Sebagai contoh, kita tidak akan mendeteksi xserver untuk ethernet. Andaikata apa yang berhasil kita deteksi
58
INFOLINUX SEPTEMBER 2003
# discover —module ethernet tlan
Hasil deteksi Discover
ternyata memiliki modul kernel, maka kita akan menanyakan kepada user untuk memasukkan modul tersebut ke dalam kernel. Dan idealnya, apabila apa yang berhasil kita deteksi adalah VGA card, maka kita akan menyusun sebagian isi dari file konfigurasi X Server. Sayangnya, yang terakhir ini tidak akan dibahas di artikel ini. Kita akan segera mulai. Berikut ini adalah langkah-langkah pembuatannya:
1. Variabel-variabel penting Berikut ini adalah beberapa variabel penting yang didefinisikan: PROGNAME=”Disco” VERSION=”0.1a” COPYRIGHT=”$PROGNAME $VERSION, (c) Noprianto, July 2003. GPL” alias dialog=”dialog —backtitle \”$COPY RIGHT\”” TEMP=/tmp/$$.disco ALL=”bridge cdrom ide scsi usb ethernet modem sound video”
2. Pengecekan ketersediaan program dan prasyarat lain Apa yang akan kita periksa adalah user yang menjalankannya, ketersediaan program dan status /proc. Kita akan menuangkannya dalam fungsi-fungsi:
www.infolinux.web.id
Kita mulai dengan fungsi checkUser(): function checkUser() { superuser=$(grep -e :0:0: /etc/ passwd | cut -d: -f1) test -z $superuser && superuser=”super user” who=$(id -u) if [ $who -ne 0 ] then echo “You are not $superuser. Please login as $superuser first” exit 1 fi } Fungsi ini akan memeriksa apakah user yang menjalankan adalah root atau bukan. Ada baiknya program ini dijalankan oleh root. Oleh karena itu, kita perlu memeriksanya terlebih dahulu. superuser=$(grep -e :0:0: /etc/ passwd | cut -d: -f1) test -z $superuser && superuser=”super user” who=$(id -u) Baris yang pertama akan mencoba untuk mendapatkan nama user root (terkadang, ada pengguna yang tidak menggunakan root sebagai super user,
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Deteksi Hardware
dan lebih memilih nama user lain misalnya. Dan disinilah kita akan memeriksannya). Umumnya, baik user dan group root memiliki id 0. Maka kita mengambil informasinya dari /etc/ passwd. Andaikata group dari root bukanlah 0, maka kita tidak akan mendapatkan apapun juga. Dengan demikian, kita mengasumsikan nama dari user root adalah “super user”. Baris terakhir berguna untuk memeriksa apakah user yang sedang aktif adalah root (super user) atau bukan. Fungsi kedua adalah pemeriksaan ketersediaan program dan status /proc: function checkDeps() { w_discover=$(which discover) if [ -z $w_discover ] then echo “I cant find discover. Sorry.” exit 1 fi w_dialog=$(which dialog) if [ -z $w_dialog ] then echo “I cant find dialog. Sorry.” exit 1 fi m_proc=$(grep -w proc /etc/mtab| tr -d [:space:]) if [ -z $m_proc ] then echo “/proc is not mounted. Sorry.” exit 1 fi
} Secara umum, kita menggunakan which untuk memeriksa ketersediaan program. Untuk itu, Anda dapat saja mengatur $PATH. Program-program yang kita periksa ketersediaannya pun belum lengkap karena kita tidak memeriksa ketersediaan modprobe yang akan kita gunakan nanti. Untuk memeriksa apakah /proc di mount atau tidak, kita akan membaca informasi dari /
etc/mtab. Apa yang kita lakukan di sini mungkin bukan cara terbaik. Akan tetapi, dalam sebagian besar kasus, cara seperti ini cukup memadai.
del }
for i in $ALL do MENUITEMS=”$MENUITEMS $i
Pertama-tama, kita akan memeriksa user yang menjalankan dan berbagai prasyarat lain, Setelah itu, kita akan membuat menu untuk program dialog. Kemudian, pada interface program dialog, kita akan mengulang sampai pengguna memilih tombol cancel. Untuk setiap pilihan yang user tentukan, sebelum melewatkannya ke fungsi lain, kita akan menampilkan informasi tunggu terlebih dahulu karena proses pendeteksian cukup memakan waktu. Setelah fungsi detect() melaporkan hasilnya ke dalam file, maka kita akan menampilkannya kepada user. Setelah itu, kita akan memanggil fungsi configureDevice untuk memeriksa apakah ada yang bisa dilakukan untuk device tersebut. Load modul kalau ada modul kernel yang tersedia, atau pembuatan file konfigurasi X Server yang saat ini belum tersedia.
done
5. Fungsi detect()
3. Pembuatan fungsi pembantu function del() { rm -rf $TEMP rm -rf /tmp/*.disco } Fungsi del tersebut berfungsi untuk mempersingkat pengetikan.
4. Pembuatan fungsi utama function main() { checkUser checkDeps
$i”
while [ 1 ] do dialog —menu “Select device” 20 40 10 $MENUITEMS 2>$TEMP test $? -eq 1 && break SELECTED=‘cat $TEMP‘ del tput reset tput cup 10 10 echo -n “Please wait [$SE LECTED detection in progress] ...”
function detect() { bridge=”model vendor module” cdrom=”model vendor device module” ide=”model vendor device module” scsi=”model vendor device module” usb=”model vendor device module” ethernet=”model vendor module” modem=”model vendor device module” sound=”model vendor module” video=”model vendor xserver xdriver”
dialog —textbox $TEMP 20 60
pretest=$(discover $1 2>/dev/null) if [ -z “$pretest” ] then echo -n “[not found] “ echo “NOT FOUND” >> $TEMP return fi
configureDevice $SELECTED
echo -n “[found] “
echo “Information for $SE LECTED” > $TEMP echo >> $TEMP detect $SELECTED
del done
www.infolinux.web.id
case $1 in bridge) for i in $bridge do echo -n “$i “
INFOLINUX SEPTEMBER 2003
59
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Deteksi Hardware
temp=$(discover —$i $1
temp=$(discover —$i $1
2>/dev/null)
2>/dev/null)
test ! -z “$temp” && echo “$i: $temp” >> $TEMP done ;; cdrom) for i in $cdrom do echo -n “$i “ temp=$(discover —$i $1 2>/dev/null) test ! -z “$temp” && echo “$i: $temp” >> $TEMP done ;; ide) for i in $ide do echo -n “$i “ temp=$(discover —$i $1 2>/dev/null) test ! -z “$temp” && echo “$i: $temp” >> $TEMP done ;; scsi) for i in $scsi do echo -n “$i “ temp=$(discover —$i $1 2>/dev/null) test ! -z “$temp” && echo “$i: $temp” >> $TEMP done ;; usb) for i in $usb do echo -n “$i “ temp=$(discover —$i $1 2>/dev/null) test ! -z “$temp” && echo “$i: $temp” >> $TEMP done ;; ethernet) for i in $ethernet do echo -n “$i “ temp=$(discover —$i $1 2>/dev/null) test ! -z “$temp” && echo “$i: $temp” >> $TEMP done ;; modem) for i in $modem do echo -n “$i “
test ! -z “$temp” && echo “$i: $temp” >> $TEMP done ;; sound) for i in $sound do echo -n “$i “ temp=$(discover —$i $1 2>/dev/null) test ! -z “$temp” && echo “$i: $temp” >> $TEMP done ;; video) for i in $video do echo -n “$i “ temp=$(discover —$i $1 2>/dev/null) test ! -z “$temp” && echo “$i: $temp” >> $TEMP done ;; esac }
60
INFOLINUX SEPTEMBER 2003
Fungsi yang satu ini jelas tidak efisien dari sisi pemrograman. Apabila menggunakan associative array, tentunya tidak akan perlu menjadi sepanjang ini. Prinsip kerjanya, pertamatama kita mendefinisikan terlebih dahului apa-apa saja yang akan diperiksa yang relevan dengan device. Penulis mungkin membuat kesalahan dan untuk itu penulis memohon maaf. Setelah itu, kita akan mencoba untuk mendeteksi keberadaan device secara umum. Apabila device tersebut tidak ditemukan, maka kita akan segera keluar dari fungsi ini. Apabila device ditemukan, barulah kita mendeteksi apa-apa saja yang telah ditentukan dan relevan dengan device tersebut. Setiap pemeriksaan akan ditulis ke dalam suatu file sementara dan akan dilaporkan.
6. Fungsi configureDevice() function configureDevice() { module=$(grep module: $TEMP | awk ‘{print $2}’) xdriver=$(grep xdriver: $TEMP | awk
www.infolinux.web.id
‘{print $2}’) if [ ! -z $module ] then dialog —yesno “Configure $1?” 10 40 if [ $? -eq 0 ] then modprobe $module 1>/ dev/null 2>&1 if [ $? -ne 0 ] then RESULT=”failed” else RESULT=”succeded” fi dialog —msgbox “Configure $RESULT” 10 40 fi
fi
if [ ! -z $xdriver ] then dialog —msgbox “X Server configuration is not implemented at this time. sorry.” 10 40 fi
} Apa yang dilakukan oleh fungsi ini adalah memeriksa apa saja yang bisa dilakukan dengan device tersebut, Untuk saat ini, ada dua hal yang akan diperiksa. Ketersediaan modul kernel atau modul untuk xserver. Apabila kita menemukan bahwa device tersebut memiliki modul kernel, kita akan meminta konfirmasi kepada user untuk memasukkannya ke dalam kernel. Demikianlah, kini Discover menjadi lebih meriah dan murah digunakan. Ganti dialog dengan gdialog (kemudian berikan beberapa perubahan) dan tampilan Anda akan jauh lebih menyenangkan. Walau, masih terdapat banyak sekali kekurangan pada program ini. Berniat untuk mengembangkannya? Noprianto (
[email protected])
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Shell Script
Pemrograman Web dengan Shell Script Shell script tidak hanya dapat digunakan administrasi sistem. Dengan beberapa baris kode shell script, Anda bahkan dapat menghasilkan aplikasi web yang mengagumkan. Tidak perlu instal macam-macam software, hanya Apache dan shell yang menuruti standar POSIX saja yang diperlukan.
S
aat ini, bahasa pemrograman web semakin menjamur dan semakin menjanjikan berbagai kemudahan yang tidak pernah akan terbayang beberapa saat yang lalu. Sebut saja PHP. Bahasa yang satu ini, setidaknya menurut penulis, sangat menyenangkan untuk digunakan dalam pemrograman web. Situs-situs web di dunia juga banyak yang mengandalkan bahasa yang satu ini. Belum lagi aplikasiaplikasi siap pakai lain yang dibuat dengan PHP. Web hosting pun tidak mau kalah. Dukungan PHP jarang sekali absen dalam layanan mereka. Sebuah fenomena yang luar biasa. Anda tidak suka PHP? Baik. Masih ada JSP. Penggemar Java akan berbahagia sekali dengan alat bantu yang satu ini. Kemudian, pengguna Python mungkin akan berbahagia dengan Zope, termasuk penulis. Baiklah, sekarang coba kita simak beberapa hal berikut. Anda butuh untuk menampilkan informasi sistem via web browser. Anda mungkin butuh untuk menyimpan informasi pengunjung. Anda mungkin perlu menampilkan isi berbagai file di sistem via web browser. Atau Anda ingin menyulap berbagai tool sistem menjadi aplikasi Internet. Lantas, apakah untuk tugas-tugas seperti itu, kita perlu menginstal PHP, atau menginstal JSP, atau menginstal Zope? Menggunakan PHP mungkin bisa saja. Akan tetapi, kalau Anda sering berkutat dengan shell script, kenapa tidak menggunakan shell script saja? Tidak ada software tambahan yang perlu diinstal. Dan yang penting, untuk tugas-tugas tersebut di atas, Anda
bahkan dapat membuatnya dalam waktu yang sangat singkat.
Aplikasi CGI Pada dasarnya, apa yang akan kita buat adalah aplikasi CGI. Bicara teori, aplikasi CGI dapat dibangun dengan bahasa apapun juga, selama bahasa tersebut dapat menampilkan output. Dan boleh dikatakan, hampir semua bahasa pemrograman tentunya dapat menampilkan output. Dan apapun bahasa favorit Anda, Anda dapat membuat aplikasi web dengan mudah. Walau alangkah baiknya apabila bahasa yang Anda gunakan memiliki fungsi pemrosesan string yang cukup baik. Perl atau Python adalah contoh yang baik dalam pemrosesan string. Shell script dengan tool-tool pendukung seperti awk akan sangat membantu. Secara umum, Anda perlu mencetak header tertentu untuk dikenal sebagai aplikasi CGI. Untuk menampilkan output dalam format hypertext, Anda akan mencetak header berikut ini: Content-type: text/html
Sementara, untuk menampilkan output berupa teks biasa, Anda akan mencetak header berikut ini: Content-type: text/plain Copy-kan program yang Anda buat di direktori CGI Apache (umumnya direktori cgi-bin di instalasi Apache Anda. Untuk Debian, direktori CGI terletak di /usr/lib/cgi-bin). Jangan lupa untuk memastikan program Anda
www.infolinux.web.id
memiliki permission executable. Secara default, akseslah aplikasi CGI Anda di alamat http:///cgi-bin/ . Sebagai perbandingan, berikut ini adalah contoh aplikasi dalam beberapa bahasa.
Bahasa C #include <stdio.h> int main(void) { printf(“Content-type: text/plain”); printf(“\n\n”); printf(“Hello World”); return 0; } Lakukanlah kompilasi dan akseslah lewat web browser Anda. Maka Anda telah sukses membuat aplikasi CGI dengan bahasa C.
Bahasa PERL #!/usr/bin/perl print “Content-type: text/plain”; print “\n\n”; print “Hello World”; - bahasa python #!/usr/bin/python print “Content-type: text/plain” print “\n” print “Hello World” - shell script #!/bin/sh
INFOLINUX SEPTEMBER 2003
61
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Informasi internal web server
echo “Content-type: text/plain” echo echo “Hello World” Dengan demikian, Anda dapat melihat bahwa betapa menyenangkannya melakukan pemrograman CGI, walau untuk orang-orang yang hidup di teknologi terkini, boleh jadi CGI akan ditertawakan.
CGI dan informasi internal web server Dalam suatu aplikasi web, terkadang kita perlu mengetahui informasiinformasi seperti browser apa yang digunakan oleh pengguna, dari alamat mana pengguna kita mengakses aplikasi kita dan berbagai variabel penting lainnya. Untuk itu, Anda tidak perlu repot-repot. Web server akan menyediakannya untuk Anda. Anda bisa mendapatkan informasiinformasi tertentu dengan mengakses variabel yang di-export oleh web server. Cara lain untuk mendapatkan informasiinformasi tersebut adalah mengambil hasil yang dikeluarkan oleh program env. Keluaran dari program env akan lebih rumit untuk dipecah-pecah. Document root $DOCUMENT_ROOT HTTP accept $HTTP_ACCEPT HTTP accept charset $HTTP_ACCEPT_CHARSET HTTP accept encoding $HTTP_ACCEPT_ENCODING
62
INFOLINUX SEPTEMBER 2003
Shell Script
Program x2web
HTTP connection $HTTP_CONNECTION HTTP host $HTTP_HOST HTTP keep alive $HTTP_KEEP_ALIVE HTTP user agent $HTTP_USER_AGENT Path $PATH Remote address $REMOTE_ADDR Remote port $REMOTE_PORT Script filename $SCRIPT_FILENAME Server address $SERVER_ADDR Server admin $SERVER_ADMIN Server name $SERVER_NAME Server port $SERVER_PORT Server signature $SERVER_SIGNATURE Server software $SERVER_SOFTWARE Unique id $UNIQUE_ID Gateway interface $GATEWAY_INTERFACE Server protocol $SERVER_PROTOCOL Request method $REQUEST_METHOD Query string $QUERY_STRING Request URI $REQUEST_URI Script name $SCRIPT_NAME Berikut ini adalah contoh program untuk mendapatkan informasi-informasi tersebut: #!/bin/sh echo “Content-type: text/plain” echo echo “Greetings: Halo Superman !” echo echo “Apache Environment:” echo “Document root: $DOCUMENT_ROOT” echo “HTTP accept: $HTTP_ACCEPT” echo “HTTP accept charset:
www.infolinux.web.id
$HTTP_ACCEPT_CHARSET” echo “HTTP accept encoding: $HTTP_ACCEPT_ENCODING” echo “HTTP connection: $HTTP_CONNECTION” echo “HTTP host: $HTTP_HOST” echo “HTTP keep alive: $HTTP_KEEP_ALIVE” echo “HTTP user agent: $HTTP_USER_AGENT” echo “Path: $PATH” echo “Remote addr: $REMOTE_ADDR” echo “Remote port: $REMOTE_PORT” echo “Script filename: $SCRIPT_FILENAME” echo “Server addr: $SERVER_ADDR” echo “Server admin: $SERVER_ADMIN” echo “Server name: $SERVER_NAME” echo “Server port: $SERVER_PORT” echo “Server signature: $SERVER_SIGNATURE” echo “Server software: $SERVER_SOFTWARE” echo “Unique id: $UNIQUE_ID” echo “Gateway interface: $GATEWAY_INTERFACE” echo “Server protocol: $SERVER_PROTOCOL” echo “Request method: $REQUEST_METHOD” echo “Query string: $QUERY_STRING” echo “Request URI: $REQUEST_URI” echo “Script name: $SCRIPT_NAME” echo echo “Sleeping time, superman !” #Try to use echo ‘env‘. Looks more complicated, but more informative !
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
TUTORIAL Shell Script
Informasi sistem Untuk kesempatan ini, keamanan sistem akan kita abaikan terlebih dahulu. Pernahkah Anda ingin melihat informasi ruang kosong penyimpanan Anda, daftar proses, informasi memori, informasi CPU, informasi partisi harddisk, informasi file sistem yang dimunt, informasi kernel, user-user dan group-group di sistem via web browser? Bagaimana kalau kita membuatnya sendiri? Sebutlah program yang akan kita buat ini dengan nama x2web. Program x2web ini memiliki kemampuan untuk menampilkan hal-hal yang telah disebutkan sebelumnya via web browser. Interface-nya akan ditampilkan cukup ramah dengan bantuan hyperlink. Dan untuk mempermudah peng-copy-an, x2web hanya akan memiliki satu file saja. Untuk setiap tugas yang dikerjakan, kita akan memproses variabel $QUERY_STRING. Apabila variabel yang satu ini belum diset, maka sebuah menu akan ditampilkan. Sementara apabila $QUERY_STRING memiliki nilai tertentu, maka kita akan melakukan parsing sederhana dan melakukan tugas yang bersesuaian. Kita akan memiliki sebuah fungsi penting, yang kita beri nama wrapper(). Fungsi ini akan melakukan parsing $QUERY_STRING dan melakukan tugas yang bersesuaian. Fungsi lain seperti fungsi signature() hanya akan menampilkan informasi seputar web server. Berikut ini adalah source code selengkapnya. Penjelasan akan diberikan setelahnya. #!/bin/sh PROGNAME=”x2web” VERSION=”0.1a” COPYRIGHT=”$PROGNAME $VERSION, (c) Noprianto, July 2003. GPL.”
function wrapper() { TASK=$(echo $QUERY_STRING | awk -F= ‘{print $2}’) echo “back to menu” echo “<pre>” case $TASK in
df) psax) meminfo) cpuinfo) part) mtab) uname) userlist) | wc -l)
df ;; ps ax ;; cat /proc/meminfo ;; cat /proc/cpuinfo ;; cat /proc/partitions ;; cat /etc/mtab ;; uname -a ;; sum=$(cat /etc/passwd echo “found $sum
users
” cat /etc/passwd | cut -d: f1 grouplist) wc -l)
;; sum=$(cat /etc/group | echo “found $sum
groups
” cat /etc/group | cut -d: -f1 ;; esac echo “” echo “back to menu” signature }
function signature() { echo “
” echo “$COPYRIGHT” echo “$SERVER_SIGNATURE” } echo “Content-type: text/html” echo echo “
” if [ -z $QUERY_STRING ] then echo “” echo “” signature echo “” else wrapper $QUERY_STRING fi Bagaimana? Bukanlah source programnya pun cukup singkat dan sederhana? if [ -z $QUERY_STRING ]
64
INFOLINUX SEPTEMBER 2003
Shell Script
Statistik pengunjung
then
df)
echo “” echo “” signature echo “” else wrapper $QUERY_STRING fi Blok kode ini bertugas untuk menampilkan menu apabila variabel $QUERY_STRING belum diset. Kita menggunakan penguji -z untuk mengetahui apakah suatu string adalah string kosong atau tidak. function wrapper() { TASK=$(echo $QUERY_STRING | awk -F= ‘{print $2}’) echo “back to menu” echo “<pre>” case $TASK in
www.infolinux.web.id
psax) meminfo) cpuinfo) ... ... ... grouplist) wc -l)
df ;; ps ax ;; cat /proc/meminfo ;; cat /proc/cpuinfo ;;
sum=$(cat /etc/group |
echo “found $sum groups
” cat /etc/group | cut -d: -f1 ;; esac echo “” echo “back to menu” signature } Kita akan membahas fungsi wrapper() tersebut. Pertama-tama, kita akan memroses $QUERY_STRING dengan memisahkannya menjadi dua bagian dengan token pemisah adalah tanda sama dengan (=). Untuk itu, kita meminta bantuan kepada program awk. Setelah itu, apa yang kita lakukan hanyalah membaca /proc ataupun file-file lain di sistem. Dengan demikian, kita dapat melihat betapa mudahnya menampilkan informasi sistem Anda ke web browser.
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Shell Script
Kembali ke masalah keamanan. Adalah sangat berbahaya apabila program ini Anda jalankan di lingkungan di mana setiap orang dapat dengan mudah mengaksesnya. Apakah Anda rela apabila setiap orang mengetahui proses apa saja yang sedang berjalan dan kemudian memanfaatkan kelemahan salah satu dari program tersebut? Atau relakah jika setiap orang mengintip setiap rahasia dapur Anda? Tidak. Pembuatan password bisa Anda gunakan. Selain itu, pembuatan direktori terproteksi menggunakan .htaccess juga mungkin akan membantu. Namun, apabila Anda ingin membuat administrasi via web, pelajarilah prinsip kerja webmin.
Statistik pengunjung Mengetahui jumlah pengunjung situs kita selalu menjadi hal yang menyenangkan. Tentunya, setelah bercapai-capai ria membuat website, senyum lebar akan semakin merekah ketika semakin banyak pengunjung yang menyibukkan web server kita. Terkadang, kita perlu untuk mencatat informasi pengunjung seperti tanggal dan waktu, alamat pengunjung dan user agent yang digunakan. Dan sekarang, bagaimana kalau kita membuatnya sendiri? Pertama-tama, apa yang perlu kita lakukan adalah mendefinisikan file untuk menampung semua informasi tersebut. Tempatkan file tersebut di lokasi yang cukup aman dan pastikan user yang menjalankan Apache memiliki hak tulis di lokasi tersebut. Di contoh kali ini, kita akan menyimpannya di /tmp. Setelah itu, kita perlu pula memastikan token yang kita gunakan untuk memisahkan setiap field informasi yang kita simpan. Contoh ini akan menggunakan field ::: (tiga buah titik dua) sebagai pemisah. Prinsip kerjanya sangatlah sederhana. Script akan membaca $QUERY_STRING dan menentukan tugas apa yang akan dikerjakan. Apabila $QUERY_STRING bernilai stat, maka kita akan menulis ke dalam ‘database’. Sementara, apabila $QUERY_STRING adalah show, maka kita akan menampilkan semua isinya ke web browser. Berikut ini adalah source code selengkapnya.
#!/bin/sh
stat) do_stat;; show) do_show;; esac
FSTAT=/tmp/stats } function do_stat() { test ! -f $FSTAT && touch $FSTAT echo “$(date):::$REMOTE_ADDR:::$HTTP_USER_ AGENT:::” >> $FSTAT } function do_show() { echo “<pre>” sum=$(cat $FSTAT | wc -l 2>/dev/ null) echo “$sum records found” echo “
” test -f $FSTAT && cat $FSTAT | sed -e “s/:::/
/g” echo “” } function wrapper() { case $1 in
www.infolinux.web.id
echo “Content-type: text/html” echo
if [ ! -z $QUERY_STRING ] then wrapper $QUERY_STRING fi exit 0 Bagaimana pendapat Anda tentang pemrograman CGI dengan shell script? Apabila seseorang benar-benar mendalami seni pemrograman shell, maka aplikasi CGI yang berkualitas tinggi pun dapat diciptakan. Hanya, aspekaspek keamanan pun harus senantiasa diperhatikan agar aplikasi tersebut tidak menjadi senjata makan tuan. Noprianto ([email protected])
INFOLINUX SEPTEMBER 2003
65
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Statistik Lagu XMMS
Statistik Lagu XMMS Senang mendengarkan lagu MP3 atau OGG menggunakan XMMS? Lagu mana yang paling sering Anda dengarkan? Lagu mana yang paling jarang Anda dengarkan? Tidak ingat? Mari catat dengan membuat statistik lagu-lagu yang diputar dengan XMMS!
Song Change XMMS sendiri sebenarnya menyediakan sarana bagi kita untuk mencatat lagu-lagu apa saja yang telah kita dengarkan. Hal tersebut dapat dilakukan dengan mencatatkan nama file lagu atau judul lagu setiap kali terjadi pergantian lagu. Dengan plug-in song change, semua hal tersebut dapat dilakukan dengan mudah. Bukalah XMMS dan bukalah window Preferences (bisa Anda lakukan dengan menekan kombinasi tombol CTRL+p). Masih di window Preferences, pilihlah
66
INFOLINUX SEPTEMBER 2003
tab Effects/General Plugins. Kemudian, di bagian bawah tab tersebut, pilihlah General plugin Song Change, dan kliklah tombol Configure. Jangan lupa untuk mengaktifkan pilihan Enable plugin sesudahnya. Sebuah window dengan judul Song Change Configuration akan terbuka untuk Anda. Di bagian song change, Anda akan menjumpai sebuah input box di mana perintah shell script dapat diberikan begitu pergantian lagu terjadi. Apa yang akan kita lakukan adalah mencatat informasi lagu tersebut. Sebagai contoh, pemberian perintah: echo “%f” >> ~/xmms.log akan mengisi file xmms.log di home directory Anda dengan semua nama file lagu yang telah Anda dengarkan. Apa saja selain nama file yang bisa dimasukkan? Berikut ini adalah daftar selengkapnya: % F – Frekuensi (dalam hertz) %c – Jumlah channel %f – Nama file dengan path % l – panjang lagu dalam milidetik % n – Nama lagu %r – Rating lagu % s – Nama lagu %t – Posisi dalam playlist
Kita memiliki dua field dengan pemisah field adalah tiga buah tanda titik dua (:::). Field <jumlah_didengarkan> akan selalu ditambahkan ketika lagu yang sama diputar kembali. Dengan demikian, kita memiliki entri yang unik di dalam database tersebut. Penampilan datanya, baik ke console, ataupun ke web, akan menjadi sangat mudah.
Cara kerja program Program yang akan kita bangun adalah program shell script dengan sedikit penggunaan awk. Kita akan memberikan nama xmmsstat untuk program ini. Selain dapat menampilkan laporan di console, program juga siap menjadi aplikasi CGI dan dapat menampilkan laporan di web. Apa yang pertama-tama kita periksa adalah variabel $QUERY_STRING. Apabila variabel ini di-set atau bukan merupakan string kosong, maka kita akan menganggapnya aplikasi CGI dan akan memanggil fungsi yang bersesuaian untuk menampilkan laporan di web. Apabila tidak ada variabel $QUERY_STRING, maka kita akan memeriksa keberadaan parameter pertama pada program. Apabila tidak ada
Artikel ini akan memfokuskan pada nama file lagu yang telah didengarkan.
Struktur data Karena kita akan mengurutkan lagu-lagu mana saja yang paling sering didengar sampai yang paling jarang didengar, maka kita tidak dapat memasukkan lagulagu apa saja yang telah kita dengar begitu saja ke dalam suatu file. Alasannya, kita perlu menambahkan
www.infolinux.web.id
H
ampir semua penikmat musik di Linux pasti mengenal XMMS. Wajar adanya karena XMMS menawarkan kemiripan yang luar biasa dengan Winamp, salah satu pemutar audio dan video paling terkenal di dunia ini. Selain itu, tentunya XMMS pun sangat andal untuk digunakan. Untuk koleksi musik, hampir semua penikmat musik mengoleksi musikmusiknya baik secara manual ataupun menggunakan program pengatur dan pendata lagu. Penulis sendiri mengaturnya secara manual. Dari pengalaman penulis sebagai penikmat musik blues dan lagu-lagu lama, semua lagu yang dimasukkan di dalam playlist hanya akan didengarkan saja. Akan tetapi, terkadang ada lagu yang dalam situasi dan kondisi tertentu menjadi sangat menarik untuk didengar sehingga didengar berulang-ulang. Beberapa saat yang lalu, penulis merasa ingin mengetahui lagu-lagu apa aja yang sebenarnya paling sering di dengarkan. Dan tentu saja juga lagu yang paling jarang didengarkan. Suatu hari, lagu-lagu yang paling jarang didengarkan akan menghilang dari harddisk.
jumlah lagu tersebut setelah didengarkan. Apabila yang satu ini telah dikerjakan, maka penampilan dan pengurutannya akan menjadi jauh lebih mudah. Untuk mudahnya, kita akan membuat sebuah program yang akan menulis dan membaca dari sebuah file database. Format dari file database tersebut adalah: <jumlah_didengarkan>:::
Window Preferences XMMS
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
parameter apapun yang diberikan dan $QUERY_STRING bernilai kosong, maka kita akan menampilkan laporan di console. Sebaliknya, apabila ada parameter pertama, maka kita akan melakukan pengubahan pada database. Untuk fungsi pengubahan database, pertama-tama kita akan menyaring database asli dan menampilkan isinya ke file sementara kecuali record nama file yang ingin dimasukkan. Apabila nama file tersebut ternyata diberikan untuk kali pertama, maka isi file sementara akan sama persis dengan database asli. Kemudian, langkah kedua adalah menyaring isi database asli dan mengambil record yang bersesuaian dengan nama file yang dimasukkan. Apabila ternyata nama file tersebut diberikan untuk pertama kalinya, maka secara sederhana kita akan memasukkan record 1::: karena lagu tersebut diputar untuk pertama kalinya. Apabila ternyata lagu yang ingin dimasukkan sudah pernah diputar sebelumnya, maka kita akan memisahkan kedua field tersebut, kemudian menambahkan nilai untuk field <jumlah_didengarkan> dan kemudian memasukkan kembali record tersebut ke database. Sementara untuk penampilan laporan, sederhananya, kita hanya menampilkan isi database dalam keadaan terurut dan memisahkan setiap barisnya berdasarkan token pemisah field, yaitu tiga buah tanda titik dua (:::). Menggunakan awk, kita akan mencetak karakter # sejumlah field <jumlah_didengarkan> diikuti dengan nama file lagu. Untuk fungsi aplikasi CGI, secara sederhana kita hanya menambahkan header dan kemudian memanggil fungsi penampilan laporan.
Kode! Kode! Kode! Kode yang akan kita buat sangatlah pendek. Efektifnya, tidak akan melebihi 50 baris. Kita akan memulainya langkah demi langkah:
1. Definisi variabel penting PROGNAME=”XmmsStat” VERSION=”0.1a”
Statistik Lagu XMMS
Window konfigurasi Song Change
COPYRIGHT=”$PROGNAME $VERSION, (c) Noprianto, July 2003. GPL.” DATA=”/home/users/nop/xmmsstatdata” TEMP=/tmp/$$.xmmsstat Jangan lupa untuk mengatur variabel DATA agar sesuai dengan konfigurasi Anda.
2. Definisi fungsi yang diperlukan function del() { rm -rf $TEMP rm -rf /tmp/*.xmmsstat } Fungsi del() bertugas untuk melakukan pembersihan file-file sementara. function stat() { cat $DATA | grep -wvi “$1” > $TEMP UPDATE=”$(cat $DATA | grep -wi “$1”)” mv $TEMP $DATA del if [ ! -z “$UPDATE” ] then SONG=”$(echo “$UPDATE” | awk -F”:::” ‘{print $2}’)” FREQ=”$(expr $(echo “$UP DATE” | awk -F”:::” ‘{print $1}’) + 1)”
www.infolinux.web.id
UPDATE=”$FREQ:::$SONG” else UPDATE=”1:::$1" fi echo “$UPDATE” >> $DATA } Fungsi stat() bertugas untuk mengubah database. Di sini, penggunaan program grep sangatlah membantu. Dengan memberikan opsi -v pada program grep, kita bisa mendapatkan hasil inversi penyaringan. Dengan opsi -w, kita dapat menyaringnya perkata. Untuk menambahkan field <jumlah_didengarkan>, kita menggunakan program expr. function show() { cat $DATA | sort -r | awk -F”:::” ‘ { ORS=”” for (i = 1 ; i <= $1 ; i++ ) { print “#”; } print “ “$2”\n”; } ‘ }
INFOLINUX SEPTEMBER 2003
67
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Statistik Lagu XMMS
Laporan di web
Fungsi show() bertugas untuk menampilkan laporan. Sederhananya, kita hanya menampilkan isi database dan memberikan keluarannya ke program sort yang telah siap menerima dengan senang hati. Kemudian, dengan program awk, kita pun memisahkan fieldnya dengan token tiga buah tanda titik dua (:::). Sintaks awk yang mirip dengan bahasa C cukup fleksibel untuk digunakan. Dengan awk, kita menampilkan karakter # sejumlah field <jumlah_didengarkan>. function become_cgi() { test $QUERY_STRING != “show” && return echo “Content-type: text/plain” echo show
Laporan di console
then test -z “$1” && show && exit 0 test “$1” != “%f” && stat “$1” exit 0 else become_cgi exit 0 fi del Pertama-tama, kita memeriksa keberadaan database. Apabila database tidak tersedia, maka kita akan membuatnya dengan program touch. Selanjutnya, kita akan memeriksa apakah variabel $QUERY_STRING diset atau tidak. Dan seperti yang telah dibahas, kita akan mendelegasikan setiap tugas kepada fungsi yang bersesuaian.
Penggunaan } Fungsi yang satu ini benar-benar tidak berguna. Hanya memeriksa apakah $QUERY_STRING bernilai show. menampilkan header sebagai aplikasi CGI dan kemudian memanggil fungsi show(). Berbagai perbaikan seperti pembuatan grafik batang dengan penggunaan tabel dapat ditambahkan di masa mendatang.
3. Fungsi utama test ! -f $DATA && touch $DATA
if [ -z $QUERY_STRING ]
68
INFOLINUX SEPTEMBER 2003
Semuanya kembali kepada pengaturan sistem Anda masing-masing. Setelah itu, buka kembali window konfigurasi untuk plugin Song Change dan berikan perintah berikut ini pada input box yang telah disediakan: /usr/lib/cgi-bin/xmmsstat “$(basename “%f”)”
Letakkanlah program tersebut di direktori cgi web server (penulis menggunakan Apache) Anda agar dapat dengan mudah diakses bagi Anda yang ingin menampilkan juga laporan di web. Lokasi cgi umumnya di bawah direktori instalasi Apache (/usr/lib/cgi-bin untuk distro Debian). Apabila Anda hanya ingin menjadikannnya sebagai aplikasi console biasa, penting juga untuk menambahkan lokasi program ini ke dalam $PATH atau mengopikan program ini ke lokasi yang telah termasuk dalam $PATH. Membuat link file mungkin merupakan alternatif yang aman dan tidak mengotori sistem.
www.infolinux.web.id
Program basename digunakan untuk mendapatkan nama filenya saja. Bagi Anda yang ingin mengakses laporan via web browser, berikanlah alamat berikut ini: http:///cgi-bin/xmmsstat?show Bagi Anda yang ingin menampilkan laporan di console, berikanlah perintah berikut ini: /usr/lib/cgi-bin/xmmsstat Gantilah /usr/lib/cgi-bin sesuai dengan konfigurasi Anda masing-masing. Demikianlah, kini kita dapat melihat lagu apa saja yang paling sering kita buka. Lagu mana yang paling jarang dibuka pun dapat dipertimbangkan untuk dihapus. Program ini masih memiliki banyak kekurangan, terutama pada penampilan untuk halaman web. Selain itu, ada baiknya juga bagi kita untuk menampilkan tanggal dan waktu pemutaran untuk setiap lagu. Hal tersebut akan menjadikannya lebih informatif. Program ini tersedia bebas untuk dimodifikasi dan disebarluaskan. Sebagai mana halnya kebebasan di dunia free software. Noprianto ([email protected])
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Manajemen Modul Kernel
Membangun Manajemen Modul Kernel yang Ramah Dengan tool-tool standar seperti bash dan dialog, kita dapat membangun interface yang ramah untuk manajemen modul kernel. Karena insmod dan rmmod terkadang merepotkan.
K
ehadiran sistem modul di kernel dalam beberapa hal sangatlah membantu kita. Dengan mudah kita dapat menambahkan apa yang dibutuhkan oleh kernel maupun mengurangi apa yang sudah tidak dibutuhkan lagi. Kernel tidak lagi menjadi sebesar raksasa dan begitu rakus. Walau demikian, terkadang proses memasukkan atau menghapus modul kernel dapat menjadi cukup merepotkan. Salah satu contohnya adalah ketika Anda ingin memasukkan modul dengan fungsi tertentu, namun nama modulnya tidak Anda ketahui. Anda pun segera menuju direktori /lib/modules/ dan mulai mencaricari. Karena modul kernel diletakkan dalam berbagai direktori, maka navigasinya akan cukup merepotkan. Menggunakan utiliti seperti Midnight Commander mungkin bisa membantu. Pada distro Debian, sebuah program dengan nama modconf sangatlah bermanfaat untuk melakukan navigasi pada modul-modul kernel dan sekaligus melakukan manajemen sederhana. Dengan menjalankan modconf, Anda akan diberikan daftar modul kernel dan keterangan apakah modul tersebut telah diinstal atau belum. Di program ini pula, Anda dapat memasukkan atau menghapus modul kernel dengan satu dua kali penekanan tombol ENTER. Siapkan editor teks Anda dan kita akan segera memulai pekerjaan kita. Berikut ini adalah langkah-langkahnya:
kernel yang digunakan, kemudian akan mendaftar seluruh modul kernel. Hal tersebut bisa didapat menggunakan program uname dan ls. Kemudian, dengan program dialog, kita akan membuat navigasi modul per direktori. Dalam artian, pengguna dapat masuk ke suatu direktori yang dapat mengandung direktori lain atau modul kernel. Apabila pengguna memilih suatu direktori, maka tindakan default dari program adalah masuk ke direktori tersebut dan mandaftar seluruh modulnya. Dalam mendaftar seluruh modul tersebut, program akan mencoba mengetahui apakah modul tersebut telah dimasukkan ke dalam kernel. Kita akan menginformasikan hal tersebut kepada pengguna. Apabila pengguna memilih suatu modul, maka tindakan default dari program adalah memeriksa apakah modul tersebut telah dimasukkan ke dalam kernel. Apabila modul tersebut telah dimasukkan, maka kita akan menanyakan apakah pengguna akan menghapus modul tersebut dari kernel. Apabila modul tersebut belum dimasukkan ke kernel, maka kita akan menanyakan apakah pengguna ingin memasukkan modul tersebut ke dalam kernel. Kekurangan utama dari program ini adalah langsung melakukan terminasi (keluar) apabila pengguna menekan tombol Cancel. Program ini akan kita beri nama mymodconf.
1. Fitur program Pertama-tama, tentunya kita perlu mengetahui dahulu apa yang akan kita buat. Secara umum, program yang kita bangun mampu untuk mendeteksi versi
2. Membuat beberapa variabel awal yang dibutuhkan Sebagai suatu aplikasi standar, kita akan mendefinisikan beberapa variabel seperti
www.infolinux.web.id
informasi versi dan hak cipta. Kemudian, kita juga perlu untuk membuat file sementara yang dibutuhkan oleh program dialog. Berikut ini adalah beberapa variabelnya: TEMP=/tmp/$$.mymodconf VERSION=0.1a COPYRIGHT=”(c) Noprianto, June 2003. GPL” Setelah itu, kita akan mencoba untuk mendapatkan versi kernel dan direktori modul kernel. Setelah itu, apa yang kita dapatkan akan diasosiasikan ke variabelvariabel berikut: KERNEL_VERSION=$(uname -r) KERNEL_MODULES_DIR=/lib/modules/ $KERNEL_VERSION/kernel/ selected=”” WORKING=$KERNEL_MODULES_DIR/ $selected Variabel KERNEL_VERSION dimaksudkan sebagai versi kernel yang sedang digunakan. Versi kernel perlu didapatkan untuk mengetahui lokasi direktori modul kernel yang disimpan dalam variabel KERNEL_MODULES_ DIR. Variabel selected dimaksudkan untuk mendapatkan apa yang dipilih oleh pengguna. Variabel selected juga akan mempengaruhi lokasi direktori kerja kita yang disimpan dalam variabel WORKING. Selanjutnya, untuk memperindah program kita, kita akan membuat alias untuk program dialog berikut agar program kita memiliki tampilan yang seragam: alias dialog=”dialog —backtitle ‘My Kernel Module Configurator v$VERSION ($KERNEL_VERSION)’”
INFOLINUX SEPTEMBER 2003
69
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
mymodconf
Manajemen Modul Kernel
Mendaftar modul dan statusnya
3. Mendefinisikan beberapa fungsi yang diperlukan
Kita akan membahas baris pertama:
Berikutnya adalah mendefinisikan fungsi yang dibutuhkan dalam program kita. Dalam hal ini, kita akan mendefinisikan tiga fungsi: deltemp(), is_installed() dan getfiles(). Masing-masing akan menghapus file sementara, mengetahui apakah suatu modul telah dimasukkan dalam kernel atau belum dan mendapatkan file-file dalam direktori modul kernel. Kita akan memulai dengan fungsi yang paling sederhana: deltemp(). Fungsi ini hanya memiliki satu perintah untuk menghapus file sementara. Fungsi ini tidak memerlukan penjelasan lebih lanjut. function deltemp() { rm -rf $TEMP }
MODULE=‘echo $i | awk -F. ‘{print $1}’‘
Berikutnya adalah fungsi is_installed(), yang berfungsi untuk mengetahui apakah suatu modul telah dimasukkan ke dalam kernel atau belum. Perlu dicatat, fungsi ini belumlah sempurna dan terkadang mengembalikan hasil yang tidak sesuai. Penjelasan fungsi akan diberikan setelahnya. function is_installed() { MODULE=‘echo $i | awk -F. ‘{print $1}’‘ INSTALLED=‘lsmod | grep -w $MODULE | wc -l 2>/dev/null‘ return $INSTALLED }
70
INFOLINUX SEPTEMBER 2003
Baris ini dimaksudkan untuk menghilangkan ekstensi .o dari nama file yang diterima sebagai parameter pertama fungsi ini. Dengan menggunakan program awk, kita memisahkan nama file tersebut dan mengambil bagian pertamanya. Hal ini sejauh ini bekerja, walau perlu diperhatikan dan diperbaiki apabila nama file modul memiliki lebih dari satu karakter titik. Sejauh ini, nama file modul umumnya hanya memiliki satu karakter titik. INSTALLED=‘lsmod | grep -w $MODULE | wc -l 2>/dev/null‘ Kemudian, variabel INSTALLED dimaksudkan untuk mengetahui apakah modul telah dimasukkan ke dalam kernel. Cara ini bahkan lebih berbahaya daripada baris sebelumnya. Saran dan kritik diharapkan. Untuk mengetahui suatu modul telah dimasukkan ke kernel atau belum, secara sederhana, kita hanya menjalankan perintah lsmod yang akan mendaftar modul-modul kernel yang telah dimasukkan. Hasil keluaran tersebut kita saring sesuai dengan nama modul yang ingin diperiksa. Untuk meningkatkan akurasi, kita akan memberikan opsi -w pada program grep yang berfungsi untuk melakukan saringan per kata (dalam beberapa kondisi, opsi -w ini justru akan merepotkan).
www.infolinux.web.id
Kemudian, kita akan sampai pada fungsi berikutnya: getfiles(). Fungsi ini akan mendaftar file-file dalam direktori. Apabila yang didapatkan adalah file, maka fungsi ini juga akan memeriksa apakah modul tersebut telah dimasukkan ke dalam kernel. Secara umum, fungsi ini dimaksudkan untuk menyusun rangkaian parameter bagi program dialog. function getfiles() { files2=”” files=”$(ls $1)” for i in $files do if [ -d $1/$i ] then files2=”$files2 $i $i” else is_installed $i if [ $? -eq 0 ] then files2=”$files2 $i not-installed” else files2=”$files2 $i installed” fi fi done } Baris berikut ini dimaksudkan untuk mendapatkan file-file dalam direktori yang diberikan: files2=”” files=”$(ls $1)”
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Manajemen Modul Kernel
Konfirmasi instalasi modul
Kemudian, kita akan membahas blok kode berikut ini: for i in $files do if [ -d $1/$i ] then files2=”$files2 $i $i” else is_installed $i if [ $? -eq 0 ] then files2=”$files2 $i notinstalled” else files2=”$files2 $i installed” fi fi done Algoritmanya adalah: Untuk setiap file dalam suatu direktori, periksalah apakah file tersebut adalah file biasa atau direktori. Apabila file tersebut adalah direktori, maka susunlah nilai kembalian berikut ini: files2=”$files2 $i $i” Dalam penampilan menu di program dialog, kita butuh memberikan pasangan <definisi> untuk setiap item menu. Untuk itulah, kita perlu menyusun nilai kembalian tersebut. Akan tetapi, apabila jika file tersebut adalah sebuah file biasa, maka kita akan memeriksa apakah modul tersebut telah dimasukkan ke dalam modul atau belum. Apabila telah dimasukkan, maka
Keberhasilan
instalasi
kita akan menyusun nilai kembalian berikut ini: files2=”$files2 $i installed” sebaliknya, kita akan menyusun nilai kembalian berikut ini: files2=”$files2 $i not- installed”
then kode kode else kode kode fi done
4. Program utama Pada prinsipnya, program utama hanyalah berfungsi sebagai navigator yang akan bekerja terus menerus sampai pengguna menekan tombol cancel. Untuk itu, kita akan meletakkan semua kode dalam blok perulangan berikut ini: while [ 1 ] do kode kode done
Selanjutnya, kode-kode apakah yang harus dimasukkan apabila pengguna memilih direktori? Intinya, kode-kode tersebut akan masuk ke direktori dan mendaftar file-file di dalamnya. Dengan demikian, blok while [ 1 ] kita akan bertambah panjang menjadi berikut: while [ 1 ] do WORKING=”$WORKING/$selected” if [ -d $WORKING ] then getfiles $WORKING dialog —menu “category: $selected” 20 60 10 $files2 2> $TEMP if [ $? -ne 0 ] then exit 1 else selected=‘cat $TEMP‘ deltemp fi else kode kode fi
Hal berikut yang harus diperhatikan adalah perlakuan ketika pengguna memilih suatu file atau direktori. Tentunya, apabila pengguna memilih suatu file, maka kita akan memeriksa modul tersebut. Apabila pengguna memilih direktori, maka kita akan masuk ke direktori tersebut dan mendaftar semua modulnya. Untuk itu, blok while [ 1 ] kita akan berkembang menjadi demikian: while [ 1 ] do WORKING=”$WORKING/$selected” if [ -d $WORKING ]
www.infolinux.web.id
done
INFOLINUX SEPTEMBER 2003
71
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Manajemen Modul Kernel
Untuk mendaftar file di direktori yang dipilih pengguna, kita akan memanggil fungsi getfiles() dengan parameter adalah variabel $WORKING. getfiles $WORKING Kemudian, kita akan menampilkan menu dengan item-item sesuai kembalian dari fungsi getfiles() tersebut. dialog —menu “category: $selected” 20 60 10 $files2 2> $TEMP Tanda 2>$TEMP dimaksudkan agar segala sesuatu yang dipilih pengguna dimasukkan dalam file yang namanya disimpan di variabel $TEMP. Hal ini adalah ciri khas program dialog yang menyimpan pilihan pada stderr. Tidak lupa, kita juga memeriksa tombol apa yang ditekan oleh pengguna. Program dialog akan mengembalikan nilai 0 apabila penekan menekan tombol OK dan mengembalikan nilai 1 apabila penekan menekan tombol Cancel. Apabila penekan menekan tombol cancel, maka kita akan segera mengakhiri hidup program. Hal yang satu ini bukanlah hal yang baik. Seharusnya, kita akan kembali ke menu utama. Namun apabila pengguna memilih tombol OK, maka kita akan mengambil item menu yang dipilih dengan membaca file yang namanya disimpan di dalam variabel $TEMP. Kemudian, file $TEMP segera kita hapus dengan memanggil fungsi deltemp(). Sekarang, bagaimana kalau pengguna memilih file dan bukannya direktori? Kode-kode apa yang harus dimasukkan pada blok while [ 1 ] kita yang masih kosong? Pada prinsipnya, kita akan memeriksa apakah modul tersebut telah dimasukkan ke dalam kernel atau belum. Apabila telah dimasukkan ke dalam kernel, maka aksi yang akan ditawarkan ke pengguna adalah uninstall. Sebaliknya, aksi yang akan ditawarkan adalah install. Berikut ini adalah kode programnya: is_installed $i if [ $? -eq 0 ] then
72
INFOLINUX SEPTEMBER 2003
TODO=”install”
then
TODO=”uninstall”
else
else
exit 1
fi kemudian, kita akan menampilkan kotak dialog dan menanyakan kepada user untuk melakukan aksi yang ditawarkan. Apabila pengguna memilih tidak, maka kita akan segera melakukan terminasi program. Sekali lagi, yang satu ini harus diperbaiki. dialog —yesno “$TODO module $selected? “ 10 40 if [ $? -ne 0 ] then exit 1 else kode kode fi Apabila pengguna memilih tombol Yes, maka kita akan memeriksa aksi yang dilakukan pada modul tersebut. Sekali lagi kita akan memeriksa status modul kernel tersebut. Apabila aksinya adalah install (berarti modul belum dimasukkan ke dalam kernel), maka kita akan menampilkan sebuah kotak dialog di mana pengguna bisa memasukkan informasi tambahan sebagai parameter bagi program insmod. Setelah itu, kita kana menjalankan program insmod dengan segala informasi yang telah kita kumpulkan. Apabila aksi yang akan dilakukan adalah uninstall (berarti modul telah dimasukkan ke dalam kernel), maka kita akan menghapus modul tersebut dari kernel dengan program rmmod. Dan selanjutnya, kita akan memeriksa apakah program insmod dan rmmod tersebut telah bekerja dengan baik. Informasi tersebut kemudian akan kita tampilkan kepada pengguna. Berikut adalah blok kode programnya: if [ $INSTALLED -eq 0 ] then dialog —nocancel — inputbox “additional information for \ $selected” 10 40 2>$TEMP if [ $? -ne 0 ]
www.infolinux.web.id
addinfo=‘cat $TEMP‘ deltemp insmod $MODULE $addinfo 1>/dev/null 2>&1 fi else rmmod $MODULE 1>/dev/null 2>&1 fi if [ $? -ne 0 ] then RESULT=”failed” EXIT=1 else RESULT=”succeded” EXIT=0 fi dialog —msgbox “$TODO $selected $addinfo: $RESULT” 10 40 exit $EXIT Berikut ini adalah source code selengkapnya dari program mymodconf: #!/bin/sh TEMP=/tmp/$$.mymodconf VERSION=0.1a COPYRIGHT=”(c) Noprianto, June 2003. GPL” KERNEL_VERSION=$(uname -r) KERNEL_MODULES_DIR=/lib/modules/ $KERNEL_VERSION/kernel/ selected=”” WORKING=$KERNEL_MODULES_DIR/ $selected alias dialog=”dialog —backtitle ‘My Kernel Module Configurator v$VERSION ($KERNEL_VERSION)’” function deltemp() { rm -rf $TEMP } function is_installed() { MODULE=‘echo $i | awk -F. ‘{print $1}’‘
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
TUTORIAL Manajemen Modul Kernel
INSTALLED=‘lsmod | grep -w $MODULE | wc -l 2>/dev/null‘ return $INSTALLED } function getfiles() { files2=”” files=”$(ls $1)” for i in $files do if [ -d $1/$i ] then files2=”$files2 $i $i” else is_installed $i if [ $? -eq 0 ] then files2=”$files2 $i not-installed” else files2=”$files2 $i installed” fi fi done }
$selected? “ 10 40 if [ $? -ne 0 ] then exit 1 else if [ $INSTALLED -eq 0 ] then dialog —nocancel — inputbox “additional information for \ $selected” 10 40 2>$TEMP if [ $? -ne 0 ] then exit 1 else addinfo=‘cat $TEMP‘ deltemp insmod $MODULE $addinfo 1>/dev/null 2>&1 fi else rmmod $MODULE 1>/dev/null 2>&1 fi
if [ $? -ne 0 ] then RESULT=”failed” EXIT=1 else RESULT=”succeded” EXIT=0 fi dialog —msgbox “$TODO $selected $addinfo: \ $RESULT” 10 40 exit $EXIT fi fi done Demikianlah proses pembuatan mymodconf. Apabila fungsi-fungsi pemeriksaan modul dan antar muka program ini dibuat lebih ramah, kemudian program dialog kita gantikan dengan gdialog, maka sebuah aplikasi GUI yang ramah akan kita hasilkan. Bagaimana pendapat Anda? Apakah program ini mempermudah Anda untuk bekerja dengan modul kernel? Noprianto ([email protected])
while [ 1 ] do WORKING=”$WORKING/$selected” if [ -d $WORKING ] then getfiles $WORKING dialog —menu “category: $selected” 20 60 10 $files2 2> $TEMP if [ $? -ne 0 ] then exit 1 else selected=‘cat $TEMP‘ deltemp fi else is_installed $i if [ $? -eq 0 ] then TODO=”install” else TODO=”uninstall” fi dialog —yesno “$TODO module
www.infolinux.web.id
INFOLINUX SEPTEMBER 2003
73
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Clam AntiVirus
Clam AntiVirus untuk Mail Server di Linux Linux memang tahan terhadap virus Windows. Tapi sebagai email server, Linux tidak mampu menahan virus jika tidak ada program antivirus. Anda tidak perlu khawatir, karena dengan mudah dan murah Anda dapat menginstalasi Clam AntiVirus.
P
enyebaran virus melalui e-mail menempati urutan pertama menurut Symantec Security Response dengan tiga dari empat Top Virus Threat setengah tahun 2003 pertama ini adalah virus atau worm yang menyebar melalui e-mail. Dengan demikian, instalasi antivirus pada mail server seharusnya menjadi kewajiban bagi setiap administrator mail server. Harga antivirus komersial yang bisa digunakan pada mail server bervariasi dari mulai US$149. Itu pun hitungannya bervariasi mulai dari per domain, per mailbox atau per instalasi, dan harga tersebut belum termasuk biaya untuk langganan update basis data virus. Harga tersebut akan terasa berat jika penggunaannya bukan untuk komersial. Clam AntiVirus (ClamAV) hadir sebagai solusi baik untuk pengguna nonkomersial maupun komersial yang memerlukan solusi antivirus yang tidak mahal. Sekarang ClamAV terbaru adalah versi 0.54. ClamAV adalah antivirus yang dipublikasikan menggunakan lisensi GNU GPL2 dan menggunakan basis data virus dari OpenAntiVirus, sebuah antivirus yang juga gratis. Akan tetapi, berbeda dengan OpenAntiVirus yang ditulis dalam Java, ClamAV ditulis dalam C dan basis datanya secara teratur diupdate. ClamAV juga mampu mendeteksi virus–virus polymorphic. ClamAV dapat digunakan di Linux, Solaris, FreeBSD, OpenBSD, NetBSD, AIX, Mac OS X, Cygwin B20 pada berbagai arsitektur seperti Intel, Alpha, Sparc, Cobalt MIPS, PowerPC, dan RISC 6000. MTA (Mail Transfer Agent) yang didukung (dan/atau mendukung)
74
INFOLINUX SEPTEMBER 2003
ClamAV juga semakin lama semakin banyak. Dalam artikel ini, penulis hanya akan membahas instalasi ClamAV di Linux dengan MTA Postfix. Sedangkan untuk pengguna MTA qmail dan qmail-scanner, silakan membaca artikel http:// people.cakraweb.com/~asfik/writings/ qmail-scanner-clam.html.
terinstal), yaitu dengan menjalankan perintah: Perl –MCPAN –eshell Bila Anda belum pernah menggunakannya, Anda akan diminta untuk memasukkan beberapa parameter. Setelah selesai akan keluar prompt seperti di bawah: cpan>
Persiapan Download ClamAV dari http:// www.clamav.org/stable/index.html. Anda memerlukan Perl dan Amavis-ng sebagai interface dari Postfix ke ClamAV. Biasanya Perl sudah terinstall pada sebuah sistem Linux. Bila belum terinstal, Perl dapat di-download dari http://www.perl.org. Download dan instal Amavis-ng dari http:// www.sourceforge.net/projects/amavis. Anda juga memerlukan modul–modul perl sebagai berikut: Archive::Tar Archive::Zip Compress::Zlib Config::IniFiles Convert::TNEF Convert::Uulib File::Mmagic IO::Stringy MIME::tools MailTools Libnet Modul–modul di atas diperlukan untuk mengolah e-mail dan memecahnya menjadi bagian–bagian yang akan diperiksa ClamAV. Untuk menginstalasi modul–modul tersebut, penulis menyarankan untuk menggunakan modul perl CPAN (biasanya juga sudah
www.infolinux.web.id
Kemudian pada prompt tuliskan install . Keuntungannya adalah Anda akan memperoleh modul versi terbaru dan proses instalasinya otomatis, termasuk apabila ada modul tambahan yang perlu diinstal lebih dahulu. Bila Anda lebih suka mencari modul– modul tersebut sendiri dan menginstalnya dari rpm, silakan mencarinya di http://rpmfind.net. Bila Anda lebih suka menggunakan source file berbentuk tar.gz untuk diinstal manual, silakan mencari modul–modul tersebut di http://cpan.perl.org. Kemudian agar bisa memindai attachment terkompres, Amavis-ng juga membutuhkan paket–paket kompresi arc, lha, unarj, unrar, dan zoo.
Proses instalasi Jika menginstal ClamAV untuk kali pertama, Anda perlu membuat user account dan group account untuk ClamAV. Kita namakan saja clamav. # groupadd clamav # useradd -g clamav -s /bin/false -c “Clam AntiVirus” clamav # passwd –l clamav Baris terakhir untuk memastikan bahwa user clamav terkunci dan account
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Clam AntiVirus
tidak dapat digunakan untuk login. Jangan tambahkan user atau group account ini ke group khusus manapun. Kemudian, extract, configure, compile dan install Clam AV: $ tar zxpvf clamav-x.yz.tar.gz $ cd clamav-x.yz $ ./configure; make $ su -c “make install”
Akan terdeteksi adanya satu virus dalam paket ClamAV-x.yz.tar.gz. Ini bukan virus sungguhan, melainkan hanya sebagai alat untuk menguji kerja anti virus yang baru kita instalasi. ClamAV menyediakan utility freshclam untuk memperbaharui basis data virus. Ada dua cara untuk secara rutin menjalankannya. Pertama menggunakan menjalankan freshclam sebagai daemon. # freshclam -d -c 2 -l /var/log/clamupdate.log Jangan lupa tambahkan baris ini ke startup script agar utiliti tersebut dijalankan saat restart system. Cara kedua adalah menggunakan cron untuk menjalankan utiliti tersebut. Tambahkan baris seperti di bawah ke crontab milik root atau clamav: 0 8 * * * /usr/local/bin/freshclam —quiet -l / var/log/clam-update.log Kemudian extract, compile dan install Amavis-ng dengan langkah berikut ini: $ tar xvfz amavis-ng_0.1.6.4.orig.tar.gz $ cd amavis-ng-0.1.6.4.orig/ $ perl Makefile.PL $ make $ su -c “make install” $ cp amavis-ng-0.1.6.4.orig/etc/amavis.conf /etc/amavis-ng/amavis.conf Berikut adalah baris yang perlu Anda sesuaikan di amavis.conf: mail-transfer-agent = Postfix virus-scanner = CLAM
Setelah selesai, coba memindai file source clamAV. [root@office mail]# clamscan clamavx.yz.tar.gz clamav-x.yz.tar.gz: ClamAV-Test-Signature FOUND
Website Clam AntiVirus
Dan akhirnya sesuaikan path ke clamscan dalam bagian [CLAM]: clamscan = /usr/local/bin/clamscan Menggunakan antivirus ini sebagai content-filtering pada Postfix sangat mudah. Edit file /etc/postfix/master.cf dan tambahkan baris berikut: filter unix - n n - - pipe flags=Rq user=mail argv=/usr/bin/amavis ${sender} — ${recipient} Dan ubah baris di bawah ini: smtp inet n - n - - smtpd menjadi: smtp inet n - n - - smtpd -o content_filter=filter: Bila Anda ingin antivirus hanya memindai e-mail masuk, tapi tidak memindai e-mail keluar atau yang di relay, bisa juga baris di atas menjadi seperti berikut: 192.168.0.1:smtp inet n - n - - smtpd -o smtpd_client_restrictions=permit_mynetworks,reject 127.0.0.1:smtp inet n - n - - smtpd -o smtpd_client_restrictions=permit_mynetworks,reject 212.212.212.xxx:smtp inet n - n - -
www.infolinux.web.id
smtpd -o content_filter=filter: Konfigurasi seperti di atas adalah pada mail gateway yang akan me-relay e-mail dari LAN dengan alamat IP 192.168.0.0/ 24 dan localhost tanpa dipindai (scanning). Hanya e-mail yang masuk melalui interface 212.212.212.xxx, yang akan dipindai oleh anti virus. Reload Postfix dan sekarang e-mail server Anda sudah dilengkapi dengan antivirus.
Antivirus lain di Linux: 1 . AmaViS Virus Scanner (www.amavis.org) 2 . AntiVir (www.hbedv.com) 3 . Bitdefender (www.bitdefender.com) 4 . Central Command (www.centralcommand.com) 5 . F-Prot Antivirus (www.f-prot.com) 6 . Kaspersky (www.kaspersky.com) 7 . Ravantivrus (www.ravantivirus.com) 8 . Shopos Antivirus (www.sophos.com) 9 . Vexira Antivirus (www.warpedsystems.sk.ca) 10. Dan lain-lain. Dapid Candra ([email protected])
INFOLINUX SEPTEMBER 2003
75
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
LYX (Aplikasi Desktop Publisher)
LYX Sebagai Aplikasi Desktop Publisher Membuat skripsi, buku, brosur, atau makalah tidak hanya bisa dilakukan dengan word processor atau aplikasi desktop publishing canggih seperti PageMaker. Anda dapat menggunakan LYX dan LATEX.
L
YX adalah salah satu front-end LATEX yang berbasis GUI, yang dapat dijalankan pada hampir semua platform sistem operasi. LATEX sudah cukup lama dikenal sebagai alat untuk menata tata letak (layout) buku atau majalah yang berkaitan dengan ilmu pasti. Dengan munculnya LYX yang dapat dioperasikan secara intuitif, hampir semua bidang dapat memanfaatkan LATEX sebagai alat untuk menata tampilan buku/ majalah. Sistem desktop publishing (DTP) digunakan untuk mengedit teks dan gambar yang dimasukkan pada suatu halaman penuh. Jadi, secara prinsip hampir semua jenis word processor atau document-processor dapat dijadikan salah satu komponen masukan dari sistem DTP. Apa keunggulan LYX pada sisi aplikasi DTP? LATEX yang bekerja di balik aplikasi LYX merupakan text-processor yang memiliki banyak keunggulan dibandingkan word processor, di antaranya adalah konsistensi, referensisilang dan penempatan gambar/tabel secara otomatis, serta penyusunan pustaka yang konsisten. Konsistensi tata letak ini disebabkan karena semua komponen tata letak dikontrol oleh suatu makro atau paket LATEX. Dengan kata lain, sekali suatu makro didefinisikan maka akan didapatkan tata letak yang sangat konsisten.
Dapat memasukkan banyak grafik terutama jenis raster. Ukuran gambar bervariasi dan dapat diletakan secara fleksibel. Format yang kompak. Judul sebagai huruf normal atau sebagai gambar. Mendukung huruf kaligrafi, dapat dilakukan dengan menggunakan paket chancery. Dapat menghasilkan PDF dengan kualitas yang baik.
LYX sebagai aplikasi DTP Berbeda dengan program khusus aplikasi DTP yang berbasis bingkai (frame), LYX/LATEX tidak mempunyai fasilitas semacam ini. Peletakan bingkai pada naskah LYX/LATEX ditentukan oleh definisi pada makro atau paket yang digunakan. Namun demikian, pengaturan letak bingkai pada suatu halaman pada program LYX dapat dikontrol secara langsung dengan menambahkan perintah TEX atau
Syarat suatu aplikasi word processor atau document-processor dapat dijadikan aplikasi DTP adalah sebagai berikut: Ketersediaan jenis huruf/tipografi. Dapat mencampur format satu dan dua kolom.
76
INFOLINUX SEPTEMBER 2003
Komponen aplikasi DTP
Gambar 1. Daftar contoh font
www.infolinux.web.id
LATEX dalam bentuk ERT (Evil Red Text) dengan menekan perintah pendek Ctrl+l. Bagaimana LYX dapat dijadikan sebagai aplikasi DTP akan dibahas tiap-tiap komponen DTP pada LYX berikut ini.
Jenis huruf atau tipografi Hingga perkembangan saat ini, hampir semua jenis huruf bisa digunakan di pada DTP-LYX/LATEX. Namun yang paling mudah diinstal adalah jenis huruf Type1. Huruf TrueType di Windows dapat juga dikonversi ke dalam huruf Type1. Banyak software gratis/open source yang dapat digunakan untuk konversi ini, misalnya ttf2* (ttf2afm, ttf2bdf, ttf2pfa, ttf2pfb, ttf2pk, ttf2pt1, dan ttf2tfm) yang berbasis CLI atau PfaEdit yang berbasis GUI. Di lingkungan LATEX terdapat cukup banyak jenis huruf yang sudah terinstal secara default. Jika ingin menambahkan jenis huruf pada basis
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
LYX (Aplikasi Desktop Publisher)
dan \begin{strip} ... \end{strip} pada teks yang akan dijadikan satukolom. LYX di Red Hat 9
Memasukkan grafik/gambar data LATEX dapat men-download dari CTAN. Variasi jenis huruf yang terdapat di LATEX yang berhasil penulis instalasi dapat dilihat pada Gambar 1.
Format kolom Berbeda dengan buku yang biasanya tersusun dengan format satu kolom, hampir semua majalah dan beberapa buku lebar disusun dengan format dua kolom atau lebih. Pada suatu aplikasi DTP diperlukan fleksibilitas penentuan jumlah kolom pada satu halaman tata letak. Program LYX memberikan fasilitas untuk mendefinisikan format kolom (satu kolom atau lebih) dalam beberapa cara: 1 . Mengunakan pilihan twocolumn atau onecolumn. Pilihan ini adalah standard naskah LATEX, yang dapat ditentukan pada menu tata letak: Document -> Page -> Twocolumn. Secara default adalah onecolumn. 2 . Menggunakan paket multicol. Paket ini bisa digunakan untuk men-setting aneka macam jumlah kolom dan dapat digunakan dengan perintah \usepackage{multicol} pada preambul dan \begin{multicols}{jumlah_kolom} ... \end{multicols} pada teks Pada majalah yang tidak banyak gambar, pemakaian paket ini sangat baik. 3 . Menggunakan paket sttools yang terdiri dari paket flushend, midfloat dan cuted. Paket ini merupakan hasil
LYX terbaru memberikan fasilitas untuk memasukkan aneka jenis gambar baik raster maupun vektor. Format gambar yang dapat disisipkan langsung pada LYX dapat diketahui dengan perintah: $lyx -dbg graphics Akan muncul list format gambar apa saja yang dapat di-support oleh LYX (di luar format postscript, pdf, tex/pstex, tgif, dan fig): “Of these, LYX recognises the following formats: bmp, fits, gif, jpg, ppm, pgm, pbm, sgi, tiff, xbm, xwd” Penentuan posisi gambar pada teks dapat dibagi dua macam, yaitu gambar sebagai objek gambar (mengambang atau tidak) atau gambar sebagai latar belakang dari teks. Untuk mengatur gambar secara fleksibel (posisi tidak tergantung kepada LATEX) sebaiknya gambar diletakkan pada posisi tidak mengambang. Pada program LYX terbaru, tidak dibutuhkan paket tambahan untuk menambah gambar pada teks, kecuali jika diinginkan tampilan yang sangat khusus, misalnya: eso-pic dan graphicx untuk menambahkan latar belakang secara berulang-ulang. epigraph untuk menambahkan gambar atau kutipan pada halaman pertama bab, setelah judul, biasanya dipakai pada tata letak buku-buku karya sastra. overpic untuk menambahkan teks atau gambar di atas gambar. Berhubung paket ini belum sepenuhnya didukung oleh LYX, maka pemakaian paket ini dapat dilakukan baik
www.infolinux.web.id
dengan cara menambahkan perintah LATEX pada preambul atau dalam bentuk ERT. Untuk menambah latar belakang gambar satu halaman penuh dapat dilakukan dengan menuliskan perintah berikut ini pada preambul: \usepackage{eso-pic,graphicx} \newcommand\BackgroundPicture[2]{% \setlength{\unitlength}{1pt}% default \put(0,\strip@pt\paperheight){% \parbox[t][\paperheight]{\paperwidth}{% \vfill \centering\includegraphics[angle=#2]{#1} \vfill }}} \AddToShipoutPicture{\BackgroundPicture{rose}{0}} Sebagai catatan, gambar yang digunakan harus sebesar ukuran kertas (ukuran gambar dapat diatur dengan program GIMP). Paket overpic dapat digunakan dengan cara menambahkan perintah \usepackage[abs]{overpic} pada preambul dan menuliskan perintah berikut ini pada teks dalam ERT. \begin{overpic}[scale=2.25,unit=1mm]{Emperors.eps} \put(3,3){\huge\textcolor{white}{ \LaTeX}} \put(10,5){\includegraphics[scale=1.25]{Emperors.eps}} \end{overpic} Paket epigraph, eso-pic, graphicx dan overpic biasanya akan terdapat pada paket LATEX yang sudah terinstal. Jika tidak tersedia pada sistem LATEX Anda, paket ini dapat didownload dari CTAN.
Keluaran PS atau PDF Naskah LYX dapat diekspor untuk keperluan pre-press dalam format DVI, PS dan/atau PDF. Masing-masing format ini mempunyai keunggulan
modifikasi kernel LATEX yang khusus didesain untuk aplikasi DTP duakolom dan dapat digunakan dengan menambahkan perintah \usepackage{flushend,cuted} pada preambul
Gambar 2. Contoh brosur
INFOLINUX SEPTEMBER 2003
77
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
sendiri-sendiri. Format yang terbaik untuk dicetak pada printer sebelum dibuatkan plate adalah DVI (device independent), karena format ini akan menggunakan resolusi printer secara optimum. Berbeda dengan format DVI yang mengoptimalkan resolusi printer saat mencetak, format PS dan PDF secara default hanya diset pada resolusi 600 dpi. Resolusi ini biasanya diset secara otomatis pada perintah dvips. Format PDF dapat dikatakan relatif sama dengan PS. Bedanya hanya terletak pada ukuran berkas yang sangat kecil. Berkas PDF dapat juga dihasilkan dengan program pdflatex. Sejauh pengalaman penulis naskah PDF yang dihasilkan dari program ps2pdf dan pdflatex mempunyai kualitas yang relatif sama. Penulis sendiri tidak sering memakai program pdflatex, karena ada beberapa grafik tertentu yang tidak dapat dikompilasi dengan program ini.
Contoh tata letak dengan LYX/LATEX Brosur Mendesain brosur sederhana dengan latar belakang warna atau gambar sangat mudah dilakukan dengan LYX. Paket LATEX yang dibutuhkan untuk mendukung pekerjaan ini misalnya multicol untuk membuat tiga kolom atau dapat juga menggunakan minipage yang lebih fleksibel, eso-pic dan graphicx untuk menambah latar belakang gambar, color dan colortbl untuk pewarnaan pada teks dan tabel.
Ensiklopedia Menata letak ensiklopedia hampir sama
78
INFOLINUX SEPTEMBER 2003
Gambar 4. Contoh kartu nama
dengan menata letak buku atau majalah dengan dua kolom yang dikombinasi dengan satu kolom. Untuk mendesain tata letak seperti contoh di bawah ini dibutuhkan beberapa paket LATEX tambahan, seperti flushend, cuted, eso-pic, dan graphicx. Paket floatflt, fancyhdr, dan color secara default sudah didukung oleh LYX. Paket floatflt digunakan untuk menempatkan gambar mengambang di antara teks. Untuk menyisipkan gambar dengan paket ini dapat dilakukan dengan perintah Insert —> Float —> Floatflt figure. Paket fancyhdr digunakan untuk mengontrol header atau footer pada halaman teks. Penggunaan tiap-tiap paket ini dapat dibaca pada dokumentasi dari masingmasing paket ini.
Kartu nama Ada dua paket yang dapat digunakan untuk mendesain kartu nama dengan LYX/LATEX, yaitu bizcard dan ticket. Berbeda dengan paket bizcard yang memang khusus untuk membuat kartunama, paket ticket dapat juga digunakan untuk menata letak tiket dan kartu pin. Kedua paket ini dapat didownload secara gratis di CTAN. Selain kedua paket itu juga dibutuhkan paket tambahan untuk membuat tampilan menjadi labih baik, misalnya paket eso-pic dan graphicx atau overpic kalau ingin dibuat dalam format latar belakang gambar penuh.
Majalah Majalah yang kompleks agak sulit didesain pakai LYX, namun ada satu paket yang bisa digunakan untuk mendesain majalah sederhana, yaitu
www.infolinux.web.id
Gambar 3. Contoh ensiklopedia
LYX (Aplikasi Desktop Publisher)
Gambar 5. Contoh majalah
franzine yang dibuat oleh Kathryn Andersen. Paket ini dapat di-download dari URL pada referensi di bawah ini. Tata letak majalah tiga kolom dapat memanfaatkan kombinasi dua kolom ditambah catatan pinggir (marginpar). Pada contoh gambar di bawah ini dibuat dengan menggunakan tata letak duakolom plus catatan pinggir (dicontoh dari model tata letak majalah Bauen & Wohnen). Paket LATEX yang digunakan telah dijelaskan pada bagian sebelumnya. Rangkuman LYX pada prinsipnya dapat digunakan untuk mendukung aplikasi desktop publishing (DTP). Untuk menghasilkan tata letak yang baik, dibutuhkan beberapa paket tambahan di luar paket yang sudah didukung oleh LYX, yaitu bizcard, colortbl, eso-pic, epigraph, graphicx, multicol, overpic, sttools dan ticket. Semua paket ini dapat di-download dari CTAN (http:// www.ctan.org/). Di samping program LATEX beserta paket-paketnya, juga dibutuhkan program lain untuk melengkapi LYX/ LATEX, seperti GIMP/ImageMagick untuk mengolah gambar raster, Sketch/ Xfig/Tgif untuk menambahkan sketsa atau gambar vektor pada teks, pstricks dan pdftricks untuk memodifikasi gambar yang telah disisipkan pada LYX dan juga barangkali dibutuhkan paket CMS (Color Management System) untuk mendefinisikan warna supaya apa yang dilihat di layar sama persis dengan apa yang akan dicetak melalui printer berwarna. I Wayan Warmada ([email protected])
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Program File di Web
Menjalankan Program File di Web Anda pernah tertarik dengan kemampuan program file? Anda tertarik dengan kemampuan web server untuk menampilkan daftar file di web browser? Tertarik membuat aplikasi CGI untuk menampilkan daftar file dan informasi file-nya?
M
engamati informasi suatu file terkadang dapat menjadi hal yang menyenangkan. Menggunakan program file, kita dapat menelanjangi file tersebut dan melihat tipenya. Hampir tidak ada file yang luput dari kemampuan program file ini. Sayangnya, sampai saat ini, kebanyakan program seperti Konqueror ataupun Nautilus lebih senang untuk menampilkan tipe suatu file dalam format singkat dan padat. Hal tersebut dirasa wajar-wajar saja karena mereka menawarkan fungsi lain yang jauh lebih kompleks daripada hanya sekadar menampilkan keluaran dari program file. Sementara itu, kemampuan Apache dalam menampilkan daftar file dan direktori sangatlah menyenangkan untuk diamati dan dipelajari. Begitu Anda
meminta apache untuk menampilkan daftar tersebut, maka Anda dapat dengan mudah men-download ataupun sekedar membaca isi file tersebut. Sayang beribu sayang, Apache tidak akan menampilkan deskripsi semua file. Dengan sebuah shell script sederhana, sebenarnya kemampuan untuk bertingkah laku seperti kemampuan menampilkan daftar file dan direktori seperti Apache dapat dibuat asalkan fungsi url encoding dan decoding telah disediakan. Hal tersebut diperlukan karena nama file dapat mengandung karakter-karakter yang harus di-encode dahulu sebelum dikirimkan dan harus didecode ketika akan diproses. Sayangnya, url encoding dan decoding tidak disediakan oleh program-program standar. Membuatnya jelas
membutuhkan waktu. Menggunakan program url encoding dan url decoding yang dibuat oleh Heiner Steven ([email protected]), kita akan menampilkan informasi internal suatu file dalam navigasi ala Apache. Aplikasi CGI yang kita buat ini tidak dimaksudkan untuk menggantikan Apache dalam menampilkan daftar file dan direktori. Apa yang kita lakukan hanyalah menampilkan keluaran dari program file untuk file tersebut. Apabila file tersebut merupakan suatu direktori, maka direktori tersebut akan kita jadikan hyperlink. Berikut ini adalah langkahlangkah pembuatannya.
1. Mendefinisikan beberapa variabel penting PROGNAME=”file2web” VERSION=”0.1a” COPYRIGHT=”$PROGNAME $VERSION, (c) Noprianto, July 2003. GPL.” COPYRIGHT2=”Urlencode and Urldecode by Heiner Steven ([email protected])” URLENCODE=/usr/lib/cgi-bin/urlencode URLDECODE=/usr/lib/cgi-bin/urldecode Variabel URLENCODE and URLDECODE menunjuk ke lokasi program urlencode dan urldecode.
2. Mendefinisikan fungsi-fungsi tambahan
function signature() { echo “$COPYRIGHT” echo “$COPYRIGHT2” echo “$SERVER_SIGNATURE” } function urlencode()
File2web menampilkan root direktori
www.infolinux.web.id
INFOLINUX SEPTEMBER 2003
79
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
File2web dan informasi file
{ echo $(echo $1 | $URLENCODE) } function urldecode() { echo $(echo $1 | $URLDECODE) } Fungsi signature() akan menampilkan informasi hak cipta dan informasi web server. Fungsi urlencode akan menjalankan program urlencode dan fungsi urldecode akan menjalankan program urldecode.
3. Program utama Pertama-tama yang akan kita lakukan tentunya mencetak header untuk aplikasi CGI. Setelah itu, kita akan memeriksa isi dari variabel $QUERY_STRING. Apabila $QUERY_STRING ternyata adalah string kosong atau belum diset, maka kita akan mengasumsikan bahwa direktori aktif adalah root direktori (/). Dan apabila $QUERY_STRING tidak kosong, kita akan melakukan proses decoding dengan menggunakan program urldecode. Sebagai langkah antisipatif ketika user memasukkan nama direktori secara asalasalan, maka kita akan memeriksa apakah direktori terdapat di dalam file sistem. Hal tersebut juga berlaku untuk direktori di mana user yang menjalankan Apache tidak memiliki hak untuk masuk ke dalam dan mendaftar isinya. Tidak lupa, kita juga perlu mendapatkan direktori orang tua dari
80
INFOLINUX SEPTEMBER 2003
Program File di Web
Antisipasi untuk direktori yang tidak eksis
direktori aktif saat ini. Hal ini secara sederhana kita dapatkan dengan masuk ke direktori orang tua (cd ..), kemudian mengambil nilai dari program pwd, kemudian masuk kembali ke direktori aktif. Untuk cara lain, Anda dapat menggunakan program pushd dan popd dengan logika tersendiri. Selanjutnya, permainan pun dimulai. Kita akan mendaftar isi dari suatu direktori dan akan memeriksa setiap isinya. Apabila isinya adalah direktori, maka seperti yang telah disebutkan, kita akan menjadikannya sebagai hyperlink. Sementara, apabila isinya adalah file, maka kita akan mencetak keluaran program file atas dirinya. Untuk memperindah tampilan, kita menampilkannya dalam tabel. Berikut ini adalah source code selengkapnya: #!/bin/sh PROGNAME=”file2web” VERSION=”0.1a” COPYRIGHT=”$PROGNAME $VERSION, (c) Noprianto, July 2003. GPL.” COPYRIGHT2=”Urlencode and Urldecode by Heiner Steven ([email protected])” URLENCODE=/usr/lib/cgi-bin/urlencode URLDECODE=/usr/lib/cgi-bin/urldecode function signature() { echo “$COPYRIGHT” echo “$COPYRIGHT2” echo “$SERVER_SIGNATURE” }
www.infolinux.web.id
function urlencode() { echo $(echo $1 | $URLENCODE) }
function urldecode() { echo $(echo $1 | $URLDECODE) } echo “Content-type: text/html” echo echo “” echo “File type explorer” echo “” echo “” echo “<pre>” if [ -z $QUERY_STRING ] then BASE=/ else BASE=$(echo $QUERY_STRING | awk -F= ‘{print $2}’) BASE=$(urldecode $BASE) fi echo “$(basename “$BASE”)” echo “
” echo “”
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Program File di Web
cd “$BASE” if [ $? -ne 0 ] then echo “Directory cannot be found or permission denied. go to /” echo “
” signature exit 1 fi cd .. UP=”$PWD” cd “$BASE” echo “up | one level up |
”
for i in * do
echo “” echo “” if [ ! -e $i ] then echo “ | ” echo “
” echo “
” echo “
” signature exit 1 fi if [ -d “$BASE/$i” ] then echo “”$i”” else echo “$i” fi echo “” echo “$(file -b “$i”) | ” echo “” done
echo “” echo “
” signature echo “” echo “” Program urlencode dan urldecode bisa Anda copy dari CD-ROM InfoLINUX atau dapat di-download di http://www. shelldorado.com/scripts/cmds/urlencode dan http://www.shelldorado.com/scripts/ cmds/urldecode. Kini, kita dapat mengamati informasi file-file di harddisk kita via web browser. Terimakasih kepada Heiner Steven untuk urlencode dan urldecode yang telah sangat membantu. Tentunya, program ini masih terdapat kekurangan. Penyempurnaan di sana sini sangatlah diharapkan. Kembangkanlah dan sebarkanlah. Kembangkanlah dan sebarkanlah lagi. Lagi dan lagi. Itulah indahnya dunia free software. Noprianto ([email protected])
IKLAN
www.infolinux.web.id
INFOLINUX SEPTEMBER 2003
81