Compiler et personnaliser Nginx sous Debian

Source : nginx.org

Source : nginx.org

C’est bien connu, Nginx est incapable de charger de nouveaux modules à chaud contrairement à Apache et si vous souhaitez personnaliser votre installation de Nginx avec un module complémentaire de votre cru ou bien un module de la communauté, il va falloir recompiler Nginx à la main. N’ayez pas peur, la compilation n’est pas compliquée en soit, elle nécessite juste un petit peu plus de temps qu’un simple déploiement avec apt…

Avant de vous lancer à corps perdu dans la compilation, sachez que les dépôts Debian proposent plusieurs versions de Nginx contenant différentes options de compilation et différents modules. À vous de voir si ce que vous cherchez n’est pas déjà présent dans les dépôts. D’ailleurs en parlant de dépôt, vous vous apercevrez que ceux de la version stable de Debian 7.x proposent une ancienne version de Nginx. Nous allons donc plutôt utiliser les dépôts « backport source », afin de profiter des dernières fonctionnalités de Nginx.

Le module que je vais installer en complément est un module de limitation de bande passante qui permet d’affecter une bande passante maximale par IP, et non par connexion comme le propose nativement Nginx. Ce module s’intitule nginx_limit_speed_module et les sources sont disponibles sur GitHub.

Vérifier la présence des dépôts Backports

Les dépôts Backports permettent d’intégrer à votre version stable de Debian un paquet issu de la version Testing. En effet lorsqu’un paquet est publié en version Debian Stable, celui-ci n’est normalement plus mis à jour en termes de nouvelles fonctionnalités. Seuls les correctifs de sécurité seront publiés. C’est donc une possibilité pour obtenir les dernières version de certains paquets, tout en restant sur la version Stable de Debian.

Le fichier /etc/apt/sources.list doit contenir les lignes suivantes :

[...]
deb http://ftp.fr.debian.org/debian/ wheezy-backports main
deb-src http://ftp.fr.debian.org/debian/ wheezy-backports main

Un petit sudo apt-get update ne peut pas vous faire de mal si vous avez ajouté les lignes.

Récupérer les sources Nginx depuis les dépôts backport

Maintenant que les dépôts sont correctement configurés, nous allons récupérer les sources Nginx. Mais avant nous allons installer quelques dépendances contenant les outils nécessaires à la compilation, ainsi que les dépendances Nginx.

sudo apt-get install unzip

Pour la compilation, et…

sudo apt-get -t wheezy-backports build-dep nginx

… pour les dépendances. Il ne reste plus qu’à récupérer les sources. Je vous propose de les placer dans /usr/src/nginx-custom mais ça, c’est à vous de voir… Placez-vous dans ce dossier et téléchargez les sources :

sudo mkdir /usr/src/nginx-custom
cd /usr/src/nginx-custom
sudo apt-get -t wheezy-backports source nginx

Personnaliser l’installation de Nginx

Normalement votre dossier doit ressembler à quelque chose comme ceci :

ls -l
total 2,3M
drwxr-xr-x 10 root root 4,0K sept. 14 11:26 nginx-1.6.1
-rw-r--r--  1 root root 1,6M sept.  1 02:09 nginx_1.6.1-1~bpo70+1.debian.tar.gz
-rw-r--r--  1 root root 2,5K sept.  1 02:09 nginx_1.6.1-1~bpo70+1.dsc
-rw-r--r--  1 root root 785K août   6 09:59 nginx_1.6.1.orig.tar.gz

Pour ajouter le nouveau module, il faut aller dans le dossier nginx-1.6.1 :

cd /usr/src/nginx-custom/nginx-1.6.1/debian/modules

Et c’est ici qu’on copie notre module. Comme celui que je veux est sur GitHub je fais juste un git clone, ensuite c’est à vous d’adapter si votre module est dans un autre format. Quoi qu’il en soit à la fin le dossier doit ressembler à ceci :

Module Nginx

Configurer la compilation

Maintenant que notre module a été ajouté aux sources, il va falloir ajouter quelques paramètres au processus de compilation pour que le module soit pris en compte. Pour cela, il va falloir éditer le fichier /usr/src/nginx-custom/nginx-1.6.1/debian/rules, et trouver les blocs qui commencent par light_configure_flags, full_configure_flags et extras_configure_flags. Chacun de ces blocs définissent les options de compilations des différents paquets que nous obtiendront à la fin du processus. Ils contiennt tous une ou plusieurs lignes commençant par --add-module. Vous l’avez deviné, c’est par ici que ça se passe ! Personnellement comme je ne souhaite modifier que la version « full », je modifie le bloc full_configure_flags :

full_configure_flags := \
                        $(common_configure_flags) \
                        [...]
                        --add-module=$(MODULESDIR)/nginx_limit_speed_module

Mise à jour du changelog

Cette étape permet d’éviter d’avoir des conflits de version. Éditez le fichier /usr/src/nginx-custom/nginx-1.6.1/debian/changelog, et ajoutez par exemple ‘-custom’ au numéro de version.

nginx (1.6.1-2~bpo70+1-custom) unstable; urgency=medium
 
  [ Christos Trochalakis ]
  * debian/control:
    + Build nginx-extras against luajit (Closes: #755875)
  [...]

Compilation

Le moment est venu de compiler ! Placez-vous dans le dossier /usr/src/nginx-custom/nginx-1.6.1 et lancez la commande suivante :

sudo dpkg-buildpackage -b

Il y en a pour quelques minutes alors patientez sagement… À la fin du processus, le dossier /usr/src/nginx-custom doit contenir nos nouveaux paquets :

Nginx packages

J’ai eu quelques souci pour compiler à cause d’une clé GPG manquante pour signer les paquets. La signature de paquet n’est pas obligatoire et peut être passée en ajoutant l’option -uc. OU vous pouvez toujours chercher la clé manquante sur Internet

Installation de notre version de Nginx

Après la compilation, l’installation ! Vous l’avez vu on se retrouve avec différentes versions de Nginx correspondant en fait aux différentes versions proposées dans les dépôts. Vous trouvez plus d’informations concernant ces différences sur wiki Debian. Par défaut, lorsque vous installez le paquet « nginx », c’est la version full qui est installée. C’est donc ce que je vais faire ici.

sudo dpkg -i nginx-full_1.6.1-2-custom_amd64.deb nginx-common_1.6.1-2-custom_all.deb nginx_1.6.1-2-custom_all.deb
Pourquoi installer trois paquets ?

Le premier correspond à la version de Nginx choisie, les deux autres contiennent des dépendances indispensables. Si jamais vous rencontrez d’autres problèmes de dépendances supplémentaires, utilisez :

sudo apt-get -f install

Et voilà, vous disposez maintenant d’une version de Nginx personnalisée !

sudo nginx -V

devrait afficher vos modules supplémentaires 🙂


Sources :

Cet article vous a plu ? Partagez-le sur les réseaux sociaux !

Twitter Facebook Google Plus email