| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
| plusieurs_versions_de_php_sous_debian [2025/10/28 12:54] – [Installation des dépôts] Flaz | plusieurs_versions_de_php_sous_debian [2025/10/29 09:12] (Version actuelle) – Flaz |
|---|
| ===== Besoin ===== | ===== 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. | Je souhaite que différents site hébergés par le même serveur (système) puissent utiliser différentes versions de PHP. De plus, je souhaite utiliser des versions supérieures à celles mises à disposition sur les dépôts officiels de Debian. |
| |
| ===== Solution ===== | ===== Solution ===== |
| ==== Installation des dépôts ==== | ==== 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 [[https://packages.sury.org/php/README.txt|script]] qui déclare le dépôt, installe des paquetages((Fournis pas les dépôt officiels de Debian.)) pré-requis et installe un paquetage((Fourni par sury.org.)) de configuration. | L'installation peut se faire depuis un compte disposant de droits étendus via //sudo//. Elle se fait via l'exécution d'un [[https://packages.sury.org/php/README.txt|script]] qui déclare le dépôt, installe des paquetages((Fournis pas les dépôt officiels de Debian.)) pré-requis et installe un paquetage((Fourni par sury.org.)) de configuration. |
| |
| Le tout peut se faire à l'aide d'une seule ligne de commande : | Le tout peut se faire à l'aide d'une seule ligne de commande : |
| <code>$ curl -sSL https://packages.sury.org/php/README.txt | sudo bash -x</code> | <code>$ curl -sSL https://packages.sury.org/php/README.txt | sudo bash -x</code> |
| |
| <note>debian.org indique une autre manière plus simple et générique d'installer et configurer les dépôts sury.org. NON TESTÉE.</note> | <note>[[https://wiki.debian.org/AdditionalPHPVersions#Adding_the_SURY_Repository|wiki.debian.org]] indique une autre manière plus simple et __générique__ d'installer et configurer le dépôt //sury.org//. NON TESTÉE.</note> |
| ==== Ajouter une version de PHP ==== | ==== 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 : | Partant de là, l'installation de plusieurs versions de PHP se fait de manière standard, via //apt//. Par exemple : |
| <code>$ sudo apt install php8.1</code> | <code>$ sudo apt install php8.1</code> |
| <note important>Cette installation peut installer automatiquement le paquetage libapache2-mod-php8.1 qui plantera certains environnement tels //Virtualmin// qui fonctionnent en CGI ou FPM mais pas en modules apache. Il suffit alors de désinstaller manuellement ce paquetage : <code>$ sudo apt remove libapache2-mod-php8.1</code></note> | <note important>Cette installation peut installer automatiquement le paquetage libapache2-mod-php8.1 qui plantera certains environnement tels //Virtualmin// qui fonctionnent en CGI ou FPM mais pas en //modules// apache. Il suffit alors de désinstaller manuellement ce paquetage : <code>$ sudo apt remove libapache2-mod-php8.1</code></note> |
| ==== Ajouter des modules ==== | ==== 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émentaires((Ces paquetages n'existent pas :-D)). Pour en connaître la liste : | Certains //modules PHP// 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émentaires((Ces paquetages n'existent pas :-D)). Pour en connaître la liste : |
| <code>$ php8.1 -m</code> | <code>$ php8.1 -m</code> |
| |
| |
| ===== Mises à jour ===== | ===== 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. | |
| | Les mises à jour des versions de PHP et des modules additionnels ainsi installés se fait alors 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. | Toutefois, certains problèmes peuvent apparaître notamment dans la configuration du dépôt. |
| </code> | </code> |
| |
| 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 ! | Comme l'indique le message d'avertissement, les paquetages mis à jour via le dépôt //sury.org// ne seront plus mis à jour ! |
| |
| Une technique testée avec succès consiste : | Une technique testée avec succès consiste à : |
| - supprimer le fichier de description du dépôt sury.org | - supprimer le fichier de description du dépôt //sury.org// |
| - relancer le script d'installation du dépôt sury.org | - relancer le script d'installation du dépôt //sury.org// |
| |
| Soit, dans le cas testé : | Soit, dans le cas testé : |
| À partir de là, la mise à jour des paquetages disponibles (apt update) ne doit plus signaler l'erreur indiquée précédemment. | À partir de là, la mise à jour des paquetages disponibles (apt update) ne doit plus signaler l'erreur indiquée précédemment. |
| === Focus === | === 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 : | Concrètement, la déclaration des clés PGP a été modifiée par //sury.org//. 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 <code>signed-by=/usr/share/keyrings/deb.sury.org-php.gpg</code> | * dans l'ancienne version de //php.list//, on trouve <code>signed-by=/usr/share/keyrings/deb.sury.org-php.gpg</code> |
| * dans la nouvelle version de //php.list//, on trouve <code>signed-by=/usr/share/keyrings/debsuryorg-archive-keyring.gpg</code> | * dans la nouvelle version de //php.list//, on trouve <code>signed-by=/usr/share/keyrings/debsuryorg-archive-keyring.gpg</code> |
| Pour connaître la version utilisée via un shell : | Pour connaître la version utilisée via un shell : |
| <code>$ php -r "echo phpversion() ;"</code> | <code>$ php -r "echo phpversion() ;"</code> |
| Pour connaître la version CLI utilisée via un shell((La version de l'interface d'accès à PHP (phpx.y-cli) peut différer de la version exécutée de PHP (phpx.y).)) : | Pour connaître la version CLI utilisée via un shell((La version de l'interface d'accès à PHP (phpX.Y-cli) peut différer de la version exécutée de PHP (phpX.Y).)) : |
| <code>$ php --version</code> | <code>$ php --version</code> |
| |
| === Ligne de commande === | === Ligne de commande === |
| |
| Sous Debian 12 avec les dépôts //sury.org//, la version par défaut de PHP est la version la plus élevée installée via le paquetage "//phpx.y//". | Par défaut, sous Debian 12 avec les dépôts //sury.org//, la version par défaut de PHP est la version la plus élevée installée via le paquetage "//phpX.Y//". |
| |
| La version par défaut utilisée en ligne de commande se modifie à l'aide de la commande //update-alternatives// : | La version par défaut utilisée en ligne de commande se modifie à l'aide de la commande //update-alternatives// : |
| === Paquetages installés === | === Paquetages installés === |
| <code> | <code> |
| dpkg --get-selections | grep phpx.y | dpkg --get-selections | grep phpX.Y |
| </code> | </code> |
| où "x.y" est la version que l'on souhaite supprimer. Cette commande affichera les paquetage php ainsi que tout autre paquetage contenant "phpx.y" dans son nom (par exemple : libapache2-mod-phpx.y). | où "X.Y" est la version que l'on souhaite supprimer. Cette commande affichera les paquetages PHP ainsi que tout autre paquetage contenant "phpX.Y" dans son nom (par exemple : //libapache2-mod-phpX.Y//). |
| |
| <code> | <code> |
| dpkg -l | grep phpx.y | awk '{print $2}' | xargs -n1 echo | dpkg -l | grep phpX.Y | awk '{print $2}' | xargs -n1 echo |
| </code> | </code> |
| devrait fournir le même résultat tout en préparant une suppression générale (voir plus loin). | devrait fournir le même résultat tout en préparant une suppression générale (voir plus loin). |
| |
| <code> | <code> |
| apt list 'phpx.y*' --installed | apt list 'phpX.Y*' --installed |
| </code> | </code> |
| affichera la liste des paquetages PHP installés pour la version x.y et indiquera des informations complémentaires telles que la version précise de chaque paquetage. | affichera la liste des paquetages PHP installés pour la version X.Y et indiquera des informations complémentaires telles que la version précise de chaque paquetage. |
| |
| === Desinstallation === | === Désinstallation === |
| |
| Une fois que l'on a la liste des paquetages, on peut les désinstaller un à un : | Une fois que l'on a la liste des paquetages, on peut les désinstaller un à un : |
| Si on tient à supprimer (//remove// ou //purge//) d'un seul coup tous les paquetages d'une version de PHP : | Si on tient à supprimer (//remove// ou //purge//) d'un seul coup tous les paquetages d'une version de PHP : |
| <code> | <code> |
| apt remove --dry-run '^phpx\.y.*' | apt remove --dry-run '^phpX\.Y.*' |
| >>>>>>>>>>>>> pour voir ce que cela fera (dry-run) | >>>>>>>>>>>>> pour voir ce que cela fera (dry-run) |
| apt remove '^phpx\.y.*' | apt remove '^phpX\.Y.*' |
| </code> | </code> |
| L'expression régulière '^phpx\.y.*' permet un contrôle précis des noms des paquetages qui seront supprimés. | L'expression régulière '^phpX\.Y.*' permet un contrôle précis des noms des paquetages qui seront supprimés. |
| |
| Si on veut supprimer (//remove// ou //purge//) tous les paquetages dont le nom mentionne la version de PHP visée((Par exemple, y compris //libapache2-mod-phpx.y.//)), on reprendra la formule de recherche vue précédemment en modifiant l'action //xargs// : | Si on veut supprimer (//remove// ou //purge//) tous les paquetages dont le nom mentionne la version de PHP visée((Par exemple, y compris //libapache2-mod-phpX.Y.//)), on reprendra la formule de recherche vue précédemment en modifiant l'action //xargs// : |
| |
| <code> | <code> |
| dpkg -l | grep phpx.y | awk '{print $2}' | xargs -n1 sudo apt remove -y | dpkg -l | grep phpX.Y | awk '{print $2}' | xargs -n1 sudo apt remove -y |
| </code> | </code> |
| |
| ===== Sources ===== | ===== Sources ===== |
| |
| * [[https://wiki.debian.org/AdditionalPHPVersions|Additional PHP versions on Debian | 3rd party integration]] (en) (debian.org) | * [[https://wiki.debian.org/AdditionalPHPVersions|Additional PHP versions on Debian | 3rd party integration]] (en) (wiki.debian.org) |
| * [[https://doknet.fr/tssr/exploiter-les-elements-de-linfrastructure-et-assurer-le-support-aux-utilisateurs/exploiter-des-serveurs-linux/tips-tricks-pour-php-et-debian-11/|Tips & tricks pour changer de version de php sur Debian]] | * [[https://doknet.fr/tssr/exploiter-les-elements-de-linfrastructure-et-assurer-le-support-aux-utilisateurs/exploiter-des-serveurs-linux/tips-tricks-pour-php-et-debian-11/|Tips & tricks pour changer de version de php sur Debian]] |
| * [[https://askubuntu.com/questions/277756/how-do-i-delete-all-packages-which-match-a-certain-pattern|How do I delete all packages which match a certain pattern?]] | * [[https://askubuntu.com/questions/277756/how-do-i-delete-all-packages-which-match-a-certain-pattern|How do I delete all packages which match a certain pattern?]] |
| * [[https://linuxprograms.wordpress.com/tag/dpkg-get-selections/|dpkg tutorial – Package Manager for Ubuntu / Debian]] | * [[https://linuxprograms.wordpress.com/tag/dpkg-get-selections/|dpkg tutorial – Package Manager for Ubuntu / Debian]] |
| |
| |
| |