Penggunaan fungsi SETSID pada PHP

# 1 - Paket tidak ada?

Anda mungkin melewatkan paket yang berisi ssh-askpass. Coba pasang.

Fedora / CentOS / RHEL:

$ sudo yum install openssh-askpass

Debian / Ubuntu:

$ sudo apt-get install ssh-askpass-gnome ssh-askpass

Menemukan utilitas yang hilang

Anda dapat mencari alat yang hilang menggunakan perintah ini:

Fedora / CentOS / RHEL:

$ yum search ssh-askpass
Loaded plugins: langpacks, presto, refresh-packagekit
Adding en_US to language list
======================================================= Matched: ssh-askpass =======================================================
x11-ssh-askpass.x86_64 : A passphrase dialog for X and not only for OpenSSH
ksshaskpass.x86_64 : A KDE version of ssh-askpass with KWallet support
connect-proxy.x86_64 : SSH Proxy command helper
openssh-askpass.x86_64 : A passphrase dialog for OpenSSH and X

Debian / Ubuntu:

$ apt-file -l search ssh-askpass
app-install-data
cruft
git-cola
luckybackup-data
pssh
sdm-terminal
seahorse
ssh-askpass
ssh-askpass-fullscreen
ssh-askpass-gnome

# 2 - Terminal terputus?

Saya awalnya merindukan ini tetapi setelah membaca lebih lanjut saya melihat komentar ini di halaman sshmanual mengenai SSH_ASKPASSvariabel lingkungan.

kutipan

SSH_ASKPASS    If ssh needs a passphrase, it will read the passphrase from the 
               current terminal if it was run from a terminal.  If ssh does not
               have a terminal associated with it but DISPLAY and SSH_ASKPASS 
               are set, it will execute the program specified by SSH_ASKPASS 
               and open an X11 window to read the passphrase. This is particularly
               useful when calling ssh from a .xsession or related script.  
               [Note that on some machines it may be necessary to redirect the 
               input from /dev/null to make this work.]

Jika Anda perhatikan di komentar, itu menyatakan bahwa ssh "tidak memiliki terminal yang terkait" DAN DISPLAY & SSH_ASKPASSdiatur. Memperhatikan ini adalah kuncinya. Jadi untuk bisa sshmenggunakan SSH_ASKPASSkita harus sshtidak memiliki terminal [alias. STDIN& STDOUT] Yang melekat padanya.

Salah satu cara untuk melakukan ini dengan memanfaatkan perintah setsid. Jangan merasa buruk. Saya juga tidak pernah mendengar alat ini. Dari halaman manual:

setsid - jalankan program dalam sesi baru

Jadi jika kita menjalankan sshsebagai "program" untuk setsidkita dapat melepaskan sshdari terminal kita memenuhi kriteria yang disebutkan dalam sshhalaman manual. Kriteria lainnya ditetapkan sebagai berikut:

$ echo $DISPLAY; echo $SSH_ASKPASS
:0.0
/usr/libexec/openssh/ssh-askpass

Jadi jika kita menyatukan ini semua:

$ setsid ssh [email protected]

Sebagai contoh:

$ setsid ssh [email protected]

                                       

Sebuah solusi

Jika Anda ingin membuatnya jadi setsid"bawaan" Anda dapat membuat alias seperti:

$ alias ssh="setsid ssh"

Sekarang ketika Anda, sshAnda akan mendapatkan GUI muncul meminta kata sandi Anda:

$ ssh [email protected]

Referensi

  • membaca kata sandi SSH dari stdin - cara yang kompatibel dengan openssh 5.6p1

GTK”, “Linux” => “LINUX”, “GNU” => “GNU”, “Infolinux” => “INFOLINUX”, ]; ?>

Anda bisa menambahkan kata sendiri dengan mengikuti aturan array PHP. Kita menggunakan array untuk mempermudah data processing. Mungkin bagi Anda yang terbiasa dengan memisahkan kata [split], akan terasa lebih nyaman apabila menggunakan file teks [misal PHP=//www. php.net]. Pendekatan dengan XML-based

Contoh output 3.php.

64

INFOLINUX 12/2004

File 4.txt – File data berisikan teks asli: Infolinux adalah majalah bulanan Linux yang membahas berbagai hal. Mulai dari sistem operasi itu sendiri, administrasinya serta berbagai pembahasan pemrograman. Contoh pembahasan pemrograman mencakup php, python, GTK dan lain sebagainya. Berbagai free software dari proyek gnu tentunya juga dibahas.

Penjelasan kode:  Mula-mula, kita menginclude rep.php.  Kemudian, kita membuka file 4.txt.  Setelah itu, dalam perulangan sampai habis membaca 4.txt, kita membaca baris demi baris.  Untuk setiap baris yang kita dapatkan, kita akan membaca setiap entri dari array $REP dan melakukan pergantian teks. Pergantian dilakukan per kata.  Kita mencetak hasilnya ke browser. Agar sama dengan file aslinya, kita menggunakan bantuan fungsi nl2br[]. Fungsi ini akan mengganti new line dengan
.

File 4.php – Prosesor: $v] { $temp = eregi_replace[“[[::]]”, $v, $temp]; } echo nl2br[$temp]; } ?>

Contoh output 4.php.

www.infolinux.web.id

Demikianlah contoh penggantian teks secara lengkap. Sumber data tidak harus selalu dari file teks. Anda juga bisa mempergunakan database postgresql misalnya. Program ini tentu saja memiliki kekurangan. Masalah utama adalah penggantian teks yang sangat serakah. Anda bisa bayangkan kalau entri $REP telah menjadi begitu panjang? Untuk mengganti satu baris teks [kalaupun ada yang perlu diganti dan ini adalah salah satu kelemahan yang serius. ], pencarian ke dalam keseluruhan $REP akan dilakukan. Pencarian ini akan memakan waktu. Regular expression bukanlah hal yang sepele dan sangat membutuhkan resource yang cukup besar. Solusi lain adalah dengan memecah $REP. Anda bisa menggunakan cara lain yang lebih efisien dalam mengganti teks, apabila Anda ingin membuatnya sendiri. Noprianto [[email protected]]

TUTORIAL

Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial

Secure Shell dan OpenSSH

Secure Shell dan OpenSSH Dalam bekerja di jaringan, tindakan jaga-jaga harus selalu dilakukan. Keamanan adalah hal yang harus selalu diperhatikan. Salah satu contohnya adalah penggunaan SSH dan toolnya, ketika Anda harus bekerja meremote suatu host.

S

alah satu keunggulan sistem operasi UNIX adalah praktisnya penggunaan, terutama ketika bekerja dengan jaringan. Untuk bekerja pada suatu mesin, kita tidak harus langsung mendatangi mesin tersebut, melainkan cukup melakukan akses remote ke mesin tersebut. Akses remote itu mengandalkan aplikasi seperti telnet dan aplikasi berbasis teks. Dengan demikian, tidak memerlukan GUI seperti yang sering ditemukan dalam remote desktop saat ini. Remote desktop terlalu besar, dan tidak dapat digunakan untuk meremote mesin yang tidak menyalakan X, seperti server. Dengan melakukan akses remote ke server menggunakan aplikasi seperti telnet misalnya, kita melakukan authentikasi ke mesin, dan setelah itu, kita akan memiliki akses ke shell mesin tersebut. Dengan demikian, kita dapat mempergunakan tooltool mesin tersebut untuk melakukan apa yang kita inginkan. Setelah semuanya selesai, kita melakukan logout dan kembali ke mesin kita. Bertahun-tahun yang lalu, telnet adalah aplikasi yang sangat populer untuk keperluan akses remote tersebut. Mesin yang akan di-remote menjalankan daemon telnet dan mesin yang akan me-remote cukup memanggil aplikasi client telnet. Salah satu kelemahan terbesar telnet adalah mentransmisikan segalanya dalam modus clear text. Hal ini jelas-jelas memiliki kelemahan. Kita bisa buktikan dengan berbagai program seperti sniffit dan ethereal. Berikut ini adalah contoh bahwa password yang dilewatkan melalui telnet dalam ditangkap dengan mudah. Jalankan telnet server dan lakukan koneksi ke server. Sebagai root, jalankan pula ethereal dan pastikan ethereal mendengar pada network device yang benar. Setelah ethereal siap menangkap paket, loginlah melalui telnet dan berikanlah perintah ls. Setelah itu,

