Installer un environnement LAMP6 sur Debian

Rechercher

Installer un environnement LAMP6 sur Debian

  • Par Emacs
  • 6 commentaires
  • 18493 lectures
  • RSS -  Atom

PHP 6 pointe enfin le bout de son nez ! Eh oui, certains passionnés attendent sa sortie avec impatience. Je teste PHP 6 depuis un an environ et bien-sûr uniquement en test vu que la version stable n'est pas encore sortie à l'heure où j'écris ces lignes. Ce tutoriel est basé sur un article que j'ai écrit pour le magazine Linux+DVD. Il s'agit de déployer pas à pas un environnement LAMP 6 (Apache 2, PHP 6 et MySQL 6) sur une distribution Linux Debian.

Les documentations sur la version 6 de PHP commencent à se faire de plus en plus nombreuse. Et pourtant, après en avoir étudié une bonne quantité, décortiqué chaque phrase, analysé chaque commande... les installations étaient toujours un échec. Installation, désinstallation et réinstallation, Debian, Gentoo, Suse, re-Gentoo, re-Debian... toujours des résultats non escomptés. Puis un jour, j'ai tout réinstallé à l'instinct, sans aucune documentation, qu'elle soit Internet ou que celle-ci vienne d'un article de magazine. Voilà ce que vous allez découvrir dans cet article, l'installation réussie, étape par étape. Toutes les commandes y sont, même les plus évidentes.

Installation Linux

Partitionnement

L'installation a été effectuée depuis le CD-ROM NetInstall. L'image a été téléchargée depuis un site mirroir et la version téléchargée est Debian 4.0 r1 i386. L'installation a été faite sur un ordinateur portable premier prix (moins de 700 euros). Insérez le CD-ROM et rebootez l'ordinateur. Faites une installation minimale. Pour le partitionnement, j'ai opté pour cette solution :

  • no1 et no2 fat32 et ntfs
  • no3 primaire 6,3GB ext3 /
  • no5 logique 797,8MB swap swap
  • no6 logique 8,8GB ext3 /home
  • no7 logique 7,8GB ext3 /var

Lors de l'installation, il vous sera proposé l'installation de logiciels comme l'interface graphique et autres. Décochez tout et continuez l'installation. Une fois que Debian a éjecté le CD, redémarrez la machine faites un upgrade et un update du système si vous le jugez nécessaire. Je vous conseille de le juger nécessaire. Voilà pour Debian. Installation d'une simplicité enfantine mème pour un débutant.

Installation de l'environnement graphique

Maintenant que Debian est installée, il est nécessaire d'installer le minimum pour pouvoir tester la bonne installation de PHP6 dans un navigateur. Les besoins indispensables sont donc un serveur X, un Window Manager et un navigateur Internet. Pour toutes les manipulations suivantes, connectez vous en tant que root.

Remarque : vous pouvez faire une installation complète d'un environnement LAMP6 sans interface graphique en téléchargeant le paquet links qui permet d'avoir le contenu d'une page web, excepté les images, en mode texte.

Installation du packet links
# apt-get install links

Serveur X (XFree86)

