Mercurial > hg > xemacs-beta
diff man/gnats/p-admin.texi @ 112:48d667d6f17f r20-1b8
Import from CVS: tag r20-1b8
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:20:48 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/man/gnats/p-admin.texi Mon Aug 13 09:20:48 2007 +0200 @@ -0,0 +1,1262 @@ +@node Management +@chapter @sc{gnats} Administration +@cindex administering @sc{gnats} +@cindex managing @sc{gnats} +@cindex GNATS management +@cindex duties for @code{gnats-admin} + +In daily usage, @sc{gnats} is self-maintaining. However, there are +various administrative duties which need to be performed periodically: + +@table @emph +@item emptying the @code{pending} directory +@cindex emptying the @code{pending} directory +If a Problem Report arrives with a @samp{>Category:} value that is +unrecognized by the @file{categories} file, or if that field is missing, +@sc{gnats} places the PR in the @w{@file{pending}} directory +(@pxref{Locations,,Where the tools and utilities reside}). @sc{gnats} +has no way of knowing which subdirectory the PR should be filed under. +@sc{gnats} sends a notice to the @code{gnats-admin} and to the party +responsible for that submitter (as listed in the @file{submitters} file) +when this occurs. + +To file these PRs, simply use @code{edit-pr} to repair the problematic +fields in each file in the @file{pending} directory. Be sure to change +the @samp{>Category:} field of the PR from @samp{pending} to an +appropriate category. In many cases the culprit is simply a +typographical error, although it may be necessary sometimes to contact +the submitter of the PR to decipher her or his intentions. + +Should you run out of disk space, there may be an empty PR in the +@file{pending} directory. In that case, look in the file +@w{@file{@var{GNATS_ROOT}/gnats-adm/bug.log}}, which should still contain +the full message that was submitted. + +@item adding new categories +@cindex adding a problem category +@cindex @code{mkcat} +To add a new category, simply insert a new line in the +@w{@file{categories}} file and then run the program @code{mkcat}. + +@emph{Note}: this causes all category lists for @code{send-pr} (except +the one on the local machine) to become outdated. Copy the new list on +to every machine on your network that has @code{send-pr} installed, and +make sure you advise remote submitters that the category list has +changed. @xref{mkcat,,Adding a problem category}. Also +@ref{categories,,The @code{categories} file}. + +@item removing categories +@cindex removing a problem category +@cindex @code{rmcat} +To remove a category, you need to make sure the relevant subdirectory is +empty (in other words, make sure no PRs exist for the category you wish +to remove). You can then remove the category listing from the +@file{categories} file, and invoke + +@smallexample +rmcat @var{category@dots{}} +@end smallexample + +@noindent +to remove @var{category} (any number of categories may be specified on +the command line to @code{rmcat}, so long as they abide by the above +constraints). + +@emph{Note}: this causes all category lists for @code{send-pr} (except +the one on the local machine) to become outdated. Copy the new list on +to every machine on your network that has @code{send-pr} installed, and +make sure you advise remote submitters that the category list has +changed. @xref{rmcat,,Removing a problem category}. Also +@ref{categories,,The @code{categories} file}. + +@item adding and removing maintainers +@cindex adding and removing maintainers +Edit the @file{responsible} file to add a new maintainer or to remove an +existing maintainer. @xref{responsible,,The @code{responsible} file}. + +@item building a distribution of @code{send-pr} +@cindex building a distribution of @code{send-pr} +@cindex @code{mkdist} +You can build a distribution of @code{send-pr} which contains valid +information for your site by invoking the command @code{mkdist}. +@xref{mkdist,,Configuring @code{send-pr} for the outside world}. You +can then distribute your customized @w{@code{send-pr}} to your +customers, friends, relatives, etc., so that they can submit Problem +Reports to your database. + +@item building a new index +@cindex building a new index +@cindex @code{gen-index} +If your index becomes corrupted, or if you wish to generate a new one +for some reason, use the program @code{gen-index} +(@pxref{gen-index,,Regenerating the index}). + +@item pruning log files +@cindex pruning log files +Log files often grow to unfathomable proportions. As with gardening, it +is best to prune these as they grow, lest they take over your disk and +leave you with no room to gather more Problem Reports. If you keep log +files, be sure to keep an eye on them. (@xref{Aliases,,Setting up mail +aliases}.) +@c "gather ye rosebugs while ye may..." + +@item BACKING UP YOUR DATA +@cindex BACK UP YOUR DATA +Any database is only useful if its data remains uncorrupted and safe. +Performing periodic backups ensures that problems like disk crashes and +data corruption are reversible. + +@end table + +@xref{Locations,,Where @sc{gnats} lives}. + +@menu +* Networked management:: Managing GNATS over a network +* Local configuration:: Changing your local configuration +* Admin files:: Administrative data files +* Admin utils:: Administrative utilities +* Internal utils:: Internal utilities +@end menu + +@node Networked management +@section Managing @sc{gnats} over a network +@cindex networked management +@cindex managing @sc{gnats} over a network + +If you have installed the @sc{gnats} user tools on machines around your +local network, there are a few things you need to remember. + +@code{mkcat} and @code{rmcat} do not update the categories list for +other machines on your network which have @code{send-pr} installed, +unless those machines share @var{prefix} with the host machine). To +update these lists, copy the @code{send-pr} categories list to each of +the other hosts. This categories list is +@w{@file{@var{prefix}/lib/gnats/@var{site}}}, where @var{site} is the +name tag for your local site, as specified in the @file{config} file as +@samp{GNATS_SITE} (@pxref{config,,The @code{config} file}). + +It is also important to note that only your local @code{send-pr} has +access to this new information; any copies of @code{send-pr} which you +have distributed to outside submitters now have outdated category lists. +You must either contact your submitters and instruct them to update +their copy of the categories list, which they installed in +@w{@file{@var{prefix}/lib/gnats/@var{support-site}}} from the +distribution you provided, or you must build another distribution of +@code{send-pr} with this new information and redistribute it. + +If you need to use @sc{gnats} utilities, like @code{query-pr} and +@code{edit-pr}, on other systems besides the one where @sc{gnats} itself +resides, @pxref{Installing tools,,Installing the user tools}. + +@c FIXME - anything else? + +@node Local configuration +@section Changing your local configuration +@cindex local configuration +@cindex changing your local configuration + +@xref{Locations,,Where @sc{gnats} lives}. + +Your local configuration is determined by the data files in the +directory @w{@file{@var{GNATS_ROOT}/gnats-adm}}. These can be altered at +any time by editing the pertinent file. + +@table @code +@cindex @code{config} file +@item config +Variables which control certain behavior. @xref{config,,The +@code{config} file}. Behaviors you can change here include + +@itemize @bullet +@item +The address where your site receives Problem Reports. + +@item +The address of the @sc{gnats} administrator. + +@item +The nametag for your Support Site (your organization, company, +group, etc.). + +@item +The nametag for your local Submitter Site. + +@item +The default release for your site. + +@item +The default value for the @samp{>Organization:} field (this value +appears as the default when you run @code{send-pr}). + +@item +Whether or not to remind maintainers if a requisite time period has +passed before they change the state of a Problem Report to +@samp{analyzed}. (Also see @ref{submitters,,The @code{submitters} +file}, and @ref{at-pr,,Timely Reminders}. + +@item +Whether or not to send an automatic acknowledgement to the originator of +a problem report when the @sc{gnats} first receives the PR. + +@item +The value @sc{gnats} assigns to PRs which come in with missing or unknown +values for the @samp{>Submitter-Id:} field. + +@item +Whether or not @sc{gnats} should retain @samp{Received:} +mail headers from incoming mail. + +@item +Whether or not @sc{gnats} is in a mode for debugging. + +@item +The values which define business hours. +@end itemize + +@cindex @code{categories} file +@item categories +The list of categories that @sc{gnats} accepts as valid for the +@samp{>Category:} field, and the maintainers responsible for each +category. Update this file whenever you have a new category, or +whenever a category is no longer valid. You must also update this file +whenever responsiblility for a category changes, or if a maintainer is +no longer valid. @xref{categories,,The @code{categories} file}. Also +see @ref{mkcat,,Adding a new problem category}, and @ref{rmcat,,Removing +a problem category}. + +@cindex @code{responsible} file +@item responsible +The list of maintainers. Update this file whenever you have a new +maintainer, or whenever a maintainer is no longer valid. +@xref{responsible,,The @code{responsible} file}. + +@cindex @code{submitters} file +@item submitters +The list of Submitter Sites from whom @sc{gnats} accepts Problem Reports. +This file is mandatory, although the feature it provides is not; see +@ref{submitters,,The @code{submitters} file}. +@end table + +@menu +* default behavior:: +* config:: The `config' file +* categories:: The `categories' file +* responsible:: The `responsible' file +* submitters:: The `submitters' file +@end menu + +@node default behavior +@subsection Default behavior + +The default behavior for @sc{gnats} is as follows: + +@cindex default behavior +@itemize @bullet +@item +The address where your site receives Problem Reports is @samp{bugs} (a +local address). + +@item +The address of the @sc{gnats} administrator is @samp{gnats-admin} (a local +address). + +@item +The nametag for your Support Site (your organization, company, group, +etc.) is the second-to-last field in your domain name. + +@item +The nametag for your local Submitter Site is the nametag for your +Support Site. + +@item +The default release for your site is @samp{unknown-1.0}. + +@item +The default value for the @samp{>Organization:} field (this value appears as the +default when you run @code{send-pr}) is the nametag for your Support +Site. + +@item +@sc{gnats} reminds maintainers if a requisite time period has passed +before they change the state of a Problem Report to @samp{analyzed}. + +@item +An automatic acknowledgement is sent to the originator of a problem +report when the @sc{gnats} first receives the PR. + +@item +The value @sc{gnats} assigns to the @samp{>Submitter-Id:} field in PRs +which arrive with missing or unknown values for that field is +@samp{unknown}. + +@item +@samp{Received@dots{}} mail headers are retained. + +@item +@sc{gnats} is not in a debugging mode. + +@item +@dfn{business hours} are defined as 8:00am to 5:00pm, Monday through +Friday. +@end itemize + + +@node config +@subsection The @code{config} file +@cindex @code{config} file + +Much of the behavior @sc{gnats} exhibits depends on the values of fields +in the file @w{@file{@var{GNATS_ROOT}/gnats-adm/config}}. The +@file{config} file contains a list of variables (using Bourne-shell +syntax) which control the following behavior. These values can be +changed at any time; the new values take effect for all subsequent +iterations of the tools. + +@table @code +@cindex @code{GNATS_ADDR} +@item GNATS_ADDR="@var{address}" +The address where your site receives Problem Reports. This address is +aliased in the file @w{@file{/etc/aliases}} so that it directs incoming +mail into @code{queue-pr} (@pxref{Installing utils,,Installing the +utilities}). + +The default is @samp{bugs} (a local address). + +@cindex @code{GNATS_ADMIN} +@item GNATS_ADMIN="@var{address}" +The address of the @sc{gnats} administrator. Normally this is set to +@samp{gnats-admin}, which is an alias in @file{/etc/aliases} that points +toward the person responsible for administrating @sc{gnats}. +@xref{Installing utils,,Installing the utilities}. + +The default is @samp{gnats-admin} (a local address). + +@cindex @code{GNATS_SITE} +@item GNATS_SITE="@var{site}" +The nametag for your Support Site (your organization, company, group, +etc.). This nametag should also appear in the @file{submitters} file, +so that users at your site can submit Problem Reports locally. + +@var{site} is also used as the name of the file containing a valid +category list for your site. This file is installed locally as +@w{@file{@var{prefix}/lib/gnats/@var{site}}}. @emph{Warning:} if you +change this variable after @sc{gnats} is installed, you must also change +the name of this file, as well as the name of the alias for your local +submitters (@pxref{Aliases,,Setting up mail aliases}). + +The default is the second-to-last field in your domain name. For +example, if your domain name is @w{@samp{unleaded.truckstop.org}}, your +default @var{site} is @w{@samp{truckstop}}. + +@cindex @code{SUBMITTER} +@item SUBMITTER="@var{submitter-id}" +The nametag for your local Submitter Site (this value appears as the +default value for @samp{>Submitter-Id} when you run @code{send-pr}). +Even though you are a Support Site, if you submit Problem Reports to +your own organization you become a Submitter Site. The value +@var{submitter-id} is the default value for the @samp{>Submitter-Id:} +field that your maintainers see when they submit Problem Reports +locally. + +The default is the value of @samp{GNATS_SITE}. + +@cindex @code{DEFAULT_RELEASE} +@item DEFAULT_RELEASE="@var{release}" +The default release for your site (this value appears as the default +value for @samp{>Release:} when you run @code{send-pr}). + +The default is @samp{unknown-1.0}. + +@cindex @code{DEFAULT_ORGANIZATION} +@item DEFAULT_ORGANIZATION="@var{text}" +The default value for the @samp{>Organization:} field (this value +appears as the default when you run @code{send-pr}). + +The default is the value of @samp{GNATS_SITE}. + +@c FIXME - where else to mention this stuff? +@cindex @code{NOTIFY} +@item NOTIFY=@var{boolean} +Determines whether or not to remind maintainers if a requisite time +period has passed before they change the state of a Problem Report to +@samp{analyzed}. This feature uses the program @code{at-pr}; see +@ref{at-pr,,Timely Reminders}. + +This requisite time is determined for each submitter individually; see +@ref{submitters,,The @code{submitters} file}. The time is measured in +@dfn{business hours}, which by default are 8:00am to 5:00pm, Monday +through Friday. Business hours can be redefined by changing the +variables @code{BDAY_START}, @code{BDAY_END}, @code{BWEEK_START}, and +@code{BWEEK_END} in the @file{config} file (see below). + +If @var{boolean} is @samp{1}, this feature is active. If @var{boolean} +is @samp{0}, the feature is turned off. The default value for +@samp{NOTIFY} is @samp{1}. + +@cindex @code{ACKNOWLEDGE} +@item ACKNOWLEDGE=@var{boolean} +Determines whether or not to send an automatic acknowledgement to the +originator of a problem report when the @sc{gnats} first receives the PR. + +If @var{boolean} is @samp{1}, this feature is active. If @var{boolean} +is @samp{0}, the feature is turned off. The default for +@samp{ACKNOWLEDGE} is @samp{1}. + +The acknowledgment is of the form: + +@smallexample +@group +To: @var{your-address} +From: gnats +Subject: Re: @var{category}/@var{gnats-id}:@var{Synopsis} +In-Reply-To: Your message of @var{date} + +Thank you very much for your problem report. +It has the internal identification: @var{category}/@var{gnats-id} +The individual assigned to look at your bug is: + @var{responsible} + +Category: @var{category of the PR} +Responsible: @var{responsible} +Synopsis: @var{Synopsis from submitted PR} +Arrival-Date: @var{arrival date} +@end group +@end smallexample + +@cindex @code{DEFAULT_SUBMITTER} +@item DEFAULT_SUBMITTER="submitter-id" +The value @sc{gnats} assigns to PRs which come in with missing or unknown +values for the @samp{>Submitter-Id:} field. This value must also appear +in the @file{submitters} file; see @ref{submitters,,The +@code{submitters} file}. + +@cindex disabling @var{submitter-id} +To disable the feature of @sc{gnats} which tracks the +@samp{>Submitter-Id:}, simply alter the @file{submitters} file to only +contain the @var{submitter-id} value which appears in +@w{@code{DEFAULT_SUBMITTER}}, and and instruct your submitters to ignore +the field. + +The default value for @samp{DEFAULT_SUBMITTER} is @samp{unknown}. + +@cindex @code{KEEP_RECEIVED_HEADERS} +@item KEEP_RECEIVED_HEADERS=@var{boolean} +Determines whether or not @sc{gnats} should retain the +@w{@samp{Received:}} mail headers from incoming mail. These headers +often take up a lot of space, and they are seldom used. + +If @var{boolean} is @samp{1}, this feature is active. If @var{boolean} +is @samp{0}, the feature is turned off. The default value for +@samp{KEEP_RECEIVED_HEADERS} is @samp{1}. + +@item DEBUG_MODE=@var{boolean} +Determines whether or not @sc{gnats} is operating in a mode for +debugging. When @var{boolean} is @samp{1}, @sc{gnats} fowards all mail +to the @sc{gnats} administrator, @w{@code{gnats-admin}}. + +@cindex business hours +@item BDAY_START=@var{integer} +@itemx BDAY_END=@var{integer} +@itemx BWEEK_START=@var{integer} +@itemx BWEEK_END=@var{integer} +The definition of @dfn{business hours}. These values are only used if +@code{NOTIFY} is set to @samp{1} in the @file{config} file (see above). + +By default, business hours are 8:00am to 5:00pm Monday through Friday, +local time. + +@table @code +@item BDAY_START=@var{integer} +Defines the hour of the day when business hours begin. @var{integer} +values must fall between @samp{0} (midnight) and @samp{23} (11:00pm). +The default is @samp{8} (8:00am). + +@item BDAY_END=@var{integer} +Defines the hour of the day when business hours end. @var{integer} +values must fall between @samp{0} (midnight) and @samp{23} (11:00pm). +The default is @samp{17} (5:00pm). + +@item BWEEK_START=@var{integer} +Defines the beginning day of the business week. @var{integer} values +must fall between @samp{0} (Sunday) and @samp{6} (Saturday). The +default is @samp{1} (Monday). + +@item BWEEK_END=@var{integer} +Defines the ending day of the business week. @var{integer} values must +fall between @samp{0} (Sunday) and @samp{6} (Saturday). The default is +@samp{5} (Friday). +@end table + +@end table + +@node categories +@subsection The @code{categories} file +@cindex @code{categories} file + +The @file{categories} file contains a list of problem categories, +specific to your site, which @sc{gnats} tracks. This file also matches +responsible people with these categories. You must edit this file +initially, creating valid categories and then running @code{mkcat} to +create the corresponding subdirectories of @w{@code{@var{GNATS_ROOT}}} +and update the valid categories list for @w{@code{send-pr}}. For +instructions on running @code{mkcat}, see @ref{mkcat,,Adding a problem +category}. + +To create a new category, log in as @sc{gnats}, add a line to this file, +and run @code{mkcat}. Lines beginning with @samp{#} are ignored. + +A line in the @file{categories} file consists of four fields delimited +by colons, as follows: + +@smallexample +@var{category}:@var{description}:@var{responsible}:@var{notify} +@end smallexample + +@noindent +@table @var +@item category +A unique category name, made up of text characters. This name cannot +contain spaces or any of the following characters: + +@smallexample +! $ & * ( ) @{ @} [ ] ` ' " ; : < > ~ +@end smallexample + +@noindent +Ideally, category names should not contain commas or begin with periods. +Each line has a corresponding subdirectory in the main @sc{gnats} +directory (@var{GNATS_ROOT}). + +@ignore +It is possible that if you set up the database with categories +which contain characters that describe subdirectories, such as a slash +(@key{/}) in @sc{Unix}, you could effectively build subdirectories +within each category, and @sc{gnats} would read and write to these +files as it would any other. This is not recommended. It doesn't +break any of the existing tools, and is a fine way to keep category +directories from growing too large. It is, however, quite untested. +@end ignore + +@item description +A terse textual description of the category. + +@item responsible +The name tag of the party responsible for this category of problems, as +listed in the @file{responsible} file (@pxref{responsible,,The +@code{responsible} file}). + +@item notify +One or more other parties which should be notified when a Problem Report +with this category arrives, such as a project manager, other members of +the same project, other interested parties, or even log files. These +should be separated with commas. +@end table + +A good strategy for configuring this file is to have a different +category for each product your organization supports or wishes to track +information for, or perhaps with sub-categories within each category. +For instance, if you wish to track documentation problems in a variety of +areas, you could have entries such as + +@smallexample +doc:General Doc Questions:myboss:me,barney +doc-rock:Doc for ROCK program:me:myboss +doc-stone:Docs for STONE utils:barney:fred +doc-local:in-house documentation:me:doc-local-log +@end smallexample + +In the above example, the nametags @samp{myboss}, @samp{me}, +@samp{fred}, and @samp{barney} must be defined in the @file{responsible} +file (@pxref{responsible,,The @code{responsible} file}). + +Problem Reports with a category of @samp{doc} are sent to the local mail +address (or alias) @samp{myboss}, and also sent to the addresses +@samp{me} and @samp{barney}. PRs with a category of @samp{doc-rock} are +sent to the local addresses @samp{me} and @samp{myboss} only, while PRs +with the category @samp{doc-stone} are sent to @samp{fred} as well as to +@samp{barney}. PRs with a category of @samp{doc-local} are sent only to +@samp{me}, and are also filed in @code{doc-local-log} (in this case, an +alias should be set up in @file{/etc/aliases} to reflect a location for +the log file, such as @w{@samp{doc-local-log: /users/me/local-log}}). + +Whenever you add a new category, be sure to run @code{mkcat} to create a +subdirectory for it and update the local categories list. + +Only one category must be present for @sc{gnats} to function: + +@smallexample +pending:Category for faulty PRs: gnats-admin: +@end smallexample + +@cindex @code{pending} file +The @file{pending} directory is created automatically when you run +@w{@samp{make install}} (@pxref{Configure and make,,Configuring and +compiling the software}). + +@node responsible +@subsection The @code{responsible} file +@cindex @code{responsible} file + +This file contains a list of the responsible parties. Lines beginning +with @samp{#} are ignored. Each entry contains three fields, separated +by colons: + +@smallexample +@var{responsible}:@var{full-name}:@var{mail-address} +@end smallexample + +@noindent +@table @var +@item responsible +A name-tag description of the party in question, such as her or his user +name, or the name of the group. This name is listed in the PR in +the @samp{>Responsible:} field. + +@item full-name +The full name of the party (``Charlotte Bronte''; ``Compiler Group''). + +@item mail-address +The full, valid mail address of the party. This field is only necessary +if the responsible party has no local mail address or alias. +@end table + +@noindent +A sample @file{responsible} listing might be: + +@smallexample +ren:Ren Hoek: +stimpy:Stimpson J. Cat:stimpy@@lederhosen.org +@end smallexample + +Here, @code{ren} is a local user. @code{stimpy} is remote, so his full +address must be specified. + +The following entry must be present for @sc{gnats} to function: + +@smallexample +gnats-admin: GNATS administrator: +@end smallexample + +@noindent +(@code{gnats-admin} is a mail alias, so for this purpose +@code{gnats-admin} is a local address.) + +@node submitters +@subsection The @code{submitters} file +@cindex @code{submitters} file + +This is a database of sites which submit bugs to your support site. It +contains six fields delineated by colons. Lines beginning with @samp{#} +will be ignored. + +Entries are of the format: + +@smallexample +@var{submitter-id}:@var{name}:@var{type}:@var{resp-time}:@var{contact}:@var{notify} +@end smallexample + +@noindent +@table @var +@item submitter-id +A unique identifier for a specific site or other entity who submits +Problem Reports. + +@item name +A textual description of this entity. + +@item type +Optional description for the type of relationship this submitter to your +support site. This could indicate a contract type, a level of +expertise, etc., or it can remain blank. + +@item resp-time +Optional quoted response time, in @dfn{business hours}. @sc{gnats} is +capable of reminding responsible parties when Problem Reports marked +with a @samp{>Severity} value of @samp{critical}, or those with a +@samp{>Severity} of @samp{serious} and a @samp{>Priority} value of +@samp{high}, are neglected for a certain period. This argument defines +that response period for each @var{submitter-id}. Business hours are +defined by default as 8:00am to 5:00pm, Monday through Friday. For +example, three business days would be equal to 24 business hours. + +This function is active if the @code{NOTIFY} field is defined as +@samp{1} in the @file{config} file (@pxref{Local configuration,,Changing +your local configuration}). If @code{NOTIFY} is @samp{0}, this field is +ignored. For information on @code{at-pr}, the program which sends out +this reminder, see @ref{at-pr,,Timely Reminders}. + +@item contact +The name tag of the main @dfn{contact} at the Support Site for this +submitter. This contact should be in the @file{responsible} file +(@pxref{responsible,,The @code{responsible} file}). Incoming bugs from +@var{submitter} are sent to this contact. Optionally, this field can be +left blank. + +@item notify +Any other parties who should receive copies of Problem Reports sent in +by @var{submitter}. +@end table + +A few example entries in the @file{submitters} file: + +@smallexample +univ-hell: University of Hades:eternal:3:beelzebub:lucifer +tta: Telephones and Telegraphs of America:support:720:dave: +@end smallexample + +@noindent +In this example, when a PR comes in from the University of Hades (who +has an eternal contract), it should have @samp{univ-hell} in its +@samp{Submitter-Id} field. This Problem Report goes to @code{beelzebub} +(who should be in the @file{responsible} file), and if it is not +analyzed within three business hours a reminder message is sent. +@code{lucifer} also receives a copy of the bug, and a copy of the +reminder message as well (if it is sent). When Telephones and +Telegraphs of America utilizes their support contract and submits a bug, +a copy is sent only to @code{dave}, who has 720 business hours to return +an analysis before a reminder is sent. + +@cindex disabling @var{submitter-id} +To disable the feature of @sc{gnats} which tracks the +@samp{>Submitter-Id:}, simply alter the @file{submitters} file to only +contain the @var{submitter-id} value which appears as the +@samp{DEFAULT_SUBMITTER} value in the @file{config} file +(@pxref{config,,The @code{config} file}), and instruct your submitters +to ignore the field. + +@node Admin files +@section Administrative data files +@cindex admin files +@cindex files used for @sc{gnats} administration + +The following files are located in @file{@var{GNATS_ROOT}/gnats-adm}, +where @var{GNATS_ROOT} is the resident directory of @sc{gnats}. These +files are maintained by @sc{gnats}; you should never touch them. + +@menu +* index file:: The `index' file +* current file:: The `current' file +@end menu + +@node index file +@subsection The @code{index} file +@cindex @code{index} file + +The index is used to accelerate searches on the database by +@code{query-pr} and @code{edit-pr}. This file is not created until the +first PR comes in. It is then kept up to date by @sc{gnats}; you should +never touch this file. + +Any searches on subjects contained in the index are much faster than +searches which depend on data not in the index. The index contains +single-line entries for the following fields, in order, separated by +colons (@samp{:}) except for @samp{>Category:} and @samp{>Number:}, +which are separated by a slash (@samp{/}) (the @samp{>} and @samp{:} +Problem Report fieldname delimiters have been removed for the sake of +brevity and readability):: + +@smallexample +Category Number Submitter-Id +Responsible State Confidential +Severity Priority +@end smallexample + +To see an example index, run @code{gen-index} without any options +(@pxref{gen-index,,Regenerating the index}). + +@node current file +@subsection The @code{current} file +@cindex @code{current} file + +This file contains the last serial number assigned to an incoming PR. +It is used internally by @sc{gnats}; you need never touch this file. + +@node Admin utils +@section Administrative utilities +@cindex administrative utilities + +These tools are used by the @sc{gnats} administrator as part of the +periodic maintenance and configuration of @sc{gnats}. +@xref{Management,,@sc{gnats} Administration}. + +@menu +* mkcat:: Adding a problem category +* rmcat:: Removing a problem category +* gen-index:: Regenerating the index +* mkdist:: Configuring send-pr for the outside world +@end menu + +@node mkcat +@subsection Adding a problem category +@cindex @code{mkcat} +@cindex adding a problem category +@cindex new problem categories +@cindex @code{categories} file + +To add new categories to the database: + +@enumerate 1 +@item +Add a line to the @file{categories} file under +@w{@file{@var{GNATS_ROOT}/gnats-adm}} for each new category. +@xref{categories,,The @code{categories} file}. + +@item +Run @code{mkcat}. @code{mkcat} creates a directory under +@w{@var{GNATS_ROOT}} for any new categories which appear in the +@file{categories} file. @code{mkcat} also recreates the list of valid +categories for both your locally installed @code{send-pr} and for the +@code{send-pr} distribution template in +@w{@file{@var{prefix}/lib/gnats/dist}} (@pxref{Locations,,Where @sc{gnats} +lives}. +@end enumerate + +@emph{Note:} @code{mkcat} does not update the categories list for other +machines on your network which have @code{send-pr} installed (unless +the two machines share the directory @var{prefix}). +@xref{Networked management,,Managing @sc{gnats} over a network}. + +It is also important to note that only your local @code{send-pr} has +access to this new information; any copies of @code{send-pr} which you +have distributed to outside submitters now have outdated category lists. +You must either contact your submitters and instruct them to update +their copy of the categories list, which they installed in +@w{@file{@var{prefix}/lib/gnats/@var{support-site}}} (@emph{Note:} the +value for @var{prefix} may be different from yours) from the +distribution you provided, or you must build another distribution of +@code{send-pr} with this new information and redistribute it +(@pxref{mkdist,,Configuring @code{send-pr} for the outside world}). + +@node rmcat +@subsection Removing a problem category +@cindex @code{rmcat} +@cindex removing a problem category +@cindex @code{categories} file + +To remove a category from the database: + +@enumerate 1 +@item +Remove the Problem Reports from the subdirectories corresponding to the +categories you wish to remove, or assign the PRs to new categories. All +PRs for a given category reside in +@w{@file{@var{GNATS_ROOT}/@var{category}}}. Make sure you do this for +each category you wish to remove. + +@item +Run @code{rmcat} using + +@smallexample +rmcat @var{category} [ @var{category@dots{}} ] +@end smallexample + +@noindent +where @var{category} is the category you wish to remove. You can +specify as many categories as you wish as long as each category has no +PRs associated with it. @code{rmcat} removes the directory under +@w{@var{GNATS_ROOT}} where the Problem Reports for that category had been +stored. @code{rmcat} also deletes the category from the list of valid +categories for both your locally installed @code{send-pr} and for the +@code{send-pr} distribution template in +@w{@file{@var{prefix}/lib/gnats/dist}} (@pxref{Locations,,Where @sc{gnats} +lives}). +@end enumerate + +@emph{Note:} @code{rmcat} does not update the categories list for other +machines on your network which have @code{send-pr} installed. +@xref{Networked management,,Managing @sc{gnats} over a network}. + +It is also important to note that only your local @code{send-pr} has +access to this new information; any copies of @code{send-pr} which you +have distributed to outside submitters now have outdated category lists. +You must either contact your submitters and instruct them to update +their copy of the categories list, which they installed in +@w{@file{@var{prefix}/lib/gnats/@var{support-site}}} (@emph{Note:} the +value for @var{prefix} may be different from yours) from the +distribution you provided, or you must build another distribution of +@code{send-pr} with this new information and redistribute it +(@pxref{mkdist,,Configuring @code{send-pr} for the outside world}). + +@c FIXME! Should we suggest this? +@ignore +To reassign a group of categories.... + +(The idea is to call "query-pr --full", run the output through sed, and +then throw it at pr-edit. This approach is untested, and may be unhealthy.) + +@end ignore + +@node gen-index +@subsection Regenerating the index +@cindex @code{gen-index} +@cindex @code{index} file + +If your @file{index} file becomes corrupted, or if you need a copy of +the current index for some reason, use + +@smallexample +gen-index [ -n | --numeric ] + [ -d @var{directory} | --directory=@var{directory} ] + [ -c @var{filename} | --catfile=@var{filename} ] + [ -o @var{filename} | --outfile=@var{filename} ] + [ -h | --help] [ -V | --version ] +@end smallexample + +@noindent +With no options, @code{gen-index} generates an index that is ordered the +same as the order of the categories as they appear in the +@file{categories} file, and prints it to standard output. The options +are: + +@table @code +@item -n +@itemx --numeric +Sorts index entries numerically. + +@item -d @var{directory} +@itemx --directory=@var{directory} +Uses @var{directory} as the directory containing the database, by +default @w{@var{GNATS_ROOT}} (@pxref{Locations,,Where @sc{gnats} lives}). + +@item -o @var{filename} +@itemx --outfile=@var{filename} +Places output in @var{filename} rather than sending it to standard +output. + +@item -c @var{filename} +@itemx --catfile=@var{filename} +Point to @var{filename}, the file listing the valid categories. + +@item -h +@itemx --help +Prints the usage for @code{gen-index}. + +@item -V +@itemx --version +Prints the version number for @code{gen-index}. +@end table + +@node mkdist +@subsection Configuring @code{send-pr} for the outside world +@cindex configuring @code{send-pr} for the outside world +@cindex invoking @code{mkdist} +@cindex using @code{mkdist} + +Now that @sc{gnats} is up and running on your system, you probably want +to distribute @code{send-pr} to all your friends, relatives, enemies, +etc. so they can more easily submit bugs to your organization. To do +this, create a new directory @var{dist-directory} to hold the +distribution. Then run the program + +@smallexample +mkdist --release=@var{release} @var{dist-directory} +@end smallexample + +@noindent +This populates @var{dist-directory} with a full distribution of the +program @code{send-pr}, including a @file{Makefile} and all the +@code{send-pr} documentation. You can then simply package up this +directory and send it to your bug report submitters. For example, +when logged in as @code{gnats} you can do the following: + +@smallexample +mkdir new-dist +mkdist --release=tools-1.2 new-dist +tar cvf send-pr.tar new-dist +@end smallexample + +This creates a file called @file{send-pr.tar} which contains a full +distribution of @code{send-pr} customized for your site, with a default +release number of @samp{tools-1.2}. You can then place this onto a disk +or tape and send it to your submitters, or instruct your submitters to +download it using @code{ftp}. + +If you only have one submitter, you can set the Submitter ID in the +send-pr script by specifying the --submitter option to mkdist. If you +do this, the submitter will not have to run install-sid. + +@node Internal utils +@section Internal utilities +@cindex internal utilities + +These tools are used internally by @sc{gnats}. You should never need to +run these by hand; however, a complete understanding may help you locate +problems with the @sc{gnats} tools or with your local implementation. + +@menu +* queue-pr:: Handling incoming traffic +* file-pr:: Processing incoming traffic +* at-pr:: Timely reminders +* pr-edit:: The edit-pr driver +* pr-addr:: Address retrieval +@end menu + +@node queue-pr +@subsection Handling incoming traffic +@cindex @code{queue-pr} +@cindex handling incoming traffic + +The program @code{queue-pr} handles traffic coming into @sc{gnats}. +@code{queue-pr} queues incoming Problem Reports in the directory +@w{@file{@var{GNATS_ROOT}/gnats-queue}}, and then periodically (via +@code{cron}) passes them on to @code{file-pr} to be filed in the +@sc{gnats} database. @xref{Installation,,Installing @sc{gnats}}. + +The usage for @code{queue-pr} is as follows: + +@smallexample +queue-pr [ -q | --queue ] [ -r | --run ] + [ -f @var{filename} | --file=@var{filename} ] + [ -d @var{directory} | --directory=@var{directory} ] +@end smallexample + +One of @samp{-q} or @samp{-r} (or their longer-named counterparts) must +be present upon each call to @code{queue-pr}. These options provide +different functions, as described below. + +@table @code +@item -q +@itemx --queue +Accepts standard input as an incoming mail message, placing this message +in an incrementally numbered file in the @w{@file{gnats-queue}} directory +under @w{@code{@var{GNATS_ROOT}}} (@pxref{Locations,,Where @sc{gnats} +lives}). + +@item -r +@itemx --run +Redirects files in the @file{gnats-queue} directory into the program +@code{file-pr} one by one. + +@item -f @var{filename} +@itemx --file=@var{filename} +Used with @samp{-q} (or @samp{--queue}), accepts the file denoted by +@var{filename} as input rather than reading from standard input. + +@item -d @var{directory} +@itemx --directory=@var{directory} +Resets the default @var{directory} value, which is by default +@w{@file{@var{GNATS_ROOT}/gnats-queue}}. When @w{@samp{-d +@var{directory}}} is used in conjunction with the @samp{-q} (or +@samp{--queue}) option, @w{@code{queue-pr}} files incoming messages into +@var{directory} rather than the @file{gnats-queue} directory. When +@w{@samp{-d @var{directory}}} is used in conjunction with the @samp{-r} +(or @samp{--run}) option, @code{queue-pr} redirects into +@w{@code{file-pr}} files from @var{directory} rather than from the +@w{@file{gnats-queue}} directory. +@end table + +@node file-pr +@subsection Processing incoming traffic +@cindex @code{file-pr} +@cindex processing incoming traffic + +@code{queue-pr} hands off queued Problem Reports to @code{file-pr} one +at a time. @code{file-pr} checks each Problem Report for correct +information in its fields (particularly a correct @samp{>Category:}), +assigns it an identification number, and files it in the database under +the appropriate category. + +If the @samp{>Category:} field does not contain a valid category value +(i.e., matching a line in the @code{categories} file; +@pxref{categories,,The @code{categories} file}), the PR is given a +@samp{>Category:} value of @samp{pending} and is placed in the +@file{pending} directory. The @sc{gnats} administrator is notified of +the unplaceable PR. + +@code{file-pr} assigns the Problem Report an identification number, +files it in the @sc{gnats} database (under @w{@samp{pending}}, if the +@samp{>Category:} field contains an invalid category), and sends +acknowledgements to appropriate parties. The person responsible for +that category of problem (@pxref{categories,,The @code{categories} +file}) and the person responsible for the submitter site where the PR +originated (@pxref{submitters,,The @code{submitters} file}) receive a +copy of the PR in its entirety. Optionally, the originator of the PR +receives an acknowledgement that the PR arrived and was filed +(@pxref{Local configuration,,Changing your local configuration}). + +The usage for @code{file-pr} is as follows: + +@smallexample +file-pr [ -f @var{filename} | --file=@var{filename} ] + [ -d @var{directory} | --directory=@var{directory}b ] + [ -D | --debug ] [ -h | --help ] [ -V | --version ] +@end smallexample + +@code{file-pr} requires no options in order to operate, and takes input +from standard input (normally, the output of @w{@samp{queue-pr -r}}) +unless otherwise specified. The options include: + +@table @code +@item -f @var{filename} +@itemx --filename=@var{filename} +Uses @var{filename} as input rather than standard input. + +@item -d @var{directory} +@itemx --directory=@var{directory} +Performs refiling operations in @var{directory} rather than in +@w{@code{@var{GNATS_ROOT}}}. + +@item -D +@itemx --debug +Give debugging output while @code{file-pr} is running. + +@item -h +@itemx --help +Prints the usage for @code{file-pr}. + +@item -V +@itemx --version +Prints the version number for @code{file-pr}. +@end table + +@node at-pr +@subsection Timely reminders +@cindex @code{at-pr} +@cindex timely reminders +@cindex automatic notification +@cindex notification of overdue PRs + +@code{at-pr} creates a queued job using @code{at} which, after an +allotted @dfn{response time} is past, checks the PR to see if its state +has changed from @samp{open}. + +The @file{submitters} file contains the response time for each +@w{@code{>Submitter-Id:}} (@pxref{submitters,,The @code{submitters} file}). +The time is determined in @dfn{business hours}, which are defined by +default as 8:00am to 5:00pm Monday through Friday, local time. These +hours are defined in the @file{config} file (@pxref{config,,The +@code{config} file}). + +If the PR is still open after the requisite time period has passed, +@code{at-pr} sends a reminder to the @sc{gnats} administrator, to the +maintainer responsible for that submitter, and to the maintainer +responsible for the PR with the following message: + +@cindex reminder message +@cindex @code{at-pr} +@smallexample +To: @var{submitter-contact} @var{responsible} @var{gnats-admin} +Subject: PR @var{gnats-id} not analyzed in @var{#hours} hours + +PR @var{gnats-id} was not analyzed within the acknowledgment period +of @var{#hours} business hours. The pertinent information is: + + Submitter-Id: @var{submitter} + Originator: @var{full name of the submitter} + Synopsis: @var{synopsis} + Person responsible for the PR: @var{responsible} + +-- +The GNU Problem Report Management System (GNATS) +@end smallexample + +@node pr-edit +@subsection The @code{edit-pr} driver +@cindex @code{pr-edit} +@cindex @code{edit-pr} driver +@cindex driver for @code{edit-pr} + +@code{pr-edit} does the background work for @code{edit-pr}, including +error-checking and refiling newly edited Problem Reports and handling +file locks. It can be called interactively, though it has no useable +editing interface. + +The usage for @code{pr-edit} is: + +@smallexample +pr-edit [ -l @var{maintainer} --lock=@var{maintainer} ] + [ -u | --unlock ] [ -c | --check ] [ -F ] + [ -L | --lockdb ] [ -U | --unlockdb ] + [ -f @var{filename} | --filename=@var{filename} ] + [ -d @var{directory} | --directory=@var{directory} ] + [ -h | --help ] [ -V | --version ] + [ @var{gnats-id} ] +@end smallexample + +@cindex PR locks +@cindex locks +A @dfn{lock} is placed on a Problem Report while the PR is being edited. +The lock is simply a file in the same directory as the PR, with the name +@w{@file{@var{gnats-id}.lock}}, which contains the name of the maintainer +who created the lock. @var{maintainer} then ``owns'' the lock, and must +remove it before the PR can be locked again, even by the same +@var{maintainer}@footnote{This approach may seem heavy-handed, but it +ensures that changes are not overwritten.}. If a PR is already locked +when you attempt to edit it, @code{pr-edit} prints an error message +giving the name of the maintainer who is currently editing the PR. + +If you do not specify @w{@var{gnats-id}}, @code{pr-edit} reads from +standard input. You must specify @w{@var{gnats-id}} for the functions +which affect PR locks, @samp{--lock=@var{maintainer}} and +@samp{--unlock}. + +@table @code +@item -l @var{maintainer} +@itemx --lock=@var{maintainer} +Locks Problem Report @w{@var{gnats-id}}, failing (and returning an error +message) if @w{@var{gnats-id}} is already locked, or if @w{@var{gnats-id}} +does not exist. @code{pr-edit} requires that you specify +@w{@var{gnats-id}} when using this option. + +@item -u +@itemx --unlock +Unlocks Problem Report @w{@var{gnats-id}}. @code{pr-edit} requires that +you specify @w{@var{gnats-id}} when using this option. You must own a +file lock to remove it. + +@item -L +@itemx --lockdb +Locks the GNATS database as a whole. This will prevent any modification +to any part of the system while it's locked. + +@item -U +@itemx --unlockdb +Unlocks the GNATS database as a whole, allowing modification of its +files. + +@item -c +@itemx --check +Checks the Problem Report in @w{@var{gnats-id}} (or standard input, if +@w{@var{gnats-id}} is not present) for correct information in its +@w{@sc{Enumerated}} fields. @code{pr-edit} complains about any bogus +information in the Problem Report. + +@item -F +Forces the PR to be submitted to the database, even if there is no +current index entry for it (i.e., even if the PR did not exist in the +database previously). + +@emph{Warning: using this option may corrupt your index.} If you use +it, be sure you know what you are doing. + +@item -f @var{filename} +@itemx --filename=@var{filename} +Reads @var{filename} rather than standard input. + +@item -d @var{directory} +@itemx --directory=@var{directory} +Resets the operating directory (@w{@code{@var{GNATS_ROOT}}}). + +@item -h +@itemx --help +Prints the usage for @code{pr-edit}. + +@item -V +@itemx --version +Prints the version number for @code{pr-edit}. +@end table +@node pr-addr +@subsection Address retrieval +@cindex address retrieval +@cindex @code{pr-addr} + +Returns an electronic mail address when given a valid @dfn{nametag}, as +it appears in the @file{responsible} file (@pxref{responsible,,The +@code{responsible} file}). If @var{nametag} is not valid, @code{pr-addr} +will tell the user that it could not find the requested address. + +Usage is simply: + +@smallexample +pr-addr @var{name} +@end smallexample