logoutlah. Telnet server sudah bisa dimatikan sekarang. Kembalilah ke ethereal dan hentikanlah penangkapan paket. Lihatlah hasil penangkapan kita dengan memilih salah satu frame paket yang tertangkap dan klik kanan memilih menu Follow TCP Stream. Di sebuah dialog yang tampil, kita bisa melihat segala apa yang diketikkan selama sesi telnet, termasuk username dan password. Anda juga bisa mempergunakan aplikasi lain seperti tcpdump dan sniffit untuk menangkap paket yang dikirimkan lewat jaringan. Kita telah melihat bagaimana telnet ditangkap dengan mudah. Anda bisa mencoba cara serupa, namun komunikasi dilakukan lewat ssh. Ethereal hanya menangkap paket terenkripsi dan informasi penting, termasuk password tidak akan terbaca. Hal ini sangatlah penting. Informasi yang ditangkap mungkin tidak hanya password. Bisa saja informasi lain yang lebih penting.

Secure Shell dan OPenSSH Usaha untuk enkripsi data selama pengiriman telah diperhatikan oleh para ahli jaringan. Pada tahun 1992/1993 misalnya, sebuah usaha untuk mempergunakan secure shell telah diwujudkan dalam proyek SSH. Sama seperti halnya telnet, Secure shell adalah program yang digunakan untuk memasuki suatu komputer dalam jaringan dan menjalankan program di mesin lain. Namun, SSH memiliki beberapa kelebihan yaitu juga dapat mengopi file suatu host ke host lain secara aman [terenkrip]. SSH adalah pengganti yang jauh lebih baik dari telnet, rlogin, rsh, rcp dan sftp. Sebagai tambahan, Secure shell juga dapat digunakan untuk membuat koneksi X lebih aman, dan secara umum, dapat dimanfaatkan untuk meningkatkan keamanan jaringan secara umum. Karena dapat

www.infolinux.web.id

melakukan transfer file, Secure shell juga dapat digunakan sebagai pengganti rsync. Secara umum, berikut ini adalah apa yang dapat secure shell lindungi:  IP spoofing, dimana suatu host mengirim paket dan berpura-pura sebagai host yang dipercaya [trusted host]. Dengan host authentication, Secure shell dapat mencegah atau meminimasi terjadinya kejahatan ini.  IP Source routing  DNS Spoofing  Penangkapan password yang dikirim dalam clear text  Serangan pada koneksi X. Kerugian penggunaan Secure shell adalah lebih lambat daripada telnet karena harus dienkrip terlebih dahulu. Enkripsi membutuhkan kerja CPU dan memori yang besar. Namun, SSH2 telah menyempurnakan banyak hal sehingga boleh dikatakan, perbedaannya kini sangatlah kecil. Seiring dengan berjalannya waktu, proyek SSH yang standarnya [Secsh] disubmit ke IETF tersebut memiliki banyak implementasi. Proyek yang awalnya bebas mulai terikat. Beberapa pihak juga membangun implementasi Secsh sendiri. Jadilah kita mengenal berbagai macam implementasi ssh. Salah satu yang paling populer adalah OpenSSH. OpenSSH adalah implementasi bebas dari standar secure shell. Penggunaan algoritma yang dipatenkan juga dihindari. Kini, OpenSSH adalah proyek secure shell yang terdapat dalam hampir semua distribusi Linux [dan secara default, umumnya juga telah diaktifkan]. OpenSSH mendukung protokol 1.3, 1.5 dan 2.0. OpenSSH juga mendukung kompresi data [sangat berguna bagi yang melakukan remote connection melalui modem].

INFOLINUX 12/2004

65

TUTORIAL

Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial

Secure Shell dan OpenSSH

Protokol Secure Shell Setelah melewati perjalanan yang panjang, kita mengetahui terdapatnya dua protokol mayor SSH. Yaitu protokol versi 1 dan versi 2. Kedua protokol tersebut sama-sama melakukan pengiriman data secara aman, hanya algoritma dan enkripsi yang digunakan berbeda. Kedua protokol tersebut berbeda, dan tidak kompatibel. Umumnya, yang digunakan pada distro Linux modern adalah protokol versi 2. Berikut ini, kita akan melihat perbedaan algoritma enkripsi yang dipergunakan pada protokol secure shell 1 dan 2.

Cipher

SSH1

SSH2

DES 3DES IDEA Blowfish Twofish Arcfour Cast128-cbc

Ya Ya Ya Ya Tidak Tidak Tidak

Tidak Ya Tidak Ya Ya Ya Ya

Sementara, untuk authentikasi, SSH 1 mempergunakan RSA dan SSH 2 mempergunakan DSA. Satu catatan yang perlu diperhatikan sehubungan dengan implementasi OpenSSH yang bebas adalah tidak tersedianya kode-kode yang dipatenkan. Para developer OpenSSH berusaha untuk menjaga OpenSSH bebas dari kode-kode paten. Oleh karena itu, beberapa algoritma terpaksa tidak dimasukkan ke dalam OpenSSH. Pada SSH1, OpenSSH hanya mendukung 3DES dan Blowfish. Pada SSH2, hanya

Menangkap paket dengan Ethereal.

66

INFOLINUX 12/2004

3DES, Blowfish, Cast128, Arcfour, dan AES yang didukung. IDEA tidak didukung karena merupakan algoritma yang dipatenkan. Sementara, RSA, karena patennya telah berakhir, maka tidak ada larangan untuk digunakan. Lebih lanjut tentang protokol. SSH1 datang dalam dua varian, 1.3 dan 1.5. Keduanya menggunakan algoritma kriptografi asimetris RSA untuk key negotiation, dan mempergunakan algoritma kriptografi simetris untuk penyembunyian data yaitu 3DES dan Blowfish. Protokol SSH1 mempergunakan pengecekan CRC yang sederhana untuk memeriksa integritas data. SSH2 ditulis untuk menghindari paten RSA [telah berakhir] dan menyempurnakan pemeriksaan integritas data, disamping berbagai alasan teknis lain. Penggunaan DSA dan DH digunakan untuk menghindari paten. Dan, sebagai penyempurnaan pemeriksaan berbasis CRC, algoritma HMAC digunakan untuk penyembunyian informasi. Untuk penggunaan banyak algoritma kriptografi, OpenSSH mengandalkan OpenSSL.







   

Tool-tool OpenSSH OpenSSH datang dengan berbagai tool, sebagai berikut:  sshd [8]. Program ini adalah server secure shell. SSHD akan mendengar koneksi dari client, melakukan authentikasi, dan melayani permintaan lain-lain client. Kita hanya perlu menjalankan satu server untuk menikmati koneksi secara aman. Konfigurasinya [terletak di

Paket yang tertangkap.

www.infolinux.web.id





/etc/ssh/sshd_config] juga mudah sekali untuk dimengerti. Ssh [1]. Program ini adalah client OpenSSH. Gunakan program ini seperti halnya telnet. Program ini juga memiliki nama lain, yaitu slogin. File konfigurasi program ini terletak pada /etc/ssh/ssh_ config ataupun ~/.ssh/config. Scp [1]. Program ini adalah pengopi file [pengganti rcp] yang dapat mengopikan file dari satu host ke host lain secara aman. Pengopian tidak harus dari host yang digunakan ke host lain. Bisa juga dari host lain ke host lainnya. Misal, kita berada di host A, kita dapat mengopikan file dari host B ke host C, tanpa masalah. Ssh-keygen [1]. Program ini dapat digunakan untuk membuat key bagi suatu host. Key yang dibuat berdasarkan algoritma RSA ataupun DSA [tergantung protokol]. Ssh-agent [1]. Authentication agent. Ssh-add [1]. Program ini dapat digunakan untuk meregister key baru ke agent. Sftp-server [8]. Program ini berfungsi sebagai ftp server yang aman. Sfp [1]. Program ini adalah client ftp yang aman. Ssh-keyscan [1]. Program ini berguna untuk mendapatkan / scan berbagai public key. Ssh-keysign [8]. Berguna sebagai pembantu untuk hostbased authentication [SSH protokol 2].

Tool-tool tersebut mudah sekali untuk digunakan. Sshd misalnya. Umumnya, kita

TUTORIAL

Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial

Secure Shell dan OpenSSH

Clear Text password dapat dilihat dengan mudah.

