Este artículo demuestra cómo instalar y configurar una instancia de OTRS Community Edition, el popular sistema de gestión de tickets open source, en Debian y derivados desde sus fuentes, utilizando PostgreSQL como motor de bases de datos.

OTRS es un sistema de solicitud y gestión de tickets de código abierto desarrollado en Perl. Se utiliza para asignar identificadores únicos (popularmente conocidos como tickets) a tareas, solicitudes de servicio o información, etc. con el objetivo de facilitar el seguimiento y control de las mismas, así como toda interacción con los clientes o usuarios (solicitantes). Es distribuido con licencia GNU Affero General Public License y certificado como ITIL V3.



OTRS (Open-source Ticket Request System) está desarrollado completamente en Perl y JavaScript, basado en Apache como servidor Web, y soporta bases de datos MySQL, Oracle, PostgreSQL y MSSQL. Este artículo cubre la instalación de OTRS Community Edition (versión 6, pues la 7 posee una licencia propietaria) desde sus fuentes en Debian, utilizando una base de datos Postgres.

Requisitos previos

Comprobar los requisitos mínimos e indispensables (Perl y PostgreSQL):

root@otrs:~# perl --version

This is perl 5, version 28, subversion 1 (v5.28.1) built for x86_64-linux-gnu-thread-multi
(with 61 registered patches, see perl -V for more detail)

Copyright 1987-2018, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

root@otrs:~# psql --version
psql (PostgreSQL) 11.5

Instalar el servidor Web Apache desde paquete de Debian:

root@otrs:~# apt-get install apache2

Instalación de OTRS

Descargar la última versión comunitaria disponible desde el sitio de descargas: Download ((OTRS)) Community Edition.

Extraer el paquete en un directorio de instalación de software local (como /usr/local u /opt):

root@otrs:/usr/local/src/otrs# tar xzf otrs-6.0.22.tar.gz 
root@otrs:/usr/local/src/otrs# mv otrs-6.0.22 /usr/local/
root@otrs:/usr/local/src/otrs# cd /usr/local/
root@otrs:/usr/local# ln -s otrs-6.0.22/ otrs

Correr el script de verificación de dependencias:

root@otrs:/usr/local# perl otrs/bin/otrs.CheckModules.pl

Este script verifica que se cumplan los requisitos básicos para el funcionamiento de OTRS.

Instalar todas las dependencias faltantes (es posible instalarlas desde paquete de Debian, o desde el gestor de paquetes Perl CPAN) de acuerdo a la salida del script anterior:

root@otrs:/usr/local# apt-get install -y libarchive-zip-perl libcrypt-eksblowfish-perl libcrypt-ssleay-perl libdatetime-perl libtimedate-perl libdbi-perl libdbd-pg-perl libio-socket-ssl-perl libjson-xs-perl libapache2-mod-perl2 libnet-dns-perl libnet-ldap-perl libtemplate-perl libtext-csv-xs-perl libxml-libxml-perl libxml-parser-perl libyaml-libyaml-perl 

Tener en cuenta que muchas de estas dependencias son opcionales y dependen de cada instalación.

Las librerías necesarias para conectarse a la base de datos dependen del motor a utilizar (MySQL, MSSQL, Oracle o PostrgeSQL). En este caso se utiliza una base de datos Postgres, por ende se instala el paquete libdbd-pg-perl.

Volver a correr el script y verificar que no quede nada en rojo (dependencias necesarias faltantes):

