Gentoo Logo

Panduan Pembuatan Laporan Bug Gentoo

Daftar Isi:

1.  Pendahuluan

Kata Pengantar

Salah satu faktor yang menghambat perbaikan bug adalah cara bug tersebut dilaporkan. Dengan panduan ini, kami berharap dapat meningkatkan komunikasi antara para pengembang dan pengguna dalam mengatasi bug. Perbaikan bug sangatlah penting untuk menjamin kualitas setiap proyek dan kami harap panduan ini dapat membantu meningkatkan kualitas proyek.

Bug!!!!

Anda sedang meng-emerge sebuah paket atau bekerja dengan sebuah program dan tiba-tiba terjadi hal yang tidak diinginkan -- anda menemukan bug. Bug dapat ditemukan dalam berbagai bentuk seperti kegagalan emerge atau segfault. Apapun sebabnya, bug tersebut harus segera diperbaiki. Berikut ini adalah contoh beberapa bug.

Daftar Kode 1.1: Error ketika program dijalankan

$ ./bad_code `perl -e 'print Ax100'`
Segmentation fault

Daftar Kode 1.2: Kegagalan emerge

/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/include/g++-v3/backward/backward_warning.h:32:2:
warning: #warning This file includes at least one deprecated or antiquated
header. Please consider using one of the 32 headers found in section 17.4.1.2 of
the C++ standard. Examples include substituting the <X> header for the <X.h>
header for C++ includes, or <sstream> instead of the deprecated header
<strstream.h>. To disable this warning use -Wno-deprecated.
In file included from main.cc:40:
menudef.h:55: error: brace-enclosed initializer used to initialize `
OXPopupMenu*'
menudef.h:62: error: brace-enclosed initializer used to initialize `
OXPopupMenu*'
menudef.h:70: error: brace-enclosed initializer used to initialize `
OXPopupMenu*'
menudef.h:78: error: brace-enclosed initializer used to initialize `
OXPopupMenu*'
main.cc: In member function `void OXMain::DoOpen()':
main.cc:323: warning: unused variable `FILE*fp'
main.cc: In member function `void OXMain::DoSave(char*)':
main.cc:337: warning: unused variable `FILE*fp'
make[1]: *** [main.o] Error 1
make[1]: Leaving directory
`/var/tmp/portage/xclass-0.7.4/work/xclass-0.7.4/example-app'
make: *** [shared] Error 2

!!! ERROR: x11-libs/xclass-0.7.4 failed.
!!! Function src_compile, Line 29, Exitcode 2
!!! 'emake shared' failed

Error-error ini bisa jadi sangat memusingkan. Namun, ketika anda menemukannya, apa yang harus anda lakukan? Seksi-seksi berikut akan menjelaskan beberapa alat penting yang berguna untuk menangani error ketika program dijalankan (runtime error). Mari kita lihat alat pertama untuk men-debug error run time -- gdb.

2.  Debug dengan GDB

Pendahuluan

GDB, atau (G)NU (D)e(B)ugger, adalah sebuah program yang digunakan untuk menemukan error run time yang biasanya terkait dengan korupsi memori. Pertama, mari kita lihat apa saja yang diperlukan untuk melakukan debug. Satu hal penting yang harus anda lakukan untuk men-debug sebuah program adalah meng-emerge program tersebut dengan mengaktifkan FEATURES="nostrip". Ini akan mencegah penghapusan simbol-simbol debug. Mengapa simbol-simbol ini dihapus secara default? Alasannya sama dengan alasan mengapa halaman manual di-gzip -- untuk menghemat tempat. Berikut ini adalah contoh besarnya ukuran sebuah program dengan dan tanpa simbol debug.

Daftar Kode 2.1: Perbandingan Ukuran File

(Simbol debug dihapus)
-rwxr-xr-x  1 chris users 3140  6/28 13:11 bad_code
(Simbol debug tidak dihapus)
-rwxr-xr-x  1 chris users 6374  6/28 13:10 bad_code

Sebagai keterangan, bad_code adalah program yang nanti akan kita debug dengan gdb. Seperti yang bisa anda lihat, program tanpa simbol-simbol debug berukuran 3140 byte, sedangkan dengan simbol-simbol debug, ukurannya menjadi 6374 byte. Hampir dua kali lipat! Dua hal lagi yang perlu dilakukan sebelum memulai debug. Yang pertama adalah menambahkan ggdb3 ke variabel CFLAGS dan CXXFLAGS. Flag ini menambahkan informasi debug yang lebih banyak daripada informasi yang biasa diberikan. Kita akan membahasnya nanti. Berikut ini adalah contoh isi /etc/make.conf setelah flag baru ditambahkan.

Daftar Kode 2.2: Edit make.conf

setelah flag baru ditambahkan
CFLAGS="-O1 -pipe -g -ggdb"
CXXFLAGS="${CFLAGS}"

Terakhir, anda juga perlu menambahkan debug ke flag USE paket dengan menggunakan file package.use.

Daftar Kode 2.3: Menggunakan package.use untuk menambahkan flag debug

# echo "category/package debug" >> /etc/portage/package.use

Catatan: Secara default direktori /etc/portage belum diciptakan, anda mungkin harus menciptakannya dahulu jika belum ada. Jika paket tersebut sudah ada di dalam file package.use, maka anda perlu mengedit sendiri file tersebut dengan editor anda.

Selanjutnya emerge ulang paket tersebut agar perubahan diterapkan.

Daftar Kode 2.4: Emerge ulang paket untuk debugging

# FEATURES="nostrip" emerge package

Setelah simbol-simbol diikutsertakan pada program, kita dapat melanjutkan dengan men-debug program.

Menjalankan program dengan GDB

Katakanlah kita memiliki sebuah program dengan nama "bad_code". Beberapa orang mengatakan program ini crash dan mereka memberikan contoh. Pertama mari kita coba:

Daftar Kode 2.5: Memecah Program

$ ./bad_code `perl -e 'print Ax100'`
Segmentation fault

Kelihatannya mereka memang benar. Karena program ini benar-benar rusak, kita memiliki bug. Sekarang, saatnya untuk menggunakan gdb untuk mengatasi masalah ini. Pertama kita jalankan gdb dengan opsi --args, lalu kita berikan program tadi dengan argumen seperti berikut:

Daftar Kode 2.6: Menjalankan Program Melalui GDB

$ gdb --args ./bad_code `perl -e 'print Ax100'`
GNU gdb 6.3
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i686-pc-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1".

Catatan: Anda juga dapat men-debug dengan buangan dari inti program. File-file ini ini berisi informasi yang sama dengan informasi yang akan diberikan oleh program ketika dijalankan dengan gdb. Untuk men-debug dengan file inti, jalankan gdb ./bad_code core, di mana "core" adalah file inti.

Anda akan melihat prompt "(gdb)" dan menunggu input. Pertama, kita harus menjalankan program. Ketik run pada prompt dan anda akan mendapatkan respon seperti:

Daftar Kode 2.7: Menjalankan program dari dalam GDB

(gdb) run
Starting program: /home/chris/bad_code

Program received signal SIGSEGV, Segmentation fault.
0xb7ec6dc0 in strcpy () from /lib/libc.so.6

Di sini kita lihat program akan mulai dijalankan, juga pemberitahuan tentang SIGSEGV, atau segfault. Di sini GDB memberitahukan kita bahwa program kita telah crash. Namun info ini tidak terlalu berguna, karena akan ada banyak "strcpy" di dalam program yang mempersulit para pengembang untuk menemukan penyebab masalah. Untuk membantu mereka, kita akan melakukan apa yang disebut dengan backtrace. Backtrace berjalan mundur melewati semua fungsi yang ada ketika program diekseskusi, sampai ke fungsi yang rusak. Fungsi yang kembali (tanpa menyebabkan crash) tidak akan ditampilkan. Untuk mendapatkan backtrace, pada prompt (gdb), ketik bt. Anda akan mendapatkan hasil seperti ini:

Daftar Kode 2.8: Backtrace program

(gdb) bt
#0  0xb7ec6dc0 in strcpy () from /lib/libc.so.6
#1  0x0804838c in run_it ()
#2  0x080483ba in main ()

Anda bisa lihat pola trace dengan jelas. main() dipanggil pertama kali, diikuti oleh run_it(), dan di dalam run_it() terdapat strcpy() yang rusak. informasi seperti ini dapat membantu para pengembang untuk mengatasi masalah. Ada beberapa pengecualian dari output. Pertama ialah lupa mengaktifkan simbol debug dengan FEATURES="nostrip". Tanpa simbol debug, output akan terlihat seperti berikut:

Daftar Kode 2.9: Backtrace program tanpa simbol debug

(gdb) bt
#0  0xb7e2cdc0 in strcpy () from /lib/libc.so.6
#1  0x0804838c in ?? ()
#2  0xbfd19510 in ?? ()
#3  0x00000000 in ?? ()
#4  0x00000000 in ?? ()
#5  0xb7eef148 in libgcc_s_personality () from /lib/libc.so.6
#6  0x080482ed in ?? ()
#7  0x080495b0 in ?? ()
#8  0xbfd19528 in ?? ()
#9  0xb7dd73b8 in __guard_setup () from /lib/libc.so.6
#10 0xb7dd742d in __guard_setup () from /lib/libc.so.6
#11 0x00000006 in ?? ()
#12 0xbfd19548 in ?? ()
#13 0x080483ba in ?? ()
#14 0x00000000 in ?? ()
#15 0x00000000 in ?? ()
#16 0xb7deebcc in __new_exitfn () from /lib/libc.so.6
#17 0x00000000 in ?? ()
#18 0xbfd19560 in ?? ()
#19 0xb7ef017c in nullserv () from /lib/libc.so.6
#20 0xb7dd6f37 in __libc_start_main () from /lib/libc.so.6
#21 0x00000001 in ?? ()
#22 0xbfd195d4 in ?? ()
#23 0xbfd195dc in ?? ()
#24 0x08048201 in ?? ()

Backtrace ini berisi banyak sekali tanda ??. Ini disebabkan oleh tidak adanya simbol debug, gdb tidak dapat mengetahui bagaimana program tersebut dijalankan. Jadi, sangat penting untuk tidak menghapus simbol debug. Sekarang mari kita lihat bagaimana output yang akan diberikan dengan flag -ggdb diaktifkan:

Daftar Kode 2.10: Backtrace program dengan -ggdb3

(gdb) bt
#0  0xb7e4bdc0 in strcpy () from /lib/libc.so.6
#1  0x0804838c in run_it (input=0x0) at bad_code.c:7
#2  0x080483ba in main (argc=1, argv=0xbfd3a434) at bad_code.c:12

Di sini kita bisa melihat informasi yang lebih banyak lagi. Tidak hanya informasi fungsi yang ditampilkan, tetapi juga nomor baris dari file source. Metode ini adalah metode yang paling dianjurkan jika anda memiliki ruang harddisk yang cukup besar. Berikut ini adalah perbandingan antara ukuran file sebuah program dengan debug, strip dan -ggdb diaktifkan.

Daftar Kode 2.11: Perbandingan ukuran file dengan flag -ggdb diaktifkan

(simbol debug dihapus)
-rwxr-xr-x  1 chris users 3140  6/28 13:11 bad_code
(simbol debug tidak dihapus)
-rwxr-xr-x  1 chris users 6374  6/28 13:10 bad_code
(flag -ggdb diaktifkan)
-rwxr-xr-x  1 chris users 19552  6/28 13:11 bad_code

Seperti yang bisa anda lihat, -ggdb menambahkan sekitar 13178 byte dari file yang memiliki simbol debug. Namun begitu, seperti yang telah kita ketahui di atas, pertambahan ukuran file ini sangat berguna untuk mendapatkan informasi debug tambahan bagi para pengembang. Backtrace dapat disimpan ke sebuah file dengan cara menyalinnya dari terminal (anda dapat menggunakan gpm pada terminal yang tidak berbasis X, bacalah panduan gpm untuk mengetahui caranya). Setelah kita selesai menggunakan gdb, sekarang kita boleh menutupnya.

Daftar Kode 2.12: Menutup GDB

(gdb) quit
The program is running. Exit anyway? (y or n) y
$

Dengan gdb, kami harap anda dapat membuat laporan bug yang lebih baik. Bagaimanapun juga, ada beberapa jenis error lain yang dapat menyebabkan program gagal ketika dijalankan. Salah satu sebabnya adalah melalui cara akses file yang tidak benar. Kita dapat menemukannya dengan sebuah program kecil yang bagus bernama strace.

3.  Menemukan kesalahan akses file dengan strace

Pendahuluan

Terkadang sebuah program menggunakan file untuk mendapatkan informasi pengaturan, akses ke hardware, atau menulis log. Namun tidak jarang program tersebut mengakses file dengan cara yang tidak benar. Sebuah tool bernama strace diciptakan untuk membantu kita mengatasi masalah ini. strace mencari jejak panggilan sistem termasuk penggilan yang menggunakan memori dan file. Sebagai contoh, kita akan menggunakan program "foobar2" yang merupakan update dari "foobar". Ketika anda berpindah ke foobar2, semua file konfigurasi anda hilang! Pada foobar versi 1, anda telah membuat file konfigurasinya yang diberi nama "foo", tetapi sekarang pada versi 2, program ini menggunakan file konfigurasi "bar".

Daftar Kode 3.1: Foobar2 dengan konfigurasi yang salah

$ ./foobar2
Configuration says: bar

File konfigurasi kita yang sebelumnya diatur ke foo, jadi mari kita gunakan strace untuk mengetahui apa yang terjadi.

Menggunakan strace untuk melacak masalah

Kita perintahkan strace untuk me-log hasil dari panggilan sistem dengan menjalankan strace dengan argumen -o[file]. Mari kita gunakan perintah ini pada foobar2.

Daftar Kode 3.2: Menjalankan foobar2 melalui strace

# strace -ostrace.log ./foobar2

Perintah ini akan menciptakan sebuah file bernama strace.log pada direktori sekarang. Kita akan memeriksa file ini, berikut adalah bagian penting dari file tersebut.

Daftar Kode 3.3: Isi log strace

open(".foobar2/config", O_RDONLY)       = 3
read(3, "bar", 3)                       = 3

Aha! Jadi ini dia masalahnya. Ada yang telah memindahkan direktori konfigurasi yang tadinya adalah .foobar ke .foobar2. Kita juga melihat bahwa program telah membaca "bar" seperti yang sudah seharusnya dilakukan. Pada kasus ini, kita perlu menganjurkan pengurus ebuild untuk memberikan peringatan tentang perubahan ini. Tetapi untuk sekarang, kita dapat menyalin file konfigurasi dari .foobar dan merubahnya untuk mendapatkan hasil yang benar.

Kesimpulan

Sekarang kita telah mengetahui cara menemukan bug run time. Bug-bug ini terbukti sangat menjengkelkan ketika anda mencoba untuk menjalankan program. Namun begitu, error run time tidak seberapa menjengkelkan dibandingkan dengan program yang tidak dapat dikompilasi sama sekali. Mari kita lihat cara menangani kegagalan emerge.

4.  Menangani kegagalan emerge

Pendahuluan

Kegagalan emerge, seperti pada contoh sebelumnya, bisa menjadi sumber frustasi kebanyakan pengguna. Melaporkan kegagalan ini sangat penting untuk menjaga kualitas Gentoo. Sekarang mari kita lihat contoh ebuild foobar2, yang berisi beberapa kegagalan ketika dikompilasi.

Evaluasi kegagalan emerge

Berikut ini adalah contoh kegagalan sederhana:

Daftar Kode 4.1: Kegagalan emerge

gcc -D__TEST__ -D__GNU__ -D__LINUX__ -L/usr/lib -I/usr/include -L/usr/lib/nspr/ -I/usr/include/fmod   -c -o foobar2-7.o foobar2-7.c
gcc -D__TEST__ -D__GNU__ -D__LINUX__ -L/usr/lib -I/usr/include -L/usr/lib/nspr/ -I/usr/include/fmod   -c -o foobar2-8.o foobar2-8.c
gcc -D__TEST__ -D__GNU__ -D__LINUX__ -L/usr/lib -I/usr/include -L/usr/lib/nspr/ -I/usr/include/fmod   -c -o foobar2-9.o foobar2-9.c
gcc -D__TEST__ -D__GNU__ -D__LINUX__ -L/usr/lib -I/usr/include -L/usr/lib/nspr/ -I/usr/include/fmod   -c -o foobar2.o foobar2.c
foobar2.c:1:17: ogg.h: No such file or directory
make: *** [foobar2.o] Error 1

!!! ERROR: sys-apps/foobar2-1.0 failed.
!!! Function src_compile, Line 19, Exitcode 2
!!! Make failed!
!!! If you need support, post the topmost build error, NOT this status message

Program ini dikompilasi dengan mulus sampai tiba-tiba berhenti dan memberikan pesan error. Error seperti ini bisa dibagi menjadi tiga bagian, pesan kompilasi, error kompilasi, dan pesan error emerge seperti berikut:

Daftar Kode 4.2: Bagian-bagian error

(Pesan-pesan kompilasi)
gcc -D__TEST__ -D__GNU__ -D__LINUX__ -L/usr/lib -I/usr/include -L/usr/lib/nspr/ -I/usr/include/fmod   -c -o foobar2-7.o foobar2-7.c
gcc -D__TEST__ -D__GNU__ -D__LINUX__ -L/usr/lib -I/usr/include -L/usr/lib/nspr/ -I/usr/include/fmod   -c -o foobar2-8.o foobar2-8.c
gcc -D__TEST__ -D__GNU__ -D__LINUX__ -L/usr/lib -I/usr/include -L/usr/lib/nspr/ -I/usr/include/fmod   -c -o foobar2-9.o foobar2-9.c
gcc -D__TEST__ -D__GNU__ -D__LINUX__ -L/usr/lib -I/usr/include -L/usr/lib/nspr/ -I/usr/include/fmod   -c -o foobar2.o foobar2.c

(Eror kompilasi)
foobar2.c:1:17: ogg.h: No such file or directory
make: *** [foobar2.o] Error 1

(Pesan error emerge)
!!! ERROR: sys-apps/foobar2-1.0 failed.
!!! Function src_compile, Line 19, Exitcode 2
!!! Make failed!
!!! If you need support, post the topmost build error, NOT this status message

Pesan kompilasi adalah pesan yang membawa ke error. Biasanya, baik sekali untuk mengikutsertakan 10 baris terakhir dari informasi kompilasi agar para pengembang mengetahui di bagian mana kompilasi mengalami kegagalan.

Error "make" adalah error yang sebenarnya dan informasi inilah yang dibutuhkan oleh para pengembang. Ketika anda melihat "make: ***", di sinilah biasanya error terjadi. Pada keadaan normal, anda dapat menyalin 10 baris untuk dikirimkan kepada para pengembang. Namun, cara ini tidak selalu dapat digunakan dan kita akan melihat cara alternatifnya sebentar lagi.

Pesan error emerge adalah apa yang dimuntahkan oleh emerge sebagai error. Terkadang, pesan ini juga berisi informasi penting. Tetapi banyak pengguna yang melakukan kesalahan dengan hanya memberikan pesan error emerge. Pesan ini tidak berguna tanpa adanya pesan error "make" dan informasi kompilasi agar para pengembang dapat mengetahui aplikasi apa dan versi berapa yang gagal dikompilasi. Sebagai catatan, "make" umum digunakan untuk proses kompilasi program (tetapi tidak selalu). Jika anda tidak dapat menemukan error "make ***", maka salinlah 20 baris terakhir sebelum pesan error emerge. Sekarang anggaplah pesan errornya sangat banyak. 10 baris tidak cukup untuk mengetahui penyebabnya. Di sinilah manfaat dari PORT_LOGDIR.

emerge dan PORT_LOGDIR

PORT_LOGDIR adalah variabel portage yang menentukan direktori log untuk berbagai log emerge. Mari kita lihat apa saja yang diperlukan untuk ini. Pertama, jalankan emerge dengan sebelumnya telah mengatur PORT_LOGDIR ke lokasi yang anda sukai. Anggaplah kita memilih /var/log/portage. Kita akan menggunakannya sebagai direktori log:

Catatan: Pada pengaturan default, /var/log/portage tidak diciptakan, dan kemungkinan besar anda perlu menciptakannya sendiri. Jika tidak, portage akan gagal ketika mencoba menulis log.

Daftar Kode 4.3: Meng-emerge dengan PORT_LOGDIR

# PORT_LOGDIR=/var/log/portage emerge foobar2

Sekarang emerge gagal lagi. Tetapi kali ini kita mendapatkan log yang dapat kita lampirkan ketika membuat laporan bug nantinya. Mari kita lihat isi direktori log kita.

Daftar Kode 4.4: Isi PORT_LOGDIR

# ls -la /var/log/portage
total 16
drwxrws---   2 root root 4096 Jun 30 10:08 .
drwxr-xr-x  15 root root 4096 Jun 30 10:08 ..
-rw-r--r--   1 root root 7390 Jun 30 10:09 2115-foobar2-1.0.log

File log berformat [counter]-[nama paket]-[version].log. Counter adalah variabel khusus yang berguna untuk menyatakan paket ini sebagai paket ke-n yang telah anda emerge. Hal ini untuk mencegah duplikasi log. Dengan melihat isi log, kita akan mengetahui seluruh proses emerge. Log ini dapat kita lampirkan nanti ketika kita melaporkan bug. Tetapi sebelumnya, kita perlu memastikan dulu bahwa belum ada pengguna lain yang telah melaporkan masalah ini. Berikut adalah cara mencari bug.

5.  Mencari bug di Bugzilla

Pendahuluan

Bugzilla adalah apa yang digunakan oleh Gentoo untuk menangani bug. Bugzilla Gentoo dapat dicapai melalui HTTPS dan HTTP. HTTPS tersedia untuk anda yang berada di jaringan yang tidak aman atau anda yang penakut :). Untuk konsistensi, kita akan menggunakan versi HTTPS pada contoh. Masuklah ke Bug Gentoo untuk mengetahui tampilannya.

Salah satu hal yang membuat para pengembang frustasi adalah adanya duplikasi bug. Ini dapat menyia-nyiakan waktu mereka yang sebenarnya dapat digunakan untuk memperbaiki bug lain yang lebih penting. Hal ini dapat kita hindari dengan menggunakan metode pencarian sederhana. Jadi sekarang kita akan mencari bug untuk mengetahui apakah bug yang ingin kita laporkan sudah ada. Untuk contoh ini, kita akan menggunakan error emerge xclass yang tadi kita gunakan.

Daftar Kode 5.1: Error emerge xclass

/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/include/g++-v3/backward/backward_warning.h:32:2:
warning: #warning This file includes at least one deprecated or antiquated
header. Please consider using one of the 32 headers found in section 17.4.1.2 of
the C++ standard. Examples include substituting the <X> header for the <X.h>
header for C++ includes, or <sstream> instead of the deprecated header
<strstream.h>. To disable this warning use -Wno-deprecated.
In file included from main.cc:40:
menudef.h:55: error: brace-enclosed initializer used to initialize `
OXPopupMenu*'
menudef.h:62: error: brace-enclosed initializer used to initialize `
OXPopupMenu*'
menudef.h:70: error: brace-enclosed initializer used to initialize `
OXPopupMenu*'
menudef.h:78: error: brace-enclosed initializer used to initialize `
OXPopupMenu*'
main.cc: In member function `void OXMain::DoOpen()':
main.cc:323: warning: unused variable `FILE*fp'
main.cc: In member function `void OXMain::DoSave(char*)':
main.cc:337: warning: unused variable `FILE*fp'
make[1]: *** [main.o] Error 1
make[1]: Leaving directory
`/var/tmp/portage/xclass-0.7.4/work/xclass-0.7.4/example-app'
make: *** [shared] Error 2

