Anda di halaman 1dari 30

TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

Gambas dan MySQL

Database Programming dengan


Gambas dan MySQL
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.

P
ucuk dicinta ulam tiba, inilah akan coba mempelajari salah satu
yang dirasakan penulis ketika komponen yang disediakan Gambas


Gambar 1. Startup class,
dikenalkan oleh InfoLINUX tentang untuk pengolahan database, yaitu Constructor, dan Destructor
Gambas pada edisi April 2003 yang lalu. Connection Class.
Karena selama ini penulis telah Connection Class adalah sebuah kelas MyConn = New Connection
mempelajari bahasa Visual Basic dan tak yang digunakan untuk dapat mengakses MyConn.Type= “mysql”
ingin keahlian itu hilang sewaktu database server seperti MySql atau PgSql, MyConn.Host= “localhost”
berpindah ke Linux, akhirnya bertemu yang terdiri dari beberapa Property dan MyConn.Login= “root”
dengan Gambas (Gambas Almost Mean Method seperti terlihat pada Tabel 1. MyConn.Password=””
Basic). Berdasarkan rujukan yang Untuk dapat menggunakan Connection MyConn.Name=”sahabat”
diberikan, penulis langsung mempelajari Class, kita harus mendeklarasikan sebuah
dokumentasi Gambas di situs http:// variabel objek dan merujuk Connection ‘buka koneksi
gambas.sourceforge.net. Class ke variabel tersebut, kemudian MyConn.Open
Salut dan terimakasih untuk Benoit memberi nilai untuk properti-properti yang
Minisini yang telah membuat Gambas diperlukan dan menjalankan metode .Open ‘Tampilkan messagebox bila ada kesalahan
dalam waktu luangnya dan melepasnya untuk membuka koneksi ke database CATCH
dalam bentuk lisensi GPL yang free. server. Setelah koneksi terbentuk, kita Message.error(Error.text)
Gambas memang memiliki kemudahan dapat mengolah data pada satu tabel atau END
Visual Basic dan kekuatan OOP dari Java. lebih dengan menggunakan metode
Dari alamat situs di atas, Anda dapat .Exec(sql_statement).  Mengambil Data Tertentu:
mengambil versi terakhir Gambas 0.58. Metode .Exec() akan mengembalikan PUBLIC SUB ambildata()
Penulis menggunakan versi Gambas 0.57 hasil eksekusinya ke sebuah variabel Dim sql AS String
dengan Linux Red Hat 7.3. Proses object bertype Result, variabel tersebut DIM MyRS AS Result
instalasi program cukup mudah, tidak ada boleh dikatakan sebagai variabel object Dim vNama AS String
kendala sama sekali sesuai dengan yang bertipe Recordset di VB. Dim vTelp AS String
petunjuk InfoLINUX edisi April 2003.
Meskipun Gambas masih dalam tahap Contoh program Sql = “select nama, telp from tsahabat
pengembangan, sampai saat ini penulis  Koneksi Ke database server MySql: where id = 1”
belum menemukan Bug Program yang PUBLIC MyConn AS Connection MyRS = MyConn.Exec(sql)
signifikan. Ok, tanpa panjang lebar, kita PUBLIC SUB Koneksi()
‘pindahkan data ke variable
Tabel 1. vNama = MyRS!nama
Connection Class vTelp = MyRS!telp
Property KEGUNAAN
.Host String untuk nama komputer / Host (“localhost”) CATCH
.Login String untuk nama user pada MySql (“root”) Message.error(Error.text)
.Password String untuk kata sandi pada MySql (“”) END
.Type String untuk jenis server database (“mysql” / “pgsql”)
.Name String untuk nama database (“sahabat”)  Menghapus data tertentu:
Method KEGUNAAN PUBLIC SUB hapusdata()
.Open Membuka Koneksi ke Server Database DIM sql AS String
.Exec Mengeksekusi Perintah SQL DIM MyRS AS Result

52 INFOLINUX SEPTEMBER 2003 www.infolinux.web.id


Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial TUTORIAL
Gambas dan MySQL

mysql >insert into tsahabat Seletelah selesai setting objek-objek di


Sql=”delete from tsahabat where id = 1” (nama,almt1,almt2,telp) values (‘Tamrin atas, tiba saatnya mengetik kode
MyRS = MyConn.Exec(sql) S’,’Jl. Raden Mattaher No. 96’,’Kel. Pasar – program yang diperlukan. Aktifkan
Jambi’,’0741-22105’) jendela kode dengan cara mengklik
CATCH mysql >insert into tsahabat ganda Classes “fsahabat” dan mulailah
Message.error(Error.text) (nama,almt1,almt2,telp) values (‘Yudi mengetik kode program seperti listing
END Fitra’,’Jl. Patimura No. 77’,’Kel. Jelutung – lengkap yang cukup panjang berikut ini:
Jambi’,’0741-27277’) ‘ Gambas class file
 Menambah data: mysql >insert into tsahabat PUBLIC MyConn AS Connection
PUBLIC SUB tambahdata() (nama,almt1,almt2,telp) values (‘Siti PUBLIC MyRS AS Result
DIM sql AS String Nirwana’,’Jl. Barau-barau No. 07’,’Kel. Pasir PUBLIC vCari AS String
DIM MyRS AS Result Putih – Jambi’,’0741-65028’)
STATIC PUBLIC SUB Main()
Sql=”insert into tsahabat Membuat program DIM oForm AS form
(nama,almt1,almt2,telp) values (‘Tamrin Setelah proses pembuatan database
Syah’, ‘Jl. Patimura No. 77’, ‘Kec. SAHABAT di MySql selesai, kita mulai oForm = NEW fsahabat
Telanaipura – Jambi’, ‘(0741) 60852’) membuat interface untuk pengolahan oForm.showModal()
MyRS = MyConn.Exec(sql) datanya dengan Gambas. Jalankan END
program Gambas dari command shell:
CATCH #/usr/bin/gambas PUBLIC SUB _new()
Message.error(Error.text) ME.Title=”Buku Sahabat”
END  Pilih New Project, ketik nama proyek: ME.center
sahabat, lalu tentukan direktori mana koneksi
 Memperbaiki data tertentu: proyek tersebut disimpan dan klik OK. ambildata
PUBLIC SUB editdata()  Pada jendela utama proyek, klik kanan pindahkan
DIM sql AS String pada nama proyek “sahabat”, pilih isilistbox
DIM MyRS AS Result New – Form, ketik nama form: END
“fsahabat”, dan tentukan tipe form
Sql=”update tsahabat set nama = ‘Yudi tersebut sebagai: Startup class, PUBLIC SUB koneksi()
Fitra’, telp = ‘207277’ where id = 1” Constructor, dan Destructor. Seperti MyConn = NEW Connection
MyRS = MyConn.Exec(sql) terlihat pada Gambar 1. MyConn.Close
MyConn.Type = “mysql”
CATCH Letakkan beberapa objek label dan MyConn.Host = “localhost”
Message.error(Error.text) textbox ke dalam form tersebut sesuai MyConn.Login = “root”
END dengan Gambar 2 dan atur properties MyConn.Password = “”
seperti pada Tabel 2. MyConn.Name = “sahabat”
Database sahabat
Pada tulisan ini, penulis menggunakan Tabel 2.
database server MySql untuk mengolah Setting Properties
data sahabat. Buatlah sebuah database OBJECT PROPERTIES VALUE
dengan nama “SAHABAT” yang terdiri Label1 Text Nama :
atas satu tabel “TSAHABAT” Label2 Text Alamat :
menggunakan MySql Client. Isi beberapa Label3 Text Telpon :
data. Pada console atau “jendela command Label4 Text DATA SAHABAT
sheel” ketik perintah-perintah berikut: Textbox NameBackground Textbox1&H55AAFF&
#mysql -u root -p Textbox NameBackground Textbox2&H55AAFF&
Textbox NameBackground Textbox3&H55AAFF&
Masukkan password untuk user “root” Textbox NameBackground Textbox4&H55AAFF&
mysql>create database sahabat; Button NameText btnTambahTambah
mysql >use sahabat; Button NameText btnSimpanSimpan
mysql >create table tsahabat (id int(7) Button NameText BtnHapusHapus
AUTO_INCREMENT, nama char(25), almt1 Button NameText BtnBatalBatal
char(25), almt2 char(25), telp char(10), Frame NameText Frame1Navigator
PRIMARY KEY (id)) ListBox NameBackground 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 ambildata()


DIM sql AS String

sql = “select * from tsahabat order by id”


MyRS = MyConn.Exec(sql)
CATCH


Gambar 2. Form Gambas untuk Data Gambar 3. Contoh aplikasi database
Message.error(Error.text) Sahabat dengan Gambas
END ambildata
PUBLIC SUB btnTambah_Click() pindahkan
PUBLIC SUB pindahkan() kosongkan isilistbox
vCari = Str(MyRS!id) btnTambah.Enabled = FALSE END
textbox1.text = MyRS!nama END
textbox2.text = MyRS!almt1 PUBLIC SUB btnBatal_Click()
textbox3.text = MyRS!almt2 PUBLIC SUB btnSimpan_Click() DIM sql AS String
textbox4.text = MyRS!telp DIM sql AS String
CATCH vCari = Trim(Left$(listbox1.text,7))
Message.error(Error.text) IF btnTambah.Enabled = FALSE THEN btnTambah.Enabled = TRUE
END sql = “insert into tsahabat sql = “select * from tsahabat where id =
(nama,almt1,almt2,telp) values (‘“ & “ & vCari
PUBLIC SUB isilistbox() textbox1.text & “‘,’” & textbox2.text & “‘,’” MyRS = MyConn.Exec(sql)
DIM i AS Integer & textbox3.text & “‘,’” & textbox4.text & pindahkan
DIM vKode AS String “‘)”
MyRS = MyConn.Exec(sql) CATCH
listbox1.Clear btnTambah.Enabled = TRUE Message.Error(Error.Text)
FOR i = 1 TO MyRS.Count ELSE END
vKode = Space$( 7 - Len(Str(MyRS!id)) sql = “update tsahabat set “
) & Str(MyRS!id) sql = sql & “nama = ‘“ & PRIVATE SUB kosongkan()
listbox1.add(vKode & “ | “ & textbox1.text textbox1.text = “”
MyRS!nama) sql = sql & “‘,almt1 = ‘“ & textbox2.text = “”
MyRS.MoveNext textbox2.text textbox3.text = “”
NEXT sql = sql & “‘,almt2 = ‘“ & textbox4.text = “”
textbox3.text END
CATCH sql = sql & “‘,telp = ‘“ & textbox4.text
Message.error(Error.text) & “‘ where id = “ & vCari PUBLIC SUB _free()
END MyRS = MyConn.Exec(sql) MyConn.Close
ENDIF Message.Info(“Terimakasih..., Salam
PUBLIC SUB listbox1_Click() ambildata Linux”)
DIM sql AS String isilistbox END
‘End of program
vCari = Trim(Left$(listbox1.text,7)) CATCH
Message.Error(Error.Text) Selanjutnya untuk mencoba program,
sql = “select * from tsahabat where id = END Anda dapat menjalankannya dengan
“ & vCari menekan tombol F5. Apabila tidak ada
MyRS = MyConn.Exec(sql) PUBLIC SUB btnHapus_Click() kesalahan yang muncul, akan tampak
pindahkan DIM sql AS String seperti Gambar 3, dan program sudah
dapat Anda kompilasi dengan memilih
CATCH sql = “delete from tsahabat where id = “ menu Project – Compile.
Message.Error(Error.Text) & vCari Tamrin Syah, S.Kom
END MyRS = MyConn.Exec(sql) (tamrin@e-jambi.net)

54 INFOLINUX SEPTEMBER 2003 www.infolinux.web.id


Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial TUTORIAL
Deteksi Hardware

Deteksi Hardware Linux masih setia dengan kebebasannya,


Linux masih setia dengan komitmen
untuk terus maju. Tapi Linux tidak setia

dengan discover untuk kurang ramah pada hardware.


Linux kini jauh lebih ramah kalau
berhubungan dengan hardware. Kernel
2.6 yang akan keluar jelas akan lebih
Bertahun-tahun lamanya masalah pengenalan ramah lagi dengan hardware.
hardware di Linux menghantui calon pengguna Anda mungkin mengalami apa yang
atau bahkan pengguna Linux sekalipun. Sekarang pernah penulis alami ketika hardware
tidak lagi. Anda ingin bukti? Mari kita buat yang telah dibeli dengan uang tabungan
frontend untuk discover agar deteksi perangkat ternyata belum didukung oleh Linux.
keras menjadi jauh lebih mudah. Tapi itu dulu.
Sekarang, lihatlah dukungan vendor.

