Oleh V. L. Simpson, LG#107. Bahasa Indonesia oleh Triyan W. Nugroho.

Pengantar

Kapan Anda terakhir kali mengkompilasi kernel Linux?

Kemarin? Seminggu yang lalu? Lima menit yang lalu?

Pada 486?

Saya sendiri juga tidak ingat.

Ingat seberapa lama waktu yang dibutuhkan?

Saya ingat. Sangat lama. Terlalu lama.

Sekarang mengapa saya ingin mengkompilasi kernel terbaru pada 486?

Sebenarnya saya tidak menginginkannya. Namun dengan kematian komputer utama saya yang tragis, saya harus memindahkan kebutuhan komputasi saya pada sebuah komputer 486 tua yang diberikan oleh seseorang kepada saya. Saya telah mempergunakannya sebagai sebuah server NTP untuk jaringan di rumah saya. Namun apa yang ada di dalam server NTP bukanlah yang terakhir dan terbaik. Komputer yang lain di jaringan ini tidak lebih baik daripada 486, yaitu sebuah laptop.

Saya membutuhkan Emacs, sehingga saya mengambil harddisk dari komputer yang mati, dan menancapkannya pada 486.

Harddisk tersebut dapat bekerja dengan baik. Saya tidak terlalu berharap banyak terhadap respon dan kenyamanan dari keadaan tersebut, namun pada mode console saya tidak menemukan perbedaan yang berarti. X window system pun bekerja dengan baik, walaupun sedikit lambat pada saat start-up. Saat ini, GIMP dan Mozilla tidak dapat dipergunakan, namun saya dapat menggunakan Emacs dan Lynx atau Dillo tanpa permasalahan yang berarti.
Memperkenalkan award-winning distcc, sebuah antarmuka kompiler terdistribusi untuk gcc, yang ditulis oleh Martin Poole.

Distcc

Distcc terdiri dari dua program binari: distccd dan distcc.

distccd berjalan sebagai sebuah daemon dan menangani trafik jaringan. Dengan melewatkan file source code melalui jaringan ke komputer lain yang telah terinstalasi sebuah kompiler, Anda secara efektif memiliki dua atau lebih kompilasi yang berjalan dalam satu waktu.

distcc adalah sebuah antarmuka untuk gcc dan g++. Anda memberlakukan distcc sebagai kompiler pengganti gcc dan ia akan secara transparan menangani semua keajaiban yang terjadi. distcc dapat dipergunakan untuk semua tugas kompilasi yang membutuhkan kemampuan jaringan maupun tidak. Anda pun dapat mengkompilasi satu buah file ataupun ribuan file.

Cara terbaik untuk mendemonstrasikan kemampuan distcc adalah dengan menggunakannya untuk mengkompilasi dirinya sendiri, sebagai sebuah contoh kompilasi terdistribusi.

Saya akan menunjukkan bagaimana cara mengkompilasi distcc dan memberikan waktu saya untuk kompilasi awal, kemudian mengkompilasi ulang dengan menggunakan distcc sebagai pengganti gcc.

Kebutuhan Minimal:

Dua komputer yang terhubung melalui jaringan, yang berperan sebagai server dan klien.

Server:
Mesin ini harus memiliki lingkungan pengembangan C/C++ yang lengkap. Anda juga membutuhkan paket-paket pengembangan yang lain (readline, ncurses, gtk+, dan sebagainya) yang dibutuhkan saat kompilasi software.

distcc sendiri tidak membutuhkan sesuatu yang khusus.

Catatan: Terdapat beberapa program yang dibuat oleh distcc: distccmon-text dan distccmon-gnome.

Program-program tersebut adalah program monitor untuk menunjukkan kepada Anda apa yang terjadi selama sesi kompilasi distcc. Versi *-gnome membutuhkan GTK, namun jika tidak memilikinya, Anda tidak perlu khawatir.

Klien:
Mesin ini hanya membutuhkan kompiler. Anda tidak membutuhkan libc, ncurses, header kernel maupun berbagai pustaka yang diperlukan saat kompilasi.

Source code distcc tersedia di sini: distcc source code.

Untuk membangun distcc, ikuti langkah berikut:

Prosedur Operasi Standar:

$ tar -jxvf distcc*

(gunakan flag j, bukan z, sebab distcc menggunakan kompresi bzip2).

$ cd distcc*
$ ./configure
$ time make

(jangan lupa gunakan perintah time).distcc berukuran relatif kecil dan pembangunannya tidak membutuhkan banyak waktu. Berikut ini adalah waktu yang didapatkan pada 486DX:

     Tanpa distcc
     real    13m45.185s
     user    12m4.320s
     sys     1m7.120s