tidak perlu menjalankan server ssh ini secara manual karena sudah dimasukkan sebagai servis ketika booting. Hampir semua distro telah melakukannya. Dengan demikian, untuk menjalankan sshd, umumnya Anda cukup memberikan perintah: /etc/init.d/sshd restart

atau, pada SUSE, lebih umum ditemukan: rcsshd restart

Sementara, penggunaan ssh sendiri, sebagai ssh client, juga benar-benar mudah. Anda hanya perlu memberikan perintah seperti berikut ini: ssh [email protected]

Sebagai contoh: ssh [email protected]

Apabila suatu host belum dikenal, maka ssh akan memberikan pesan kepada kita. Pesan tersebut juga berfungsi sebagai konfirmasi untuk memasukkan suatu host sebagai host yang dikenal. SSH benar-benar memperhatikan aspek keamanan di sini. Sebagai contoh, katakanlah Anda memiliki sebuah server dengan IP 192.168.0.1. Workstation Anda, yang memiliki IP 192.168.0.50 misalnya, telah menganggap server tersebut sebagai host yang telah dikenal. Suatu hari, Anda menginstall ulang server 192.168.0.1 tersebut. Ketika Anda melakukan koneksi ssh lagi dari 192.168.0.50, Anda mendapatkan pesan bahwa host tujuan mungkin telah dicompromise, seperti berikut ini:

Penggunaan SSH, lebih aman!

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now [man-in-themiddle attack]! It is also possible that the RSA host key has just been changed. The fingerprint for the RSA key sent by the remote host is b1:00:2b:eb:52:ce:62:4b:fb:20: af:94:bd:d5:f9:19. Please contact your system administrator. Add correct host key in /root/. ssh/known_hosts to get rid of this message. Offending key in /root/.ssh/ known_hosts:1 RSA host key for 192.168.0.1 has changed and you have requested strict checking. Host key verification failed.

Sebenarnya, ini hanyalah tindakan jagajaga dari SSH. Informasi host telah berubah. Cara mudahnya adalah dengan menghapus entri IP server tersebut di file ~/.ssh/known_ hosts. Setelah itu, lakukanlah koneksi kembali. Cara ini bukan cara satu-satunya, namun bekerja. Program pengopi file, scp, juga mudah

www.infolinux.web.id

sekali digunakan. Cukup berikan saja perintah dengan pola berikut ini: scp

misal: scp file1 [email protected]:~

Perintah ini akan mengopikan file1 ke home directory nop di 192.168.0.1. scp [email protected]:~/file1 .

Perintah ini akan mengopikan file1 di home directory nop di 192.168.0.1 ke direktori aktif. Scp [email protected]:~/file1 [email protected]:~/

Perintah ini akan mengopikan file1 di home directory nop di 192.168.0.1 ke home directory nop di 192.168.0.50. Program ftp client yang secure, sftp, bisa Anda gunakan sama seperti layaknya Anda menggunakan ftp biasa.

PuTTY: Front End dan SSH client di Windows dan Linux PuTTY tersedia untuk Windows dan Linux. Namun, di untuk Linux, GNOME terminal atau Konsole sudah sangat mencukupi. Dapatkan PuTTY di //www. chiark.greenend.org.uk/~sgtatham/putty/. Kita telah membahas beberapa aspek dari SSH, OpenSSH dan pengunanya. Mulai sekarang, lakukanlah selalu tindakan berjaga-jaga. Bukankah mencegah lebih baik dari mengobati?. Noprianto [[email protected]]

INFOLINUX 12/2004

67

TUTORIAL

Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial

XML

Mengenal XML XML adalah teknologi universal untuk membawa dan mengirim data. XML bekerja menembus batas software dan hardware. Dengan memahami XML, kita dapat membangun sistem yang lebih universal.

B

eberapa tahun yang lalu, saat penulis bekerja sebagai staf laboratorium software di sekolah, penulis mengenal seorang senior yang luar biasa unik. Beliau sangat mendalami algoritma dan sangat mampu mewujudkannya dengan bahasa C. Scripting Perl juga dikuasai dengan luar biasa. Begitupun dengan Linux. Setiap ada permasalahan dengan Linux, penulis hampir selalu menanyakan kepada beliau. Beliau jarang sekali membeli buku yang umum ditemukan di pasaran Indonesia. Suatu hari, kami bertemu di salah satu ruangan lab, dan beliau membawa satu buku baru [yang kalau tidak salah dibeli di Mangga Dua] berjudul Mastering XML. Saat ini, penulis sesekali mendengar tentang XML dan tidak memiliki gambaran bagaimana XML akan mendorong perkembangan teknlogi komputer di masa depan. Saat itu, penulis berpikiran bahwa XML mungkin adalah pengembangan lebih lanjut dari HTML dan, suatu hari akan menggantikan HTML dalam pembuatan halaman web. Karena kurang begitu tertarik akan web, maka penulis tidak peduli sama sekali akan XML, yang menurut penulis secara teknis mungkin HTML versi 5 yang namanya diubah. Suatu pemikiran yang rupanya salah. Setelah lebih dalam berkenalan dengan dunia Linux dan open source, konsep penulis akan XML betul-betul menjadi berantakan. Bagaimana mungkin, sebuah teknologi pembuatan halaman web ditemukan pada paket-paket program seperti GNOME? Apakah mereka juga membangun website atau file-file XML tersebut adalah dokumentasi dalam halaman web? Waktu berlalu dan seiring dengan kesibukan, XML pun terlupakan. Setelah bertemu dengan Ariya Hidayat [[email protected]] yang sangat senang mempromosikan KDE, penulis pun sekali lagi berkenalan dengan XML. Kali ini karena ketika mempelajari

68

INFOLINUX 12/2004

KDE dan menemukan banyak sekali file XML di dalamnya. Kali ini, XML sepertinya harus dipelajari. Karena, ketika membuka salah satu file XML tersebut, yang terbaca bukanlah semacam dokumentasi. Melainkan lebih semacam file konfigurasi. Dengar sana dengar sini, penulis mengetahui bahwa XML digunakan untuk menyimpan dan mendeskripsikan data. Masalahnya. Kenapa konfigurasi harus XML untuk sebuah file konfigurasi? Bukankah format berikut ini jauh lebih readable? VARIABEL=NILAI

atau VARIABEL:NILAI

Sejak itu, apalagi setelah berkenalan dengan seseorang rekan penulis, yang sangat mengagumi XML [baru pertama melihat penggemar XML seperti ini], penulis akhirnya menyadari bahwa XML adalah sesuatu yang luar biasa. Setiap developer, baik yang bekerja dengan sekedar file konfigurasi, konten, membangun format file, ataupun yang berhubungan dengan transmisi data, sangat dianjurkan bekerja dengan XML.

Apakah XML itu? XML adalah sebuah teknologi cross platform, dan merupakan tool untuk melakukan transmisi informasi. XML bukanlah program, atau pustaka. XML adalah sebuah teknologi, sebuah standar dengan berbagai aturan tertentu. Dalam pengertian yang sederhana, sebuah dokumen XML hanyalah sebuah file teks biasa yang berisikan berbagai tag yang didefinisikan sendiri oleh pembuat dokumen XML tersebut. Sesuai dengan namanya, eXtensible Markup Language, sebuah dokumen XML adalah sebuah dokumen dengan markup, sama seperti halnya dengan HTML.

www.infolinux.web.id

Namun, XML tidak didesain untuk menggantikan HTML. XML lebih dirancang untuk mendeskripsikan data dan memfokuskan diri pada data tersebut. Sementara, HTML didesain untuk menampilkan data dan memfokuskan diri pada bagaimana data ditampilkan. Secara desain, hal ini sudah jauh berbeda. Dengan demikian, XML bukanlah pengganti HTML karena memang dirancang berbeda. Hubungan antara XML dan HTML lebih ke arah pelengkap. Anda dapat menyimpan data dalam sebuah dokumen XML dan mempergunakan HTML untuk menampilkan data tersebut. Dokumen XML juga terdiri dari berbagai tag. Hanya, bedanya, tag-tag tersebut tidak memiliki standar khusus. Berbeda dengan tag pada HTML yang berarti pemformatan teks tebal. Kita, sebagai pembuat dokumen lah yang harus menentukan tag dan artinya. Untuk menjaga agar tag-tag tersebut tetap berada di dalam lingkup jalan yang benar, maka keseluruhan aturan tag kita disimpan di dalam Document Type Definition [DTD] atau XML Schema. Dengan adanya aturan tersimpan di DTD atau XML Schema, maka sebuah dokumen XML diharapkan akan mampu mendeskripsikan diri sendiri [self descriptive]. Boleh disamakan dengan tag HTML yang telah memiliki standar. Walaupun, pada XML, artinya akan lebih luas lagi. Berikut ini adalah sebuah dokumen XML sederhana [1.xml]: LinuxSUSE9.1SUSE LINUX AG