B
ukan cerita baru kalau orang bersuara. Istilah plug and play benar- Lihatlah OSDL tempat Linus sekarang
menanyakan apakah hardware benar dapat dipercaya! Penulis bahkan bekerja penuh. Lihatlah siapa yang
yang dimiliki dapat dikenali baik hanya perlu memasukkan sebuah disket mendukung OSDL. Lihatlah seberapa
oleh Linux. Bukan cerita baru pula orang berisi driver. Dan semuanya selesai! banyak hacker Linux yang bekerja pada
tidak berani menginstal Linux hanya Betapa mudahnya hidup. perusahaan hardware terkemuka. Dan
karena ketakutan kalau-kalau hardware- Di saat itu, sistem operasi Windows sebagai hasilnya, seberapa sering Anda
nya ternyata belum didukung. Dan benar-benar pujaan. Penulis bahkan membutuhkan driver ketika Anda
sudah cerita lama kalau hal yang satu ini sempat sinis ketika melihat sebuah iklan menambahkan hardware baru?
digunakan oleh para saingan Linux untuk tempel OS/2. Lebih sinis lagi ketika Penulis tidak pernah menambahkan
menjelek-jelekkan Linux. Dan kita tidak beberapa mahasiswa bertandang ke driver tertentu hanya supaya sebuah
akan membiarkan itu terjadi, Sekali lagi, sekolah dan menawarkan Linux. Bahkan, hardware dapat bekerja. VGA card,
tidak akan! saking sinisnya, penulis sempat berjanji sound card, ethernet, dan lain
setia untuk tidak akan menggunakan sebagainya. Apa yang penulis lakukan
Sekilas cerita untuk plug Linux. Alasannya? Karena Windows bisa adalah mencari dukungan kernel
and play plug and play. (umumnya telah ada), melakukan
Beberapa tahun yang lalu, setelah Waktu pun berlalu. Saatnya kuliah kompilasi ulang kernel atau modul kalau
melewati usaha yang cukup rumit, dan meninggalkan kampung halaman. perlu dan meminta kepada Debian agar
akhirnya tibalah seperangkat komputer Tidak lupa komputer pun diangkut. load modul tersebut pada saat boottime.
dengan CPU Intel Pentium 133 MHz di Sampai di Jakarta, penulis pun segera Semua beres. Di penyimpanan CD-ROM
kamar penulis. Masih teringat bahwa memilih Mangga Dua sebagai tempat milik penulis, tidak ada satupun CD-ROM
RAM yang terpasang hanyalah 8 MB. wisata kali pertama. Keliling sana sini, driver dari vendor. Semuanya hanyalah
Dan karena sistem operasi Microsoft akhirnya penulis kembali menemukan CD-ROM data , CD-RW, CD-R kosong,
Windows 95 sangat umum dipakai oleh Linux. Linux lagi , Linux lagi! Dengan dan Debian Woody/Sarge. Kadang-
teman-teman (beberapa sekolah masih pengenalan hardware yang menjijikkan, kadang tentunya ada juga beberapa
berjaya dengan MSDOS 6 dan Microsoft begitulah pemikiran waktu itu. VCD.
Windows 3.1), maka penulis pun segera Setengah tahun kemudian, penulis Linux mungkin belum mengenali
meminjam CD-ROM installer sistem pun mencoba Linux karena kabarnya semua hardware. Akan tetapi, masih
operasi tersebut. Ada satu istilah yang yang cukup santer terdengar, sekadar tegakah seseorang berpendapat bahwa
sangat menarik: pnp atau plug and play. iseng, dan rupanya masih sama juga, Linux tidak ramah dengan hardware?
Teorinya, tancapkan saja hardware Anda kurang ramah dengan hardware. Waduh!
dan hardware tersebut akan langsung Sampai sekarang pun, isu bahwa Linux Pendeteksian hardware
bekerja. Karena ingin menikmati suara kurang ramah dengan hardware masihlah Prinsip pengenalan hardware sebenarnya
dan saat itu tidak memiliki sound card, tedengar. bersumber pada kernel. Pada sistem
maka langkah menghemat uang jajan pun operasi closed source seperti Microsoft
segera dilakukan. Linux dulu dan sekarang Windows, kernel mereka telah dilengkapi
Akhirnya, sebuah sound card pun Kalau ada lirik lagu yang menyatakan dengan berbagai modul (lebih dikenal
nongol di komputer penulis dan rasa bahwa “Aku masih seperti yang dulu”, dengan istilah driver) yang mereka buat
bahagia pun menyelimuti ketika pada maka Linux sepertinya tidak setia-setia sendiri atau disumbangkan oleh vendor
akhirnya game Street Fighter yang amat, tentunya dalam arti yang positif. hardware. Apabila ternyata hardware
menjadi idola saat itu mulai bisa Linux masih setia dengan keandalannya, baru dirilis ketika sistem operasi telah

www.infolinux.web.id INFOLINUX SEPTEMBER 2003 55


TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Deteksi Hardware

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


Interface disco
dirilis ketika kernel Linux tersebut telah
dirilis dan digunakan oleh orang banyak. didukung oleh kernel. Lantas apakah menggunakan Discover. Anda dapat
Apabila vendor tidak menyediakan driver beliau harus berbengong ria untuk men-download Discover di http://
(modul)-nya, maka kita masih punya mencari tahu apa yang harus dilakukan archive.progeny.com/progeny/discover/.
harapan karena sistem rilis bazaar yang agar ethernet tersebut bekerja, karena Bagi pengguna Debian, Anda dapat
dianut oleh komunitas free software ketika ditancapkan ethernet tersebut belum menginstal Discover dengan memberikan
menyebabkan suatu kernel Linux bisa bisa digunakan? perintah:
dirilis dalam tempo yang sangat cepat. Saat ini, beberapa pendeteksi apt-get install discover.
Kita pun dapat menikmati hardware baru. hardware seperti Kudzu (oleh Red Hat),
Rasa-rasanya, kita tidak perlu khawatir. Detect (MandrakeSoft), dan Discover Untuk menjalankan Discover,
Pada dasarnya, ketika Anda (Progeny, berbasis pada Detect) memang berikanlah perintah sebagai berikut:
menggunakan kernel terbaru, maka cukup diandalkan. Secara umum, Kudzu discover
hampir kebanyakan hardware telah sudah sangat memuaskan. Lantas,
didukung. Apabila belum, Anda mungkin bagaimana dengan Discover? Untuk Discover dapat mengenali bus dengan
perlu melakukan kompilasi ulang kernel fleksibilitas, Discover dijalankan pada tipe berikut ini: pci, isa, pcmcia, usb, ide,
atau modul. Untuk hardware, cukup Command Line Interface. Di artikel ini, scsi, parallel, dan serial. Untuk device,
gunakan saja Xserver terbaru. Rasa- kita akan menjadikan Discover jauh lebih Discover dapat mendeteksi bridge,
rasanya semuanya akan beres. Untuk indah dan mudah untuk digunakan. cdrom, ide, scsi, usb, ethernet, modem,
printer, gunakan saja CUPS. Pada saat sound, dan video. Selain itu, Discover
artikel ini ditulis, rekan penulis baru saja Menggunakan discover dapat pula menampilkan informasi
menguji printer Lexmark E323 dan Discover, merujuk ke situsnya, http:// seputar vendor, model, modul kernel,
bekerja dnegan sangat mulus. hackers.progeny.com/discover/, adalah nama device, dan xserver serta modul
program pendeteksi hardware yang untuk xserver. Luar biasa, bukan? Berikut
Deteksi hardware dari sisi menggunakan modul-modul kernel dalam ini adalah beberapa contoh penggunaan
pengguna pendeteksiannya. Discover dapat Anda Discover yang penulis coba di komputer
Permasalahannya, apakah orang yang gunakan untuk mendeteksi hardware di redaksi InfoLINUX.
baru saja menggunakan Linux perlu sibuk sistem Anda. Penulis mencoba Discover
melakukan kompilasi kernel atau modul pada berbagai perangkat yang berbeda, Pendeteksian VGA card:
kernel? Atau perlukan seorang pemula dan secara umum memberikan hasil yang # discover —vendor video
mengutak atik /proc untuk mendapatkan sangat memuaskan. ATI Technologies, Inc.
informasi real time kernel? Atau katakanlah Sebelum kita membuat interface yang
seseorang membeli ethernet X dan tahu ramah dengan Discover, kita akan # discover —model video
persis bahwa ethernet X tersebut telah melihat bagaimana menyenangkannya 3D Rage IIc [264GT2c GV]

56 INFOLINUX SEPTEMBER 2003 www.infolinux.web.id


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

# discover —module ethernet


tlan

Dengan demikian, dengan Discover,


kita bagaikan seorang Sherlock Holmes.
Luar biasa! Khusus untuk video,
tentunya kita tidak mendeteksi modul


Hasil deteksi Discover