Le serveur X est ce qui va vous permettre d'interagir avec votremachine via la souris et le clavier en vous créant une interfacegraphique la plus minimaliste qui soit. C'est pour cette raison que leserveur X sera couplé avec un Window Manager qui va permettre lagestion multi-bureaux par exemple parmi de nombreuses autres options(gestion des utilisateurs via l'interface graphique plutôt quepar la ligne de commande, etc.). Mais avant d'installer la fameuseinterface graphique, il est nécessaire d'installer d'autres paquetsessentiels

Commençons déjà par simuler l'installation du serveur graphique pour prendre connaissance des paquets recommandés.

Simulation de l'installation du Serveur X
# apt-get install -sV x-window-system-core

Les paquets recommandés sont libft-perl, gcc, c-compiler, bzip2,debconf-utils, xresprobe, mdetect, discover1, discover. Cependant, vousallez installer certains paquets différents de ceux indiqués. Il s'agiten outre du paquet gcc qui va être remplacé par g++ qui traite à lafois le C et le C++.

Installation des paquets nécessaires au Serveur X
# apt-get install pciutils
# apt-get install mdetect
# apt-get install xresprobe
# apt-get install debconf-utils
# apt-get install bzip2
# apt-get install discover
# apt-get install g++ libmudflap0-dev

Maintenant, vous pouvez installer le serveur graphique.

Installation du serveur graphique
# apt-get install x-window-system-core

Puis tester le serveur X.

Test du serveur graphique
# startx

Et quitter le serveur X.

# exit

Installation du Window Manager

En ce qui concerne le WM, le choix s'est porté sur Fluxbox pour sa légéreté et sa rapidité.

Installation du Window Manager Fluxbox
# apt-get install fluxbox fluxconf fbpager fbdesk
# startx

Installation navigateur web

Maintenant que vous êtes sur Fluxbox, faites un clic droit sur unendroit vide du bureau, sélectionnez terminaux graphiques, puis xterm.Un fenêtre de terminal (console) vient de s'afficher. Saisissez lacommande suivante :

Installation du navigateur web Iceweasel
# apt-get install iceweasel iceweasel-l10n-fr

Pour vérifier qu'il s'est bien installé faites un clic droit sur lebureau, puis applications --> réseau --> Iceweasel. Si le nomiceweasel n'apparaît pas, saisissez le nom dans le terminal Xterm et lenavigateur web s'ouvrira sur le bureau. Si ce n'est pas le cas, c'estque l'installation s'est mal passé, ce qui, personnellement, ne m'estjamais arrivé.

Installation du serveur web Apache 2

Pour le serveur Web, c'est bien évidemment Apache qui a été sélectionné. Il a été installé depuis les sources.

Site : http://httpd.apache.org, depuis la section Download,
Version téléchargée : httpd-2.2.4.tar.gz

Installation du serveur Apache
# md5sum httpd-2.2.4.tar.gz
# tar -xzvf httpd-2.2.4.tar.gz && cd httpd.tar.gz
# ./configure --prefix=/usr/local/apache2 --enable-module=so --enable-cgi
# make && make install

Saisissez dans le navigateur web l'URL : http://localhost/ et vous devriez voir s'afficher le message : It works!

Pour voir toutes les options de configuration possible avant l'installation, saisissez la commande :

Connaître les options de configuration d'Apache 2
# ./configure -h

et si vous voulez le copier dans un fichier, vous pouvez faire :

Copier les options de configuration d'Apache 2 dans un fichier
# mkdir /root/docs
# ./configure -h > /root/docs/configure-apache2.help

Installation de MySQL 6

Site : http://dev.mysql.com/downloads/mysql/6.0.html
Version téléchargée : mysql-6.0.2-alpha.tar.gz

C'est parti pour l'installation du serveur de base de données.Vu que MySQL est quand-mème plus demandé que PostgreSQL, c'est donc lui qui va être installé pour l'exemple de cet article.Aujourd'hui, PDO permet de migrer très facilement d'un serveur SQL à unautre. Vous pourrez donc migrer sans problème vers PostgreSQL par exemple sivos applications on été bien conçues.

Installation du packet MySQL 6.0.2 Alpha
# tar -xzvf mysql-6.0.2-alpha.tar.gz && cd mysql-6.0.2-alpha
# export CXXFLAGS="$CXXFLAGS -fno-exceptions"

Création d'un groupe pour MySQL.

# groupadd mysql

Création d'un utilisateur david.

# useradd -g mysql david
# ./configure --prefix=/usr/local/mysql --with-named-curses-libs=/usr/libs/libncursesw.so.5
# make && make install
# cp support-files/my-medium.cnf /etc/my.cnf
# cd /usr/local/mysq/bin
# mysql_install_db
# cd ..
# chown -R root .
# chown -R mysql david
# chown -R david .

Lancement du daemon (service) MySQL :

# /usr/local/mysql/bin/mysql_safe --user=david &

Installation de PHP6

C'est parti pour PHP 6. Tout d'abord, il faut savoir que la version 6 dePHP nécessite certains paquets comme ICU (Internation Components forUnicode), libxml2 et quelques autres.

Installation de ICU

Site : http://www.icu-project.org
Version téléchargée : icu-3_6-src.tgz

Installation de ICU
# ./configure --enable-extras --enable-icuio --enable-layout
# make && make install

Installation libxml2

Le paquet libxml2 contient des bibliothèques qui permettent à PHPde manipuler des fichiers écrits au format XML. Aujourd'hui, XML prendde plus en plus de place dans les développements, et est d'ailleurs deplus en plus demandé. Il permet par exemple, couplé à XSLT, de générerplusieurs formats de sortie (HTML et texte par exemple) à partir duméme fichier d'entrée (le fichier XML).

Installation de libxml2
# apt-get install libxml2-dev

Installation de PHP 6

Site : http://snaps.php.net
Version téléchargée : php6.0-200709072230.tar.gz

Il est fort probable, je dirais même évident, que vous n'aurez pas lamême version de fichier source lorsque vous allez télécharger PHP 6.Venant du site snaps.php.net, cette version est remise à jour toutesles deux heures pour les installations sous Linux et toutes les huitheures pour les installations sous Windows ( je sens mon côté pro-Linuxqui ressurgit :-D ).

Installation de la version Dev de PHP 6
# tar -xzvf php6.0-200709072230.tar.gz && cd php6.0-200709072230
# ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-icu-dir=/usr/local/icu --with-mysql=/usr/local/mysql --enable-debug --disable-short-tags --enable-exif --enable-mbstring --enable-soap --enable-sockets --disable-mbregex
# make && make install

Vous aurez probablement le message suivant tout à la fin de l'installation :

libtool: install: warning: remember to run 'libtool --finnish /usr/local/src/php5.0-200709072230/libs

Remarque : notez la faute d'orthographe pour « finnish » qui ne prend qu'un seul net s'écrit donc finish au lieu de finnish comme indiqué sur le messagede warning).

Installation de libtool

Exécutez la commande suivante :

# apt-get install libtool libltdl3-dev

Puis exécutez la commande comme indiqué sur le message de warning

# libtool --finish /usr/local/src/php6.0-200709072230/libs

Quelques précisions sur le ./configure de PHP 6

Si vous utilisez l'option --with-zip, vous devez avoir installé au préalable ZLIB. Ensuite, accompagnez l'option --with-zlib de l'option --with-zlib-dir=<DIR> (exemple : --with-zlib --with-zlib-dir=/usr/local/zlib). De toute façon, si vous essayez d'installer avec uniquement l'option --with-zip vous obtiendrez le message d'erreur suivant :

configure: error: zip support requires ZLIB. Use --with-zlib-dir=<DIR> to specify prefix where ZLIB include and library are located.

PDO est installé par défaut pour l'utilisation de SQLite. Pourinstaller le driver PDO de MySQL, vous devez utiliser, enplus de l'option --with-mysql=<DIR>, l'option --with-pdo-mysql=<DIR><DIR> est le répertoire de MySQL, et ne pas utiliser l'option --enable-pdo=shared. Ce qui donnera pour cette installation :

--with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql

Autres astuces

Si vous désirez consulter toutes les options de configuration de PHP 6 à tout moment, vous pouvez sauvegarder le résultat de la commande :

# ./configure -help

dans un fichier texte grâce à la commande :

# ./configure -help > /root/docs/php6-configure.txt

Bien-sûr, vous pouvez choisir un autre chemin que celui indiqué ci-dessus.

Configurer PHP avec Apache

Apache et PHP sont installés maintenant ainsi que MySQL. Mais Apachene reconnaît, pour l'instant, pas PHP. Il est nécessaire de configurerApache de sorte à ce qu'il puisse récupérer le code interprêté par lemoteur PHP afin de pouvoir le mettre en interaction avec les autresfichiers, si nécessaire, et renvoyer le résultat au navigateur web du client.Les étapes qui suivent expliquent, pas à pas, comment mettre Apache etPHP en interaction.

# mkdir /var/www && cd /var/www
# nano test.php

Afin de voir la configuration par défaut de PHP 6 avec Apache, créez unfichier PHP dans lequel vous écrivez le fameux phpinfo(). Puis exécutez ledans votre navigateur favori. Ensuite, tapez la commande suivante :

# nano /usr/local/apache2/httpd.conf

Et modifiez ces lignes :

  • 102 : DocumentRoot "/var/www"
  • 129 : <Directory "/var/www">
  • 164 : DirectoryIndex index.php

Ajoutez la ligne :

AddType application/x-http-php .php5

Enregistrez les modifications et redémarrez le serveur web

# /usr/local/apache2/bin/httpd -k restart

Dans le navigateur, saisissez http://localhost/test.php et vous obtenez le fameux tableau de PHP Info qui vous dit que vous êtes en PHP6.0.0-dev.

PHP 6 est maintenant installé

Heureusement, PHP6 fonctionne très bien avec Apache2 (ligne Server API)et dans ce même tableau (non visible sur la figure) une lignecomplémentaire a été ajoutée concernant le support Unicode. Ce moduleICU contient des directives de configuration que vous pouvez voir dansl'image ci-dessous :

Directives ICU pour le support de l'Unicode avec PHP 6

Un changement à noter au niveau du moteur PHP : dans la version 5,c'était Zend Engine 2 et pour la version 6 c'est devenu Zend Engine 3 maistoujours avec le logo Zend Engine 2.

PHP 6 et Zend Engine 3

D'ailleurs dans le tableau suivant (PHP Core) la directive zend.ze1_compatibility_mode a été supprimée.

Toujours dans le tableau PHP Core, la directiveallow_call_time_pass_reference a disparu. Il est donc conseillé, si cen'est déjà fait, de passer la valeur de cette directive à Off afin defaciliter une migration future de vos applications vers la version 6 dePHP. Ce conseil vaut pour toutes les autres directives existantes pourPHP5 et n'ayant plus lieu en PHP6.

Pour les débutants qui découvrent PHP, toutes les directives setrouvent dans le fichier php.ini, highlight.bg est également hors depropos dans PHP6, comme annoncé depuis le départ par la Team PHP.

Ladirective magic_quotes et les directives magic_quotes_* ont égalementété éliminées du fichier de configuration.

Les directives register_globals etregister_long_arrays ont été supprimées également. Il ne reste que la directiveregister_argc_argv.

Les 4 directives safe_mode sont elles aussi supprimées.

Parmi les ajouts, il y a 8 nouvelles directives en rapport avec le support Unicode :

  • unicode.fallback_encoding : default(no value),
  • unicode.filesystem_encoding : default(no value),
  • unicode.http_input_encoding : default(no value),
  • unicode.output_encoding : default(utf-8) est l'encodage par défaut pour l'affichage,
  • unicode.runtime_encoding : default(iso-8859-1),
  • unicode.script_encoding : default(utf-8),
  • unicode.semantics : default(off),
  • unicode.stream_encoding : default(UTF-8).

Nouveautés de PHP6

Pour prendre connaissance des changements, suppressions et ajouts defonctionnalités à PHP 6, rendez vous sur le sitewww.corephp.co.uk/archives/19-Prepare-for-PHP-6.html. Pour ceux qui necomprennent absolument rien à l'anglais, voici un résumé de la pageInternet citée.

Voici le sujet qui a probablement été le plus abordé pour PHP 6. Ilest vrai que c'est un changement assez important qui risque decompromettre certaines applications lors de la migration de PHP5 versla version 6, et encore plus de la version 4 vers la version6.

Il s'agit, vous l'avez probablement deviné, de la directive deconfiguration register_globals qui était à On par défaut en PHP 4 ( < 4.2.0), puis à Off par défaut mais dont il était possible de remettre à On et sans aucun espoir de modification à On pour ceux qui n'auraient toujours pas compris la faille de sécurité que cela représente de laisser à On.

Test de l'état des register_globals avec PHP 6
<html>
<head>
<title>register_globals</title>
</head>
<body>
<?php
if(!empty($nom)) {
echo 'Bonjour '. htmlspecialchars($_POST['nom']);
}
?>
<form action="#" method="post">
Saisissez votre nom <input type="text" name="nom" />
<input type="submit" name="submit" value="Me présenter" />
</form>
</body>
</html>

Méme si vous saisissez un nom, le code montré ci-dessus n'affichera pas le message de salutation. Remplacez maintenant la ligne :

if(!empty($nom)){

Par :

if(!empty($_POST['nom'])) {

Et saisissez un nom dans le champ de texte avant de cliquer sur le boutond'envoi. Cette fois-ci, le message de salutation est bien affiché, lescript fonctionne.Cela montre bien que les directives register_globals ont bel et bien été supprimées de PHP 6 puisqu'elles ne figurent plus dans le php.ini.

Register_long_arrays to go signifie que la directiveregister_long_array, qui était également à Off par défaut avec PHP5,est supprimée du fichier php.ini pour la version 6 de PHP. Reprenez lecode précédent et modifiez la ligne du if par :

if(!empty($HTTP_POST_VARS['nom'])) {

Et de nouveau, saisissez un nom dans le champ de texte du formulairepuis cliquez sur le bouton d'envoi. A nouveau le script n'affichera pasle message car pour lui la variable $HTTP_POST_VARS['nom'] est vide.

D'autres directives de configuration ont été supprimées dontmagic_quotes et safe_mode.

"var" to alias "public" : en PHP4, ilfallait utiliser le mot clé var pour déclarer une variable àl'intérieur d'une classe. Dans la version 5 de PHP, public a pris la place de var et sont apparus protected et privatece qui a considérablement amélioré la prise en charge de la POO(Programmation Orientée Objet). Avec PHP6, il sera possible d'utiliseraussi bien var que public.

Returns by reference will error : les retours par référence généreront une erreur de type E_STRICT

Les ajouts dans le moteur PHP sont les suivants :

  • Prise en charge des entiers 64 bits,
  • Ajout d'une extension goto au mot clé break,
  • L'ajout de la fonction issetor() qui pourra étre utilisé en remplacement de la syntaxe ? : lorsque le paramétre du milieu (celui entre ? et : ) est droppé,
  • L'ajout du cache d'opcodes APC (Alternative PHP Cache) par défaut dans le noyau de PHP en standard,
  • Un patch PHP Hardened qui implémente des vérifications supplémentaires au code PHP,
  • Au niveau de la gestion des erreurs, E_ALL comprend maintenant E_STRICT en plus de tous les autres niveaux d'erreurs déjé existants dans E_ALL des versions précédentes de PHP.

Un changement important : appeler une fonction dynamique avec unesyntaxe d'appel statique générera une erreur de niveau E_STRICT.

Conclusion

Cette installation a fonctionné sur un ordinateur portable de base.Cependant, j'ai tenté des installations pendant plusieurs semaines sanssuccès. Donc, j'espére que cet article en aidera plus d'un. Aussi,soyez patient et persévérant. Il m'a fallu plusieurs semainesd'installations, de plantages, de réinstallations, etc. J'ai effectuéde nombreuses recherches, j'ai lu des articles dont un était un plagiat(une pure traduction) d'un site anglais qui, personnellement, ne m'apas permis d'installer PHP 6. Aucune des documentations ne m'a permis deme créer un environnement LAMP 6. Puis, un jour, j'ai tout réinstallé enquelques heures, l'instinct (la chance ?) a parfois du bon.

Remarque : certains articles vous disentqu'il faut installer bison, flex et re2c. Pour que l'installationpuisse fonctionner, ce sont justement les trois paquets que je n'ai pasinstallé car même les bonnes versions de ces paquets me plantaientl'installation de PHP6.

Auteur

Dynamisez PHP 5 - David DrapeauDavid Drapeau est co-auteur du livre « Dynamisez PHP5 » publié chez Micro-Applications, et rédige des articles pour les magazines PHPSolutions et Linux+.

Son activité professionnelle l'amène régulièrement à concevoir des back-offices pour des sites Internet et autres applications PHP.

David vend et dédicace son livre au prix de 20 euros. Les personnes intéressées par ce geste peuvent le contacter directement à l'adresse david.drapeau [at] gmail [dot] com.



Les commentaires

1. Par Sowhat le 24/02/2008 23:12

Super, bravo !

2. Par macsim le 25/02/2008 09:49

Très bel article merci.

3. Par mostafa le 10/05/2008 16:37

j'ai installé apache2_2.2.8 sous debian etch
mais impossible de se connecter à localhost. de plus je ne trouve pas /usr/local/apache2/httpd.conf
merci de me guider.

4. Par Yuri le 13/07/2008 10:12

Very interesting post.

5. Par Orisme Rijkaard le 17/08/2008 20:45

Est-ce la meme chose pour Ubuntu 8.04?

6. Par david96 le 24/01/2009 22:56

Article très intéressant, merci.

J'ai commencé le PHP par la version 4, qui venait à l'époque juste de sortir, je remercie l'auteur d'un livre (avec lequel j'ai fait mes débuts sur PHP) qui nous invitait à faire ce que PHP6 aujourd'hui va nous obliger, tel qu'imposer register_globals=off... Ouf, j'ai eu chaud !