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