TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Console-console yang Meriah
Console-console yang Meriah Hardware ketinggalan zaman? Tidak mampu menjalankan X? Jangan biarkan hidup Anda hitam dan putih saja. Mari buat console yang lebih meriah, untuk hidup yang lebih hidup!
K
ehadiran komputer selama beberapa dekade terakhir memang diakui sangat memudahkan hidup manusia. Akan tetapi, beberapa waktu yang silam, bertolak belakang dengan kondisi saat ini, komputer masih merupakan barang mewah. Memiliki sebuah komputer personal di rumah mungkin tidak mampu dilakukan oleh sebagian besar orang. Walau demikian, karena perkembangan teknologi yang begitu pesat, bagi Anda yang memiliki komputer di saat itu dan masih menyimpannya, hampir bisa dipastikan komputer tersebut telah pensiun dengan tenang dan tersimpan rapi di gudang. Bagaimana tidak? Katakanlah Anda memiliki komputer 486. Kantor tempat Anda bekerja menggunakan OpenOffice.org dalam kesehariannya. Otomatis, komputer 486 tersebut tidak akan dapat Anda gunakan untuk menjalankan OpenOffice.org tersebut. Terlalu berat. Anda bisa saja membeli sebuah komputer baru dan dengan menerapkan LTSP, Anda menjadikan komputer 486 tersebut sebagai thin client yang canggih luar biasa. Tapi untuk apa kalau pemakainya hanya Anda sendiri? Akhirnya, sang 486 terpaksa disimpan kembali ke gudang. Dari sisi pandang tepat guna, komputer 486 tersebut sebenarnya masih bisa Anda gunakan secara mandiri dalam bekerja dengan Linux. Cukup instal saja distro yang relatif kuno (namun tetap di-maintain) dan gunakan console-nya secara aktif. Lupakan GUI dan Anda akan melihat betapa banyak yang bisa dilakukan dengan console tersebut. Artikel ini akan membahas bagaimana menjadikan console Anda lebih meriah. Lupakan hitam putih dan nikmatilah hidup yang lebih berwarna.
52
INFOLINUX OKTOBER 2003
setterm Program ajaib ini memang luar biasa. Anda dapat menyulap tampilan console Anda menjadi lebih meriah hanya dengan satu perintah. Anda juga dapat membersihkan layar Anda ketika karakter aneh yang dihasilkan dari usaha untuk menampilkan isi file binary bertebaran di layar. Semuanya dengan satu perintah. Kita akan mulai dengan mengubah warna teks console. Panggillah program ini dengan memberikan parameter -foreground <warna>. Contoh: setterm -foreground blue Perintah tersebut akan menjadikan teks Anda berwarna biru. Untuk mengembalikan warna teks ke warna semula, berikan perintah berikut ini: setterm -foreground default Setelah itu, mari berikan warna latar belakang yang lebih mencolok. Panggillah program ini dengan memberikan parameter -background <warna>. Contoh: setterm -background blue Perintah tersebut akan menjadikan latar belakang Anda berwarna biru. Untuk mengembalikan warna latar ke warna semula, berikan perintah berikut ini: setterm -background default Apabila Anda benar-benar bosan dengan hitam dan putih, kenapa tidak mengganti saja dengan kombinasi latar biru dan teks putih, misalnya? Kombinasikan saja parameter -foreground dan -background tersebut. Berikut ini adalah contohnya: setterm -background blue -foreground white
www.infolinux.web.id
Tidak hanya itu, setterm bahkan dapat menjadikan teks Anda lebih tebal sehingga lebih enak untuk dibaca. Cobalah perintah berikut ini: setterm -bold on Untuk mengembalikan ke teks default, berikanlah perintah berikut ini: setterm -bold off Untuk terminal yang mendukung, setterm bahkan dapat menjadikan teks Anda bergaris bawah ataupun berkedipkedip. Jalankanlah setterm tanpa parameter untuk melihat opsi-opsi yang didukung. Untuk lebih jelasnya, bacalah manual yang datang bersama dengan program setterm.
Warna-warni pesan login Baiklah. Pertama-tama, Anda mungkin bangga dengan pesan login yang menampilkan informasi distro, versi distro dan versi kernel dalam warna hitam dan putih. Lama kelamaan, Anda mungkin merasa butuh untuk menghapus semua pesan tersebut untuk menyembunyikan identitas Anda. Akan tetapi, sebagian dari Anda mungkin ingin memodifikasi tampilan login tersebut menjadi lebih indah dan meriah dengan bantuan warna-warni. Pesan login tentu saja tidak berhubungan langsung dengan kinerja ataupun kestabilan sistem. Tapi yang jelas, dengan membuat pesan login yang meriah, lengkap dengan warnawarni dan informasi internal sistem, Linux yang kita miliki akan berbeda dengan yang lain. Akan tetapi, tindakan menghapus semua pesan login untuk menyembunyikan identitas juga pantas untuk dilakukan. Adalah tidak terlalu seru apabila informasi internal sistem kita diketahui oleh orang lain. Beberapa versi distro diketahui memiliki kelemahan tersendiri, yang dapat dimanfaatkan oleh pihak lain yang tidak bertanggung jawab. Pesan login tersebut disimpan dalam file /etc/issue untuk pesan lokal dan /etc/ issue.net untuk pesan remote. Modifikasilah file tersebut untuk mendapatkan pesan login yang berbeda. Jangan lupa untuk melakukan back-up terlebih dahulu. Berikut ini, kita akan
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
oh menyaring keluaran dari ls
Console-console yang Meriah
oh dalam beberapa kali pipe
membuat pesan login yang berwarnawarni. Apa yang Anda butuhkan adalah mendefinisikan warna-warna yang ingin Anda gunakan. Langkah yang satu ini akan banyak menghemat waktu Anda di kemudian hari. Anda dapat meletakkan pendefinisian ini di dalam .bashrc Anda. Di contoh ini, kita hanya akan mendefinisikan warna biru. Untuk warna-warna lainnya, Anda dapat mencobanya sendiri dengan mengubah nilai-nilai angka di dalam isi variabel tersebut. ESC=”^[“ BLUE=”$ESC[44;37m” NORMAL=”$ESC[40;37m” CLEAR=”$ESC[H$ESC[J”
yang berisi tulisan HALO dalam warna putih biru. Logoutlah dan login kembali, maka Anda akan mendapatkan pesan login yang lebih meriah. Berikut ini adalah pesan login penulis setelah diberikan perintah tersebut. Debian GNU/\s 3.0 \n \l
dan mewarnai kriteria yang diberikan. Berikut ini adalah ilustrasinya: nop:/$ ls -al | grep bin drwxr-xr-x 2 root root 1952 Aug 13 11:59 bin drwxr-xr-x 2 root root 3336 Aug 12 23:04 sbin
^[[44;37m HALO ^[[40;37m
Harap diperhatikan bahwa isi dari variable ESC, yaitu ^[, tidak diketikkan dengan cara biasa. Di variabel ini, kita benar-benar akan menyimpan karakter Escape dan bukannya mengetikkan ^[ semata. Berikut ini adalah cara pembuatannya di beberapa editor: Vim : CTRL-V ESC Emacs: CTRL-Q ESC joe: ‘ 0 2 7 jed: ‘ ESC
Output highlighting
Penggunaan grep dengan kriteria bin akan menyaring keluaran dari perintah ls -al di direktori /. Sebagai hasilnya, kita akan melihat hanya baris yang mengandung kata bin yang ditampilkan. Bagaimana dengan output highlighting yang akan kita buat? Kita akan tetap menampilkan isi dari ls -al apa adanya, dan memberikan warna tertentu pada setiap bin yang ditemukan. Tertarik? Program yang kita buat ini sangatlah sederhana. Bahkan dapat selesai dalam 3 atau 4 baris atau lebih singkat lagi. Prinsip kerjanya, apabila program ini dijalankan oleh user dengan memberikan parameter, maka parameter pertama yang diberikan akan kita jadikan sebagai kriteria, yang akan berwarna beda pada saat ditampilkan. Apabila program dijalankan tanpa parameter, maka program ini akan melewatkan begitu saja tanpa melakukan penyaringan atau pengubahan apapun juga. Dalam bekerja, program ini akan membaca /dev/ stdin, sehingga Anda dapat menggunakannya dalam pipe. Sebutlah program ini dengan nama oh, dan berikut ini adalah contoh penggunaannya: ls -al | oh bin
Kemudian, tambahkanlah (atau ubahlah) isi dari file /etc/issue Anda dengan perintah berikut ini: echo “$BLUE HALO $NORMAL” >> /etc/ issue Dengan perintah tersebut, maka isi dari pesan login akan bertambah satu baris
Satu tip berguna apabila Anda ingin memiliki pesan login yang meriah: ubahlah / etc/issue Anda sesuai yang Anda kehendaki, namun biarkan /etc/issue.net Anda sesederhana mungkin. Selamat menikmati pintu gerbang sistem yang lebih meriah dan berbeda.
Sebuah pertanyaan: Pernahkah Anda menggunakan grep dalam menyaring keluaran suatu program? Apabila jawaban Anda adalah ya, maka hampir bisa dipastikan betapa berterimakasihnya Anda kepada (pembuat) program tersebut. Ya, grep sangat membantu dalam menyaring keluaran dari suatu perintah. Penggunaan regular expression bersama dengannya akan membuat grep semakin berguna. Sekarang, bagaimana kalau kita membuat program semacam grep? Reinventing the wheel? Tidak! Kita akan membuat sebuah program penyaring sederhana semacam grep, akan tetapi, alihalih menyaring dan menampilkan hanya yang cocok dengan kriteria yang diberikan, kita akan menampilkan saja semua keluaran
www.infolinux.web.id
INFOLINUX OKTOBER 2003
53
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
oh dijalankan dalam pipe tanpa parameter
Berikut ini adalah source code selengkapnya. Penjelasan akan diberikan setelah source code. #!/bin/sh PROGNAME=”output highlighting” VERSION=”0.1a” COPYRIGHT=”$PROGNAME version $VERSION. (c) Noprianto, August 2003" ESC=”^[“ BLUE=”$ESC[44;37m” NORMAL=”$ESC[40;37m” CLEAR=”$ESC[H$ESC[J”
[ ! -z $1 ] && sed -e “s/$1/ $BLUE$1$NORMAL/g”
54
INFOLINUX OKTOBER 2003
Console-console yang Meriah
oh dijalankan secara mandiri tanpa parameter
mengganti semua kata kunci yang ditemukan dari /dev/stdin dengan pemberian warna terlebih dahulu. sed -e “s/$1/$BLUE$1$NORMAL/g”
www.infolinux.web.id
Dengan pemberian perintah tersebut, semua bin, home dan tmp yang ditemukan akan ditampilkan dalam warna tersendiri. Setelah oh menyaring bin, maka keluaran oh akan disaring lagi dengan kriteria home. Setelah oh menyaring home, maka keluaran oh akan disaring lagi dengan kriteria tmp. Demikian seterusnya. Walau telah dapat digunakan, program ini hanyalah melakukan fungsi dasar. Bahkan, pengguna tidak diizinkan untuk mengubah warna highlight dengan warna yang disukai. Selain itu, kita juga hanya melakukan penggantian secara case-sensitive. Banyak sekali kekurangan yang dimiliki. Salah satu fitur yang secepatnya harus dimiliki oleh program ini adalah pencarian case-insensitive dan penggunaan regular expression sederhana. Setelah itu, penggunaan parameter menggunakan program getopt mungkin bisa dipertimbangkan. Di antara parameter yang kita sediakan tersebut, pengubahan warna highlight mungkin salah satu fasilitasnya. Penulis sangat mengharapkan kontribusi dari pengguna Linux di tanah air untuk menjadikan program ini semudah dan sehebat grep. Dengan demikian, kita dapat menikmati console yang jauh lebih meriah. Bukankah Linux adalah sistem operasi yang hebat? Untuk menikmati hidup yang lebih berwarna, kita bahkan bisa mendapatkannya dengan berusaha lebih tanpa harus meninggalkan apa yang telah kita miliki. Hidup TI Indonesia! Noprianto (
[email protected])
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Diarinux: Sebuah Diary Sederhana
Tadi pagi tak sengaja kuberikan perintah rm -rf * di direktori /bin. Jadi, hari ini aku upgrade sistem. Untung distroku begitu penuh pengertian. Sekian dulu ya diarinux...
P
ernah mengalami hal serupa? Kalau ya, masih ingat kapan terjadinya? Tidak ingat? Anda mungkin butuh diary. Sebuah diary sederhana, tepatnya, karena program sekelas Evolution pun memiliki fasilitas serupa. Ya, diary adalah teman yang cukup bisa membantu apabila digunakan dengan konsisten. Dan dengan modal shell dan dialog, kita akan membangun sebuah diary sederhana namun mampu memenuhi kebutuhan dasar kita.
Fitur program Diary yang akan kita buat akan memiliki fitur laksana diary elektronik lainnya. Berikut ini adalah daftar fiturnya. Pembuatan diary baru Yang satu ini tentunya adalah hal yang tidak ditawar-tawar lagi. Ketika Anda memilih membuat diary baru, sebuah interface kalender yang ramah akan disajikan kepada Anda. Untuk interfacenya, sepenuhnya akan kita gunakan program dialog. Penghapusan diary Ada kalanya kita perlu menghapus diary hari-hari tertentu. Sama seperti pembuatan diary, Anda pun akan disajikan sebuah kalender di mana nantinya Anda dapat memilih diary apa saja yang akan dihapus. Ingin menghapus semua diary dan melupakan semua kenangan lama? Silakan saja. Program ini juga memiliki fitur ini. Harus diakui, terkadang kita ingin pula melupakan semua kenangan yang Anda. Mendaftar diary yang terisi Ingin tahu kapan-kapan saja Anda mengisi diary? Jangan khawatir. Dengan cukup memilih satu menu, Anda dapat melihat kapan-kapan saja Anda mengisi diary.
Mengedit semua diary sekaligus Walaupun terkesan kurang diperlukan, Anda tetap saja dapat mengedit semua diary yang telah pernah Anda buat sebelumnya. Pencarian Kapankah Anda menghapus semua isi / bin Anda tanpa sengaja? Kapankah distro Anda terasa begitu brengsek? Jangan khawatir. Masukkan saja kata kunci pencarian dan tanggal yang bersangkutan akan dilaporkan kepada Anda. Editor yang bisa diatur sesuai keinginan Baiklah. Anda termasuk fans Emacs. Teman Anda mungkin lebih menyukai Vim. Teman Anda yang lain telah jatuh cinta pada nano pada pandangan pertama. Jangan khawatir. Anda cukup set variabel EDITOR pada shell Anda. Dan kalaupun tidak ada variabel EDITOR yang telah diset, secara default, kita akan menggunakan Vi. Penambahan waktu secara otomatis. Setiap kali Anda mengisi diary, waktu saat itu akan secara otomatis tertulis ke dalam diary. Anda tidak perlu mengisikannya secara manual. Akan tetapi, Anda selalu dapat mengubah waktunya sesuai dengan keinginan Anda. Pemberitahuan kunjungan Setiap kali Anda membaca diary dan tidak melakukan perubahan, maka program ini akan menuliskan [visited] di diary Anda agar Anda tahu kapan terakhir diary tersebut dikunjungi. Keamanan Direktori tempat menyimpan diary hanya bisa diakses oleh pemiliknya. Setiap kali diary dijalankan dan diakhiri, permission direktori tersebut senantiasa akan selalu diperbaiki.
www.infolinux.web.id
Prinsip kerjanya, pertama-tama kita akan memeriksa hal-hal yang kita butuhkan untuk menjalankan diary. Apa yang diperiksa hanyalah hal-hal yang mandatory seperti ketersediaan dialog, editor, dan permission direktori tempat menyimpan diary. Setelah itu, sebuah menu akan ditampilkan sampai pengguna memilih tombol Cancel. Selama perulangan tersebut, kita akan menyediakan enam menu yang bisa dipilih oleh user. Untuk pembuatan diary, setelah kalender ditampilkan dan user telah memilih tanggal yang diinginkan, maka program akan mengambil waktu aktif dan menuliskannya ke diary untuk tanggal yang telah dipilih. Editor pun dijalankan. User bisa memilih untuk mengisi ataupun membiarkan saja diary tersebut. Dengan program diff yang telah meng-copy-kan file sebelum diedit ke tempat sementara, maka program pun akan membandingkan diary aktif yang telah diedit dan file sementara tersebut. Apabila tidak terjadi perubahan karena user tidak mengubah diary, maka tulisan [visited] akan ditambahkan ke diary yang bersangkutan. Sementara itu, penghapusan diary jauh lebih sederhana untuk dikerjakan. Setelah user memilih tanggal yang diinginkan, maka dengan perintah rm, program pun akan segera menghapus. Di masa yang akan datang, sebuah konfirmasi mungkin perlu ditambahkan di sini, Dan sebelum kembali ke menu utama, program akan memberitahukan status penghapusan diary. Untuk penghapusan semua diary, program sedikit lebih berbaik hati karena
Diarinux: Sebuah Diary Sederhana
Cara kerja
Interface diary
INFOLINUX OKTOBER 2003
55
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Kode program Setelah semuanya selesai, kita pun akan segera memasuki kode program. Berikut ini adalah langkah-langkahnya: 1. Definisi variabel penting PROGNAME=”diary” VERSION=”0.1a” COPYRIGHT=”$PROGNAME $VER SION, (c) Noprianto, July 2003. GPL.” KEYGUIDE=”Use TAB and arrows to move. Also use vi style navigation: h j k l to move around days” DIARYDIR=~/DIARY VISITED=”[visited]” alias dialog=”dialog —backtitle \ ”$COPYRIGHT\”” TEMP=/tmp/$$.diary
56
INFOLINUX OKTOBER 2003
Kalender diary
2. Definisi fungsi pembantu function del() { rm -rf $TEMP rm -rf /tmp/*.diary } Fungsi del benar-benar hanya berfungsi sebagai tukang bersih-bersih. function checkDeps() { if [ -z $EDITOR ] then w_vi=$(which vi) if [ -z $w_vi ] then echo “I cant find text editor. Sorry. Please update your EDITOR, if you dont have vi.” exit 1 else export DEDITOR=vi fi else export DEDITOR=$EDITOR fi w_dialog=$(which dialog) if [ -z $w_dialog ] then echo “I cant find dialog. Sorry.” exit 1 fi
w_tput=$(which tput) if [ -z $w_tput ] then echo “I cant find tput. Sorry.” exit 1 fi
www.infolinux.web.id
memberikan konfirmasi terlebih dahulu. Apabila user setuju untuk menghapus semua diary yang telah dibuat selama ini, maka kita pun menghapus direktori penyimpanan, memberitahukan hasilnya kepada user, membuat direktori penyimpanan baru dan memeriksa permissionnya. Bagaimana dengan mendaftar diary yang telah terisi? Hal yang satu ini cukup diselesaikan dengan memanggil program ls dan memasukkan hasilnya ke dalam file sementara. Setelah itu, kita pun menampilkan isi file sementara tersebut, yang akan segera dihapus sesudahnya. Mengedit semua diary sekaligus? Yang satu ini juga kurang lebih sama seperti mendaftar diary yang terisi. Kita akan memeriksa ketersediaan file diary dan kemudian mengeditnya. Cerita selesai. Dan fitur yang terakhir, pencarian, adalah dengan memanfaatkan program grep. Pertama-tama tentunya kita akan meminta user untuk memasukkan kata kunci pencarian, yang segera kita teruskan dengan memanggil program grep. Setelah itu, dengan beberapa kali pemanggilan program cut, kita pun menyimpannya ke dalam file sementara. File sementara tersebut akan ditampilkan sebelum dihapus. Semampu mungkin program ini didesain agar mampu memenuhi kebutuhan pengguna diary.
Diarinux: Sebuah Diary Sederhana
Mengedit diary
test ! -d $DIARYDIR && mkdir $DIARYDIR chmod go-rwx $DIARYDIR } Fungsi checkDeps akan memeriksa ketersediaan editor di sistem dengan memeriksa variabel shell EDITOR dan vi apabila variabel EDITOR tidak ditemukan. Setelah itu, fungsi ini juga akan memeriksa ketersediaan dialog dan tput. Yang terakhir, checkDeps akan memeriksa keberadaan direktori penyimpanan diary dan membuatnya apabila tidak ditemukan. Setelah itu, permission dari direktori tersebut pun dikembalikan menjadi default: hanya bisa diakses oleh pemilik. 3. Program utama Program utama diawali dengan pemanggilan fungsi checkDeps. Setelah itu, sebuah perulangan terus menerus akan dilakukan di mana di dalam perulangan tersebut, kita akan menampilkan menu dan melakukan aksi yang bersesuaian dengan apa yang dipilih oleh user. Cara kerja selengkapnya telah dibahas pada bagian sebelumnya. Berikut ini adalah source code selengkapnya beserta penjelasan. checkDeps while [ 1 ] do dialog —menu “Choose action” 14 60 6 edit “Create new or view or edit diary”\ list “List all diaries” search “Search diary” delete “Delete diary” \ editall “View or edit all diaries one by one” \ killall “Delete all diaries” 2>$TEMP
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Diarinux: Sebuah Diary Sederhana
Menampilkan semua diary
test $? -ne 0 && break TODO=‘cat $TEMP‘ && del case $TODO in edit) dialog —calendar “$PROGNAME: $KEYGUIDE” 10 40 2>$TEMP test $? -ne 0 && continue DATE=‘cat $TEMP‘ && del DATE=$(echo $DATE | sed -e ‘s/\//-/g’) echo -n “$(date +%T) “ >> $DIARYDIR/$DATE cp $DIARYDIR/$DATE $TEMP $DEDITOR $DIARYDIR/$DATE DIFF=$(diff $TEMP $DIARYDIR/$DATE) && del test -z $DIFF && echo $VISITED >> $DIARYDIR/$DATE ;; delete) dialog —calendar “$PROGNAME: $KEYGUIDE” 10 40 2>$TEMP test $? -ne 0 && continue DATE=‘cat $TEMP‘ && del DATE=$(echo $DATE | sed -e ‘s/\//-/g’) unalias rm rm $DIARYDIR/$DATE if [ $? -eq 0 ] then dialog —msgbox “diary for $DATE deleted succesfully” 10 40 else dialog —msgbox “diary for $DATE couldnot be deleted” 10 40 fi ;; list) echo “Diaries:” > $TEMP for i in $(ls $DIARYDIR/) do test -f $DIARYDIR/$i &&
del tput reset
Mencari diary
echo $i >> $TEMP done dialog —textbox $TEMP 20 40 del ;; search) dialog —inputbox “search keyword” 10 40 2> $TEMP SEARCH=‘cat $TEMP‘ del echo “Diaries contain $SEARCH:” > $TEMP grep $SEARCH -i $DIARYDIR -r | cut -d\/ -f2 | cut -d: -f1 | uniq >> $TEMP dialog —textbox $TEMP 20 40 del ;; editall)for i in $(ls $DIARYDIR) do test -f $DIARYDIR/$i && $DEDITOR $DIARYDIR/$i done ;; killall)dialog —yesno Sure? 10 40 if [ $? -eq 0 ] then rm -rf $DIARYDIR test $? -eq 0 && dialog — msgbox “All killed. All !” 10 40 mkdir $DIARYDIR chmod go-rwx $DIARYDIR else dialog —msgbox “Abandoned” 10 40 fi ;; esac del done chmod go-rwx $DIARYDIR
www.infolinux.web.id
Penjelasan kode: Baris test $? -ne 0 && break bertujuan untuk menguji nilai kembalian dari program dialog. Apabila nilai kembalian tidak sama dengan 0, yang berarti user memilih cancel, maka kita segera keluar dan perulangan dan mengakhiri program. Sementara, blok kode berikut ini DATE=$(echo $DATE | sed -e ‘s/\//-/g’) echo -n “$(date +%T) “ >> $DIARYDIR/ $DATE dimaksudkan untuk mendapatkan tanggal dan mengganti tanda / dengan tanda -. Setelah itu, kita pun menggunakan perintah date +%T untuk mendapatkan waktu aktif dalam format 24 jam. Dan yang terakhir, baris grep $SEARCH -i $DIARYDIR -r | cut -d\/ -f2 | cut -d: -f1 | uniq >> $TEMP berfungsi untuk menyaring hasil kembalian dari perintah grep agar apa yang kita dapatkan hanyalah nama filenya saja. Untuk interface yang lebih baik, cobalah untuk mengganti dialog menjadi gdialog dan variabel EDITOR menjadi editor yang memiliki antar muka grafis. Penulis memilih menggunakan diary ini karena tidak repot dan bisa disimpan ke disket. Ada yang berniat untuk menyempurnakannya lagi? Beberapa fitur berikut ini mungkin dapat dipertimbangkan untuk dibuat: Interface dan sistem pengaturan menu yang lebih baik. Tampilan dengan syntax highlighting. Hasil pencarian ditampilkan dalam check list sehingga user bisa memilih untuk menghapus/mengedit sebagian atau seluruhnya. Mampu dijalankan secara periodik lewat cron untuk mengingatkan user. Atau mungkin lebih baik lagi kalau kita bisa membuat daemon dan menjadikannya berjalan di latar belakang. Kemampuan i18n !! Demikianlah perkenalan kita dengan program diarinux. Semoga dapat berguna. Mari tetap senantiasa terus berkembang dan berkembang. Noprianto (
[email protected])
INFOLINUX OKTOBER 2003
57
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Aplikasi Linux di Grafis: Renderer
Aplikasi Linux di Grafis: Renderer Penggunaan GNU/Linux dan aplikasinya semakin meluas, termasuk dunia multimedia. Beberapa film produksi Hollywood, pembuatan gambar atau animasinya menggunakan Linux, seperti Titanic, Shrek, Hollow Man, Star Wars II, dan Lord of The Rings. Hasilnya cukup spektakuler! Anda mau mencobanya?
D
ahulu, untuk membuat suatu produk gambar atau animasi, pikiran orang pasti terarah pada kombinasi software dan hardware yang mahal. Dari sisi hardware, komputer dari jenis Macintosh atau Silicon Graphics segera masuk dalam daftar budget. Dari sisi software, aplikasi semacam Photoshop, CorelDraw, Adobe Premiere, Adobe After Effects, dan lain-lain juga masuk dalam utility yang akan dibeli. Total pengeluaran? Jangan tanya…sangat mahal, belum lagi kalau ditambah lisensi per user (ini tentu dengan asumsi Anda tidak pakai bajakan). Dari sini, berkembang anggapan bahwa investasi awal untuk suatu project multimedia sangat besar, dan kalau modal minim, sebaiknya angan-angan tadi dikubur saja. Sedikit angin segar didapat setelah prosesor dari keluarga Intel (compatible) semakin murah dan berkinerja semakin tinggi. Intel, AMD, Transmeta berlombalomba mengeluarkan jenis prosesor yang semakin “kencang”, bahkan sudah tembus batasan 2 GHz yang dulu dianggap agak sulit ditembus. Ditambah lagi, teknologi hardware PC lainnya seperti graphic card, memori, motherboard semakin canggih. Hasilnya? Perlahan namun pasti, penggunaan PC untuk project multimedia semakin banyak. Penggunaan SGI atau Macintosh bisa ditekan, misal hanya untuk fase pengerjaan akhir seperti rendering. Lalu, datang lagi angin segar berikutnya. Jangan keburu masuk angin dulu. Kali ini giliran Linux dan aplikasinya yang ikut berpartisipasi. Dimulai dengan GIMP yang cukup fenomenal, dan memberikan suatu alternatif baru bagi profesional di bidang grafis di samping Photoshop (yang bisa dibilang standar de facto pengolahan gambar 2D). Lalu meluas ke aplikasi grafis 3D (3 dimensi), semisal POV ray (renderer),
58
INFOLINUX OKTOBER 2003
Blender (modeller), dan Cinnelera (compositing). Di tulisan kali ini, penulis akan mengajak Anda melihat beberapa aplikasi grafis di area rendering. Sebelumnya, akan penulis beri dahulu gambaran, apa itu proses rendering. Secara awam, rendering adalah proses untuk membuat gambar utuh dari suatu model atau kerangka yang sudah dibuat sebelumnya. Model ini sebelumnya dibuat oleh program pembuat gambar 3D, misal 3D Max atau Maya. Biasanya untuk mempercepat proses perancangan, gambar dibuat dahulu secara kasar dengan model wireframe. Dinamakan wireframe, karena bentuknya menyerupai kawat-kawat (wire) yang disusun menjadi suatu rangkaian. Baru setelah model seluruhnya selesai, proses rendering memproses model ini lebih lanjut, misal dengan menambahkan tekstur (texturing), efek cahaya (ray tracing), efek bayangan (shader), dan sebagainya. Dan jadilah gambar akhir yang diinginkan. Renderer di Linux sendiri ada yang free/ opensource, ada juga yang bersifat proprietary atau non-free/closedsource. Di sini hanya akan diulas yang bersifat free/ opensource, namun jangan khawatir, kualitasnya bisa menyamai tipe proprietary. Sekali lagi, dunia open source menunjukkan kualitasnya.
3Delight (www.3delight.com) Aplikasi renderer ini free, tapi tidak bersifat open source. Namun demikian, 3Delight tetap salah satu pilihan yang bisa dipertimbangkan di platform Linux. Fitur yang ditawarkan oleh 3Delight, antara lain: Compliant dengan standar RenderMan. Sebelumnya akan penulis jelaskan sedikit mengenai RenderMan. RenderMan adalah spesifikasi teknis untuk interfacing antara program
www.infolinux.web.id
modelling dan rendering. Sebuah renderer bisa disebut RenderMan compliant jika memenuhi semua requirement standard yang dijabarkan dalam spesifikasi teknis. Spesifikasi ini bisa dilihat di http://www.pixar.com/ renderman/developers_corner/rispec/ rispec_pdf/RISpec3_2.pdf. 3Delight dapat me-render semua file bertipe RenderMan Interface Bytestream (RIB) baik tipe binary atau text. Developer juga dapat membuat aplikasi yang me-link ke library lib3delight untuk menghasilkan gambar dengan bantuan RenderMan Application Programming Interface (API). Dukungan banyak fungsi rendering. 3Delight mendukung banyak fungsi rendering, seperti depth of field, motion blur, surface displacement, atmospheric effects, selective ray tracing dan global illmuniation (ambient occlusion dan color bleeding). Bayangan (Shadows) bisa diaplikasikan menggunakan shadow map standar, ray tracing, atau menggunakan anti aliased multi depth shadow maps. Gambar bisa dihasilkan sampai dengan 96 bits per RGB. Geometry Support. 3Delight mendukung hampir seluruh kumpulan geometri RenderMan: subdivision surface, polygon, patches (B-spline, Bezier, Catmull-Rom dan lainnya), NURBS (dengan trim-curves), dan sebagainya. Juga mendukung penuh variabel user defined, termasuk vertex dan variable facevarying. Proses render yang cepat dan efisien. 3Delight dapat menangani scene kompleks, yang terbuat dari jutaan bentuk primitif. Sejak desain awal
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
TUTORIAL Aplikasi Linux di Grafis: Renderer
3Delight sampai sekarang, kecepatan rendering dan efisiensi penggunaan memori dimasukkan dalam prioritas utama. Dukungan banyak platform dengan optimisasi di kode program. 3Delight menawarkan banyak pilihan platform. Sejauh ini telah tersedia versi Windows (Intel dan AMD), Linux (Intel, AMD, PowerPC dengan dukungan AltiVec), MacOS X, dan IRIX (MIPS4).
Beberapa tanya-jawab (FAQ) mengenai 3Delight: Dapatkah menggunakan 3Delight untuk merender scene Maya atau 3DS Max? Maya memiliki versi exporter RIB sendiri (sangat dasar). Sekalipun bisa langsung digunakan oleh 3Delight, RIB yang diexport Maya tidak memliki fitur seperti shader dan shadow. Alternatifnya, MayaMan (http://www.animallogic.com/ research/mayaman), yaitu rendering plugin dari Animal Logic (http:// www.animallogic.com) untuk Maya yang dapat digunakan untuk meng-export file RIB, dengan semua feature yang diperlukan untuk menghasilkan gambar kualitas tinggi dengan 3Delight (termasuk shader). Untuk 3DS Max, Animal Logic menawarkan produk serupa bernama MaxMan (http://www.animallogic.com/ research/maxman). Dapatkah menggunakan 3Delight untuk merender object Rhino3D?
Gambar 1. Contoh hasil Render 3delight
Ya, dengan RhinoMan (http:// www.rhinoman.com), yaitu plugin rendering untuk Rhino3D (http:// www.rhino3d.com) Trim curves, fitur yang sering digunakan dalam Rhino3D. Dapatkah menggunakan 3Delight dengan Houdini? Ya. Dengan meng-export scene sebagai file RIB dan meng-input-kannya ke 3Delight. Shader Houdini (http:// www.sidefx.com) juga bisa di-export sebagai kode RenderMan® Shading Language, kemudian dikompilasi dan digunakan dalam 3Delight.
Cara instalasi 3delight Pertama-tama, pilih bagian download yang ada di situs www.3delight.com. Berikutnya akan tampil halaman yang menanyakan identitas Anda, seperti alamat e-mail dan seterusnya. isi bagian ini, lalu pilih jenis 3delight yang akan di-download. Pilih platform Linux Intel 386, juga disarankan menggunakan versi 0.9.6, karena versi yang terbaru masih beta. Jika download berjalan baik, maka Anda akan mendapat file 3delight-0.9.6-Linuxi686-libstdc++-3.tar.gz. Simpan tarball ini di suatu direktori, misal di /usr/src. Lakukan dekompresi dan instalasi sebgai berikut (dari direktori /usr/src) # tar xzvf ./3delight-0.9.6-Linux-i686libstdc++-3.tar.gz # cd 3delight-0.9.6-Linux-i686-libstdc++-3 # ./install /usr/local/3delight (ganti direktori ini dengan direktori lain jika Anda ingin menginstal di direktori tersebut) # cd /usr/local/3delight # source ./.3delight_bash (untuk bash shell) atau source ./.3delight_csh (ini berguna untuk setup environment variable yang dibutuhkan 3delight) # echo $DELIGHT/lib >> /etc/ld.so.conf (untuk menambahkan path library 3Delight ke sistem) # ldconfig -v (untuk memastikan library 3delight sudah di-load) Setelah itu, Anda bisa mencoba example yang disertakan, misal pada direktori example/dsm. Gunakan perintah sebagai berikut: # renderdl ./shadow.rib # renderdl ./image.rib
www.infolinux.web.id
Jika ada error semisal warning mengenai framebuffer, abaikan saja. Jika proses render berjalan baik, anda akan mendapatkan file image.tif (lihat Gambar 1).
POV-Ray (www.povray.org) Renderer yang satu ini barangkali yang paling terkenal dan paling banyak dipakai oleh para pengolah grafis, terutama yang berkutat di platform UNIX/Linux. Sejauh ini telah memasuki versi 3.5, dan terus ditambahkan fiturnya oleh para developer. Berita baik bagi para calon pengguna POVRay yang akan menjalankannya di atas renderfarm (cluster untuk rendering), telah tersedia patch POVRay untuk mendukung parallel processing menggunakan library Parallel Virtual Machine (PVM) atau Message Passing Interface (MPI). Anda bisa menggabungkannya dengan cluster middleware semacam OpenMOSIX atau batch scheduler seperti OpenPBS untuk membantu otomatisasi pembagian beban rendering. Patch PVM untuk POVRay bisa Anda dapatkan di http://pvmpov.sourceforge. net. Patch terbaru untuk versi 3.5 sudah tersedia, hanya saja statusnya (sampai artikel ini ditulis) masih unstable. Status stable masih untuk patch POVRay 3.1. Di situs PvmPOVRay ini bisa Anda dapatkan HOWTO yang menjelaskan bagaimana melakukan patching ke source code POVRay dan menjalankannya. Anda ingin versi MPI? (Catatan penulis: banyak yang menilai MPI lebih baik dari PVM dalam beberapa aspek, namun demikian Anda tidak usah bingung, pakai saja yang menurut Anda paling mudah) Versi MPI atau MPI-POVRay bisa Anda dapatkan di MPI-PovRay http://www.verrall.demon. co.uk/mpipov/. Ada juga enhancement dari PVMPOVRay bernama PvMegaPOV yang berupa bug fix dan penambahan fitur, bisa Anda dapatkan di PvMegaPOV http://www.wozzeck.net/images/pmp/. Fitur POVRay meliputi: Memiliki bahasa scene description yang mudah digunakan. Menyertakan banyak contoh file scene. Memiliki banyak file predefined yang memudahkan kita membuat bermacammacam bentuk, warna, atau tekstur.
INFOLINUX OKTOBER 2003
59
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Aplikasi Linux di Grafis: Renderer
skyvase.pov. File ini biasanya digunakan untuk mem-benchmark kemampuan suatu komputer atau cluster dalam melakukan rendering. Setelah anda men-download file .pov tersebut, lakukan rendering: # povray skyvase.pov +v +d +ft -x +a0.300 +r3 -q9 -w640 -h480 +b1000
Gambar 2. Contoh hasil Render POV Ray
Kualitas gambar output yang sangat bagus (sampai dengan 48 bit warna). Banyak macam kamera, termasuk perspective, orthographic, fisheye, dan sebagainya. Mendukung macam lighting seperti spotlight, cylindrical light, dan area light. Mendukung inter diffuse reflection (radiosity). Memiliki komponen media partikel untuk memodelkan efek seperti awan, debu, api, atau uap. Mendukung beberapa format keluaran yaitu Targa, BMP (khusus versi Windows), PNG, dan PPM. Berhenti dan menyimpan sebagian hasil render dan me-render sisa bagian yang belum dirender di lain waktu. Menampilkan preview gambar saat dirender (tidak tersedia di semua platform OS). Pengguna bisa membuat tekstur mereka sendiri atau menggunakan tekstur predefined seperti Brass, Chrome, Copper, Gold, Silver, Stone, Wood.
Cara instalasi PovRay Untuk percobaan PovRay, download tarball PovRay 3.5. File ini berformat tar.gz. Setelah download, letakkan misal di direktori /usr/src lalu lakukan ekstraksi dan instalasi: # tar xzvf ./povlinux.tgz # ./install Script install akan meletakkan file binary povray dan konfigurasinya di bawah /usr/ local/bin, /usr/local/etc dst. Untuk sementara gunakan saja instalasi default ini. Untuk mencoba kemampuan PovRay, penulis menggunakan file POV dari website PovBench (http://www.haveland.com/ index.htm?povbench/index.php) yaitu
60
INFOLINUX OKTOBER 2003
Penjelasan opsi yg digunakan: +v untuk verbose (output ke layar) proses rendering yang dilakukan. +d untuk menampilkan gambar yang sedang di-render. Dengan demikian, Anda bisa melihat sebagian gambar yang telah diproses. +ft untuk menentukan output yang dihasilkan disimpan dalam format TGA. +a untuk antialiasing. +r untuk mengeset kedalaman maksimum rekursi dalam proses sub sampling pixel antialiased. +q untuk menentukan kualitas gambar hasil render. +w mengeset lebar gambar. +h mengeset tinggi gambar. +b mengeset besar buffer (dalam kilo byte). Contoh file skyvase.tga sebagai hasil render Pov-Ray terlihat seperti Gambar 2.
Aqsis (aqsis.sourceforge.net) Aqsis termasuk open source renderer yang cukup naik daun. Karena bersifat RenderMan compliant, banyak yang melirik untuk menggunakannya, terutama semenjak tool Blue Moon Rendering Tool (BMRT) dihentikan produksinya oleh Exluna karena masalah lisensi dengan Pixar. Dulunya BMRT adalah tool free (bukan opensource) yang cukup terkenal, terutama karena kualitas gambarnya. Salah satu bukti nyata dari kehebatan BMRT bisa dilihat pada film Hollow Man. Efek siluet bayangan manusia yang terguyur air, digarap dengan BMRT. Anda yang sempat melongok situs BMRT, pasti sempat melihatnya di galeri gambar. Kembali pada Aqsis, beberapa fiturnya adalah: Mendukung pixel filtering dan antialiasing.
www.infolinux.web.id
Mendukung koreksi gamma dan dithering sebelum kuantisasi. Menyediakan fasilitas untuk mengindeks texture map, environment map, dan shadow depth map. Menyediakan semua bentuk primitif geometri, dan menyediakan semua standart variabel primitif yang bisa diterapkan di semua bentuk tersebut. Menyediakan pilihan 15 standart light source, surface, volume, displacement, dan imager shader. Selain itu, disediakan juga beberapa fitur yang bersifat opsional dalam spesifikasi RenderMan, yaitu: Solid modelling. Semua surface tertutup, atau kombinasi dari surface yang jika dikombinasikan menjadi bersifat tertutup, dapat digunakan dalam operasi Constructive Solid Geometry (CSG) untuk menghasilkan bentuk-bentuk menggunakan operasi potongan (intersection), penggabungan (union), dan pengurangan (difference). Motion Blur. Aqsis mendukung transformasi motion blur untuk semua bentuk primitif. Displacement. Mendukung penuh real displacement mapping menggunakan sembarang displacement shader. Mendukung Trim Curve Mendukung Level of Detail (LoD), sekalipun transisi yang lebih bagus (smooth) antarlevel tidak dimungkinkan.
Cara instalasi Aqsis Aqsis membutuhkan program log4cpp (bisa Anda download di http:// log4cpp.sourceforge.net ) jika ingin mengcompile dari source code. Di sini penulis menggunakan log4cpp-0.3.4b (http:// log4cpp-0.3.4b/). Unpack, configure, serta instal sebagai berikut: Gambar 3. Contoh hasil Render Aqsis
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
TUTORIAL
Aplikasi Linux di Grafis: Renderer
# # # #
Gambar 4. Contoh hasil Render YafRay
tar xzvf log4cpp-0.3.4b.tar.gz cd log4cpp-0.3.4b ./configure —prefix=/usr/local/log4cpp make && make install
Setelah instalasi log4cpp selesai, kita lanjutkan dengan instalasi aqsis. Disini penulis men-download versi 0.7.6. Setelah itu lakukan perintah: # tar xzvf aqsis-0.7.6.tar.gz # cd aqsis-0.7.6 #./configure —prefix=/usr/local/aqsis — with-log4cpp-prefix=/usr/local/log4cpp # make && make install Setelah proses kompilasi selesai, masukkan direktori /usr/local/aqsis ke dalam daffar pencarian library, misal dengan cara sebagai berikut: # echo /usr/local/aqsis/lib >> /etc/ ld.so.conf Untuk mencoba Aqsis, Anda bisa menggunakan file vase.rib yang terletak pada direktori ribfiles hasil ekstrak tarball Aqsis. Proses rendering bisa dilakukan dengan perintah: # cd /usr/local/aqsis/bin # ./aqsis -progress ./vase.rib Opsi -progress dipakai untuk menunjukkan (verbose) detail proses rendering. Dari sini, akan dihasilkan file vase.tif seperti terlihat pada Gambar 3.
YafRay (www.coala.uniovi.es/ ~jandro/noname/) Renderer yang satu ini terhitung cukup baru, namun memiliki perkembangan yang cukup pesat. Belum banyak informasi yang bisa digali, namun bila dilihat dari
CHANGELOG, ada beberapa fitur yang menarik: Import tekstur Targa. Dukungan spotlight. Dukungan gamma correction. Memiliki filter “antinoise” untuk menghilangkan arealight noise. Dukungan multiprosesor. Bisa me-render file dalam format gzipped (.xml.gz). Source code yang compliant dengan (Open)MOSIX. Apa artinya? Minimal berarti Anda bisa dengan aman membiarkan MOSIX me-migrate proses YafRay. Juga mendukung kompresi untuk meningkatkan perfomance saat transfer data lewat network.
Cara instalasi YafRay Pertama-tama, download source code Yafray. Penulis menggunakan versi YafRay 0.0.4. Setelah anda mendapatkan tarballnya, unpack ke direktori misal /usr/src/yafray. Lalu kompilasi dengan cara sebagai berikut. # ./configure —prefix=/usr/local/yafray # make # make install Setelah proses make selesai, copy file gram.yafray ke direktori /etc atau /usr/local/ etc. Untuk mencoba YafRay, Anda bisa men-download contoh model yang siap di render di situs YafRay. Di sini penulis menggunakan file blurref.sample.xml.gz. Mungkin Anda agak terkejut, karena tidak umum sebuah renderer menggunakan file berformat XML. Setelah Anda mendownload, gunakan perintah berikut untuk men-render-nya: # ./yafray ./sample.xml.gz Jika Anda ingin menggunakan fasilitas multithreading dari yafRay, gunakan opsi -c seperti berikut ini: # ./yafray -c 4 blurref.sample.xml.gz (menggunakan 4 thread) Dari perintah ini, akan dihasilkan file salida.tga seperti terlihat pada Gambar 4. Sekian dulu tulisan saya mengenai Renderer di Linux, kritik dan saran saya nantikan. Salam. Mulyadi Santosa (
[email protected])
www.infolinux.web.id
INFOLINUX OKTOBER 2003
61
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Lebih Akrab dengan Linux
Lebih Akrab dengan Linux Keragaman distro Linux dan aplikasinya seringkali membuat pusing pengguna Linux. Hal tersebut belum ditambah dengan konfigurasi dan optimasi Linux itu sendiri. Kami akan mengulas berbagai tip dan trik agar Anda senantiasa lebih akrab dengan Linux.
A
ngin keterbukaan memang seringkali menimbulkan kontroversial. Di era keterbukaan software, terkadang pilihan menjadi terlalu banyak. Termasuk Linux dengan berbagai distro dan aplikasinya. Katakanlah Anda telah memilih satu distro dan ingin menginstal semua aplikasinya secara default. Artinya, apa yang datang bersama distro itulah yang akan Anda instal. Sediakan ruang kosong harddisk yang sedikit besar, dan semua urusan pun beres. Tapi tunggu dulu, Anda masih harus menyediakan partisi di mana Linux akan menetap. Bagi Anda yang baru saja bermigrasi, hal ini bisa jadi cukup menyebalkan. Dengan usaha membaca manual di Internet atau di buku-buku Linux yang saat ini dapat dengan mudah dibeli, Linux pun duduk dengan manis di harddisk kita. Anda telah menginstal semua aplikasi yang disertakan. Tapi tiba-tiba Anda harus berhadapan dengan istilah dan pemilihan desktop environment dan window manager. Waduh! Sudah instal, masih susah pula. Baiklah, untuk desktop environment, Anda lantas memilih KDE karena kemudahan pemakaiannya. Tiba-tiba Anda membutuhkan program tambahan. Dan untuk itu, instalasi pun harus dilakukan. Pertanyaannya: saya telah membeli semua CD-ROM untuk versi distro tersebut. Tapi sayangnya, aplikasi yang saya inginkan tidak terdapat di sana. Banyak orang berkata bahwa saya harus melakukan kompilasi. Dan hey! Saya hanyalah seorang pemakai dan tidak ingin terlibat dalam compile meng-compile! Apa-apaan ini! Dasar Linux! Dengan bantuan dukungan teknis, Anda pun berhasil menginstal program tersebut. Akan tetapi, ketika ingin ber-Internet, tibatiba Anda baru saja menyadari bahwa
62
INFOLINUX OKTOBER 2003
ethernet Anda tidak dikenali oleh Linux. Bagaimana pula ini ? Dengan Windows. Semuanya lancar-lancar saja. Seorang teman kemudian menenangkan dan kemudian membuat tensi darah saya naik kembali dengan mengatakan bahwa sebaiknya saya melakukan kompilasi kernel. Kini saya benar-benar sebal dengan Linux. Setelah dibantu, akhirnya saya pun berhasil berselancar di Internet. Teman saya mengatakan bahwa dukungan untuk kartu ethernet saya belum diaktifkan di kernel. Saya sudah benar-benar muak dengan Linux. Rasanya ingin kembali saja ke Windows. Beberapa hari kemudian, kondisi tegangan listrik turun naik dan tiba-tiba komputer saya mati dengan sendirinya. Setelah tegangan listrik cukup stabil, komputer pun dinyalakan. Dan sebagai hasilnya, saya tidak dapat masuk kembali ke Linux karena file sistem saya sepertinya korup. Konsekuensi dari konsistensi saya untuk tetap menggunakan linux adalah selama beberapa jam saya tidak dapat bekerja. Semua gara-gara Linux. Rasanya ingin memarahi seorang teman yang lalu menyarankan saya untuk menggunakan journaling file system. Kenapa semuanya harus begitu rumit di Linux? Apakah tidak bisa diperbuat lebih mudah lagi? Anda pernah mengalami hal serupa? Pernah? Lebih parah? Tenang saja. Anda tidak sendiri. Di awal-awal perkenalan penulis dengan Linux, penulis bahkan pernah berjanji setia untuk sedapat mungkin tidak menggunakan Linux. Tapi kini? Linux adalah salah satu sistem operasi yang paling penulis banggakan. Di artikel ini, kita akan kupas tuntas semua kebingungan. Bagi Anda yang masih ragu atau masih sebal dengan Linux, Anda akan menemukan bahwa Linux sebenarnya cukup menyenangkan.
www.infolinux.web.id
Distro Kita akan mulai dengan distro. Istilah yang merupakan kependekan dari distribusi adalah gabungan antara kernel Linux dan berbagai program yang diramu dengan prosedur tertentu. Kernel Linux hanya ada satu-satunya di dunia ini dan pengembangannya masih dikepalai oleh Linus Torvalds, yang kini bekerja secara penuh di Open Source Development Labs. Kernel stabil terbaru adalah 2.4.21 pada saat artikel ini ditulis. Versi stabil berikutnya, 2.6, saat ini telah mencapai 2.6-test1. Kernel selalu hadir dalam dua versi: stabil dan pengembangan. Dengan pemberian versi x.y.z, maka kernel stabil akan memiliki nilai y genap dan kernel pengembangan akan memiliki nilai y ganjil. Dengan demikian, apabila ada yang menanyakan versi linux terakhir, jawablah dengan 2.4 atau 2.6 yang sebentar lagi akan unjuk gigi. Sementara, program-program yang tersedia di dunia ini sangatlah banyak. Setiap orang dapat saja membuat program baru atau mengembangkan dari yang telah ada. Hampir semua distro memaketkan program yang secara umum dipakai dan telah terbukti keandalannya. Beberapa distro mungkin menyertakan program tambahan, sementara beberapa lainnya tidak menyertakan program tertentu. Prosedur pembuatan distro mungkin tidak perlu didalami untuk saat ini. Tapi yang jelas, prosedur pembuatan dan aturan yang baik akan menjadikan distro lebih enak dipakai. Apabila Anda bertanya distro apa yang seharusnya dipakai dan mengharapkan jawaban yang sepraktis-praktisnya, maka jawabannya adalah terserah Anda.
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
TUTORIAL Lebih Akrab dengan Linux
Beberapa distro mengkhususkan dirinya untuk desktop. Beberapa lagi mengkhususkan pada server. Beberapa yang lain mengkhususkan pada bidang yang lain. Katakanlah Anda adalah pemakai desktop dan harus memilih salah satu distro. Anda dapat memilih satu dari distro yang kami sarankan berikut ini: SuSE, Red Hat dan Mandrake. Ketiga distro tersebut cukup populer. Red Hat dan Mandrake memiliki image CD-ROM yang dapat didownload di berbagai situs web di Internet. Sementara SuSE tidak menyediakan image CD-ROM tersebut. Untuk mudahnya, Anda dapat memilih Red Hat atau Mandrake. Tidak suka? Tenang saja, di luar sana, masih terdapat banyak distro lain yang menyenangkan. Sebut saja Libranet, Xandros, dan Lindows! Ketiga distro yang terakhir ini, sama seperti SuSE, mengharuskan Anda untuk merogoh kocek Anda. Salah satu hal yang harus dipertimbangkan adalah distro tidak memegang peranan penting dalam pendeteksian hardware, kestabilan sistem operasi dan hal-hal fatal lainnya. Semua hal tersebut lebih tergantung pada kernel. Dan kernel bisa di-compile. Peranan distro yang paling besar adalah pada ketersediaan program. Sementara, program pun bisa Anda compile sendiri. Anda tidak suka kata compile? Baiklah, berbagai binary (program siap jalan) untuk berbagai distro dapat dengan mudah Anda dapatkan di Internet. Jadi, andaikata Anda memilih satu distro yang cukup umum dan ternyata salah satu hardware Anda tidak dikenali, jangan terburu-buru untuk mengganti distro dan menginstal ulang. Budaya instal ulang bukanlah budaya Linux. Distro adalah ayam goreng. Penulis selalu menggunakan analogi seperti ini. Kernel adalah ayam, program-program adalah bumbu-bumbu, dan prosedur pembuatan distro adalah cara menggorengnya. Saran untuk pengguna desktop, pilihlah Red Hat atau Mandrake. Menurut informasi yag penulis dapatkan, salah satu produsen Linux di Indonesia juga akan mengeluarkan Linux yang cukup mudah dipakai dan sanggup memberikan dukungan untuk Anda. Kita tunggu saja, seberapa mampu
distro tersebut bersaing dengan berbagai distro populer lainnya. Saran untuk pengguna server, Anda masih bisa menggunakan Red Hat atau Debian. Kedua disro ini pernah dipertimbangkan oleh Sun Microsystems sebagai distro Linux yang akan mereka gunakan. Hal-hal yang harus dipertimbangkan dalam memilih distro dari sisi pengguna baru: Komitmen dan dukungan produsen serta dukungan komunitas. Kelengkapan program-program yang datang bersamanya. Kemampuan untuk mendeteksi hardware sistem. Menuruti prinsip it just works! Anda tidak perlu banyak campur tangan. Sesuaikan dengan kemampuan hardware Anda. Red Hat dan Mandrake keluar dengan program terbaru yang menuntut kemampuan lebih pada hardware. Gunakan versi lama dari Red Hat atau Mandrake, atau banting stir ke distro lain.
Desktop environment Secara teori, pemilihan desktop environment memiliki tingkat kesulitan yang sama dengan pemilihan distro, sementara apapun yang Anda pilih sebenarnya tidak akan terlalu mempengaruhi hidup Anda bersama Linux. Survai yang diadakan oleh InfoLINUX beberapa bulan yang lalu membuktikan KDE sebagai desktop terfavorit. Kemudahannya serta kemiripannya dengan Microsoft Windows tentunya patut diacungi jempol. Apabila Anda suka, langsung pakai saja. Tidak perlu berumitrumit dengan memikirkan bahwa terkadang GNOME pun juga bagus. Tidak perlu berumit-rumit untuk iri karena XFCE jauh lebih ringan. Di sini, patokannya adalah pilih saja apa yang Anda sukai. Beberapa distro datang dengan desktop masing-masing. Anda bisa saja mengikuti distro Anda. Anda juga bisa memilih atau menginstal desktop lain. Anda tidak perlu mempelajari semua desktop yang ada. Yang lebih penting untuk dibahas adalah konsep dasar Linux dan penggunaan perintah Linux. Karena jika ada desktop aneh yang digunakan oleh teman Anda dan
www.infolinux.web.id
Anda tidak dapat menggunakannya, maka kalau Anda mengerti konsep dan perintah linux, cukup buka saja satu emulasi terminal di X dan bekerjalah di sana. Tidak perlu malu untuk tidak menggunakan KDE atau GNOME. Penulis sendiri selalu menggunakan IceWM dan sangat bangga terhadapnya. Yang terpenting adalah program-program yang bisa membantu menyelesaikan pekerjaan Anda. Desktop hanya memudahkan Anda. Hal-hal yang harus dipertimbangkan dalam memilih desktop dari sisi pengguna baru: Ikuti apa yang datang bersama distro Anda. Perhatikan kemampuan hardware komputer Anda. Pilih yang paling cocok untuk diajak bekerja.
Space harddisk, mount point, dan lain sebagainya Berapa space yang diperlukan untuk menginstall Linux? Kemudian, pada saat instalasi, apakah yang dimaksud dengan mount point dan apa yang harus saya isikan atau saya pilih? Kemudian berapa ukuran swap yang saya perlukan? Pertanyaan-pertanyaan tersebut umumnya berkisar seputar instalasi. Sebenarnya, jawabannya dapat saja sangat singkat. Untuk masalah space, apabila Anda menginginkan program yang datang bersama CD-ROM-CD-ROM terinstal lengkap, sediakanlah space sekitar 3 sampai 5 GB. Apabila Anda tidak akan menginstal penuh, maka 2 sampai 3 GB sudah sangat memenuhi. Kemudian untuk msalah mount point, apabila Anda adalah pengguna rumah atau pengguna desktop secara umum, Anda cukup menyediakan satu mount point saja pada saat instalasi, yaitu / (root filesystem). Anda bisa menganggap ini sebagai drive C: pada sistem operasi Microsoft Windows. Sementara untuk swap dan mitos yang mengatakan bahwa swap Anda harus dua kali RAM atau lebih, Anda tidak perlu terlalu ambil pusing. Sebagai pengguna rumah atau desktop secara umum, swap sebesar 64 atau 128 MB sudah lebih dari mencukupi. Toh umumnya, swap yang terpakai hanyalah beberapa KB atau
INFOLINUX OKTOBER 2003
63
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Lebih Akrab dengan Linux
beberapa MB. Dengan catatan, Anda tidak menjalankan berbagai aplikasi server yang membutuhkan memori besar seperti Oracle atau Zope.
Filesystem Apabila Windows 2000 datang dengan NTFSnya, beberapa distro Linux umumnya datang dengan ext3 ataupun reiserfs. Beberapa distro masih setia dengan ext2. Beberapa waktu yang lalu, beberapa pihak mengatakan bahwa Linux sangat rentan akan gangguan listrik atau dimatikan tanpa melalui proses shutdown. Dengan mengabaikan masalah hardware yang terjadi karena gangguan listrik, apa yang sebenarnya rentan di sini adalah karena penggunaan filesystem konvensional seperti ext2. Sampai beberapa waktu yang lalu, penulis masih setia dengan ext2. Akan tetapi, ext3 dan reiserfs yang merupakan journaling filesystem akan banyak memudahkan hidup Anda. Tidak ada lagi istilah harddisk rusak karena tidak melalui proses shutdown. Untuk instalasi Linux, pilihlah filesystem ext3 atau reiserfs. Penulis berbahagia dengan reiserfs dan terkadang apabila terjadi gangguan listrik, penulis tetap dapat menyalakannya kembali tanpa ada satu masalah sekalipun. Semuanya lancar.
Instalasi program Kami pernah mengulas tuntas proses instalasi program di Linux. Pada intinya, setiap distro datang dengan paket manajemen baik yang dibuat sendiri ataupun yang diturunkan dari distro lainnya. Apabila dibandingkan dengan dunia Windows, terdapat beberapa hal prinsip yang berbeda. Program-program di Windows umumnya datang dengan installer yang akan memudahkan hidup Anda. Sekali jalan, semuanya beres. Akan tetapi, tidak jarang aplikasi A memaketkan sendiri pustaka yang diperlukan, sementara pustaka tersebut telah terinstal di sistem oleh program B. Di Windows, programprogram cenderung lebih memilih selfcontained dan memiliki individualisme sangat tinggi. Bahkan kalau tidak ada program semacam InstallShield, akan terdapat banyak keragaman di dunia instalasi program sistem operasi Windows.
64
INFOLINUX OKTOBER 2003
Sementara di Linux, sifat untuk selfcontained umumnya dihindari. Dengan demikian, apabila program A memerlukan pustaka X dan pustaka X tersebut telah diinstal oleh program B, maka program A akan menggunakan saja pustaka X tersebut. Konsekuensinya, A tergantung pada X. Untuk memudahkan semua hal tersebut, maka dibuatlah paket-paket program yang di-maintain oleh pembuat distronya. Untuk menginstal, Anda cukup mencari ketersediaan paket untuk program yang Anda butuhkan. Sayangnya, produsen distro tidak mampu atau tidak mau untuk memaketkan semua program yang ada di dunia ini. Jadi mungkin-mungkin saja kalau Anda tidak menjumpai paket program tertentu di distro Anda. Lantas apa yang harus Anda lakukan ketika produsen distro tidak menyediakan paket untuk program yang Anda butuhkan? Berikut ini adalah langkah-langkahnya: Kunjungi situs program tersebut dan carilah apakah tersedia paket untuk distro Anda. Apabila Anda menggunakan Red Hat, Mandrake, atau Debian, maka kemungkinan besar, produsen program tersebut telah memaketkannya untuk Anda. Apabila produsen program tersebut tidak memaketkan untuk distro tertentu, carilah terlebih dahulu di paketnya di Internet. Google akan banyak membantu Anda untuk itu. Umumnya, beberapa pihak ketiga atau pengguna lain telah memaketkan program tersebut dan dapat di-download. Apabila benar-benar tidak tersedia paket untuk program tersebut, Anda dapat men-download source code-nya di situs program tersebut. Umumnya langkahlangkah kompilasi telah disebutkan secara detail. Anda bisa meminta teman Anda untuk membantu apabila Anda belum pernah melakukan kompilasi sendiri. Anda bahkan bisa meminta pihak ketiga untuk memaketkannya untuk Anda.
Dukungan untuk hardware Beberapa tahun silam, rasa was-was memang cukup wajar ketika Anda ingin menggunakan hardware tertentu di Linux.
www.infolinux.web.id
Yah, Kernel linux 2.0 atau pun 2.2 memang masih jauh untuk dikatakan sebagai sistem operasi yang banyak mengenali hardware. Tapi sejak kernel 2.4 ke atas, dan kernel 2.6 yang akan keluar ini, dukungan hardware telah jauh disempurnakan. Ethernet dan sound card yang penulis miliki dapat berjalan dengan mulus menggunakan 2.4.19. Bagaimana dengan VGA card? Lagi-lagi dulu, ketika versi Xserver-XFree86 masih di bawah 4 atau baru-baru mencapai versi 4, VGA-VGA card modern masih kurang didukung. Akan tetapi, untuk saat ini, dimulai dari versi 4.3, dukungan untuk berbagai VGA card modern pun semakin meluas. Produsen seperti nVIDIA pun tidak mau kalah dengan mendistribusikan driver untuk VGA card yang diproduksi oleh perusahaan tersebut. Lantas bagaimana dengan perangkat USB, SCSI dan macam-macam perangkat keras lainnya? Tenang saja. Secara umum, rasa-rasanya kita tidak perlu khawatir karena pengembangan kernel akan dilakukan terus menerus. Dan hal tersebut berarti kita akan menikmati Linux yang akan jauh lebih ramah di masa mendatang. Dan Linux adalah sistem operasi pertama yang mendukung kemampuan hyperthreading pada prosesor Intel terbaru. Luar biasa, bukan?
Help! Help! Help! Komunitas adalah jiwa dari perkembangan sistem operasi Linux dan free software umumnya. Apabila Anda membutuhkan bantuan untuk program atau hal tertentu, cobalah membaca manual ataupun readme-nya. Paling tidak dari berbagai FAQ yang dapat ditemukan dengan mudah di Internet. Dan kalau Anda butuh cepat, bergabunglah dengan beberapa channel tertentu di beberapa server irc. Server irc.freenode.net adalah salah satu server yang paling aktif. Demikianlah. Semakin kita mau mengenal Linux dan free software lebih dalam, semakin sayang kita akan linux dan free software tersebut. Karena, bukankah tidak kenal maka tidak sayang? Noprianto (
[email protected])
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Kompilasi Kernel Linux Red Hat
Kompilasi Kernel Linux Red Hat Linux Red Hat merupakan distro yang sangat populer dan cepat perkembangannya. Jika Anda masih bertahan dengan Red Hat versi lama, tapi ingin menggunakan kernel terbaru, Anda dapat mengompilasi kernelnya.
T
utorial ini berupa langkah-langkah melakukan kompilasi kernel Linux pada distribusi Red Hat 8.0. Namun, tutorial ini juga dapat Anda gunakan untuk Red Hat 9 dengan menyesuaikan penulisan nomor versinya. Alasan penulis menggunakan Linux Red Hat 8.0 karena versi ini masih cukup baru dan stabil, meskipun saat artikel ini ditulis sudah beredar Linux Red Hat 9.
Kernel Linux Kernel adalah inti dari sistem operasi Linux, yang menjembatani interaksi antara program-program (aplikasi-aplikasi) di Linux dengan perangkat keras (hardware) komputer. Kernel memiliki peranan dan fungsi yang sangat penting karena kernel dapat berinteraksi langsung dengan hardware dan juga dapat berinteraksi langsung dengan program-program user (Linux applications). Gambar 1 adalah diagram yang menggambarkan kedudukan kernel. Kernel memiliki tugas dan tanggung jawab sebagai berikut: Task Scheduling (Multitasking) Memory Management Hardware support Networking support Audio support File system support
dan interpreter memiliki fungsi dan tugas yang sama namun berbeda dalam proses kerjanya. Kita tidak membahas interpreter dikarenakan tidak terlalu berhubungan dengan fokus artikel ini.
Compiler Sebuah kode-kode program (source code) sebelum dapat dijalankan (executable) terlebih dahulu di terjemahkan oleh compiler menjadi kode-kode biner (binary code) yang dapat dimengerti oleh mesin (komputer). Seperti halnya kernel Linux yang terdiri atas program-program yang ditulis dalam bahasa C, sebelum dapat digunakan tentunya terlebih dahulu dilakukan proses penerjemahan atau biasanya sering disebut kompilasi dahulu. Umumnya di Linux kita dapat menggunakan utilitas GNU gcc sebagai compiler untuk penerjemahan tersebut.
mencoba melakukan hal ini jika Anda belum mengerti benar dan paham mengenai apa itu kompilasi kernel Linux, atau jangan sekali-kali Anda lakukan hal ini pada sistem Linux Anda yang memang merupakan sistem yang penting dan sudah stabil (production server) di lingkungan jaringan komputer Anda. Jika Anda memang bersikeras berkeinginan melakukan kompilasi kernel, maka ikuti dan pahami langkah-langkahnya yang akan penulis jelaskan pada artikel ini. Berikut ini beberapa alasan utama bagi penulis atau mungkin juga Anda mengapa melakukan kompilasi kernel: Untuk mengoptimasikan kernel Linux terhadap hardware Anda. Untuk mengoptimasikan sistem Anda untuk aplikasi-aplikasi spesifik seperti Oracle atau MySQL database server atau sebagai sistem yang akan ditujukan sebagai dedicated router atau firewall. Untuk meningkatkan security dengan menggunakan kernel patches seperti grsecurity atau LIDS. Agar sistem Anda dapat mendukung hardware terbaru yang ingin digunakan. Ingin menggunakan fitur-fitur spesifik seperti LVM atau Sistem File NTFS dan fitur-fitur lainnya. Memperbaiki atau menghilangkan bugs yang ada pada kernel Anda saat ini. Ingin memperbarui/meng-upgrade versi kernel agar up to date.
Mengapa melakukan kompilasi kernel?
Tipe kernel Linux
Pertanyaan ini memiliki banyak jawaban sebagai alasan yang akan penulis gunakan dalam melakukan kompilasi kernel. Tetapi seharusnya Anda jangan sekali-kali
Sebelum kita mulai melakukan kompilasi kernel, ada baiknya penulis menjelaskan tipetipe kernel Linux, agar hasil kompilasi sesuai dengan kernel tipe apa nantinya yang akan
Kernel Space User Space
Hardware Linux Kernel User Programs
Sistem operasi Linux, yang biasa disebut juga kernel Linux, adalah sekumpulan program-program yang ditulis dalam kode sumber bahasa C (salah satu bahasa pemrograman tingkat tinggi). Program merupakan sekumpulan instruksi atau pernyataan-pernyataan yang dimengerti oleh sebuah compiler atau interpreter. Compiler
www.infolinux.web.id
Gambar 1. Diagram kernel dalam sistem Linux
INFOLINUX OKTOBER 2003
65
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Kompilasi Kernel Linux Red Hat
dihasilkan dari kompilasi kernel Linux. Kernel Linux dibagi dalam dua tipe kernel, monolithic kernel dan modular kernel.
Kernel Linux dengan tipe seperti ini memungkinkan semua driver hardware atau fitur-fitur sistem dikompilasi langsung ke dalam kernel atau diintegrasikan (built-in) menjadi satu kesatuan utuh sebagai sistem operasi Linux. Keuntungan dari kernel tipe ini adalah sebagai berikut: Interaksi atau komunikasi hardware dengan sistem lebih cepat. Dari segi security system, relatif lebih aman.
Modular kernel Kernel Linux dengan tipe ini memungkinkan driver hardware atau fitur-fitur sistem dikompilasi sebagai modul-modul dan tersimpan di dalam /lib/modules/versi-kernelx-x (catatan: kata versi-kernel-x-x diganti dengan nomor versi kernel yang digunakan). Keuntungan dari kernel tipe ini adalah sebagai berikut: Kernel menjadi lebih fleksibel. Anda dapat memuat (load) modul ke dalam kernel sesuai yang Anda butuhkan saja. Pergantian hardware lebih mudah karena bersifat modular, di mana Anda dapat menyertakan driver seluruh hardware sebagai modul dengan hanya melakukan probing suatu modul (menggunakan perintah-perintah insmod atau modprobe).
Persiapan kompilasi kernel Sebelum memulai proses kompilasi kernel tentunya Anda perlu mempersiapkan program-program atau utility yang diperlukan selain source dari kernel itu sendiri. Utility yang diperlukan sebagai berikut. Paket-paket compiler, seperti GNU gcc, make, glibc, binutils. Semua paket program ini tersedia pada CD Linux Red Hat. Patch yang tersedia, ini sifatnya opsional jika memang Anda memerlukan patching terhadap kernel. Library C lainnya seperti ncurses. Persiapan lainnya yang tidak kalah
66
INFOLINUX OKTOBER 2003
Monolithic kernel
Gambar 2. www.kernel.org
penting adalah melakukan resume terhadap hardware komputer yang Anda gunakan seperti jenis prosesor, ethernet, sound card, block device (hard disk IDE/SCSI), USB, PCMCIA card, sistem file yang akan Anda gunakan, dan lain- lain.
Mendapatkan source code kernel Meskipun distribusi Red Hat biasanya menyediakan update atau upgrade kernel Linux, yang dapat diperoleh dalam paket yang sudah jadi atau binary di http:// www.redhat.com/apps/support/errata, namun pada artikel ini penulis hanya akan meng-update atau meng-upgrade kernelnya dengan menggunakan paket dalam bentuk source. Alasan penulis, jika menggunakan paket kernel yang sudah binary cukup sederhana dan terbatas, berbeda halnya dengan paket kernel yang masih dalam bentuk source code yang tentunya lebih komplek proses instalasinya dan dapat memungkinkan penulis mengonfigurasi kernel sesuai kebutuhan saat ini. Untuk mendapatkan source code kernel Linux, Anda dapat memperolehnya di http:/ /www.kernel.org/pub/linux/kernel/v2.4/ sebagaimana yang dapat dilihat pada Gambar 2. Pada artikel ini penulis akan mengupgrade kernel pada sistem Linux Red Hat (versi kernel lama 2.4.18-14) menggunakan source code kernel versi 2.4.21 dan tipe kernel yang nantinya dihasilkan adalah modular kernel.
www.infolinux.web.id
Menguraikan source Setelah memperoleh source code kernel Linux, langkah selanjutnya adalah mendekompres dan mengekstrak source code kernel, yang biasanya dikemas dalam paket arisp terkompresi tar.gz atau tar.bz2, ke dalam direktori /usr/src (sebagai user root). # cd /usr/src # tar –xzvf linux-2.4.21.tar.gz atau untuk paket kernel dengan format arsip tar.bz2 sebagai berikut: # tar –xjvf linux-2.4.21.tar.bz2 Jika Anda memerlukan patching kernel maka lakukan sebagai berikut: # cd /usr/src/linux-2.4.21 # patch –p1 < /path/ke/direktori/ file_patch Catatan: /path/ke/direktori/file_patch diganti dengan path direktori tempat menyimpan file patch yang Anda ingin gunakan. Kemudian sebaiknya Anda membuat simbolik link untuk direktori hasil ekstrak tadi. Hal ini untuk kemudahan Anda dalam bekerja meskipun sifanya opsional. # ln –s /usr/src/linux-2.4.21 /usr/src/ linux Saat berada di dalam direktori /usr/src/ linux lakukan perintah-perintah berikut ini: # make mrproper
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
TUTORIAL Kompilasi Kernel Linux Red Hat
Perintah di atas akan melakukan penghapusan file-file kernel yang lama yang tidak dinginkan seperti file-file yang berekstensi .o yang ada pada direktori /usr/src/linux.
Langkah ini sangat penting karena bertujuan untuk memilih driver hardware atau fitur-fitur sistem yang mana saja yang akan dijadikan modul bagi kernel atau mungkin driver hardware atau fitur-fitur sistem yang mana saja yang akan diintegrasikan (built-in) ke dalam kernel. Untuk itu jalankan perintah make menuconfig, atau make xconfig, atau yang primitif make config. # make menuconfig Perintah di atas akan memunculkan window text based yang berisi pilihan komponen-komponen yang dinyatakan dalam menu kategori yang nantinya akan dipilih (Gambar 3). Pada window utama ini, Anda dapat memilih menu kategori yang ada dengan mengarahkan kursor lalu menekan tombol <Enter> atau tekan tombol <Select>. Lalu tambahkan suatu item menu untuk sistem kernel Anda pada pilihan menu kategori ini. Cara menambahakan suatu item untuk sistem kernel modular dengan menekan tombol M di keyboard Anda, untuk sistem kernel monolithic tekan
Konfigurasi kernel
Gambar 4. make xconfig
tombol Y (atau dalam beberapa hal Anda bisa juga menggunakan space bar), dan untuk membatalkan pilihan Anda terhadap suatu item tekan tombol N. Simbol —> merupakan menu kategori yang mempunyai beberapa submenu, simbol [*] menjelaskan bahwa item tersebut merupakan builtin, simbol [M] merupakan modular, simbol [ ] merupakan item yang tidak dipilih atau modul dengan tipe builtin, dan simbol < > merupakan simbol item yang bisa dan dapat digunakan sebagai modul maupun builtin. Untuk kembali ke menu awal pilih <Exit> atau tekan [Esc]. Selain make menuconfig, Anda dapat menggunakan metode konfigurasi kernel yang berbasis window GUI (graphical user interface) dengan menjalankan perintah
make xconfig, yang akan menampilakan window seperti terlihat pada Gambar 4. # make xconfig Gambar 5 menunjukkan proses konfigurasi kernel dengan memilih menu kategori Network device support pada metode konfigurasi kernel menggunakan make menuconfig. Jika selesai melakukan konfigurasi kernel, Anda harus menyimpan konfigurasi kernel ini pada sebuah file (yang biasanya bernama .config dan terletak dalam direktori /usr/src/linux/). Untuk itu, pilih tombol “Exit” dan Anda harus memilih yes pada window seperti gambar 6. Pada distribusi Red Hat 8.0, jika Anda ingin menggunakan file konfigurasi kernel lama, maka Anda cukup menyalin file konfigurasi kernel yang ada pada direktori / boot yang bernama config-2.4.18-14 ke direktori source Linux, yaitu /usr/src/linux dengan nama file .config.
Kompilasi dan instalasi kernel
Langkah selanjutnya setelah melakukan konfigurasi kernel adalah melakukan kompilasi dan instalasi kernel. # make dep Perintah ini akan memastikan agar ketika kernel dikompilasi tidak mengalami masalah dependency. Masalah dependency ini akan muncul jika suatu option (menu kategori/sub menu/item) yang Anda pilih bergantung pada option yang lainnya tidak dipilih. # make bzImage
Gambar 3. make menuconfig
www.infolinux.web.id
INFOLINUX OKTOBER 2003
67
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Gambar 5. Menu pilihan Network device support
Perintah di atas berarti mulai melakukan proses kompilasi kernel. Proses ini biasanya memakan waktu cukup lama, tergantung pada spesifikasi hardware Anda (jenis prosessor dan besarnya RAM). Hasil kompilasi nantinya akan membuat kernel image, yaitu /usr/src/linux/arch/i386/ boot/bzImage . Selanjutnya Anda harus menyalin kernel image tersebut ke direktori /boot. #cp /usr/src/linux/arch/i386/boot/bzImage / oot/vmlinuz-2.4.21 Sebaiknya salin kernel image dengan nama yang standar dan sudah ditentukan (biasanya vmlinuz-version) serta yang mudah mengenalinya. Langkah selanjutnya adalah melakukan kompilasi dan instalasi modul-modul kernel. # make modules # make modules_install Perintah di atas akan mengompilasi dan menginstalasi atau meletakkan modul-modul kernel yang sudah dikompilasi ke direktori / lib/modules/versi-kernel-x-x (catatan: kata versi-kernel-x-x akan diganti dengan nomor versi kernel yang digunakan). Langkah berikutnya adalah memindahkan System.map dari kernel yang baru ke direktori tersendiri agar memudahkan administrasinya. Dan jangan lupa memback-up kernel yang lama untuk kembali digunakan jika ada masalah dengan kernel baru. # cp /boot/System.map /boot/ System.map.kernel-old
68
INFOLINUX OKTOBER 2003
Kompilasi Kernel Linux Red Hat
Gambar 6. Menyimpan konfigurasi kernel
# cp /usr/src/linux/System.map /boot/ System.map
Update LILO/GRUB Agar kernel Anda yang baru saja di kompilasi dapat dikenali oleh boot loader seperti LILO ataupun GRUB, maka Anda harus melakukan update atau memodifikasi konfigurasi boot loader tersebut, yaitu dengan cara mengedit file konfigurasi masing-masing boot loader. Jika sistem Anda menggunakan boot loader LILO, lakukan penambahan direktifdirektif pada file /etc/lilo.conf. prompt timeout=50 boot=/dev/hda map=/boot/map install=/boot/boot.b message=/boot/message default=RedHat8.0-new linear #Baris-Baris tambahan untuk kernel yang baru Anda kompilasi image = /boot/vmlinuz-2.4.21 root = /dev/hda2 label = RedHat8.0-new read-only #kernel lama anda image = /boot/vmlinuz-2.4.18-14 root = /dev/hda2 label = RedHat8.0 read-only #Wah..yang ini cuma iseng
www.infolinux.web.id
other = /dev/hda1 label = Windows2000 Jalankan lilo agar konfigurasi LILO terbaru tersebut ditulis ke MBR: # lilo –v Dan jika Anda menggunakan boot loader GRUB, lakukan penambahan direktif-direktif pada file /etc/grub.conf. boot=/dev/hda default=0 timeout=10 splashimage=(hd0,1)/grub/splash.xpm.gz #Baris-Baris tambahan untuk kernel yang baru Anda kompilasi title Red Hat Linux (2.4.21) root (hd0,1) kernel /vmlinuz-2.4.21 ro root=LABEL=/ #kernel lama Anda title Red Hat Linux (2.4.18-14) root (hd0,1) kernel /vmlinuz-2.4.18-14 ro root=LABEL=/ initrd /initrd-2.4.18-14.img #Wah..yang ini cuma iseng title DOS rootnoverify (hd0,0) chainloader +1 Terakhir, reboot mesin Anda dengan kernel baru untuk menguji hasil kompilasi. Henry Saptono (
[email protected])
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Kompilasi Kernel ala Debian
Kompilasi Kernel ala Debian Kompilasi kernel bukan suatu keharusan. Terutama bila sistem Linux Anda sudah berjalan dengan baik. Kompilasi hanya dibutuhkan bila ada kekurangan atau kelemahan pada kernel yang sedang digunakan. Misalnya, Anda ingin upgrade dari kernel 2.2 ke 2.4.
M
eskipun kernel Linux digunakan di semua distro GNU/Linux, tetapi setiap distro mempunyai cara masing-masing untuk melakukan upgrade atau kompilasi kernel, termasuk distro Debian. Pada versi Debian yang terakhir (Debian 3.0 r1) ternyata kernel yang digunakan masih merupakan kernel 2.2.x, meskipun pada CD-nya disertakan kernel 2.4.18. Hal ini tentunya membutuhkan waktu ekstra untuk melakukan upgrade kernel dari versi 2.2.x ke 2.4.18.
Persiapan Hal yang paling sederhana yang perlu dilakukan adalah memastikan versi kernel yang digunakan saat ini. # uname -r 2.2.20-idepci Seperti terlihat di atas, kernel yang digunakan saat ini adalah kernel 2.2.20. Setelah yakin dengan versi kernel yang digunakan, kita mulai dengan memasang paket-paket yang diperlukan untuk upgrade dan kompilasi kernel-2.4.18. Adapun paketpaket yang diperlukan untuk dipasang terlebih dahulu adalah: 1. gcc Paket ini digunakan untuk melakukan kompilasi. Seperti yang kita ketahui bahwa Kernel linux diberikan dalam dua bentuk yaitu mentah (source) atau siap pakai (binary). Biasanya orang lebih memilih untuk melakukan kompilasi sendiri yaitu mengubah source kernel menjadi binary. Kompilasi perlu dilakukan juga ketika kernel yang sudah kita gunakan ternyata memiliki masalah sehingga harus diperbaiki atau dikompilasi ulang. Jika kita cermati proses kompilasi tersebut, akan terlihat bahwa gcc melakukan tugasnya untuk mengompilasi file-file yang berupa source menjadi binary.
2. 3. 4. 5.
libncurses5 libncurses5-dev libc6-dev* bin86* bin86digunakan Debian untuk melakukan khusus terhadap kernel versi 2.2.x untuk komputer yang memiliki arsitektur x86 seperti Intel dan AMD. Anda tidak memerlukannya jika Anda melakukan kompilasi pada kernel versi 2.4.x. 6. fakeroot* Melakukan kompilasi kernel biasanya selalu menggunakan account root. fakeroot, seperti namanya, digunakan untuk melakukan simulasi seolah-olah kompilasi kernel dilakukan dalam lingkungan root sehingga Anda tidak perlu beralih menggunakan account root untuk melakukan kompilasi. Atau, Anda dapat saja tidak menggunakan fakeroot ini dan langsung menggunakan account root untuk melakukan kompilasi. 7. Kernel-package 8. kernel-source-2.4.18 Inilah inti dari sistem operasi GNU/Linux, kernel. Bentuk source inilah yang akan kita kompilasi menjadi sebuah binary. Gunakan account root dan kemudian Anda dapat melakukan instalasi paketpaket yang diperlukan secara bersamaan dengan perintah: # apt-get install gcc libncurses5 libncurses5-dev libc6-dev fakeroot kernelpackage kernel-source-2.4.18 Reading Package Lists... Done Building Dependency Tree... Done Sorry, libncurses5 is already the newest version. The Following extra packages will be installed: binutils bzip2 cpp cpp-2.95 dpkg-dev gcc2.95 libbz2-1.0 make patch perl perl-
www.infolinux.web.id
modules The Following NEW packages will be installed: binutils bzip2 cpp cpp-2.95 dpkg-dev fakeroot gcc gcc-2.95 kernel-package kernel-source-2.4.18 libbz2-1.0 libc6-dev make patch perl perlmodules 0 packages upgraded, 17 newly installed, 0 to remove and 0 not upgraded. Need to get 0B/33.6MB of archives. After unpacking 61.7MB will be used. Do you want to continue? [Y/n] Pada pesan di atas, kita dapat melihat bahwa paket yang diinstal rupanya bukan saja paket-paket yang kita definisikan tetapi juga paket yang lain. Hal ini disebabkan paket tersebut saling terkait dengan paket yang lain atau yang dikenal dengan istilah dependency. Silakan tekan [Enter] atau jawab Y kemudian tekan [Enter] untuk melanjutkan. Media Change: Please insert the disc labeled ‘Debian GNU/Linux 3.0 r1 _Woody_ - Official i386 Binary-1 (20021218) in the drive ‘cdrom’ and press enter Selanjutnya masukkan CD Debian # 1 ke dalam cd-rom dan tekan [Enter]. Kemudian Anda akan diberi peringatan mengenai penggunaan paket binutils. Anda dapat abaikan peringatan ini dan tekan [Enter] dan kemudian apt-get mulai memilih file-file yang akan dipasang dari CD #1
Selecting previously deselected package Unpacking (from .../
INFOLINUX OKTOBER 2003
69
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Masukkan CD # 2 dan tekan [Enter] Selecting previously deselected package Unpacking (from .../ ) ... Selecting previously deselected package Unpacking (from .../ ) ... Setting up ... Setting up ... Setting up ... # Sampai tahap ini, Anda sudah berhasil melakukan pemasangan paket-paket yang diperlukan untuk melakukan upgrade. Silakan melakukan cek ulang, yaitu dengan melihat apakah file kernel-source2.4.18.tar.bz2 sudah ada. # ls -l /usr/src/kernel-2.4.18.tar.bz2 -rw-r—r— 1 root root 23837917 Apr 14 2002 /usr/src/kernel-source-2.4.18.tar.bz2 Sekarang adalah untuk mempersiapkan sebuah account yang akan digunakan untuk melakukan kompilasi. Buat sebuah account baru yang kemudian dimasukkan dalam grup src. # adduser —ingroup src userbaru Adding user userbaru... Adding new user userbaru (1000) with group src Creating home directory /home/userbaru Copying files from /etc/skel Enter new UNIX password: <masukkan password yang diinginkan untuk userbaru> Retype new UNIX password: <masukkan
70
INFOLINUX OKTOBER 2003
Gambar 1. Tampilan Menuconfig
kembali password yang diinginkan untuk userbaru> passwd: password updated succesfully Changing the user information for userbaru Enter the new value, or press return for the default Full Name []: [Enter] Room Number []: [Enter] Work Phone []: [Enter] Home Phone []: [Enter] Other []: [Enter] Is the information correct? [y/n] # exit Kemudian login dengan account userbaru. Selanjutnya ketika semua yang diperlukan sudah terpasang, mulailah kita melakukan membuka (decompress) file kernel-source-2.4.18.tar.bz2 dengan cara: $ cd /usr/src $ tar jxvf kernel-source-2.4.18.tar.bz2 Tunggu beberapa saat, karena satu file ini terdiri dari banyak sekali kernel-source dan driver dari beberapa arsitektur komputer selain x86. Setelah selesai membuka file tersebut, Anda dapat melihat bahwa pada direktori /usr/src sekarang terdapat sebuah direktori baru yaitu kernelsource-2.4.18 $ ls -l drwxr-xr-x 1 userbaru src 4069 Apr 14 2002 kernel-source-2.4.18 -rw-r—r— 1 root root 23837917 Apr 14 2002 kernel-source-2.4.18.tar.bz2 Proses selanjutnya adalah membuat direktori kerja untuk kernel yang akan dikompilasi dengan cara membuat sebuah link yang seolah-olah adalah sebuah direktori baru. $ ln -s kernel-source-2.4.18 linux-2.4.18 $ ls -l
www.infolinux.web.id
) ... Selecting previously deselected package Unpacking (from .../ ) ... Selecting previously deselected package Unpacking (from .../ ) ... Media Change: Please insert the disc labeled ‘Debian GNU/Linux 3.0 r1 _Woody_ - Official i386 Binary-2 (20021218) in the drive ‘cdrom’ and press enter
Kompilasi Kernel ala Debian
Gambar 2. Tampilan Xconfig
drwxr-xr-x 1 userbaru src4069 Apr 14 2002 kernel-source-2.4.18 -rw-r—r— 1 root root 23837917 Apr 14 2002 kernel-source-2.4.18.tar.bz2 lrwxrwxrwx 1 userbaru src 4069 Apr 14 2002 linux-2.4.18 -> kernel-source2.4.18
Konfigurasi kernel Source kernel yang kita miliki sekarang masih berupa source yang belum dikonfigurasi sesuai dengan keperluan. Ada dua cara umum yang bisa digunakan. Yaitu, cara dengan cara mengonfigurasi source kernel tersebut secara manual atau dengan mengambil konfigurasi kernel sebelumnya. Untuk cara manual kita dapat menggunakan perintah: $ make config Cara ini (make config) merupakan cara yang paling sederhana karena Anda akan disuguhkan dengan banyak sekali pertanyaan untuk setiap pilihan yang ada dalam modus text. $ make menuconfig Cara kedua ini (make menuconfig) tergolong lebih mudah dibandingkan dengan cara sebelumnya. Meskipun masih dalam modus teks, pada cara ini Anda akan disuguhkan sebuah pilihan hirarki seperti pada Gambar 1. $ make xconfig Cara ketiga ini (make xconfig) adalah cara mengonfigurasi kernel melalui X Window, yang tidak terlalu berbeda dengan cara sebelumnya. Tampilannya seperti Gambar 2. Dari ketiga cara di atas, semuanya dapat membantu Anda untuk mengonfigurasi kernel. Mungkin cara yang
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
TUTORIAL Kompilasi Kernel ala Debian
paling populer adalah make menuconfig atau make xconfig. Selanjutnya adalah memilih konfigurasi seperti apa yang harus kita pilih di antara sekian banyak pilihan yang ada. Tentunya bagi Anda yang belum pernah melakukan kompilasi kernel hal ini akan menjadi masalah karena Anda juga tidak tahu sama sekali guna dari masing-masing pilihan tersebut. Cara kedua adalah dengan cara mengadopsi konfigurasi kernel yang sudah tersedia (file .config). Pada cara ini, Anda dapat menggunakan konfigurasi yang sudah ada sebelumnya yaitu mengambil dari /boot/config* $ cp /boot/config-2.2.20-idepci /usr/src/ linux-2.4.18/.config Jangan lupa nama file-nya tujuannya adalah .config. Cara lain adalah mengambil nilai default dari konfigurasi kernel yang akan digunakan dengan perintah make oldconfig. $ make oldconfig Jika nanti Anda diberikan pilihan tetapi masih bingung untuk memilih yang mana, untuk singkatnya Anda dapat memilih [N] yang berarti tidak diaktifkan.
lrwxrwxrwx 1 userbaru src 4069 Apr 14 2002 linux-2.4.18 -> kernel-source2.4.18 Untuk komputer yang saya gunakan (PIII/450, RAM 128), kompilasi memakan waktu kurang lebih 20 menit.
Pemasangan Setelah selesai dengan kompilasi, edit konfigurasi Lilo. # cd /usr/src # dpkg -i kernel-image-2.4.1802july03_10.00.Custom_i386.deb Would you like to create a boot floppy now? [No] You already have a LILO configuration in / etc/lilo.conf Install a boot block using the existing /etc/ lilo.conf? [Yes] Testing lilo.conf... Testing succesfull. Installing the partition boot sector... Installation succesfull. #
Rebootkomputer Anda dengan perintah: # init 6 Di komputer penulis, setelah di-reboot ternyata kernel dapat berjalan dengan baik. Jika masih terdapat beberapa error, biasanya terjadi karena konfigurasi default yang digunakan (make oldconfig) tidak sesuai dengan komputer Anda. Misalnya saja pada konfigurasi tersebut masih belum menyertakan NIC atau Sound Card. Silakan bermain-main dengan make menuconfig atau make xconfig dan lakukan kompilasi ulang. Bagaimana konfigurasi kernel yang baik? Semakin banyak pilihan yang tidak berguna dapat dibuang, tentunya kernel akan semakin kecil ukurannya. Jika masih belum berhasil, Anda dapat mencari di www.google.com tentang bagaimana konfigurasi kernel yang ‘biasanya’ diperlukan. “GNU/Linux menawarkan banyak cara untuk kompilasi kernel. Debian menawarkannya dengan cara lain. Pilih yang mana?” David Sudjiman ([email protected])
Kompilasi Setelah selesai melakukan konfigurasi, kita akan melakukan kompilasi source kernel tersebut sehingga menjadi program/kernel siap pakai. $ fakeroot make-kpkg clean $ fakeroot make-kpkg –append-to-version=02july03 kernel_image Perintah di atas digunakan untuk membuat kernel siap pakai (kernel image/ binary) dengan menambahkan kode versi kernel menjadi -02juli03. Anda dapat melihat sendiri hasil kompilasi dengan perintah: $ ls -l ./../ -rw-r—r— 1 userbaru src 23837917 Jul 2 2002 kernel-image-2.4.1802july03_10.00.Custom_i386.deb drwxr-xr-x 1 userbaru src 4069 Jul 2 2002 kernel-source-2.4.18 -rw-r—r— 1 root root 23837917 Apr 14 2002 kernel-source-2.4.18.tar.bz2
www.infolinux.web.id
INFOLINUX OKTOBER 2003
71
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
IKLAN
72
INFOLINUX OKTOBER 2003
www.infolinux.web.id
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
TUTORIAL
IKLAN
www.infolinux.web.id
INFOLINUX OKTOBER 2003
73
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Belajar Membuat Login Sendiri
Belajar Membuat Login Sendiri Proses login selalu kita lewati setiap kali memasuki sistem. Bagi Anda yang mendalami pemrograman C, bagaimana kalau kita belajar membuat program login sendiri?
P
roses otentikasi atau yang lebih dikenal dengan istilah login adalah sesuatu yang tidak bisa kita hindarkan dalam penggunaan Linux seharihari. Bagi Anda yang aktif bekerja di console, hampir bisa dipastikan akan selalu bertemu dengan prompt login. Di balik kesederhaan prompt login tersebut, sebenarnya tersimpan sesuatu yang luar biasa. Program login tidak hanya sekadar mencocokkan username dan password yang dimasukkan, akan tetapi juga harus dapat berbicara dengan pustaka PAM, kemampuan bekerja di jaringan, kemampuan bekerja dengan logging sistem, dan lain sebagainya. Akan tetapi, bagi kita yang mendalami pemrograman linux, membuat program login yang sederhana mungkin menjadi suatu daya tarik luar biasa. Kita akan mengambil hostname dari sistem, kemudian meminta username dan password kepada user, dan tak lupa melakukan proses otentikasi dengan mambaca database password dan shadow. Apa yang Anda butuhkan hanyalah gcc dan paket-paket yang dibutuhkan untuk kompilasi serta libcrypt yang umumnya sudah terdapat di dalam distro Anda masing-masing. Berikut ini adalah langkah demi langkah pembuatannya.
Kelompok pertama yang terdiri dari MAX_HOSTNAME dan MAX_USERINFO digunakan sebagai pembatas panjang string. Kelompok kedua yang beranggotakan SUCCESS, ERROR_FAILED, ERROR_ GETSPNAM dan ERROR_GETPWNAM akan kita gunakan dalam proses otentikasi. Sementara kelompok terakhir adalah keterangan tambahan untuk program ini. 2. Menggunakan file header yang dibutuhkan #include <stdio.h> #include <string.h> #include #include #include <shadow.h> #include
setspent(); spentry = getspnam(uname); endspent(); pentry = getpwnam(uname); if (! spentry) return ERROR_GETSPNAM; if (! pentry) return ERROR_GETPWNAM; strcpy(temppasswd,crypt(passwd, strncpy(salt,spentry->sp_pwdp,2))); strcpy(passwd,temppasswd); free(temppasswd); if ((strcmp(spentry->sp_namp,uname) == 0) && (strcmp(spentry>sp_pwdp,passwd) == 0)) return SUCCESS; else return ERROR_FAILED;
Header-header tersebut dibutuhkan dalam proses kompilasi. Header stdio.h adalah header standar yang kita butuhkan untuk operasi input output standar. Sementara header string.h kita butuhkan karena banyak bekerja dengan string. Header unistd.h untuk standar sistem operasi. Header pwd.h digunakan dalam bekerja dengan database password. Kemudian header shadow.h digunakan dalam bekerja dengan database shadow. Dan yang terakhir, crypt.h digunakan dalam enkripsi password.
Pertama-tama, kita akan mendefinisikan beberapa variabel yang kita butuhkan. Berikut ini adalah variabel-variabel tersebut: char *temppasswd = (char *) malloc (sizeof (char *) * MAX_USERINFO); char salt[3]; struct spwd *spentry; struct passwd *pentry;
SUCCESS 0 ERROR_FAILED 1 ERROR_GETSPNAM 2 ERROR_GETPWNAM 3
3. Fungsi auth() Fungsi auth() berfungsi untuk memeriksa keabsahan username dan password. Fungsi
Variabel temppasswd akan bernilai hasil enkripsi dari parameter passwd yang dikirimkan. Proses otentikasi dilakukan
INFOLINUX OKTOBER 2003
www.infolinux.web.id
1. Definisikan beberapa macro yang diperlukan #define MAX_HOSTNAME 30 #define MAX_USERINFO 15 #define #define #define #define
74
#define PROGNAME “mylogin” #define VERSION “0.1a” #define COPYRIGHT “(c) Noprianto, August 2003. GPL.”
ini akan menerima dua parameter, yaitu uname dan passwd yang masing-masing diasosiasikan dengan username dan password-nya. Nilai kembalian dari fungsi ini bisa berupa salah satu dari SUCCESS, ERROR_FAILED, ERROR_GETSPNAM, atau ERROR_GETPWNAM. Berikut ini adalah source code fungsi: int auth(char *uname, char *passwd) { char *temppasswd = (char *) malloc (sizeof (char *) * MAX_USERINFO); char salt[3]; struct spwd *spentry; struct passwd *pentry;
}
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Belajar Membuat Login Sendiri
Kemudian, tak lupa kita juga mengambil informasi database password dengan memberikan perintah berikut ini: pentry = getpwnam(uname); Untuk antisipasi apabila pembacaan gagal, maka kita akan melakukan pemeriksaan sederhana dengan dua statemen berikut: if (! spentry) return ERROR_GETSPNAM; if (! pentry) return ERROR_GETPWNAM; Selanjutnya, kita perlu melakukan enkripsi terlebih dahulu untuk parameter passwd yang dikirimkan. Seperti yang telah disebutkan, enkripsi diperlukan karena kita akan membandingkan data hasil enkripsi dan bukannya melakukan dekripsi. Yang pertama kita lakukan adalah melakukan enkripsi dengan fungsi crypt() dan menyimpan nilai hasil enkripsi dalam variabel temppasswd. Dalam melakukan enkripsi, kita juga mendapatkan nilai salt dengan mengambil dua karakter pertama dari isi password sebenarnya yang tersimpan di dalam database shadow. Isi password yang sebenarnya tersebut tersimpan di dalam spentry->sp_pwdp. Fungsi strncpy() akan membantu kita dalam melakukan pengopian string. Setelah itu, kita akan memindahkan isi dari temppasswd kembali ke passwd sebelum akhirnya membebaskan variabel temppasswd tersebut.
strcpy(temppasswd,crypt(passwd, strncpy(salt,spentry->sp_pwdp,2))); strcpy(passwd,temppasswd); free(temppasswd);
char *username = (char *) malloc (sizeof(char *) * MAX_USERINFO); char *passwd = (char *) malloc (sizeof(char *) * MAX_USERINFO);
Dan akhirnya, permainan pun dimulai. Kita akan mencocokkan pasangan username dan password yang dimasukkan dengan pasangan username dan password sistem. Untuk itu, fungsi strcmp() akan digunakan. Apabila semua cocok, maka kita akan mengembalikan SUCCESS. Apabila terjadi kegagalan, maka ERROR_FAILED yang akan dikembalikan. if ((strcmp(spentry->sp_namp,uname) == 0) && (strcmp(spentry>sp_pwdp,passwd) == 0)) return SUCCESS; else return ERROR_FAILED;
gethostname(hostname, MAX_HOSTNAME);
4. Fungsi main() Ini adalah fungsi utama. Fungsi ini tidak menerima parameter. Fungsi akan mengembalikan SUCCESS apabila otentikasi berhasil dan ERROR_FAILED apabila otentikasi gagal. Berikut ini adalah source code fungsi: int main(void) { char *hostname = (char *) malloc (sizeof(char *) * MAX_HOSTNAME);
dengan membandingkan data hasil enkripsi. Untuk itulah, kita perlu melakukan enkripsi terlebih dahulu dan menyimpan hasilnya ke dalam variabel ini. Variabel salt akan berisikan dua karakter untuk membantu proses enkripsi. Sementara struct spentry dan pentry dimaksudkan untuk menyimpan informasi database shadow dan password. Setelah itu, kita perlu mengambil informasi database shadow. Untuk itu, kita perlu membukanya terlebih dahulu, dan kemudian menutupnya sesudah pembacaan selesai dilakukan. Blok kode berikut ini akan mengerjakannya: setspent(); spentry = getspnam(uname); endspent();
printf(“%s login: “, hostname); scanf(“%s”, username); strcpy(passwd,getpass(“password: “));
free(hostname); if (auth(username,passwd) == SUCCESS) { printf(“Uhh !! I’m tired :(\n\n”); sleep(2); }else { sleep(2); printf(“Login incorrect\n\n”); free(passwd); free(username); return ERROR_FAILED; }
Program mylogin
www.infolinux.web.id
INFOLINUX OKTOBER 2003
75
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Belajar Membuat Login Sendiri
free(passwd); free(username); return SUCCESS; }
Variabel hostname digunakan untuk menyimpan hostname komputer. Sementara variabel username digunakan untuk menampung informasi username yang dimasukkan oleh user. Terakhir, variabel passwd digunakan untuk menampung informasi password yang dimasukkan oleh user. Setelah itu, kita akan mendapatkan hostname dengan memanggil fungsi berikut ini: gethostname(hostname, MAX_HOSTNAME); Mendapatkan hostname dapat juga Anda lakukan sendiri, sebagai latihan dalam bekerja dengan file. Anda dapat membuka file /etc/ hostname dengan fungsi fopen() (atau mungkin akan lebih mudah dengan freopen()) dan membacanya dengan fscanf() atau scanf() saja, apabila freopen() digunakan. Setelah hostname didapatkan, kita akan mulai meminta informasi username kepada user. printf(“%s login: “, hostname); scanf(“%s”, username);
Pertama-tama yang kita lakukan adalah mengalokasikan memori untuk variabelvariabel tertentu. char *hostname = (char *) malloc (sizeof(char *) * MAX_HOSTNAME); char *username = (char *) malloc (sizeof(char *) * MAX_USERINFO); char *passwd = (char *) malloc (sizeof(char *) * MAX_USERINFO);
Otentikasi berhasil
Setelah itu, kita akan memanggil fungsi auth() dengan informasi username dan password yang telah kita dapatkan dari user. Apabila fungsi auth() mengembalikan SUCCESS, maka kita akan menampilkan pesan sukses dan kemudian menunda proses selama dua detik. Apabila fungsi auth() tidak mengembalikan SUCCESS, maka kita akan menunda proses selama dua detik, menampilkan pesan kesalahan dan keluar dari program. if (auth(username,passwd) == SUCCESS) { printf(“Uhh !! I’m tired :(\n\n”); sleep(2); }else { sleep(2); printf(“Login incorrect\n\n”);
Meminta password kemudian dilakukan dengan memanggil fungsi getpass(): strcpy(passwd,getpass(“password: “));
free(passwd); free(username); return ERROR_FAILED;
Fungsi getpass() akan membuka file / dev/tty, kemudian mencetak tulisan tertentu (dalam hal ini tulisan password: ), mematikan echo, membaca satu baris password, mengembalikan status terminal dan menutup /dev/tty kembali.
76
INFOLINUX OKTOBER 2003
Perintah tersebut akan menghasilkan binary mylogin dari mylogin.c. Selama kompilasi, kita akan menggunakan pustaka libcrypt.Anda dapat membuat Makefile sederhana untuk memudahkan proses kompilasi, instalasi dan uninstalasi. Dengan demikian, dalam melakukan kompilasi, Anda hanya perlu menggunakan program make, dan diikuti parameter yang Anda definisikan sendiri. 6. Source code selengkapnya #include <stdio.h> #include <string.h> #include #include #include <shadow.h> #include #define MAX_HOSTNAME 30 #define MAX_USERINFO 15 #define #define #define #define
SUCCESS 0 ERROR_FAILED 1 ERROR_GETSPNAM 2 ERROR_GETPWNAM 3
} 5. Cara kompilasi Berikan perintah berikut ini untuk melakukan kompilasi: gcc -o mylogin mylogin.c -lcrypt
www.infolinux.web.id
#define PROGNAME “mylogin” #define VERSION “0.1a” #define COPYRIGHT “(c) Noprianto, August 2003. GPL.”
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Belajar Membuat Login Sendiri
char *hostname = (char *) malloc (sizeof(char *) * MAX_HOSTNAME); char *username = (char *) malloc (sizeof(char *) * MAX_USERINFO); char *passwd = (char *) malloc (sizeof(char *) * MAX_USERINFO); gethostname(hostname, MAX_HOSTNAME); printf(“%s login: “, hostname); scanf(“%s”, username); strcpy(passwd,getpass(“password: “));
free(hostname);
Otentikasi gagal
/* Compilation: * gcc -o mylogin mylogin.c -lcrypt * * or using Makefile * */ /* This is function for doing simple authentication against * shadow password. We can’t handle md5sum password, so this function * is likely not working on these systems. * * For further information, please read the source of login(1), by * Julianne Frances Haugh */ int auth(char *uname, char *passwd) { char *temppasswd = (char *) malloc (sizeof (char *) * MAX_USERINFO); char salt[3]; struct spwd *spentry; struct passwd *pentry; setspent(); spentry = getspnam(uname); endspent(); pentry = getpwnam(uname);
if (! spentry) return ERROR_GETSPNAM; if (! pentry) return ERROR_GETPWNAM;
if (auth(username,passwd) == SUCCESS) { printf(“Uhh !! I’m tired :(\n\n”); sleep(2); }else { sleep(2); printf(“Login incorrect\n\n”);
strcpy(temppasswd,crypt(passwd, strncpy(salt,spentry->sp_pwdp,2))); strcpy(passwd,temppasswd); free(temppasswd);
free(passwd); free(username); return ERROR_FAILED;
if ((strcmp(spentry->sp_namp,uname) == 0) && (strcmp(spentry>sp_pwdp,passwd) == 0)) return SUCCESS; else return ERROR_FAILED;
} free(passwd); free(username); return SUCCESS; }
}
/* Main function. We do funny things here. Try to get the hostname using * existing function, then prompt for username and password. Evaluate * them, and then show up funny messages * */ int main(void) {
www.infolinux.web.id
Untuk selanjutnya, Anda dapat menggunakan program mylogin sebagai program login kecil-kecilan. Program ini mensimulasikan proses login lokal tradisional Linux. Yang jelas, program ini tidak ada apa-apanya apabila dibandingkan program login yang sesungguhnya. Anda pun tidak dapat menggantikan program login(1) dengan program yang baru kita buat ini. Namun, paling tidak, kita belajar sedikit tentang pemrograman Linux. Pelajari source code login(1) untuk lebih lanjutnya. Noprianto ([email protected])
INFOLINUX OKTOBER 2003
77
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Senjata Pemusnah Massal
Senjata Pemusnah Massal dengan shell script File-file dengan nama tertentu tersebar di filesystem Anda? Bosan menghapus satu per satu? Mari buat senjata pemusnah massal dengan shell script. Yang satu ini boleh Anda coba di rumah!
T
erkadang, kita begitu marah dengan kehadiran beberapa file dengan nama tertentu di harddisk kita. Kalau jumlah file tersebut hanya belasan, mungkin kita bisa menghapusnya satu per satu. Akan tetapi bagaimana kalau jumlahnya telah mencapai ratusan? Menggunakan program find kemudian menghapusnya secara massal? Terlalu riskan. Terkadang ada satu atau dua, atau belasan dari file-file tersebut yang ingin kita pertahankan. Membuka X Window dan mencari dengan pencari yang disediakan oleh desktop dan memboroskan memori sistem? Rasarasanya bukan pilihan yang baik. Solusinya? Gunakan shell script dan untuk menampilkan interface yang ramah, kombinasikanlah dengan program dialog. Sebutlah program ini sebagai xrm, yang disingkat dari x remove. Apa yang kita butuhkan adalah awalan dari nama file yang ingin dihapus. Malas memberikan awalan nama file di command line? Program xrm akan menampilkan satu inputbox yang ramah untuk Anda. Begitu awalan nama file didapatkan, maka xrm pun akan segera mulai mencari dari tempat yang telah ditentukan. Ketika file ditemukan, maka xrm pun akan menampilkan daftarnya. Untuk file yang ditemukan dan memiliki nama persis sama dengan awalan yang diberikan, maka, secara otomatis, akan dipilih dan siap untuk dihapus. Pilih sebagian atau keseluruhan file tersebut dan Anda akan menjumpai konfirmasi terakhir. Hapus atau tidak. Apabila Anda memilih hapus, maka xrm akan mencoba untuk menghapus file-file tersebut dan memberitahukan hasilnya. Apabila Anda memilih batal menghapus, maka senjata pemusnah masal kita kali ini tidak kita gunakan.
78
INFOLINUX OKTOBER 2003
Bicara soal senjata pemusnah massal, ada baiknya bagi kita untuk menentukan target latihan tempat peluru akan diluncurkan. Dan daerah musuh yang mungkin paling cocok adalah daerah /tmp, yang seringkali menjadi korban. Apabila tidak ada bug serius pada fungsi utama program yang ditemukan lagi, maka Anda bisa saja mengubah target menjadi daerah /. Yang satu ini harus dipastikan agar peluru tidak salah sasaran. Baiklah, kita akan segera memulai merakit senjata pemusnah massal ini dalam beberapa langkah. 1. Langkah pertama, mendaftarkan segala aspek legal dan hal-hal lainnya. Di langkah awal ini, kita mendefinisikan beberapa variabel yang berhubungan dengan xrm. Informasi hak cipta adalah salah satu diantaranya. Direktori percobaan (target latihan) juga kita tentukan di sini. PROGNAME=”xrm” VERSION=”0.1b” COPYRIGHT=”$PROGNAME $VERSION, (c) copyright Noprianto, July 2003. GPL” TEMP=/tmp/$$.xrm alias dialog=”dialog —backtitle \”$COPY RIGHT\”” BASE=/tmp/xrm/TEST 2. Mengisi bahan bakar yang diperlukan. Di langkah kedua ini, kita akan mendefinisikan beberapa fungsi penting yang akan membantu kita dalam membersihkan sistem dan pencarian itu sendiri. Kita memiliki dua fungsi, del() dan do_check() function del() { rm -rf $TEMP rm -rf /tmp/*.xrm }
www.infolinux.web.id
Fungsi ini berguna untuk menghapus berbagai file sementara yang dihasilkan pada saat program berjalan. function do_check() { del unset LISTS FILENAME=$1 tput reset tput cup 10 10 echo -n “please wait...” find $BASE -name “$FILENAME*” print 2>/dev/null 1>>$TEMP for i in ‘cat $TEMP‘ do flag=”off” test $(basename $i) = $FILENAME && flag=”on” LISTS=”$LISTS $i , $flag” done found=‘cat $TEMP | wc -l‘ del if [ $found -eq 0 ] then dialog —msgbox “File not found” 10 60 tput reset exit 1 fi tput reset dialog —no-cancel —checklist “$found files found” 20 60 12 $LISTS 2>$TEMP export RESULT=‘cat $TEMP‘ del
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
TUTORIAL
Inputbox untuk memasukkan kriteria pencarian
} Ini adalah fungsi yang terpenting. Hampir segalanya dikerjakan di sini. Pertama-tama, kita perlu untuk membersihkan file-file sementara dan mengosongkan daftar file yang ingin dihapus. Kedua baris berikut ini akan mengerjakannya: del unset LISTS Setelah itu, kita akan melakukan beberapa polesan kosmetika pada program untuk menampilkan informasi bahwa pencarian sedang dilakukan. Hal yang satu ini cukup penting karena pencarian dapat berlangsung dalam waktu yang relatif cukup lama, tergantung struktur direktori pencarian. Ketiga baris berikut ini akan melakukannya: tput reset tput cup 10 10 echo -n “please wait...” Kemudian, yang terpenting adalah segera mulai mencari dari lokasi yang telah ditentukan. Perintah find berikut ini akan mengerjakannya untuk Anda. Segala hasil pencarian akan kita simpan dalam file sementara. find $BASE -name “$FILENAME*” print 2>/dev/null 1>>$TEMP Kemudian, karena program dialog bersifat sedikit nyentrik dan memerlukan
Senjata Pemusnah Massal
Daftar hasil pencarian
parameter untuk opsi checklist, maka kita akan menyusun parameter tersebut. Bagi user, kita akan menyusun daftar file yang akan dihapus. Seperti yang telah disebutkan pada awal tulisan, secara otomatis kita akan membuat file-file yang bernama sama persis dengan kriteria pencarian dalam kondisi terpilih. File-file lain yang ditemukan akan berada dalam kondisi tidak terpilih. Blok kode berikut ini akan mengerjakannya: for i in ‘cat $TEMP‘ do flag=”off” test $(basename $i) = $FILENAME && flag=”on” LISTS=”$LISTS $i , $flag” done Kemudian, tak lupa kita akan memeriksa apakah pencarian kita menemukan file yang cocok. Apabila pencarian mendapatkan hasil, tentunya tidak akan ada masalah. Namun, apabila pencarian gagal, maka kita perlu memberitahukan kepada user. Blok kode berikut ini akan melakukannya: found=‘cat $TEMP | wc -l‘ del if [ $found -eq 0 ] then dialog —msgbox “File not found” 10 60 tput reset exit 1 fi
www.infolinux.web.id
Bersihkan layar dan tampilkan daftar file yang kita temukan. Setelah itu, simpanlah daftar file-file yang dipilih oleh user. Dan jangan lupa membersihkan file-file sementara yang dihasilkan oleh fungsi ini. tput reset dialog —no-cancel —checklist “$found files found” 20 60 12 $LISTS 2>$TEMP export RESULT=‘cat $TEMP‘ del 3. Inti senjata pemusnah Kita kita sampai pada fungsi utama dari program xrm. Berikut ini adalah source code-nya: if [ $# -ne 1 ] then dialog —inputbox filename 10 40 2>$TEMP FILENAME=‘cat $TEMP‘ del else FILENAME=$1 fi if [ ! -z $FILENAME ] then do_check $FILENAME dialog —yesno “sure to delete these files?” 10 40 if [ $? -eq 0 ] then tput reset tput cup 10 10
INFOLINUX OKTOBER 2003
79
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Konfirmasi penghapusan file
echo “please wait ...” echo $RESULT | xargs rm -rf 1>/dev/null 2>&1 if [ $? -eq 0 ] then dialog —msgbox “Unlink succeded” 10 40 else dialog —msgbox “Unlink failed” 10 40 fi fi fi tput reset del Pertama-tama, kita perlu memeriksa apakah program dijalankan dengan parameter atau tidak. Apabila parameter pertama ditemukan, maka kita mengasumsikan parameter tersebut adalah kriteria pencarian. Apabila program dijalankan tanpa parameter, maka sebuah input box akan ditampilkan untuk user. if [ $# -ne 1 ] then dialog —inputbox filename 10 40 2>$TEMP FILENAME=‘cat $TEMP‘ del else FILENAME=$1 fi Ada kalanya user tidak memasukkan kriteria pencarian walaupun input box telah
80
INFOLINUX OKTOBER 2003
Senjata Pemusnah Massal
Hasil penghapusan file
tersedia. Kita perlu memeriksa kondisi yang satu ini dan hanya akan melanjutkan apabila kriteria pencarian diberikan oleh user. Setelah itu, kita akan memanggil fungsi do_check() dan menyertakan kriteria pencarian kepadanya. Fungsi tersebut akan mengembalikan daftar file yang dipilih oleh user dan siap dihapus. Kita akan menampilkan konfirmasi kepada user sebelum penghapusan dilaksanakan. Apabila user memilih untuk batal, maka program pun akan keluar. Apabila user memilih tetap akan menghapus file-file tersebut, maka sekali lagi kita akan menampilkan pesan kepada user untuk menunggu sejenak, tergantung pada lamanya proses penghapusan. Pada akhirnya, kita akan memeriksa apakah file-file tersebut berhasil dihapus. Apapun hasilnya akan kita sampaikan kembali kepada user. dialog —yesno “sure to delete these files?” 10 40 if [ $? -eq 0 ] then tput reset tput cup 10 10 echo “please wait ...” echo $RESULT | xargs rm -rf 1>/dev/null 2>&1 if [ $? -eq 0 ] then dialog —msgbox “Unlink succeded” 10 40 else dialog —msgbox
www.infolinux.web.id
“Unlink failed” 10 40 fi fi 4. Source code selengkapnya #!/bin/sh PROGNAME=”xrm” VERSION=”0.1b” COPYRIGHT=”$PROGNAME $VERSION, (c) copyright Noprianto, July 2003. GPL” TEMP=/tmp/$$.xrm alias dialog=”dialog —backtitle \”$COPY RIGHT\”” BASE=/tmp/xrm/TEST
function del() { rm -rf $TEMP rm -rf /tmp/*.xrm }
function do_check() { del unset LISTS FILENAME=$1 tput reset tput cup 10 10 echo -n “please wait...” find $BASE -name “$FILENAME*” print 2>/dev/null 1>>$TEMP
TUTORIAL
Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial
Senjata Pemusnah Massal
for i in ‘cat $TEMP‘ do flag=”off” test $(basename $i) = $FILENAME && flag=”on” LISTS=”$LISTS $i , $flag” done found=‘cat $TEMP | wc -l‘ del if [ $found -eq 0 ] then dialog —msgbox “File not found” 10 60 tput reset exit 1 fi tput reset dialog —no-cancel —checklist “$found files found” 20 60 12 $LISTS 2>$TEMP export RESULT=‘cat $TEMP‘ del
} if [ $# -ne 1 ] then dialog —inputbox filename 10 40 2>$TEMP FILENAME=‘cat $TEMP‘ del else FILENAME=$1 fi if [ ! -z $FILENAME ] then do_check $FILENAME dialog —yesno “sure to delete these files?” 10 40 if [ $? -eq 0 ] then tput reset tput cup 10 10 echo “please wait ...” echo $RESULT | xargs rm -rf
1>/dev/null 2>&1 if [ $? -eq 0 ] then dialog —msgbox “Unlink succeded” 10 40 else dialog —msgbox “Unlink failed” 10 40 fi fi fi tput reset del Demikianlah senjata pemusnah masal kita kali ini. Masih banyak kekurangan pada senjata kita kali ini walaupun sepertinya salah sasaran tidak akan terjadi. Kembangkan terus kekuatan amunisi dan kecepatan gerak senjata tersebut. Dan jangan lupa, gunakanlah senjata tersebut untuk menjaga perdamaian dunia. Salam damai. Noprianto ([email protected])
Margonda Raya No. 522 Kober, Depok, Tel./Fax. 021-7874223, 7874224 Mampang Prapatan X No. 4, Jakarta Selatan, Tel. 021-7975235, 7947115 Beringin Raya No. 14A, Perumnas I, Tangerang, Tel. 021-5589884 Graha Sucofindo, Jl. Jend. A. Yani No. 106, Cilegon, Tel. 0254-374345, 374456 INFOLINUX OKTOBER 2003 81 www.infolinux.web.id Sentra Niaga Blok BI-12, Jl. Jend. A. Yani, samping Hero, Bekasi, Tel./Fax. 021-8853537 http://www.nurulfikri.com email: [email protected]