вторник, 9 декабря 2008 г.

Установка Request Tracker 3.8.1

ЖУРНАЛ, установка RT 3.8.1

CentOS 5.2 минимальная установка
http://www.ptitov.net/2008/07/request-tracker-installation-o.html

Обновляемся после установки

wget -c http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
rpm --import RPM-GPG-KEY.dag.txt
wget -c http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
yum install rpmforge-release-0.3.6-1.el5.rf.i386.rpm
yum install yum-priorities

add line to [base], [updates], [addons]
priority=1
add line to [extras], [centosplus]
priority=2
add line to [rpmforge]
priority=12

Доставляем пакеты:
httpd \
httpd-devel \
apr-devel \
mysql \
mysql-devel \
mod_perl \
freetype-devel \
gd-devel \
libjpeg-devel \
libpng-devel \
libidn-devel \
gnutls-devel \
gcc \
perl-Apache-DBI \
perl-Apache-Session \
perl-Archive-Tar \
perl-CSS-Squish \
perl-Calendar-Simple \
perl-DBD-mysql \
perl-DBIx-SearchBuilder \
perl-DateTime-Locale \
perl-FCGI \
perl-File-ShareDir \
perl-HTML-Format \
perl-HTML-Scrubber \
perl-HTTP-Server-Simple \
perl-HTTP-Server-Simple-Mason \
perl-IO-Socket-INET6 \
perl-Locale-Maketext-Fuzzy \
perl-Locale-Maketext-Lexicon \
perl-Log-Dispatch \
perl-MIME-Types \
perl-Mail-GnuPG \
perl-Module-Refresh \
perl-Module-Versions-Report \
perl-Net-DNS \
perl-Net-Server \
perl-PerlIO-eol \
perl-Regexp-Common \
perl-TermReadKey \
perl-Test-Expect \
perl-Test-Inline \
perl-Test-WWW-Mechanize \
perl-Text-Quoted \
perl-Text-Template \
perl-Text-WikiFormat \
perl-Text-Wrapper \
perl-Time-modules \
perl-Tree-Simple \
perl-XML-RSS \
perl-XML-Simple \
perl-Net-SNMP \
perl-LDAP \
perl-GraphViz

Настраиваем cpan
perl -MCPAN -e shell

cpan -i Net::LDAP

useradd rt3 -d /opt/rt3
Добавим пользователя apache а группу rt3

./configure --with-web-handler=modperl2 --with-db-type=mysql

make testdeps
make fixdeps
make testdeps
make install
Если обновляемся то:
make upgrade

Ставим msmtp:
http://msmtp.sourceforge.net/
configure --prefix=/opt/msmtp
make
make install

/opt/rt3/etc/msmtp_wrapper.conf
account default
host smtp.gmail.com
port 587
auth on
user ithelp@myreis.ru
password ***
tls on
tls_trust_file /etc/pki/tls/certs/ca-bundle.crt
logfile /opt/rt3/var/log/msmtp.log
from ithelp@myreis.ru

/opt/rt3/etc/msmtp_wrapper
#!/bin/bash
/opt/msmtp/bin/msmtp -t -C /opt/rt3/etc/msmtp_wrapper.conf
/usr/bin/logger -t RTmailer -p syslog.info -- CALL /opt/msmtp/bin/msmtp -nt "$@" RETURNED $?

Добавляем плагин для аутентификации в LDAP:


httpd.conf:
KeepAlive On
NameVirtualHost *:80

ServerName vm-rt.alliancetravel.ru
ServerAlias vm-rt


Создаем конфиг в апаче:

ServerName rt.alliancetravel.ru
ServerAlias rt
Redirect permanent / https://rt.alliancetravel.ru/



ServerName rt.alliancetravel.ru
ServerAlias rt
ServerAdmin it@myreis.ru
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCertificateFile /etc/pki/tls/certs/rt.crt

DocumentRoot /opt/rt3/share/html

AddDefaultCharset UTF-8
PerlRequire /opt/rt3/bin/webmux.pl


Order allow,deny
Allow from all
SetHandler perl-script
PerlResponseHandler RT::Mason


