Table des matières
Plusieurs versions de PHP sous Debian
Besoin
Je souhaite que différents site hébergés par le même serveur puissent utiliser différentes versions de PHP. De plus, je souhaite utiliser des versions supérieures à celles mise à disposition sur les dépôt officiels de Debian.
Solution
Cette fiche décrit comment utiliser le dépôt sury.org afin de faire cohabiter plusieurs versions de PHP.
Installation des dépôts
L'installation peut se faire depuis un compte disposant de droits étendus via sudo. Elle fait via l'exécution d'un script qui déclare le dépôt, installe des paquetages1) pré-requis et installe un paquetage2) de configuration.
Le tout peut se faire à l'aide d'une seule ligne de commande :
$ curl -sSL https://packages.sury.org/php/README.txt | sudo bash -x
Ajouter une version de PHP
Partant de là, l'installation de plusieurs versions de PHP se fait de manière standard, via apt. Par exemple :
$ sudo apt install php8.1
$ sudo apt remove libapache2-mod-php8.1
Ajouter des modules
Certains modules sont déjà disponibles car pré-compilés dans la version de PHP contenue par le paquetage de base. Il est donc vain de chercher à les installer via des paquetages complémentaires3). Pour en connaître la liste :
$ php8.1 -m
L'ajout d'un ou plusieurs modules à une version de PHP se fait simplement en indiquant la version souhaitée. Par exemple :
$ sudo apt install php8.1-cgi php8.1-fpm php8.1-gd php8.1-imagick php8.1-mbstring php8.1-mysql php8.1-xml
Mises à jour
Les mises à jour des versions de PHP ainsi installées ainsi que les modules se fait de la même que pour les paquetage Debian standard. C'est tout l'intérêt d'avoir ajouter les dépôts.
Toutefois, certains problèmes peuvent apparaître notamment dans la configuration du dépôt.
Clé publique non disponible
Source : GPG Error Sury (en) (raspberrypi.com)
Ce problème est signalé lorsqu'on fait une simple mise à jour des paquetages disponibles.
# apt-get update ... Err:7 https://packages.sury.org/php bookworm InRelease The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B188E2B695BD4743 ... Reading package lists... Done W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: https://packages.sury.org/php bookworm InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B188E2B695BD4743 W: Failed to fetch https://packages.sury.org/php/dists/bookworm/InRelease The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B188E2B695BD4743 W: Some index files failed to download. They have been ignored, or old ones used instead. #
Comme l'indique le message d'avertissement, cela signifie que les paquetages mis à jour via le dépôt sury.org ne seront plus mis à jour !
Une technique testée avec succès consiste :
- supprimer le fichier de description du dépôt sury.org
- relancer le script d'installation du dépôt sury.org
Soit, dans le cas testé :
# cd /etc/apt/sources.list.d/ # mv php.list ~/php.list.back # curl -sSL https://packages.sury.org/php/README.txt | bash -x
À partir de là, la mise à jour des paquetages disponibles (apt update) ne doit plus signaler l'erreur indiquée précédemment.
Focus
Concrètement, la déclaration des clés PGP a été modifiée. La relance du script, installe un nouveau trousseau de clé pour sury.org et y fait référence dans la déclaration du dépôt. Dans le cas considéré jusqu'ici :
- dans l'ancienne version de php.list, on trouve
signed-by=/usr/share/keyrings/deb.sury.org-php.gpg
- dans la nouvelle version de php.list, on trouve
signed-by=/usr/share/keyrings/debsuryorg-archive-keyring.gpg