Installation de mod_perl à partir des sources pour Apache/HTTPD 2.4.x

La sortie de la version 2.0.9 de mod_perl au mois de juin 2015, a apporté le support de la branche 2.4.x de Apache/HTTPD.

Dans cette documentation, nous allons installer mod_perl à partir des sources de manière dynamique. Cette installation a été réalisée sous une distribution CentOS 7.

– Installez un client HTTP en ligne de commande : yum install wget
– Installez un compilateur C et l’utilitaire make : yum install gcc make

– Installez les bibliothèques de développement de Apache/HTTPD : yum install httpd-devel
– Installez PERL et les dépendances nécessaires à mod_perl : yum install perl perl-ExtUtils-Embed gdbm-devel perl-Data-Dumper

– Placez-vous dans le répertoire suivant : cd /usr/local/src/
– Téléchargez les sources de mod_perl 2.0.9 (ou version supérieure si disponible) avec la commande wget : wget http://apache.mirrors.ovh.net/ftp.apache.org/dist/perl/mod_perl-2.0.9.tar.gz
– Décompressez l’archive : tar -xzvf mod_perl_2.0.9.tar.gz
– Placez-vous dans le répertoire suivant : cd mod_perl-2.0.9
– Spécifiez l’emplacement de l’utilitaire de compilation apxs pour la compilation du module dynamique mod_perl : perl Makefile.PL MP_APXS=/usr/bin/apxs
– Compilez mod_perl : make
– Installez mod_perl : make install

Le module dynamique mod_perl.so est installé dans le répertoire /usr/lib64/httpd/modules/.

– Créez un fichier de configuration pour charger le module dynamique mod_perl dans Apache/HTTPD : vi /etc/httpd/conf.modules.d/02-perl.conf

LoadModule perl_module modules/mod_perl.so

– Redémarrez le service Apache/HTTPD : systemctl restart httpd
– Vérifiez l’état du service Apache/HTTPD : systemctl status httpd
– Vérifiez la présence du module dynamique mod_perl dans Apache/HTTPD : httpd -M

perl_module (shared)

Installer et compiler le module mod_rpaf avec la version 2.4 de Apache/HTTPD

Le module mod_rpaf permet de remplacer l’adresse IP du client dans l’en-tête des requêtes HTTP. Utile lorsque vous avez des reverse proxy devant votre serveur Web.

En essayant de compiler le module mod_rpaf avec la version 2.4 de Apache/HTTPD, vous obtiendrez l’erreur suivante lors de la compilation :

/usr/local/httpd-2.4.3/build/libtool --silent --mode=compile gcc -std=gnu99 -prefer-pic   -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -g -O2 -pthread -I/usr/local/httpd-2.4.3/include  -I/usr/local/httpd-2.4.3/include   -I/usr/local/httpd-2.4.3/include   -c -o mod_rpaf-2.0.lo mod_rpaf-2.0.c && touch mod_rpaf-2.0.slo
mod_rpaf-2.0.c: In function 'rpaf_cleanup':
mod_rpaf-2.0.c:150: error: 'conn_rec' has no member named 'remote_ip'
mod_rpaf-2.0.c:151: error: 'conn_rec' has no member named 'remote_addr'
mod_rpaf-2.0.c:151: warning: implicit declaration of function 'inet_addr'
mod_rpaf-2.0.c:151: error: 'conn_rec' has no member named 'remote_ip'
mod_rpaf-2.0.c: In function 'change_remote_ip':
mod_rpaf-2.0.c:164: error: 'conn_rec' has no member named 'remote_ip'
mod_rpaf-2.0.c:183: error: 'conn_rec' has no member named 'remote_ip'
mod_rpaf-2.0.c:186: error: 'conn_rec' has no member named 'remote_ip'
mod_rpaf-2.0.c:187: error: 'conn_rec' has no member named 'remote_addr'
mod_rpaf-2.0.c:187: error: 'conn_rec' has no member named 'remote_ip'
apxs:Error: Command failed with rc=65536
.

Et pour cause, la version 2.4 de Apache/HTTPD apporte quelques modifications d’APIs.
Pour corriger ce problème, il suffit de remplacer les directives remote_ par client_ dans le fichier mod_rpaf-2.0.c.

Pour vous faciliter la tâche, je viens de créer un patch afin d’effectuer ces changements.

– Placez-vous dans le répertoire suivant : cd mod_rpaf-0.6
– Téléchargez le patch : wget http://www.be-root.com/downloads/mod_rpaf/mod_rpaf-2.0.patch
– Appliquez le patch suivant : patch -p0 < mod_rpaf-2.0.patch

patching file mod_rpaf-2.0.c

– Compilez le module mod_rpaf : apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c

– Éditez le fichier de configuration de Apache/HTTPD : vi /etc/httpd/conf/httpd.conf

LoadModule rpaf_module        modules/mod_rpaf-2.0.so

<IfModule rpaf_module>
  RPAFenable On
  RPAFproxy_ips 127.0.0.1 xxx.xxx.xxx.xxx
  RPAFsethostname On
  RPAFheader X-Forwarded-For
</IfModule>

xxx.xxx.xxx.xxx correspond à l’adresse IP de votre serveur Web.

– Redémarrez le serveur Web : service httpd restart

– Vérifiez le fonctionnement du module mod_rpaf dans le fichier de log de Apache/HTTPD : tail -f /var/log/httpd/access_log