Bisa kita lihat, sebenarnya 1.xml tersebut hanyalah sebuah file yang tidak berarti banyak. Tag-tag yang kita gunakan,

,

TUTORIAL

Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial

XML

, dan juga tag yang digunakan oleh kita dengan maksud adalah sistem operasi, adalah nama distro dan adalah vendor distro tersebut. Semuanya menerangkan distro. Sebuah file XML tidak dapat berbuat apaapa. File 1.xml di sini dibuat untuk membuat struktur data, menyimpan data dan mengandung nilai informasi. Struktur data diawali dengan menentukan tag-tag apa saja dan bagaimana aturannya. File tersebut juga menyimpan data distro Linux dan memiliki nilai informasi di dalamnya. Bagaimanakah file XML tersebut bisa berguna? Ketika terdapat aplikasi yang dapat memproses data tersebut untuk tujuan tertentu, untuk ditampilkan misalnya. Bayangkanlah sebuah tampilan yang informasinya diambil dari file XML tersebut:

Nama Distro OS

Versi

Vendor

SUSE

9.1

SUSE LINUX AG

Linux

Dengan menyimpan informasi tersebut dalam file XML, informasi dapat sampai ke siapa saja, dengan perantaraan apapun juga. Artinya, selama sistem tujuan bisa memproses XML tersebut, maka informasinya juga akan sampai kepada sistem tujuan. Saat ini, untuk memroses tag-tag XML tersebut, tentu saja kita tidak perlu melakukannya sendiri secara manual. Terdapat banyak parser untuk melakukannya. Algoritma yang digunakan juga berbeda-beda. Bayangkan jika Anda harus membaca satu per satu karakter dengan bahasa C, menentukan yang mana tag dan yang kapan tag

Conglomerate XML Editor.

tersebut ditutup dan menyimpannya ke dalam variabel. Tidak, tidak perlu. Sebenarnya, itulah yang sempat penulis pikirkan ketika mengetahui XML dapat digunakan sebagai file konfigurasi. Penulis berpikir, tentunya akan repot sekali memparsing file konfigurasi tersebut. Seperti pada awal tulisan, bukanlah dengan mudah dengan format VARIABEL=NILAI? Setiap bahasa pemrograman umumnya telah melengkapi dirinya dengan kemampuan bekerja dengan XML. Perl, Python, Java, C dan apa saja. Kita akan melihat contoh penerapan XML sebelum kita melanjutkan lebih dalam tentang XML. Contoh penerapan XML di open source XML sendiri adalah teknologi bebas dan dapat dikembangkan. Sangat sesuai dengan dunia open source. Namun, nilai praktisnya telah digunakan di mana-mana. Kita akan melihat contoh-contoh penerapan XML di dunia open source. XML digunakan sebagai file konfigurasi. Coba saja amati file konfigurasi salah satu proyek open source yang paling Anda rasa populer. Berani bertaruh, file konfigurasi tersebut disimpan sebagai dokumen XML. Dengan demikian, pengambilan variabel dan nilai dapat dilakukan dengan cara yang praktis, apalagi jika aturan dan tagnya terdefinisi dengan baik. Apabila kita menulis file konfigurasi dengan cara masing-masing, bisa Anda bayangkan beberapa bentuk berikut: VARIABEL=NILAI

VARIABEL:NILAI [VARIABEL] NILAI VARIABEL NILAI

Cara apapun yang kita inginkan, bisa saja. Tidak ada yang akan melarang. Namun, bayangkan jika Anda menggunakan yang bagus bagi Anda, namun aneh bagi yang lain. Tentu saja, pengembang aplikasi lain harus mencari tahu bagaimana memparsing konfigurasi Anda. Belum lagi jika ada aplikasi lain yang ingin ikut memparsing pula. Semua kondisi tersebut akan berujung pada banyak parsing untuk banyak aturan file konfigurasi. Tidak ada yang universal. Dengan XML, semuanya menjadi universal. Bayangkan jika ditulis dalam format XML berikut:

nilai

Hanya ada satu sistem yang diperlukan untuk memparsing konfigurasi tersebut. Yaitu, XML. Penerapan kedua adalah untuk membangun user interface. Sudah bukan zamannya lagi untuk membekukan komponen control program ke dalam programnya itu sendiri. Tidak akan ada gunanya membangun aplikasi yang menu dan menu itemnya ditulis mati dalam program utama. Cepat, pintas, namun tidak ekstensibel. Pernahkan Anda memperhatikan Kpart KDE? Penulis memberikan penghargaan

Mengedit XML dengan KxmlEditor.

www.infolinux.web.id

INFOLINUX 12/2004

69

TUTORIAL

Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial

XML

