2 @chapter @sc{gnats} Administration
3 @cindex administering @sc{gnats}
4 @cindex managing @sc{gnats}
5 @cindex GNATS management
6 @cindex duties for @code{gnats-admin}
8 In daily usage, @sc{gnats} is self-maintaining. However, there are
9 various administrative duties which need to be performed periodically:
12 @item emptying the @code{pending} directory
13 @cindex emptying the @code{pending} directory
14 If a Problem Report arrives with a @samp{>Category:} value that is
15 unrecognized by the @file{categories} file, or if that field is missing,
16 @sc{gnats} places the PR in the @w{@file{pending}} directory
17 (@pxref{Locations,,Where the tools and utilities reside}). @sc{gnats}
18 has no way of knowing which subdirectory the PR should be filed under.
19 @sc{gnats} sends a notice to the @code{gnats-admin} and to the party
20 responsible for that submitter (as listed in the @file{submitters} file)
23 To file these PRs, simply use @code{edit-pr} to repair the problematic
24 fields in each file in the @file{pending} directory. Be sure to change
25 the @samp{>Category:} field of the PR from @samp{pending} to an
26 appropriate category. In many cases the culprit is simply a
27 typographical error, although it may be necessary sometimes to contact
28 the submitter of the PR to decipher her or his intentions.
30 Should you run out of disk space, there may be an empty PR in the
31 @file{pending} directory. In that case, look in the file
32 @w{@file{@var{GNATS_ROOT}/gnats-adm/bug.log}}, which should still contain
33 the full message that was submitted.
35 @item adding new categories
36 @cindex adding a problem category
38 To add a new category, simply insert a new line in the
39 @w{@file{categories}} file and then run the program @code{mkcat}.
41 @emph{Note}: this causes all category lists for @code{send-pr} (except
42 the one on the local machine) to become outdated. Copy the new list on
43 to every machine on your network that has @code{send-pr} installed, and
44 make sure you advise remote submitters that the category list has
45 changed. @xref{mkcat,,Adding a problem category}. Also
46 @ref{categories,,The @code{categories} file}.
48 @item removing categories
49 @cindex removing a problem category
51 To remove a category, you need to make sure the relevant subdirectory is
52 empty (in other words, make sure no PRs exist for the category you wish
53 to remove). You can then remove the category listing from the
54 @file{categories} file, and invoke
57 rmcat @var{category@dots{}}
61 to remove @var{category} (any number of categories may be specified on
62 the command line to @code{rmcat}, so long as they abide by the above
65 @emph{Note}: this causes all category lists for @code{send-pr} (except
66 the one on the local machine) to become outdated. Copy the new list on
67 to every machine on your network that has @code{send-pr} installed, and
68 make sure you advise remote submitters that the category list has
69 changed. @xref{rmcat,,Removing a problem category}. Also
70 @ref{categories,,The @code{categories} file}.
72 @item adding and removing maintainers
73 @cindex adding and removing maintainers
74 Edit the @file{responsible} file to add a new maintainer or to remove an
75 existing maintainer. @xref{responsible,,The @code{responsible} file}.
77 @item building a distribution of @code{send-pr}
78 @cindex building a distribution of @code{send-pr}
80 You can build a distribution of @code{send-pr} which contains valid
81 information for your site by invoking the command @code{mkdist}.
82 @xref{mkdist,,Configuring @code{send-pr} for the outside world}. You
83 can then distribute your customized @w{@code{send-pr}} to your
84 customers, friends, relatives, etc., so that they can submit Problem
85 Reports to your database.
87 @item building a new index
88 @cindex building a new index
89 @cindex @code{gen-index}
90 If your index becomes corrupted, or if you wish to generate a new one
91 for some reason, use the program @code{gen-index}
92 (@pxref{gen-index,,Regenerating the index}).
94 @item pruning log files
95 @cindex pruning log files
96 Log files often grow to unfathomable proportions. As with gardening, it
97 is best to prune these as they grow, lest they take over your disk and
98 leave you with no room to gather more Problem Reports. If you keep log
99 files, be sure to keep an eye on them. (@xref{Aliases,,Setting up mail
101 @c "gather ye rosebugs while ye may..."
103 @item BACKING UP YOUR DATA
104 @cindex BACK UP YOUR DATA
105 Any database is only useful if its data remains uncorrupted and safe.
106 Performing periodic backups ensures that problems like disk crashes and
107 data corruption are reversible.
111 @xref{Locations,,Where @sc{gnats} lives}.
114 * Networked management:: Managing GNATS over a network
115 * Local configuration:: Changing your local configuration
116 * Admin files:: Administrative data files
117 * Admin utils:: Administrative utilities
118 * Internal utils:: Internal utilities
121 @node Networked management
122 @section Managing @sc{gnats} over a network
123 @cindex networked management
124 @cindex managing @sc{gnats} over a network
126 If you have installed the @sc{gnats} user tools on machines around your
127 local network, there are a few things you need to remember.
129 @code{mkcat} and @code{rmcat} do not update the categories list for
130 other machines on your network which have @code{send-pr} installed,
131 unless those machines share @var{prefix} with the host machine). To
132 update these lists, copy the @code{send-pr} categories list to each of
133 the other hosts. This categories list is
134 @w{@file{@var{prefix}/lib/gnats/@var{site}}}, where @var{site} is the
135 name tag for your local site, as specified in the @file{config} file as
136 @samp{GNATS_SITE} (@pxref{config,,The @code{config} file}).
138 It is also important to note that only your local @code{send-pr} has
139 access to this new information; any copies of @code{send-pr} which you
140 have distributed to outside submitters now have outdated category lists.
141 You must either contact your submitters and instruct them to update
142 their copy of the categories list, which they installed in
143 @w{@file{@var{prefix}/lib/gnats/@var{support-site}}} from the
144 distribution you provided, or you must build another distribution of
145 @code{send-pr} with this new information and redistribute it.
147 If you need to use @sc{gnats} utilities, like @code{query-pr} and
148 @code{edit-pr}, on other systems besides the one where @sc{gnats} itself
149 resides, @pxref{Installing tools,,Installing the user tools}.
151 @c FIXME - anything else?
153 @node Local configuration
154 @section Changing your local configuration
155 @cindex local configuration
156 @cindex changing your local configuration
158 @xref{Locations,,Where @sc{gnats} lives}.
160 Your local configuration is determined by the data files in the
161 directory @w{@file{@var{GNATS_ROOT}/gnats-adm}}. These can be altered at
162 any time by editing the pertinent file.
165 @cindex @code{config} file
167 Variables which control certain behavior. @xref{config,,The
168 @code{config} file}. Behaviors you can change here include
172 The address where your site receives Problem Reports.
175 The address of the @sc{gnats} administrator.
178 The nametag for your Support Site (your organization, company,
182 The nametag for your local Submitter Site.
185 The default release for your site.
188 The default value for the @samp{>Organization:} field (this value
189 appears as the default when you run @code{send-pr}).
192 Whether or not to remind maintainers if a requisite time period has
193 passed before they change the state of a Problem Report to
194 @samp{analyzed}. (Also see @ref{submitters,,The @code{submitters}
195 file}, and @ref{at-pr,,Timely Reminders}.
198 Whether or not to send an automatic acknowledgement to the originator of
199 a problem report when the @sc{gnats} first receives the PR.
202 The value @sc{gnats} assigns to PRs which come in with missing or unknown
203 values for the @samp{>Submitter-Id:} field.
206 Whether or not @sc{gnats} should retain @samp{Received:}
207 mail headers from incoming mail.
210 Whether or not @sc{gnats} is in a mode for debugging.
213 The values which define business hours.
216 @cindex @code{categories} file
218 The list of categories that @sc{gnats} accepts as valid for the
219 @samp{>Category:} field, and the maintainers responsible for each
220 category. Update this file whenever you have a new category, or
221 whenever a category is no longer valid. You must also update this file
222 whenever responsiblility for a category changes, or if a maintainer is
223 no longer valid. @xref{categories,,The @code{categories} file}. Also
224 see @ref{mkcat,,Adding a new problem category}, and @ref{rmcat,,Removing
227 @cindex @code{responsible} file
229 The list of maintainers. Update this file whenever you have a new
230 maintainer, or whenever a maintainer is no longer valid.
231 @xref{responsible,,The @code{responsible} file}.
233 @cindex @code{submitters} file
235 The list of Submitter Sites from whom @sc{gnats} accepts Problem Reports.
236 This file is mandatory, although the feature it provides is not; see
237 @ref{submitters,,The @code{submitters} file}.
242 * config:: The `config' file
243 * categories:: The `categories' file
244 * responsible:: The `responsible' file
245 * submitters:: The `submitters' file
248 @node default behavior
249 @subsection Default behavior
251 The default behavior for @sc{gnats} is as follows:
253 @cindex default behavior
256 The address where your site receives Problem Reports is @samp{bugs} (a
260 The address of the @sc{gnats} administrator is @samp{gnats-admin} (a local
264 The nametag for your Support Site (your organization, company, group,
265 etc.) is the second-to-last field in your domain name.
268 The nametag for your local Submitter Site is the nametag for your
272 The default release for your site is @samp{unknown-1.0}.
275 The default value for the @samp{>Organization:} field (this value appears as the
276 default when you run @code{send-pr}) is the nametag for your Support
280 @sc{gnats} reminds maintainers if a requisite time period has passed
281 before they change the state of a Problem Report to @samp{analyzed}.
284 An automatic acknowledgement is sent to the originator of a problem
285 report when the @sc{gnats} first receives the PR.
288 The value @sc{gnats} assigns to the @samp{>Submitter-Id:} field in PRs
289 which arrive with missing or unknown values for that field is
293 @samp{Received@dots{}} mail headers are retained.
296 @sc{gnats} is not in a debugging mode.
299 @dfn{business hours} are defined as 8:00am to 5:00pm, Monday through
305 @subsection The @code{config} file
306 @cindex @code{config} file
308 Much of the behavior @sc{gnats} exhibits depends on the values of fields
309 in the file @w{@file{@var{GNATS_ROOT}/gnats-adm/config}}. The
310 @file{config} file contains a list of variables (using Bourne-shell
311 syntax) which control the following behavior. These values can be
312 changed at any time; the new values take effect for all subsequent
313 iterations of the tools.
316 @cindex @code{GNATS_ADDR}
317 @item GNATS_ADDR="@var{address}"
318 The address where your site receives Problem Reports. This address is
319 aliased in the file @w{@file{/etc/aliases}} so that it directs incoming
320 mail into @code{queue-pr} (@pxref{Installing utils,,Installing the
323 The default is @samp{bugs} (a local address).
325 @cindex @code{GNATS_ADMIN}
326 @item GNATS_ADMIN="@var{address}"
327 The address of the @sc{gnats} administrator. Normally this is set to
328 @samp{gnats-admin}, which is an alias in @file{/etc/aliases} that points
329 toward the person responsible for administrating @sc{gnats}.
330 @xref{Installing utils,,Installing the utilities}.
332 The default is @samp{gnats-admin} (a local address).
334 @cindex @code{GNATS_SITE}
335 @item GNATS_SITE="@var{site}"
336 The nametag for your Support Site (your organization, company, group,
337 etc.). This nametag should also appear in the @file{submitters} file,
338 so that users at your site can submit Problem Reports locally.
340 @var{site} is also used as the name of the file containing a valid
341 category list for your site. This file is installed locally as
342 @w{@file{@var{prefix}/lib/gnats/@var{site}}}. @emph{Warning:} if you
343 change this variable after @sc{gnats} is installed, you must also change
344 the name of this file, as well as the name of the alias for your local
345 submitters (@pxref{Aliases,,Setting up mail aliases}).
347 The default is the second-to-last field in your domain name. For
348 example, if your domain name is @w{@samp{unleaded.truckstop.org}}, your
349 default @var{site} is @w{@samp{truckstop}}.
351 @cindex @code{SUBMITTER}
352 @item SUBMITTER="@var{submitter-id}"
353 The nametag for your local Submitter Site (this value appears as the
354 default value for @samp{>Submitter-Id} when you run @code{send-pr}).
355 Even though you are a Support Site, if you submit Problem Reports to
356 your own organization you become a Submitter Site. The value
357 @var{submitter-id} is the default value for the @samp{>Submitter-Id:}
358 field that your maintainers see when they submit Problem Reports
361 The default is the value of @samp{GNATS_SITE}.
363 @cindex @code{DEFAULT_RELEASE}
364 @item DEFAULT_RELEASE="@var{release}"
365 The default release for your site (this value appears as the default
366 value for @samp{>Release:} when you run @code{send-pr}).
368 The default is @samp{unknown-1.0}.
370 @cindex @code{DEFAULT_ORGANIZATION}
371 @item DEFAULT_ORGANIZATION="@var{text}"
372 The default value for the @samp{>Organization:} field (this value
373 appears as the default when you run @code{send-pr}).
375 The default is the value of @samp{GNATS_SITE}.
377 @c FIXME - where else to mention this stuff?
378 @cindex @code{NOTIFY}
379 @item NOTIFY=@var{boolean}
380 Determines whether or not to remind maintainers if a requisite time
381 period has passed before they change the state of a Problem Report to
382 @samp{analyzed}. This feature uses the program @code{at-pr}; see
383 @ref{at-pr,,Timely Reminders}.
385 This requisite time is determined for each submitter individually; see
386 @ref{submitters,,The @code{submitters} file}. The time is measured in
387 @dfn{business hours}, which by default are 8:00am to 5:00pm, Monday
388 through Friday. Business hours can be redefined by changing the
389 variables @code{BDAY_START}, @code{BDAY_END}, @code{BWEEK_START}, and
390 @code{BWEEK_END} in the @file{config} file (see below).
392 If @var{boolean} is @samp{1}, this feature is active. If @var{boolean}
393 is @samp{0}, the feature is turned off. The default value for
394 @samp{NOTIFY} is @samp{1}.
396 @cindex @code{ACKNOWLEDGE}
397 @item ACKNOWLEDGE=@var{boolean}
398 Determines whether or not to send an automatic acknowledgement to the
399 originator of a problem report when the @sc{gnats} first receives the PR.
401 If @var{boolean} is @samp{1}, this feature is active. If @var{boolean}
402 is @samp{0}, the feature is turned off. The default for
403 @samp{ACKNOWLEDGE} is @samp{1}.
405 The acknowledgment is of the form:
409 To: @var{your-address}
411 Subject: Re: @var{category}/@var{gnats-id}:@var{Synopsis}
412 In-Reply-To: Your message of @var{date}
414 Thank you very much for your problem report.
415 It has the internal identification: @var{category}/@var{gnats-id}
416 The individual assigned to look at your bug is:
419 Category: @var{category of the PR}
420 Responsible: @var{responsible}
421 Synopsis: @var{Synopsis from submitted PR}
422 Arrival-Date: @var{arrival date}
426 @cindex @code{DEFAULT_SUBMITTER}
427 @item DEFAULT_SUBMITTER="submitter-id"
428 The value @sc{gnats} assigns to PRs which come in with missing or unknown
429 values for the @samp{>Submitter-Id:} field. This value must also appear
430 in the @file{submitters} file; see @ref{submitters,,The
431 @code{submitters} file}.
433 @cindex disabling @var{submitter-id}
434 To disable the feature of @sc{gnats} which tracks the
435 @samp{>Submitter-Id:}, simply alter the @file{submitters} file to only
436 contain the @var{submitter-id} value which appears in
437 @w{@code{DEFAULT_SUBMITTER}}, and instruct your submitters to ignore
440 The default value for @samp{DEFAULT_SUBMITTER} is @samp{unknown}.
442 @cindex @code{KEEP_RECEIVED_HEADERS}
443 @item KEEP_RECEIVED_HEADERS=@var{boolean}
444 Determines whether or not @sc{gnats} should retain the
445 @w{@samp{Received:}} mail headers from incoming mail. These headers
446 often take up a lot of space, and they are seldom used.
448 If @var{boolean} is @samp{1}, this feature is active. If @var{boolean}
449 is @samp{0}, the feature is turned off. The default value for
450 @samp{KEEP_RECEIVED_HEADERS} is @samp{1}.
452 @item DEBUG_MODE=@var{boolean}
453 Determines whether or not @sc{gnats} is operating in a mode for
454 debugging. When @var{boolean} is @samp{1}, @sc{gnats} forwards all mail
455 to the @sc{gnats} administrator, @w{@code{gnats-admin}}.
457 @cindex business hours
458 @item BDAY_START=@var{integer}
459 @itemx BDAY_END=@var{integer}
460 @itemx BWEEK_START=@var{integer}
461 @itemx BWEEK_END=@var{integer}
462 The definition of @dfn{business hours}. These values are only used if
463 @code{NOTIFY} is set to @samp{1} in the @file{config} file (see above).
465 By default, business hours are 8:00am to 5:00pm Monday through Friday,
469 @item BDAY_START=@var{integer}
470 Defines the hour of the day when business hours begin. @var{integer}
471 values must fall between @samp{0} (midnight) and @samp{23} (11:00pm).
472 The default is @samp{8} (8:00am).
474 @item BDAY_END=@var{integer}
475 Defines the hour of the day when business hours end. @var{integer}
476 values must fall between @samp{0} (midnight) and @samp{23} (11:00pm).
477 The default is @samp{17} (5:00pm).
479 @item BWEEK_START=@var{integer}
480 Defines the beginning day of the business week. @var{integer} values
481 must fall between @samp{0} (Sunday) and @samp{6} (Saturday). The
482 default is @samp{1} (Monday).
484 @item BWEEK_END=@var{integer}
485 Defines the ending day of the business week. @var{integer} values must
486 fall between @samp{0} (Sunday) and @samp{6} (Saturday). The default is
493 @subsection The @code{categories} file
494 @cindex @code{categories} file
496 The @file{categories} file contains a list of problem categories,
497 specific to your site, which @sc{gnats} tracks. This file also matches
498 responsible people with these categories. You must edit this file
499 initially, creating valid categories and then running @code{mkcat} to
500 create the corresponding subdirectories of @w{@code{@var{GNATS_ROOT}}}
501 and update the valid categories list for @w{@code{send-pr}}. For
502 instructions on running @code{mkcat}, see @ref{mkcat,,Adding a problem
505 To create a new category, log in as @sc{gnats}, add a line to this file,
506 and run @code{mkcat}. Lines beginning with @samp{#} are ignored.
508 A line in the @file{categories} file consists of four fields delimited
509 by colons, as follows:
512 @var{category}:@var{description}:@var{responsible}:@var{notify}
518 A unique category name, made up of text characters. This name cannot
519 contain spaces or any of the following characters:
522 ! $ & * ( ) @{ @} [ ] ` ' " ; : < > ~
526 Ideally, category names should not contain commas or begin with periods.
527 Each line has a corresponding subdirectory in the main @sc{gnats}
528 directory (@var{GNATS_ROOT}).
531 It is possible that if you set up the database with categories
532 which contain characters that describe subdirectories, such as a slash
533 (@key{/}) in @sc{Unix}, you could effectively build subdirectories
534 within each category, and @sc{gnats} would read and write to these
535 files as it would any other. This is not recommended. It doesn't
536 break any of the existing tools, and is a fine way to keep category
537 directories from growing too large. It is, however, quite untested.
541 A terse textual description of the category.
544 The name tag of the party responsible for this category of problems, as
545 listed in the @file{responsible} file (@pxref{responsible,,The
546 @code{responsible} file}).
549 One or more other parties which should be notified when a Problem Report
550 with this category arrives, such as a project manager, other members of
551 the same project, other interested parties, or even log files. These
552 should be separated with commas.
555 A good strategy for configuring this file is to have a different
556 category for each product your organization supports or wishes to track
557 information for, or perhaps with sub-categories within each category.
558 For instance, if you wish to track documentation problems in a variety of
559 areas, you could have entries such as
562 doc:General Doc Questions:myboss:me,barney
563 doc-rock:Doc for ROCK program:me:myboss
564 doc-stone:Docs for STONE utils:barney:fred
565 doc-local:in-house documentation:me:doc-local-log
568 In the above example, the nametags @samp{myboss}, @samp{me},
569 @samp{fred}, and @samp{barney} must be defined in the @file{responsible}
570 file (@pxref{responsible,,The @code{responsible} file}).
572 Problem Reports with a category of @samp{doc} are sent to the local mail
573 address (or alias) @samp{myboss}, and also sent to the addresses
574 @samp{me} and @samp{barney}. PRs with a category of @samp{doc-rock} are
575 sent to the local addresses @samp{me} and @samp{myboss} only, while PRs
576 with the category @samp{doc-stone} are sent to @samp{fred} as well as to
577 @samp{barney}. PRs with a category of @samp{doc-local} are sent only to
578 @samp{me}, and are also filed in @code{doc-local-log} (in this case, an
579 alias should be set up in @file{/etc/aliases} to reflect a location for
580 the log file, such as @w{@samp{doc-local-log: /users/me/local-log}}).
582 Whenever you add a new category, be sure to run @code{mkcat} to create a
583 subdirectory for it and update the local categories list.
585 Only one category must be present for @sc{gnats} to function:
588 pending:Category for faulty PRs: gnats-admin:
591 @cindex @code{pending} file
592 The @file{pending} directory is created automatically when you run
593 @w{@samp{make install}} (@pxref{Configure and make,,Configuring and
594 compiling the software}).
597 @subsection The @code{responsible} file
598 @cindex @code{responsible} file
600 This file contains a list of the responsible parties. Lines beginning
601 with @samp{#} are ignored. Each entry contains three fields, separated
605 @var{responsible}:@var{full-name}:@var{mail-address}
611 A name-tag description of the party in question, such as her or his user
612 name, or the name of the group. This name is listed in the PR in
613 the @samp{>Responsible:} field.
616 The full name of the party (``Charlotte Bronte''; ``Compiler Group'').
619 The full, valid mail address of the party. This field is only necessary
620 if the responsible party has no local mail address or alias.
624 A sample @file{responsible} listing might be:
628 stimpy:Stimpson J. Cat:stimpy@@lederhosen.org
631 Here, @code{ren} is a local user. @code{stimpy} is remote, so his full
632 address must be specified.
634 The following entry must be present for @sc{gnats} to function:
637 gnats-admin: GNATS administrator:
641 (@code{gnats-admin} is a mail alias, so for this purpose
642 @code{gnats-admin} is a local address.)
645 @subsection The @code{submitters} file
646 @cindex @code{submitters} file
648 This is a database of sites which submit bugs to your support site. It
649 contains six fields delineated by colons. Lines beginning with @samp{#}
652 Entries are of the format:
655 @var{submitter-id}:@var{name}:@var{type}:@var{resp-time}:@var{contact}:@var{notify}
661 A unique identifier for a specific site or other entity who submits
665 A textual description of this entity.
668 Optional description for the type of relationship this submitter to your
669 support site. This could indicate a contract type, a level of
670 expertise, etc., or it can remain blank.
673 Optional quoted response time, in @dfn{business hours}. @sc{gnats} is
674 capable of reminding responsible parties when Problem Reports marked
675 with a @samp{>Severity} value of @samp{critical}, or those with a
676 @samp{>Severity} of @samp{serious} and a @samp{>Priority} value of
677 @samp{high}, are neglected for a certain period. This argument defines
678 that response period for each @var{submitter-id}. Business hours are
679 defined by default as 8:00am to 5:00pm, Monday through Friday. For
680 example, three business days would be equal to 24 business hours.
682 This function is active if the @code{NOTIFY} field is defined as
683 @samp{1} in the @file{config} file (@pxref{Local configuration,,Changing
684 your local configuration}). If @code{NOTIFY} is @samp{0}, this field is
685 ignored. For information on @code{at-pr}, the program which sends out
686 this reminder, see @ref{at-pr,,Timely Reminders}.
689 The name tag of the main @dfn{contact} at the Support Site for this
690 submitter. This contact should be in the @file{responsible} file
691 (@pxref{responsible,,The @code{responsible} file}). Incoming bugs from
692 @var{submitter} are sent to this contact. Optionally, this field can be
696 Any other parties who should receive copies of Problem Reports sent in
700 A few example entries in the @file{submitters} file:
703 univ-hell: University of Hades:eternal:3:beelzebub:lucifer
704 tta: Telephones and Telegraphs of America:support:720:dave:
708 In this example, when a PR comes in from the University of Hades (who
709 has an eternal contract), it should have @samp{univ-hell} in its
710 @samp{Submitter-Id} field. This Problem Report goes to @code{beelzebub}
711 (who should be in the @file{responsible} file), and if it is not
712 analyzed within three business hours a reminder message is sent.
713 @code{lucifer} also receives a copy of the bug, and a copy of the
714 reminder message as well (if it is sent). When Telephones and
715 Telegraphs of America utilizes their support contract and submits a bug,
716 a copy is sent only to @code{dave}, who has 720 business hours to return
717 an analysis before a reminder is sent.
719 @cindex disabling @var{submitter-id}
720 To disable the feature of @sc{gnats} which tracks the
721 @samp{>Submitter-Id:}, simply alter the @file{submitters} file to only
722 contain the @var{submitter-id} value which appears as the
723 @samp{DEFAULT_SUBMITTER} value in the @file{config} file
724 (@pxref{config,,The @code{config} file}), and instruct your submitters
728 @section Administrative data files
730 @cindex files used for @sc{gnats} administration
732 The following files are located in @file{@var{GNATS_ROOT}/gnats-adm},
733 where @var{GNATS_ROOT} is the resident directory of @sc{gnats}. These
734 files are maintained by @sc{gnats}; you should never touch them.
737 * index file:: The `index' file
738 * current file:: The `current' file
742 @subsection The @code{index} file
743 @cindex @code{index} file
745 The index is used to accelerate searches on the database by
746 @code{query-pr} and @code{edit-pr}. This file is not created until the
747 first PR comes in. It is then kept up to date by @sc{gnats}; you should
748 never touch this file.
750 Any searches on subjects contained in the index are much faster than
751 searches which depend on data not in the index. The index contains
752 single-line entries for the following fields, in order, separated by
753 colons (@samp{:}) except for @samp{>Category:} and @samp{>Number:},
754 which are separated by a slash (@samp{/}) (the @samp{>} and @samp{:}
755 Problem Report fieldname delimiters have been removed for the sake of
756 brevity and readability)::
759 Category Number Submitter-Id
760 Responsible State Confidential
764 To see an example index, run @code{gen-index} without any options
765 (@pxref{gen-index,,Regenerating the index}).
768 @subsection The @code{current} file
769 @cindex @code{current} file
771 This file contains the last serial number assigned to an incoming PR.
772 It is used internally by @sc{gnats}; you need never touch this file.
775 @section Administrative utilities
776 @cindex administrative utilities
778 These tools are used by the @sc{gnats} administrator as part of the
779 periodic maintenance and configuration of @sc{gnats}.
780 @xref{Management,,@sc{gnats} Administration}.
783 * mkcat:: Adding a problem category
784 * rmcat:: Removing a problem category
785 * gen-index:: Regenerating the index
786 * mkdist:: Configuring send-pr for the outside world
790 @subsection Adding a problem category
792 @cindex adding a problem category
793 @cindex new problem categories
794 @cindex @code{categories} file
796 To add new categories to the database:
800 Add a line to the @file{categories} file under
801 @w{@file{@var{GNATS_ROOT}/gnats-adm}} for each new category.
802 @xref{categories,,The @code{categories} file}.
805 Run @code{mkcat}. @code{mkcat} creates a directory under
806 @w{@var{GNATS_ROOT}} for any new categories which appear in the
807 @file{categories} file. @code{mkcat} also recreates the list of valid
808 categories for both your locally installed @code{send-pr} and for the
809 @code{send-pr} distribution template in
810 @w{@file{@var{prefix}/lib/gnats/dist}} (@pxref{Locations,,Where @sc{gnats}
814 @emph{Note:} @code{mkcat} does not update the categories list for other
815 machines on your network which have @code{send-pr} installed (unless
816 the two machines share the directory @var{prefix}).
817 @xref{Networked management,,Managing @sc{gnats} over a network}.
819 It is also important to note that only your local @code{send-pr} has
820 access to this new information; any copies of @code{send-pr} which you
821 have distributed to outside submitters now have outdated category lists.
822 You must either contact your submitters and instruct them to update
823 their copy of the categories list, which they installed in
824 @w{@file{@var{prefix}/lib/gnats/@var{support-site}}} (@emph{Note:} the
825 value for @var{prefix} may be different from yours) from the
826 distribution you provided, or you must build another distribution of
827 @code{send-pr} with this new information and redistribute it
828 (@pxref{mkdist,,Configuring @code{send-pr} for the outside world}).
831 @subsection Removing a problem category
833 @cindex removing a problem category
834 @cindex @code{categories} file
836 To remove a category from the database:
840 Remove the Problem Reports from the subdirectories corresponding to the
841 categories you wish to remove, or assign the PRs to new categories. All
842 PRs for a given category reside in
843 @w{@file{@var{GNATS_ROOT}/@var{category}}}. Make sure you do this for
844 each category you wish to remove.
847 Run @code{rmcat} using
850 rmcat @var{category} [ @var{category@dots{}} ]
854 where @var{category} is the category you wish to remove. You can
855 specify as many categories as you wish as long as each category has no
856 PRs associated with it. @code{rmcat} removes the directory under
857 @w{@var{GNATS_ROOT}} where the Problem Reports for that category had been
858 stored. @code{rmcat} also deletes the category from the list of valid
859 categories for both your locally installed @code{send-pr} and for the
860 @code{send-pr} distribution template in
861 @w{@file{@var{prefix}/lib/gnats/dist}} (@pxref{Locations,,Where @sc{gnats}
865 @emph{Note:} @code{rmcat} does not update the categories list for other
866 machines on your network which have @code{send-pr} installed.
867 @xref{Networked management,,Managing @sc{gnats} over a network}.
869 It is also important to note that only your local @code{send-pr} has
870 access to this new information; any copies of @code{send-pr} which you
871 have distributed to outside submitters now have outdated category lists.
872 You must either contact your submitters and instruct them to update
873 their copy of the categories list, which they installed in
874 @w{@file{@var{prefix}/lib/gnats/@var{support-site}}} (@emph{Note:} the
875 value for @var{prefix} may be different from yours) from the
876 distribution you provided, or you must build another distribution of
877 @code{send-pr} with this new information and redistribute it
878 (@pxref{mkdist,,Configuring @code{send-pr} for the outside world}).
880 @c FIXME! Should we suggest this?
882 To reassign a group of categories....
884 (The idea is to call "query-pr --full", run the output through sed, and
885 then throw it at pr-edit. This approach is untested, and may be unhealthy.)
890 @subsection Regenerating the index
891 @cindex @code{gen-index}
892 @cindex @code{index} file
894 If your @file{index} file becomes corrupted, or if you need a copy of
895 the current index for some reason, use
898 gen-index [ -n | --numeric ]
899 [ -d @var{directory} | --directory=@var{directory} ]
900 [ -c @var{filename} | --catfile=@var{filename} ]
901 [ -o @var{filename} | --outfile=@var{filename} ]
902 [ -h | --help] [ -V | --version ]
906 With no options, @code{gen-index} generates an index that is ordered the
907 same as the order of the categories as they appear in the
908 @file{categories} file, and prints it to standard output. The options
914 Sorts index entries numerically.
916 @item -d @var{directory}
917 @itemx --directory=@var{directory}
918 Uses @var{directory} as the directory containing the database, by
919 default @w{@var{GNATS_ROOT}} (@pxref{Locations,,Where @sc{gnats} lives}).
921 @item -o @var{filename}
922 @itemx --outfile=@var{filename}
923 Places output in @var{filename} rather than sending it to standard
926 @item -c @var{filename}
927 @itemx --catfile=@var{filename}
928 Point to @var{filename}, the file listing the valid categories.
932 Prints the usage for @code{gen-index}.
936 Prints the version number for @code{gen-index}.
940 @subsection Configuring @code{send-pr} for the outside world
941 @cindex configuring @code{send-pr} for the outside world
942 @cindex invoking @code{mkdist}
943 @cindex using @code{mkdist}
945 Now that @sc{gnats} is up and running on your system, you probably want
946 to distribute @code{send-pr} to all your friends, relatives, enemies,
947 etc. so they can more easily submit bugs to your organization. To do
948 this, create a new directory @var{dist-directory} to hold the
949 distribution. Then run the program
952 mkdist --release=@var{release} @var{dist-directory}
956 This populates @var{dist-directory} with a full distribution of the
957 program @code{send-pr}, including a @file{Makefile} and all the
958 @code{send-pr} documentation. You can then simply package up this
959 directory and send it to your bug report submitters. For example,
960 when logged in as @code{gnats} you can do the following:
964 mkdist --release=tools-1.2 new-dist
965 tar cvf send-pr.tar new-dist
968 This creates a file called @file{send-pr.tar} which contains a full
969 distribution of @code{send-pr} customized for your site, with a default
970 release number of @samp{tools-1.2}. You can then place this onto a disk
971 or tape and send it to your submitters, or instruct your submitters to
972 download it using @code{ftp}.
974 If you only have one submitter, you can set the Submitter ID in the
975 send-pr script by specifying the --submitter option to mkdist. If you
976 do this, the submitter will not have to run install-sid.
979 @section Internal utilities
980 @cindex internal utilities
982 These tools are used internally by @sc{gnats}. You should never need to
983 run these by hand; however, a complete understanding may help you locate
984 problems with the @sc{gnats} tools or with your local implementation.
987 * queue-pr:: Handling incoming traffic
988 * file-pr:: Processing incoming traffic
989 * at-pr:: Timely reminders
990 * pr-edit:: The edit-pr driver
991 * pr-addr:: Address retrieval
995 @subsection Handling incoming traffic
996 @cindex @code{queue-pr}
997 @cindex handling incoming traffic
999 The program @code{queue-pr} handles traffic coming into @sc{gnats}.
1000 @code{queue-pr} queues incoming Problem Reports in the directory
1001 @w{@file{@var{GNATS_ROOT}/gnats-queue}}, and then periodically (via
1002 @code{cron}) passes them on to @code{file-pr} to be filed in the
1003 @sc{gnats} database. @xref{Installation,,Installing @sc{gnats}}.
1005 The usage for @code{queue-pr} is as follows:
1008 queue-pr [ -q | --queue ] [ -r | --run ]
1009 [ -f @var{filename} | --file=@var{filename} ]
1010 [ -d @var{directory} | --directory=@var{directory} ]
1013 One of @samp{-q} or @samp{-r} (or their longer-named counterparts) must
1014 be present upon each call to @code{queue-pr}. These options provide
1015 different functions, as described below.
1020 Accepts standard input as an incoming mail message, placing this message
1021 in an incrementally numbered file in the @w{@file{gnats-queue}} directory
1022 under @w{@code{@var{GNATS_ROOT}}} (@pxref{Locations,,Where @sc{gnats}
1027 Redirects files in the @file{gnats-queue} directory into the program
1028 @code{file-pr} one by one.
1030 @item -f @var{filename}
1031 @itemx --file=@var{filename}
1032 Used with @samp{-q} (or @samp{--queue}), accepts the file denoted by
1033 @var{filename} as input rather than reading from standard input.
1035 @item -d @var{directory}
1036 @itemx --directory=@var{directory}
1037 Resets the default @var{directory} value, which is by default
1038 @w{@file{@var{GNATS_ROOT}/gnats-queue}}. When @w{@samp{-d
1039 @var{directory}}} is used in conjunction with the @samp{-q} (or
1040 @samp{--queue}) option, @w{@code{queue-pr}} files incoming messages into
1041 @var{directory} rather than the @file{gnats-queue} directory. When
1042 @w{@samp{-d @var{directory}}} is used in conjunction with the @samp{-r}
1043 (or @samp{--run}) option, @code{queue-pr} redirects into
1044 @w{@code{file-pr}} files from @var{directory} rather than from the
1045 @w{@file{gnats-queue}} directory.
1049 @subsection Processing incoming traffic
1050 @cindex @code{file-pr}
1051 @cindex processing incoming traffic
1053 @code{queue-pr} hands off queued Problem Reports to @code{file-pr} one
1054 at a time. @code{file-pr} checks each Problem Report for correct
1055 information in its fields (particularly a correct @samp{>Category:}),
1056 assigns it an identification number, and files it in the database under
1057 the appropriate category.
1059 If the @samp{>Category:} field does not contain a valid category value
1060 (i.e., matching a line in the @code{categories} file;
1061 @pxref{categories,,The @code{categories} file}), the PR is given a
1062 @samp{>Category:} value of @samp{pending} and is placed in the
1063 @file{pending} directory. The @sc{gnats} administrator is notified of
1066 @code{file-pr} assigns the Problem Report an identification number,
1067 files it in the @sc{gnats} database (under @w{@samp{pending}}, if the
1068 @samp{>Category:} field contains an invalid category), and sends
1069 acknowledgements to appropriate parties. The person responsible for
1070 that category of problem (@pxref{categories,,The @code{categories}
1071 file}) and the person responsible for the submitter site where the PR
1072 originated (@pxref{submitters,,The @code{submitters} file}) receive a
1073 copy of the PR in its entirety. Optionally, the originator of the PR
1074 receives an acknowledgement that the PR arrived and was filed
1075 (@pxref{Local configuration,,Changing your local configuration}).
1077 The usage for @code{file-pr} is as follows:
1080 file-pr [ -f @var{filename} | --file=@var{filename} ]
1081 [ -d @var{directory} | --directory=@var{directory}b ]
1082 [ -D | --debug ] [ -h | --help ] [ -V | --version ]
1085 @code{file-pr} requires no options in order to operate, and takes input
1086 from standard input (normally, the output of @w{@samp{queue-pr -r}})
1087 unless otherwise specified. The options include:
1090 @item -f @var{filename}
1091 @itemx --filename=@var{filename}
1092 Uses @var{filename} as input rather than standard input.
1094 @item -d @var{directory}
1095 @itemx --directory=@var{directory}
1096 Performs refiling operations in @var{directory} rather than in
1097 @w{@code{@var{GNATS_ROOT}}}.
1101 Give debugging output while @code{file-pr} is running.
1105 Prints the usage for @code{file-pr}.
1109 Prints the version number for @code{file-pr}.
1113 @subsection Timely reminders
1114 @cindex @code{at-pr}
1115 @cindex timely reminders
1116 @cindex automatic notification
1117 @cindex notification of overdue PRs
1119 @code{at-pr} creates a queued job using @code{at} which, after an
1120 allotted @dfn{response time} is past, checks the PR to see if its state
1121 has changed from @samp{open}.
1123 The @file{submitters} file contains the response time for each
1124 @w{@code{>Submitter-Id:}} (@pxref{submitters,,The @code{submitters} file}).
1125 The time is determined in @dfn{business hours}, which are defined by
1126 default as 8:00am to 5:00pm Monday through Friday, local time. These
1127 hours are defined in the @file{config} file (@pxref{config,,The
1128 @code{config} file}).
1130 If the PR is still open after the requisite time period has passed,
1131 @code{at-pr} sends a reminder to the @sc{gnats} administrator, to the
1132 maintainer responsible for that submitter, and to the maintainer
1133 responsible for the PR with the following message:
1135 @cindex reminder message
1136 @cindex @code{at-pr}
1138 To: @var{submitter-contact} @var{responsible} @var{gnats-admin}
1139 Subject: PR @var{gnats-id} not analyzed in @var{#hours} hours
1141 PR @var{gnats-id} was not analyzed within the acknowledgment period
1142 of @var{#hours} business hours. The pertinent information is:
1144 Submitter-Id: @var{submitter}
1145 Originator: @var{full name of the submitter}
1146 Synopsis: @var{synopsis}
1147 Person responsible for the PR: @var{responsible}
1150 The GNU Problem Report Management System (GNATS)
1154 @subsection The @code{edit-pr} driver
1155 @cindex @code{pr-edit}
1156 @cindex @code{edit-pr} driver
1157 @cindex driver for @code{edit-pr}
1159 @code{pr-edit} does the background work for @code{edit-pr}, including
1160 error-checking and refiling newly edited Problem Reports and handling
1161 file locks. It can be called interactively, though it has no useable
1164 The usage for @code{pr-edit} is:
1167 pr-edit [ -l @var{maintainer} --lock=@var{maintainer} ]
1168 [ -u | --unlock ] [ -c | --check ] [ -F ]
1169 [ -L | --lockdb ] [ -U | --unlockdb ]
1170 [ -f @var{filename} | --filename=@var{filename} ]
1171 [ -d @var{directory} | --directory=@var{directory} ]
1172 [ -h | --help ] [ -V | --version ]
1178 A @dfn{lock} is placed on a Problem Report while the PR is being edited.
1179 The lock is simply a file in the same directory as the PR, with the name
1180 @w{@file{@var{gnats-id}.lock}}, which contains the name of the maintainer
1181 who created the lock. @var{maintainer} then ``owns'' the lock, and must
1182 remove it before the PR can be locked again, even by the same
1183 @var{maintainer}@footnote{This approach may seem heavy-handed, but it
1184 ensures that changes are not overwritten.}. If a PR is already locked
1185 when you attempt to edit it, @code{pr-edit} prints an error message
1186 giving the name of the maintainer who is currently editing the PR.
1188 If you do not specify @w{@var{gnats-id}}, @code{pr-edit} reads from
1189 standard input. You must specify @w{@var{gnats-id}} for the functions
1190 which affect PR locks, @samp{--lock=@var{maintainer}} and
1194 @item -l @var{maintainer}
1195 @itemx --lock=@var{maintainer}
1196 Locks Problem Report @w{@var{gnats-id}}, failing (and returning an error
1197 message) if @w{@var{gnats-id}} is already locked, or if @w{@var{gnats-id}}
1198 does not exist. @code{pr-edit} requires that you specify
1199 @w{@var{gnats-id}} when using this option.
1203 Unlocks Problem Report @w{@var{gnats-id}}. @code{pr-edit} requires that
1204 you specify @w{@var{gnats-id}} when using this option. You must own a
1205 file lock to remove it.
1209 Locks the GNATS database as a whole. This will prevent any modification
1210 to any part of the system while it's locked.
1214 Unlocks the GNATS database as a whole, allowing modification of its
1219 Checks the Problem Report in @w{@var{gnats-id}} (or standard input, if
1220 @w{@var{gnats-id}} is not present) for correct information in its
1221 @w{@sc{Enumerated}} fields. @code{pr-edit} complains about any bogus
1222 information in the Problem Report.
1225 Forces the PR to be submitted to the database, even if there is no
1226 current index entry for it (i.e., even if the PR did not exist in the
1227 database previously).
1229 @emph{Warning: using this option may corrupt your index.} If you use
1230 it, be sure you know what you are doing.
1232 @item -f @var{filename}
1233 @itemx --filename=@var{filename}
1234 Reads @var{filename} rather than standard input.
1236 @item -d @var{directory}
1237 @itemx --directory=@var{directory}
1238 Resets the operating directory (@w{@code{@var{GNATS_ROOT}}}).
1242 Prints the usage for @code{pr-edit}.
1246 Prints the version number for @code{pr-edit}.
1249 @subsection Address retrieval
1250 @cindex address retrieval
1251 @cindex @code{pr-addr}
1253 Returns an electronic mail address when given a valid @dfn{nametag}, as
1254 it appears in the @file{responsible} file (@pxref{responsible,,The
1255 @code{responsible} file}). If @var{nametag} is not valid, @code{pr-addr}
1256 will tell the user that it could not find the requested address.