root@otrs:/usr/local# perl otrs/bin/otrs.CheckModules.pl 
  o Apache::DBI......................ok (v1.12)
  o Apache2::Reload..................ok (v0.13)
  o Archive::Tar.....................ok (v2.30)
  o Archive::Zip.....................ok (v1.64)
  o Crypt::Eksblowfish::Bcrypt.......ok (v0.009)
  o Crypt::SSLeay....................ok (v0.73_06)
  o Date::Format.....................ok (v2.24)
  o DateTime.........................ok (v1.50)
  o DBI..............................ok (v1.642)
  o DBD::mysql.......................Not installed! To install, you can use: 'apt-get install -y libdbd-mysql-perl'. (optional - Required to connect to a MySQL database.)
  o DBD::ODBC........................Not installed! To install, you can use: 'apt-get install -y libdbd-odbc-perl'. (optional - Required to connect to a MS-SQL database.)
  o DBD::Oracle......................Not installed! (optional - Required to connect to a Oracle database.)
  o DBD::Pg..........................ok (v3.7.4)
  o Digest::SHA......................ok (v6.01)
  o Encode::HanExtra.................Not installed! To install, you can use: 'apt-get install -y libencode-hanextra-perl'. (optional - Required to handle mails with several Chinese character sets.)
  o IO::Socket::SSL..................ok (v2.060)
    Please consider updating to version 2.066 or higher: This version fixes email sending (bug#14357).
  o JSON::XS.........................ok (v3.04)
  o List::Util::XS...................ok (v1.50)
  o LWP::UserAgent...................ok (v6.26)
  o Mail::IMAPClient.................Not installed! To install, you can use: 'apt-get install -y libmail-imapclient-perl'. (optional - Required for IMAP TLS connections.)
    o IO::Socket::SSL................ok (v2.060)
    Please consider updating to version 2.066 or higher: This version fixes email sending (bug#14357).
    o Authen::SASL...................Not installed! To install, you can use: 'apt-get install -y libauthen-sasl-perl'. (optional - Required for MD5 authentication mechanisms in IMAP connections.)
    o Authen::NTLM...................Not installed! To install, you can use: 'apt-get install -y libauthen-ntlm-perl'. (optional - Required for NTLM authentication mechanism in IMAP connections.)
  o ModPerl::Util....................ok (v2.000010)
  o Net::DNS.........................ok (v1.19)
  o Net::LDAP........................ok (v0.65)
  o Net::SMTP........................ok (v3.11)
  o Template.........................ok (v2.27)
  o Template::Stash::XS..............ok (undef)
  o Text::CSV_XS.....................ok (v1.38)
  o Time::HiRes......................ok (v1.9759)
  o XML::LibXML......................ok (v2.0134)
  o XML::LibXSLT.....................Not installed! To install, you can use: 'apt-get install -y libxml-libxslt-perl'. (optional - Required for Generic Interface XSLT mapping module.)
  o XML::Parser......................ok (v2.44)
  o YAML::XS.........................ok (v0.76)

Las dependencias si cumplir que queden en color amarillo son opcionales. Por ejemplo en esta instalación no se cumplen con los requisitos para correr con un motor de bases de datos MySQL, MSSQL u Oracle. Esto es correcto pues no serán utilizados.

Crear un usuario para OTRS y agregarlo al grupo "www-data":

root@otrs:/usr/local# useradd -d /usr/local/otrs -c "Usuario OTRS" -s /bin/bash otrs
root@otrs:/usr/local# usermod -G www-data otrs

Crear el archivo de configuración:

root@otrs:/usr/local# cp otrs/Kernel/Config.pm.dist otrs/Kernel/Config.pm

Todos los archivos de configuración de OTRS se almacenan en el directorio Kernel/ y sus subdirectorios. No hay necesidad de editar manualmente ningún otro archivo más allá de Kernel/Config.pm, debido a que el resto de los archivos serán modificados cuando el sistema se actualice desde el panel de control.

Por lo tanto, sólo es necesario cambiar el motor de bases de datos MySQL por PostrgeSQL:

root@otrs:/usr/local/otrs# nano otrs/Kernel/Config.pm

Comentar la línea que incluye MySQL y descomentar la que incluye a Postgres. Debe quedar como se observa a continuación:

    # The database DSN for MySQL ==> more: "perldoc DBD::mysql"
#    $Self->{DatabaseDSN} = "DBI:mysql:database=$Self->{Database};host=$Self->{DatabaseHost};";

    # The database DSN for PostgreSQL ==> more: "perldoc DBD::Pg"
    # if you want to use a local socket connection
    $Self->{DatabaseDSN} = "DBI:Pg:dbname=$Self->{Database};";

Verificar que todos los módulos necesarios estén disponibles corriendo el script Perl inicial desde línea de comandos:

root@otrs:~# perl -cw /usr/local/otrs/bin/cgi-bin/index.pl 
/usr/local/otrs/bin/cgi-bin/index.pl syntax OK

Configuración de Apache

Configurar el sitio con soporte para SSL:

root@otrs:~# cd /etc/apache2/
root@otrs:/etc/apache2# nano sites-available/default-ssl.conf

Definir las rutas a los certificados SSL/TLS y guardar los cambios.

Luego habilitar el sitio de Apache de OTRS:

root@otrs:/etc/apache2# ln -s /usr/local/otrs/scripts/apache2-httpd.include.conf /etc/apache2/sites-enabled/otrs.conf

Y habilitar el sitio seguro recién configurado:

root@otrs:/etc/apache2# a2ensite default-ssl.conf 
Enabling site default-ssl.
To activate the new configuration, you need to run:
  service apache2 reload

Por supuesto debe estar habilitado el módulo ssl que da soporte a SSL/TLS:

root@otrs:/etc/apache2# a2enmod ssl
Considering dependency setenvif for ssl:
Module setenvif already enabled
Considering dependency mime for ssl:
Module mime already enabled
Considering dependency socache_shmcb for ssl:
Enabling module socache_shmcb.
Enabling module ssl.
See /usr/share/doc/apache2/README.Debian.gz on how to configure SSL and create self-signed certificates.
To activate the new configuration, you need to run:
  service apache2 restart

Habilitar y verificar los módulos de Perl necesarios:

root@otrs:~# a2enmod perl
Module perl already enabled
root@otrs:~# a2enmod version
ERROR: Module version does not exist!
root@otrs:~# apachectl -M | grep version
 version_module (static)
root@otrs:~# a2enmod deflate
Considering dependency filter for deflate:
Module filter already enabled
Module deflate already enabled
root@otrs:~# a2enmod headers
Enabling module headers.
To activate the new configuration, you need to run:
  service apache2 restart

En Debian y derivados, el módulo "version" está compilado estáticamente, con lo cual no es necesario habilitarlo.

La configuración del sitio de Apache de OTRS contiene rutas estáticas hardcodeadas apuntando a /opt. Pésima práctica ya que no utiliza una variable global donde definir la raíz de la instalación y obliga a instalar en /opt (cosa que no es de mi preferencia debido al esquema de particionado utilizado en mis servidores). Esto afecta gravemente al mantenibilidad de sitio, entre otras cualidades del software. Para no tener que recorrer archivos modificando todas estas rutas estáticas, resolverlo de forma elegante con un simple enlace simbólico en /opt:

root@otrs:~# ln -s /usr/local/otrs /opt/otrs

Finalmente reiniciar Apache:

root@otrs:/usr/local/otrs# service apache2 restart
[ ok ] Restarting Apache httpd web server: apache2.

En caso de errores de sintaxis o rutas al iniciar el servicio, revisar el log de errores de Apache ubicado en /var/log/apache2/error.log.

Configuración de permisos sobre archivos

A continuación, cambiar el ownership de la instalación al usurio "otrs" creado anteriormente. Para ello se dispone de un script Perl que setea los permisos necesarios para el correcto funcionamiento de la instalación:

root@otrs:/usr/local/otrs# cd /usr/local/otrs
root@otrs:/usr/local/otrs# bin/otrs.SetPermissions.pl 
Setting permissions on /usr/local/otrs-6.0.22

Instalación de la base de datos

Si no se dispone de un servidor de bases de datos PostgreSQL, es posible instalar uno y luego crear una instancia, base de datos y usuario de acuerdo a las guías en los siguientes artículos:

  1. Compilar e instalar PostgreSQL desde los fuentes
  2. Cómo crear una instancia de PostgreSQL
  3. Crear una base de datos y usuario en un servidor PostgreSQL

Iniciar el instalador Web de OTRS accediendo a la URL https://localhost/otrs/installer.pl (reemplazar "localhost" por el nombre de host del servidor) y seguir el "paso a paso":

Para comenzar, aceptar la licencia:

En el siguiente paso, seleccionar el motor de bases de datos PostgreSQL

Especificar el nombre de usuario, contraseña, host y base de datos:

Verificar el acceso:

Presionar siguiente para comenzar la instalación de la base de datos:

Este proceso crea los esquemas y tablas necesarios.

Al finalizar, configurar el sitio (nombre de host, correo del administrador, mecanismo de log e idioma):

Omitir la configuración de correo por el momento:

Con esto finaliza la instalación y se crea una contraseña aleatoria para el superusuario de la instancia:

Ahora es posible ingresar por primera vez al sitio:

Panel principal de OTRS:

Demonio de OTRS

El demonio de OTRS se encarga de manejar las tareas recurrentes asincrónicas. Este demonio es requerido para el correcto funcionamiento de OTRS. Antes de comenzar a utilizar OTRS, iniciar el demonio:

root@otrs:~# su - otrs
$ /usr/local/otrs/bin/otrs.Daemon.pl start

Manage the OTRS daemon process.

Daemon started

Luego crear un script de inicio para que el demonio se lance automáticamente al iniciar el sistema:

root@otrs:~# nano /etc/init.d/otrs

Ejemplo de script (personalizar las variables OTRSUSER y OTRSCTL según corresponda):

#!/bin/bash
### BEGIN INIT INFO
# Provides:          otrs
# Required-Start:    $local_fs $network $syslog $named
# Required-Stop:     $local_fs $network $syslog $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: OTRS
# Description:       Demonio de OTRS
### END INIT INFO

. /etc/profile

if [ $# -eq 0 ] ; then
   echo "Se debe indicar el comando: start|stop|status"
   exit 1
fi

OTRSUSER="otrs"
OTRSCTL="/usr/local/otrs/bin/otrs.Daemon.pl"

su - $OTRSUSER -c "$OTRSCTL $1"

Instalar el script:

root@otrs:~# update-rc.d otrs defaults

Iniciar el demonio por primera vez:

Para que el demonio no arroje mensajes por salida estándar, es necesario habilitar la opción "Daemon::Log::STDOUT" desde el panel de administración de OTRS:

Cada vez que se modifica una configuración es necesario hacer el deploy para que sea efectivamente aplicada:

Al detener e iniciar nuevamente, ya no se arrojan mensajes por salida estándar (van a archivo de log en el directorio /usr/local/otrs/var/log/Daemon/):

Cronjobs

Finalmente, configurar los cronjobs necesarios para OTRS:

root@otrs:/usr/local/otrs# cd var/cron/
root@otrs:/usr/local/otrs/var/cron# cp aaa_base.dist aaa_base
root@otrs:/usr/local/otrs/var/cron# cp otrs_daemon.dist otrs_daemon
root@otrs:/usr/local/otrs/var/cron# chown otrs:www-data *

Pasar al usuario "otrs" e instalar los cronjobs:

root@otrs:/usr/local/otrs/var/cron# su - otrs
otrs@otrs:~$ otrs@otrs:~$ crontab -l
no crontab for otrs

Se observa que al momento no hay cronjobs para el usuario "otrs". El comando "start" del script Cron.sh se encarga de instalarlos:

otrs@otrs:~$ /usr/local/otrs/bin/Cron.sh start
(using /usr/local/otrs) done
otrs@otrs:~$ crontab -l
# --
# Copyright (C) 2001-2019 OTRS AG, https://otrs.com/
# --
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
# the enclosed file COPYING for license information (GPL). If you
# did not receive this file, see https://www.gnu.org/licenses/gpl-3.0.txt.
# --

# Who gets the cron emails?
MAILTO="root@localhost"
# --
# Copyright (C) 2001-2019 OTRS AG, https://otrs.com/
# --
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
# the enclosed file COPYING for license information (GPL). If you
# did not receive this file, see https://www.gnu.org/licenses/gpl-3.0.txt.
# --

# check OTRS daemon status
*/5 * * * *    $HOME/bin/otrs.Daemon.pl start >> /dev/null

Para continuar, crear agentes y comenzar a utilizar la aplicación. Se recomienda revisar la guía de performance tunning y el manual de administrador de OTRS en las referencias a continuación.

Referencias


Tal vez pueda interesarte


Compartí este artículo