dan kekaguman yang sebesar-besarnya, setinggi-tingginya, sedalam-dalamnya kepada Kpart milik KDE. Anda pernah menggunakan Kontact? Itulah salah satu contoh kehebatan Kpart milik KDE. Semuanya bisa berupa komponen. Komponen-komponen Kontact sendiri, seperti halnya Kmail, KaddressBook adalah aplikasi terpisah. Namun, bisa diembed begitu saja ke dalam Kontact. Memperhatikan Mac dengan global menunya [dulu]? Setiap aplikasi yang dijalankan akan mendaftarkan dirinya ke menu global Mac sehingga hanya diperlukan satu toolbar untuk segalanya. Menunya bisa dinamis. Kedua hal tersebut bisa didekati dengan penggunaan XML. Anda mendefinisikan komponen menu dengan XML, sementara, kontainer akan mengartikan XML tersebut dengan aturan tertentu, dan kemudian dapat menempatkan menu sesuai konteks aplikasi. Tentu saja, part sistem tidak sesederhana ini. Namun, pendekatan XML akan sangat membantu, terutama dalam user interface design. Penerapan ketiga adalah format dokumen, seperti yang digunakan oleh OpenOffice.org. Paket office yang saat ini sangat populer ini menggunakan file teks XML sebagai format filenya [//xml.openoffice.org]. Hal ini berlawanan sekali dengan Microsoft yang menggunakan format yang hanya diketahui oleh Microsoft tersebut. Dengan menggunakan XML, kita tidak perlu repot-repot memikirkan format file. Untuk merancang suatu format file bukanlah perkara mudah. Kita harus benar-benar memikirkan format file kita bisa ekstensibel dan mudah ditelusuri. Merancang format file bisa memakan waktu tahunan. Dengan menggunakan XML, kita hanya cukup menentukan skema XML kita dan dapat segera memiliki format file sendiri. Apabila Anda tidak suka dengan penggunaan satu file, Anda juga bisa memilih pendekatan OpenOffice.org. Beberapa file Anda kumpulkan, berikan metafile, lalu kompreslah semuanya menjadi satu. Berikan ekstensi yang Anda rasa keren, dan jadilah format file baru. Keren, bukan? Kehadiran XML harus diakui telah memicu lahirnya banyak format dokumen baru. Sebut saja format dokumen paket office di

70

INFOLINUX 12/2004

dunia open source. Koffice, Abiword, Gnumeric, semuanya XML. Dengan prinsip ini, pertukaran informasi akan menjadi lebih mudah. Katakanlah sebuah sistem menggunakan XML sebagai format filenya. Ketika akan dikirimkan ke sistem lain yang benar-benar tidak kompatibel [misal dari Mainframe ke PDA], format XML ini tetap bisa diandalkan. Informasi tetap terjaga. Namun, hal sebaliknya akan terjadi apabila kita membuat format file sendiri. Apabila kita tidak mampu menyediakan dukungan, pemindahan informasi dari satu sistem ke sistem lain akan menjadi masalah besar. Karena sifatnya inilah, banyak yang mengatakan bahwa XML adalah format dokumen masa depan. Selama ada XML parser dan aturan XML, maka semua format dokumen akan sangat mudah dimengerti. Diharapkan, ketergantungan terhadap pihak tertentu bisa diminimasi. Penerapan berikutnya adalah pengiriman informasi secara langsung. Bayangkan kedua sistem yang berbeda tersebut ini ketika ingin berkomunikasi: SISTEM_A: [halo ini sistem A] [bagaimana status sistem B] [?] SISTEM_B: ;

Ketika keduanya harus saling berkomunikasi, bagaimanakah caranya agar SISTEM_A dan SISTEM_B bisa berkomunikasi dengan benar? Buat protokol baru? Suatu pekerjaan yang sangat boros resource, dengan hasil tidak sebesar pengorbanannya. Bayangkan jika SISTEM_A dan SISTEM_ B bekerja dengan cara berikut:

SISTEM_ASISTEM_B System status Bagaimana status sistem B?

Tentu saja, apabila SISTEM_A dan SISTEM_B memahami aturan XML, maka percakapan bisa dilakukan, walaupun berbeda SISTEM. Hal inilah yang dilakukan Jabber. Berkomunikasi dengan bantuan XML. Dengan penggunaan XML di sini, tidak banyak

www.infolinux.web.id

pengorbanan yang harus dilakukan apabila suatu sistem harus berkomunikasi dengan sistem lain yang tidak kompatibel. Masih banyak lagi penerapan XML pada komunitas Open Source. Hal ini wajar saja. Di mana lagi bisa mendapatkan begitu banyak manfaat dengan begitu sedikit pengorbanan? Luar biasa sekali bukan, XML ini? XML sendiri bukanlah sistem yang sederhana. Betul bahwa XML adalah markup based document. Namun, kita perlu memahami beberapa hal ketika bekerja dengan XML untuk mendapatkan manfaat yang sebesar-besarnya. Termasuk menghindari kesalahan yang tidak perlu.

Sintaks XML Sama seperti bahasa pemrograman misalnya, XML juga memiliki sintaks [walaupun tidak akan terlalu kaku]. Kita harus memenuhi aturan-aturan ini agar sistem tetap sesuai standar. Menggunakan hal standar secara tidak standar adalah hal yang jelek sekali. Aplikasi Anda, ketika melakukan parsing XML haruslah berhati-hati. Tidak semua XML valid. Apabila hal yang salah ditemukan, maka pemrosesan sangat disarankan untuk dihentikan. Untuk lebih baiknya, kita akan segera membahas sintaks-sintaks XML. 1. Semua elemen XML harus memiliki closing tag. Hal ini berbeda dengan HTML. Perhatikan contoh HTML dan XML berikut ini:

ini adalah paragraph

garis pemisah horizontal

Pada XML, apabila menggunakan tag

dan

, maka harus dituliskan seperti ini:

ini adalah paragraph

garis pemisah horizontal

2. tag adalah case sensitive. Hal ini berbeda dengan HTML yang case insensitive. Harap perhatikan betul masalah yang satu ini. Adalah jamak kalau kita menuliskan tag dan lalai ditutup dengan . 3. Semua tag XML bersarang harus ditulis dengan benar. Perhatikan contoh HTML dan XML berikut:

TUTORIAL

Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial

XML

teks tebal dan miring

Di XML, tag harus ditutup dahulu, barulah . Seperti Dancow, ini dulu, baru itu. teks tebal dan miring

4. Semua elemen harus memiliki elemen root. Pada contoh pesan berikut ini, elemen adalah elemen root.

SISTEM_ASISTEM_B System status Bagaimana status sistem B?

5. Penggunaan atribut harus selalu dikutip. Tag pada XML bisa memiliki atribut. Perhatikan beda HTML dan XML berikut:

pada XML, harus dituliskan sebagai:

Pembahasan mengenai atribut akan kita bahas setelah bagian ini. 6. White space akan diperhatikan di XML. Berbeda dengan HTML, white space pada XML akan tetap diperhatikan. Bedakan dengan HTML berikut ini: halo

apa kabar

pada HTML, akan dituliskan sebagai: hao apa

kabar

Sementara, pada XML akan dituliskan apa adanya. 7. Karakter newline XML adalah LF [sama seperti Unix dan Linux]. Hal ini berbeda dengan Windows [CR dan LF] atau Mac [CR]. 8. Untuk komentar, sama seperti HTML, tuliskan dalam . Contoh:

Elemen-elemen XML Kita telah melihat bahwa secara sederhana, XML hanyalah terdiri dari TAG dengan definisi tag dan sejumlah aturan. Kita akan melihat lebih dalam sekarang. Perhatikanlah contoh pertama tadi:

LinuxSUSE9.1SUSE LINUX AG

XML tersebut bisa ditulis ulang sebagai berikut:

SUSE9.1SUSE LINUX AG

Atau:

LinuxSUSE 9 1 SUSE LINUX AG

Dari contoh-contoh tersebut, kita melihat bahwa XML bisa dituliskan dengan berbagai cara. Perhaikanlah elemen tag tersebut. Sebuah elemen dapat mengandung sesuatu. Pada contoh-contoh tersebut, kita melihat bahwa :  elemen dapat mengandung element content seperti pada:

9 1

 elemen dapat mengandung simple content atau text content seperti pada:

 Elemen juga memiliki atribut seperti:

Seperti yang kita lihat, atribut cukup banyak digunakan. Lantas, apakah pendekatan yang lebih baik digunakan? Penggunaan atribut atau tidak? Menurut beberapa pembahasan, penggunaan atribut agak sedikit merepotkan dan sebaiknya dihindari. Berikut ini adalah beberapa permasalahan sehubungan dengan penggunaan atribut.  atribut tidak dapat mengandung banyak nilai. Apabila diinginkan, maka beberapa atribut harus digunakan.  Atribut tidak mudah untuk dikembangkan lebih lanjut  atribut tidak dapat digunakan untuk mendeskripsikan struktur.  Atribut lebih susah dimanipulasi oleh program  nilai atribut tidak mudah diuji dengan penggunaan DTD. Bagaimanapun, terkadang atribut tidak selalu jelek dan merepotkan. Kita dapat memberikan nilai id pada suatu elemen, dan berfungsi sebagaimana halnya name pada HTML. Pendekatan ini juga digunakan oleh Jabber. Seperti contoh berikut: ... ...

Kita lanjutkan. Apabila Anda memilih untuk menggunakan child element sebisa mungkin, maka tulislah sebaik mungkin. Rancanglah strukturnya agar lebih mudah untuk pengembangan lebih lanjut. Seperti pada contoh sebelumnya, kita bisa menuliskan

seperti ini: 9.1SUSE

Aturan-aturan tersebut cukup untuk pengunaan XML secara mendasar. Lebih lanjut, kita akan melanjutkan pada elemenelemen dalam XML.

apapun secara eksplisit. Umumnya, di sini, atribut digunakan. Contoh:

 Elemen dapat mengandung mixed content apabila menggabungkan element content dan simple content.  Elemen dapat memiliki empty content apabila tidak memiliki nilai informasi

www.infolinux.web.id

Namun, dapat juga dituliskan lebih baik dengan cara:

9 1

INFOLINUX 12/2004

71

TUTORIAL

Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial

XML

Konfigurasi KDE berbasis XML.

Sementara, apabila Anda memutuskan untuk banyak menggunakan atribut, maka berhati-hatilah dalam merancang struktur XML sehubungan dengan banyaknya penggunaan atribut. Tentu saja, ini bukanlah sebuah XML yang sesungguhnya:

Konfigurasi GNOME berbasis XML.

Lebih baik digunakan daripada bentuk berikut:

9.1

Karena tag

adalah anak dari dan kita memiliki tag yang menginformasikan sistem operasi [dalam hal ini Linux].

Penulisan elemen XML

Validasi XML

Anda bebas dalam merancang tag yang digunakan, selama memenuhi aturan berikut:  nama elemen dapat terdiri dari huruf, bilangan dan karakter lainnya.  Nama elemen tidak boleh diawali dengan bilangan ataupun tanda baca.  Nama tidak boleh diawali dengan XML [dan variasinya seperti xml, Xml...]  nama tidak boleh berisi spasi.

Kebebasan selalu merupakan pisau bermata dua. Apabila digunakan dengan baik, maka hasilnya akan berguna. Namun, apabila disalah gunakan, bisa-bisa terjadi masalah besar. Di XML, bagaimanakah Anda tahu sebuah dokumen XML valid atau tidak secara sintaksis? Kita bisa membagi XML yang benar dalam dua bagian: XML yang secara struktural benar dan XML yang valid. Contoh XML yang secara struktural benar:

Karena Anda mendefinisikan tag sendiri, tidak akan ada yang akan melarang tag yang Anda gunakan selama telah memenuhi beberapa aturan sebelumnya. Hanya, perhatikan betul agar umum digunakan dan tidak bermasalah di sistem lain. Perhatikan contoh berikut. Lebih baik untuk tidak menggunakan –, :, dan . dalam tag. Karakter – bisa dianggap pengurangan dan karakter . dapat dianggap pemanggilan atribut kelas. Karakter : yang akan digunakan dalam namespace juga tidak boleh digunakan. Nama haruslah sependek dan seefisien mungkin. Sebagai contoh:

9.1

72

INFOLINUX 12/2004

LinuxSUSE 9 1 SUSE LINUX AG

Namun, aturan XML tersebut tidak didefinisikan. Oleh karena itu, kita tidak

www.infolinux.web.id

bisa mengatakan XML tersebut valid. Perhatikan contoh berikut:

LinuxSUSE 9 1 SUSE LINUX AG

Kali ini, kita memiliki sebuah file dengan nama distro.dtd yang merupakan DTD untuk XML kita. Apabila semua bagian XML sesuai dengan aturan dalam DTD, maka XML dikatakan valid. Yang terakhir, sebagai penutup, sebaiknya, dalam menulis XML, kita menggunakan XML editor, jangan Vim, pico, fte atau editor teks biasa. Penggunaan editor khusus XML tidak hanya memberikan syntax highlight, namun juga lengkap dengan berbagai fitur khusus XML. Contoh XML editor untuk GNOME dan KDE adalah Conglomerate [GNOME] dan KxmlEditor [KDE]. Masih banyak lagi hal seputar XML yang menggambarkan betapa hebatnya XML. Pembahasan kita kali ini hanya menyentuh dasar-dasar XML. Sampai ketemu di pembahasan berikutnya! Noprianto [[email protected]]

TUTORIAL

Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial

Cscope dan Ctags

Menelusuri Kode Program dengan Cscope dan Ctags Pernah merasa pusing saat memprogram ribuan baris? Atau suatu hari ingin menelusuri kode kernel yang jumlahnya sampai puluhan ribu baris? Cscope dan Ctags bisa jadi solusinya.

M

ulanya saya juga berpikir “ribet sekali menelusuri kode program yang bejibun ini.” Memang ini masalah klasik, dari jaman mainframe sampai PC, dari jaman DOS sampai era Linux kernel 2.6. Sebenarnya masalah ini serupa [tapi tak sama] bagi programmer, yakni bagaimana menelusuri program secara cepat dan efisien. Proses yang tepat dalam menelusuri program ini berpengaruh pada kecepatan development, juga memudahkan penelusuran jika ditemukan bug. Memang kata “cepat” ini sangat relatif. Ada yang mampu secara intuitif mencari letak suatu procedure, ada yang mesti serius memelototi editor sambil tekan tombol Page Up dan Page Down. Ada yang enjoy [ini kalau di Linux] pake grep dan cat. Benar-benar banyak jalan menuju “Roma.” Masalahnya sekarang, bagaimana kalau kode program itu sangat banyak, semisal kode kernel? Waktu saya mencoba menelusuri kode kernel Linux, saya sering bertemu suatu struct [record, istilah di Pascal] yang definisinya ada di file header lain. Ini masih belum seberapa. Ada juga pemanggilan fungsi atau prosedur pada direktori yang berbeda, dengan referensinya “tersembunyi” pada deklarasi header di dalam file header

Gambar 1. Tampilan awal interface cscope.

lain [rekursif declaration]. Lalu bagaimana? Menurut saya ada dua cara, kuatkan mental anda atau gunakan duet Cscope dan Ctags. Sebagai contoh kasus dalam artikel ini, saya akan mencoba menelusuri kode kernel bawaan Red Hat 7.3 dengan editor Vim. Tools yang akan digunakan adalah Cscope dan Ctags yang disambungkan [atau di-binding] langsung dengan Vim. Oleh karena itu, kita langsung saja mencoba tools ini. Pertama download Cscope dari //cscope. sourceforge.net di section Download. Ambil versi terbaru [saat tulisan ini dibuat] yaitu versi 15.5. Penulis saat ini menggunakan versi 15.3 tapi cara penggunaannya sama saja. Untuk Ctags, ambil versi terbaru [saat artikel ini ditulis, versi 5.5.2] di //ctags. sourceforge.net. Letakkan kedua file ini di suatu direktori, misal di /usr/src, lalu unpack dengan perintah tar. # tar xzvf ./ctags-5.5.2 # tar xzvf ./cscope-15.3.tar.gz

# make && make install # cd ../ctags-5.5.2 # ./configure --prefix=/usr/ local/ctags # make && make install

Buat symbolic link dari masing-masing executable ke /usr/local/bin agar memudahkan eksekusi program. # ln -s /usr/local/cscope/bin/ cscope /usr/local/bin/cscope # ln -s /usr/local/ctags/bin/ ctags /usr/local/bin/ctags

Pindahkan juga beberapa man file agar memudahkan jika nanti anda ingin membaca setting cscope/ctags lebih lanjut. # mv /usr/local/ctags/man/man1/ ctags.1 /usr/man/man1/ # mv /usr/local/ctags/man/man1/ etags.1 /usr/man/man1/ # mv /usr/local/cscope/man/man1/ cscope.1 /usr/man/man1/

Segera configure, kompilasi, dan instalasi. # cd cscope-15.3 # ./configure --prefix=/usr/ local/cscope

Sekarang kita fokus dulu ke Cscope. Langkah berikutnya yang harus kita lakukan adalah membuat daftar file untuk di-in-

Gambar 2. Hasil pencarian task_struct.

www.infolinux.web.id

INFOLINUX 12/2004

73

TUTORIAL

Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial

Cscope dan Ctags

Gambar 3. Cscope memanggil Vi pada posisi deklarasi task_struct.

dex oleh Cscope. Langkah ini tidak mutlak dilakukan, namun sangat berguna untuk mempercepat proses pencarian. Untuk membuat daftar file di kernel tree, anda bisa gunakan shell script berikut ini. #!/bin/bash LNX=/usr/src/linux-2.4/ cd / find $LNX \ -path “$LNX/arch/*” ! -path “$LNX/arch/i386*” -prune -o \ -path “$LNX/include/asm-*” ! -path “$LNX/include/asm-i386*” -prune -o \ -path “$LNX/tmp*” -prune -o \ -path “$LNX/Documentation*” -prune -o \ -path “$LNX/scripts*” -prune -o \ -path “$LNX/drivers*” -prune -o \ -name “*.[chxsS]” -print > /var/cscope/kernel/cscope.files

Variabel LNX bisa anda ganti dengan sembarang path tempat anda meletakkan source code kernel atau project anda. Jangan lupa tanda “/” di akhir path. Output file bisa anda letakkan di manapun, tidak harus di /var/cscope/kernel, karena ini hanya contoh. Nama file pun tidak harus cscope.files, tapi untuk memudahkan percobaan kita gunakan nama ini karena nama ini otomatis dikenali sebagai daftar file yang akan di-index oleh Cscope. Opsi “-prune” berarti kita tidak melakukan recursive lookup ke dalam subdirektori. Ini digunakan karena file-file yang diperlukan ada di direktori level pertama. Extension yang diperlukan adalah list-

74

INFOLINUX 12/2004

Gambar 4. Hasil pencarian fungsi yang memanggil schedule_task.

ing C [*.c dan *.h] serta beberapa statement assembly [ *.s, *.S, dan *.x]. Simpan file script di atas, misal dengan nama “generate.sh” di direktori /var/cscope/kernel. # mkdir -p /var/cscope/kernel # chmod a+x ./generate.sh

Lalu jalankan script “generate.sh”. Tunggu beberapa saat [tergantung kecepatan komputer anda] dan terciptalah file “cscope. files” di direktori /var/cscope/kernel. Isi dari file ini kurang lebih sebagai berikut. [[email protected] kernel]# head -20 ./cscope.files /usr/src/linux-2.4/ Documentation/DocBook/procfs_ example.c /usr/src/linux-2.4/ Documentation/networking/ ifenslave.c /usr/src/linux-2.4/abi/cxenix/ pathconf.c /usr/src/linux-2.4/abi/cxenix/ misc.c /usr/src/linux-2.4/abi/cxenix/ signal.c /usr/src/linux-2.4/abi/cxenix/ stubs.c /usr/src/linux-2.4/abi/cxenix/ sysent.c /usr/src/linux-2.4/abi/cxenix/ utsname.c /usr/src/linux-2.4/abi/ibcs/ sysent.c /usr/src/linux-2.4/abi/isc/ sysent.c /usr/src/linux-2.4/abi/isc/misc.c /usr/src/linux-2.4/abi/sco/

www.infolinux.web.id

ptrace.c /usr/src/linux-2.4/abi/sco/ ioctl.c /usr/src/linux-2.4/abi/sco/misc.c /usr/src/linux-2.4/abi/sco/mmap.c /usr/src/linux-2.4/abi/sco/ secureware.c /usr/src/linux-2.4/abi/sco/stat.c /usr/src/linux-2.4/abi/sco/ statvfs.c /usr/src/linux-2.4/abi/sco/ sysent.c /usr/src/linux-2.4/abi/sco/ tapeio.c

Setelah anda cek entry file cscope.files, berikutnya lakukan indexing [tetap di direktori /var/cscope/kernel]: # cscope -b -k

Tunggu beberapa saat dan akan menghasilkan file cscope.out. File inilah yang merupakan database untuk pencarian fungsi atau variabel oleh Cscope. Sekarang kita test dulu fungsi dasar Cscope dengan menggunakan interface pencarian built in, dengan mengetik perintah berikut. # cscope -d

Opsi -d mencegah Cscope melakukan indexing ulang [karena anda sudah membuat index sebelumnya dan tidak melakukan perubahan apapun di source code]. Anda akan menemui tampilan seperti gambar 1. Sebagai latihan, kita mulai dengan mencari definisi fungsi schedule. Misal sekarang kursor berada pada baris “Find this C symbol”. Tekan [Enter] sekali, maka kursor akan

TUTORIAL

Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial

Cscope dan Ctags

berpindah ke “Find this global definition”. Sesuai namanya, baris “Find this global definition” akan mencari seakurat mungkin suatu definisi, bukan sekadar deklarasi suatu fungsi atau struct atau variabel. Misal dalam hal ini kita cari deklarasi task struct, maka isikan task_struct lalu [Enter], anda akan mendapat tampilan seperti gambar 2. Pada bagian atas, anda akan menemukan hasil pencarian. Pada komputer penulis ditemukan 6. Di sini terlihat jelas, yang kemungkinan adalah deklarasi task_struct adalah di nomor 5, maka tinggal tekan keyboard angka 5. Seketika Cscope akan memanggil Vi [editor default sesuai variabel lingkungan EDITOR] dan display akan “meloncat” ke deklarasi task_struct. Tekan [Esc] [:] [q] [Enter] untuk keluar dari Vi. Bagaimana? Mulai merasakan kehandalan Cscope? Kita coba tipe pencarian lain. Misal kita ingin mencari prosedur apa saja untuk memanggil fungsi schedule_task [ini suatu fungsi untuk memasukkan tugas ke dalam antrian scheduler kernel]. Jika anda sebelumnya berada pada baris hasil pencarian task_struct, tekan [Tab]. Tombol [Tab] digunakan untuk berpindah antara baris hasil pencarian dan baris fungsi pencarian. Lalu tekan kursor panah atas atau bawah dan arahkan ke “Find functions calling this function”. Ketik schedule_task dan [Enter]. Kali ini anda akan mendapat cukup banyak hasil. Pada komputer penulis mendapatkan 64 referensi. Gunakan tombol ‘+’ dan ‘-’ untuk bergerak maju dan mundur melihat seluruh hasil pencarian. Anda akan menemui katakata “Press space bar to display the first line again” jika anda sudah mencapai akhir dari pencarian. Tekan Space bar untuk kembali

Gambar 5. Pemanggilan schedule_task di file sys.c.

ke awal. Ambil salah satu hasil dan seperti tadi tekan angka yang sesuai. Misal penulis pilih pada referensi file sys., maka tampilan akan berpindah ke Vi dan meloncat ke pemanggilan schedule_task. Setelah selesai mencek dengan editor [Vi], keluar dengan [Esc] [:] [q] [Enter]. Barangkali anda berpikir, bolak balik dari interface cscope ke Vi, sepertinya tidak efisien. Benar! Karena itu sekarang saatnya kita coba integrasikan Vi/Vim dengan Cscope. Di sini diasumsikan anda menggunakan Vim versi 6.1-2 bawaan Red Hat 7.3. Jika anda belum menginstall Vim, lakukan instalasi paket-paket RPM berikut: # rpm -Uvh /lokasi/RPM/distro/ anda/vim-common-6.1-2.i386.rpm # rpm -Uvh /lokasi/RPM/distro/ anda/vim-enhanced-6.1-2.i386.rpm # rpm -Uvh /lokasi/RPM/distro/ anda/vim-minimal-6.1-2.i386.rpm

Pada distro Red Hat, lokasi RPM bisa anda temukan di direktori RedHat/RPMS. Kemudian download file //cscope. sourceforge.net/cscope_maps.vim. // cscope.sourceforge.net/cscope_maps.vim. 1. Copykan ke home direktori user yang akan menggunakan vim untuk penjelajahan. 2. Cek apakah anda sudah memiliki file .vimrc # ls -al ~/ | grep -i vimrc

3. Jika ternyata sudah ada, sisipkan baris berikut di .vimrc: source cscope_maps.vim

4. Jika belum ada file vimrc, untuk praktisnya rename saja file map menjadi vimrc,

karena pada intinya file map vim juga berisi syntax yang sama dengan perintah-perintah vimrc: # mv ~/cscope_maps.vim ~./.vimrc

Awas, jangan sampai tanda “.” ketinggalan ]! 5. Pastikan file .vimrc dan/atau file map bisa dibaca dan dieksekusi. # chmod 755 ~/.vimrc # chmod 755 ~/cscope_maps.vim

