Compiler un serveur apache n'est pas très compliqué, il suffit de charger les sources et d'utiliser le triptyque :
./configure make make install
Ce mode fonctionnement ne permet pas forcement une configuration optimale du binaire et des modules. Ce billet présente donc une méthode pour compiler un binaire minimal avec le chargement possible des modules.
Commencer par télécharger les sources de la dernière version ( 2.2.19 lors de la rédaction ). Pour une version de la branche 2.4.x voir le billet dédié et écrit postérieurement Compilation apache 2.4.x
cd /home wget http://mirror.mkhelif.fr/apache//httpd/httpd-2.2.19.tar.gz tar -xvzf httpd-2.2.19.tar.gz cd httpd-2.2.19
Les outils de compilation doivent être présents sur la machine.
Sur Centos/RedHat si une installation minimale a été faite, il faut installer le groupe Outils de Développement et aussi le package zlib-devel ( sinon il y aura une erreur lors du configure sur le module deflate :configure: error: mod_deflate )
yum groupinstall "Outils de développement" yum install zlib-devel
Sous Debian il faut installer le package build-essential
aptitude install build-essential
Puis lancer la compilation de apache ainsi :
./configure --enable-so --enable-mods-shared="all" --prefix=/usr/local/apache2 --with-mpm=prefork ( ou --with-mpm=worker, selon votre choix ) make make install
L'ensemble est donc installé sous /usr/local/apache2, se positionner sous bin de ce répertoire et vérifier que le bianire ne contient que le minimum.
cd /usr/local/apache2/bin ./apachectl -l Compiled in modules: core.c prefork.c http_core.c mod_so.c
Les modules sont dans le répertoire /usr/local/apache2/modules. Pour tester il suffit de lancer le binaire du serveur
/usr/local/apache2/bin/apachectl -k start
L'arrêt de fait avec la commande suivante :
/usr/local/apache2/bin/apachectl -k stop
Fichier de configuration
Dans cet exemple nous allons mettre en place un fichier de configuration minimal. Les process apache sont lancés par un utilisateur nommé daemon par défaut, nous allons créer un user apache dédié à cela.
adduser -s /sbin/nologin apache
Puis editer le fichier /usr/local/apache2/conf/httpd.conf et y mettre uniquement les lignes suivantes :
ServerRoot /usr/local/apache2 User apache Group apache DocumentRoot /var/www/html Listen 80 LoadModule mime_module modules/mod_mime.so TypesConfig conf/mime.types LoadModule dir_module modules/mod_dir.so DirectoryIndex index.html ErrorLog /var/log/apache2/error.log LogLevel warn
Penser à créer les répertoires /var/www/html et /var/log/apache2.
mkdir -p /var/www/html mkdir -p /var/log/apache2 chown -R apache:apache /var/log/apache2
Sous Centos penser aussi à invalider le parefeu sinon il sera impossible de se connecter depuis un client
service iptables stop service ip6tables stop chkconfig iptables off chkconfig ip6tables off
Sous /var/www/html, mettre une page index.html quelconque :
<html> <head> <title>Page de test de Apache 2</title> </head> <body> <h1>Apache fonctionne !</h1> </body> </html>
Relancer le serveur apache en spécifiant le fichier de configuration
/usr/local/apache2/bin/apachectl -f /usr/local/apache2/conf/httpd.conf -k start