!!! ERROR: x11-libs/xclass-0.7.4 failed.
!!! Function src_compile, Line 29, Exitcode 2
!!! 'emake shared' failed

Untuk memulai pencarian, masuklah ke Website Bugzilla.


Gambar 5.1: Website Bugzilla

Fig. 1

Klik "Query Existing bug reports". Kita melakukan ini karena biasanya, pencarian dasar memberikan hasil yang terlalu banyak dan menyebabkan calon pelapor malas untuk memeriksa semua hasil pencarian. Sekarang kita telah berada di halaman selanjutnya:


Gambar 5.2: Halaman Pencarian Bugzilla

Fig. 2

Catatan: Jika anda sebelumnya pernah menggunakan "Advanced Search", kemungkinan besar anda akan langsung dibawa ke halaman tersebut sekarang.

Lanjutkan dengan meng-klik link "Advanced Search" untuk memasuki halaman "Advanced Search"


Gambar 5.3: Halaman Advanced Search

Fig. 3

Beginilah tampilan halaman Advanced Search. Walaupun kelihatannya memusingkan, kita akan berfokus pada beberapa bagian penting untuk lebih memperkecil hasil pencarian bugzilla.


Gambar 5.4: Isi

Fig. 4

Bagian pertama adalah ringkasan bug. Di sini kita akan mencantukan nama bug dari paket yang bermasalah. Jika bugzie tidak memberikan hasil apa-apa, coba hapus nama paket, kalau-kalau ada pelapor yang tidak mencantumkan nama paket (biasanya jarang sekali terjadi, tetapi kami pernah mendapatkan laporan bug yang aneh seperti ini).

