Bien migrer son PHP 4 vers PHP 5 sur FreeBSD

goPHP5Nombreux sont ceux qui, comme moi, ont préféré rester à la version 4 de PHP. C'est la plus répandue, et cette branche ancienne est encore suivie. C'est donc un choix logique pour les administrateurs systèmes un peu conservateurs (if it ain't broke, don't fix it). Malheureusement pour notre tranquillité à tous, Zend a décidé de laisser tomber complètement le support de PHP 4 (hors mises à jour critiques de sécurité). Des initiatives externes fleurissent même pour promouvoir la bascule vers PHP 5. Voyons comment il est possible de mettre à jour un serveur Apache/PHP sous FreeBSD. On ne s'intéresse pas ici à la migration du code PHP, mais uniquement au module Apache et à ses extensions.

Pour passer d'une installation complexe de PHP 4 vers PHP 5, sur FreeBSD, certains proposent des méthodes longues et fastidieuses. À mon avis, il est important de savoir faire simple. On gagne alors en rapidité. J'utilise les ports de FreeBSD, comme dans la méthode décrite ici, mais je m'affranchi d'une grosse partie du travail en optant pour une réinstallation plutôt que pour une mise à jour. En effet, il peut être très fastidieux de mettre à jour PHP et les logiciels qui utilisent PHP si ces derniers présentent des dépendances différentes en fonction de la version de PHP. C'est un cas peu probable, mais le nombre de ports qui s'appuient sur PHP est assez grand, on n'est jamais trop prudent.

La première chose à faire est de baliser le serveur web pour signifier aux utilisateurs qu'une maintenance relativement longue va commencer. J'utilise pour cela un httpd.conf dédié, dont l'extrait important est :

<Directory />
    AllowOverride None
    Options -Indexes
    Deny from all 
</Directory>

DocumentRoot "/usr/local/www/data"

<Directory "/usr/local/www/data">
    Deny from all
    ErrorDocument 200 "DUE TO SOFTWARE MAINTENANCE, SERVER IS UNAVAILABLE - "
    ErrorDocument 404 "DUE TO SOFTWARE MAINTENANCE, SERVER IS UNAVAILABLE - " 
    ErrorDocument 403 "DUE TO SOFTWARE MAINTENANCE, SERVER IS UNAVAILABLE - "
    ErrorDocument 503 "DUE TO SOFTWARE MAINTENANCE, SERVER IS UNAVAILABLE - "
</Directory>

Bien sur, il faut aussi neutraliser les includes en fin de fichier, pour que les virtual hosts ne soient pas chargés.
Une fois qu'Apache est reconfiguré pour ne rien servir d'autre que le message souhaité, on peut attaquer la désinstallation de PHP 4 et des logiciels qui l'utilisent. Pour en connaître la liste, il suffit de lancer portversion -vr php4-4* ou pkg_info -R php4-4*. Dans les deux cas, on obtient la liste de tous les ports qui utilisent ou font partie de l'installation de PHP. Par exemple :

pkg_info -R php4-4*
Information for php4-4.xyz:

Required by:
pear-1.xyz
php4-bcmath-4.xyz
php4-bz2-4.xyz
php4-ctype-4.xyz
php4-curl-4.xyz
php4-extensions-1.1
php4-gd-4.xyz
php4-gettext-4.xyz
php4-iconv-4.xyz
php4-mysql-4.xyz
php4-openssl-4.xyz
php4-pcre-4.xyz
php4-posix-4.2.4_4
php4-session-4.xyz
php4-zlib-4.xyz
phpMyAdmin-2.xyz
squirrelmail-1.xyz

Pensez bien à garder une copie de ce résultat, dans un éditeur de texte par exemple, car cela sert aussi de base à la réinstallation ultérieure. À partir de cette liste, on va décider ce que l'on doit sauvegarder, et ce que l'on peut désinstaller directement. Typiquement, il est important de sauvegarder les logiciels comme phpMyAdmin et Squirrelmail avant de les supprimer, car leur répertoire contient des fichiers de configuration.
En premier lieu on fait donc une copie (cp -rp) des répertoires d'installation des applications PHP issues des ports. Ensuite, on les désinstalle proprement :

pkg_deinstall phpMyAdmin-2.xyz squirrelmail-1.xyz

Une fois que toutes les applications (des ports) dépendants de PHP sont sauvegardées et supprimées, on peut désinstaller tout PHP, ainsi que PEAR.

pkg_deinstall pear-1.xyz php4-bcmath-4.xyz ... php4-4.xyz

C'est très rapide, et on peut passer directement à la réinstallation en version 5. Forts de notre liste de ports confectionnée avant les suppressions, nous commençons par installer PHP 5 :

cd /usr/ports/lang/php5 make install

Puis on enchaîne sur le meta-port php5-extensions qui nous permet d'installer en une seule fois nos extensions PHP :

cd /usr/ports/lang/php5-extensions/ 
make install

À l'aide de notre liste d'extensions pour PHP 4, on peut retrouver ce qu'il faut activer au moment de la compilation de php5-extensions.

Après toutes ces installations, il ne reste plus qu'à s'occuper des applications PHP que l'on avait supprimé précédemment. On les réinstalle via le système des ports FreeBSD, puis on restaure leurs fichiers de configuration. Au passage, il est possible que d'autres extensions PHP soient installées, comme dépendances des applications choisies.

La touche finale concerne Apache, pour le quel il faut vérifier l'activation du module PHP 5, et la synchronisation entre le vieux php.ini et le php.ini-dist installé avec PHP 5. On termine par la réactivation normale d'Apache, et on teste les logiciels en PHP.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.