| RT/FM RT Manual | Not logged in. [Login] |
Request Tracker is a trouble ticketing system. It lets a group of people intelligently and efficiently manage requests from a community of users. RT is used by systems administrators, customer support teams, network operation centres, developers and even marketing departments.
If you know about the Quantum or Clarify helpdesk products, then you will understand what RT is all about. RT implements most of what these sorts of very expensive commercial products do and has quite a few features that they can't get close to matching.
The basic model works something like this:
RT can be configured to suit specific site requirements, but the basic concepts and usage remains the same
Perl5.005_03 or later with support for setgid perl scripts [http://www.perl.com/]. setuid or setgid scripts under Unix can be dangerous, but perl is something of a special case. Perl tries very hard to minimise the risks. So does RT. If you want to know more about this area of Unix security, search the web using terms like "Unix setuid perl race condition".
RT's command line and mail gateway tools run setgid to the 'rt' group to protect RT's database password. The program that will be installed is "suidperl", but your operating system may not install it with the standard perl because it is a potential security risk. Some operating systems provide it in a separate package. If you are installing or compiling perl yourself from sources you may need to reconfigure it to support "setuid scripts".
RT requires one of the following database backends:
Mysql v3.23.38 or higher. [http://www.mysql.org/]
RT is primarily developed on Mysql. Because of this, it's likely to be the best tested database for RT.
PostgresSQL v7.1.1 or higher, but NOT 7.3.0 or higher[http://www.postgresql.org/]
Oracle [http://www.oracle.com/]
RT has been shown to work with Oracle 8 or 8i, but it may not work easily for you. There are a number of known issues with oracle support at present. You are advised to contact the developers directly.
Because the Perl::DBI package needs to talk with the database via a C calling interface you need to install the appropriate C header files for your database. Most (all?) Linux distributions have two packages, the database (eg mysql or postgresql) and the development libraries and header files (eg mysql-dev or postgresql-dev). Both need to be installed. If you are installing the database from pristine sources then you should have no problem because the header files must be present for compilation to work. If you are using some Unix with another other packaging scheme such as the FreeBSD ports collection then please contribute your experiences here.
To summarise the previous paragraph: unless the C header files for the database are present, the essential Perl::DBI module cannot be installed.
Don't forget to setup permissions for your database. For example, with Postgresql, maybe you need to edit the pg_hba (Host Based Access) file to allow connections from localhost using something less than encrypted passwords for convenience (if that is what you really want to do, which can be a very bad idea!).
Apache 1.3 [http://httpd.apache.org/]
mod_perl [http://perl.apache.org/]
Alternatively, the fast_cgi handler is known to work. [http://www.fastcgi.com].
Also, a handler for speedy_cgi may be developed in the future.
The Perl::Apache:Cookie module needs to interface to Apache via C header files in a similar way to the database routines. For most (all?) Linux distributions this means you have to install the apache-dev package as well as apache (and usually apache-perl too). If you are installing from pristine Apache sources then you should have no problem, because the header files are required for Apache to compile at all.
The mod_perl guide can be found at: [http://perl.apache.org/guide]
The following is an excerpt, which should work for most people. Download the source tarballs for apache and for mod_perl, and then:
% tar xzvf apache_x.x.x.tar.gz % tar xzvf mod_perl-x.xx.tar.gz % cd mod_perl-x.xx % perl Makefile.PL APACHE_SRC=../apache_x.x.x/src USE_APACI=1 DO_HTTPD=1 EVERYTHING=1 % make && make test && make install % cd ../apache_x.x.x % make installThis builds Apache statically with mod_perl, installs Apache under the default /usr/local/apache tree and mod_perl into the site_perl hierarchy of your existing Perl installation. Do not omit the EVERYTHING=1 parameter.
% tar zxvf rt.tar.gz -C /tmpanother good place might be /usr/src, so you have a copy of the install files (and the ability to uninstall) somewhere more permanent than in /tmp, which on some Unixes is wiped by default each boot.
Check through /tmp/rt/Makefile
There are many variables you NEED to customize for your site. Even if you are just upgrading, you must set ALL variables.
Here are the some of the more likely candidates to need changing:
RT_PATH - Where you want the installation to live.
/opt/rt2 is default, /usr/local/rt2 may be more to your taste.
RT_MAN_PATH - Where to install the man pages for RT.
You may wish to change to to /usr/share/man or /usr/local/man
RT_LOG_PATH - Where to write log files.
RT writes numerous log files based on PIDs, so you may want to make a directory just for rt such as /var/log/rt2
DB_TYPE - Which database backend to use.
Choices are:
DB_HOME - Where to find the executables and libraries for your database
$DB_HOME/bin should contain the binaries themselves - e.g. if
$ which mysql
gives "/usr/local/mysql/bin/mysql", $DB_HOME should be "/usr/local/mysql"
DB_DBA - A user who has permission to create new databases and database users.
This might be "root" for Mysql, "postgres" or "pgsql" for PostgreSQL, or "system" for Oracle. This is used during installation only.
DB_HOST - The host on which the database resides.
Leave this blank to connect via Unix domain sockets (PostgreSQL has been reported to work better this way.)
DB_RT_USER - A user who will actually use the database
If the username does not already exist, it will be created.
WEB_USER and WEB_GROUP - The user that your webserver runs as.
This should be something like www, or www-user, or nobody. It should *not* be root. Check your apache configuration file for the User directive.% cd /tmp/rt % make testdepsThis will check that all the perl modules which RT depends on are installed.Do not run testdeps except from the makefile as shown.
If there are unsatisfied dependencies, there are three choices. These are probably in order of increasing difficulty:
% make fixdeps
make fixdeps must be run as a user with write privilege to various bits of the Perl hierachy, usually root.
Depending on how your operating system distributor has put together Perl, CPAN and all the other bits required, you may need to install Apache::Session and Apache::DBI by hand. Debian has no need for this. [any others?]
Similarly, you might need to install Msql-Mysql-Modules by hand. Either use CPAN:
% perl -MCPAN -e 'install DBD::mysql::Install'or alternatively, you should be able to find all the neccessary modules at [http://www.helgrim.com/perlmodules/]
Note that, in the words of Jesse, "MIME-Tools 5.5 appeared in beta form. it was badly broken and withdrawn. If you're running it, you shouldn't be." 5.411 is the recommended version for use with RT.
If something went wrong with any of the above and you are doing installs involving CPAN (eg you suddenly realised that you hadn't got the Postgresql header files, or weren't running as root) then you can restart CPAN installs as many times as you like. A CPAN cache is kept under the directory .cpan in the home directory of the user running make testdeps. Using a tool such as sudo to run make fixdeps as root can help by keeping the CPAN cache in the home directory of whoever is running sudo rather than spreading it across the root user's homedir as well.
Now make sure everything is installed:
% make testdepsRepeat whichever steps of the above apply to you until happy.
If this is a new installation, create a group called 'rt'.
Then, as root, type:
# make installYou may be prompted for the database user's password.
If this fails, type:
# make dropdbbefore trying again.
If you are upgrading from rt.2.0.x:
1. Back up your existing
2. Rebuild the libraries as root:
# make upgradeThis will build new RT wrappers, files and libraries without overwriting your RT database. A new version of config.pm will be installed, and will need to be configured. Do not just copy your old configuration file into it's place, as it's format may have changed.
Request Tracker went through major changes from version 1 to version 2. The architecture and database design has changed radically, so there are a number of extra steps to upgrade versions.
The import tool will import the following information from your rt1 database:
1. Make sure you have completed the previous steps for installing RT2. It is important that RT2 is in an unused state, otherwise the upgrade will not be completed.
2. Cd to your rt1 installation.
$ cd /path/to/rt/etc
3. Download import-1.0-to-2.0 from [http://www.fsck.com/pub/rt/contrib/2.0/rt-addons/import-1.0-to-2.0]
4. If your RT 1.0 transaction history doesn't live on the host you're running the import tool on, you'll need to copy /path/to/rt/transactions from the host it lives on.
5. Edit the configuration defaults in import-1.0-to-2.0
Set $DEFAULTQUEUE to the name of one of your RT 1.0 queues.
If you do not do this, THE IMPORT WILL FAIL.
Also, make sure the MinimumPasswordLength in rt2/etc/config.pm does not
exceed the length of your rt1 users' passwords.
If it does, your users will NOT be imported.
6. If you are importing to a postgres database, you will need to execute the following SQL statement from within your RT2 database.
$ psql rt2
psql> SELECT setval('tickets_id_seq', (select max(id) from tickets));
7. Do the import by typing:
$ perl ./import-1.0-to-2.0The script will run, without requiring user intervention. If you are importing a large number of tickets, this will take some time. When it has finished, test it to ensure that all the data has been imported correctly.
Now that you have RT installed, you must first change the RT root user's password. Root's default password is "password".
Not changing this is a security risk.
# /path/to/rt2/bin/rtadmin --user=root --password="<newpassword>"
RT's web ui is based around HTML::Mason, which works best with the mod_perl perl interpreter within Apache httpd. A FastCGI version handler is known to work as well, but for now, mod_perl's your best bet.
You need to tell apache to use HTML::Mason as a handler for RT.
If you are running a dedicated server address for rt, e.g. rt.example.com, you can use the following directives in your httpd.conf:
DocumentRoot /path/to/rt2/WebRT/html ServerName rt.example.com PerlModule Apache::DBI PerlRequire /path/to/rt2/bin/webmux.pl <Location /> SetHandler perl-script PerlHandler RT::Mason </Location>Alternatively, if you are using apache's VirtualHosts:
<VirtualHost your.ip.address> DocumentRoot /path/to/rt2/WebRT/html ServerName rt.example.com PerlModule Apache::DBI PerlRequire /path/to/rt2/bin/webmux.pl <Location /> SetHandler perl-script PerlHandler RT::Mason </Location> </VirtualHost>
Many sites may not need the "PerlModule Apache:DBI" line, in fact in many cases Apache:DBI will cause Apache to abort every time it is run. Removing these lines should solve the problem.
If you want to run RT along with other content, do so like this:
Alias /rt2 /usr/local/rt2/WebRT/html PerlRequire /usr/local/rt2/bin/webmux.pl <Location /rt2> SetHandler perl-script PerlHandler RT::Mason </Location>
If you set up RT this way, you must also change $WebPath in config.pm
Next, set up the following cron job to remove stale session data.
WARNING: Do not install this cron job or run this find command if your MASON_SESSION_PATH (known in config.pm as $MasonSessionDir) points to a directory that could EVER contain any file that's not a Apache::Session datafile.
# Every hour, delete session files and lockfiles that haven't
# been touched in 10 hours
0 * * * * find /path/to/rt2/WebRT/sessiondata -type f -amin +600 -exec rm '{}' \;
mod_perl will initialize rt's mod_perl handler for every child it forks. rt's mod_perl handler immediately opens a database connection as soon as it's initialized. If you configure apache to spawn 200 children, you need to configure your database server to handle 200 connections from apache.
If you need RT to run through a high-traffic webserver, we recommend that you run RT on its own seperate apache server andp roxy requests from your main webserver. (see below)
The following lines (under MacOSX) are indicative of this problem:
dyld: /usr/sbin/httpd multiple definitions of symbol
_ApacheRequest___parse
/Library/Perl/darwin/auto/Apache/Request/Request.bundle definition of
_ApacheRequest___parse
/Library/Perl/darwin/auto/Apache/Cookie/Cookie.bundle definition of
_ApacheRequest___parse
If you can, recompile Apache with mod_perl statically linked, or use FastCGI. If you must use mod_perl as a dynamic module, please find a solution to RT2 not consistently working and send it back to rt-devel.
David Wheeler has written an excellent article on how to compile Apache with static mod_perl, at http://www.macdevcenter.com/pub/a/mac/2002/11/05/apache_osx.html.
I do lots of RT development on Mac OS X using FastCGI and it works pretty damn well. - Jesse
Set up an apache process which binds itself to a high port on 127.0.0.1. e.g. port 8080 Set the following values in RT's config.pm:
$WebPath= ""; $WebBaseURL = "http://rt.example.com/";On your main apache webserver, install mod_proxypass and add the directive:
ProxyPass /rt2/ http://localhost:8080/rt/
RT should be able to run without it, but it is not recommended due to the additional connection overhead and the slow response time that WebUI users will see.
LoadModule fastcgi_module modules/mod_fastcgi.so AddModule mod_fastcgi.c AddHandler fastcgi-script fcgi FastCgiServer /path/to/rt2/bin/mason_handler.fcgi Alias /NoAuth/images/ /path/to/rt2/WebRT/html/NoAuth/images/ ScriptAlias / /path/to/rt2/bin/mason_handler.fcgi/
(Note, these lines (in particular, the FastCgiServer directive) must appear after the User and Group directives.)
If you do not use the AddHandler and the FastCgiServer commands then apache will not keep the mason_handler.fcgi program running between requests. If the handler is not running between requests RT2 will run very slowly.
user=www
cgipat=**.html
ssl
certfile=/usr/local/www/mini_httpd.pem
logfile=/tmp/mini_httpd.log
chroot
bash# FCGI_SOCKET_PATH=$root/.sock/rt2 /path/to/rt2/bin/mason_handler.fcgi & bash# cd $root bash# mini_httpd -C /path/to/mini_httpd.conf
cgipat=index.html|Admin/**|Elements/**|NoAuth/**|Search/**|SelfService/**|Ticket/**|User/**
In its default configuration, RT uses an internal users database to keep track of who can access RT and who has what rights within the system.
One of your first tasks should be to create users for anyone who will need to work with tickets within RT.
With the web interface, click on "Configuration" -> "Users" ->
"Create a new user".
Be sure to fill in:
Also make sure that "Let this user to be granted rights" and "Let this user access RT" are checked.
Note: You may find that when you add a user, you get an error
"Name in use". This is probably because you have sent test emails when
configuring the mail gateway.
Click on "Users" and enter the search for the username or email address,
making sure to check "Include disabled users in search".
RT's primary administrative unit is the 'queue.' Use queues to separate tickets either by the groups of people who should be dealing with them, the user community or ticket attributes, or some combination therein. Generally, you don't want to create queues for time-limited projects. In most situations, queues are not things you should be creating or deleting with any frequency.
Click on "Configuration->Queues->Create a new queue"
By default, RT has one queue called 'general'. You will probably want to change the values for this.
RT provides a rich access control system that allows rights to be granted to groups, individual users and users in specific roles.
To allow arbitrary remote users to submit tickets into a given queue by email, grant "Everyone" the rights to "SeeQueue", "CreateTicket", "ReplyToTicket" and "CommentOnTicket" for that queue.
If you intend to let ticket requestors use the requestor-mode web interface, you should grant "Requestor" the right to "ShowTicket"
To make sure that your staff can work with tickets, you should grant them all the following additional rights:
RT's "Scrips" system lets sites configure what email gets sent by RT in response to ticket creation or updates. Unless you set up Scrips, RT _will not_ send any email. (It's also a general extension mechanism which allows changes to persist across updates. But if you're reading this quickstart guide, you probably just don't want to go there yet.)
Scrips are composed of a Condition, an Action and a Template. A number of Conditions and Actions come with RT. Others are available as contributed add-ins from members of the RT community. Later on, you can define custom templates for each queue, but for now, RT ships with a set of predefined templates which should get you started.
The default global Scrips installed with RT 2.0 (as of 2.0.12) are:
"OtherRecipients", I hear you ask? "Other" recipients are those addresses entered into the Cc and Bcc fields on the "modify ticket" (comment/correspond) page.
RT lets you set up Cc and Administrative Cc watchers globally and for
each queue. (Note that mail isn't sent unless you define Scrips to send
it). Generally, Cc watchers are folks who get notifications of ticket
updates and can view the queue (though this, of course, depends on how
you configure things). Administrative Ccs are usually the folks who have
rights to modify tickets. Set up folks you want to get Cc or AdminCc
mail as watchers for your queue in "Configuration"/"Queues"/ RT's keyword system is centered around a single global hierarchy of
keywords. A "Keyword Selections" attaches keywords from that
hierarchy to a single queue (or globally.)
Keyword Selections let you pick a node in the Keywords tree as its
"root" and to decide whether users can pick either a single value or
multiple values from that list. Each "Keyword Selection" has it's own
name.
For now, you probably don't need any keywords, but once you want to
start 'tagging' requests with keywords, you will need to create some.
First, go to Configuration/Keywords and create entries in the keyword
hierarchy. Good examples are:
Now, you need to attach these keywords to your queue. Go to
Configuration/Queues/$Your Queue/Keyword Selections. Lets use
Operating Systems as an example. Enter the following fields:
You now have a keyword field called "Platform" which can have the
values of the children of Operating System, i.e. Linux, Solaris,
Win32. Tickets can have multiple values selected, so a ticket could
have the value Platform set to both Linux and Solaris.
Note that the hierarchy was called "Operating System" but we named our
keyword "Platform".
Lets make another example:
You've now created a keyword field called Priority, which can have
_one_ value, either High, Normal, or Low.
Before you start creating keywords willy nilly, think about how you
want to arrange them. The keyword hierarchy can get very large, very
quickly.
You might want to break an Operating Systems into more levels:
In the above example, you could create a Keyword Selection like the
following:
"Platform" / Multiple / (children of) Operating Systems / 1 (level deep)
Platform would be a keyword field that allows you to select from Unix,
Windows, and Mac.
If you are using Queue specific keywords, you may want to organize
them that way. For example, I have a keyword for GUI, which I know I
will only use in one queue, "Frontends". I might design the hierarchy
this way:
You also need to give the Everyone pseudogroup the privilege "CreateTicket" on all queues that rt-mailgate will be using, because mail requests are by default unauthenticated. (There is a dangerous mechanism where %RT USER and %RT PASS are variables that can be set in plain email text, but if you are that desperate you will find out about it yourself.) If you also wish to allow comments to be added by email, as is usually the case, then you also need to grant the two privileges "CommentOnTicket" and "ReplyToTicket" to Everyone.
Next, you need to review the (scanty) documentation on rt-mailgate. Understand the difference between the two kinds of actions, and be aware that only the "correspond" action can create tickets.
There are many ways of interfacing your mail transport agent (Exim, Postfix, qmail, Sendmail etc) to the RT mail program rt-mailgate. The general idea is that some amount of work is done by the aliases mechanism your MTA usually uses, and some amount in the configuration files of your MTA.
If you want to just use /etc/aliases, and your MTA is happy with this, you might add some entries that look like this, one pair for every RT queue that you have:
You need to configure your email server to pass incoming emails to /path/to/rt2/bin/rt-mailgate. Usually we set up two addresses for each queue, one for correspondance (which means formal communication with users), and a second for internal comments. We'll assume in the examples below, that the initial queue is called support, and that the addresses will be support@example.com and support-comment@example.com. The examples below show how for each of Sendmail, qmail and Exim you can have a mail alias used to inject new tickets and conduct email-based correspondance.
This doesn't scale at all well, because every time you add a queue or even change a queue name you have to do things to the email system. Even worse, it builds in a dependency between the email alias that the user knows about and the way that RT does its email processing. There is a much better solution which involves just a single piece of MTA logic, logic which says "for addresses of this particular form (say, queuename@host) handle them with rt-mailgate in the following way.) So long as all your queuenames conform to some standard that you define, you should never need to change aliases or MTA configuration to set up RT. The only MTA for which there is an example of such a configuration is Exim. You'll find it in the following sections.
This does introduce a complication in delivering mail to RT. The examples below assume that you have your Mail Transfer Agent running on the same machine as RT. Getting the mail from your main mail server to the RT mail server is usually done by adding aliases on your main mail server to deliver the mail through your network to your RT machine internally. (You'll need to run an MTA on the RT machine, either in daemon mode (always accepting connections from your main mail server) or invoked from inetd.)
Remember to use generic addresses in your config files (eg, rt@example.com vs rt@rt.example.com or rt@bert.example.com) which will simplify your life in any future relocation of your RT installation.
Users of qmail will need to set up qmail aliases in ~alias/. For example, to direct mail sent to To direct mail sent to
Keep in mind that rt-mailgate will be running with UID "alias"; if you have configured RT to log to a directory other than /tmp, you must ensure that that directory is writeable by the "alias" user. I recently installed rt2 onto a machine that was using exim as it's
MTA. While configuring the various aliases I figured there ought be a
better way. So I hacked at my exim.conf for a bit (with help from a
friend) and ended up with a machine where I can send mail to
rt-queue+action@host, and it will DTRT.
basicly I told exim that I had a local user "rt" (I don't) and that -
was a prefix and + was a suffix, and that it should send all mail for
this user to a transport. The transport just execs rt-mailgate with
the relevant command line flags.
my end setup will have my hacked exim.conf on the rt2 host, and my
domain's main mail server will have aliases like:
abuse: rt-abuse+correspond@rt2
I find this much simpler than having big long aliases somewhere.
anyhow, I figured I'd share....
One caveat, because this hack uses "+" and "-" as special characters. you can't have them in your queue names. but it's easy to change which characters it reserves
in the TRANSPORTS section of my exim.conf I've added:
If you're not familar with Debian,
it's a linux distribution with a large collection of pre-compiled
packages. As debian has a very good packaging system, it's better for us
to work within it. This means avoiding cpan, and thus avoiding
make fixdeps while this sounds horrible inconvient,
it turns out everything RT needs is already packaged. I generally
run make testdeps several times while installing packages
until I have something that passes testdeps. As of 2002-03-07, debian testing, and rt-2-0-12-pre6 These are the
packages I needed for perl:
Set up keywords
Operating System/
Operating System/Linux
Operating System/Solaris
Operating System/Win32
and
Priority/
Priority/High
Priority/Normal
Priority/Low
"Platform" / Multiple / (children of) Operating System
"Priority" / Single / (children of) Priority
Operating Systems/
Operating Systems/Unix
Operating Systems/Unix/Linux
Operating Systems/Unix/Solaris
Operating Systems/Windows/Windows NT
Operating Systems/Windows/Windows 2000
Operating Systems/Mac/OS X
Operating Systems/Mac/OS 9
Queues/
Queues/Frontends/
Queues/Frontends/GUI/
Queues/Frontends/GUI/Qt
Queues/Frontends/GUI/GTK+
Queues/Frontends/GUI/Wx
Queues/Frontends/GUI/Motif
Configure the Email Gateway
Before doing anything else, make sure that rt-mailgate runs from the commandline. When you do this, if rt-mailgate can't find config.pm then check the permissions - it should be setgid to the rt group as defined in the Makefile. (Some people have reported having to change
the first line in rt-mailgate to point to their setuid perl. While
that's not how setuid perl is designed to work, if nothing else
seems to work...)
Which server should deliver RT mail?
In a large environment, chances are that you have multiple machines to
perform your tasks. In such an environment, you will get better
performance by ensuring that RT runs on its own (or at least, lightly
loaded) machine.
Sendmail
An alias for the queue will need to be made in either your global mail aliases file (if you are using NIS) or locally on your machine.
Add the following lines to /etc/aliases (or your local equivalent):
support: "|/path/to/rt2/bin/rt-mailgate --queue support --action correspond"
support-comment: "|/path/to/rt2/bin/rt-mailgate --queue support --action comment"
Then rebuild your aliases file according to your setup. Usually this is done by typing:
# newaliases
If your sendmail configuration uses smrsh, the the sendmail restricted shell, you must tell smrsh that it is allowed to run rt-mailgate.. To do so, make a symlink in /etc/smrsh to rt-mailgate:
# ln -s /path/to/rt2/bin/rt-mailgate /etc/smrsh/rt-mailgate
Qmail
| /var/qmail/bin/preline /path/to/rt2/bin/rt-mailgate --queue support --action correspond
| /var/qmail/bin/preline /path/to/rt2/bin/rt-mailgate --queue support --action comment
Exim
An alias for the queue will need to be made in either your global mail aliases file (if you are using NIS) or locally on your machine.
Add the following lines to /etc/aliases (or your local equivalent):
support: "|/path/to/rt2/bin/rt-mailgate --queue support --action correspond"
support-comment: "|/path/to/rt2/bin/rt-mailgate --queue support --action comment"
Then rebuild your aliases file according to your setup. Usually this is done by typing:
# newaliases
scary exim hack
so, here's a scary exim hack to avoid creating rt-mailgate entries
in each alias. You don't need it, but you might have fun.
From: seph
# my rt hack
local_delivery_rt:
driver = pipe
command = "/usr/local/rt2/bin/rt-mailgate --queue ${quote:$local_part} --action ${quote:${substr_1:$local_part_suffix}}"
return_path_add
return_output
prefix = ""
suffix = ""
user = www-data
and in the DIRECTORS section I've added:
localuser_rt:
driver = smartuser
suffix = +*
prefix = *-
new_address = ${quote:${lc:${local_part}}}@${domain}
transport = local_delivery_rt
scary qmail hack
From the mailing list.
You may need to twiddle the <s and >s around
From: Matthias Juchem <juchem@XXX.XXX>
To: rt-users@lists.fsck.com
Subject: [rt-users] A little script for using qmail with rt
Date: Wed, 27 Nov 2002 01:18:34 +0100
Message-Id: <E17Cqk5-0001Ru-00@gandalf.math.uni-mannheim.de>
Hi.
I am lazy. I do not want to update an mail alias file when I add a new queue
to rt.
That is why I have written this little script, i at the end.
I guess it might be quite useful for other people too, so, have fun.
Best regards,
Matthias
#!/usr/bin/perl
use strict;
#############
#
# qmail2rt v0.3
#
# (c) 2002 by Matthias Juchem
shorter scary qmail hack
A slightly simpler qmail hack, also from the mailing list.
You may need to twiddle the <s and >s around
From: Sam Johnston
Ensuring that RT-generated mail gets delivered
Something which a number of people forget, is to flush the queue on
your Mail Transfer Agent (MTA) after RT has generated a mail. This can
be done by ensuring that the MTA is running in queue mode, or invoke an
MTA queue run from cron every acceptable time period (eg, every 5
minutes).
Appendix
Installing RT on Debian Linux
you will, of course, need additional packages for your webserver, your mailserver, and your database. This rtfm article has complete install notes, and not just a package list.
apt-get install mysql-client mysql-common mysql-server
change root's password
mysqladmin password db-root-passwd
edit the files in /etc/mysql/ most important is so change the max_allowed_packet to 16M
apt-get install make wget
mkdir -p /usr/local/src/rt
addgroup rt
adduser www-data rt
cd /usr/local/src/rt
wget http://www.fsck.com/pub/rt/devel/rt-2-0-12-pre6.tar.gz
tar xzf rt-2-0-12-pre6.tar.gz
This is the fun part.
basicly, keep running make testdeps until it finds everything. You'll likely need the following packages. (all in the debian archives)
make installthis will prompt you for several passwords. most of the time it wants the mysql admin/root passwords, but sometimes it wants the rt users's password. pay attention to what it says.
From: Gary Leong <gwleong@XXX.XXX>
To: rt-users@lists.fsck.com
Subject: [rt-users] RH 7.2 step by step
Message-ID: <3CED786B.59C06A31@lbl.gov>
Date: Thu, 23 May 2002 16:16:59 -0700
Here are the step by step instructions I promised way back when. I
didn't get a chance to write it up until now. It's off the top of my
head, so I do apologize if I neglected a step or two. Please let me
know of any mistakes, so I can update the instructions on
documenations.. Thanks.
I also attached the file.
Gary
1)Install Redhat 7.2
2)Remove apache in distributed Redhat 7.2
To a get a list, run this command:
rpm -qa | grep apache
apacheconf-0.8.1-1
apache-manual-1.3.22-2
apache-devel-1.3.22-2
apache-1.3.22-2
then run
rpm -e apacheconf-0.8.1-1
rpm -e apache-manual-1.3.22-2
rpm -e apache-devel-1.3.22-2
rpm -e apache-1.3.22-2
3)Download mod_perl and apache source. I put the source in /temp. Unzip
and untar the source.
gunzip -c apache_1.13.9.tar.gz | tar xvf -
gunzip -c mod_perl-1.26.tar.gz | tar xvf -
4)To install Apache with mod_perl statically compiled.
cd into the mod_perl directory and run the following commands to
configure mod_perl for apache install:
cd /temp/mod_perl-1.26
perl Makefile.PL \
APACHE_SRC=../apache_1.13.9/src \
NO_HTTPD=1 \
USE_APACI=1 \
PREP_HTTPD=1 \
EVERYTHING=1 \
make
make install
cd into apache source directory. To install apache, run the following
commands:
cd /temp/apache_1.3.19/
./configure --prefix=/usr/local/apache \
--activate-module=src/modules/perl/libperl.a \
5) Download and install CPAN
unzip and untar source and cd into CPAN source directory.
follow these commands to install:
gunzip -c CPAN-1.59.tar.gz | tar xvf -
cd /temp/CPAN*
perl Makefile.PL
make
make install
6) Install Mason manually as CPAN doesn't seem to download and install
it automatically.
unzip and untar source and cd into Mason directory.
gunzip -c HTML-Mason-1.04.tar.gz | tar xvf -
cd /temp/HTML-*
perl Makefile.PL
make
make install
7) Download and unpackage RT.
gunzip -c rt.tar.gz | tar xvf -
8) Get dependent modules.
cd /temp/rt-2-0-9/
make testdeps
make fixdeps
9) Configure preliminarily apache.
a)In http.conf, change the following lines. They are in this order,
but not juxtaposed vertically. Do a search
make the changes.
ServerType stand
ServerRoot "/usr/local/apache"
MinSpareServers 5
MaxSpareServers 20
StartServers 8
MaxClients 150
MaxRequestsPerChild 100
Listen 80
Port 80
User apache
Group apache
ErrorLog /var/log/httpd/error.log
CustomLog /var/log/httpd/access_log combined
b)Make log directories.
mkdir -p /var/log/httpd/error.log /var/log/httpd/access_log
chown -R apache:apache /var/log/httpd/error.log
/var/log/httpd/access_log
10) Create user rt.
groupadd -g 35 rt
useradd -m -d /home/rt -u 4040 -g 35 rt
11) Set root password for MySQL database.
e.g.
username: root
password: 123456
The syntax is as follows:
/mysql/admin -u root password '123456'
12) Install RT
a) Make changes to Makefile
cd /tmp/rt-2-0-9
vi Makefile
for these entries
RT_PATH = /opt/rt2
RT_LOG_PATH = /var/log/rt2
DB_TYPE = Mysql
DB_HOME = /usr/bin/mysql
DB_DBA = root
DB_DBA_PASSWORD = "123456"
DB_RT_USER = rt
WEB_USER = apache
WEB_GROUP = apache
c) mkdir -p /var/log/rt2
chown -R root:rt /var/log/rt2
chmod 755 /var/log/rt2
b) Install rt: build database and install rt files.
make install
13) Set up Sendmail
a) configure Sendmail to receive connections outside of localhost.
Sendmail from Redhat
by default doesn't allow outside email.
change the mc file
vi /etc/mail/sendmail.mc
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
<-------------dnl this entry
run the command
m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
vi /etc/aliases
rt-comment: "|/opt/rt2/bin/rt-mailgate --queue general --action
comment" <----------add the following entry
rt: "|/opt/rt2/bin/rt-mailgate --queue general --action
correspond" <----------add the following entry
14) Configure config.pm file for rt
Let's say our domain is wheats.com.
a) Change the following in the file, accordingly.
e.g.
$rtname="wheats.com";
$rtname="wheats.com";
$DatabaseUser='rt';
$DatabasePassword='123456';
$CorrespondAddress='rt';
$CommentAddress='rt';
15) Make sure user rt can access and manipulate database.
e.g.
username: root
password: 123456
mysql -u root -p
GRANT ALL ON rt2.db.* To rt@localhost Identified By "123456"
quit
16) Setup rt to access by Apache.
e.g.
IP address of rt machine: 128.5.3.11
Only machines in wheats.com domain will allow be accessed.
In the httpd.conf file in /usr/local/apache/conf
a) Add the following entries, accordingly.
#NameVirtualHost *
<VirtualHost 128.5.3.11>
DocumentRoot /opt/rt2/WebRT/html
ServerName dummy.wheats.com
PerlModule Apache::DBI
PerlRequire /opt/rt2/bin/webmux.pl
<Location />
SetHandler perl-script
PerlHandler RT::Mason
Order allow,deny
Allow from *.wheats.lbl.gov
</Location>
</VirtualHost>
17) Add apache to run scripts.
cp /usr/local/apache/bin/apachect1 /etc/init.d/
ln -s /etc/init.d/apachect1 /etc/rc3.d/S99httpd
18) Reboot the machine. I hope everything works. Please, please let me
know if things don't go right or how
I can make things clearer.
1)Install Redhat 7.2
2)Remove apache in distributed Redhat 7.2
To a get a list, run this command:
rpm -qa | grep apache
apacheconf-0.8.1-1
apache-manual-1.3.22-2
apache-devel-1.3.22-2
apache-1.3.22-2
then run
rpm -e apacheconf-0.8.1-1
rpm -e apache-manual-1.3.22-2
rpm -e apache-devel-1.3.22-2
rpm -e apache-1.3.22-2
3)Download mod_perl and apache source. I put the source in /temp. Unzip and untar the source.
gunzip -c apache_1.13.9.tar.gz | tar xvf -
gunzip -c mod_perl-1.26.tar.gz | tar xvf -
4)To install Apache with mod_perl statically compiled.
cd into the mod_perl directory and run the following commands to configure mod_perl for apache install:
cd /temp/mod_perl-1.26
perl Makefile.PL \
APACHE_SRC=../apache_1.13.9/src \
NO_HTTPD=1 \
USE_APACI=1 \
PREP_HTTPD=1 \
EVERYTHING=1 \
make
make install
cd into apache source directory. To install apache, run the following commands:
cd /temp/apache_1.3.19/
./configure --prefix=/usr/local/apache \
--activate-module=src/modules/perl/libperl.a \
5) Download and install CPAN
unzip and untar source and cd into CPAN source directory.
follow these commands to install:
gunzip -c CPAN-1.59.tar.gz | tar xvf -
cd /temp/CPAN*
perl Makefile.PL
make
make install
6) Install Mason manually as CPAN doesn't seem to download and install it automatically.
unzip and untar source and cd into Mason directory.
gunzip -c HTML-Mason-1.04.tar.gz | tar xvf -
cd /temp/HTML-*
perl Makefile.PL
make
make install
7) Download and unpackage RT.
gunzip -c rt.tar.gz | tar xvf -
8) Get dependent modules.
cd /temp/rt-2-0-9/
make testdeps
make fixdeps
9) Configure preliminarily apache.
a)In http.conf, change the following lines. They are in this order, but not juxtaposed vertically. Do a search
make the changes.
ServerType stand
ServerRoot "/usr/local/apache"
MinSpareServers 5
MaxSpareServers 20
StartServers 8
MaxClients 150
MaxRequestsPerChild 100
Listen 80
Port 80
User apache
Group apache
ErrorLog /var/log/httpd/error.log
CustomLog /var/log/httpd/access_log combined
b)Make log directories.
mkdir -p /var/log/httpd/error.log /var/log/httpd/access_log
chown -R apache:apache /var/log/httpd/error.log /var/log/httpd/access_log
10) Create user rt.
groupadd -g 35 rt
useradd -m -d /home/rt -u 4040 -g 35 rt
11) Set root password for MySQL database.
e.g.
username: root
password: 123456
The syntax is as follows:
/mysql/admin -u root password '123456'
12) Install RT
a) Make changes to Makefile
cd /tmp/rt-2-0-9
vi Makefile
for these entries
RT_PATH = /opt/rt2
RT_LOG_PATH = /var/log/rt2
DB_TYPE = Mysql
DB_HOME = /usr/bin/mysql
DB_DBA = root
DB_DBA_PASSWORD = "123456"
DB_RT_USER = rt
WEB_USER = apache
WEB_GROUP = apache
c) mkdir -p /var/log/rt2
chown -R root:rt /var/log/rt2
chmod 755 /var/log/rt2
b) Install rt: build database and install rt files.
make install
13) Set up Sendmail
a) configure Sendmail to receive connections outside of localhost. Sendmail from Redhat
by default doesn't allow outside email.
change the mc file
vi /etc/mail/sendmail.mc
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA') <-------------dnl this entry
run the command
m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
vi /etc/aliases
rt-comment: "|/opt/rt2/bin/rt-mailgate --queue general --action comment" <----------add the following entry
rt: "|/opt/rt2/bin/rt-mailgate --queue general --action correspond" <----------add the following entry
14) Configure config.pm file for rt
Let's say our domain is wheats.com.
a) Change the following in the file, accordingly.
e.g.
$rtname="wheats.com";
$rtname="wheats.com";
$DatabaseUser='rt';
$DatabasePassword='123456';
$CorrespondAddress='rt';
$CommentAddress='rt';
15) Make sure user rt can access and manipulate database.
e.g.
username: root
password: 123456
mysql -u root -p
GRANT ALL ON rt2.db.* To rt@localhost Identified By "123456"
quit
16) Setup rt to access by Apache.
e.g.
IP address of rt machine: 128.5.3.11
Only machines in wheats.com domain will allow be accessed.
In the httpd.conf file in /usr/local/apache/conf
a) Add the following entries, accordingly.
#NameVirtualHost *
<VirtualHost 128.5.3.11>
DocumentRoot /opt/rt2/WebRT/html
ServerName dummy.wheats.com
PerlModule Apache::DBI
PerlRequire /opt/rt2/bin/webmux.pl
<Location />
SetHandler perl-script
PerlHandler RT::Mason
Order allow,deny
Allow from *.wheats.lbl.gov
</Location>
</VirtualHost>
17) Add apache to run scripts.
cp /usr/local/apache/bin/apachect1 /etc/init.d/
ln -s /etc/init.d/apachect1 /etc/rc3.d/S99httpd
18) Reboot the machine. I hope everything works. Please, please let me know if things don't go right or how
I can make things clearer.
Most of the installation process goes without problems. The only known concern is Sendmail configuration.
In Solaris 8, Sendmail executable is placed where you normally don't expect it: /usr/lib/sendmail. Thus, you need to set $SendmailPath in etc/config.pm.
In addition, you might want to change the default Sendmail configuration. In /usr/lib/mail/ you will find the sources for Sendmail configuration files (available via package SUNWsndmu). Note that the default configuration supplied by Solaris rewrites the sender's address with the fully qualified hostname. You may change this with MASQUERADE_AS(support.yourdomain.com) statement. Note that it's incompatible with FEATURE(`remote_mode').
Each ticket is identified by a unique ticket number. The terms ticket and request are used interchangably. Users with a background with the commercial Clarify helpdesk system will be used to the term Case, which also means the same thing.
Sites will sometimes have their own interpretation of each status.
Examples of attributes used to differentiate users are:
Sometimes it looks like someone can interact with RT without having a username. As you'll find out elsewhere in this documentation, this is not correct.
When email is submitted to RT's email gateway from an unknown email address, RT will automatically create a Nonprivileged user with a name derived from the email address. RT will assign the ticket to the special nonprivileged user nobody. The newly-created Nonprivileged user is required in order for RT to function (eg to track correspondance) and has nothing to do with ticket ownership, queue privileges or anything else. It is a very good idea to put RT behind a spam filter such as Spamassasian.
It is not currently possible to force tickets that are automatically created like this to be owned by a particular user.
Multiple queues may be set up, and each will have its own email address. So you might have a queue called noc@example.com which is monitored by technical staff, and billing@example.com which is used by accounts staff. Tickets may be moved between queues, so a tech could pass a ticket onto the accounts department once work has completed.
Queues can be configured differently, so the noc queue may issue an autoresponse when a ticket is created, whereas the accounts queue might be configured to prevent internal correspondance being sent to the requestor.
This is particularly useful when dealing with permissions and ACLs. So for example it often makes sense to give a particular group read-only access to a certain queue rather than the many members of that group. Removing a username from the group causes all privileges granted via that group membership to be revoked.
There are three sorts of watchers, as follows.
Requestors traditionally see only correspondence, however since RT knows about some kinds of users (either because they are RT users, or because RT does a matching between email address and RT username) a requestor may also be someone with privileges to do things to the ticket.
The only people that can be added as a AdminCcs for a queue are those with permissions to administer tickets in that queue.
Keywords can be used for searching and reporting, and as trigger values in Scrips. This Administration Guide has an extensive section on keywords which includes a tutorial.
rt2 includes a rich acl scheme which supports granting rights to users and groups for a given queue or for the entire RT instance.
rights can be granted to:
a specific user who has the privileged flag set and doesn't have the disabled flag set
a specific locally defined group
one of several 'pseudogroups':
everyone, requestor, cc, admincc, owner
Rights granted to an individual user are granted to that user and only that user
Rights granted to a locally defined group will be made available to all members
of that group, so long as they remain members of the group.
rights granted to the pseudo-group 'everyone' will be granted to all users.
Rights granted to any of the following pseudo-groups will be dynamically
granted to users based on the current ticket being dealt with:
requestor, cc, admincc, owner.
Rights can be granted to users and groups to define what the user is allowed to do and change in RT. Rights can apply to the whole of RT and all the queues (global) or can apply to a single specific queue. Rights can be granted to individual users and to defined groups of users.
Rights can also be assigned to pseudogroups that define users in a context. The pseudogroups are "Everyone" (all the users on the system), "Requestor" (users that are requestor in the context of the current ticket), "Cc" (users that are Cc , either direct by the ticket or defined in the queue, of the selected ticket) and "AdminCc" (users that are Administrative Cc to the ticket or the ticket's queue).
The effective rights of a user are the combination of the global personal right, the combined global rights of the groups the user is in, the rights of the user and all the groups that the user is in to the currently selected queue and the rights the user gets through the pseudogroups.
A description of all the rights that users and groups can be assigned in RT follows:
RT 2.0 includes a powerful system for implementing local business logic, called 'Scrips'. (The 'Scrips' system is a combination of a 'script' system and a 'subscription' system).
With RT 1.0, the requestors of a ticket were automatically emailed on any correspondence that RT couldn't determine came from them. RT 2.0 allows each site to control this and many other behaviors at the queue level. Through the scrips mechanism, RT 2.0 allows local administrators to define what actions should be taken on each transaction.
Scrips can be defined per-queue and system-wide. Each scrip is composed of a Condition, an Action and a Template.
For 2.0 there isn't an exposed user interface for defining new actions and conditions, though the programming API is simple and well defined.
Conditions are things like:
Actions include things like:
Note: Notify scrips do not send mail to the user performing the action.
There are a bunch of predefined system-wide templates like:
Additionally, RT allows local RT administrators to define new system-wide tempaltes and allows queue administrators to define per-queue templates.
Templates can optionally have RFC822 headers which will be appended
to an outgoing mail message. If a template has such headers, it
B
The key to safe database management is taking regular backups. To take a 'binary' backup of your database you have to do the following:
* Shut down your MySQL database and make sure it shuts down without errors.
* Copy all your data files into a safe place.
* Copy all your log files to a safe place.
* Copy your `my.cnf' configuration file(s) to a safe place.
* Copy all the `.frm' files for your InnoDB tables into a safe place.
A script to perform a backup of RT exists for RT 1.0.x in the
contrib directory right here, but you do want to read the README first.
TODO - Verify suggestions from rt-users for RT 2.0.x, also clarify restoration procedures - bc.
Another important use for keywords is reporting. A common requirement is a regular report that includes a brief summary of the tickets that have been closed recently. Keywords can save a lot of time in doing this without requiring the workers to write detailed explanations. Just assign a keyword category such as "Reason for Closure" and the report can be mostly constructed from a normal RT search screen.
Keywords are very easy to add to your RT installation -- they can be added completely through the Web interface. There are two basic steps to adding keywords to RT:
This tutorial will teach you how to add a "Progress" keyword selection to a job application tracking queue. This keyword will allow you to track how far along each candidate is in the review process. Using this example you can add any keywords appropriate for your uses to your site's RT configuration.
The first step in using keyword selections is to
set up a set of keywords that will be useful to you. A "keyword" is
either any individual ticket characteristic (such as an urgency level
like "Critical"), or a category of individual keywords (such as
"Urgency"). In planning your keywords, take a look at the example
job-applicant keyword selection to the right, and use it as a model.
This example shows one keyword selection, with a category named
"Progress," and six individual keywords in that category (of which
five are shown in the graphic) named "1. Requested interview,"
"2. Interviewed once," and so on.
Internally, RT does not make a distinction between categories and individual keywords -- all keywords are stored in one "tree" structure (just like a filesystem with a root directory and subdirectories). Any keyword can contain other keywords. This fact can be helpful in organizing keywords for easy administration.
In our example, we want to create a keyword selection to track candidate review progress for a queue named 'jobs'. Since this keyword selection applies only to the jobs queue, and no other queue on our system, we'll create a top-level keyword called Jobs. This is not required -- you could put the Progress keyword at the top level -- but doing this will allow us to keep ourselves organized by grouping any keywords specific to the 'jobs' queue together. Inside Jobs, we'll create a subcategory called Progress, which is our category keyword. Then, inside Progress, we will create one keyword for each of the selections we want to appear in the form. Our plan, then, is to create the following keyword structure:
One thing to note is that when RT displays keyword selections on a ticket, it sorts them alphabetically. If you would like to have your selections appear in a specified, non-alphabetic order, it is helpful to add a sequential number or letter to the front of each individual keyword. In our example, our interviewing process has several steps that need to follow each other, so we've added "1:", "2:", etc. to the beginning of each step.
Now that we've planned out our keywords, we can add them to RT. While logged into our RT system as a SuperUser (for instance, using the "Administrator" account), first select [Configuration], and then within configuration, select [Keywords]. The keywords administration page shows a list of existing top-level keywords (probably empty at this point), and then a field for adding a new keyword. Following our plan above, type "Jobs" into the entry field and hit the "Add" button. The result should look like this:

Once this is done, we then want to create keywords within the Jobs keyword. To do this, first click on the word "Jobs" (not the "edit" next to "Jobs" -- edit only changes the name of the "Jobs" keyword -- but instead the word "Jobs" itself), and then use the text field to add the "Progress" keyword. Then click on "Progress" and add each of the individual keywords planned out above. When all of the keywords have been added, the result appears as follows:

(In the image above, the numbers "16", "17" and so on may be different on your system -- don't worry about that. These numbers are RT's internal id's for each keyword, and they do not affect your configuration.)
We have now added all the keywords we need to the system. As of right now, these keywords do not appear in any of our tickets, because they have not been added to the queue configuration. What we have done so far is make RT aware of the keywords -- now we need to associate our keywords with our "jobs" queue.
Once we have entered keywords into RT, we then need to specify Keyword Selections, which are sets of keywords available for selection on a ticket. To do this, we need to choose a selection model (single or multiple), a selection depth, and which queue or queues will use the keyword selection. Each choice is described below.
A keyword selection is represented in the RT
interface as one form selection field -- a list of items that a user
may select. Our example keyword selection is pictured at right.
There are two varities of keyword selection: Single selection
and Multiple selection. In single selection, a user may select
any one keyword in the list, but not more than one. In our example,
we use a single selection since each step in the interview process is
distinct. In a multiple selection, a user may choose one or more
keywords in the selection list (usually by holding down the "Control"
key while selecting each keyword). For instance, if you had a keyword
category called "Ways to contact" containing the individual keywords
"Email," "Phone," "Fax," and "Pager," you might want to allow multiple
selection to include several contact methods.
A keyword selection's depth represents how many levels down in the keyword tree the selection should include. A keyword selection starts at what we've been calling the category keyword -- in our example, "Progress." This keyword can contain other keywords, which themselves might contain keywords. As an example, let's say you wanted to change our keyword tree to look like this:
In this case, if we used "Progress" as our category keyword, and set a depth of "1," the 3a, 3b, and 3c steps would not be included in the selection field -- they are two levels deep, so they would not meet the depth requirement. If instead we used a depth of "2" or more, steps 3a, 3b, and 3c would be included in the selection field. Another way to include these steps would be to use a depth "0," which includes all keywords under "Progress," no matter how deep they are.
Next, we can use the keyword selection in two ways: either we can add a keyword selection to a single queue, or we can add a keyword selection to all queues at once. For our example, our keyword selection is specific to the 'jobs' queue, so we will add it to that queue's configuration only. To do this, we first choose [Configuration], then [Queues], and then select the 'jobs' queue. If we had a general keyword selection we wanted to apply to all of our queues (for instance, "Requestor satisfaction: Happy, Okay, Unhappy, Unknown") we would instead choose [Configuration] and then [Global].
Once we have selected the queue to modify (or chosen "Global"), the next step is to click [Keyword Selections]. Doing this will bring up a form with which we can add a keyword selection to a queue. The form uses four fields to configure the keyword selection. The first field is the label that will be put above the selection form field. In our example above, we used the label "Progress." (Note that the label does not need to be a keyword itself -- the label can be any text you want to use.) Next, choose between Single and Multiple selection models, as described above. We are using "Single" selection in our example. Next, choose your category keyword from the pop-up list of keywords. This is the keyword that contains the selections you want to appear in the form. For our example, we choose "Jobs/Progress". Finally, choose the selection depth for the keyword selection. We enter '0', which is interpreted as "unlimited depth beneath the category keyword." Once these selections are made, hit the submit button, and the following form should appear:

Your keywords are now enabled. Go to the 'jobs' queue and open a ticket, then click on "Keyword Selections." You should see the "Progress" keyword selection, and it should contain the six progress steps entered above, plus the keyword "(empty)," which indicates that no keyword selection has been made for this ticket.
Once you have entered some keyword selections, go to the search form and search for the queue 'jobs'. At the bottom of your results page, you will see that the 'Progress' keyword is now included as a search restriction, so you can use the progress step as a term in searches. (If you associate a keyword with a queue, the keyword search form will only appear on searches within that queue. Global keyword selections will appear on all search forms.)
Hopefully this tutorial will help you get the most out of keywords in RT. Keywords can be an enormous help in adding order and searchability to a large set of tickets. If you come up with creative uses for keywords, send them in to <rt-users@lists.fsck.com> and let us know what they are!
Since many people use RT for IT support desks the following example is included to illustrate how keywords can be applied, adapted from one in use by Rich Lafferty of Ottawa, Canada.
Support staff are trained to always set the keywords on a ticket, even if they don't have time to write a lot in the notes. This way basic sorting and reporting can always be done, giving an idea how time has been spent and what kinds of requests are arising.
There are two main queues, sysadmin and support, with different keywords available to a ticket in each. Here are some highlights of this tree design:
(root)
global
queue
sysadmin
closure reason
Done
Transferred responsibility elsewhere
Won't do - not reasonably fixable
Won't do - not our fault
Won't do - can't reproduce
ticket classification
reactive
System fault
User problem
planned
New feature request
Purchase - software
Purchase - hardware
Inhouse app1 - user issue
Inhouse app1 - hardware
Inhouse app1 - software
other
support
ticket classification
bug
handholding / user understanding
documentation problem
new feature request
customization
billing inquiry
flat-rate account
closure reason
Done
No support
Inappropriate
Bug raised
Timeout
Software-version
5.5, 6000R2
5.1.2
5.1.1, 6000R1
5.0
4.1.2
4.1 or prior
taxonomy
Server
Hardware
Hardware
Internet connection
DNS
Installation - initial configuration
Local networking
Users - Groups - Directories
Fileserver - I-Bays
Mail
Webserver
Proxy
Printing
Backup
Remote Access
Security
Customization
Housekeeping
ServiceLink
Partner Zone
Sync
Guaranteed Email
DNS Hosting
Virus Protection
VPN
Blades
Updates
Mp3 Jukebox
knowledge base
Article Written
Needs Article
A very simple thing to check is the version of RT you are running. If you are well out of date in the current stable series then you should consider upgrading. Upgrading is usually not too painful a job and there are regular improvements in RT's performance gained through better coding.
RT needs a responsive Apache/Perl webserver installation. This requires matching to your hardware requirements. If you have a small server, look at tuning Apache with the start servers and spare servers command. If you have large amounts of memory and you're getting lots of simultaneous incoming requests, increase the number of waiting servers.
Watch your logging. Apache and mod_perl can both do a lot of logging if you turn it on, enough to significantly affect performance. If many of your connections are from the Internet you may wish to turn off reverse DNS mapping in Apache.
If you think you are running tight on resources, have a look at what other services are running. Maybe you don't need them. If this is a critical server and it is heavily loaded, perhaps you need to split the web/perl server out from the database server, because they have different optimisati