Blog

OTRS mit Apache und mod_perl unter Perl 5.22

15.05.2016 // Renée Bäcker

Manchmal ist es echt zum Verzweifeln: Man will mal schnell eine VM aufsetzen um etwas auszuprobieren, nimmt die neuesten Pakete, installiert alles notwendige für OTRS und nichts funktioniert.

Das hat man doch schon tausendmal gemacht, immer hat das mit der OTRS-Installation funktioniert nur diesesmal nicht. Im Browser taucht nur ein Internal Server Error auf und in den Fehlerlogs ist nichts zu finden.

Aber da war doch was... Richtig, mod_perl funktioniert unter Perl >= 5.22 nicht (siehe den entsprechenden Bugreport) und Ubuntu 16.04 liefert ein Perl 5.22.1 aus. Bisher wurde XUbuntu 15.04 eingesetzt, da war es noch Perl 5.20. Also muss eine andere Lösung her. Es gibt hier im Großen und Ganzen drei Möglichkeiten:

  1. mod_perl mit einem anderen Perl kompilieren
  2. Eine ältere oder andere Distribution einsetzen
  3. Nginx einsetzen und statt mod_perl einfach FastCGI benutzen

mod_perl mit einem anderen Perl zu kompilieren ist einiges an Aufwand, so dass diese Option ausfällt. Denn man muss erst ein anderes Perl installieren, die Quellen von mod_perl holen, sicherstellen dass alle Abhängigkeiten richtig installiert sind und dann kompilieren. Mehr Infos dazu gibt es in der ModPerl-Dokumentation.

Die einfachste Lösung ist es, eine ältere oder andere Linux-Distribution einzusetzen. Hier ein Überblick, welches Perl man mit welcher (jeweils) aktuellen Version bekommt (Stand: 15.05.2016):

  1. Debian Jessie kommt mit Perl 5.20.3
  2. letzte LTS-Release von Ubuntu: 14.04 (Trusty Tahr) bietet Perl 5.18.2
  3. CentOS 7 bietet Perl 5.16.3
  4. Gentoo hat ein Perl 5.22 Paket

Ich rolle die Liste mal von hinten auf... Gentoo hat ein Perl 5.22 Paket, läuft also in das gleiche Problem wie (X)Ubuntu.

CentOS 7 hat mit Perl 5.16 ein relativ altes Perl (Perl 5.16.3 ist von 2013), ist aber eine stabile Plattform. Ich selbst habe einige OTRS-Installationen unter CentOS laufen und auch einige Kunden von mir haben ihr OTRS auf CentOS laufen (wir stellen hier unsere Erweiterungen auch gerne als RPM-Pakete zur Verfügung). Als Falle kann man SELinux ansehen. In der Regel wird das Abschalten von SELinux als Lösung genannt. Ich werde aber in einem anderen Blogpost mal zeigen, wie man OTRS betreiben und den Sicherheitsgewinn von SELinux nutzen kann.

Alle zwei Jahre bringt Canonical eine Ubuntu-Version als LTS (Long-Term Support) heraus. Sie versprechen 5 Jahre Support mit Sicherheits- und Bugfix-Releases. Wie Heise allerdings Ende April gemeldet hat, gilt dies nicht für alle Pakete, so dass man Gefahr läuft relativ schnell ein System zu haben, bei dem Sicherheitslücken offen sind. Ich selbst nutze sehr gerne Ubuntu, weil es schön einfach ist. Das werde ich aber in Zukunft überdenken.

Debian ist ebenfalls eine stabile Plattform, mit der ich allerdings noch nicht so viel Erfahrung habe. Da aber Ubuntu auf Debian basiert, ist in der Administration vieles gleich.

Es gibt noch viele weitere Linux-Distribution, die ich aber nicht alle hier auflisten kann.

Auf zur dritten Lösungsmöglichkeit: nginx mit FastCGI. nginx ist ein kleiner schlanker Webserver, der schon bei einigen unserer Webanwendungen (z.B. auch dieses Blog und die Seite von Feature-Addons.de) den Apache abgelöst hat. Statt mod_perl kommt hier FastCGI zum Einsatz.

Alle hier gezeigten Befehle sind auf einem Ubuntu 16.04 getestet. Bei Befehlen in der Kommandozeile ist immer ein $ vorangestellt, dass nicht mitgetippt werden soll.

Zuerst muss der nginx und fcgiwrap installiert werden.

$ apt-get install nginx fcgiwrap

Anschließend muss sichergestellt werden, dass in der /etc/init.d/fcgiwrap Sockets verwendet werden und sowohl der FCGI_USER als auch die FCGI_GROUP auf www-data steht. In meinen Tests war das aber schon alles richtig eingestellt.

In der /etc/nginx/fastcgi_params muss die Zeile

fastcgi_param SCRIPT_FILENAME $request_filename;

eingefügt werden.

Als nächstes muss die Konfiguration für das OTRS im nginx erstellt werden:

/etc/nginx/conf.d/otrs.conf:

server {
    server_name  localhost;

    # Wenn OTRS nicht in /opt/otrs liegt, dann muss
    # dieser Pfad angepasst werden!
    set $otrs_home "/opt/otrs";
    set $otrs_htdocs "$otrs_home/var/httpd/htdocs/";

    access_log  $otrs_home/var/log/otrs_access.log;

    # These 2 lines were necessary to prevent buffer problems in OTRS
    fastcgi_buffers 8 16k;
    fastcgi_buffer_size 32k;

    root $otrs_htdocs;

    # Do not log favicon access
    location = /favicon.ico {
        access_log     off;
        log_not_found  off;
    }

    location /otrs-web/ {
         alias   $otrs_htdocs;
    }

    location ~ ^/otrs/(.*\.pl)(/.*)?$ {
        gzip off;
        # Enter your fcgiwrap socket here
        fastcgi_pass  unix:/var/run/fcgiwrap.socket;
        fastcgi_index index.pl;
        fastcgi_param  SCRIPT_FILENAME $otrs_home/bin/cgi-bin/$1;
        include fastcgi_params;
    }
}

Wir nutzen hier die Möglichkeit Variablen in der Konfiguration zu setzen, damit nicht immer wieder das selbe getippt werden muss.

Abschließend noch den nginx neustarten:

$ service nginx restart

Das war's. Jetzt kann man auch auf einem neuen Ubuntu OTRS installieren. Die nginx-FastCGI-Variante funktioniert aber auch auf anderen Linux-Distributionen.

Permalink:

Archiv