127.0.0.1 - - [23/Aug/2012:20:31:19 +0200] "GET / HTTP/1.1" 200 83 "-" "Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1
192.168.0.1 - - [23/Aug/2012:20:31:19 +0200] "GET / HTTP/1.1" 200 83 "-" "Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1

Installation de Apache/HTTPD 2.4.x à partir des sources

La fondation Apache a annoncé cette semaine la sortie d’une version majeure du célébre serveur Web, Apache/HTTPD. La branche 2.4.x apporte plusieurs nouvelles fonctionnalités et quelques changements notables.

Dans cet article, en attendant la mise à disposition des paquets dans les différents dépôts, nous allons installer cette version directement depuis les sources.

Nous nous sommes appuyé sur une distribution CentOS 6.2, installée en version minimale.

Le module MPM (Modules Multi-Processus) utilisé par défaut, est event. Pour le modifier, vous devez ajouter l’argument –with-mpm (par exemple, –with-mpm=prefork si vous souhaitez utiliser PHP avec son module DSO). Autre changement, les modules de Apache/HTTPD sont intégrés dynamiquement par défaut (DSO, Dynamic Shared Objects).

Pour commencer, nous allons installer les outils de compilation.

– Installez un client HTTP en ligne de commande : yum install wget
– Installez un compilateur C et l’utilitaire make : yum install gcc make

Notre utiliserons le répertoire /usr/local/src/ comme répertoire de travail. La version disponible lors de l’écriture de cet article, est la version 2.4.1.

– Placez-vous dans le répertoire suivant : cd /usr/local/src/
– Téléchargez la dernière version de la branche 2.4.x de Apache/HTTPD : wget http://mir2.ovh.net/ftp.apache.org/dist//httpd/httpd-2.4.1.tar.gz
– Décompressez l’archive de Apache/HTTPD dans ce répertoire : tar -xzf httpd-2.4.1.tar.gz
– Placez-vous dans le répertoire suivant : cd httpd-2.4.1

Les arguments dépendent bien évidemment de votre usage de Apache/HTTPD. Vous pouvez par exemple activer le module de réécriture d’URL (–enable-rewrite), le module de compression des pages retournées (–enable-deflate), … Dans ce cas, d’autres dépendances devront certainement être installer.

– Configurez : ./configure –prefix=/usr/local/httpd –sysconfdir=/etc/httpd/conf –enable-so –enable-alias –with-mpm=prefork –disable-status –disable-cgi –disable-userdir

checking for chosen layout... Apache
checking for working mkdir -p... yes
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu

Configuring Apache Portable Runtime library ...

checking for APR... no
configure: error: APR not found. Please read the documentation.

Un message d’erreur nous indique que APR n’a pas été trouvée. APR (Apache Portable Runtime) est nécessaire au serveur Web, Apache/HTTPD. APR était auparavant inclus dans la branche 2.2.x. Ce n’est plus le cas avec la branche 2.4.x.

Même chose pour APR-UTIL (Apache Portable Runtime Utility).

Il est possible d’utiliser le dépôt pour installer APR et APR-UTIL. Cependant, nous n’allons pas nous priver des dernières versions et allons récupérer directement leurs sources. D’autant plus que leur installation est gérée par Apache/HTTPD. Il suffit simplement de décompresser les sources dans le sous-répertoire srclib de Apache/HTTPD.

– Placez vous dans le répertoire /usr/local/src/ : cd ..
– Téléchargez les sources de la dernière version de APR : wget http://mirrors.ircam.fr/pub/apache//apr/apr-1.4.6.tar.gz
– Téléchargez les sources de la dernière version de APR-UTIL : wget http://mirrors.ircam.fr/pub/apache//apr/apr-util-1.4.1.tar.gz

– Décompressez l’archive de APR dans le répertoire srclib : tar -xzf apr-1.4.6.tar.gz -C httpd-2.4.1/srclib/
– Renommez le répertoire : mv httpd-2.4.1/srclib/apr-1.4.6 httpd-2.4.1/srclib/apr

– Décompressez l’archive de APR-UTIL dans le répertoire srclib : tar -xzf apr-util-1.4.1.tar.gz -C httpd-2.4.1/srclib/
– Renommez le répertoire : mv httpd-2.4.1/srclib/apr-util-1.4.1 httpd-2.4.1/srclib/apr-util

– Placez-vous dans le répertoire contenant les sources de Apache/HTTPD : cd httpd-2.4.1
– Configurez à nouveau : ./configure –prefix=/usr/local/httpd –sysconfdir=/etc/httpd/conf –enable-so –enable-alias –with-mpm=prefork –disable-status –disable-cgi –disable-userdir

checking for pcre-config... false
configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/

Un autre message d’erreur nous apprend que pcre-config n’a pas été trouvé. PCRE (Perl Compatible Regular Expressions) est aussi un pré-requis au serveur Web, Apache/HTTPD. Il n’est plus inclus avec la branche 2.4.x.

– Installez les paquets suivants : yum install pcre pcre-devel

– Placez-vous dans le répertoire suivant : cd httpd-2.4.1
– Configurez : ./configure –prefix=/usr/local/httpd –sysconfdir=/etc/httpd/conf –enable-so –enable-alias –with-mpm=prefork –disable-status –disable-cgi –disable-userdir
– Compilez : make
– Installez : make install

La version 2.4.1 de Apache/HTTPD est maintenant installée sur votre système (/usr/local/httpd/).

Il ne vous reste plus qu’à modifier le fichier de configuration de Apache/HTTPD (/etc/httpd/conf/httpd.conf) à votre convenance. La configuration devra être adaptée.