Évidement, avant de migrer, il est nécéssaire de faire le classique détour vers /usr/port/UPDATING
, qui détaille la marche à suivre pour que la migration se passe au mieux :
20100409:
AFFECTS: users of lang/php5
AUTHOR: ale@FreeBSD.org
As of php 5.3, a few extensions were removed from or included into the core
php5 package. Follow the steps below to update your installation.
1) Delete the following packages (if installed):
- php5-dbase
- php5-ncurses
- php5-pcre
- php5-spl
- php5-ming
- php5-mhash
2) Rebuild php5 and all ports depending on it.
Cependant, malgré la stricte application de ces instructions, j'ai eu un soucis.
En effet, toutes mes tentatives de compilation de l'extension php5-mysqli m'ont systématiquement renvoyées l'erreur suivante :
root@diablo:/usr/ports/databases/php5-mysqli
40> make install clean
===> Patching for php5-mysqli-5.3.2
===> Applying FreeBSD patches for php5-mysqli-5.3.2
1 out of 1 hunks failed--saving rejects to mysqli.c.rej
=> Patch patch-mysqli.c failed to apply cleanly.
*** Error code 1
Stop in /usr/ports/databases/php5-mysqli.
La seule solution que j'ai trouvé, à la lecture du sujet correspondant à PHP 5.3 sur le forum du support de FreeBSD, a été de modifier la valeur de la variable CONFIGURE_ARGS
définie dans le fichier /usr/ports/php5/Makefile
en lui ajoutant la ligne suivante :
--with-mysqli=shared,mysqlnd \
Attention, il faut surtout pas oublier le \ à la fin de la ligne, sous peine d'avoir une erreur lors de l’exécution du fichier.
Une fois PHP recompilé, il ne reste plus qu'à ajouter la ligne suivante dans /usr/local/etc/php/extension.ini :
extension=mysqli.so
Il faut également ne pas oublier de redémarrer votre serveur http pour pouvoir profiter de la mise à jour.
Il est également probable que vous ayez à modifier l'ordre de chargement des extensions de PHP dans le fichier /usr/local/etc/php/extensions.ini pour éviter un plantage en beauté lors de son éxécution ;
root@diablo:/usr/ports/lang/php5
48> php --version
PHP 5.3.2 with Suhosin-Patch (cli) (built: Apr 12 2010 10:20:57)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
with Xdebug v2.0.5, Copyright (c) 2002-2008, by Derick Rethans
with Suhosin v0.9.30, Copyright (c) 2007-2010, by SektionEins GmbH
Segmentation fault: 11 (core dumped)
Dans mon cas, il suffit de charger l'extension recode
avant l'extension mysql
.
Une fois tout cela effectué, vous obtiendrez le résultat suivant :
root@diablo:/usr/ports/lang/php5
49> php --version
PHP 5.3.2 with Suhosin-Patch (cli) (built: Apr 12 2010 10:20:57)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
with Xdebug v2.0.5, Copyright (c) 2002-2008, by Derick Rethans
with Suhosin v0.9.30, Copyright (c) 2007-2010, by SektionEins GmbH
Enjoy !
J'espère que pour la prochaine version, le mainteneur du port sera beaucoup plus rapide, car vu la vitesse d''avancement des travaux du PHP Group sur le sujet, il a le temps de se préparer...
8 réactions
1 De desfrenes - 12/04/2010, 14:29
Je ne suis pas un habitué de freebsd (Debian/MacOSX au quotidien) alors désolé si ma question est stupide: Il n'est pas possible de l'installer simplement à partir des sources sur php.net ? Qu'est-ce qui justifie un "port" ?
2 De mageekguy - 12/04/2010, 15:15
@desfrenes :FreeBSD n'étant pas linux, il y a un certain nombre de patchs à appliquer sur les sources et/ou les makefile pour pouvoir réussir à le compiler et l'installer.
De plus, l'intérêt d'un port est qu'il gére les dépendances, donc lors de la mise à jour du port PHP, l'ensemble des extensions installées sur le serveur ainsi que tout ce qui dépend de PHP est également mis à jour de manière transparente.
De plus, les ports permettent d'avoir un suivi de version qui permet de connaître à tout moment les programmes à mettre à jour.
Ca simplifie donc pas mal la vie de l'administrateur système.
Mais oui, c'est toujours possible de le faire à la main, tout comme il est possible de faire un site web avec notepad sous windows.
Tout dépend du niveau de masochisme de celui qui est entre la chaise et le clavier.
3 De desfrenes - 12/04/2010, 16:27
je ne peux rien dire pour freebsd mais pour debian ça se fait les doigts dans le nez, aucun besoin d'être masochiste
4 De mageekguy - 12/04/2010, 16:42
@desfrenes :FreeBSD !== linux. Du coup, faut adapter pour compiler/installer. Tu ne peux tout simplement pas comparer Debian et FreeBSD. Ce sont deux mondes qui fonctionnent sur les mêmes principes mais avec des lois différentes. C'est le même delta qu'entre un linux et MacOS.
Et en plus le port t'affranchie de l'installation à la main de l'ensemble des dépendances nécéssaires à la compilation.
5 De desfrenes - 12/04/2010, 17:38
quelle est la nature de ces adaptations ? C'est superficiel ou il y a un travail lourd à faire ?
6 De mageekguy - 12/04/2010, 17:40
@desfrenes :
Y'a un peu de boulot...
7 De desfrenes - 12/04/2010, 17:55
Donc... PHP est développé principalement sous / pour linux ?
8 De mageekguy - 12/04/2010, 19:22
@desfrenes : Non.
Il y a des patchs pour modifier des chemins de fichiers, d'adaptation à la façon dont apache est installé par le son port, etc.
Il y a également quelques patchs qui modifies des
define
pour initialiser certaines constantes à des valeurs plus adaptées à FreeBSD, ou pour gérer un comportement bas niveau ou une fonction système spécifique.Bref, les patchs permettent de le compiler en adaptant son environnement de compilation à la hiérarchie du systèmes de fichiers et aux spécificités bas niveau de FreeBSD.
Je pense que le code en lui même est parfaitement multi-plateforme.
Peut être d'ailleurs que les patchs ne sont pas absolument indispensables, et qu'il est possible de compiler PHP sous FreeBSD sans eux, mais dans ce cas, je pense que le code obtenu serait moins adapté à la plate-forme.
Cependant, je ne peux pas te le confirmer vu que je n'ai jamais tenté l'expérience, n'en ayant jamais eu l'utilité.