/[gentoo]/xml/htdocs/doc/en/bugzilla-howto.xml
Gentoo

Contents of /xml/htdocs/doc/en/bugzilla-howto.xml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.15 - (show annotations) (download) (as text)
Thu Mar 5 12:02:04 2009 UTC (5 years, 9 months ago) by jkt
Branch: MAIN
Changes since 1.14: +9 -9 lines
File MIME type: application/xml
- we use -ggdb, not -ggdb3
- specifying -g -ggdb is redundant

1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE guide SYSTEM "/dtd/guide.dtd">
3 <!-- $Header: /var/cvsroot/gentoo/xml/htdocs/doc/en/bugzilla-howto.xml,v 1.14 2009/01/26 07:34:41 nightmorph Exp $ -->
4
5 <guide link="/doc/en/bugzilla-howto.xml">
6 <title>Gentoo Bug Reporting Guide</title>
7
8 <author title="Author">
9 <mail link="chriswhite@gentoo.org">Chris White</mail>
10 </author>
11 <author title="Editor">
12 <mail link="fox2mike@gentoo.org">Shyam Mani</mail>
13 </author>
14
15 <abstract>
16 This document shows the proper method of reporting bugs using Bugzilla.
17 </abstract>
18
19 <!-- The content of this document is licensed under the CC-BY-SA license -->
20 <!-- See http://creativecommons.org/licenses/by-sa/2.5 -->
21 <license/>
22
23 <version>1.13</version>
24 <date>2009-03-05</date>
25
26 <chapter>
27 <title>Introduction</title>
28 <section>
29 <title>Preface</title>
30 <body>
31
32 <p>
33 One of the factors that delay a bug being fixed is the way it is reported. By
34 creating this guide, we hope to help improve the communication between
35 developers and users in bug resolution. Getting bugs fixed is an important, if
36 not crucial part of the quality assurance for any project and hopefully this
37 guide will help make that a success.
38 </p>
39
40 </body>
41 </section>
42 <section>
43 <title>Bugs!!!!</title>
44 <body>
45
46 <p>
47 You're emerge-ing a package or working with a program and suddenly the worst
48 happens -- you find a bug. Bugs come in many forms like emerge failures or
49 segmentation faults. Whatever the cause, the fact still remains that such a bug
50 must be fixed. Here is a few examples of such bugs.
51 </p>
52
53 <pre caption="A run time error">
54 $ <i>./bad_code `perl -e 'print Ax100'`</i>
55 Segmentation fault
56 </pre>
57
58 <pre caption="An emerge failure">
59 /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/include/g++-v3/backward/backward_warning.h:32:2:
60 warning: #warning This file includes at least one deprecated or antiquated
61 header. Please consider using one of the 32 headers found in section 17.4.1.2 of
62 the C++ standard. Examples include substituting the &lt;X&gt; header for the &lt;X.h&gt;
63 header for C++ includes, or &lt;sstream&gt; instead of the deprecated header
64 &lt;strstream.h&gt;. To disable this warning use -Wno-deprecated.
65 In file included from main.cc:40:
66 menudef.h:55: error: brace-enclosed initializer used to initialize `
67 OXPopupMenu*'
68 menudef.h:62: error: brace-enclosed initializer used to initialize `
69 OXPopupMenu*'
70 menudef.h:70: error: brace-enclosed initializer used to initialize `
71 OXPopupMenu*'
72 menudef.h:78: error: brace-enclosed initializer used to initialize `
73 OXPopupMenu*'
74 main.cc: In member function `void OXMain::DoOpen()':
75 main.cc:323: warning: unused variable `FILE*fp'
76 main.cc: In member function `void OXMain::DoSave(char*)':
77 main.cc:337: warning: unused variable `FILE*fp'
78 make[1]: *** [main.o] Error 1
79 make[1]: Leaving directory
80 `/var/tmp/portage/xclass-0.7.4/work/xclass-0.7.4/example-app'
81 make: *** [shared] Error 2
82
83 !!! ERROR: x11-libs/xclass-0.7.4 failed.
84 !!! Function src_compile, Line 29, Exitcode 2
85 !!! 'emake shared' failed
86 </pre>
87
88 <p>
89 These errors can be quite troublesome. However, once you find them, what do you
90 do? The following sections will look at two important tools for handling run
91 time errors. After that, we'll take a look at compile errors, and how to handle
92 them. Let's start out with the first tool for debugging run time errors --
93 <c>gdb</c>.
94 </p>
95
96 </body>
97 </section>
98 </chapter>
99
100
101 <chapter>
102 <title>Debugging using GDB</title>
103 <section>
104 <title>Introduction</title>
105 <body>
106
107 <p>
108 GDB, or the (G)NU (D)e(B)ugger, is a program used to find run time errors that
109 normally involve memory corruption. First off, let's take a look at what
110 debugging entails. One of the main things you must do in order to debug a
111 program is to <c>emerge</c> the program with <c>FEATURES="nostrip"</c>. This
112 prevents the stripping of debug symbols. Why are programs stripped by default?
113 The reason is the same as that for having gzipped man pages -- saving space.
114 Here's how the size of a program varies with and without debug symbol stripping.
115 </p>
116
117 <pre caption="Filesize Comparison">
118 <comment>(debug symbols stripped)</comment>
119 -rwxr-xr-x 1 chris users 3140 6/28 13:11 bad_code
120 <comment>(debug symbols intact)</comment>
121 -rwxr-xr-x 1 chris users 6374 6/28 13:10 bad_code
122 </pre>
123
124 <p>
125 Just for reference, <e>bad_code</e> is the program we'll be debugging with
126 <c>gdb</c> later on. As you can see, the program without debugging symbols is
127 3140 bytes, while the program with them is 6374 bytes. That's close to double
128 the size! Two more things can be done for debugging. The first is adding
129 <c>ggdb</c> to your CFLAGS and CXXFLAGS. This flag adds more debugging
130 information than is generally included. We'll see what that means later on. This
131 is how <path>/etc/make.conf</path> <e>might</e> look with the newly added flags.
132 </p>
133
134 <pre caption="make.conf settings">
135 CFLAGS="-O1 -pipe -ggdb"
136 CXXFLAGS="${CFLAGS}"
137 </pre>
138
139 <p>
140 Lastly, you can also add debug to the package's USE flags. This can be done
141 with the <path>package.use</path> file.
142 </p>
143
144 <pre caption="Using package.use to add debug USE flag">
145 # <i>echo "category/package debug" >> /etc/portage/package.use</i>
146 </pre>
147
148 <note>
149 The directory <path>/etc/portage</path> does not exist by default and you may
150 have to create it, if you have not already done so. If the package already has
151 USE flags set in <path>package.use</path>, you will need to manually modify them
152 in your favorite editor.
153 </note>
154
155 <p>
156 Then we re-emerge the package with the modifications we've done so far as shown
157 below.
158 </p>
159
160 <pre caption="Re-emergeing a package with debugging">
161 # <i>FEATURES="nostrip" emerge package</i>
162 </pre>
163
164 <p>
165 Now that debug symbols are setup, we can continue with debugging the program.
166 </p>
167
168 </body>
169 </section>
170 <section>
171 <title>Running the program with GDB</title>
172 <body>
173
174 <p>
175 Let's say we have a program here called "bad_code". Some person claims that the
176 program crashes and provides an example. You go ahead and test it out:
177 </p>
178
179 <pre caption="Breaking The Program">
180 $ <i>./bad_code `perl -e 'print Ax100'`</i>
181 Segmentation fault
182 </pre>
183
184 <p>
185 It seems this person was right. Since the program is obviously broken, we have
186 a bug at hand. Now, it's time to use <c>gdb</c> to help solve this matter. First
187 we run <c>gdb</c> with <c>--args</c>, then give it the full program with
188 arguments like shown:
189 </p>
190
191 <pre caption="Running Our Program Through GDB">
192 $ <i>gdb --args ./bad_code `perl -e 'print Ax100'`</i>
193 GNU gdb 6.3
194 Copyright 2004 Free Software Foundation, Inc.
195 GDB is free software, covered by the GNU General Public License, and you are
196 welcome to change it and/or distribute copies of it under certain conditions.
197 Type "show copying" to see the conditions.
198 There is absolutely no warranty for GDB. Type "show warranty" for details.
199 This GDB was configured as "i686-pc-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1".
200 </pre>
201
202 <note>
203 One can also debug with core dumps. These core files contain the same
204 information that the program would produce when run with gdb. In order to debug
205 with a core file with bad_code, you would run <c>gdb ./bad_code core</c> where
206 core is the name of the core file.
207 </note>
208
209 <p>
210 You should see a prompt that says "(gdb)" and waits for input. First, we have to
211 run the program. We type in <c>run</c> at the command and receive a notice like:
212 </p>
213
214 <pre caption="Running the program in GDB">
215 (gdb) <i>run</i>
216 Starting program: /home/chris/bad_code
217
218 Program received signal SIGSEGV, Segmentation fault.
219 0xb7ec6dc0 in strcpy () from /lib/libc.so.6
220 </pre>
221
222 <p>
223 Here we see the program starting, as well as a notification of SIGSEGV, or
224 Segmentation Fault. This is GDB telling us that our program has crashed. It
225 also gives the last run function it could trace when the program crashes.
226 However, this isn't too useful, as there could be multiple strcpy's in the
227 program, making it hard for developers to find which one is causing the issue.
228 In order to help them out, we do what's called a backtrace. A backtrace runs
229 backwards through all the functions that occurred upon program execution, to the
230 function at fault. Functions that return (without causing a crash) will not show
231 up on the backtrace. To get a backtrace, at the (gdb) prompt, type in <c>bt</c>.
232 You will get something like this:
233 </p>
234
235 <pre caption="Program backtrace">
236 (gdb) <i>bt</i>
237 #0 0xb7ec6dc0 in strcpy () from /lib/libc.so.6
238 #1 0x0804838c in run_it ()
239 #2 0x080483ba in main ()
240 </pre>
241
242 <p>
243 You can notice the trace pattern clearly. main() is called first, followed by
244 run_it(), and somewhere in run_it() lies the strcpy() at fault. Things such as
245 this help developers narrow down problems. There are a few exceptions to the
246 output. First off is forgetting to enable debug symbols with
247 <c>FEATURES="nostrip"</c>. With debug symbols stripped, the output looks something
248 like this:
249 </p>
250
251 <pre caption="Program backtrace With debug symbols stripped">
252 (gdb) <i>bt</i>
253 #0 0xb7e2cdc0 in strcpy () from /lib/libc.so.6
254 #1 0x0804838c in ?? ()
255 #2 0xbfd19510 in ?? ()
256 #3 0x00000000 in ?? ()
257 #4 0x00000000 in ?? ()
258 #5 0xb7eef148 in libgcc_s_personality () from /lib/libc.so.6
259 #6 0x080482ed in ?? ()
260 #7 0x080495b0 in ?? ()
261 #8 0xbfd19528 in ?? ()
262 #9 0xb7dd73b8 in __guard_setup () from /lib/libc.so.6
263 #10 0xb7dd742d in __guard_setup () from /lib/libc.so.6
264 #11 0x00000006 in ?? ()
265 #12 0xbfd19548 in ?? ()
266 #13 0x080483ba in ?? ()
267 #14 0x00000000 in ?? ()
268 #15 0x00000000 in ?? ()
269 #16 0xb7deebcc in __new_exitfn () from /lib/libc.so.6
270 #17 0x00000000 in ?? ()
271 #18 0xbfd19560 in ?? ()
272 #19 0xb7ef017c in nullserv () from /lib/libc.so.6
273 #20 0xb7dd6f37 in __libc_start_main () from /lib/libc.so.6
274 #21 0x00000001 in ?? ()
275 #22 0xbfd195d4 in ?? ()
276 #23 0xbfd195dc in ?? ()
277 #24 0x08048201 in ?? ()
278 </pre>
279
280 <p>
281 This backtrace contains a large number of ?? marks. This is because without
282 debug symbols, <c>gdb</c> doesn't know how the program was run. Hence, it is
283 crucial that debug symbols are <e>not</e> stripped. Now remember a while ago we
284 mentioned the -ggdb flag. Let's see what the output looks like with the flag
285 enabled:
286 </p>
287
288 <pre caption="Program backtrace with -ggdb">
289 (gdb) <i>bt</i>
290 #0 0xb7e4bdc0 in strcpy () from /lib/libc.so.6
291 #1 0x0804838c in run_it (input=0x0) at bad_code.c:7
292 #2 0x080483ba in main (argc=1, argv=0xbfd3a434) at bad_code.c:12
293 </pre>
294
295 <p>
296 Here we see that a lot more information is available for developers. Not only is
297 function information displayed, but even the exact line numbers of the source
298 files. This method is the most preferred if you can spare the extra space.
299 Here's how much the file size varies between debug, strip, and -ggdb enabled
300 programs.
301 </p>
302
303 <pre caption="Filesize differences With -ggdb flag">
304 <comment>(debug symbols stripped)</comment>
305 -rwxr-xr-x 1 chris users 3140 6/28 13:11 bad_code
306 <comment>(debug symbols enabled)</comment>
307 -rwxr-xr-x 1 chris users 6374 6/28 13:10 bad_code
308 <comment>(-ggdb flag enabled)</comment>
309 -rwxr-xr-x 1 chris users 19552 6/28 13:11 bad_code
310 </pre>
311
312 <p>
313 As you can see, -ggdb adds about <e>13178</e> more bytes to the file size over
314 the one with debugging symbols. However, as shown above, this increase in file
315 size can be worth it if presenting debug information to developers. The
316 backtrace can be saved to a file by copying and pasting from the terminal (if
317 it's a non-x based terminal, you can use gpm. To keep this doc simple, I
318 recommend you read up on the <uri link="/doc/en/gpm.xml#doc_chap4">documentation
319 for gpm</uri> to see how to copy and paste with it). Now that we're done with
320 <c>gdb</c>, we can quit.
321 </p>
322
323 <pre caption="Quitting GDB">
324 (gdb) <i>quit</i>
325 The program is running. Exit anyway? (y or n) <i>y</i>
326 $
327 </pre>
328
329 <p>
330 This ends the walk-through of <c>gdb</c>. Using <c>gdb</c>, we hope that you
331 will be able to use it to create better bug reports. However, there are other
332 types of errors that can cause a program to fail during run time. One of the
333 other ways is through improper file access. We can find those using a nifty
334 little tool called <c>strace</c>.
335 </p>
336
337 </body>
338 </section>
339 </chapter>
340
341 <chapter>
342 <title>Finding file access errors using strace</title>
343 <section>
344 <title>Introduction</title>
345 <body>
346
347 <p>
348 Programs often use files to fetch configuration information, access hardware or
349 write logs. Sometimes, a program attempts to reach such files incorrectly. A
350 tool called <c>strace</c> was created to help deal with this. <c>strace</c>
351 traces system calls (hence the name) which include calls that use the memory and
352 files. For our example, we're going to take a program foobar2. This is an
353 updated version of foobar. However, during the change over to foobar2, you
354 notice all your configurations are missing! In foobar version 1, you had it
355 setup to say "foo", but now it's using the default "bar".
356 </p>
357
358 <pre caption="Foobar2 With an invalid configuration">
359 $ <i>./foobar2</i>
360 Configuration says: bar
361 </pre>
362
363 <p>
364 Our previous configuration specifically had it set to foo, so let's use
365 <c>strace</c> to find out what's going on.
366 </p>
367
368 </body>
369 </section>
370 <section>
371 <title>Using strace to track the issue</title>
372 <body>
373
374 <p>
375 We make <c>strace</c> log the results of the system calls. To do this, we run
376 <c>strace</c> with the -o[file] arguments. Let's use it on foobar2 as shown.
377 </p>
378
379 <pre caption="Running foobar2 through strace">
380 # <i>strace -ostrace.log ./foobar2</i>
381 </pre>
382
383 <p>
384 This creates a file called <path>strace.log</path> in the current directory. We
385 check the file, and shown below are the relevant parts from the file.
386 </p>
387
388 <pre caption="A Look At the strace Log">
389 open(".foobar2/config", O_RDONLY) = 3
390 read(3, "bar", 3) = 3
391 </pre>
392
393 <p>
394 Aha! So There's the problem. Someone moved the configuration directory to
395 <path>.foobar2</path> instead of <path>.foobar</path>. We also see the program
396 reading in "bar" as it should. In this case, we can recommend the ebuild
397 maintainer to put a warning about it. For now though, we can copy over the
398 config file from <path>.foobar</path> and modify it to produce the correct
399 results.
400 </p>
401
402 </body>
403 </section>
404 <section>
405 <title>Conclusion</title>
406 <body>
407
408 <p>
409 Now we've taken care of finding run time bugs. These bugs prove to be
410 problematic when you try and run your programs. However, run time errors are
411 the least of your concerns if your program won't compile at all. Let's take a
412 look at how to address <c>emerge</c> compile errors.
413 </p>
414
415 </body>
416 </section>
417 </chapter>
418
419 <chapter>
420 <title>Handling emerge Errors</title>
421 <section>
422 <title>Introduction</title>
423 <body>
424
425 <p>
426 <c>emerge</c> errors, such as the one displayed earlier, can be a major cause
427 of frustration for users. Reporting them is considered crucial for maintaining
428 the health of Gentoo. Let's take a look at a sample ebuild, foobar2, which
429 contains some build errors.
430 </p>
431
432 </body>
433 </section>
434 <section id="emerge_error">
435 <title>Evaluating emerge Errors</title>
436 <body>
437
438 <p>
439 Let's take a look at this very simple <c>emerge</c> error:
440 </p>
441
442 <pre caption="emerge Error (long lines are manually wrapped to fit the window)">
443 gcc -D__TEST__ -D__GNU__ -D__LINUX__ -L/usr/lib -I/usr/include -L/usr/lib/nspr/ -I/usr/include/fmod \
444 -c -o foobar2-7.o foobar2-7.c
445 gcc -D__TEST__ -D__GNU__ -D__LINUX__ -L/usr/lib -I/usr/include -L/usr/lib/nspr/ -I/usr/include/fmod \
446 -c -o foobar2-8.o foobar2-8.c
447 gcc -D__TEST__ -D__GNU__ -D__LINUX__ -L/usr/lib -I/usr/include -L/usr/lib/nspr/ -I/usr/include/fmod \
448 -c -o foobar2-9.o foobar2-9.c
449 gcc -D__TEST__ -D__GNU__ -D__LINUX__ -L/usr/lib -I/usr/include -L/usr/lib/nspr/ -I/usr/include/fmod \
450 -c -o foobar2.o foobar2.c
451 foobar2.c:1:17: ogg.h: No such file or directory
452 make: *** [foobar2.o] Error 1
453
454 !!! ERROR: sys-apps/foobar2-1.0 failed.
455 !!! Function src_compile, Line 19, Exitcode 2
456 !!! Make failed!
457 !!! If you need support, post the topmost build error, NOT this status message
458 </pre>
459
460 <p>
461 The program is compiling smoothly when it suddenly stops and presents an error
462 message. This particular error can be split into 3 different sections, The
463 compile messages, the build error, and the emerge error message as shown below.
464 </p>
465
466 <pre caption="Parts of the error (long lines are manually wrapped to fit the window)">
467 <comment>(Compilation Messages)</comment>
468 gcc -D__TEST__ -D__GNU__ -D__LINUX__ -L/usr/lib -I/usr/include -L/usr/lib/nspr/ -I/usr/include/fmod \
469 -c -o foobar2-7.o foobar2-7.c
470 gcc -D__TEST__ -D__GNU__ -D__LINUX__ -L/usr/lib -I/usr/include -L/usr/lib/nspr/ -I/usr/include/fmod \
471 -c -o foobar2-8.o foobar2-8.c
472 gcc -D__TEST__ -D__GNU__ -D__LINUX__ -L/usr/lib -I/usr/include -L/usr/lib/nspr/ -I/usr/include/fmod \
473 -c -o foobar2-9.o foobar2-9.c
474 gcc -D__TEST__ -D__GNU__ -D__LINUX__ -L/usr/lib -I/usr/include -L/usr/lib/nspr/ -I/usr/include/fmod \
475 -c -o foobar2.o foobar2.c
476
477 <comment>(Build Error)</comment>
478 foobar2.c:1:17: ogg.h: No such file or directory
479 make: *** [foobar2.o] Error 1
480
481 <comment>(emerge Error)</comment>
482 !!! ERROR: sys-apps/foobar2-1.0 failed.
483 !!! Function src_compile, Line 19, Exitcode 2
484 !!! Make failed!
485 !!! If you need support, post the topmost build error, NOT this status message
486 </pre>
487
488 <p>
489 The compilation messages are what lead up to the error. Most often, it's good to
490 at least include 10 lines of compile information so that the developer knows
491 where the compilation was at when the error occurred.
492 </p>
493
494 <p>
495 Make errors are the actual error and the information the developer needs. When
496 you see "make: ***", this is often where the error has occurred. Normally, you
497 can copy and paste 10 lines above it and the developer will be able to address
498 the issue. However, this may not always work and we'll take a look at an
499 alternative shortly.
500 </p>
501
502 <p>
503 The emerge error is what <c>emerge</c> throws out as an error. Sometimes, this
504 might also contain some important information. Often people make the mistake of
505 posting the emerge error and that's all. This is useless by itself, but with
506 make error and compile information, a developer can get what application and
507 what version of the package is failing. As a side note, make is commonly used as
508 the build process for programs (<b>but not always</b>). If you can't find a
509 "make: ***" error anywhere, then simply copy and paste 20 lines before the
510 emerge error. This should take care of most all build system error messages. Now
511 let's say the errors seem to be quite large. 10 lines won't be enough to catch
512 everything. That's where PORT_LOGDIR comes into play.
513 </p>
514
515 </body>
516 </section>
517 <section>
518 <title>emerge and PORT_LOGDIR</title>
519 <body>
520
521 <p>
522 PORT_LOGDIR is a portage variable that sets up a log directory for separate
523 emerge logs. Let's take a look and see what that entails. First, run your
524 emerge with PORT_LOGDIR set to your favorite log location. Let's say we have a
525 location <path>/var/log/portage</path>. We'll use that for our log directory:
526 </p>
527
528 <note>
529 In the default setup, <path>/var/log/portage</path> does not exist, and you will
530 most likely have to create it. If you do not, portage will fail to write the
531 logs.
532 </note>
533
534 <pre caption="emerge-ing With PORT_LOGDIR">
535 # <i>PORT_LOGDIR=/var/log/portage emerge cate-gory/foobar2</i>
536 </pre>
537
538 <p>
539 Now the emerge fails again. However, this time we have a log we can work with,
540 and attach to the bug later on. Let's take a quick look at our log directory.
541 </p>
542
543 <pre caption="PORT_LOGDIR Contents">
544 # <i>ls -la /var/log/portage</i>
545 total 16
546 drwxrws--- 2 root root 4096 Jun 30 10:08 .
547 drwxr-xr-x 15 root root 4096 Jun 30 10:08 ..
548 -rw-r--r-- 1 root root 7390 Jun 30 10:09 cate-gory:foobar2-1.0:20090110-213217.log
549 </pre>
550
551 <p>
552 The log files have the format [category]:[package name]-[version]:[date].log. A
553 quick look at the log file will show the entire emerge process. This can be
554 attached later on as we'll see in the bug reporting section. Now that we've
555 safely obtained our information needed to report the bug we can continue to do
556 so. However, before we get started on that, we need to make sure no one else
557 has reported the issue. Let's take a look at searching for bugs.
558 </p>
559
560 </body>
561 </section>
562 </chapter>
563
564 <chapter>
565 <title>Searching Using Bugzilla</title>
566 <section>
567 <title>Introduction</title>
568 <body>
569
570 <p>
571 <uri link="http://www.bugzilla.org">Bugzilla</uri> is what we at Gentoo use to
572 handle bugs. Gentoo's Bugzilla is reachable by HTTPS and HTTP. HTTPS is
573 available for those on insecure networks or simply paranoid :). For the sake of
574 consistency, we will be using the HTTPS version in the examples to follow. Head
575 over to <uri link="https://bugs.gentoo.org">Gentoo Bugs</uri> to see how it
576 looks.
577 </p>
578
579 <p>
580 One of the most frustrating things for developers and bug-wranglers is finding
581 duplicate bug reports. These cost them valuable time that they could otherwise
582 use to work on more important bugs. Often, this can be prevented by a few simple
583 search methods. So we're going to see how to search for bugs and find out if
584 you have one that's similar. For this example, we're going to use the xclass
585 emerge error that was used earlier.
586 </p>
587
588 <pre caption="xclass emerge error">
589 /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/include/g++-v3/backward/backward_warning.h:32:2:
590 warning: #warning This file includes at least one deprecated or antiquated
591 header. Please consider using one of the 32 headers found in section 17.4.1.2 of
592 the C++ standard. Examples include substituting the &lt;X&gt; header for the &lt;X.h&gt;
593 header for C++ includes, or &lt;sstream&gt; instead of the deprecated header
594 &lt;strstream.h&gt;. To disable this warning use -Wno-deprecated.
595 In file included from main.cc:40:
596 menudef.h:55: error: brace-enclosed initializer used to initialize `
597 OXPopupMenu*'
598 menudef.h:62: error: brace-enclosed initializer used to initialize `
599 OXPopupMenu*'
600 menudef.h:70: error: brace-enclosed initializer used to initialize `
601 OXPopupMenu*'
602 menudef.h:78: error: brace-enclosed initializer used to initialize `
603 OXPopupMenu*'
604 main.cc: In member function `void OXMain::DoOpen()':
605 main.cc:323: warning: unused variable `FILE*fp'
606 main.cc: In member function `void OXMain::DoSave(char*)':
607 main.cc:337: warning: unused variable `FILE*fp'
608 make[1]: *** [main.o] Error 1
609 make[1]: Leaving directory
610 `/var/tmp/portage/xclass-0.7.4/work/xclass-0.7.4/example-app'
611 make: *** [shared] Error 2
612
613 !!! ERROR: x11-libs/xclass-0.7.4 failed.
614 !!! Function src_compile, Line 29, Exitcode 2
615 !!! 'emake shared' failed
616 </pre>
617
618 <p>
619 So to begin searching, we head over to the <uri
620 link="https://bugs.gentoo.org/">Bugzilla Homepage</uri>.
621 </p>
622
623 <figure link="/images/docs/bugzie-homepage.png" caption="Bugzilla Homepage"/>
624
625 <p>
626 We'll click on "Query Existing bug reports". The reason why we choose this
627 over the basic bug search is because the basic bug search tends to give vague
628 results and often hinders users from looking through the results and finding the
629 duplicate bug. Once we click on the query screen, we reach the next page:
630 </p>
631
632 <figure link="/images/docs/bugzie-search.png" caption="Bugzilla Search Page"/>
633
634 <note>
635 If you've used the Advanced Search before, you'll most likely see that screen
636 instead.
637 </note>
638
639 <p>
640 Proceed by clicking on the "Advanced Search" link to bring up the Advanced
641 Search page.
642 </p>
643
644 <figure link="/images/docs/bugzie-adv-search.png" caption="Advanced Search Page"/>
645
646 <p>
647 This is how the Advanced Search Page looks like. While it may seem overwhelming
648 at first, we're going to look at a few simple areas to narrow down the rather
649 vague searches bugzilla returns.
650 </p>
651
652 <figure link="/images/docs/bugzie-content.png" caption="Content"/>
653
654 <p>
655 The first field is the summary of the bug. Here we're simply going to put the
656 name of the package that's crashing. If bugzie doesn't return results, try
657 removing the package name, just in case someone didn't put that in the summary
658 (highly unlikely, but we've seen a fair share of strange bug reports).
659 </p>
660
661 <p>
662 Product, Component, and Version should all be set to the default. This
663 prevents us from being too specific and missing all the bugs.
664 </p>
665
666 <p>
667 Comment is the important part. Use the comment field to list what appears to be
668 a specific instance of the error. Basically, don't use anything like the
669 beginning of the build error, find a line that's before it stating a true
670 error. Also, you'll want to filter out any punctuation to prevent bugzilla
671 from interpreting the results the comment the wrong way. Example from the xclass
672 emerge error:
673 </p>
674
675 <pre caption="Comment Line Content">
676 menudef.h:78: error: brace-enclosed initializer used to initialize `OXPopupMenu'
677 <comment>(Remove the quotes ' ')</comment>
678 menudef.h 78 error brace-enclosed initializer used to initialize OXPopupMenu
679 </pre>
680
681 <p>
682 The above is specific enough to where we'll find the bug without wading through
683 other xclass compile failure candidates.
684 </p>
685
686 <p>
687 URI, Whiteboard, and Keywords can all be left alone. What we've entered so far
688 should be enough to find our bug. Let's take a look at what we have filled out.
689 </p>
690
691 <figure link="/images/docs/bugzie-comp-search.png" caption="Completed Search Form"/>
692
693 <p>
694 Now we click on the Search button and here come the results...
695 </p>
696
697 <figure link="/images/docs/bugzie-search-result.png" caption="Search Results"/>
698
699 <p>
700 Only 2 bugs! That's a lot easier to deal with. We click on the first one to
701 check, and sure enough it's the one we're looking for.
702 </p>
703
704 <figure link="/images/docs/bugzie-located.png" caption="Bug Located"/>
705
706 <p>
707 Not only is it the one we want, but it has also been resolved. By checking the
708 last comment we see the solution and know what to do in order to resolve it.
709 Now, let's see what would have happened if we had not used the advanced search.
710 </p>
711
712 <figure link="/images/docs/bugzie-basic-search-result.png" caption="Basic Search Results"/>
713
714 <p>
715 4 more bugs to deal with! It gets even worse with larger packages. However,
716 with these simple tools, we're able to significantly narrow down the search to
717 try and locate a specific bug.
718 </p>
719
720 </body>
721 </section>
722 <section>
723 <title>Conclusion</title>
724 <body>
725
726 <p>
727 Let's say that you have searched and searched but still can't find a bug.
728 You've found yourself a new bug. Let's take a look at the bug reporting process
729 for submitting your new bug.
730 </p>
731
732 </body>
733 </section>
734 </chapter>
735
736 <chapter>
737 <title>Reporting Bugs</title>
738 <section>
739 <title>Introduction</title>
740 <body>
741
742 <p>
743 In this chapter, we'll figure out how to use Bugzilla to file a shiny, new bug.
744 Head over to <uri link="https://bugs.gentoo.org">Gentoo Bugs</uri> and...
745 </p>
746
747 <figure link="/images/docs/bugzie-homepage.png" caption="Bugzilla Homepage"/>
748
749 <p>
750 Click on "Report a Bug - Using the guided format".
751 </p>
752
753 <figure link="/images/docs/bugzie-prod-select.png" caption="Product Selection"/>
754
755 <p>
756 As you can see, <b>major</b> emphasis has been placed on putting your bug in the
757 right place. Gentoo Linux is where a large majority of bugs go.
758 </p>
759
760 <p>
761 Despite this, some people will file ebuild bugs in portage development
762 (assumption that portage team handles the portage tree) or infra (assumption
763 that infra has access to mirrors and rsync and can fix it directly). This is
764 simply not how things work.
765 </p>
766
767 <p>
768 Another common misconception occurs with our Documentation bugs. For example, a
769 user finds a bug with the <uri link="/proj/en/releng/catalyst/">Catalyst
770 Docs</uri>. The general tendency is to file a bug under Docs-user, which gets
771 assigned to the <uri link="http://gdp.gentoo.org">GDP</uri>, when it should
772 actually go to a member of the <uri link="/proj/en/releng/">Release
773 Engineering</uri> team. As a rule of thumb, only documentation under
774 <path>http://www.gentoo.org/doc/*</path> is under the GDP. Anything under
775 <path>http://www.gentoo.org/proj/*</path> is under the respective teams.
776 </p>
777
778 <note>
779 We would rather see a bug whose product was not supposed to be Gentoo Linux but
780 has been filed under the same rather than seeing a bug which belongs the Gentoo
781 Linux product and filed elsewhere. While neither is preferred, the former is
782 more acceptable and understandable (except website bugs.. we might have an issue
783 with that...).
784 </note>
785
786 <p>
787 Our bug goes in Gentoo Linux as it's an ebuild bug. We head over there and are
788 presented with the multi-step bug reporting process. Let us now proceed with
789 Step 1...
790 </p>
791
792 <figure link="/images/docs/bugzie-guide-step1.png" caption="Guided Format Step 1"/>
793
794 <p>
795 The first step here is really important (as the red text tells you). This is
796 where you search to see that someone else hasn't hit the same bug you have, yet.
797 If you do skip this step and a bug like yours already exists, it will be marked
798 as a DUPLICATE thus wasting a large amount of QA effort. To give you an idea,
799 the bug numbers that are struck out above are duplicate bugs. Now comes step 2,
800 where we give the information.
801 </p>
802
803 </body>
804 </section>
805 <section>
806 <title>Required Information</title>
807 <body>
808
809 <figure link="/images/docs/bugzie-basic.png" caption="Basic Information"/>
810
811 <p>
812 Let us take a closer look at what's what.
813 </p>
814
815 <ul>
816 <li>
817 First, there's the Product. The product will narrow down the bug to a
818 specific area of Gentoo like Bugzilla (for bugs relating to
819 bugs.gentoo.org), Docs-user(for User Documentation) or Gentoo Linux (for
820 ebuilds and the like).
821 </li>
822 <li>
823 Component is where exactly the problem occurs, more specifically which part
824 of selected product the bug comes under. This makes classification easier.
825 </li>
826 <li>
827 Hardware platform is what architecture you're running. If you were running
828 SPARC, you would set it to SPARC.
829 </li>
830 <li>
831 Operating System is what Operating System you're using. Because Gentoo is
832 considered a "Meta-distribution", it can run on other operating systems
833 beside Linux.
834 </li>
835 </ul>
836
837 <p>
838 So, for our example bug, we have :
839 </p>
840
841 <ul>
842 <li>Product - Gentoo Linux (Since it is an ebuild issue)</li>
843 <li>Component - Application (It is an application at fault, foobar2)</li>
844 <li>Hardware Platform - All (This error could occur across architectures)</li>
845 <li>Operation System - All (It could occur on all types of systems)</li>
846 </ul>
847
848 <figure link="/images/docs/bugzie-basic-comp.png" caption="Completed Basic Information"/>
849
850 <ul>
851 <li>
852 Build Identifier is basically the User Agent of the browser that is being
853 used to report the bugs (for logging purposes). You can just leave this as
854 is.
855 </li>
856 <li>
857 URL is optional and is used to point to relevant information on another site
858 (upstream bugzilla, release notes on package homepage etc.). You should
859 never use URL to point to pastebins for error messages, logs, <c>emerge
860 --info</c> output, screenshots or similar information. Instead, these should
861 always be attached to the bug.
862 </li>
863 <li>
864 In the Summary, you should put the package category, name, and number.
865 </li>
866 </ul>
867
868 <p>
869 Not including the category in the summary really isn't too bad, but it's
870 recommended. If you don't include the package name, however, we won't know what
871 you're filling a bug for, and will have to ask you about it later. The version
872 number is important for people searching for bugs. If 20 people filed bugs and
873 not one put a version number, how would people looking for similar bugs be able
874 to tell if one was there's? They'd have to look through every single bug, which
875 isn't too hard, but if there are say, 200 bugs.. it's not that easy. After all
876 the package information, you'll want to include a small description of the
877 incident. Here's an example:
878 </p>
879
880 <figure link="/images/docs/bugzie-summary.png" caption="Summary"/>
881
882 <p>
883 These simple rules can make handling bugs a lot easier. Next are the details.
884 Here we put in the information about the bug. We'll demonstrate with an example:
885 </p>
886
887 <figure link="/images/docs/bugzie-details.png" caption="Details"/>
888
889 <p>
890 Now the developer knows why we're filing the bug. They can then try to
891 reproduce it. Reproducibility tells us how often we were able to make the
892 problem recur. In this example, we can reproduce it any time simply by running
893 foobar2. Let's put that information in.
894 </p>
895
896 <figure link="/images/docs/bugzie-reprod.png" caption="Reproduction"/>
897
898 <p>
899 We have explained how we found the bug. The next step is to explain what were
900 the results we got and what we think they should actually be.
901 </p>
902
903 <figure link="/images/docs/bugzie-results.png" caption="Results"/>
904
905 <p>
906 We could then provide additional information. This could be things such as
907 stack traces, <b>sections</b> (since the whole log is usually big and of not
908 much use) of strace logs, but most importantly, your <c>emerge --info</c>
909 output. Here's an example.
910 </p>
911
912 <figure link="/images/docs/bugzie-addl-info.png" caption="Additional Information"/>
913
914 <p>
915 Lastly we select the severity of the bug. Please look this over carefully. In
916 most cases it's OK to leave it as is and someone will raise/lower it for you.
917 However, if you raise the severity of the bug, please make sure you read it over
918 carefully and make sure you're not making a mistake. A run down of the various
919 levels is given below.
920 </p>
921
922 <ul>
923 <li>
924 Blocker - The program just plain doesn't want to emerge or is a major
925 hinderance to the system. For example a <c>baselayout</c> issue which
926 prevents a system from booting up would be a sure candidate to be labelled
927 blocker.
928 </li>
929 <li>
930 Critical - The program has loss of data or severe memory leaks during
931 runtime. Again, an important program like say <c>net-tools</c> failing to
932 compile could be labelled critical. It won't prevent the system from
933 starting up, but is quite essential for day to day stuff.
934 </li>
935 <li>
936 Major - The program crashes, but nothing that causes your system severe
937 damage or information loss.
938 </li>
939 <li>
940 Minor - Your program crashes here and there with apparent workarounds.
941 </li>
942 <li>
943 Normal - The default. If you're not sure leave it here unless it's a new
944 build or cosmetic change, then read below for more information.
945 </li>
946 <li>Trivial - Things such as a mispelled word or whitespace clean up. </li>
947 <li>
948 Enhancement - A request to enable a new feature in a program, or more
949 specifically <e>new ebuilds</e>.
950 </li>
951 </ul>
952
953 <figure link="/images/docs/bugzie-sev.png" caption="Severity"/>
954
955 <p>
956 Here, we'll set it to Normal.
957 </p>
958
959 <p>
960 Now we can submit the bug report by clicking on the Submit Bug Report box. You
961 will now see your new bug come up. See <uri
962 link="https://bugs.gentoo.org/show_bug.cgi?id=97265">Bug 97561</uri> for what
963 the result looks like. We've reported our bug! Now let's see how it's dealt
964 with.
965 </p>
966
967 </body>
968 </section>
969 <section>
970 <title>Zero-day bump requests</title>
971 <body>
972
973 <p>
974 So far, we've shown what to do when filing a bug. Now let's take a look at what
975 <e>not</e> to do.
976 </p>
977
978 <p>
979 Suppose that you've eagerly been following an upstream project's schedule, and
980 when you check their homepage, guess what? They just released a new version a
981 few minutes ago! Most users would immediately rush over to Gentoo's bugzilla to
982 report the new version is available; please bump the existing version and add
983 it to Portage, etc. However, this is exactly what you should <b>not</b> do.
984 These kinds of requests are called zero-day (or 0-day) bump requests, as they're
985 made the same day that a new version is released.
986 </p>
987
988 <impo>
989 <b>Please wait <e>at least</e> 48 hours before reporting a new release on our
990 bugzilla.</b> Also, you <e>must</e> check bugzilla before posting your request
991 to make sure that someone else hasn't already reported it, or that the Gentoo
992 maintainers haven't already dealt with the new version.
993 </impo>
994
995 <p>
996 Why should you wait? First, it's quite rude to demand that Gentoo developers
997 drop everything they're doing just to add a new release that came out 15 minutes
998 ago. Your zero-day bump request could be marked as INVALID or LATER, as
999 developers have plenty of pressing issues to keep them busy. Second, developers
1000 are usually aware of pending new releases well in advance of users, as they must
1001 follow upstream quite closely. They already know a new version is on its way.
1002 In many cases, they will have already opened a bug, or might even already added
1003 it in Portage as a masked package.
1004 </p>
1005
1006 <p>
1007 Be smart when testing and requesting new versions of packages. Search bugzilla
1008 before posting your bump request -- is there already a bug open? Have you synced
1009 lately; is it already in Portage? Has it actually been released by upstream?
1010 Basic common sense will go a long way, and will endear you to developers that
1011 already have a lot to do. If it's been several days since release and you're
1012 sure that there are no open requests for it (and that it's not in Portage), then
1013 you can open up a new bug. Be sure to mention that it compiles and runs well on
1014 your arch. Any other helpful information you provide is most welcome.
1015 </p>
1016
1017 <p>
1018 Want to see the newest version of your favorite package in Portage? File smart
1019 bugs.
1020 </p>
1021
1022 </body>
1023 </section>
1024 </chapter>
1025
1026 <chapter>
1027 <title>Working With Your Bug</title>
1028 <section>
1029 <body>
1030
1031 <p>
1032 Looking at the bug, we see the information we provided earlier. You will notice
1033 that the bug has been assigned to bug-wranglers@gentoo.org. This is the default
1034 location for Application component bugs.
1035 </p>
1036
1037 <figure link="/images/docs/bugzie-new-basic.png" caption="New Bug Basic Information"/>
1038
1039 <p>
1040 The details we entered about the bug are available as well.
1041 </p>
1042
1043 <figure link="/images/docs/bugzie-new-details.png" caption="New Bug Details"/>
1044
1045 <p>
1046 However, bug-wranglers (usually) won't fix our bugs, so we'll reassign it to
1047 someone that can (you can let bug-wranglers re-assign it for you as well). For
1048 this we use the package's metadata.xml. You can normally find them in
1049 <path>/usr/portage/category/package/metadata.xml</path>. Here's one I've made up
1050 for foobar2.
1051 </p>
1052
1053 <note>
1054 You have to be the reporter of the bug or a member of certain Gentoo Bugzilla
1055 groups (like Gentoo Developers) to be able to reassign bugs.
1056 </note>
1057
1058 <pre caption="metadata.xml">
1059 &lt;?xml version="1.0" encoding="UTF-8"?&gt;
1060 &lt;!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"&gt;
1061 &lt;pkgmetadata&gt;
1062 &lt;herd&gt;chriswhite&lt;/herd&gt;
1063 &lt;maintainer&gt;
1064 &lt;email&gt;chriswhite@gentoo.org&lt;/email&gt;
1065 &lt;name&gt;Chris White&lt;/name&gt;
1066 &lt;/maintainer&gt;
1067 &lt;longdescription lang="en"&gt;
1068 Foobar2 is a package that uses a configuration file to display a word.
1069 &lt;/longdescription&gt;
1070 &lt;/pkgmetadata&gt;
1071 </pre>
1072
1073 <p>
1074 Notice the maintainer section. This lists the maintainer of the package, which
1075 in this case is myself, Chris White. The email listed is chriswhite@gentoo.org.
1076 We will use this to re-assign the bug to the proper person. To do this, click
1077 the bubble next to Reassign bug to, then fill in the email.
1078 </p>
1079
1080 <note>
1081 A bug for a package without a metadata.xml file should be re-assigned to
1082 maintainer-needed@gentoo.org and a package that needs a Gentoo Developer to
1083 maintain should be assigned to maintainer-wanted@gentoo.org.
1084 </note>
1085
1086 <figure link="/images/docs/bugzie-reassign.png" caption="Bug Reassignment"/>
1087
1088 <p>
1089 Then hit the Commit button for the changes to take place. The bug has been
1090 reassigned to me. Shortly afterward, you notice (by email usually) that I've
1091 responded to your bug. I've stated that I'd like to see an strace log to figure
1092 out how the program is trying to reach your configuration file. You follow the
1093 previous instructions on using strace and obtain an strace log. Now you need to
1094 attach it to the bug. In order to do this, click on "Create A New Attachment".
1095 </p>
1096
1097 <figure link="/images/docs/bugzie-new-attach.png" caption="New Attachment"/>
1098
1099 <p>
1100 Now we have to attach the log. Let's go throught it step wise.
1101 </p>
1102
1103 <ul>
1104 <li>
1105 File - This is the location of the file in your machine. In this example,
1106 the location of <path>strace.log</path>. You can use the "Browse..." button
1107 to select the file, or enter the path directly in the text field.
1108 </li>
1109 <li>
1110 Description - A short one liner, or a few wors describing the attachment.
1111 We'll just enter strace.log here, since that's quite self-explanatory.
1112 </li>
1113 <li>
1114 Content Type - This is the type of the file we're attaching to the bug.
1115 </li>
1116 <li>
1117 Obsoletes - If there were attachements submitted to the bug before the
1118 current one, you have an option of declaring them obsoleted by yours. Since
1119 we have no prior attachments to this bug, we need not bother.
1120 </li>
1121 <li>
1122 Comment - Enter comments that will be visible along with the attachments.
1123 You could elaborate on the attachment here, if needed.
1124 </li>
1125 </ul>
1126
1127 <p>
1128 With respect to Content Type, here are a few more details. You can check the
1129 "patch" checkbox if you're submitting a patch. Otherwise, you could ask
1130 Bugzilla to "auto-detect" the file type (not advisable). The other options are
1131 "select from list", which is most frequently used. Use plain text (text/plain)
1132 for <e>most</e> attachments except binary files like images (which can use
1133 image/gif, image/jpeg or image/png depending on type) or compressed files like
1134 .tar.bz2 which would use application/octet-stream as content type.
1135 </p>
1136
1137
1138 <figure link="/images/docs/bugzie-new-attach-comp.png" caption="New Attachment Completed"/>
1139
1140 <p>
1141 We submit <path>strace.log</path> and it is reflected on the bug report.
1142 </p>
1143
1144 <figure link="/images/docs/bugzie-strace.png" caption="Attached strace log"/>
1145
1146 <p>
1147 We've mentioned before that sometimes ebuilds will tell you to attach a file in
1148 the emerge error. An example can be seen below.
1149 </p>
1150
1151 <pre caption="Example File Attachment Request">
1152 configure: error: PNG support requires ZLIB. Use --with-zlib-dir=&lt;DIR&gt;
1153
1154 !!! Please attach the config.log to your bug report:
1155 !!! /var/tmp/portage/php-5.0.3-r1/work/php-5.0.3/config.log
1156
1157 !!! ERROR: dev-php/php-5.0.3-r1 failed.
1158 !!! Function econf, Line 485, Exitcode 0
1159 !!! econf failed
1160 !!! If you need support, post the topmost build error, NOT this status message.
1161 </pre>
1162
1163 <p>
1164 Please attach any file mentioned like this to your bug report.
1165 </p>
1166
1167 <p>
1168 Sometimes a developer might ask you to attach a diff or patch for a file.
1169 Standard diff files can be obtained through:
1170 </p>
1171
1172 <pre caption="Standard Diff Creation">
1173 $ <i>cp file file.old</i>
1174 $ <i>nano file</i>
1175 $ <i>diff -u file.old file</i>
1176 </pre>
1177
1178 <p>
1179 For C/C++ source files, the <b>-p</b> flag is added to show what function calls
1180 the diff applies to:
1181 </p>
1182
1183 <pre caption="Diff-ing C/C++ source">
1184 $ <i>cp file.c file.c.old</i>
1185 $ <i>nano file.c</i>
1186 $ <i>diff -up file.c.old file.c</i>
1187 </pre>
1188
1189 <p>
1190 The documentation team will require the flag combination <b>-Nt</b> as well as
1191 <b>-u</b>. This mainly has to do with tab expansion. You can create such a diff
1192 with:
1193 </p>
1194
1195 <pre caption="Documentation diffs">
1196 $<i> cp file.xml file.xml.old</i>
1197 $<i> nano file.xml</i>
1198 $<i> diff -Nut file.xml.old file.xml</i>
1199 </pre>
1200
1201 <p>
1202 And your diff is created. While we're doing all this, suppose another person
1203 finds your bug by searching through bugzilla and is curious to keep track of
1204 the bug, they may do so by putting their email in the Add CC field of the bug
1205 as shown below. You could also keep track of other bugs by following the same
1206 method.
1207 </p>
1208
1209 <figure link="/images/docs/bugzie-add-email.png" caption="Adding Email To CC:"/>
1210
1211 <note>
1212 Email addresses must be registered with Gentoo Bugzilla. In order to CC multiple
1213 addresses, simply separate them with commas or spaces.
1214 </note>
1215
1216 <p>
1217 After all this work, the bug can undergo various status markings. This is
1218 usually done by the Gentoo Developers and sometimes by the reporter. The
1219 following are the various possible states a bug may go through during its
1220 lifetime.
1221 </p>
1222
1223 <ul>
1224 <li>
1225 UNCONFIRMED - You're generally not going to see this too often. This means
1226 that a bug reporter has opened a bug using the advanced method and is
1227 uncertain his or her bug is an actual bug.
1228 </li>
1229 <li>NEW - Bugs that are first opened are considered new.</li>
1230 <li>
1231 ASSIGNED - When the person you've assigned the bug too validates your bug,
1232 it will often receive ASSIGNED status while they figure out the issue.
1233 This lets you know that they've accepted your bug as a real bug.
1234 </li>
1235 <li>
1236 REOPENED - Someone has resolved a bug and you think the solution is not
1237 feasible or the problem still persists. At this point, you may re-open the
1238 bug. Please <b>do not abuse this</b>. If a developer closes the bug a
1239 second or third time, chances are that your bug is closed.
1240 </li>
1241 <li>
1242 RESOLVED - A firm decision has been taken on the bug. Usually goes onto
1243 FIXED to indicate the bug is solved and the matter closed although various
1244 other resolutions are possible. We'll look into those a little later.
1245 </li>
1246 <li>
1247 VERIFIED - The steps take to work the bug are correct. This is usually a QA
1248 thing.
1249 </li>
1250 <li>
1251 CLOSED - Basically means RIP for the bug and it's buried under the never
1252 ending flow of new bugs.
1253 </li>
1254 </ul>
1255
1256 <p>
1257 Now shortly afterward, we find the error in the strace log and fix the bug and
1258 mark it as RESOLVED FIXED and mention that there was a change in the location
1259 of configuration files, and that I will update the ebuild with a warning about
1260 it. The bug now becomes resolved, and you are shown the following.
1261 </p>
1262
1263 <figure link="/images/docs/bugzie-reso.png" caption="Resolved Bug"/>
1264
1265 <p>
1266 A little below, you'll see the following:
1267 </p>
1268
1269 <figure link="/images/docs/bugzie-options.png" caption="Bug Options"/>
1270
1271 <p>
1272 This gives you the option of Reopening the bug if you wish to (i.e. the
1273 developer thinks it's resolved but it's really not to your standards). Now our
1274 bug is fixed! However, different resolutions can occur. Here's a small list:
1275 </p>
1276
1277 <ul>
1278 <li>
1279 FIXED - The bug is fixed, follow the instructions to resolve your issue.
1280 </li>
1281 <li>
1282 INVALID - You did not do something specifically documented, causing the
1283 bug.
1284 </li>
1285 <li>DUPLICATE - You didn't use this guide and reported a duplicate bug.</li>
1286 <li>
1287 WORKSFORME - Developer/person assigned the bug cannot reproduce your error.
1288 </li>
1289 <li>
1290 CANTFIX - Somehow the bug cannot be solved because of certain
1291 circumstances. These circumstances will be noted by the person taking the
1292 bug.
1293 </li>
1294 <li>
1295 WONTFIX - This is usually applied to new ebuilds or feature requests.
1296 Basically the developer does not want to add a certain feature because it
1297 is not needed, a better alternative exists, or it's just plain broken.
1298 Sometimes you may be given a solution to get said issue resolved.
1299 </li>
1300 <li>
1301 UPSTREAM - The bug cannot be fixed by the Gentoo development team, and have
1302 requested you take the problem upstream (the people that actually made the
1303 program) for review. Upstream has a few ways of handling bugs. These
1304 include mailing lists, irc channels, and even bug reporting systems. If
1305 you're not sure how to contact them, ask in the bug and someone will point
1306 you to the right direction.
1307 </li>
1308 </ul>
1309
1310 <p>
1311 Sometimes, before the bug can be resolved, a developer may request that you
1312 test an updated ebulid. In the next chapter we'll take a look at testing
1313 ebuilds.
1314 </p>
1315
1316 </body>
1317 </section>
1318 </chapter>
1319
1320 <chapter>
1321 <title>Testing Ebuilds</title>
1322 <section>
1323 <title>Getting The Files</title>
1324 <body>
1325
1326 <p>
1327 Let's say that you reported a bug for the foobar2 compile fix from earlier. Now
1328 developers might find out what the problem is and might need you to test the
1329 ebuild for them to be sure it works for you as well:
1330 </p>
1331
1332 <figure link="/images/docs/bugzie-ebuild-request.png" caption="Ebuild Test Request"/>
1333
1334 <p>
1335 Some rather confusing vocabulary is used here. First off, let's see what an
1336 overlay is. An overlay is a special directory like <path>/usr/portage</path>,
1337 the difference being that when you <c>emerge sync</c>, files contained within it
1338 will not be deleted. Luckily, a special <path>/usr/local/portage</path>
1339 directory is created for that purpose. Let's go ahead and set our portage
1340 overlay in<path>/etc/make.conf</path>. Open make.conf up in your favorite editor
1341 and add this towards the end.
1342 </p>
1343
1344 <pre caption="Setting Up PORTDIR_OVERLAY">
1345 PORTDIR_OVERLAY="/usr/local/portage"
1346 </pre>
1347
1348 <p>
1349 Now we'll want to create the appropriate directories to put our test ebuild
1350 files in. In this case, we're supposed to put them in sys-apps/foobar2. You'll
1351 notice that the second comment asks for a <path>files</path> directory for the
1352 patch. This directory holds other required files that aren't included with
1353 the standard source archive (patches, init.d scripts, etc). This is a subdir in
1354 the package directory called <path>files</path>. Go ahead and create these
1355 directories:
1356 </p>
1357
1358 <pre caption="Setting Up The Category And Package Directories">
1359 # <i>mkdir -p /usr/local/portage/sys-apps/foobar2/files</i>
1360 </pre>
1361
1362 <note>
1363 The -p in mkdir creates not only the directory you want but also any missing
1364 parent directories as well (sys-apps and foobar2 in this case).
1365 </note>
1366
1367 <p>
1368 Ok now, we can go ahead and download the files. First, download the ebuild
1369 into <path>/usr/local/portage/sys-apps/foobar2</path>, and then add the patch
1370 to <path>/usr/local/portage/sys-apps/foobar2/files</path>. Now that we have the
1371 files, we can begin working on testing the ebuild.
1372 </p>
1373
1374 </body>
1375 </section>
1376 <section>
1377 <title>Testing The ebuild</title>
1378 <body>
1379
1380 <p>
1381 The process to create an ebuild that can be used by emerge is fairly simple. You
1382 must create a Manifest file for the ebuild. This can be done with
1383 the ebuild command. Run it as shown.
1384 </p>
1385
1386 <pre caption="Creating the Manifest file">
1387 # <i>ebuild foobar2-1.0.ebuild manifest</i>
1388 &gt;&gt;&gt; Creating Manifest for /usr/local/portage/sys-apps/foobar2
1389 </pre>
1390
1391 <p>
1392 Now let's test to see if it works as it should.
1393 </p>
1394
1395 <pre caption="Testing With emerge -pv">
1396 # <i>emerge -pv foobar2</i>
1397
1398 These are the packages that I would merge, in order:
1399
1400 Calculating dependencies ...done!
1401 [ebuild N ] sys-apps/foobar2-1.0 0 kB [1]
1402
1403 Total size of downloads: 0 kB
1404 Portage overlays:
1405 [1] /usr/local/portage
1406 </pre>
1407
1408 <p>
1409 It does seem to have worked! You'll notice the [1] next to the [ebuild] line.
1410 That points to <path>/usr/local/portage</path>, which is the overlay we created
1411 earlier. Now we go ahead and emerge the package.
1412 </p>
1413
1414 <pre caption="Emerge Result">
1415 # <i>emerge foobar2</i>
1416 Calculating dependencies ...done!
1417 <comment>(compile info snipped)</comment>
1418 >>> Unpacking foobar2-1.0.tar.bz2 to /var/tmp/portage/foobar2-1.0/work
1419 * Applying foobar2-1.0-Makefile.patch ... [ ok ]
1420 <comment>(compile info snipped)</comment>
1421 >>> Merging sys-apps/foobar2-1.0 to /
1422 >>> chris +sandbox(preinst)
1423 --- /usr/
1424 --- /usr/bin/
1425 >>> /usr/bin/foobar2
1426 </pre>
1427
1428 <p>
1429 In the first section we see that the emerge started off as it should. The second
1430 section shows our patch being applied successfully by the "[ ok ]" status
1431 message to the right. The last section tells us the program compiled ok. The
1432 patch works! Now we can go and let the developer know that their patch works
1433 fine, and that they can commit the fix to portage.
1434 </p>
1435
1436 </body>
1437 </section>
1438 <section>
1439 <title>Conclusion</title>
1440 <body>
1441
1442 <p>
1443 This concludes the howto on working with Bugzilla. I hope you find this useful.
1444 If you have any questions, comments, or ideas regarding this document, please
1445 send them to me at <mail>chriswhite@gentoo.org</mail>. Special thanks go to
1446 moreon for his notes on -g flags and compile errors, the people at #gentoo-bugs
1447 for helping out with bug-wrangling, Griffon26 for his notes on
1448 maintainer-needed, robbat2 for general suggestions and fox2mike for fixing up
1449 the doc and adding stuff as needed.
1450 </p>
1451
1452 </body>
1453 </section>
1454 </chapter>
1455 </guide>

  ViewVC Help
Powered by ViewVC 1.1.20