Waktu yang dibutuhkan untuk configure lebih lama daripada waktu yang dibutuhkan untuk kompilasi.

Instalasi file binari:

make install

distcc dan distccd akan diinstal di /usr/local/binUntuk komputer klien:
Salinlah file distccd dari server ke direktori /usr/local/bin di klien.

Sekarang kita menggunakan distcc untuk mengkompilasi ulang distcc.

Pastikan anda berada pada direktori source distcc, dan berikan perintah berikut:

$ make clean

Perintah di atas akan membersihkan semua sampah yang tersisa dari kompilasi pertama. Anda tidak perlu lagi melakukan configure.

Kita butuh beberapa menit untuk melakukan pengaturan bagi distcc.

1. Jalankan daemon distcc pada kedua komputer:

$ distccd --daemon

Perintah di atas akan memberikan peringatan mengenai tidak adanya user distcc. Abaikan saja peringatan tersebut.
Anda dapat melakukan pengecekan apakah distccd sudah benar-benar berjalan dengan perintah:
$ ps -ax | grep distccd

2. Lakukan pengesetan variabel DISTCC_HOSTS:

Anda dapat menggunakan alamat IP, atau jika file /etc/hosts telah terkonfigurasi dengan benar, Anda dapat menggunakan nama host komputer.

Saat ini saya memiliki dua komputer:
mothra pada 192.168.1.2
ghidra pada 192.168.1.3 (Yang ini adalah laptop 120MHz sebagai komputer utama namun saat ini tidak memiliki harddisk.)

Lakukan pengesetan variabel:

$ export DISTCC_HOSTS="mothra ghidra"

atau

$ export DISTCC_HOSTS="192.168.1.2 192.168.1.3"

CATATAN: Nama atau alamat dipisahkan dengan spasi.

Kompilasi ulang:

$ time make -j4 CC=distcc

Penjelasan dari perintah di atas:

time: sudah jelas.

make -j4:
Flag -j adalah flag “multiple command” pada perintah make. Bacalah halaman manualnya untuk mendapatkan informasi yang lebih spesifik. Percayalah, untuk saat ini gunakan saja -j4.

CC=distcc:
Mengubah direktif kompiler yang telah ter-configure. Dengan cara ini Anda dapat melakukan configure dengan gcc terdefinisi pada makefile. distcc tidak memaksakan prosedur-prosedur yang rumit untuk menggunakan distcc.

distcc compiled with distcc
     real    6m38.089s
     user    2m42.200s
     sys     0m29.520s

Waktu yang diperlukan tinggal setengahnya!

Berikut ini adalah waktu yang dibutuhkan untuk mengkompilasi program favorit saya, dengan dan tanpa distcc, dengan menggunakan dua buah node seperti yang dijelaskan di atas. Ingat bahwa saya menggunakan 486 tanpa distcc.

     Dillo Web Browser

     Tanpa Distcc           Dengan Distcc
     real    52m14.120s     real    22m31.975s
     user    47m24.820s     user    5m12.630s
     sys     3m29.220s      sys     1m23.930s
     The BASH Shell

     Tanpa Distcc         Dengan Distcc
     real    75m25.306s   real    18m22.613s
     user    69m2.110s    user    3m27.950s
     sys     5m8.030s     sys     0m58.980s

Dengan distcc waktu yang dibutuhkan untuk kompilasi hanya 1/4 nya!

Kesimpulan

distcc sangat fleksibel. Anda dapat menggunakannya sebagai one-shot compiler atau mengeset lingkungan Anda dan mempergunakannya untuk semua kompilasi.

Anda dapat mendefinisikan host kompiler yang tersedia pada file $HOME/.distcc/hosts.

Anda dapat memaksa distcc untuk lebih mengutamakan satu mesin daripada mesin yang lain dengan mengurutkannya pada file .distcc/hosts atau variabel DISTCC_HOSTS.

Sebagai contoh, daripada mengorbankan 486 untuk dikuasai penuh oleh gcc, saya mengeset DISTCC_HOSTS=’GHIDRA’ dan semua kompilasi akan dikirimkan ke laptop yang lebih cepat.

Dokumentasi lebih lengkap bisa didapatkan di website distcc.

O ya, kompilasi kernelnya. Berapa lama waktu yang diperlukan? Saya tidak tahu. Saya menggunakan kernel default milik Slackware. Walaupun menggunakan distcc, kompilasi kernel pada 486 tetap akan membutuhkan waktu yang sangat lama.