https://rt-wiki.bestpractical.com/api.php?action=feedcontributions&user=83.236.138.178&feedformat=atomRequest Tracker Wiki - User contributions [en]2024-03-28T19:14:17ZUser contributionsMediaWiki 1.37.2https://rt-wiki.bestpractical.com/index.php?title=RtReminderMails&diff=3287RtReminderMails2015-01-15T11:47:49Z<p>83.236.138.178: prob with sendmail?</p>
<hr />
<div>This is a small cron script that sends daily emails about reminders that will be due in the next 48h to the owner of the original ticket as well as the owner of the reminder.<br />
<br />
Note - it requires the [http://search.cpan.org/~stbey/Date-Calc-5.4/Calc.pod Date::Calc] and [http://search.cpan.org/dist/Getopt-Long/ Getopt::Long] perl modules.<br />
<br />
<nowiki><br />
#!/usr/bin/perl<br />
#<br />
# This script outputs all reminders that are due within the next e.g. 2 days<br />
# and mails the result to the corresponding owners. christian <ch AT westend.com><br />
#####<br />
# FING - UdelaR<br />
# Modified by Mario A. del Riego <delriego AT fing DOT edu DOT uy><br />
# Modified by Gary Greene <ggreene AT minervanetworks DOT com><br />
# Restructured to allow cleaner execution flow<br />
# Removed taint check as it does not work currently<br />
# Fixed an old variable dont defined<br />
# Changed mail format (ticket id added)<br />
# Getopt added for parameters: --debug --reminder --ticket --interval and --help<br />
# File: http://www.fing.edu.uy/~delriego/RT_Reminder.pl<br />
# v 1.5<br />
<br />
package RT;<br />
<br />
use strict;<br />
use warnings;<br />
use Getopt::Long;<br />
use Data::Dumper;<br />
use Date::Calc qw(Today Add_Delta_Days);<br />
use RT::Interface::CLI qw(CleanEnv GetMessageContent loc);<br />
<br />
# Show reminders that are due between today and the day after tomorrow.<br />
## Bug fixed by sean <smahan (works for) smwm.com><br />
my $CONFIG_DUE_DAYS = 2;<br />
# The mail "From" address.<br />
my $CONFIG_FROM = 'rt-helpdesk@minervanetworks.com';<br />
# The mail "To" address if the Reminder *or* Ticket owner is Nobody.<br />
my $CONFIG_TO_NOBODY = 'blackhole@minervanetworks.com';<br />
# The mail "Subject" line.<br />
my $CONFIG_SUBJECT = 'RT Reminder';<br />
<br />
# Send mail to REMINDER OWNER<br />
my $ReminderOwner;<br />
# Send mail to TICKER OWNER<br />
my $TicketOwner;<br />
# Only show the mails for debugging<br />
my $debug = 0;<br />
my $interval = undef;<br />
<br />
my $help;<br />
<br />
sub usage {<br />
print "rt-reminders.pl - A script to send alerts for reminders in the RT system.\n";<br />
print "Contributed by several members of the RT community.\n";<br />
print "Under the same license as RT itself.\n";<br />
print "-------------------------------------------------------------------------\n\n";<br />
print "--reminder|-r Send mail to the reminder's owner\n";<br />
print "--ticket|-t Send mail to the ticket's owner\n";<br />
print "--interval|-i <int> Days left to end time (default < $CONFIG_DUE_DAYS)\n";<br />
print "--debug|-d Only show mails to send for debugging\n";<br />
print "--help|-h This help!\n\n";<br />
exit;<br />
}<br />
<br />
sub main {<br />
unless (defined($ReminderOwner) || defined($TicketOwner)) {<br />
usage();<br />
}<br />
<br />
# RT API boilerplate +++++++++++++++++<br />
# Clean our the environment<br />
CleanEnv();<br />
# Load the RT configuration<br />
RT::LoadConfig();<br />
# Initialise RT<br />
RT::Init();<br />
<br />
# Load rest of the RT stuff (seems to go after initialization)<br />
use RT::Date;<br />
use RT::Queue;<br />
use RT::Tickets;<br />
use RT::Action::SendEmail;<br />
# END RT API boilerplate +++++++++++++<br />
<br />
if (! defined($interval)) {<br />
$interval = $CONFIG_DUE_DAYS;<br />
}<br />
<br />
# Calculate date boundaries.<br />
my ($dy,$dm,$dd) = Today();<br />
my $d_now = sprintf('%04d-%02d-%02d 00:00:00', $dy, $dm, $dd);<br />
my $d_then = sprintf('%04d-%02d-%02d 23:59:59', Add_Delta_Days($dy, $dm, $dd, $interval));<br />
<br />
# Fetch list of matching tickets.<br />
my $tickets = RT::Tickets->new($RT::SystemUser);<br />
$tickets->FromSQL(<br />
'Type = "reminder" AND '.<br />
'(Status = "new" OR Status = "open") AND '.<br />
'Due >= "'.$d_now.'" AND '.<br />
'Due <= "'.$d_then.'"');<br />
$tickets->OrderBy(FIELD => 'Due', ORDER => 'DESC');<br />
<br />
# Format result and group by e-mail address.<br />
my %rcpts = ();<br />
while (my $ticket = $tickets->Next) {<br />
my $out;<br />
<br />
# Format:<br />
# "Reminder: <subject_reminder> ([RT #<TicketID> <TicketSubject>])<br />
# Due: <left_hour> hours"<br />
<br />
my $t = RT::Ticket->new($RT::SystemUser);<br />
$t->Load($ticket->RefersTo->First->LocalTarget);<br />
<br />
$out = sprintf(<br />
"Reminder: %s ([RT #%s] %s )\n" .<br />
" Due: %s\n\n",<br />
$ticket->Subject, $ticket->RefersTo->First->LocalTarget, <br />
$t->Subject, loc($ticket->DueObj->AgeAsString));<br />
<br />
my $tmp_rcpt_reminder = undef;<br />
if ($ReminderOwner) {<br />
# Push reminder to array of distinct e-mail addresses for this ticket.<br />
$tmp_rcpt_reminder = $ticket->OwnerObj->EmailAddress || $CONFIG_TO_NOBODY;<br />
if (! defined($rcpts{$tmp_rcpt_reminder})) {<br />
$rcpts{$tmp_rcpt_reminder} = ""<br />
}<br />
$rcpts{ $tmp_rcpt_reminder } .= $out;<br />
}<br />
<br />
if ($TicketOwner) {<br />
# Notify ticket owner or "nobody" if ticket is unowned<br />
my $tmp_rcpt_ticket = $t->OwnerObj->EmailAddress || $CONFIG_TO_NOBODY;<br />
if (defined($CONFIG_TO_NOBODY) && $tmp_rcpt_ticket ne $tmp_rcpt_reminder) {<br />
$rcpts{$tmp_rcpt_ticket} .= $out;<br />
}<br />
}<br />
}<br />
<br />
# Iterate over each of the tickets and send the email<br />
foreach my $rcpt (keys %rcpts) {<br />
my $mail = "From: $CONFIG_FROM\n".<br />
"To: $rcpt\n".<br />
"Subject: $CONFIG_SUBJECT\n\n".<br />
$rcpts{$rcpt};<br />
if ($debug) {<br />
print $mail . "\n";<br />
} else {<br />
# FIXME: Is there no proper RT library for this?<br />
no warnings;<br />
open(MAIL, "| $RT::SendmailPath $RT::SendmailBounceArguments $RT::SendmailArguments") or die("open sendmail: $!");<br />
use warnings;<br />
print(MAIL $mail) or die("print sendmail: $!");<br />
close(MAIL) or die("close sendmail: $!");<br />
}<br />
}<br />
}<br />
<br />
GetOptions(<br />
'r|reminder' => \$ReminderOwner,<br />
't|ticket' => \$TicketOwner,<br />
'd|debug' => \$debug,<br />
'i|interval=i' => \$interval,<br />
'h|help' => sub { usage() }<br />
) or usage();<br />
<br />
# while having a main isn't required in Perl, this cleans up and organizes the flow of the code....<br />
main();<br />
</nowiki><br />
<br />
'''2015-01-15 danny70437'''<br />
Modified script to run unter debian with perl installed in /opt/perl like this:<br />
<nowiki><br />
#/!/opt/perl/bin/perl<br />
use lib "/opt/rt4/lib";<br />
...<br />
open(MAIL, <br />
"| $RT::SendmailPath $RT::SendmailBounceArguments $RT::SendmailArguments -- $rcpt") <br />
or die("open sendmail: $!");<br />
</nowiki></div>83.236.138.178https://rt-wiki.bestpractical.com/index.php?title=RtReminderMails&diff=3286RtReminderMails2015-01-15T11:39:21Z<p>83.236.138.178: </p>
<hr />
<div>This is a small cron script that sends daily emails about reminders that will be due in the next 48h to the owner of the original ticket as well as the owner of the reminder.<br />
<br />
Note - it requires the [http://search.cpan.org/~stbey/Date-Calc-5.4/Calc.pod Date::Calc] and [http://search.cpan.org/dist/Getopt-Long/ Getopt::Long] perl modules.<br />
<br />
<nowiki><br />
#!/usr/bin/perl<br />
#<br />
# This script outputs all reminders that are due within the next e.g. 2 days<br />
# and mails the result to the corresponding owners. christian <ch AT westend.com><br />
#####<br />
# FING - UdelaR<br />
# Modified by Mario A. del Riego <delriego AT fing DOT edu DOT uy><br />
# Modified by Gary Greene <ggreene AT minervanetworks DOT com><br />
# Restructured to allow cleaner execution flow<br />
# Removed taint check as it does not work currently<br />
# Fixed an old variable dont defined<br />
# Changed mail format (ticket id added)<br />
# Getopt added for parameters: --debug --reminder --ticket --interval and --help<br />
# File: http://www.fing.edu.uy/~delriego/RT_Reminder.pl<br />
# v 1.5<br />
<br />
package RT;<br />
<br />
use strict;<br />
use warnings;<br />
use Getopt::Long;<br />
use Data::Dumper;<br />
use Date::Calc qw(Today Add_Delta_Days);<br />
use RT::Interface::CLI qw(CleanEnv GetMessageContent loc);<br />
<br />
# Show reminders that are due between today and the day after tomorrow.<br />
## Bug fixed by sean <smahan (works for) smwm.com><br />
my $CONFIG_DUE_DAYS = 2;<br />
# The mail "From" address.<br />
my $CONFIG_FROM = 'rt-helpdesk@minervanetworks.com';<br />
# The mail "To" address if the Reminder *or* Ticket owner is Nobody.<br />
my $CONFIG_TO_NOBODY = 'blackhole@minervanetworks.com';<br />
# The mail "Subject" line.<br />
my $CONFIG_SUBJECT = 'RT Reminder';<br />
<br />
# Send mail to REMINDER OWNER<br />
my $ReminderOwner;<br />
# Send mail to TICKER OWNER<br />
my $TicketOwner;<br />
# Only show the mails for debugging<br />
my $debug = 0;<br />
my $interval = undef;<br />
<br />
my $help;<br />
<br />
sub usage {<br />
print "rt-reminders.pl - A script to send alerts for reminders in the RT system.\n";<br />
print "Contributed by several members of the RT community.\n";<br />
print "Under the same license as RT itself.\n";<br />
print "-------------------------------------------------------------------------\n\n";<br />
print "--reminder|-r Send mail to the reminder's owner\n";<br />
print "--ticket|-t Send mail to the ticket's owner\n";<br />
print "--interval|-i <int> Days left to end time (default < $CONFIG_DUE_DAYS)\n";<br />
print "--debug|-d Only show mails to send for debugging\n";<br />
print "--help|-h This help!\n\n";<br />
exit;<br />
}<br />
<br />
sub main {<br />
unless (defined($ReminderOwner) || defined($TicketOwner)) {<br />
usage();<br />
}<br />
<br />
# RT API boilerplate +++++++++++++++++<br />
# Clean our the environment<br />
CleanEnv();<br />
# Load the RT configuration<br />
RT::LoadConfig();<br />
# Initialise RT<br />
RT::Init();<br />
<br />
# Load rest of the RT stuff (seems to go after initialization)<br />
use RT::Date;<br />
use RT::Queue;<br />
use RT::Tickets;<br />
use RT::Action::SendEmail;<br />
# END RT API boilerplate +++++++++++++<br />
<br />
if (! defined($interval)) {<br />
$interval = $CONFIG_DUE_DAYS;<br />
}<br />
<br />
# Calculate date boundaries.<br />
my ($dy,$dm,$dd) = Today();<br />
my $d_now = sprintf('%04d-%02d-%02d 00:00:00', $dy, $dm, $dd);<br />
my $d_then = sprintf('%04d-%02d-%02d 23:59:59', Add_Delta_Days($dy, $dm, $dd, $interval));<br />
<br />
# Fetch list of matching tickets.<br />
my $tickets = RT::Tickets->new($RT::SystemUser);<br />
$tickets->FromSQL(<br />
'Type = "reminder" AND '.<br />
'(Status = "new" OR Status = "open") AND '.<br />
'Due >= "'.$d_now.'" AND '.<br />
'Due <= "'.$d_then.'"');<br />
$tickets->OrderBy(FIELD => 'Due', ORDER => 'DESC');<br />
<br />
# Format result and group by e-mail address.<br />
my %rcpts = ();<br />
while (my $ticket = $tickets->Next) {<br />
my $out;<br />
<br />
# Format:<br />
# "Reminder: <subject_reminder> ([RT #<TicketID> <TicketSubject>])<br />
# Due: <left_hour> hours"<br />
<br />
my $t = RT::Ticket->new($RT::SystemUser);<br />
$t->Load($ticket->RefersTo->First->LocalTarget);<br />
<br />
$out = sprintf(<br />
"Reminder: %s ([RT #%s] %s )\n" .<br />
" Due: %s\n\n",<br />
$ticket->Subject, $ticket->RefersTo->First->LocalTarget, <br />
$t->Subject, loc($ticket->DueObj->AgeAsString));<br />
<br />
my $tmp_rcpt_reminder = undef;<br />
if ($ReminderOwner) {<br />
# Push reminder to array of distinct e-mail addresses for this ticket.<br />
$tmp_rcpt_reminder = $ticket->OwnerObj->EmailAddress || $CONFIG_TO_NOBODY;<br />
if (! defined($rcpts{$tmp_rcpt_reminder})) {<br />
$rcpts{$tmp_rcpt_reminder} = ""<br />
}<br />
$rcpts{ $tmp_rcpt_reminder } .= $out;<br />
}<br />
<br />
if ($TicketOwner) {<br />
# Notify ticket owner or "nobody" if ticket is unowned<br />
my $tmp_rcpt_ticket = $t->OwnerObj->EmailAddress || $CONFIG_TO_NOBODY;<br />
if (defined($CONFIG_TO_NOBODY) && $tmp_rcpt_ticket ne $tmp_rcpt_reminder) {<br />
$rcpts{$tmp_rcpt_ticket} .= $out;<br />
}<br />
}<br />
}<br />
<br />
# Iterate over each of the tickets and send the email<br />
foreach my $rcpt (keys %rcpts) {<br />
my $mail = "From: $CONFIG_FROM\n".<br />
"To: $rcpt\n".<br />
"Subject: $CONFIG_SUBJECT\n\n".<br />
$rcpts{$rcpt};<br />
if ($debug) {<br />
print $mail . "\n";<br />
} else {<br />
# FIXME: Is there no proper RT library for this?<br />
no warnings;<br />
open(MAIL, "| $RT::SendmailPath $RT::SendmailBounceArguments $RT::SendmailArguments") or die("open sendmail: $!");<br />
use warnings;<br />
print(MAIL $mail) or die("print sendmail: $!");<br />
close(MAIL) or die("close sendmail: $!");<br />
}<br />
}<br />
}<br />
<br />
GetOptions(<br />
'r|reminder' => \$ReminderOwner,<br />
't|ticket' => \$TicketOwner,<br />
'd|debug' => \$debug,<br />
'i|interval=i' => \$interval,<br />
'h|help' => sub { usage() }<br />
) or usage();<br />
<br />
# while having a main isn't required in Perl, this cleans up and organizes the flow of the code....<br />
main();<br />
</nowiki><br />
<br />
<br />
<br />
modified script to run unter debian with perl installed in /opt/perl like this:<br />
<br />
#!/opt/perl/bin/perl <br />
<br />
use lib "/opt/rt4/lib";<br />
<br />
open(MAIL, "| $RT::SendmailPath $RT::SendmailBounceArguments $RT::SendmailArguments -- $rcpt") or die("open sendmail: $!");<br />
<br />
2015-01-15 danny70447</div>83.236.138.178https://rt-wiki.bestpractical.com/index.php?title=FastCGIConfiguration&diff=1274FastCGIConfiguration2015-01-14T07:51:39Z<p>83.236.138.178: Added configuration rt 4.2.6 / nginx with documentroot /rt</p>
<hr />
<div>{{OutdatedInstallGuide}}<br />
<br />
As of the 12/19/2012, a fastcgi_server is in the libexec folder of your request_tracker path in debian. It is flawed in such a way (line 202; ''unless'' clause) that you cannot specify the socket file you want to use, it will always use the default one (specifying the pid file works though). For this very reason, the configuration values below correspond to the default ones of the fastcgi_server script.<br />
<br />
Following are the initscript and the nginx configuration necessary to use it:<br />
<br />
#!/bin/sh<br />
<br />
RTPATH="/usr/share/request-tracker3.8/"<br />
RTUSER=www-data<br />
SOCKET_FILE=/var/cache/request-tracker3.8/fastcgi.sock<br />
# if you want to use a IP connection instead, please modify the su line to start it with -p or --port option instead of the --socket one.<br />
PID_FILE=/var/cache/request-tracker3.8/fastcgi.pid<br />
<br />
case $1 in<br />
start)<br />
echo -n "Starting RT: "<br />
cd $RTPATH<br />
export FCGI_SOCKET_PATH<br />
RTUSER_GROUP="`id -gn $RTUSER 2>/dev/null`"<br />
if [ -n "$RTUSER_GROUP" ]<br />
then<br />
touch $PID_FILE $SOCKET_FILE;<br />
chown $RTUSER:$RTUSER_GROUP $PID_FILE $SOCKET_FILE<br />
fi<br />
su $RTUSER -c "libexec/fastcgi_server --pidfile=$PID_FILE --socket=$SOCKET_FILE 2> /dev/null" &<br />
echo "Started."<br />
;;<br />
<br />
stop)<br />
echo -n "Stopping RT: "<br />
PID="`cat $PID_FILE 2>/dev/null`"<br />
if [ -n "$PID" ]<br />
then<br />
kill $PID<br />
echo "Stopped."<br />
rm -f $SOCKET_FILE $PID_FILE<br />
else<br />
echo "not running."<br />
fi<br />
;;<br />
<br />
restart|force-reload)<br />
$0 stop<br />
$0 start<br />
;;<br />
<br />
*)<br />
echo "Usage: /etc/init.d/rt { stop | start | restart }"<br />
exit 1<br />
;;<br />
esac<br />
<br />
server {<br />
root /usr/share/request-tracker3.8/html;<br />
index index.html index.htm;<br />
server_name localhost debian;<br />
location / {<br />
rewrite ^/rt/(.*)$ /$1 last; # this line can be removed if the 50-debconf file is modified. (''Set($WebPath , "");'')<br />
try_files $uri $uri/ index.html;<br />
fastcgi_pass unix:/var/cache/request-tracker3.8/fastcgi.sock;<br />
include /etc/nginx/fastcgi_params;<br />
fastcgi_param SCRIPT_NAME "";<br />
fastcgi_param PATH_INFO $uri;<br />
}<br />
}<br />
<br />
<hr />'''NOTE: The information below is outdated. It is superseded by the documentation in docs/web_deployment.pod in the base RT tarball.'''<br />
<br />
<hr />[https://www.soljerome.com/blog/2011/04/22/installing-request-tracker-on-ubuntu-with-nginx/ http://soljerome.com/blog/category/linux/nginx/], 4/22/2011 blog post about setting up<br />
<br />
<ul><li>RT 3.8</li><li>nginx</li><li>MySQL</li><li>Ubuntu 10.04</li></ul><br />
-- MarkB<br />
<br />
<hr />FastCGI is a variant to run RT server. You may want to read [[ManualApacheConfig]] to decide what you want to use.<br />
<br />
Even if you decided to use [[FastCGI]] then anyway you must read [[ManualApacheConfig]]. It's sort of mandatory reading :)<br />
<br />
Configuring RT to run in [[FastCGI]] mode is dead simple. However, configuring Apache is hard. If you are considering a single web server to use with RT, you might like to consider a fast and simple solution such as lighttpd, nginx or any of the commercial and free web servers available that support [[FastCGI]].<br />
<br />
= Configuring RT 3.2 and newer to run in FastCGI mode =<br />
<br />
When installing RT, run:<br />
<br />
./configure \<br />
--with-web-user="webuser" \<br />
--with-web-group="webgroup" \<br />
--with-rt-user="webuser" \<br />
--with-rt-group="webgroup"<br />
<br />
Don't forget to include other configuration options that matter to you, like --prefix. You will still need to customize [=etc/[[RT SiteConfig|RT_SiteConfig]].pm] using [=etc/[[RT Config|RT_Config]].pm] as a base, before you run `<code>make install</code>'. If you do not have `root' access to the server you are installing to, you can use `<code>fakeroot</code>' or a similar utility to use `<code>make install</code>'.<br />
<br />
== Configuring RT to run as a dynamic FastCGI application ==<br />
<br />
A dynamic [[FastCGI]] application is one in which the application process is dynamically started and stopped by the webserver process, on demand.<br />
<br />
RT's [[FastCGI]] handler defaults to assuming it is being run as as a dynamic application. So, configure your web server to start <code>bin/mason_handler.fcgi</code> inside the RT installation directory for requests that it is to handle. The first time RT is accessed the web server will attempt to start RT.<br />
<br />
Note that this is a less-than-ideal approach, security wise, since the RT application runs under the same user-id as the web server. A better approach would be to have the web server somehow switch users when starting RT. This is commonly achieved via set-uid wrappers, which are generally hard to debug when things go wrong. Also, you will be relying on the process manager included with your web server.<br />
<br />
== Configuring RT to run as a static/external FastCGI application ==<br />
<br />
A static/external [[FastCGI]] application is one in which the application is started manually or independently of the webserver, and the webserver connects to it when needed. This makes it easy to setup user separation between the RT process and the webserver process, but you lose out on the ability for the webserver to dynamically determine how many RT processes need to be running.<br />
<br />
This is achieved by running the <code>bin/mason_handler.fcgi</code> script as the configured RT user, setting <code>FCGI_SOCKET_PATH</code> in the process environment to the location of the application socket, or a /hostname:port/ combination. This is a feature of the <code>CGI::Fast</code> perl module, so you may need to upgrade your version of that module if your version does not support this feature.<br />
<br />
Note that the [[FastCGI]] handler for RT does not currently include a process manager, instead single threading requests. This is likely to be addressed in a later version of either <code>CGI::Fast</code> or RT, but for small installations this is usually acceptable. A simple workaround is simply to start more than one RT daemon.<br />
<br />
Note that running RT in single threaded [[FastCGI]] mode is the '''only''' time that it is actually /safe/ to turn off the [=$[[WebFlushDbCacheEveryRequest]]] configuration option.<br />
<br />
You will need to set up a script that starts RT after your web server. For best results, use a [[SysV]]-style <code>/etc/init.d/</code> script. Here is an example of such a script:<br />
<br />
<nowiki>#!/bin/sh<br />
<br />
RTPATH=/path/to/rt<br />
RTUSER=rt<br />
FCGI_SOCKET_PATH=$RTPATH/var/appSocket<br />
<br />
case $1 in<br />
start)<br />
echo -n "Starting RT: mason_handler.fcgi"<br />
cd $RTPATH<br />
export FCGI_SOCKET_PATH<br />
su $RTUSER -c perl bin/mason_handler.fcgi &amp;<br />
echo<br />
;;<br />
<br />
stop)<br />
echo -n "Stopping RT: "<br />
PIDS=`ps axww | awk '/[m]ason_handler.fcgi/ { print $1}'`<br />
if [ -n "$PIDS" ]<br />
then<br />
echo -n kill -TERM $PIDS<br />
kill $PIDS<br />
echo<br />
else<br />
echo RT not running<br />
fi<br />
;;<br />
<br />
restart|force-reload)<br />
$0 stop<br />
$0 start<br />
;;<br />
<br />
*)<br />
echo "Usage: /etc/init.d/rt { stop | start | restart }"<br />
exit 1<br />
;;<br />
esac<br />
<br />
</nowiki><br />
<br />
(this example corresponds to the lighttpd setup example)<br />
<br />
= Web-server specific FastCGI notes =<br />
<br />
== Configuring RT to run with lighttpd ==<br />
<br />
A small patch needs to be applied to lighttpd 1.3.x, as its [[FastCGI]] support is slightly broken. See [[LighttpdPatch]] for the patch. Lighttpd 1.4.x does not have the problem.<br />
<br />
First, make sure that <code>"mod_fastcgi"</code> is uncommented in the <code>server.modules</code> option. Then you can use a <code>fastcgi.server</code> configuration setting similar to:<br />
<br />
fastcgi.server = ( "/rt" =&gt;<br />
( "rt" =&gt;<br />
(<br />
"socket" =&gt; "/path/to/rt/var/appSocket",<br />
"check-local" =&gt; "disable"<br />
)<br />
)<br />
)<br />
<br />
Information for lighttpd is included as it is the easiest to setup open source web server that supports [[FastCGI]] that I am aware of. However, the process is just as simple using commercial web servers, like Zeus, [[LiteSpeed]] or thttpd professional, and no doubt other web servers with [[FastCGI]] support like Roxen or Pi3web.<br />
<br />
== Configuring RT to run with Apache ==<br />
<br />
RT 3.2 includes a significant change to the [[FastCGI]] handler. It is no longer "setgid" to the RT group. Perl's setid support has been deprecated for the last several releases and a number of platforms don't bundle the "sperl" or "suidperl" executable by default. Additionally, when perl is run [[SetUID]] or [[SetGID]], the interpreter is automatically switched into /taint mode/, in which all incoming data, no matter the source is considered suspect. At first, this seems like a great idea. But perl's taint mode is a big sledgehammer used to hit small nails. Many perl libraries aren't tested in taint mode and will fail when least expected. Moving away from a [[SetGID]] [[FastCGI]] handler will enable more users to have a smoother RT experience. It does require some changes in how you set up and configure RT.<br />
<br />
Beginning with RT 3.2, you have several choices about how to configure RT to run as a [[FastCGI]]:<br />
<br />
=== 1. Install RT as the user your webserver runs as ===<br />
<br />
Pros: Very easy to configure<br />
<br />
Cons: Your webserver has access to RT's private database password<br />
<br />
==== How To ====<br />
<br />
First, determine whether you are using mod_fastcgi or mod_fcgid. I believe mod_fastcgi is older and supports older versions of Apache (i.e. Apache 1.x). The mod_fcgid is newer and is included with newer versions of Fedora Linux, etc. RT does not care which module is being used, but the configuration syntax is different for each module.<br />
<br />
If you are using mod_fastcgi (apache 1.x), you'll want to add something like the following to your httpd.conf:<br />
<br />
'''NOTE:''' Most [[FastCGI]] options are available only in apache's server config context, not in virtual host sections.<br />
<br />
<nowiki># Tell FastCGI to put its temporary files somewhere sane.<br />
FastCgiIpcDir /tmp<br />
<br />
# Number of processes is tunable, but you need at least 3 or 4<br />
FastCgiServer /opt/rt3/bin/mason_handler.fcgi -idle-timeout 120 -processes 4<br />
<br />
&lt;VirtualHost rt.example.com&gt;<br />
<br />
AddHandler fastcgi-script fcgi<br />
ScriptAlias / /opt/rt3/bin/mason_handler.fcgi/<br />
<br />
&lt;/VirtualHost&gt;<br />
<br />
</nowiki><br />
<br />
If you are using mod_fcgid, you'll want to add something like the following to your httpd.conf:<br />
<br />
&lt;VirtualHost rt.example.com&gt;<br />
<br />
ServerName rt.example.com<br />
DocumentRoot /opt/rt3/share/html<br />
<br />
AddHandler fcgid-script fcgi<br />
ScriptAlias / /opt/rt3/bin/mason_handler.fcgi/<br />
<br />
&lt;/VirtualHost&gt;<br />
<br />
=== 2. Make your webserver user a member of the "rt" group ===<br />
<br />
Pros: Easy to configure<br />
<br />
Cons: Your webserver has access to RT's private database password<br />
<br />
==== How To ====<br />
<br />
Install RT normally. Add whichever user your webserver runs as (whatever you set --with-web-user to) to the "rt" group (whatever you set --with-rt-group to) in /etc/groups.<br />
<br />
To find out what user your webserver runs as, look for the line<br />
<br />
User some-user-name<br />
<br />
in your apache httpd.conf. Common values are www, www-data, web and nobody.<br />
<br />
=== 3. Run RT using _suexec_ or a similar mechanism ===<br />
<br />
Pros: More secure<br />
<br />
Cons: Sometimes very difficult to configure<br />
<br />
==== How To ====<br />
<br />
Apache's <u>suexec</u> utility allows you run CGI programs as specific users. Because that's a relatively heavy responsibility, it's very, very conservative about what it's willing to do for you. On top of that, Apache's mod_fastcgi plugin doesn't respect all of suexec's features. While suexec is designed to execute CGI scripts in a given virtual host's DocumentRoot, It can only execute [[FastCGI]] scripts in the system's '''main''' DocumentRoot.<br />
<br />
This means you have to copy the RT [[FastCGI]] handler into your main DocumentRoot<br />
<br />
The following example VirtualHost will run RT as a [[FastCGI]] on Apache 1.3 on a Debian Linux server.<br />
<br />
<nowiki># Tell FastCGI to put its temporary files somewhere sane.<br />
FastCgiIpcDir /tmp<br />
<br />
# Tell FastCGI that it should use apache's "suexec" binary to call any FastCGI script.<br />
# This is a GLOBAL setting<br />
FastCgiWrapper /usr/lib/apache/suexec<br />
<br />
# You need to copy the rt mason_handler.fcgi into a directory inside the main server DocumentRoot<br />
# That directory must be owned by the user and group that will execute the FastCGI script<br />
# In this case, that directory is /var/www/rt<br />
<br />
# To find the local DocumentRoot, run "suexec -V" as root and look for the<br />
# -D DOC_ROOT parameter.<br />
<br />
# Apache 1.3 discards the user and group parameters on the FastCgiServer line.<br />
# Apache 2.0 requires them.<br />
FastCgiServer /var/www/rt/mason_handler.fcgi -idle-timeout 120 -user rt -group rt -processes 4<br />
<br />
&lt;VirtualHost rt.example.com&gt;<br />
<br />
DocumentRoot /opt/rt3/share/html<br />
<br />
# Set the rt user and group as the executing user for this virtual host.<br />
# For apache 2 you need<br />
# SuexecUserGroup rt rt<br />
# instead<br />
User rt<br />
Group rt<br />
<br />
AddHandler fastcgi-script fcgi<br />
ScriptAlias / /var/www/rt/mason_handler.fcgi/<br />
<br />
&lt;/VirtualHost&gt;<br />
</nowiki><br />
<br />
== Configuring RT3 to run with nginx ==<br />
<br />
The patch listed below is no longer required with the latest version of nginx ([[ManualApacheConfig|http://www.nginx.net]]),<br />
<br />
Here is a quick excerpt that shows how to run rt3 with a [[FastCGI]] socket,<br />
<br />
server {<br />
listen 80;<br />
server_name localhost;<br />
<br />
location / {<br />
root /usr/local/rt3/share/html;<br />
fastcgi_pass unix:/var/run/rt3/rt3.socket;<br />
<br />
fastcgi_param QUERY_STRING $query_string;<br />
fastcgi_param REQUEST_METHOD $request_method;<br />
fastcgi_param CONTENT_TYPE $content_type;<br />
fastcgi_param CONTENT_LENGTH $content_length;<br />
fastcgi_param PATH_INFO $fastcgi_script_name;<br />
}<br />
<br />
location /NoAuth/ {<br />
alias /usr/local/rt3/share/html/NoAuth/;<br />
}<br />
<br />
It seems that declaring SCRIPT_NAME /and/ PATH_INFO clobbers some functions so be sure to use only PATH_INFO.<br />
<br />
A small patch needs to be applied to mason_handler.fcgi to run properly under [[FastCGI]] witn nginx. Problem - nginx not send PATH_INFO to fastcgi server.<br />
<br />
First apply next patch to mason_handler.fcgi:<br />
<br />
--- ./bin/mason_handler.fcgi 2005-12-02 08:23:20.000000000 -0500<br />
+++ /usr/local/rt3/bin/mason_handler.fcgi 2005-12-02 11:54:56.000000000 -0500<br />
@@ -68,11 +68,17 @@<br />
Module::Refresh-&gt;refresh if $RT::DevelMode;<br />
RT::ConnectToDatabase();<br />
<br />
+ my $path_info = $cgi-&gt;script_name;<br />
+ $path_info =~ s/^\///;<br />
+ $cgi-&gt;path_info($path_info);<br />
+ $RT::Logger-&gt;crit($path_info);<br />
+<br />
if ( ( !$Handler-&gt;interp-&gt;comp_exists( $cgi-&gt;path_info ) )<br />
&amp;&amp; ( $Handler-&gt;interp-&gt;comp_exists( $cgi-&gt;path_info . "/index.html" ) ) ) {<br />
$cgi-&gt;path_info( $cgi-&gt;path_info . "/index.html" );<br />
}<br />
-<br />
+<br />
+ $RT::Logger-&gt;crit($cgi-&gt;path_info);<br />
eval { $Handler-&gt;handle_cgi_object($cgi); };<br />
if ($@) {<br />
$RT::Logger-&gt;crit($@);<br />
<br />
Then create config for vhost that you want run rt3 on:<br />
<br />
(example of config for fastcgi socket path - /tmp/request_tracker and rt3 installation path - /usr/local/rt3/<br />
<br />
server {<br />
listen IP_ADDRESS:PORT;<br />
server_name domain.com;<br />
<br />
location /images/ { alias /usr/local/rt3/share/html/NoAuth/images/; }<br />
<br />
location / {<br />
fastcgi_pass unix:/tmp/request_tracker;<br />
fastcgi_x_powered_by off; # default on<br />
fastcgi_param DOCUMENT_ROOT /usr/local/rt3/share/html;<br />
fastcgi_param SCRIPT_FILENAME /usr/local/rt3/share/html$fastcgi_script_name;<br />
fastcgi_param PATH_TRANSLATED /usr/local/rt3/share/html$fastcgi_script_name;<br />
fastcgi_param SCRIPT_NAME $fastcgi_script_name;<br />
fastcgi_param QUERY_STRING $query_string;<br />
fastcgi_param CONTENT_TYPE $content_type;<br />
fastcgi_param CONTENT_LENGTH $content_length;<br />
fastcgi_param REDIRECT_STATUS 200;<br />
fastcgi_param SERVER_ADDR $server_addr;<br />
fastcgi_param SERVER_PORT $server_port;<br />
fastcgi_param SERVER_PROTOCOL $server_protocol;<br />
fastcgi_param SERVER_SOFTWARE "nginx/0.3.15";<br />
fastcgi_param GATEWAY_INTERFACE "CGI/1.1";<br />
fastcgi_param SERVER_NAME $server_name;<br />
fastcgi_param SERVER_NAME $server_name;<br />
fastcgi_param REQUEST_URI $request_uri;<br />
fastcgi_param REQUEST_METHOD $request_method;<br />
fastcgi_param REMOTE_USER $remote_user;<br />
fastcgi_param REMOTE_ADDR $remote_addr;<br />
fastcgi_param REMOTE_PORT $remote_port;<br />
}<br />
<br />
location ~* .+\.(html|js|css)$ { ....same as above location.... }<br />
<br />
location /NoAuth/ { alias /usr/local/rt3/share/html/NoAuth/; }<br />
}<br />
<br />
All tested and working with rt 3.5.5<br />
<br />
Other information about nginx and FastCGI can be found on our site - [[ManualApacheConfig|http://www.nginx.info]] (now russian only, will be translated soon)<br />
<br />
PS. If you want run rt3 with prefix - domain.com/prefix/, so need to remove that prefix for path_info (in perl code of patch above)<br />
<br />
== RT 3.0 FastCGI configuration ==<br />
<br />
=== <nowiki>!FastCGI configuration for Apache 2.0</nowiki> ===<br />
<br />
(assumes FastCGI is already installed)<br />
<br />
This is roughly what I had to do to get [[RequestTracker]] working using [[FastCGI]] on [[RedHat9]] system.<br />
<br />
1. Install suidperl package, if not already installed.<br />
<br />
2. Edit first line of /opt/rt3/bin/mason_handler.fcgi to be<br />
<br />
<nowiki>#!/usr/bin/suidperl<br />
<br />
</nowiki><br />
<br />
3. Add the following to /etc/httpd/conf/httpd.conf<br />
<br />
LoadModule fastcgi_module modules/mod_fastcgi.so<br />
<br />
FastCgiIpcDir /tmp<br />
FastCgiServer /opt/rt3/bin/mason_handler.fcgi -idle-timeout 300 -processes 5<br />
&lt;VirtualHost *&gt;<br />
ServerName rt-host-name.example.org<br />
DocumentRoot /opt/rt3/share/html<br />
<br />
AddHandler fastcgi-script fcgi<br />
ScriptAlias / /opt/rt3/bin/mason_handler.fcgi/<br />
<br />
&lt;Location /&gt;<br />
AddDefaultCharset UTF-8<br />
SetHandler fastcgi-script<br />
&lt;/Location&gt;<br />
&lt;/VirtualHost&gt;<br />
<br />
=== <nowiki>!FastCGI configuration for Apache 1.3</nowiki> ===<br />
<br />
LoadModule fastcgi_module libexec/apache/mod_fastcgi.so<br />
AddModule mod_fastcgi.c<br />
<br />
Outside the vhost:<br />
<br />
FastCgiServer /opt/rt3/bin/mason_handler.fcgi -idle-timeout 300 -processes 5<br />
<br />
In your vhost:<br />
<br />
AddHandler fastcgi-script fcgi<br />
ScriptAlias / /opt/rt3/bin/mason_handler.fcgi/<br />
&lt;Location /&gt;<br />
AddDefaultCharset UTF-8<br />
SetHandler fastcgi-script<br />
&lt;/Location&gt;<br />
<br />
----<br />
<br />
Since the default Apache install includes a Directory directive blocking access to / and another to allow for the [[DocumentRoot]], you might need to add something like:<br />
<br />
&lt;Directory "/opt/rt3"&gt;<br />
Order allow,deny<br />
Allow from all<br />
&lt;/Directory&gt;<br />
<br />
To allow access to that directory, too. The symptom is getting '403 Forbidden' and a line like 'client denied by server configuration' in your Apache error log, even for index.html. -- [[HowardJones]]<br />
<br />
=== See also ===<br />
<br />
* [http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html#fastcgiserver mod_fastcgi for apache]<br />
<br />
== Running rt 4.2.6 / nginx / DocumentRoot-prefix "/rt" ==<br />
I updated to rt 4.2.6 - now, the combination of rt / nginx / fastcgi / document-root '/rt' does not work again. My goal is to map a RT with nginx to a URL like "http://www.domain.de:8080/rt" (instead of "http://www.domain.de:8080"). I played around and found the following working setup - Danny70437.<br />
/etc/nginx/conf.d/rt4.conf<br />
<br />
server {<br />
<br />
listen 8080;<br />
server_name host.domain.de;<br />
root /tmp;<br />
<br />
<nowiki>#</nowiki> /opt/rt4/etc/RT_SiteConfig.pm<br />
<nowiki>#</nowiki> Set($WebDomain, "host.domain.de");<br />
<nowiki>#</nowiki> Set($WebPort , 8080);<br />
<nowiki>#</nowiki> Set($WebPath , "/rt");<br />
<nowiki>#</nowiki> Set(@ReferrerWhitelist, qw(extranet.domain.de:443 host.domain.de:8080 ));<br />
<br />
<nowiki>#<br />
#<br />
#<br />
location / {<br />
<br />
###</nowiki> <original /etc/nginx/fastcgi_params - debian 7.x><br />
<nowiki>#</nowiki> include /etc/nginx/fastcgi_params;<br />
fastcgi_param QUERY_STRING $query_string;<br />
fastcgi_param REQUEST_METHOD $request_method;<br />
fastcgi_param CONTENT_TYPE $content_type;<br />
fastcgi_param CONTENT_LENGTH $content_length;<br />
<br />
fastcgi_param SCRIPT_FILENAME $request_filename;<br />
fastcgi_param SCRIPT_NAME $fastcgi_script_name;<br />
fastcgi_param REQUEST_URI $request_uri;<br />
fastcgi_param DOCUMENT_URI $document_uri;<br />
fastcgi_param DOCUMENT_ROOT $document_root;<br />
fastcgi_param SERVER_PROTOCOL $server_protocol;<br />
<br />
fastcgi_param GATEWAY_INTERFACE CGI/1.1;<br />
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;<br />
<br />
fastcgi_param REMOTE_ADDR $remote_addr;<br />
fastcgi_param REMOTE_PORT $remote_port;<br />
fastcgi_param SERVER_ADDR $server_addr;<br />
fastcgi_param SERVER_PORT $server_port;<br />
fastcgi_param SERVER_NAME $server_name;<br />
<br />
fastcgi_param HTTPS $https;<br />
<br />
<nowiki>#</nowiki> PHP only, required if PHP was built with --enable-force-cgi-redirect<br />
fastcgi_param REDIRECT_STATUS 200;<br />
<nowiki>###</nowiki> </original /etc/nginx/fastcgi_params><br />
<br />
fastcgi_pass unix:/opt/rt4/var/fastcgi.sock;<br />
<br />
fastcgi_param SCRIPT_NAME "/rt";<br />
fastcgi_param PATH_INFO $uri;<br />
<br />
}<br />
<br />
}<br />
<br />
<br />
rt-server.fcgi was called like this:<br />
/opt/rt4/sbin/rt-server.fcgi --pidfile=/opt/rt4/var/fastcgi.pid --socket=/opt/rt4/var/fastcgi.sock 2> /dev/null</div>83.236.138.178https://rt-wiki.bestpractical.com/index.php?title=RHEL5RepoArchive&diff=2874RHEL5RepoArchive2011-01-04T18:36:57Z<p>83.236.138.178: Added workaround for dependency issue concerning mysql-server</p>
<hr />
<div>= RT 3.8.7 module Repo for Redhat Enterprise 5.x =<br />
<br />
For updates to this guide and its packages visit: http://blog.jwhite3.com<br />
<br />
=== Prerequisites ===<br />
<br />
This document assumes you have basic system admin experience and root access to the server you are installing on. In addition you require...<br />
<br />
• Redhat Enterprise 5.x base install<br />
• yum configured to provide all ‘base’ packages available on the installation media.<br />
This repo only contains the modules that DON'T ship with the Redhat distro.<br />
<br />
----<br />
<br />
=== Repository Setup ===<br />
<br />
The archive below includes a yum repo of the hierarchical perl dependencies required by the latest version, as well a a few that must be manually installed due to RPM file conflicts in RHEL5.<br />
<br />
===== • Download this archive and extract it. =====<br />
<br />
wget http://www.jwhite3.com/files/rt/rt_3.8.7_bundle.zip<br />
unzip rt_3.8.7_bundle.zip<br />
<br />
===== • Setup a local or remote yum repository to serve these packages =====<br />
<br />
mv rt_repo /opt/<br />
mv rt.repo /etc/yum.repos.d/<br />
<br />
<br />
Contents of rt.repo :<br />
<br />
[rt-387-local]<br />
name=Request Tracker - $basearch<br />
baseurl=file:///opt/rt_repo/$basearch/<br />
enabled=1<br />
gpgcheck=0<br />
<br />
[rt-387-noarch-local]<br />
name=Request Tracker - noarch<br />
baseurl=file:///opt/rt_repo/noarch/<br />
enabled=1<br />
gpgcheck=0<br />
<br />
===== • Clean your yum cache, download new repo data, and make sure rt repo exists =====<br />
<br />
yum clean all<br />
yum list perl*<br />
<br />
----<br />
<br />
=== Example RT Installation using repository ===<br />
<br />
The rt_3.8.7_bundle.zip archive includes the following files:<br />
<br />
• instal.sh - Automated setup that will install the repository locally, install the required<br />
modules, compile the modules that cannot be install via RPM, and finally... install RT<br />
• Modules.tar.gz - Archive containing the 6 modules that must be installed manually due to RHEL5 conflicts.<br />
(CGI, Encode, File::Temp, Sys::Syslog, Test::Simple, MIME::tools)<br />
• rt-3.8.7.tar.gz - The RT system itself.<br />
• rt.repo - The YUM repository file for the local repo that will be installed<br />
• rt_repo.tar.gz - The archive of the repository itself.<br />
<br />
==== Automated Method ====<br />
<br />
chmod o+x install.sh<br />
./install.sh<br />
<br />
==== Manual Method ====<br />
<br />
tar -zxvf rt_repo.tar.gz<br />
mv rt_repo /your/repo/path/here<br />
mv rt.repo /etc/yum.repos.d/<br />
tar -zxvf rt-3.8.7.tar.gz<br />
tar -zxvf Modules.tar.gz<br />
<br />
Read through the install.sh file. Use it as a guide to install. The basic sequence is as follows...<br />
<br />
• Create RT user/group<br />
• Install RT yum repo<br />
• Install packages required to compile other modules and packages (Devel Requirements)<br />
• Build &amp; Install the 6 modules that can't be installed via RPM on RHEL5<br />
• Install the required packages for RT to be built<br />
• Build &amp; Install RT<br />
<br />
Note: Because perl-DBD-mysql-4.006-1 was installed using the approach before, I had issues to install mysql-server after. Therefore, you have to install the server without dependencies:<br />
<br />
yum install mysql-server # failed, but available in cache area<br />
rpm -i --nodeps /var/cache/yum/updates/packages/mysql-server-5.0.77-4.el5_5.4.i386.rpm<br />
<br />
<br />
<br />
Post installation instructions are the same as in previous versions. The existing guide on the RT Wiki is still valid.<br />
<br />
<br />
http://wiki.bestpractical.com/view/Rhel5InstallGuide</div>83.236.138.178https://rt-wiki.bestpractical.com/index.php?title=RHEL5RepoArchive&diff=2873RHEL5RepoArchive2011-01-04T17:21:09Z<p>83.236.138.178: Fixed issue concerning CentOS 5.5</p>
<hr />
<div>= RT 3.8.7 module Repo for Redhat Enterprise 5.x =<br />
<br />
For updates to this guide and its packages visit: http://blog.jwhite3.com<br />
<br />
=== Prerequisites ===<br />
<br />
This document assumes you have basic system admin experience and root access to the server you are installing on. In addition you require...<br />
<br />
• Redhat Enterprise 5.x base install<br />
• yum configured to provide all ‘base’ packages available on the installation media.<br />
This repo only contains the modules that DON'T ship with the Redhat distro.<br />
<br />
----<br />
<br />
=== Repository Setup ===<br />
<br />
The archive below includes a yum repo of the hierarchical perl dependencies required by the latest version, as well a a few that must be manually installed due to RPM file conflicts in RHEL5.<br />
<br />
===== • Download this archive and extract it. =====<br />
<br />
wget http://www.jwhite3.com/files/rt/rt_3.8.7_bundle.zip<br />
unzip rt_3.8.7_bundle.zip<br />
<br />
===== • Setup a local or remote yum repository to serve these packages =====<br />
<br />
mv rt_repo /opt/<br />
mv rt.repo /etc/yum.repos.d/<br />
<br />
<br />
Contents of rt.repo :<br />
<br />
[rt-387-local]<br />
name=Request Tracker - $basearch<br />
baseurl=file:///opt/rt_repo/$basearch/<br />
enabled=1<br />
gpgcheck=0<br />
<br />
[rt-387-noarch-local]<br />
name=Request Tracker - noarch<br />
baseurl=file:///opt/rt_repo/noarch/<br />
enabled=1<br />
gpgcheck=0<br />
<br />
===== • Clean your yum cache, download new repo data, and make sure rt repo exists =====<br />
<br />
yum clean all<br />
yum list perl*<br />
<br />
----<br />
<br />
=== Example RT Installation using repository ===<br />
<br />
The rt_3.8.7_bundle.zip archive includes the following files:<br />
<br />
• instal.sh - Automated setup that will install the repository locally, install the required<br />
modules, compile the modules that cannot be install via RPM, and finally... install RT<br />
• Modules.tar.gz - Archive containing the 6 modules that must be installed manually due to RHEL5 conflicts.<br />
(CGI, Encode, File::Temp, Sys::Syslog, Test::Simple, MIME::tools)<br />
• rt-3.8.7.tar.gz - The RT system itself.<br />
• rt.repo - The YUM repository file for the local repo that will be installed<br />
• rt_repo.tar.gz - The archive of the repository itself.<br />
<br />
<br />
==== Automated Method ====<br />
<br />
chmod o+x install.sh<br />
./install.sh<br />
<br />
<br />
==== Manual Method ====<br />
<br />
tar -zxvf rt_repo.tar.gz<br />
mv rt_repo /your/repo/path/here<br />
mv rt.repo /etc/yum.repos.d/<br />
tar -zxvf rt-3.8.7.tar.gz<br />
tar -zxvf Modules.tar.gz<br />
<br />
<br />
<br />
Read through the install.sh file. Use it as a guide to install. The basic sequence is as follows...<br />
<br />
• Create RT user/group<br />
• Install RT yum repo<br />
• Install packages required to compile other modules and packages (Devel Requirements)<br />
• Build &amp; Install the 6 modules that can't be installed via RPM on RHEL5<br />
• Install the required packages for RT to be built<br />
• Build &amp; Install RT<br />
<br />
<br />
Post installation instructions are the same as in previous versions. The existing guide on the RT Wiki is still valid.<br />
<br />
http://wiki.bestpractical.com/view/Rhel5InstallGuide</div>83.236.138.178