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:
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):
Jessiekommt mit Perl 5.20.3
Trusty Tahr) bietet Perl 5.18.2
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: /2016-05-15-otrs-apache-mod-perl-perl-5-22