kernel. Demikian pula kita tidak akan
mendeteksi xserver dan modul untuk ternyata memiliki modul kernel, maka kita Kita mulai dengan fungsi checkUser():
xdriver pada ethernet. akan menanyakan kepada user untuk function checkUser()
memasukkan modul tersebut ke dalam {
Interface Discover yang kernel. Dan idealnya, apabila apa yang superuser=$(grep -e :0:0: /etc/
lebih ramah berhasil kita deteksi adalah VGA card, passwd | cut -d: -f1)
Discover sendiri telah datang dengan maka kita akan menyusun sebagian isi dari test -z $superuser &&
interface yang sangat memudahkan, file konfigurasi X Server. Sayangnya, yang superuser=”super user”
terutama ketika Anda menggunakannya terakhir ini tidak akan dibahas di artikel ini. who=$(id -u)
dalam pembuatan instalasi distro. Kita akan segera mulai. Berikut ini if [ $who -ne 0 ]
Sayangnya, bagi pengguna akhir yang adalah langkah-langkah pembuatannya: then
ingin melihat informasi hardware, echo “You are not $superuser.
interface CLI seperti ini akan sedikit 1. Variabel-variabel penting Please login as $superuser first”
merepotkan. Sekarang, bagaimana kalau Berikut ini adalah beberapa variabel exit 1
kita membuatnya lebih ramah? penting yang didefinisikan: fi
Pada prinsipnya, kita akan menampil- PROGNAME=”Disco”
kan segala hal yang dapat dideteksi oleh VERSION=”0.1a” }
Discover pada interface utama kita. Kita COPYRIGHT=”$PROGNAME $VERSION, (c)
akan menampilkan pendeteksian bridge, Noprianto, July 2003. GPL” Fungsi ini akan memeriksa apakah
cdrom, ide, scsi, usb, ethernet, modem, user yang menjalankan adalah root atau
sound, dan video. Setelah pengguna alias dialog=”dialog —backtitle \”$COPY bukan. Ada baiknya program ini
memilih salah satunya, kita akan RIGHT\”” dijalankan oleh root. Oleh karena itu, kita
melakukan pendeteksian semua hal yang perlu memeriksanya terlebih dahulu.
berhubungan dengan device-device TEMP=/tmp/$$.disco superuser=$(grep -e :0:0: /etc/
tersebut, mulai dari informasi seputar ALL=”bridge cdrom ide scsi usb ethernet passwd | cut -d: -f1)
vendor, model, modul kernel, nama modem sound video” test -z $superuser &&
device, dan xserver serta modul untuk superuser=”super user”
xserver. Tentunya, untuk mempersingkat 2. Pengecekan ketersediaan who=$(id -u)
waktu deteksi, kita hanya akan program dan prasyarat lain
mendeteksi informasi yang relevan saja. Apa yang akan kita periksa adalah user Baris yang pertama akan mencoba
Sebagai contoh, kita tidak akan yang menjalankannya, ketersediaan untuk mendapatkan nama user root
mendeteksi xserver untuk ethernet. program dan status /proc. Kita akan (terkadang, ada pengguna yang tidak
Andaikata apa yang berhasil kita deteksi menuangkannya dalam fungsi-fungsi: menggunakan root sebagai super user,

58 INFOLINUX SEPTEMBER 2003 www.infolinux.web.id


Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial TUTORIAL
Deteksi Hardware

dan lebih memilih nama user lain etc/mtab. Apa yang kita lakukan di sini del
misalnya. Dan disinilah kita akan mungkin bukan cara terbaik. Akan tetapi, }
memeriksannya). Umumnya, baik user dalam sebagian besar kasus, cara seperti
dan group root memiliki id 0. Maka kita ini cukup memadai. Pertama-tama, kita akan memeriksa
mengambil informasinya dari /etc/ user yang menjalankan dan berbagai
passwd. Andaikata group dari root 3. Pembuatan fungsi pembantu prasyarat lain, Setelah itu, kita akan
bukanlah 0, maka kita tidak akan function del() membuat menu untuk program dialog.
mendapatkan apapun juga. { Kemudian, pada interface program
Dengan demikian, kita mengasumsi- rm -rf $TEMP dialog, kita akan mengulang sampai
kan nama dari user root adalah “super rm -rf /tmp/*.disco pengguna memilih tombol cancel. Untuk
user”. Baris terakhir berguna untuk } setiap pilihan yang user tentukan,
memeriksa apakah user yang sedang sebelum melewatkannya ke fungsi lain,
aktif adalah root (super user) atau bukan. Fungsi del tersebut berfungsi untuk kita akan menampilkan informasi tunggu
Fungsi kedua adalah pemeriksaan mempersingkat pengetikan. terlebih dahulu karena proses pende-
ketersediaan program dan status /proc: teksian cukup memakan waktu.
function checkDeps() 4. Pembuatan fungsi utama Setelah fungsi detect() melaporkan
{ function main() hasilnya ke dalam file, maka kita akan
w_discover=$(which discover) { menampilkannya kepada user. Setelah
if [ -z $w_discover ] checkUser itu, kita akan memanggil fungsi
then checkDeps configureDevice untuk memeriksa apakah
echo “I cant find discover. ada yang bisa dilakukan untuk device
Sorry.” tersebut. Load modul kalau ada modul
exit 1 for i in $ALL kernel yang tersedia, atau pembuatan file
fi do konfigurasi X Server yang saat ini belum
MENUITEMS=”$MENUITEMS $i tersedia.
w_dialog=$(which dialog) $i”
if [ -z $w_dialog ] done 5. Fungsi detect()
then function detect()
echo “I cant find dialog. Sorry.” while [ 1 ] {
exit 1 do bridge=”model vendor module”
fi dialog —menu “Select device” cdrom=”model vendor device module”
20 40 10 $MENUITEMS 2>$TEMP ide=”model vendor device module”
m_proc=$(grep -w proc /etc/mtab| tr test $? -eq 1 && break scsi=”model vendor device module”
-d [:space:]) SELECTED=‘cat $TEMP‘ usb=”model vendor device module”
if [ -z $m_proc ] del ethernet=”model vendor module”
then modem=”model vendor device
echo “/proc is not mounted. tput reset module”
Sorry.” tput cup 10 10 sound=”model vendor module”
exit 1 echo -n “Please wait [$SE video=”model vendor xserver xdriver”
fi LECTED detection in progress] ...”
pretest=$(discover $1 2>/dev/null)
echo “Information for $SE if [ -z “$pretest” ]
} LECTED” > $TEMP then
echo >> $TEMP echo -n “[not found] “
Secara umum, kita menggunakan detect $SELECTED echo “NOT FOUND” >> $TEMP
which untuk memeriksa ketersediaan return
program. Untuk itu, Anda dapat saja dialog —textbox $TEMP 20 60 fi
mengatur $PATH. Program-program
yang kita periksa ketersediaannya pun configureDevice $SELECTED echo -n “[found] “
belum lengkap karena kita tidak
memeriksa ketersediaan modprobe yang del case $1 in
akan kita gunakan nanti. Untuk bridge) for i in $bridge
memeriksa apakah /proc di mount atau done do
tidak, kita akan membaca informasi dari / echo -n “$i “

www.infolinux.web.id 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 ‘{print $2}’)


2>/dev/null) 2>/dev/null)
test ! -z “$temp” && echo test ! -z “$temp” && echo if [ ! -z $module ]
“$i: $temp” >> $TEMP “$i: $temp” >> $TEMP then
done done
;; ;; dialog —yesno “Configure $1?”
cdrom) for i in $cdrom sound) for i in $sound 10 40
do do if [ $? -eq 0 ]
echo -n “$i “ echo -n “$i “ then
temp=$(discover —$i $1 temp=$(discover —$i $1 modprobe $module 1>/
2>/dev/null) 2>/dev/null) dev/null 2>&1
test ! -z “$temp” && echo test ! -z “$temp” && echo if [ $? -ne 0 ]
“$i: $temp” >> $TEMP “$i: $temp” >> $TEMP then
done done RESULT=”failed”
;; ;; else
ide) for i in $ide video) for i in $video RESULT=”succeded”
do do fi
echo -n “$i “ echo -n “$i “ dialog —msgbox “Configure
temp=$(discover —$i $1 temp=$(discover —$i $1 $RESULT” 10 40
2>/dev/null) 2>/dev/null) fi
test ! -z “$temp” && echo test ! -z “$temp” && echo
“$i: $temp” >> $TEMP “$i: $temp” >> $TEMP
done done fi
;; ;;
scsi) for i in $scsi esac
do } if [ ! -z $xdriver ]
echo -n “$i “ then
temp=$(discover —$i $1 Fungsi yang satu ini jelas tidak efisien dialog —msgbox “X Server
2>/dev/null) dari sisi pemrograman. Apabila configuration is not implemented at this time.
test ! -z “$temp” && echo menggunakan associative array, sorry.” 10 40
“$i: $temp” >> $TEMP tentunya tidak akan perlu menjadi fi
done sepanjang ini. Prinsip kerjanya, pertama-
;; tama kita mendefinisikan terlebih dahului
usb) for i in $usb apa-apa saja yang akan diperiksa yang }
do relevan dengan device.
echo -n “$i “ Penulis mungkin membuat kesalahan Apa yang dilakukan oleh fungsi ini
temp=$(discover —$i $1 dan untuk itu penulis memohon maaf. adalah memeriksa apa saja yang bisa
2>/dev/null) Setelah itu, kita akan mencoba untuk dilakukan dengan device tersebut, Untuk
test ! -z “$temp” && echo mendeteksi keberadaan device secara saat ini, ada dua hal yang akan diperiksa.
“$i: $temp” >> $TEMP umum. Apabila device tersebut tidak Ketersediaan modul kernel atau modul
done ditemukan, maka kita akan segera keluar untuk xserver. Apabila kita menemukan
;; dari fungsi ini. Apabila device ditemukan, bahwa device tersebut memiliki modul
ethernet) for i in $ethernet barulah kita mendeteksi apa-apa saja kernel, kita akan meminta konfirmasi
do yang telah ditentukan dan relevan kepada user untuk memasukkannya ke
echo -n “$i “ dengan device tersebut. Setiap dalam kernel.
temp=$(discover —$i $1 pemeriksaan akan ditulis ke dalam suatu Demikianlah, kini Discover menjadi
2>/dev/null) file sementara dan akan dilaporkan. lebih meriah dan murah digunakan. Ganti
test ! -z “$temp” && echo dialog dengan gdialog (kemudian berikan
“$i: $temp” >> $TEMP 6. Fungsi configureDevice() beberapa perubahan) dan tampilan Anda
done function configureDevice() akan jauh lebih menyenangkan. Walau,
;; { masih terdapat banyak sekali kekurangan
modem) for i in $modem module=$(grep module: $TEMP | awk pada program ini. Berniat untuk
do ‘{print $2}’) mengembangkannya?
echo -n “$i “ xdriver=$(grep xdriver: $TEMP | awk Noprianto (noprianto@infolinux.co.id)

60 INFOLINUX SEPTEMBER 2003 www.infolinux.web.id


Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial 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 bahkan dapat membuatnya dalam waktu memiliki permission executable. Secara
semakin menjamur dan semakin yang sangat singkat. default, akseslah aplikasi CGI Anda di
menjanjikan berbagai kemudahan alamat http://<HOST>/cgi-bin/
yang tidak pernah akan terbayang Aplikasi CGI <PROGRAM_ANDA>.
beberapa saat yang lalu. Sebut saja Pada dasarnya, apa yang akan kita buat Sebagai perbandingan, berikut ini
PHP. Bahasa yang satu ini, setidaknya adalah aplikasi CGI. Bicara teori, aplikasi adalah contoh aplikasi dalam beberapa
menurut penulis, sangat menyenangkan CGI dapat dibangun dengan bahasa bahasa.
untuk digunakan dalam pemrograman apapun juga, selama bahasa tersebut
web. Situs-situs web di dunia juga dapat menampilkan output. Dan boleh Bahasa C
banyak yang mengandalkan bahasa dikatakan, hampir semua bahasa #include <stdio.h>
yang satu ini. Belum lagi aplikasi- pemrograman tentunya dapat
aplikasi siap pakai lain yang dibuat menampilkan output. Dan apapun int main(void)
dengan PHP. bahasa favorit Anda, Anda dapat {
Web hosting pun tidak mau kalah. membuat aplikasi web dengan mudah. printf(“Content-type: text/plain”);
Dukungan PHP jarang sekali absen dalam Walau alangkah baiknya apabila bahasa printf(“\n\n”);
layanan mereka. Sebuah fenomena yang yang Anda gunakan memiliki fungsi printf(“Hello World”);
luar biasa. Anda tidak suka PHP? Baik. pemrosesan string yang cukup baik. Perl return 0;
Masih ada JSP. Penggemar Java akan atau Python adalah contoh yang baik }
berbahagia sekali dengan alat bantu yang dalam pemrosesan string. Shell script
satu ini. Kemudian, pengguna Python dengan tool-tool pendukung seperti awk Lakukanlah kompilasi dan akseslah
mungkin akan berbahagia dengan Zope, akan sangat membantu. lewat web browser Anda. Maka Anda
termasuk penulis. Secara umum, Anda perlu mencetak telah sukses membuat aplikasi CGI
Baiklah, sekarang coba kita simak header tertentu untuk dikenal sebagai dengan bahasa C.
beberapa hal berikut. Anda butuh untuk aplikasi CGI. Untuk menampilkan output
menampilkan informasi sistem via web dalam format hypertext, Anda akan Bahasa PERL
browser. Anda mungkin butuh untuk mencetak header berikut ini: #!/usr/bin/perl
menyimpan informasi pengunjung. Anda Content-type: text/html
mungkin perlu menampilkan isi berbagai <baris kosong> print “Content-type: text/plain”;
file di sistem via web browser. Atau print “\n\n”;
Anda ingin menyulap berbagai tool Sementara, untuk menampilkan print “Hello World”;
sistem menjadi aplikasi Internet. output berupa teks biasa, Anda akan
Lantas, apakah untuk tugas-tugas mencetak header berikut ini: - bahasa python
seperti itu, kita perlu menginstal PHP, Content-type: text/plain #!/usr/bin/python
atau menginstal JSP, atau menginstal <baris kosong>
Zope? Menggunakan PHP mungkin bisa print “Content-type: text/plain”
saja. Akan tetapi, kalau Anda sering Copy-kan program yang Anda buat print “\n”
berkutat dengan shell script, kenapa di direktori CGI Apache (umumnya print “Hello World”
tidak menggunakan shell script saja? direktori cgi-bin di instalasi Apache
Tidak ada software tambahan yang Anda. Untuk Debian, direktori CGI - shell script
perlu diinstal. Dan yang penting, untuk terletak di /usr/lib/cgi-bin). Jangan lupa #!/bin/sh
tugas-tugas tersebut di atas, Anda untuk memastikan program Anda

www.infolinux.web.id INFOLINUX SEPTEMBER 2003 61


TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Shell Script



Informasi internal web server Program x2web

HTTP connection $HTTP_CONNECTION $HTTP_ACCEPT_CHARSET”


echo “Content-type: text/plain” HTTP host $HTTP_HOST echo “HTTP accept encoding:
echo HTTP keep alive $HTTP_KEEP_ALIVE $HTTP_ACCEPT_ENCODING”
echo “Hello World” HTTP user agent $HTTP_USER_AGENT echo “HTTP connection:
Path $PATH $HTTP_CONNECTION”
Dengan demikian, Anda dapat melihat Remote address $REMOTE_ADDR echo “HTTP host: $HTTP_HOST”
bahwa betapa menyenangkannya Remote port $REMOTE_PORT echo “HTTP keep alive:
melakukan pemrograman CGI, walau Script filename $SCRIPT_FILENAME $HTTP_KEEP_ALIVE”
untuk orang-orang yang hidup di Server address $SERVER_ADDR echo “HTTP user agent:
teknologi terkini, boleh jadi CGI akan Server admin $SERVER_ADMIN $HTTP_USER_AGENT”
ditertawakan. Server name $SERVER_NAME echo “Path: $PATH”
Server port $SERVER_PORT echo “Remote addr: $REMOTE_ADDR”
CGI dan informasi internal Server signature $SERVER_SIGNATURE echo “Remote port: $REMOTE_PORT”
web server Server software $SERVER_SOFTWARE echo “Script filename: $SCRIPT_FILENAME”
Dalam suatu aplikasi web, terkadang Unique id $UNIQUE_ID echo “Server addr: $SERVER_ADDR”
kita perlu mengetahui informasi- Gateway interface echo “Server admin: $SERVER_ADMIN”
informasi seperti browser apa yang $GATEWAY_INTERFACE echo “Server name: $SERVER_NAME”
digunakan oleh pengguna, dari alamat Server protocol $SERVER_PROTOCOL echo “Server port: $SERVER_PORT”
mana pengguna kita mengakses aplikasi Request method $REQUEST_METHOD echo “Server signature:
kita dan berbagai variabel penting Query string $QUERY_STRING $SERVER_SIGNATURE”
lainnya. Untuk itu, Anda tidak perlu Request URI $REQUEST_URI echo “Server software:
repot-repot. Web server akan Script name $SCRIPT_NAME $SERVER_SOFTWARE”
menyediakannya untuk Anda. echo “Unique id: $UNIQUE_ID”
Anda bisa mendapatkan informasi- Berikut ini adalah contoh program echo “Gateway interface:
informasi tertentu dengan mengakses untuk mendapatkan informasi-informasi $GATEWAY_INTERFACE”
variabel yang di-export oleh web server. tersebut: echo “Server protocol:
Cara lain untuk mendapatkan informasi- #!/bin/sh $SERVER_PROTOCOL”
informasi tersebut adalah mengambil echo “Request method:
hasil yang dikeluarkan oleh program echo “Content-type: text/plain” $REQUEST_METHOD”
env. Keluaran dari program env akan echo echo “Query string: $QUERY_STRING”
lebih rumit untuk dipecah-pecah. echo “Request URI: $REQUEST_URI”
Document root $DOCUMENT_ROOT echo “Greetings: Halo Superman !” echo “Script name: $SCRIPT_NAME”
HTTP accept $HTTP_ACCEPT echo echo
HTTP accept charset echo “Apache Environment:” echo “Sleeping time, superman !”
$HTTP_ACCEPT_CHARSET echo “Document root: $DOCUMENT_ROOT”
HTTP accept encoding echo “HTTP accept: $HTTP_ACCEPT” #Try to use echo ‘env‘. Looks more
$HTTP_ACCEPT_ENCODING echo “HTTP accept charset: complicated, but more informative !

62 INFOLINUX SEPTEMBER 2003 www.infolinux.web.id


Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial TUTORIAL
Shell Script

Informasi sistem df) df


Untuk kesempatan ini, keamanan sistem ;;
akan kita abaikan terlebih dahulu. psax) ps ax
Pernahkah Anda ingin melihat informasi ;;
ruang kosong penyimpanan Anda, daftar meminfo) cat /proc/meminfo
proses, informasi memori, informasi ;;
CPU, informasi partisi harddisk, informasi cpuinfo) cat /proc/cpuinfo
file sistem yang dimunt, informasi kernel, ;;
user-user dan group-group di sistem via part) cat /proc/partitions
web browser? Bagaimana kalau kita ;;
membuatnya sendiri? mtab) cat /etc/mtab
Sebutlah program yang akan kita buat ;;
ini dengan nama x2web. Program x2web uname) uname -a
ini memiliki kemampuan untuk ;;
menampilkan hal-hal yang telah userlist) sum=$(cat /etc/passwd
disebutkan sebelumnya via web browser. | wc -l)
Interface-nya akan ditampilkan cukup echo “found $sum
ramah dengan bantuan hyperlink. Dan users<hr>”
untuk mempermudah peng-copy-an, cat /etc/passwd | cut -d: -
x2web hanya akan memiliki satu file saja. f1
Untuk setiap tugas yang dikerjakan, ;;
kita akan memproses variabel grouplist) sum=$(cat /etc/group |
$QUERY_STRING. Apabila variabel wc -l)
yang satu ini belum diset, maka sebuah echo “found $sum
menu akan ditampilkan. Sementara groups<hr>”
apabila $QUERY_STRING memiliki nilai cat /etc/group | cut -d: -f1
tertentu, maka kita akan melakukan ;;
parsing sederhana dan melakukan tugas esac
yang bersesuaian. echo “</pre>”
Kita akan memiliki sebuah fungsi echo “<a
penting, yang kita beri nama wrapper(). href=$SCRIPT_NAME>back to menu</a>”
Fungsi ini akan melakukan parsing signature
$QUERY_STRING dan melakukan tugas }
yang bersesuaian. Fungsi lain seperti
fungsi signature() hanya akan menampilkan
informasi seputar web server. Berikut ini function signature()
adalah source code selengkapnya. {
Penjelasan akan diberikan setelahnya. echo “<hr>”
#!/bin/sh echo “$COPYRIGHT”
echo “$SERVER_SIGNATURE”
PROGNAME=”x2web” }
VERSION=”0.1a”
COPYRIGHT=”$PROGNAME $VERSION, (c) echo “Content-type: text/html”
Noprianto, July 2003. GPL.” echo
echo “<hr>”

function wrapper() if [ -z $QUERY_STRING ]


{
TASK=$(echo $QUERY_STRING | then
awk -F= ‘{print $2}’) echo “<body>”
echo “<a echo “<ul>”
href=$SCRIPT_NAME>back to menu</a>” echo “<li><a
echo “<pre>” href=$SCRIPT_NAME?task=df>disk free</
case $TASK in a></li>”

www.infolinux.web.id INFOLINUX SEPTEMBER 2003 63


TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Shell Script



Program x2web sedang menampilkan daftar proses Statistik pengunjung

echo “<li><a then df) df


href=$SCRIPT_NAME?task=psax>process echo “<body>” ;;
list</a></li>” echo “<ul>” psax) ps ax
echo “<li><a echo “<li><a ;;
href=$SCRIPT_NAME?task=meminfo>Memory href=$SCRIPT_NAME?task=df>disk free</ meminfo) cat /proc/meminfo
information</a></li>” a></li>” ;;
echo “<li><a echo “<li><a cpuinfo) cat /proc/cpuinfo
href=$SCRIPT_NAME?task=cpuinfo>CPU href=$SCRIPT_NAME?task=psax>process ;;
information</a></li>” list</a></li>” ...
echo “<li><a ... ...
href=$SCRIPT_NAME?task=part>Partition ... ...
information</a></li>” ... grouplist) sum=$(cat /etc/group |
echo “<li><a echo “<li><a wc -l)
href=$SCRIPT_NAME?task=mtab>Mounted href=$SCRIPT_NAME?task=grouplist>All
filesystem</a></li>” groups in system</a></li>” echo “found $sum
echo “<li><a echo “</ul>” groups<hr>”
href=$SCRIPT_NAME?task=uname>Kernel signature cat /etc/group | cut -d: -f1
information</a></li>” echo “</body>” ;;
echo “<li><a esac
href=$SCRIPT_NAME?task=userlist>All else echo “</pre>”
users in system</a></li>” wrapper $QUERY_STRING echo “<a
echo “<li><a fi href=$SCRIPT_NAME>back to menu</a>”
href=$SCRIPT_NAME?task=grouplist>All signature
groups in system</a></li>” Blok kode ini bertugas untuk }
echo “</ul>” menampilkan menu apabila variabel
signature $QUERY_STRING belum diset. Kita Kita akan membahas fungsi wrapper()
echo “</body>” menggunakan penguji -z untuk tersebut. Pertama-tama, kita akan
mengetahui apakah suatu string adalah memroses $QUERY_STRING dengan
else string kosong atau tidak. memisahkannya menjadi dua bagian
wrapper $QUERY_STRING function wrapper() dengan token pemisah adalah tanda sama
fi { dengan (=). Untuk itu, kita meminta
TASK=$(echo $QUERY_STRING | bantuan kepada program awk. Setelah itu,
Bagaimana? Bukanlah source awk -F= ‘{print $2}’) apa yang kita lakukan hanyalah membaca
programnya pun cukup singkat dan echo “<a /proc ataupun file-file lain di sistem.
sederhana? href=$SCRIPT_NAME>back to menu</a>” Dengan demikian, kita dapat melihat
if [ -z $QUERY_STRING ] echo “<pre>” betapa mudahnya menampilkan informasi
case $TASK in sistem Anda ke web browser.

64 INFOLINUX SEPTEMBER 2003 www.infolinux.web.id


Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial TUTORIAL
Shell Script

Kembali ke masalah keamanan. #!/bin/sh stat) do_stat;;


Adalah sangat berbahaya apabila show) do_show;;
program ini Anda jalankan di lingkungan FSTAT=/tmp/stats esac
di mana setiap orang dapat dengan }
mudah mengaksesnya. Apakah Anda function do_stat()
rela apabila setiap orang mengetahui {
proses apa saja yang sedang berjalan test ! -f $FSTAT && touch $FSTAT echo “Content-type: text/html”
dan kemudian memanfaatkan kelemahan echo echo
salah satu dari program tersebut? Atau “$(date):::$REMOTE_ADDR:::$HTTP_USER_
relakah jika setiap orang mengintip setiap AGENT:::” >> $FSTAT
rahasia dapur Anda? Tidak. Pembuatan } if [ ! -z $QUERY_STRING ]
password bisa Anda gunakan. then
Selain itu, pembuatan direktori function do_show() wrapper $QUERY_STRING
terproteksi menggunakan .htaccess juga { fi
mungkin akan membantu. Namun, echo “<pre>”
apabila Anda ingin membuat administrasi sum=$(cat $FSTAT | wc -l 2>/dev/ exit 0
via web, pelajarilah prinsip kerja webmin. null)
echo “$sum records found” Bagaimana pendapat Anda tentang
Statistik pengunjung echo “<hr>” pemrograman CGI dengan shell script?
Mengetahui jumlah pengunjung situs kita test -f $FSTAT && cat $FSTAT | sed Apabila seseorang benar-benar
selalu menjadi hal yang menyenangkan. -e “s/:::/<br>/g” mendalami seni pemrograman shell,
Tentunya, setelah bercapai-capai ria echo “</pre>” maka aplikasi CGI yang berkualitas tinggi
membuat website, senyum lebar akan } pun dapat diciptakan. Hanya, aspek-
semakin merekah ketika semakin banyak aspek keamanan pun harus senantiasa
pengunjung yang menyibukkan web function wrapper() diperhatikan agar aplikasi tersebut tidak
server kita. Terkadang, kita perlu untuk { menjadi senjata makan tuan.
mencatat informasi pengunjung seperti case $1 in Noprianto (noprianto@infolinux.co.id)
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.

www.infolinux.web.id INFOLINUX SEPTEMBER 2003 65


TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Statistik Lagu XMMS

Statistik Lagu XMMS jumlah lagu tersebut setelah didengarkan.


Apabila yang satu ini telah dikerjakan,
maka penampilan dan pengurutannya
akan menjadi jauh lebih mudah.
Senang mendengarkan lagu MP3 atau OGG
Untuk mudahnya, kita akan membuat
menggunakan XMMS? Lagu mana yang sebuah program yang akan menulis dan
paling sering Anda dengarkan? Lagu mana membaca dari sebuah file database.
yang paling jarang Anda dengarkan? Tidak Format dari file database tersebut
ingat? Mari catat dengan membuat statistik adalah:
lagu-lagu yang diputar dengan XMMS! <jumlah_didengarkan>:::<nama_file_lagu>

H
ampir semua penikmat musik di tab Effects/General Plugins. Kemudian, di Kita memiliki dua field dengan
Linux pasti mengenal XMMS. bagian bawah tab tersebut, pilihlah pemisah field adalah tiga buah tanda titik
Wajar adanya karena XMMS General plugin Song Change, dan kliklah dua (:::). Field <jumlah_didengarkan>
menawarkan kemiripan yang luar biasa tombol Configure. Jangan lupa untuk akan selalu ditambahkan ketika lagu yang
dengan Winamp, salah satu pemutar mengaktifkan pilihan Enable plugin sama diputar kembali. Dengan demikian,
audio dan video paling terkenal di dunia sesudahnya. Sebuah window dengan kita memiliki entri yang unik di dalam
ini. Selain itu, tentunya XMMS pun judul Song Change Configuration akan database tersebut. Penampilan datanya,
sangat andal untuk digunakan. terbuka untuk Anda. Di bagian song baik ke console, ataupun ke web, akan
Untuk koleksi musik, hampir semua change, Anda akan menjumpai sebuah menjadi sangat mudah.
penikmat musik mengoleksi musik- input box di mana perintah shell script
musiknya baik secara manual ataupun dapat diberikan begitu pergantian lagu Cara kerja program
menggunakan program pengatur dan terjadi. Program yang akan kita bangun adalah
pendata lagu. Penulis sendiri Apa yang akan kita lakukan adalah program shell script dengan sedikit
mengaturnya secara manual. mencatat informasi lagu tersebut. penggunaan awk. Kita akan memberikan
Dari pengalaman penulis sebagai Sebagai contoh, pemberian perintah: nama xmmsstat untuk program ini.
penikmat musik blues dan lagu-lagu echo “%f” >> ~/xmms.log Selain dapat menampilkan laporan di
lama, semua lagu yang dimasukkan di console, program juga siap menjadi
dalam playlist hanya akan didengarkan akan mengisi file xmms.log di home aplikasi CGI dan dapat menampilkan
saja. Akan tetapi, terkadang ada lagu directory Anda dengan semua nama file laporan di web.
yang dalam situasi dan kondisi tertentu lagu yang telah Anda dengarkan. Apa Apa yang pertama-tama kita periksa
menjadi sangat menarik untuk didengar saja selain nama file yang bisa adalah variabel $QUERY_STRING.
sehingga didengar berulang-ulang. dimasukkan? Berikut ini adalah daftar Apabila variabel ini di-set atau bukan
Beberapa saat yang lalu, penulis merasa selengkapnya: merupakan string kosong, maka kita akan
ingin mengetahui lagu-lagu apa aja yang  % F – Frekuensi (dalam hertz) menganggapnya aplikasi CGI dan akan
sebenarnya paling sering di dengarkan.  %c – Jumlah channel memanggil fungsi yang bersesuaian
Dan tentu saja juga lagu yang paling  %f – Nama file dengan path untuk menampilkan laporan di web.
jarang didengarkan. Suatu hari, lagu-lagu  % l – panjang lagu dalam milidetik Apabila tidak ada variabel
yang paling jarang didengarkan akan  % n – Nama lagu $QUERY_STRING, maka kita akan
menghilang dari harddisk.  %r – Rating lagu memeriksa keberadaan parameter pertama
 % s – Nama lagu pada program. Apabila tidak ada
Song Change  %t – Posisi dalam playlist
XMMS sendiri sebenarnya menyediakan
sarana bagi kita untuk mencatat lagu-lagu Artikel ini akan memfokuskan pada
apa saja yang telah kita dengarkan. Hal nama file lagu yang telah didengarkan.
tersebut dapat dilakukan dengan
mencatatkan nama file lagu atau judul Struktur data
lagu setiap kali terjadi pergantian lagu. Karena kita akan mengurutkan lagu-lagu
Dengan plug-in song change, semua hal mana saja yang paling sering didengar
tersebut dapat dilakukan dengan mudah. sampai yang paling jarang didengar,
Bukalah XMMS dan bukalah window maka kita tidak dapat memasukkan lagu-
Preferences (bisa Anda lakukan dengan lagu apa saja yang telah kita dengar
menekan kombinasi tombol CTRL+p). begitu saja ke dalam suatu file.


Masih di window Preferences, pilihlah Alasannya, kita perlu menambahkan Window Preferences XMMS

66 INFOLINUX SEPTEMBER 2003 www.infolinux.web.id


Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial TUTORIAL
Statistik Lagu XMMS

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


Window konfigurasi Song Change


record 1:::<nama_file_lagu> karena
lagu tersebut diputar untuk pertama COPYRIGHT=”$PROGNAME $VERSION, (c) UPDATE=”$FREQ:::$SONG”
kalinya. Apabila ternyata lagu yang ingin Noprianto, July 2003. GPL.” else
dimasukkan sudah pernah diputar DATA=”/home/users/nop/xmmsstatdata” UPDATE=”1:::$1"
sebelumnya, maka kita akan memisahkan TEMP=/tmp/$$.xmmsstat fi
kedua field tersebut, kemudian echo “$UPDATE” >> $DATA
menambahkan nilai untuk field Jangan lupa untuk mengatur variabel
<jumlah_didengarkan> dan kemudian DATA agar sesuai dengan konfigurasi }
memasukkan kembali record tersebut ke Anda. Fungsi stat() bertugas untuk
database. mengubah database. Di sini,
Sementara untuk penampilan laporan, 2. Definisi fungsi yang diperlukan penggunaan program grep sangatlah
sederhananya, kita hanya menampilkan function del() membantu. Dengan memberikan opsi -v
isi database dalam keadaan terurut dan { pada program grep, kita bisa
memisahkan setiap barisnya berdasarkan rm -rf $TEMP mendapatkan hasil inversi penyaringan.
token pemisah field, yaitu tiga buah rm -rf /tmp/*.xmmsstat Dengan opsi -w, kita dapat
tanda titik dua (:::). Menggunakan awk, } menyaringnya perkata. Untuk
kita akan mencetak karakter # sejumlah Fungsi del() bertugas untuk menambahkan field
field <jumlah_didengarkan> diikuti melakukan pembersihan file-file <jumlah_didengarkan>, kita
dengan nama file lagu. sementara. menggunakan program expr.
Untuk fungsi aplikasi CGI, secara
sederhana kita hanya menambahkan function stat() function show()
header dan kemudian memanggil fungsi { {
penampilan laporan. cat $DATA | grep -wvi “$1” > $TEMP cat $DATA | sort -r | awk -F”:::” ‘
UPDATE=”$(cat $DATA | grep -wi {
Kode! Kode! Kode! “$1”)” ORS=””
Kode yang akan kita buat sangatlah mv $TEMP $DATA for (i = 1 ; i <= $1 ; i++ )
pendek. Efektifnya, tidak akan melebihi del {
50 baris. Kita akan memulainya langkah if [ ! -z “$UPDATE” ] print “#”;
demi langkah: then }
SONG=”$(echo “$UPDATE” | print “ “$2”\n”;
1. Definisi variabel penting awk -F”:::” ‘{print $2}’)” }
PROGNAME=”XmmsStat” FREQ=”$(expr $(echo “$UP ‘
VERSION=”0.1a” DATE” | awk -F”:::” ‘{print $1}’) + 1)” }

www.infolinux.web.id INFOLINUX SEPTEMBER 2003 67


TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Statistik Lagu XMMS



Laporan di web Laporan di console

Fungsi show() bertugas untuk then Semuanya kembali kepada pengaturan


menampilkan laporan. Sederhananya, test -z “$1” && show && exit 0 sistem Anda masing-masing.
kita hanya menampilkan isi database test “$1” != “%f” && stat “$1” Setelah itu, buka kembali window
dan memberikan keluarannya ke exit 0 konfigurasi untuk plugin Song Change
program sort yang telah siap menerima else dan berikan perintah berikut ini pada
dengan senang hati. Kemudian, dengan become_cgi input box yang telah disediakan:
program awk, kita pun memisahkan exit 0 /usr/lib/cgi-bin/xmmsstat “$(basename “%f”)”
fieldnya dengan token tiga buah tanda fi
titik dua (:::). Sintaks awk yang mirip Program basename digunakan untuk
dengan bahasa C cukup fleksibel untuk del mendapatkan nama filenya saja.
digunakan. Dengan awk, kita Bagi Anda yang ingin mengakses
menampilkan karakter # sejumlah field Pertama-tama, kita memeriksa laporan via web browser, berikanlah
<jumlah_didengarkan>. keberadaan database. Apabila database alamat berikut ini:
tidak tersedia, maka kita akan http://<HOST>/cgi-bin/xmmsstat?show
function become_cgi() membuatnya dengan program touch.
{ Selanjutnya, kita akan memeriksa apakah Bagi Anda yang ingin menampilkan
test $QUERY_STRING != “show” && variabel $QUERY_STRING diset atau laporan di console, berikanlah perintah
return tidak. Dan seperti yang telah dibahas, berikut ini:
echo “Content-type: text/plain” kita akan mendelegasikan setiap tugas /usr/lib/cgi-bin/xmmsstat
echo kepada fungsi yang bersesuaian.
show Gantilah /usr/lib/cgi-bin sesuai dengan
Penggunaan konfigurasi Anda masing-masing.
} Letakkanlah program tersebut di direktori Demikianlah, kini kita dapat melihat
Fungsi yang satu ini benar-benar tidak cgi web server (penulis menggunakan lagu apa saja yang paling sering kita buka.
berguna. Hanya memeriksa apakah Apache) Anda agar dapat dengan mudah Lagu mana yang paling jarang dibuka pun
$QUERY_STRING bernilai show. diakses bagi Anda yang ingin dapat dipertimbangkan untuk dihapus.
menampilkan header sebagai aplikasi CGI menampilkan juga laporan di web. Lokasi Program ini masih memiliki banyak
dan kemudian memanggil fungsi show(). cgi umumnya di bawah direktori instalasi kekurangan, terutama pada penampilan
Berbagai perbaikan seperti pembuatan Apache (/usr/lib/cgi-bin untuk distro untuk halaman web. Selain itu, ada
grafik batang dengan penggunaan tabel Debian). Apabila Anda hanya ingin baiknya juga bagi kita untuk menampilkan
dapat ditambahkan di masa mendatang. menjadikannnya sebagai aplikasi console tanggal dan waktu pemutaran untuk
biasa, penting juga untuk menambahkan setiap lagu. Hal tersebut akan
3. Fungsi utama lokasi program ini ke dalam $PATH atau menjadikannya lebih informatif. Program
test ! -f $DATA && touch $DATA mengopikan program ini ke lokasi yang ini tersedia bebas untuk dimodifikasi dan
telah termasuk dalam $PATH. Membuat disebarluaskan. Sebagai mana halnya
link file mungkin merupakan alternatif kebebasan di dunia free software.
if [ -z $QUERY_STRING ] yang aman dan tidak mengotori sistem. Noprianto (noprianto@infolinux.co.id)

68 INFOLINUX SEPTEMBER 2003 www.infolinux.web.id


Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial 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 kernel yang digunakan, kemudian akan informasi versi dan hak cipta. Kemudian,
dalam beberapa hal sangatlah mendaftar seluruh modul kernel. Hal kita juga perlu untuk membuat file
membantu kita. Dengan mudah tersebut bisa didapat menggunakan sementara yang dibutuhkan oleh
kita dapat menambahkan apa yang program uname dan ls. Kemudian, program dialog. Berikut ini adalah
dibutuhkan oleh kernel maupun dengan program dialog, kita akan beberapa variabelnya:
mengurangi apa yang sudah tidak membuat navigasi modul per direktori. TEMP=/tmp/$$.mymodconf
dibutuhkan lagi. Kernel tidak lagi menjadi Dalam artian, pengguna dapat masuk VERSION=0.1a
sebesar raksasa dan begitu rakus. ke suatu direktori yang dapat COPYRIGHT=”(c) Noprianto, June 2003.
Walau demikian, terkadang proses mengandung direktori lain atau modul GPL”
memasukkan atau menghapus modul kernel. Apabila pengguna memilih
kernel dapat menjadi cukup merepotkan. suatu direktori, maka tindakan default Setelah itu, kita akan mencoba untuk
Salah satu contohnya adalah ketika Anda dari program adalah masuk ke direktori mendapatkan versi kernel dan direktori
ingin memasukkan modul dengan fungsi tersebut dan mandaftar seluruh modul kernel. Setelah itu, apa yang kita
tertentu, namun nama modulnya tidak modulnya. Dalam mendaftar seluruh dapatkan akan diasosiasikan ke variabel-
Anda ketahui. Anda pun segera menuju modul tersebut, program akan mencoba variabel berikut:
direktori /lib/modules/ mengetahui apakah modul tersebut KERNEL_VERSION=$(uname -r)
<VERSI_KERNEL> dan mulai mencari- telah dimasukkan ke dalam kernel. Kita KERNEL_MODULES_DIR=/lib/modules/
cari. Karena modul kernel diletakkan akan menginformasikan hal tersebut $KERNEL_VERSION/kernel/
dalam berbagai direktori, maka kepada pengguna. selected=””
navigasinya akan cukup merepotkan. Apabila pengguna memilih suatu WORKING=$KERNEL_MODULES_DIR/
Menggunakan utiliti seperti Midnight modul, maka tindakan default dari $selected
Commander mungkin bisa membantu. program adalah memeriksa apakah
Pada distro Debian, sebuah program modul tersebut telah dimasukkan ke Variabel KERNEL_VERSION
dengan nama modconf sangatlah dalam kernel. Apabila modul tersebut dimaksudkan sebagai versi kernel yang
bermanfaat untuk melakukan navigasi telah dimasukkan, maka kita akan sedang digunakan. Versi kernel perlu
pada modul-modul kernel dan sekaligus menanyakan apakah pengguna akan didapatkan untuk mengetahui lokasi
melakukan manajemen sederhana. menghapus modul tersebut dari kernel. direktori modul kernel yang disimpan
Dengan menjalankan modconf, Anda Apabila modul tersebut belum dalam variabel KERNEL_MODULES_
akan diberikan daftar modul kernel dan dimasukkan ke kernel, maka kita akan DIR.
keterangan apakah modul tersebut telah menanyakan apakah pengguna ingin Variabel selected dimaksudkan untuk
diinstal atau belum. Di program ini pula, memasukkan modul tersebut ke dalam mendapatkan apa yang dipilih oleh
Anda dapat memasukkan atau kernel. pengguna. Variabel selected juga akan
menghapus modul kernel dengan satu Kekurangan utama dari program ini mempengaruhi lokasi direktori kerja kita
dua kali penekanan tombol ENTER. adalah langsung melakukan terminasi yang disimpan dalam variabel WORK-
Siapkan editor teks Anda dan kita (keluar) apabila pengguna menekan ING.
akan segera memulai pekerjaan kita. tombol Cancel. Selanjutnya, untuk memperindah
Berikut ini adalah langkah-langkahnya: Program ini akan kita beri nama program kita, kita akan membuat alias
mymodconf. untuk program dialog berikut agar
1. Fitur program program kita memiliki tampilan yang
Pertama-tama, tentunya kita perlu 2. Membuat beberapa variabel awal seragam:
mengetahui dahulu apa yang akan kita yang dibutuhkan alias dialog=”dialog —backtitle ‘My Kernel
buat. Secara umum, program yang kita Sebagai suatu aplikasi standar, kita akan Module Configurator v$VERSION
bangun mampu untuk mendeteksi versi mendefinisikan beberapa variabel seperti ($KERNEL_VERSION)’”

www.infolinux.web.id INFOLINUX SEPTEMBER 2003 69


TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Manajemen Modul Kernel



mymodconf Mendaftar modul dan statusnya

3. Mendefinisikan beberapa fungsi Kita akan membahas baris pertama: Kemudian, kita akan sampai pada
yang diperlukan fungsi berikutnya: getfiles(). Fungsi ini
Berikutnya adalah mendefinisikan fungsi MODULE=‘echo $i | awk -F. ‘{print $1}’‘ akan mendaftar file-file dalam direktori.
yang dibutuhkan dalam program kita. Apabila yang didapatkan adalah file,
Dalam hal ini, kita akan mendefinisikan Baris ini dimaksudkan untuk maka fungsi ini juga akan memeriksa
tiga fungsi: deltemp(), is_installed() dan menghilangkan ekstensi .o dari nama file apakah modul tersebut telah
getfiles(). Masing-masing akan yang diterima sebagai parameter pertama dimasukkan ke dalam kernel. Secara
menghapus file sementara, mengetahui fungsi ini. Dengan menggunakan umum, fungsi ini dimaksudkan untuk
apakah suatu modul telah dimasukkan program awk, kita memisahkan nama file menyusun rangkaian parameter bagi
dalam kernel atau belum dan tersebut dan mengambil bagian program dialog.
mendapatkan file-file dalam direktori pertamanya. Hal ini sejauh ini bekerja, function getfiles()
modul kernel. walau perlu diperhatikan dan diperbaiki {
Kita akan memulai dengan fungsi apabila nama file modul memiliki lebih files2=””
yang paling sederhana: deltemp(). Fungsi dari satu karakter titik. Sejauh ini, nama files=”$(ls $1)”
ini hanya memiliki satu perintah untuk file modul umumnya hanya memiliki satu for i in $files
menghapus file sementara. Fungsi ini karakter titik. do
tidak memerlukan penjelasan lebih lanjut. INSTALLED=‘lsmod | grep -w $MODULE | if [ -d $1/$i ]
function deltemp() wc -l 2>/dev/null‘ then
{ files2=”$files2 $i $i”
rm -rf $TEMP Kemudian, variabel INSTALLED else
} dimaksudkan untuk mengetahui apakah is_installed $i
modul telah dimasukkan ke dalam kernel. if [ $? -eq 0 ]
Berikutnya adalah fungsi is_installed(), Cara ini bahkan lebih berbahaya daripada then
yang berfungsi untuk mengetahui apakah baris sebelumnya. Saran dan kritik files2=”$files2 $i
suatu modul telah dimasukkan ke dalam diharapkan. Untuk mengetahui suatu not-installed”
kernel atau belum. Perlu dicatat, fungsi modul telah dimasukkan ke kernel atau else
ini belumlah sempurna dan terkadang belum, secara sederhana, kita hanya files2=”$files2 $i
mengembalikan hasil yang tidak sesuai. menjalankan perintah lsmod yang akan installed”
Penjelasan fungsi akan diberikan mendaftar modul-modul kernel yang fi
setelahnya. telah dimasukkan. Hasil keluaran tersebut fi
function is_installed() kita saring sesuai dengan nama modul done
{ yang ingin diperiksa. Untuk }
MODULE=‘echo $i | awk -F. ‘{print $1}’‘ meningkatkan akurasi, kita akan
INSTALLED=‘lsmod | grep -w $MODULE memberikan opsi -w pada program grep Baris berikut ini dimaksudkan untuk
| wc -l 2>/dev/null‘ yang berfungsi untuk melakukan mendapatkan file-file dalam direktori yang
return $INSTALLED saringan per kata (dalam beberapa diberikan:
} kondisi, opsi -w ini justru akan files2=””
merepotkan). files=”$(ls $1)”

70 INFOLINUX SEPTEMBER 2003 www.infolinux.web.id


Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial TUTORIAL
Manajemen Modul Kernel



Konfirmasi instalasi modul Keberhasilan instalasi

Kemudian, kita akan membahas blok kita akan menyusun nilai kembalian then
kode berikut ini: berikut ini: kode
for i in $files files2=”$files2 $i installed” kode
do else
if [ -d $1/$i ] sebaliknya, kita akan menyusun nilai kode
then kembalian berikut ini: kode
files2=”$files2 $i $i” files2=”$files2 $i not- installed” fi
else done
is_installed $i 4. Program utama
if [ $? -eq 0 ] Pada prinsipnya, program utama Selanjutnya, kode-kode apakah yang
then hanyalah berfungsi sebagai navigator harus dimasukkan apabila pengguna
files2=”$files2 $i not- yang akan bekerja terus menerus memilih direktori? Intinya, kode-kode
installed” sampai pengguna menekan tombol tersebut akan masuk ke direktori dan
else cancel. Untuk itu, kita akan meletakkan mendaftar file-file di dalamnya. Dengan
files2=”$files2 $i semua kode dalam blok perulangan demikian, blok while [ 1 ] kita akan
installed” berikut ini: bertambah panjang menjadi berikut:
fi while [ 1 ] while [ 1 ]
fi do do
done kode WORKING=”$WORKING/$selected”
kode
Algoritmanya adalah: done if [ -d $WORKING ]
Untuk setiap file dalam suatu direktori, then
periksalah apakah file tersebut adalah file Hal berikut yang harus diperhatikan getfiles $WORKING
biasa atau direktori. Apabila file tersebut adalah perlakuan ketika pengguna dialog —menu “category:
adalah direktori, maka susunlah nilai memilih suatu file atau direktori. $selected” 20 60 10 $files2 2>
kembalian berikut ini: Tentunya, apabila pengguna memilih $TEMP
files2=”$files2 $i $i” suatu file, maka kita akan memeriksa if [ $? -ne 0 ]
modul tersebut. Apabila pengguna then
Dalam penampilan menu di program memilih direktori, maka kita akan masuk exit 1
dialog, kita butuh memberikan pasangan ke direktori tersebut dan mendaftar else
<nama> <definisi> untuk setiap item semua modulnya. selected=‘cat $TEMP‘
menu. Untuk itulah, kita perlu menyusun Untuk itu, blok while [ 1 ] kita akan deltemp
nilai kembalian tersebut. berkembang menjadi demikian: fi
Akan tetapi, apabila jika file tersebut while [ 1 ] else
adalah sebuah file biasa, maka kita do kode
akan memeriksa apakah modul tersebut WORKING=”$WORKING/$selected” kode
telah dimasukkan ke dalam modul atau fi
belum. Apabila telah dimasukkan, maka if [ -d $WORKING ] done

www.infolinux.web.id INFOLINUX SEPTEMBER 2003 71


TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Manajemen Modul Kernel

Untuk mendaftar file di direktori yang TODO=”install” then


dipilih pengguna, kita akan memanggil else exit 1
fungsi getfiles() dengan parameter TODO=”uninstall” else
adalah variabel $WORKING. fi addinfo=‘cat $TEMP‘
getfiles $WORKING deltemp
kemudian, kita akan menampilkan kotak insmod
Kemudian, kita akan menampilkan dialog dan menanyakan kepada user $MODULE $addinfo 1>/dev/null 2>&1
menu dengan item-item sesuai kembalian untuk melakukan aksi yang ditawarkan. fi
dari fungsi getfiles() tersebut. Apabila pengguna memilih tidak, maka else
dialog —menu “category: kita akan segera melakukan terminasi rmmod $MODULE
$selected” 20 60 10 $files2 2> program. Sekali lagi, yang satu ini harus 1>/dev/null 2>&1
$TEMP diperbaiki. fi
dialog —yesno “$TODO module
Tanda 2>$TEMP dimaksudkan agar $selected? “ 10 40 if [ $? -ne 0 ]
segala sesuatu yang dipilih pengguna if [ $? -ne 0 ] then
dimasukkan dalam file yang namanya then RESULT=”failed”
disimpan di variabel $TEMP. Hal ini exit 1 EXIT=1
adalah ciri khas program dialog yang else else
menyimpan pilihan pada stderr. kode RESULT=”succeded”
Tidak lupa, kita juga memeriksa kode EXIT=0
tombol apa yang ditekan oleh fi fi
pengguna. Program dialog akan dialog —msgbox “$TODO
mengembalikan nilai 0 apabila penekan Apabila pengguna memilih tombol $selected $addinfo: $RESULT” 10 40
menekan tombol OK dan Yes, maka kita akan memeriksa aksi yang exit $EXIT
mengembalikan nilai 1 apabila penekan dilakukan pada modul tersebut. Sekali
menekan tombol Cancel. Apabila lagi kita akan memeriksa status modul Berikut ini adalah source code
penekan menekan tombol cancel, maka kernel tersebut. Apabila aksinya adalah selengkapnya dari program
kita akan segera mengakhiri hidup install (berarti modul belum dimasukkan mymodconf:
program. Hal yang satu ini bukanlah hal ke dalam kernel), maka kita akan #!/bin/sh
yang baik. Seharusnya, kita akan menampilkan sebuah kotak dialog di
kembali ke menu utama. Namun apabila mana pengguna bisa memasukkan TEMP=/tmp/$$.mymodconf
pengguna memilih tombol OK, maka informasi tambahan sebagai parameter VERSION=0.1a
kita akan mengambil item menu yang bagi program insmod. Setelah itu, kita COPYRIGHT=”(c) Noprianto, June 2003. GPL”
dipilih dengan membaca file yang kana menjalankan program insmod
namanya disimpan di dalam variabel dengan segala informasi yang telah kita KERNEL_VERSION=$(uname -r)
$TEMP. Kemudian, file $TEMP segera kumpulkan. KERNEL_MODULES_DIR=/lib/modules/
kita hapus dengan memanggil fungsi Apabila aksi yang akan dilakukan $KERNEL_VERSION/kernel/
deltemp(). adalah uninstall (berarti modul telah selected=””
Sekarang, bagaimana kalau pengguna dimasukkan ke dalam kernel), maka kita WORKING=$KERNEL_MODULES_DIR/
memilih file dan bukannya direktori? akan menghapus modul tersebut dari $selected
Kode-kode apa yang harus dimasukkan kernel dengan program rmmod.
pada blok while [ 1 ] kita yang masih Dan selanjutnya, kita akan memeriksa alias dialog=”dialog —backtitle ‘My Kernel
kosong? Pada prinsipnya, kita akan apakah program insmod dan rmmod Module Configurator v$VERSION
memeriksa apakah modul tersebut telah tersebut telah bekerja dengan baik. ($KERNEL_VERSION)’”
dimasukkan ke dalam kernel atau belum. Informasi tersebut kemudian akan kita
Apabila telah dimasukkan ke dalam tampilkan kepada pengguna. Berikut function deltemp()
kernel, maka aksi yang akan ditawarkan adalah blok kode programnya: {
ke pengguna adalah uninstall. if [ $INSTALLED -eq 0 ] rm -rf $TEMP
Sebaliknya, aksi yang akan ditawarkan then }
adalah install. Berikut ini adalah kode dialog —nocancel —
programnya: inputbox “additional information for \ function is_installed()
is_installed $i $selected” 10 {
if [ $? -eq 0 ] 40 2>$TEMP MODULE=‘echo $i | awk -F. ‘{print
then if [ $? -ne 0 ] $1}’‘

72 INFOLINUX SEPTEMBER 2003 www.infolinux.web.id


Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial TUTORIAL
Manajemen Modul Kernel

INSTALLED=‘lsmod | grep -w $selected? “ 10 40 if [ $? -ne 0 ]


$MODULE | wc -l 2>/dev/null‘ if [ $? -ne 0 ] then
return $INSTALLED then RESULT=”failed”
} exit 1 EXIT=1
else else
function getfiles() if [ $INSTALLED -eq 0 ] RESULT=”succeded”
{ then EXIT=0
files2=”” dialog —nocancel — fi
files=”$(ls $1)” inputbox “additional information for \ dialog —msgbox “$TODO
for i in $files $selected” 10 $selected $addinfo: \
do 40 2>$TEMP $RESULT” 10 40
if [ -d $1/$i ] if [ $? -ne 0 ] exit $EXIT
then then fi
files2=”$files2 $i $i” exit 1 fi
else else done
is_installed $i addinfo=‘cat
if [ $? -eq 0 ] $TEMP‘ Demikianlah proses pembuatan
then deltemp mymodconf. Apabila fungsi-fungsi
files2=”$files2 $i insmod pemeriksaan modul dan antar muka
not-installed” $MODULE $addinfo 1>/dev/null 2>&1 program ini dibuat lebih ramah, kemudian
else fi program dialog kita gantikan dengan
files2=”$files2 $i else gdialog, maka sebuah aplikasi GUI yang
installed” rmmod $MODULE ramah akan kita hasilkan. Bagaimana
fi 1>/dev/null 2>&1 pendapat Anda? Apakah program ini
fi fi mempermudah Anda untuk bekerja
done dengan modul kernel?
} Noprianto (noprianto@infolinux.co.id)

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 e-
mail 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 ClamAV juga semakin lama semakin terinstal), yaitu dengan menjalankan
menempati urutan pertama banyak. perintah:
menurut Symantec Security Dalam artikel ini, penulis hanya akan Perl –MCPAN –eshell
Response dengan tiga dari empat Top membahas instalasi ClamAV di Linux
Virus Threat setengah tahun 2003 dengan MTA Postfix. Sedangkan untuk Bila Anda belum pernah mengguna-
pertama ini adalah virus atau worm yang pengguna MTA qmail dan qmail-scanner, kannya, Anda akan diminta untuk
menyebar melalui e-mail. Dengan silakan membaca artikel http:// memasukkan beberapa parameter.
demikian, instalasi antivirus pada mail people.cakraweb.com/~asfik/writings/ Setelah selesai akan keluar prompt seperti
server seharusnya menjadi kewajiban qmail-scanner-clam.html. di bawah:
bagi setiap administrator mail server. cpan>
Harga antivirus komersial yang bisa Persiapan
digunakan pada mail server bervariasi Download ClamAV dari http:// Kemudian pada prompt tuliskan install
dari mulai US$149. Itu pun hitungannya www.clamav.org/stable/index.html. <nama_modul>. Keuntungannya adalah
bervariasi mulai dari per domain, per Anda memerlukan Perl dan Amavis-ng Anda akan memperoleh modul versi
mailbox atau per instalasi, dan harga sebagai interface dari Postfix ke terbaru dan proses instalasinya otomatis,
tersebut belum termasuk biaya untuk ClamAV. Biasanya Perl sudah terinstall termasuk apabila ada modul tambahan
langganan update basis data virus. Harga pada sebuah sistem Linux. Bila belum yang perlu diinstal lebih dahulu.
tersebut akan terasa berat jika terinstal, Perl dapat di-download dari Bila Anda lebih suka mencari modul–
penggunaannya bukan untuk komersial. http://www.perl.org. Download dan modul tersebut sendiri dan
Clam AntiVirus (ClamAV) hadir instal Amavis-ng dari http:// menginstalnya dari rpm, silakan
sebagai solusi baik untuk pengguna www.sourceforge.net/projects/amavis. mencarinya di http://rpmfind.net. Bila
nonkomersial maupun komersial yang Anda juga memerlukan modul–modul Anda lebih suka menggunakan source
memerlukan solusi antivirus yang tidak perl sebagai berikut: file berbentuk tar.gz untuk diinstal
mahal. Sekarang ClamAV terbaru adalah Archive::Tar manual, silakan mencari modul–modul
versi 0.54. Archive::Zip tersebut di http://cpan.perl.org.
ClamAV adalah antivirus yang Compress::Zlib Kemudian agar bisa memindai
dipublikasikan menggunakan lisensi Config::IniFiles attachment terkompres, Amavis-ng juga
GNU GPL2 dan menggunakan basis data Convert::TNEF membutuhkan paket–paket kompresi arc,
virus dari OpenAntiVirus, sebuah Convert::Uulib lha, unarj, unrar, dan zoo.
antivirus yang juga gratis. Akan tetapi, File::Mmagic
berbeda dengan OpenAntiVirus yang IO::Stringy Proses instalasi
ditulis dalam Java, ClamAV ditulis dalam MIME::tools Jika menginstal ClamAV untuk kali
C dan basis datanya secara teratur di- MailTools pertama, Anda perlu membuat user
update. ClamAV juga mampu mendeteksi Libnet account dan group account untuk
virus–virus polymorphic. ClamAV. Kita namakan saja clamav.
ClamAV dapat digunakan di Linux, Modul–modul di atas diperlukan # groupadd clamav
Solaris, FreeBSD, OpenBSD, NetBSD, untuk mengolah e-mail dan memecahnya # useradd -g clamav -s /bin/false -c “Clam
AIX, Mac OS X, Cygwin B20 pada menjadi bagian–bagian yang akan AntiVirus” clamav
berbagai arsitektur seperti Intel, Alpha, diperiksa ClamAV. Untuk menginstalasi # passwd –l clamav
Sparc, Cobalt MIPS, PowerPC, dan RISC modul–modul tersebut, penulis
6000. MTA (Mail Transfer Agent) yang menyarankan untuk menggunakan modul Baris terakhir untuk memastikan
didukung (dan/atau mendukung) perl CPAN (biasanya juga sudah bahwa user clamav terkunci dan account

74 INFOLINUX SEPTEMBER 2003 www.infolinux.web.id


Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial 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”

Setelah selesai, coba memindai file


source clamAV.
[root@office mail]# clamscan clamav-
x.yz.tar.gz
clamav-x.yz.tar.gz: ClamAV-Test-Signature
FOUND

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.


Website Clam AntiVirus


Ada dua cara untuk secara rutin
menjalankannya. Pertama menggunakan Dan akhirnya sesuaikan path ke smtpd -o
menjalankan freshclam sebagai daemon. clamscan dalam bagian [CLAM]: content_filter=filter:
# freshclam -d -c 2 -l /var/log/clam- clamscan = /usr/local/bin/clamscan
update.log Konfigurasi seperti di atas adalah pada
Menggunakan antivirus ini sebagai mail gateway yang akan me-relay e-mail
Jangan lupa tambahkan baris ini ke content-filtering pada Postfix sangat dari LAN dengan alamat IP 192.168.0.0/
startup script agar utiliti tersebut mudah. Edit file /etc/postfix/master.cf 24 dan localhost tanpa dipindai (scan-
dijalankan saat restart system. dan tambahkan baris berikut: ning). Hanya e-mail yang masuk melalui
Cara kedua adalah menggunakan cron filter unix - n n - - pipe interface 212.212.212.xxx, yang akan
untuk menjalankan utiliti tersebut. flags=Rq user=mail argv=/usr/bin/amavis dipindai oleh anti virus. Reload Postfix
Tambahkan baris seperti di bawah ke ${sender} — ${recipient} dan sekarang e-mail server Anda sudah
crontab milik root atau clamav: dilengkapi dengan antivirus.
0 8 * * * /usr/local/bin/freshclam —quiet -l / Dan ubah baris di bawah ini:
var/log/clam-update.log smtp inet n - n - - smtpd Antivirus lain di Linux:
1 . AmaViS Virus Scanner
Kemudian extract, compile dan install menjadi: (www.amavis.org)
Amavis-ng dengan langkah berikut ini: smtp inet n - n - - smtpd -o 2 . AntiVir (www.hbedv.com)
$ tar xvfz amavis-ng_0.1.6.4.orig.tar.gz content_filter=filter: 3 . Bitdefender (www.bitdefender.com)
$ cd amavis-ng-0.1.6.4.orig/ 4 . Central Command
$ perl Makefile.PL Bila Anda ingin antivirus hanya (www.centralcommand.com)
$ make memindai e-mail masuk, tapi tidak 5 . F-Prot Antivirus (www.f-prot.com)
$ su -c “make install” memindai e-mail keluar atau yang di 6 . Kaspersky (www.kaspersky.com)
$ cp amavis-ng-0.1.6.4.orig/etc/amavis.conf relay, bisa juga baris di atas menjadi 7 . Ravantivrus (www.ravantivirus.com)
/etc/amavis-ng/amavis.conf seperti berikut: 8 . Shopos Antivirus
192.168.0.1:smtp inet n - n - - smtpd -o (www.sophos.com)
Berikut adalah baris yang perlu Anda smtpd_client_restrictions=permit_mynetworks,reject 9 . Vexira Antivirus
sesuaikan di amavis.conf: 127.0.0.1:smtp inet n - n - - smtpd -o (www.warpedsystems.sk.ca)
mail-transfer-agent = Postfix smtpd_client_restrictions=permit_mynetworks,reject 10. Dan lain-lain.
virus-scanner = CLAM 212.212.212.xxx:smtp inet n - n - - Dapid Candra (dapid@candra.info)

www.infolinux.web.id 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 pub-
lishing canggih seperti PageMaker. Anda dapat menggunakan
LYX dan LATEX.

L
YX adalah salah satu front-end  Dapat memasukkan banyak grafik LATEX dalam bentuk ERT (Evil Red
LATEX yang berbasis GUI, yang terutama jenis raster. Text) dengan menekan perintah
dapat dijalankan pada hampir  Ukuran gambar bervariasi dan dapat pendek Ctrl+l. Bagaimana LYX
semua platform sistem operasi. LATEX diletakan secara fleksibel. dapat dijadikan sebagai aplikasi DTP
sudah cukup lama dikenal sebagai alat  Format yang kompak. akan dibahas tiap-tiap komponen
untuk menata tata letak (layout) buku atau  Judul sebagai huruf normal atau DTP pada LYX berikut ini.
majalah yang berkaitan dengan ilmu pasti. sebagai gambar.
Dengan munculnya LYX yang dapat  Mendukung huruf kaligrafi, dapat Jenis huruf atau tipografi
dioperasikan secara intuitif, hampir semua dilakukan dengan menggunakan paket Hingga perkembangan saat ini, hampir
bidang dapat memanfaatkan LATEX chancery. semua jenis huruf bisa digunakan di
sebagai alat untuk menata tampilan buku/  Dapat menghasilkan PDF dengan pada DTP-LYX/LATEX. Namun yang
majalah. Sistem desktop publishing (DTP) kualitas yang baik. paling mudah diinstal adalah jenis
digunakan untuk mengedit teks dan huruf Type1. Huruf TrueType di
gambar yang dimasukkan pada suatu LYX sebagai aplikasi DTP Windows dapat juga dikonversi ke
halaman penuh. Jadi, secara prinsip Berbeda dengan program khusus dalam huruf Type1. Banyak software
hampir semua jenis word processor atau aplikasi DTP yang berbasis bingkai gratis/open source yang dapat
document-processor dapat dijadikan salah (frame), LYX/LATEX tidak mempunyai digunakan untuk konversi ini, misalnya
satu komponen masukan dari sistem fasilitas semacam ini. Peletakan bingkai ttf2* (ttf2afm, ttf2bdf, ttf2pfa, ttf2pfb,
DTP. Apa keunggulan LYX pada sisi pada naskah LYX/LATEX ditentukan ttf2pk, ttf2pt1, dan ttf2tfm) yang
aplikasi DTP? oleh definisi pada makro atau paket berbasis CLI atau PfaEdit yang berbasis
LATEX yang bekerja di balik aplikasi yang digunakan. Namun demikian, GUI.
LYX merupakan text-processor yang pengaturan letak bingkai pada suatu Di lingkungan LATEX terdapat cukup
memiliki banyak keunggulan halaman pada program LYX dapat banyak jenis huruf yang sudah terinstal
dibandingkan word processor, di dikontrol secara langsung dengan secara default. Jika ingin
antaranya adalah konsistensi, referensi- menambahkan perintah TEX atau menambahkan jenis huruf pada basis
silang 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.

Komponen aplikasi DTP


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.


Gambar 1. Daftar contoh font

76 INFOLINUX SEPTEMBER 2003 www.infolinux.web.id


Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial TUTORIAL
LYX (Aplikasi Desktop Publisher)

modifikasi kernel LATEX yang khusus dengan cara menambahkan perintah


didesain untuk aplikasi DTP dua- LATEX pada preambul atau dalam
kolom dan dapat digunakan dengan bentuk ERT. Untuk menambah latar
menambahkan perintah belakang gambar satu halaman penuh
\usepackage{flushend,cuted} dapat dilakukan dengan menuliskan
 pada preambul perintah berikut ini pada preambul:
\usepackage{eso-pic,graphicx}
dan \newcommand\BackgroundPicture[2]{%
\begin{strip} ... \end{strip} \setlength{\unitlength}{1pt}%
 pada teks yang akan dijadikan satu- default \put(0,\strip@pt\paperheight){%
kolom. \parbox[t][\paperheight]{\paperwidth}{%
\vfill


LYX di Red Hat 9


Memasukkan grafik/gambar \centering\includegraphics[angle=#2]{#1}
data LATEX dapat men-download dari LYX terbaru memberikan fasilitas untuk \vfill
CTAN. Variasi jenis huruf yang terdapat memasukkan aneka jenis gambar baik }}}
di LATEX yang berhasil penulis instalasi raster maupun vektor. Format gambar \AddToShipoutPicture{\BackgroundPicture{rose}{0}}
dapat dilihat pada Gambar 1. yang dapat disisipkan langsung pada
LYX dapat diketahui dengan perintah: Sebagai catatan, gambar yang
Format kolom $lyx -dbg graphics digunakan harus sebesar ukuran kertas
Berbeda dengan buku yang biasanya (ukuran gambar dapat diatur dengan
tersusun dengan format satu kolom, Akan muncul list format gambar program GIMP). Paket overpic dapat
hampir semua majalah dan beberapa apa saja yang dapat di-support oleh digunakan dengan cara menambahkan
buku lebar disusun dengan format dua LYX (di luar format postscript, pdf, perintah \usepackage[abs]{overpic} pada
kolom atau lebih. Pada suatu aplikasi tex/pstex, tgif, dan fig): “Of these, preambul dan menuliskan perintah
DTP diperlukan fleksibilitas penentuan LYX recognises the following formats: berikut ini pada teks dalam ERT.
jumlah kolom pada satu halaman tata bmp, fits, gif, jpg, ppm, pgm, pbm, \begin{overpic}[scale=2.25,unit=1mm]{Emperors.eps}
letak. Program LYX memberikan fasilitas sgi, tiff, xbm, xwd” \put(3,3){\huge\textcolor{white}{ \LaTeX}}
untuk mendefinisikan format kolom Penentuan posisi gambar pada teks \put(10,5){\includegraphics[scale=1.25]{Emperors.eps}}
(satu kolom atau lebih) dalam beberapa dapat dibagi dua macam, yaitu gambar \end{overpic}
cara: sebagai objek gambar (mengambang
1 . Mengunakan pilihan twocolumn atau atau tidak) atau gambar sebagai latar Paket epigraph, eso-pic, graphicx
onecolumn. Pilihan ini adalah standard belakang dari teks. Untuk mengatur dan overpic biasanya akan terdapat
naskah LATEX, yang dapat gambar secara fleksibel (posisi tidak pada paket LATEX yang sudah
ditentukan pada menu tata letak: tergantung kepada LATEX) sebaiknya terinstal. Jika tidak tersedia pada sistem
Document -> Page -> Twocolumn. gambar diletakkan pada posisi tidak LATEX Anda, paket ini dapat di-
Secara default adalah onecolumn. mengambang. Pada program LYX download dari CTAN.
2 . Menggunakan paket multicol. Paket ini terbaru, tidak dibutuhkan paket
bisa digunakan untuk men-setting tambahan untuk menambah gambar Keluaran PS atau PDF
aneka macam jumlah kolom dan dapat pada teks, kecuali jika diinginkan Naskah LYX dapat diekspor untuk
digunakan dengan perintah tampilan yang sangat khusus, misalnya: keperluan pre-press dalam format DVI,
\usepackage{multicol}  eso-pic dan graphicx untuk PS dan/atau PDF. Masing-masing
 pada preambul menambahkan latar belakang secara format ini mempunyai keunggulan
berulang-ulang.
dan  epigraph untuk menambahkan gambar
\begin{multicols}{jumlah_kolom} ... atau kutipan pada halaman pertama
\end{multicols} bab, setelah judul, biasanya dipakai
 pada teks pada tata letak buku-buku karya
sastra.
Pada majalah yang tidak banyak  overpic untuk menambahkan teks atau
gambar, pemakaian paket ini sangat gambar di atas gambar.
baik.
3 . Menggunakan paket sttools yang Berhubung paket ini belum
terdiri dari paket flushend, midfloat sepenuhnya didukung oleh LYX, maka
dan cuted. Paket ini merupakan hasil pemakaian paket ini dapat dilakukan baik


Gambar 2. Contoh brosur

www.infolinux.web.id INFOLINUX SEPTEMBER 2003 77


TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
LYX (Aplikasi Desktop Publisher)


Gambar 3. Contoh ensiklopedia


Gambar 4. Contoh kartu nama Gambar 5. Contoh majalah

sendiri-sendiri. Format yang terbaik dengan menata letak buku atau majalah franzine yang dibuat oleh Kathryn
untuk dicetak pada printer sebelum dengan dua kolom yang dikombinasi Andersen. Paket ini dapat di-download
dibuatkan plate adalah DVI (device dengan satu kolom. Untuk mendesain dari URL pada referensi di bawah ini.
independent), karena format ini akan tata letak seperti contoh di bawah ini Tata letak majalah tiga kolom dapat
menggunakan resolusi printer secara dibutuhkan beberapa paket LATEX memanfaatkan kombinasi dua kolom
optimum. Berbeda dengan format DVI tambahan, seperti flushend, cuted, ditambah catatan pinggir (marginpar).
yang mengoptimalkan resolusi printer eso-pic, dan graphicx. Paket floatflt, Pada contoh gambar di bawah ini dibuat
saat mencetak, format PS dan PDF fancyhdr, dan color secara default dengan menggunakan tata letak dua-
secara default hanya diset pada sudah didukung oleh LYX. kolom plus catatan pinggir (dicontoh
resolusi 600 dpi. Resolusi ini biasanya Paket floatflt digunakan untuk dari model tata letak majalah Bauen &
diset secara otomatis pada perintah menempatkan gambar mengambang di Wohnen). Paket LATEX yang digunakan
dvips. Format PDF dapat dikatakan antara teks. Untuk menyisipkan gambar telah dijelaskan pada bagian
relatif sama dengan PS. Bedanya hanya dengan paket ini dapat dilakukan sebelumnya.
terletak pada ukuran berkas yang dengan perintah Insert —> Float —>
sangat kecil. Floatflt figure. Paket fancyhdr Rangkuman
Berkas PDF dapat juga dihasilkan digunakan untuk mengontrol header LYX pada prinsipnya dapat digunakan
dengan program pdflatex. Sejauh atau footer pada halaman teks. untuk mendukung aplikasi desktop
pengalaman penulis naskah PDF yang Penggunaan tiap-tiap paket ini dapat publishing (DTP). Untuk menghasilkan
dihasilkan dari program ps2pdf dan dibaca pada dokumentasi dari masing- tata letak yang baik, dibutuhkan
pdflatex mempunyai kualitas yang relatif masing paket ini. beberapa paket tambahan di luar
sama. Penulis sendiri tidak sering paket yang sudah didukung oleh LYX,
memakai program pdflatex, karena ada Kartu nama yaitu bizcard, colortbl, eso-pic,
beberapa grafik tertentu yang tidak Ada dua paket yang dapat digunakan epigraph, graphicx, multicol, overpic,
dapat dikompilasi dengan program ini. untuk mendesain kartu nama dengan sttools dan ticket. Semua paket ini
LYX/LATEX, yaitu bizcard dan ticket. dapat di-download dari CTAN (http://
Contoh tata letak dengan Berbeda dengan paket bizcard yang www.ctan.org/).
LYX/LATEX memang khusus untuk membuat Di samping program LATEX beserta
kartunama, paket ticket dapat juga paket-paketnya, juga dibutuhkan
Brosur digunakan untuk menata letak tiket dan program lain untuk melengkapi LYX/
Mendesain brosur sederhana dengan kartu pin. Kedua paket ini dapat di- LATEX, seperti GIMP/ImageMagick
latar belakang warna atau gambar download secara gratis di CTAN. untuk mengolah gambar raster, Sketch/
sangat mudah dilakukan dengan LYX. Selain kedua paket itu juga dibutuhkan Xfig/Tgif untuk menambahkan sketsa
Paket LATEX yang dibutuhkan untuk paket tambahan untuk membuat atau gambar vektor pada teks, pstricks
mendukung pekerjaan ini misalnya tampilan menjadi labih baik, misalnya dan pdftricks untuk memodifikasi
multicol untuk membuat tiga kolom paket eso-pic dan graphicx atau gambar yang telah disisipkan pada LYX
atau dapat juga menggunakan overpic kalau ingin dibuat dalam format dan juga barangkali dibutuhkan paket
minipage yang lebih fleksibel, eso-pic latar belakang gambar penuh. CMS (Color Management System)
dan graphicx untuk menambah latar untuk mendefinisikan warna supaya
belakang gambar, color dan colortbl Majalah apa yang dilihat di layar sama persis
untuk pewarnaan pada teks dan tabel. Majalah yang kompleks agak sulit dengan apa yang akan dicetak melalui
didesain pakai LYX, namun ada satu printer berwarna.
Ensiklopedia paket yang bisa digunakan untuk I Wayan Warmada
Menata letak ensiklopedia hampir sama mendesain majalah sederhana, yaitu (warmada@nakula.rvs.uni-bielefeld.de)

78 INFOLINUX SEPTEMBER 2003 www.infolinux.web.id


Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial 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 meminta apache untuk menampilkan membutuhkan waktu. Menggunakan
terkadang dapat menjadi hal daftar tersebut, maka Anda dapat dengan program url encoding dan url decoding
yang menyenangkan. mudah men-download ataupun sekedar yang dibuat oleh Heiner Steven
Menggunakan program file, kita dapat membaca isi file tersebut. Sayang beribu (heiner.steven@odn.de), kita akan
menelanjangi file tersebut dan melihat sayang, Apache tidak akan menampilkan menampilkan informasi internal suatu file
tipenya. Hampir tidak ada file yang luput deskripsi semua file. dalam navigasi ala Apache.
dari kemampuan program file ini. Dengan sebuah shell script sederhana, Aplikasi CGI yang kita buat ini tidak
Sayangnya, sampai saat ini, kebanyakan sebenarnya kemampuan untuk dimaksudkan untuk menggantikan
program seperti Konqueror ataupun bertingkah laku seperti kemampuan Apache dalam menampilkan daftar file
Nautilus lebih senang untuk menampilkan daftar file dan direktori dan direktori. Apa yang kita lakukan
menampilkan tipe suatu file dalam format seperti Apache dapat dibuat asalkan hanyalah menampilkan keluaran dari
singkat dan padat. Hal tersebut dirasa fungsi url encoding dan decoding telah program file untuk file tersebut. Apabila
wajar-wajar saja karena mereka disediakan. Hal tersebut diperlukan file tersebut merupakan suatu direktori,
menawarkan fungsi lain yang jauh lebih karena nama file dapat mengandung maka direktori tersebut akan kita jadikan
kompleks daripada hanya sekadar karakter-karakter yang harus di-encode hyperlink. Berikut ini adalah langkah-
menampilkan keluaran dari program file. dahulu sebelum dikirimkan dan harus di- langkah pembuatannya.
Sementara itu, kemampuan Apache decode ketika akan diproses. Sayangnya,
dalam menampilkan daftar file dan url encoding dan decoding tidak 1. Mendefinisikan beberapa
direktori sangatlah menyenangkan untuk disediakan oleh program-program variabel penting
diamati dan dipelajari. Begitu Anda standar. Membuatnya jelas PROGNAME=”file2web”
VERSION=”0.1a”
COPYRIGHT=”$PROGNAME $VERSION, (c)
Noprianto, July 2003. GPL.”
COPYRIGHT2=”Urlencode and Urldecode by
Heiner Steven (heiner.steven@odn.de)”
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
Program File di Web



File2web dan informasi file Antisipasi untuk direktori yang tidak eksis

{ direktori aktif saat ini. Hal ini secara


echo $(echo $1 | $URLENCODE) sederhana kita dapatkan dengan masuk function urlencode()
} ke direktori orang tua (cd ..), kemudian {
mengambil nilai dari program pwd, echo $(echo $1 | $URLENCODE)
function urldecode() kemudian masuk kembali ke direktori }
{ aktif. Untuk cara lain, Anda dapat
echo $(echo $1 | $URLDECODE) menggunakan program pushd dan popd
} dengan logika tersendiri. function urldecode()
Selanjutnya, permainan pun dimulai. {
Fungsi signature() akan menampilkan Kita akan mendaftar isi dari suatu direktori echo $(echo $1 | $URLDECODE)
informasi hak cipta dan informasi web dan akan memeriksa setiap isinya. Apabila }
server. Fungsi urlencode akan menjalankan isinya adalah direktori, maka seperti yang
program urlencode dan fungsi urldecode telah disebutkan, kita akan menjadikannya echo “Content-type: text/html”
akan menjalankan program urldecode. sebagai hyperlink. Sementara, apabila echo
isinya adalah file, maka kita akan
3. Program utama mencetak keluaran program file atas echo “<head>”
Pertama-tama yang akan kita lakukan dirinya. Untuk memperindah tampilan, kita echo “<title>File type explorer</title>”
tentunya mencetak header untuk aplikasi menampilkannya dalam tabel. echo “</head>”
CGI. Setelah itu, kita akan memeriksa isi Berikut ini adalah source code echo “<body>”
dari variabel $QUERY_STRING. Apabila selengkapnya: echo “<pre>”
$QUERY_STRING ternyata adalah string #!/bin/sh
kosong atau belum diset, maka kita akan if [ -z $QUERY_STRING ]
mengasumsikan bahwa direktori aktif PROGNAME=”file2web” then
adalah root direktori (/). Dan apabila VERSION=”0.1a” BASE=/
$QUERY_STRING tidak kosong, kita COPYRIGHT=”$PROGNAME $VERSION, (c) else
akan melakukan proses decoding dengan Noprianto, July 2003. GPL.” BASE=$(echo $QUERY_STRING |
menggunakan program urldecode. COPYRIGHT2=”Urlencode and Urldecode by awk -F= ‘{print $2}’)
Sebagai langkah antisipatif ketika user Heiner Steven (heiner.steven@odn.de)” BASE=$(urldecode $BASE)
memasukkan nama direktori secara asal- URLENCODE=/usr/lib/cgi-bin/urlencode
asalan, maka kita akan memeriksa apakah URLDECODE=/usr/lib/cgi-bin/urldecode fi
direktori terdapat di dalam file sistem. Hal
tersebut juga berlaku untuk direktori di function signature() echo “<b>$(basename “$BASE”)</b>”
mana user yang menjalankan Apache {
tidak memiliki hak untuk masuk ke dalam echo “$COPYRIGHT” echo “<hr>”
dan mendaftar isinya. echo “$COPYRIGHT2” echo “<table>”
Tidak lupa, kita juga perlu echo “$SERVER_SIGNATURE”
mendapatkan direktori orang tua dari }

80 INFOLINUX SEPTEMBER 2003 www.infolinux.web.id


Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial TUTORIAL
Program File di Web

cd “$BASE” echo “<tr>” echo “</table>”


echo “<td>” echo “<hr>”
if [ $? -ne 0 ] if [ ! -e $i ] signature
then then
echo “Directory cannot be found or echo “</td>” echo “</pre>”
permission denied. <a echo “</tr>” echo “</body>”
href=$SCRIPT_NAME>go to /</a>” echo “</table>”
echo “<hr>” echo “<hr>” Program urlencode dan urldecode bisa
signature signature Anda copy dari CD-ROM InfoLINUX atau
exit 1 exit 1 dapat di-download di http://www.
fi fi shelldorado.com/scripts/cmds/urlencode
if [ -d “$BASE/$i” ] dan http://www.shelldorado.com/scripts/
cd .. then cmds/urldecode.
UP=”$PWD” echo “<a Kini, kita dapat mengamati informasi
cd “$BASE” href=$SCRIPT_NAME?dir=$BASE/ file-file di harddisk kita via web browser.
$(urlencode “$i”)>”$i”</a>” Terimakasih kepada Heiner Steven untuk
echo “<tr><td><a else urlencode dan urldecode yang telah
href=$SCRIPT_NAME?dir=$(urlencode echo “$i” sangat membantu. Tentunya, program
$UP)>up</a></td><td>one level up</ fi ini masih terdapat kekurangan.
td></tr>” echo “</td>” Penyempurnaan di sana sini sangatlah
echo “<td><font size=-1>$(file -b diharapkan. Kembangkanlah dan
“$i”)</font></td>” sebarkanlah. Kembangkanlah dan
echo “</tr>” sebarkanlah lagi. Lagi dan lagi. Itulah
for i in * done indahnya dunia free software.
do Noprianto (noprianto@infolinux.co.id)

IKLAN

www.infolinux.web.id INFOLINUX SEPTEMBER 2003 81

Anda mungkin juga menyukai