Berikutnya, perhatikan sejenak isi dari cscope_maps ini [berikut cuplikannya]: [baris 40] “ add any cscope database in current directory [baris 41] if filereadable[“cscope.out”] [baris 42] cs add cscope.out [baris 43] “ else add the database pointed to by environment variable [baris 44] elseif $CSCOPE_DB != “” [baris 45] cs add $CSCOPE_ DB [baris 46] endif

Di baris 44, ada variabel lingkungan CSCOPE_DB yang bisa anda set untuk menunjukkan lokasi data hasil indexing Cscope seperti yang telah kita lakukan di atas [dengan perintah cscope -b -k]. Cara paling mudah menambahkannya adalah menyisipkan baris berikut di .bashrc [pada home direktori user yang ada edit file .vimrc nya]: export CSCOPE_DB=/var/cscope/ kernel/cscope.out

Gambar 6. Perintah lewat keyboard untuk pencarian fungsi di Vim.

www.infolinux.web.id

INFOLINUX 12/2004

75

TUTORIAL

Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial

Cscope dan Ctags

Gambar 7. Hasil pencarian schedule_timeout di Vim.

Kelak jika membutuhkan lebih dari satu database, tambahkan lewat cs add setelah baris endif [baris 46] di .vimrc, misalnya: cs add /var/cscope/kernel2/ cscope.out