SSLEngine on



Правим файл RT_SiteConfig.pm
Set(@Plugins, qw(RT::Authen::ExternalAuth), qw(RT::FM));
Set( $rtname, 'myreis.ru');
Set($WebBaseURL , "http://rt.alliancetravel.ru");
Set( $WebPath , "");

Set($DataBaseType , 'mysql');
Set($DatabaseHost , 'mysql.alliancetravel.ru');
Set($DatabaseRTHost , 'vm-rt.alliancetravel.ru');
Set($DatabaseName , 'rt38');
Set($DatabaseUser, 'rt_user');
Set($DatabasePassword , '***');
Set($Timezone, 'Europe/Moscow');

Set($SendmailPath , "/opt/rt3/etc/msmtp_wrapper");
Set($CorrespondAddress, 'rt@myreis.ru');
Set($CommentAddress, 'rt-comment@myreis.ru');
Set($RTAddressRegexp, '^rt(-comment)?\@(myreis|moyreys|moireis.ru|moyreis.ru|alliance-travel)\.(ru)$');
Set($OwnerEmail, 'it@myreis.ru');

Set($AutoCreate, {Privileged => 1});
Set($LdapExternalAuth, 1);
Set($LdapExternalInfo, 1);
Set($LdapAutoCreateNonLdapUsers, 1);

Set($LdapRTAttrMatchList, ['Name']);
Set($LdapEmailAttrMatchList, ['mail']);
Set($LdapServer, 'ldap.alliancetravel.ru:3268');
Set($LdapUser, 'cn=ldapsearch,ou=_specialAccounts,dc=alliancetravel,dc=ru');
Set($LdapPass, '***');
Set($LdapBase, 'dc=alliancetravel,dc=ru');
Set($LdapUidAttr, 'sAMAccountName');
Set($LdapFilter, '(&(objectclass=user)(objectclass=person))');
Set($LdapSSLVersion, 3);

Set($ExternalAuthPriority, ['My_LDAP']);
Set($ExternalInfoPriority, ['My_LDAP']);

Set($ExternalSettings, {

'My_LDAP' => {
'type' => 'ldap',
'auth' => 1,
'info' => 1,
'server' => 'ldap.alliancetravel.ru',
'user' => 'cn=ldapsearch,ou=_specialAccounts,dc=alliancetravel,dc=ru',
'pass' => 'UcWelAlRaHutatcitu',
'base' => 'dc=alliancetravel,dc=ru',
'filter' => '(&(objectclass=user)(objectclass=person))',
'd_filter' => '(userAccountControl=66050)',
'tls' => 0,
'net_ldap_args' => [ version => 3 ],
# 'group' => 'CN=DL_RT_Users,OU=_Resourses,DC=alliancetravel,DC=ru',
# 'group_attr' => 'member',
'attr_match_list' => ['Name', 'EmailAddress'],
'attr_map' => { 'Name' => 'sAMAccountName',
'EmailAddress' => 'mail',
'Organization' => 'company',
'RealName' => 'cn',
'ExternalAuthId' => 'sAMAccountName',
'Gecos' => 'sAMAccountName',
'HomePhone' => 'homePhone',
'WorkPhone' => 'telephoneNumber',
'MobilePhone' => 'mobile',
'PagerPhone' => 'pager',
'Address1' => 'streetAddress',
'City' => 'l',
'State' => 'st',
'Zip' => 'postalCode',
'Country' => 'co'
}
}
}
);

1;

RTFM
Ставим RTFM

/opt/rt3/sbin/rt-setup-database --dba root --dba-password uekmrf --action init
/opt/rt3/sbin/rt-setup-database --action schema --dba rt_user --dba-password Nekgeudas --datadir /opt/rt3/local/plugins/RT-FM/etc