Product, Component, dan Version harus selalu dibiarkan ke default. Ini agar pencarian kita tidak terlalu spesifik sehingga melewatkan semua bug.

Comment adalah bagian terpenting. Gunakan bagian ini untuk mencantumkan pesan error. Pada dasarnya, anda tidak perlu menggunakan kata-kata seperti pada permulaan error kompilasi, cari baris sebelumnya yang menyatakan error yang sebenarnya. Juga, anda mungkin perlu membuang tanda-tanda baca agar bugzie tidak menginterpretasikan komentar dengan cara yang salah. Contoh dari error emerge xclass:

Daftar Kode 5.2: Isi kolom komentar

menudef.h:78: error: brace-enclosed initializer used to initialize `OXPopupMenu'
(Hapus tanda kutip' ')
menudef.h 78 error brace-enclosed initializer used to initialize OXPopupMenu

Komentar di atas sudah cukup spesifik untuk menemukan bug yang mirip tanpa harus memeriksa semua bug yang berhubungan dengan kegagalan kompilasi xclass.

URI, Whiteboard, dan Keywords boleh dibiarkan kosong. Apa yang telah kita cantumkan sejauh ini sudah cukup untuk mencari bug. Mari kita lihat apa saja yang telah kita isi.


Gambar 5.5: Formulir Pencarian yang Telah Dilengkapi

Fig. 5

Sekarang klik tombol "Search" dan inilah hasilnya....


Gambar 5.6: Hasil Pencarian

Fig. 6

Hanya 2 Bug! Ini lebih enak untuk dibaca. Klik bug pertama untuk memeriksanya, dan hampir pasti bahwa ini adalah bug yang kita cari.


Gambar 5.7: Bug Ditemukan

Fig. 7

Bukan saja bug ini adalah bug yang kita cari, tetapi bug ini telah diperbaiki. Dengan membaca komentar terakhir, kita dapat mengetahui solusinya dan bagaimana cara mengatasi permasalahan. Sekarang, mari kita lihat apa yang terjadi jika kita tidak menggunakan "Advanced Search".


Gambar 5.8: Hasil Pencarin Dasar

Fig. 8

Lebih banyak 4 bug! Ini bisa lebih parah jika kita mencari paket lain yang lebih besar. Namun dengan tool sederhana ini, kita dapat dengan mudah memperuncing pencarian dan menemukan bug yang kita cari.

Kesimpulan

Katakanlah anda telah mencari dan terus mencari tetapi masih belum menemukannya. Ini berarti anda telah menemukan bug baru. Mari kita lihat proses pembuatan laporan bug.

6.  Melaporkan Bug

Pendahuluan

Pada bab ini, kita akan mempelajari cara menggunakan Bugzilla untuk melaporkan bug baru. Masuklah ke Bug Gentoo dan...


Gambar 6.1: Website Bugzilla

Fig. 1

Klik "Report a Bug - Using the guided format".


Gambar 6.2: Pemilihan Produk

Fig. 2

Seperti yang bisa anda lihat, kami telah membuat penekanan agar bug anda dimasukkan ke tempat yang benar. "Gentoo Linux" adalah tempat hampir semua bug dimasukkan.

Walaupun begitu, masih banyak yang memasukkan bug ke pengembangan portage (dengan beranggapan bahwa tim portage menangani bug dari isi pohon portage) atau infra (dengan anggapan infra memiliki akses ke mirror dan rsync sehingga dapat memperbaikinya dengan cepat). Bukan begitu yang benar.

Konsepsi salah yang lainnya terjadi pada bug Dokumentasi. Misalnya, ketika seorang pengguna menemukan bug di Dokumentasi Catalyst, ia menempatkan bug tersebut dalam kategori "Doc-user" yang nantinya akan diserahkan kepada GDP, padahal seharusnya diserahkan kepada tim Release Engineering. Aturannya, hanya dokumentasi yang berada di http://www.gentoo.org/doc/* yang merupakan bagian dari GDP. Dokumentasi lain yang berada di http://www.gentoo.org/proj/* merupakan bagian dari timnya masing-masing.

Catatan: Kami lebih senang melihat bug yang bukan merupakan produk Gentoo Linux dimasukkan ke dalam produk Gentoo Linux daripada melihat bug yang merupakan produk Gentoo Linux dimasukkan ke dalam produk lain. Walaupun kedua-duanya salah, bentuk yang pertama lebih dapat diterima dan dimengerti (kecuali bug website... kami mungkin tidak terlalu suka).

Bug kita akan dimasukkan ke dalam produk Gentoo Linux karena merupakan bug ebuild. Kita akan beranjak ke sana dan kita akan disambut dengan beberapa langkah dalam proses melaporkan bug. Mari kita lanjutkan dengan Langkah 1...


Gambar 6.3: Guided Format Langkah 1

Fig. 3

Langkah pertama di sini sangatlah penting (sebagaimana yang dikatakan oleh tulisan merah). Di sinilah tempat anda mencari tahu apakah ada pengguna lain yang telah melaporkan bug yang sama atau belum. Jika anda melewatkan bug ini dan bug yang akan anda laporkan telah ada, bug anda akan ditandai DUPLICATE karena dapate membuang-buang waktu dengan percuma. Sekarang kita masuk ke langkah 2, tempat kita memberikan informasi.

Informasi yang Diperlukan


Gambar 6.4: Informasi Dasar

Fig. 4

Mari kita lihat satu persatu dengan teliti.

  • Pertama, "Product". Product akan mengkategorikan bug ke wilayah tertentu dari Gentoo seperti Bugzilla (untuk bug yang terkait dengan bugs.gentoo.org), Docs-user (untuk Dokumentasi Pengguna) atau Gentoo Linux (untuk ebuild dan yang sejenisnya).
  • "Component" adalah lokasi terjadinya error, lebih spesifik lagi, bagian dari produk yang memiliki bug. Ini akan mempermudah klasifikasi.
  • "Hardware platform" adalah arsitektur yang anda gunakan. Jika anda menggunakan SPARC, anda harus memilih SPARC.
  • "Operating System" adalah sistem operasi yang anda gunakan. Karena Gentoo dianggap sebagai sebuah "Meta-distribution", Gentoo dapat digunakan pada sistem operasi selain Linux.

Jadi, untuk contoh bug ini, kita memiliki:

  • Product - Gentoo Linux (Karena ini adalah masalah ebuild)
  • Component - Application (Ini adalah kesalahan dari aplikasi, foobar2)
  • Hardware Platform - All (Error ini terjadi pada semua arsitektur)
  • Operation System - All (Bisa saja terjadi pada semua jenis sistem)

Gambar 6.5: Informasi Dasar yang Telah Dilengkapi

Fig. 5

  • "Build Identifier" pada dasarnya adalah "User Agent" dari browser yang dipakai untuk melaporkan bug (untuk tujuan pembuatan log). Anda boleh membiarkannya.
  • "URL" merupakan opsional dan digunakan untuk menunjukkan informasi terkait yang berada di situs lain (bugzilla pusat, catatan rilis pada website pusat, dll.). Anda sebaiknya tidak menggunakan URL yang menunjuk ke pastebin untuk mencantumkan pesan error, log, output dari emerge --info, screenshot, atau informasi sejenisnya. Namun, lampirkan semua informasi tersebut (jika diperlukan) pada bug.
  • Pada "Summary", anda harus mencantumkan kategori, nama, dan nomor versi paket.

Mencantumkan kategori pada kolom "Summary" tidaklah terlalu penting tetapi dianjurkan. Namun jika anda tidak mencantumkan nama paket, kami tidak akan dapat mengerti bug yang anda laporkan dan kami akan menanyakannya pada anda nanti. Nomor versi paket penting untuk pengguna lain yang melakukan pencarian bug. Jika ada 20 orang yang melaporkan bug tanpa mencantumkan nomor versi, bagaimana orang lain yang mencari bug dapat mengetahui jika bug yang ingin ia laporkan telah ada? Ia harus memeriksa setiap laporan bug yang ditemukan, yang sebenarnya tidak terlalu sulit. Tetapi bagaimana jika, katakanlah, ada 200 bug... tidak mudah kan? Setelah mengisi semua informasi paket, anda perlu memberikan penjelasan singkat tentang apa yang terjadi. Berikut ini adalah contohnya:


Gambar 6.6: Summary

Fig. 6

Aturan-aturan yang sederhana ini dapat mempermudah penanganan bug. Berikutnya adalah "Details". Di sini kita berikan informasi tentang bug, seperti pada contoh:


Gambar 6.7: Details

Fig. 7

Sekarang para pengembang mengerti mengapa anda melaporkan bug. Mereka kemudian dapat me-reproduce bug tersebut. Reproduksibilitas dapat memberitahukan kepada kita seberapa sering kita dapat menyebabkan masalah ini terjadi. Pada contoh berikut, kita dapat me-reproduce bug tersebut kapan saja dengan menjalankan foobar2. Mari kita berikan informasi ini.


Gambar 6.8: Reproduction

Fig. 8

Kita telah menjelaskan bagaimana kita menemukan bug. Langkah selanjutnya adalah menjelaskan hasil yang kita dapatkan dan apa yang menurut kita seharusnya terjadi.


Gambar 6.9: Hasil

Fig. 9

Selanjutnya kita dapat memberikan informasi tambahan. Ini bisa berupa jejak, bagian-bagian dari log (karena biasanya log sangat besar dan tidak diperlukan semuanya), dan yang lebih penting adalah output emerge --info anda. Berikut ini adalah contohnya.


Gambar 6.10: Informasi Tambahan

Fig. 10

Terakhir kita pilih "severity"/tingkatan bug. Tolong perhatikan baik-baik. Pada kebanyakan kasus, anda boleh saja membiarkannya seperti apa adanya agar orang lain dapat menaikkan/menurunkannya. Namun, jika anda menaikkannya, tolong pastikan anda telah membacanya dengan seksama dan pastikan anda tidak membuat kesalahan. Berikut ini adalah beberapa tingkatan bug:

  • "Blocker" - Program tidak dapat diinstal atau menjadi gangguan besar di sistem. Sebagai contoh, masalah baselayout yang mencegah sistem untuk boot.
  • "Critical" - Program memiliki banyak kebocoran memori atau data ketika dijalankan. Lagi-lagi, sebuah program penting seperti net-tools yang gagal dikompilasi dapat diberikan label "critical". Masalah ini tidak akan mencegah sistem anda untuk boot tetapi sangat penting untuk pekerjaan sehari-hari.
  • "Major" - Program crash, tetapi tidak menyebabkan kerusakan berarti pada sistem atau menghilangkan data.
  • "Minor" - Program crash dan sudah ada cara untuk mencegahnya.
  • "Normal" - Default. Jika anda tidak yakin, gunakanlah pilihan ini kecuali ada perubahan lain yang terjadi, untuk itu bacalah informasi di bawah ini.
  • "Trivial" - Hal-hal seperti penulisan kata yang salah atau pembersihan spasi yang tidak perlu.
  • "Enhancement" - Permintaan untuk pengaktifan fitur baru pada sebuah program, atau lebih spesifiknya, ebuild baru.

Gambar 6.11: Severity

Fig. 11

Di sini, kita akan memilih "Normal".

Sekarang kita dapat mengirimkan laporan bug dengan menekan tombol "Submit Bug Report". Anda akan melihat sebuah bug baru ditampilkan. Lihatlah Bug 97561 untuk mengetahui hasilnya. Kita telah melaporkan bug! Sekarang mari kita lihat bagaimana bug ini ditangani.

Permintaan "Zero-day bump"

Sejauh ini, kami telah menunjukkan cara mengisi laporan bug. Sekarang mari kita lihat apa yang seharusnya tidak kita lakukan.

Dengan anggapan anda sedang semangat sekali mengikuti jadwal pada pusat sebuah proyek, dan ketika anda mengunjungi website mereka, anda mengetahui bahwa mereka baru saja merilis versi baru beberapa menit yang lalu! Kebanyakan pengguna akan buru-buru melaporkan hal ini di bugzie; "Tolong buatkan ebuild untuk versi baru dan masukkan ke Portage", dsb. Bagaimanapun juga, anda seharusnya tidak melakukan hal ini. Permintaan semacam ini disebut sebagai permintaan zero-day (atau 0-day) karena dibuat pada hari yang sama dengan dirilisnya versi baru.

Penting: Silahkan tunggu paling tidak 48 jam sebelum anda melaporkan adanya rilis baru di bugzie. Juga, anda harus memeriksa bugzilla terlebih dahulu sebelum membuat permintaan untuk memastikan bahwa belum ada yang melaporkannya, atau bahwa para pengembang Gentoo belum mengetahui rilis tersebut.

Mengapa harus menunggu? Pertama, rasanya sangat tidak sopan untuk memaksa para pengembang Gentoo untuk menambahkan rilis baru yang baru saja keluar 15 menit yang lalu. Permintaan anda bisa saja ditandai INVALID atau LATER, karena para pengembang sedang sibuk membereskan urusan penting lainnya. Kedua, para pengembang biasanya sudah lebih dahulu mengetahui akan adanya rilis baru, karena mereka harus mengikuti perkembangan di pusat proyek. Mereka sudah tahu bahwa rilis baru telah ada. Pada kebanyakan kasus, mereka mungkin sudah membuka bug baru, atau bahkan telah menambahkannya ke Portage sebagai paket yang di-mask.

Bersikap bijaklah ketika anda menguji dan membuat permintaan untuk versi baru dari sebuah paket. Lakukan pencarian di bugzie sebelum anda membuat permintaan -- apakah sudah ada bug yang dibuka? Apakah anda sudah melakukan sync; apakah versi baru tersebut sudah ditambahkan di Portage? Apakah versi tersebut benar-benar telah dirilis oleh pusat? Jika memang versi tersebut telah dirilis beberapa hari yang lalu dan belum ada permintaan di bugzie (juga belum ada di Portage), maka anda boleh membuka bug baru. Pastikan untuk memberi informasi bahwa versi baru tersebut dapat dikompilasi dengan sukses dan dapat dijalankan tanpa masalah pada arsitektur anda. Informasi lain yang bisa membantu akan sangat diterima.

Ingin melihat versi terbaru dari program favorit anda di Portage? Buatlah laporan bug yang bagus.

7.  Bekerja Dengan Bug Anda

Dengan memperhatikan bug, kita dapat melihat informasi yang kita berikan tadi. Anda juga akan melihat bahwa bug tersebut telah diserahkan kepada bug-wranglers@gentoo.org. Ini adalah lokasi default untuk bug komponen Aplikasi.


Gambar 7.1: Informasi Dasar Bug Baru

Fig. 1

Rincian tentang bug yang tadi kita berikan juga telah tercantum.


Gambar 7.2: Rincian Bug Baru

Fig. 2

Bagaimanapun juga, bug-wranglers (biasanya) tidak akan memperbaiki bug kita, jadi kita akan menyerahkan bug tersebut ke pihak lain yang dapat memperbaikinya (anda boleh membiarkan bug-wrangler melakukannya). Untuk ini, kita akan menggunakan file metadata.xml dari paket tersebut. Biasanya anda dapat menemukannya di /usr/portage/kategori/paket/metadata.xml. Berikut ini adalah metadata dari foobar2.

Catatan: Anda harus menjadi pelapor bug atau anggota dari kelompok tertentu di Bugzilla Gentoo (seperti para pengembang) untuk dapat melakukannya.

Daftar Kode 7.1: metadata.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<herd>chriswhite</herd>
<maintainer>
<email>chriswhite@gentoo.org</email>
<name>Chris White</name>
</maintainer>
<longdescription lang="en">
Foobar2 is a package that uses a configuration file to display a word.
</longdescription>
</pkgmetadata>

Perhatikan bagian maintainer. Bagian ini berisi daftar para pengurus paket, yang pada contoh ini adalah penulis sendiri, Chris White. Email yang tercantum adalah chriswhite@gentoo.org. Kita akan menggunakannya untuk menyerahkan bug. Untuk melakukannya, klik balon di samping "Reassign bug to", lalu isi alamat email.

Catatan: Bug untuk paket yang tidak memiliki file metadata.xml harus diserahakan kepada maintainer-needed@gentoo.org dan paket yang memerlukan pengurus dari pengembang Gentoo harus diserahkan kepada maintainer-wanted@gentoo.org.


Gambar 7.3: Penyerahan Bug

Fig. 3

Selanjutnya tekan tombol "Commit" agar perubahan diterapkan. Sekarang bug telah diserahkan kepada penulis. Setelah itu anda akan melihat bahwa penulis telah merespon bug anda (biasanya melalui email). Penulis telah mengatakan bahwa penulis ingin melihat log untuk mengetahui cara program membaca file konfigurasinya. Ikuti petunjuk yang tadi telah dijelaskan tentang penggunaan strace untuk mendapatkan log. Sekarang anda harus melampirkannya pada laporan bug. Untuk melakukannya, klik "Create A New Attachment".


Gambar 7.4: Lampiran Baru

Fig. 4

Sekarang kita perlu melampirkan log. Mari kita bahas satu persatu.

  • File - Ini adalah lokasi file di komputer anda. Pada contoh ini, lokasi strace.log. Anda dapat menggunakan tombol "Browse..." untuk memilih file, atau langsung memasukkan path ke kolom yang tersedia.
  • Description - Penjelasan singkat tentang lampiran. Karena kita akan melampirkan strace.log, cantumkan saja nama file-nya.
  • Content Type - Tipe dari file yang kita lampirkan.
  • Obsoletes - Jika ada file yang telah dilampirkan ke bug sebelum file yang akan anda lampirkan, anda memiliki pilihan untuk menjadikan file lama usang dengan adanya file yang baru. Karena kita belum pernah melampirkan apapun, kita biarkan saja.
  • Comment - Berikan komentar yang nantinya akan ditampilkan di bawah lampiran. Anda boleh memberikan penjelasan tentang lampiran anda di sini jika diperlukan.

Untuk "Content Type", berikut ini adalah sedikit penjelasannya. Anda dapat memberikan tanda cek pada kotak cek "patch" jika anda melampirkan tambalan/patch. Jika tidak, anda harus memerintahkan bugzie untuk meng-"auto-detect" tipe file (tidak dianjurkan). Pilihan lain adalah dengan menggunakan "select from list", yang paling sering digunakan. Gunakan teks biasa (text/plain) untuk hampir semua lampiran kecuali file binari seperti file gambar (yang boleh menggunakan image/gif, image/jpeg atau image/png, tergantung tipe) atau file terkompresi seperti .tar.bz2 yang harus menggunakan application/octet-stream sebagai "content type".


Gambar 7.5: Informasi Lampiran Baru Selesai Dilengkapi

Fig. 5

Kita kirimkan strace.log dan sekarang telah terlampir pada laporan bug.


Gambar 7.6: Log strace Terlampir

Fig. 6

Telah dijelaskan tadi bahwa terkadang ebuild akan meminta anda untuk melampirkan file yang disebutkan pada pesan error emerge. Berikut ini contohnya:

Daftar Kode 7.2: Contoh Permintaan File yang Akan Dilampirkan

configure: error: PNG support requires ZLIB. Use --with-zlib-dir=<DIR>

!!! Please attach the config.log to your bug report:
!!! /var/tmp/portage/php-5.0.3-r1/work/php-5.0.3/config.log

!!! ERROR: dev-php/php-5.0.3-r1 failed.
!!! Function econf, Line 485, Exitcode 0
!!! econf failed
!!! If you need support, post the topmost build error, NOT this status message.

Tolong lampirkan file yang disebutkan seperti pesan di atas pada laporan bug anda.

Terkadang seorang pengembang akan meminta anda untuk melampirkan file "diff" atau file patch. File diff standar bisa didaptkan dengan:

Daftar Kode 7.3: Pembuatan Diff Standar

$ cp file file.old
$ nano file
$ diff -u file.old file

Untuk file source C/C++, flag -p perlu ditambahkan untuk menunjukkan penggilan sistem apa yang diterapkan oleh diff.

Daftar Kode 7.4: Men-diff source C/C++

$ cp file.c file.c.old
$ nano file.c
$ diff -up file.c.old file.c

Tim dokumentasi memerlukan kombinasi flag -Nt dan -u. Ini ada hubungannya dengan ekspansi tab. Anda dapat membuat diff seperti ini dengan:

Daftar Kode 7.5: Diff dokumentasi

$ cp file.xml file.xml.old
$ nano file.xml
$ diff -Nut file.xml.old file.xml

Diff anda sudah jadi. Ketika anda melakukannya, katakanlah ada orang lain yang menemukan bug anda dengan melakukan pencarian di bugzie dan ingin terus mengikuti perkembangan bug. Ia dapat melakukannya dengan menambahkan alamat email-nya di kolom "Add CC" bug seperti pada contoh berikut. Anda juga dapat mengikuti perkembangan bug yang dilaporkan oleh orang lain dengan melakukan hal yang sama.


Gambar 7.7: Menambahkan Email ke CC:

Fig. 7

Catatan: Alamat email harus sudah terdaftar di Bugzilla Gentoo. Untuk menambahkan banyak alamat email, pisahkan alamat-alamat tersebut dengan koma atau spasi.

Setelah melalui semua proses ini, bug biasanya akan melalui berbagai proses pemberian status. Hal ini biasanya dilakukan oleh para pengembang Gentoo dan terkadang oleh sang pelapor. Berikut ini adalah berbagai status yang dapat diberikan kepada bug.

  • UNCONFIRMED - Anda biasanya akan jarang melihat status ini. Ini artinya sang pelapor telah membuka bug baru menggunakan metode advanced dan tidak yakin apakah bug yang ia laporkan benar-benar bug.
  • NEW - Bug yang baru dibuka dan dianggap masih baru.
  • ASSIGNED - Ketika orang yang anda serahkan bug kepadanya telah menerima bug, bug akan mendapatkan status ASSIGNED selama masalahnya sedang diatasi. Dengan begini anda dapat mengetahui bahwa mereka telah menerima bug anda sebagai bug sungguhan.
  • REOPENED - Seseorang sudah dapat mengatasi masalah pada bug tetapi anda merasa solusinya kurang bagus atau masalahnya masih ada. Di sini, anda boleh membuka kembali bug tersebut. Tolong jangan salah gunakan fungsi ini. Jika seorang pengembang telah menutup bug dua atau tiga kali, kemungkinan besar bug anda akan ditutup selamanya.
  • RESOLVED - Keputusan yang telah diambil terhadap bug. Biasanya akan menjadi FIXED dalam waktu singkat untuk menandakan bahwa bug telah diperbaiki dan masalah sudah dapat diatasi dengan berbagai solusi. Kita akan membahas ini sebentar lagi.
  • VERIFIED - Langkah yang diambil ketika bug dianggap benar. Ini biasanya dilakukan oleh QA.
  • CLOSED - Pada dasarnya berarti RIP (salam perpisahan) untuk bug dan bug tersebut akan dikubur di antara bug lain yang tidak pernah ada habisnya.

Setelah itu, kami dapat menemukan error pada log strace dan memperbaiki bug serta memberikan status RESOLVED FIXED dan menyatakan bahwa ada perubahan pada lokasi file konfigurasi, dan penulis kemudian meng-update ebuild untuk mencantumkan peringatan tentang hal tersebut. Bug sekarang telah teratasi, anda anda akan melihat yang seperti ini:


Gambar 7.8: Bug yang Telah Diperbaiki

Fig. 8

Di bawahnya, anda akan melihat:


Gambar 7.9: Pilihan-pilihan Bug

Fig. 9

Ini akan memberikan anda pilihan untuk membuka kembali bug jika anda menginginkannya (misalnya jika menurut pengembang masalah sudah teratasi tetapi menurut anda solusinya kurang bagus). Sekarang bug kita telah diperbaiki! Namun masih ada beberapa resolusi yang bisa terjadi, berikut daftar singkatnya:

  • FIXED - Bug telah diperbaiki, ikuti petunjuk yang ada untuk mengatasi masalah anda.
  • INVALID - Anda tidak mengikuti petunjuk yang ada, sehingga menyebabkan bug.
  • DUPLICATE - Anda tidak mengikuti petunjuk pada panduan ini sehingga melaporkan bug yang sudah ada.
  • WORKSFORME - Pengembang/orang yang diserahkan bug tidak dapat me-reproduce bug anda.
  • CANTFIX - Bug tidak dapat diperbaiki karena beberapa alasan. Alasan-alasan ini akan dicantumkan oleh orang yang menangani bug.
  • WONTFIX - Ini biasanya terjadi pada ebuild baru atau permintaan fitur. Pada dasarnya pengembang tidak ingin menambahkan fitur tertentu karena tidak diperlukan, adanya alternatif lain yang lebih bagus, atau karena fitur tersebut rusak. Terkadang anda akan diberikan solusi untuk mengatasi masalahnya.
  • UPSTREAM - Bug tidak dapat diperbaiki oleh tim pengembang Gentoo, dan telah meminta anda untuk melaporkannya kepada para pengembang pusat (orang-orang yang membuat program) untuk ditinjau. Pengembang pusat memiliki beberapa cara untuk menangani bug. Termasuk di antaranya adalah mislis, channel IRC, dan bahkan sistem pelaporan bug. Jika anda tidak tidak bagaimana melakukannya, cantumkan pertanyaan anda pada bug agar ada orang lain yang dapat memberikan petunjuk kepada anda.

Terkadang, sebelum bug dapat diatasi, seorang pengembang mungkin akan meminta anda untuk menguji sebuah ebuild yang telah diperbarui. Pada bab selanjutnya kita akan melihat cara menguji ebuild.

8.  Menguji Ebuild

Mendapatkan File Ebuild

Katakanlah anda telah melaporkan bug tentang error pada kompilasi foobar2. Sekarang seorang pengembang telah menemukan penyebab masalahnya dan meminta anda untuk menguji ebuild baru untuk memastikan apakah ebuild tersebut berfungsi dengan baik pada sistem anda.


Gambar 8.1: Permintaan Pengujian Ebuild

Fig. 1

Beberapa kosakata yang membingungkan digunakan di sini. Pertama, mari kita ketahui apa itu overlay. Overlay adalah sebuah direktori khusus seperti /usr/portage. Bedanya, ketika anda melakukan emerge --sync, file yang ada di dalamnya tidak akan dihapus. Beruntung sebuah direktori khusus /usr/local/portage telah diciptakan untuk tujuan tersebut. Mari kita lanjutkan dengan mengatur overlay portage kita di /etc/make.conf. Bukalah make.conf dengan editor dan tambahkan baris ini di bawahnya.

Daftar Kode 8.1: Pengaturan PORTDIR_OVERLAY

PORTDIR_OVERLAY="/usr/local/portage"

Sekarang kita akan menciptakan sebuah direktori untuk menempatkan file ebuild percobaan. Pada contoh ini, kita akan menempatkannya di sys-apps/foobar2. Anda tadi telah melihat bahwa komentar kedua mengatakan bahwa anda harus menciptakan direktori files untuk meletakkan patch. Direktori ini digunakan untuk menyimpan file-file lain yang diperlukan tetapi tidak diikutsertakan pada file source paket (tambalan, skrip init.d, dll). Direktori ini adalah subdirektori pada direktori paket dengan nama files. Sekarang ciptakanlah direktori tersebut.

Daftar Kode 8.2: Menyiapkan Direktori Kategori dan Paket

# mkdir -p /usr/local/portage/sys-apps/foobar2/files

Catatan: Opsi -p pada perintah mkdir menciptakan tidak hanya direktori yang anda inginkan, tetapi juga direktori di atasnya yang belum tersedia (pada contoh ini adalah sys-apps dan foobar2).

Baiklah, sekarang kita dapat mendownload file. Pertama, download ebuild dan file-file lain yang diperlukan. Download ebuild ke /usr/local/portage/sys-apps/foobar2, kemudian download patch ke /usr/local/portage/sys-apps/foobar2/files. Setelah itu, kita dapat menguji ebuild.

Menguji ebuild

Proses pembuatan ebuild yang dapat digunakan oleh emerge sangatlah mudah. Anda harus menciptakan file Manifest untuk ebuild. Ciptakan keduanya dengan perintah ebuild. Jalankan seperti pada contoh berikut:

Daftar Kode 8.3: Menciptakan file Manifest

# ebuild foobar2-1.0.ebuild digest
>>> Creating Manifest for /usr/local/portage/sys-apps/foobar2

Sekarang mari kita lihat apakah ebuild dapat digunakan.

Daftar Kode 8.4: Menguji dengan emerge -pv

# emerge -pv foobar2

These are the packages that I would merge, in order:

Calculating dependencies ...done!
[ebuild  N    ] sys-apps/foobar2-1.0  0 kB [1]

Total size of downloads: 0 kB
Portage overlays:
 [1] /usr/local/portage

Kelihatannya berhasil! Anda akan melihat [1] di samping baris [ebuild]. Tanda tersebut menunjuk ke /usr/local/portage, yakni overlay yang baru saja kita ciptakan. Sekarang kita lanjutkan dengan meng-emerge paket.

Daftar Kode 8.5: Hasil Emerge

# emerge foobar2
 Calculating dependencies ...done!
(info kompilasi dipotong)
>>> Unpacking foobar2-1.0.tar.bz2 to /var/tmp/portage/foobar2-1.0/work
 * Applying foobar2-1.0-Makefile.patch ...                                    [ ok ]
(info kompilasi dipotong)
>>> Merging sys-apps/foobar2-1.0 to /
>>> chris +sandbox(preinst)
--- /usr/
--- /usr/bin/
>>> /usr/bin/foobar2

Pada bagian pertama bisa kita lihat bahwa emerge dimulai dengan baik. Bagian kedua menunjukkan bahwa patch kita berhasil diterapkan dengan pesan status "[ok]" di sebelah kanannya. Bagian terakhir menyatakan bahwa program telah berhasil dikompilasi. Patch berhasil! Sekarang kita dapat memberitahukan pengembang bahwa patch mereka bagus, dan mereka dapat menerapkan perubahan ke portage.

Penutup

Bagian tadi menutup panduan bugzie. Penulis berharap anda dapat memanfaatkan panduan ini. Jika anda memiliki pertanyaan, komentar, atau ide untuk memperbagus panduan ini, kirimkan ke Chris White. Terima kasih kepada moreon yang telah mengingatkan penulis tentang flag -g dan error kompilasi, teman-teman di #gentoo-bugs atas bantuannya dalam penanganan bug, Griffon26 yang telah mengingatkan penulis tentang maintainer-needed, robbat2 atas saran-sarannya dan fox2mike atas perbaikan dokumen dan penambahan hal-hal yang diperlukan.



Print

Diperbarui 31 Januari 2008

Versi asli dari dokumen ini terakhir diupdate 27 Pebruari 2010

Rangkuman: Dokumen ini menjelaskan cara melaporkan bug yang baik dan benar dengan Bugzilla.

Chris White
Author

Shyam Mani
Editor

Dzikri Aziz
Translator

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.