Sekarang percobaan dengan Vim bisa dimulai. Log out dan log in sebagai user [yang tadi telah dimodifikasi .vimrc-nya] lalu panggil vim sambil mengedit suatu file, misal: # vim /usr/src/linux-2.4/kernel/ sched.c

Sebelumnya mungkin perlu penulis beritahukan, dalam artikel ini tidak dijelaskan secara detil bagaimana mengoperasikan Vi. Jadi pembaca bisa memadukan dengan membaca fasilitas help di Vi. Mungkin di lain waktu akan dicoba menulis artikel mengenai Vi. Kembali ke Vim, coba cari kata “interruptible_sleep_on_timeout”, kursor akan berpindah ke deklarasi seperti berikut [tekan ‘n’ beberapa kali sampai menemukannya]: long interruptible_sleep_on_ timeout[wait_queue_head_t *q, long timeout] { SLEEP_ON_VAR current->state = TASK_ INTERRUPTIBLE; SLEEP_ON_HEAD timeout = schedule_ timeout[timeout]; SLEEP_ON_TAIL return timeout; }

Sekarang coba arahkan kursor ke schedule_timeout di dalam deklarasi interrupt-

76

INFOLINUX 12/2004

Gambar 8. Vim menampilkan dua window untuk memudahkan crosscheck.