/opt/rt3/.fetchmailrc:
poll pop.gmail.com
proto pop3
port 995
username rt@myreis.ru
password 'Nekgeudas'
mda "/opt/rt3/bin/rt-mailgate --url http://rt.alliancetravel.ru --action correspond --queue General"
ssl
username rt-comment@myreis.ru
password 'Nekgeudas'
mda "/opt/rt3/bin/rt-mailgate --url http://rt.alliancetravel.ru --action comment --queue General"
ssl
username ithelp@myreis.ru
password 'Nekgeudas'
mda "/opt/rt3/bin/rt-mailgate --url http://rt.alliancetravel.ru --action correspond --queue ithelpdesk"
ssl
username ithelp-comments@myreis.ru
password 'Nekgeudas'
mda "/opt/rt3/bin/rt-mailgate --url http://rt.alliancetravel.ru --action comment --queue ithelpdesk"
ssl
chown rt /opt/rt3 /opt/rt3/.fetchmailrc
chmod 600 /opt/rt3/.fetchmailrc

su rt3 -c "crontab -e":
*/1 * * * * /usr/bin/fetchmail -s



Templates

Autoreply

Subject: АвтоОтвет: {$Ticket->Subject}

Здравствуйте.
Нет необходимости отвечать на это письмо прямо сейчас.
Это сообщение создано автоматически системой регистрации заявок
Вашей заявке:
"{$Ticket->Subject()}",
присвоен номер:
[{$Ticket->QueueObj->SubjectTag || $rtname} #{$Ticket->id()}].

Если вы хотите сообщить дополнительную информацию по существующей проблемме,
пожалуйста, добавьте эту строку:

[{$Ticket->QueueObj->SubjectTag || $rtname} #{$Ticket->id}]

в тему вашего письма. Также, можно просто ответить на это письмо.

Большое спасибо.
{$Ticket->QueueObj->CorrespondAddress()}

Краткая информация о заявке представлена ниже.
-------------------------------------------------------------------------
{$Transaction->Content()}
Transaction

RT-Attach-Message: yes


{$Transaction->CreatedAsString}: Заявка {$Ticket->id} в работе.
Действие: {$Transaction->Description}
Очередь: {$Ticket->QueueObj->Name}
Тема: {$Transaction->Subject || $Ticket->Subject || "(Нет темы)"}
Ответственный: {$Ticket->OwnerObj->Name}
Заявитель: {$Ticket->RequestorAddresses}
Статус: {$Ticket->Status}
Ticket Config->Get('WebURL')}Ticket/Display.html?id={$Ticket->id} >


{$Transaction->Content()}
Admin Comment

Subject: [Comment] {my $s=($Transaction->Subject||$Ticket->Subject); $s =~ s/\[Comment\]//g; $s =~ s/^Re//i; $s;}


{RT->Config->Get('WebURL')}Ticket/Display.html?id={$Ticket->id}
Это коментарий, он не будет выслан запросившим:

{$Transaction->Content()}
Status Change

Subject: Статус изменен: {$Transaction->NewValue}


{RT->Config->Get('WebURL')}Ticket/Display.html?id={$Ticket->id}

{$Transaction->Content()}
Resolved

Subject: Готово: {$Ticket->Subject}

Проблема с которой вы столкнулись решена,
если есть новые замечания по этой проблеме, пожалуйста,
Ответьте на это письмо.

-------------------------------------------------------------------------
{$Ticket->Subject}

Forward


Переадресация #{ $Transaction->id } заявки #{ $Ticket->id }

Error: Missing dashboard

Subject: [{RT->Config->Get('rtname')}] Не найдена инормационная панель!

Здравствуйте,

Вы подписались на инормационную панель, которой не существует. Скорее всего, инормационная панель была удалена.

Система удалит эту подписку за не надобностью. Ниже представлена инормация о вашей подписке:

Инфо панель: { $SubscriptionObj->SubValue('DashboardId') }
Частота: { $SubscriptionObj->SubValue('Frequency') }
Час: { $SubscriptionObj->SubValue('Hour') }
{
$SubscriptionObj->SubValue('Frequency') eq 'weekly'
? "Day of week: " . $SubscriptionObj->SubValue('Dow')
: $SubscriptionObj->SubValue('Frequency') eq 'monthly'
? "Day of month: " . $SubscriptionObj->SubValue('Dom')
: ''
}

Создаем Пользователей, Группы, Очереди ...

Создаем группу: Administrators, ithelpdesk, ithelpdeskManagers, RTFMAuthors, RTFMAdmins
Раздаем членство в группах:
EveryOne
Administrators
ithelpdesk
ithelpdeskManagers
RTFMAuthors
RTFMAdmins

Создаем Очередь
Queue Name: ithelpdesk
Description: Заявки в ИТ отдел
Subject Tag: ИТ отдел
Reply Address: ithelp@myreis.ru
Comment Address: ithelp-comments@myreis.ru

Раздаем права:
Global:
Для группы EveryOne: ModifySelf
Для группы Administrators: SuperUser

Очередь ithelpdesk
группе EveryOne: CreateTicket, ReplyToTicket
группе ithelpdesk: DeleteTicket, ModifyTicket, OwnTicket, SeeQueue, ShowTicket, TakeTicket, Watch
группе ithelpdeskManagers: AdminQueue, StealTicket, WatchAsAdminCce
Для очереди ithelpdesk назначаем Наблюдателей CC: группа ithelpdesk, Admin CC: группа ithelpdeskManagers

RTFM
Даем группе Everyone права: SeeClass, ShowArticle
Даем все права группе RTFMAdmins
Даем группе RTFMAuthors права: CreateArticle, ModifyArticle, ModifyArticleTopics, ShowArticleHistory

среда, 13 августа 2008 г.

DFL-800 Сервер на двух каналах

Например PPTP сервер на двух каналах:
DFL-800. Как сделать PPTP server на двух каналах сразу?
А вот как:
1. Создаем два сервера PPTP
Сначала проверяем что работает 1, потом меням маршрут по умолчанию на другого провайдера и проверяем что работает второй.
2. Создаем маршруты по умолчанию в таблицу main:

Type: Route
Interface: wan1
Network: allnets
Gateway: wan1_gw
Local IP address:
Metric: 90
Monitor tis route: Yes
Comment:

Type: Route
Interface: wan2
Network: allnets
Gateway: wan2_gw
Local IP address:
Metric: 100
Monitor tis route: Yes
Comment:

Type:
Interface:
Network:
Gateway:
Local IP address:
Metric:
Monitor tis route:
Comment:

3. Создаем две даблицы маршрутизации alt1 и alt2
Создаем в каждой под два маршрута:
Таблица alt1:
Type: Route
Interface: wan1
Network: wan1net
Gateway:
Local IP address: wan1_ip
Metric: 100
Monitor tis route: No
Comment:

Type: Route
Interface: wan1
Network: allnets
Gateway: wan1_gw
Local IP address: wan1_ip
Metric: 100
Monitor tis route: No
Comment:

Таблица alt2:
Type: Route
Interface: wan2
Network: wan2net
Gateway:
Local IP address: wan2_ip
Metric: 100
Monitor tis route: No
Comment:

Type: Route
Interface: wan2
Network: allnets
Gateway: wan2_gw
Local IP address: wan2_ip
Metric: 100
Monitor tis route: No
Comment:

Создаем правила в RoutingRules:
#: 1
Name: to_wan1net
Source interface: wan1
Source network: all-nets
Destination interface: wan1
Destination network: wan1net
Service: all
Comment:
Forward Table: main
Return Table: alt1

#: 2
Name: to_wan2net
Source interface: wan2
Source network: all-nets
Destination interface: wan2
Destination network: wan2net
Service: all
Comment:
Forward Table: main
Return Table: alt2

#: 3
Name: default_via_wan1
Source interface: wan1
Source network: all-nets
Destination interface: any
Destination network: all-nets
Service: all
Comment:
Forward Table: main
Return Table: alt1

#: 4
Name: default_via_wan2
Source interface: wan2
Source network: all-nets
Destination interface: any
Destination network: all-nets
Service: all
Comment:
Forward Table: main
Return Table: alt2


Всё, в результате, все пакеты которые приходят на интерфейс WAN1 будут уходить через WAN1 тоже самое и для интерфейса WAN2. Также, если пакет идет в сеть одного провайдера, то его отправят через интерфейс подключеный к этому провайдеру.