ible_sleep ini. Lalu tekan [Ctrl] [SpaceBar], lalu lepas, secepatnya dan tekan [g]. Perhatikan, sejenak di layar terbawah Vim [baris perintah] ada tertera:

sebagai berikut: 1. Buat direktori untuk menampung database ctags, misal # mkdir -p /var/ctags/kernel

scs find g schedule timeout

Ini adalah perintah yang sebenarnya dikirimkan ke Vim, namun karena kita telah memasang file mapping, kita tidak perlu mengetikkan perintah yang panjang ini. Mirip dengan hasil pencarian di dalam interface cscope, anda akan disuguhi window hasil pencarian. Tekan angka ‘4’ dan Vim akan men-split tampilan menjadi dua window, satu masih menunjuk di interruptible_sleep, window satunya menunjuk ke schedule_timeout. Nah, menyenangkan bukan? Anda bisa mempelajari isi fungsi interruptible_sleep_ on_timeout sekaligus melihat isi schedule_ timeout. Untuk berpindah antar window, tekan tombol [Ctrl] [W] diikuti [w] [hampir bersamaan]. Untuk menutup salah satu window, tekan [Esc] [:] [q] [Enter]. Kita lanjutkan dengan mengonfigurasi Ctags untuk indexing kernel. Mungkin anda bertanya, “Buat apa Ctags, sepertinya fungsinya sama saja Cscope?” Jawaban ini benar, tapi alasan utama kita menggabungkan dua sistem ini [Cscope dan Ctags] adalah untuk memaksimalkan kinerja pencarian. Karena masing-masing tools ada kelebihan dan kekurangan dalam membuat database, maka cara terbaik adalah menggunakan dua database hasil Cscope dan Ctags. Sekarang kita langsung membuat database Ctags. Mirip seperti Cscope, kita gunakan file generate.sh untuk menghasilkan daftar file yang akan di-index. Langkahnya

www.infolinux.web.id

2. Copykan file generate.sh ke direktori diatas dan ubah baris berikut : -name “*.[chxsS]” -print > /var/cscope/kernel/cscope. files

menjadi -name “*.[chxsS]” -print > /var/ctags/kernel/kernel.file

Intinya nama output apapun bisa dipakai asalkan memudahkan identifikasi untuk input Ctags. Jangan lupa chmod a+x ./generate.sh. 3. Jalankan generate.sh dan lakukan indexing. # cd /var/ctags/kernel # ./generate.sh # ctags -L ./kernel.file

Akan tercipta file “tags” di direktori /var/ ctags/kernel. 4. Berikutnya tambahkan baris berikut di file .vimrc atau cscope_maps.vim. set tags=/var/ctags/kernel/ tags

Idealnya letakkan perintah di atas setelah “set cscopeverbose”. Ini untuk memasukkan database Ctags tiap kali Vim anda jalankan. Anda bisa memasukkan sekaligus beberapa file tag dengan dipisahkan koma [“,”] 5. Edit “set csto=0” pada .vimrc dan

TUTORIAL

Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial

Cscope dan Ctags

cscope_map.vim menjadi set csto=1. Ini untuk menset agar pencarian tag mendahulukan database Ctags, baru jika tidak ditemukan, digunakan database Cscope. Kalau dibalik, anda akan mendahulukan Cscope baru Ctags. Ini sebenarnya masalah selera saja, tapi untuk memaksimalkan fungsi keduanya, kita coba dulu setting di atas. Kombinasi Vim, Cscope, dan Ctags sudah lengkap. Saatnya mencoba kemampuan ctags. Coba jalankan Vim berikut ini. # vim /usr/src/linux-2.4/kernel/ timer.c

Sekarang coba cari kata “spin_lock_ irqsave”. Anda bisa temukan di sekitar baris ke 180-185. OK, sudah ketemu? Kalau masih kesulitan, lakukan langkah berikut [fungsi search]: Tekan [Esc] [Esc] [/] spin_lock_ irqsave, artinya tekan [Esc] dua kali, ketik [/], lalu ketikkan spin_lock_irqsave. Setelah menemukan yang anda cari, arahkan kursor agar pas berada di dalam kata “spin_lock_irqsave”, lalu tekan [Ctrl] dan []] [tombol Ctrl dan karakter ‘]’]. Pilih salah satu, misalnya di nomor 5. Begitu anda tekan [Enter], anda akan dibawa ke definisi spin_lock_irqsave. Jika kebetulan anda menemukan definisi lain yang ingin anda telusuri, arahkan kursor ke definisi tersebut lalu tekan [Ctrl] []]. Anda bisa mundur ke langkah sebelunnya dengan [Ctrl] [T]. Pencarian berlapis ini disebut “tag stack” dan bisa dibayangkan seperti tumpukan atau stack. Jadi secara umum [untuk bernavigasi di stack]:

Gambar 9. Hasil pencarian Ctags pada keyword spin_lock_irqsave.

1. [Ctrl] []] untuk mencari definisi tag. Jika ditemukan hanya satu hasil, Vim akan langsung “meloncat” ke definisi tersebut. Jika ada lebih dari satu, maka hasil pencarian akan ditampilkan dan anda bisa memilih angka hasil pencarian 2. [Ctrl] [T] untuk mundur ke posisi teks sebelumnya. Jika anda sudah berada di posisi paling awal, anda akan menemui teks “at bottom of tag stack”. Jika anda belum melakukan pencarian tag, [Ctrl] [T] akan memunculkan peringatan “tag stack empty”. Barangkali anda ingin melakukan split window seperti saat kita mencoba Cscope. Anda punya dua pilihan: 1. Menggunakan “stjump” dan keyword yang akan dicari. Ketikkan [Esc] [:] stjump

2. keluar dulu dari Vi, lalu tambahkan baris berikut di .vimrc. nmap

k :stjump =exp and[“”]

Perintah ini artinya membuat mapping/ shortcut tombol [Ctrl] [Spacebar] [k] untuk melakukan “stjump “ seperti point 1. Sekarang lakukan lagi seperti pencarian tag, hanya saja kali ini lakukan dengan “stjump” atau shortcut kita yang baru. Setelah kita meloncat ke lokasi teks yang baru, otomatis window akan di-split menjadi dua. Kita bisa sekaligus melihat ke dua bagian [mirip dengan Cscope]. Jika anda tidak suka dengan split secara horisontal, Cscope dan Ctags

bisa melakukan split window vertikal dengan bantuan Vim, caranya sebagai berikut. 1. Untuk Cscope, tekan [Ctrl] [Spacebar] [Spacebar] [artinya dua kali space bar secara cepat] diikuti [g]. 2. Untuk Ctags, keluar dulu dari Vim dan tambahkan mapping berikut di .vimrc. nmap

k :vert stjump =expand[“” ]

Jalankan lagi Vim, letakkan kursor di keyword yang dicari definisnya lalu tekan [Ctrl] [Spacebar] [Spacebar] [k]. Setelah memilih tag tujuan [atau langsung meloncat jika hanya ditemukan satu hasil pencarian], window akan displit secara vertikal. Kedua cara di atas bisa diterapkan secara rekursif dan juga berlaku untuk split horisontal. Anda bisa juga mengkombinasikan split horisontal dan vertikal. Untuk berpindah antar window yang “ruwet” seperti ini, gunakan [Ctrl] [W] diikuti panah kursor atas, bawah, kiri dan kanan. Fokus window akan berpindah sesuai arah kursor yang ditekan. Jika sudah selesai dengan satu window anda bisa tutup dengan perintah menekan [Esc] [:] [q]. Kesimpulannya, dengan Vim, Ctags dan Cscope anda bisa menjadi lebih cepat dan produktif dalam menelusuri suatu kode program yang sangat besar dan terpisah-pisah. Contoh dalam artikel ini bisa anda terapkan tidak hanya untuk development kernel, tapi juga projek lainnya. Selamat mencoba, variasi lain bisa anda perdalam sendiri dengan bekal tutorial ini dan mengamati contoh file mapping cscope. Mulyadi S. [[email protected]]

Gambar 10. Contoh tampilan dengan split window di Vim.

www.infolinux.web.id

INFOLINUX 12/2004

77

Bài mới nhất

Chủ Đề