Debian SID: empecher la désinstallation de PHP 7.4 au profit de PHP 8.1 [RESOLU]

Bonjour à tous,

J’ai un petit renseignement à vous demander SVP.
Voila, sur ma machine de travail, sous Debian SID, j’ai un serveur LAMP en local qui me permet de travailler hors connexion sur mon blog wordpress. Hors, actuellement, Wordpress (version 5.9) n’est pas tout-à-fait compatible avec la version de base actuelle sous SID de PHP à savoir la version PHP 8.1. De ce fait je suis donc obligé de garder la version 7.4 laquelle a bien été installé de manièr e
nominative via la commande

sudo apt install php7.4

et non pas

sudo apt install php

Problème: il semblerait que php7.4 ne soit plus ni dans les dépots de SID ni dans les dépots de STABLE (indiqué également dans mon sources.list), ayant été remplacé par php8.1. De ce fait, à la demande de mise-à-niveau de ma distribution via

sudo apt dist-upgrade

voila ce que me propose apt:

    sudo apt dist-upgrade
    [sudo] Mot de passe de francois : 
    Lecture des listes de paquets... Fait
    Construction de l'arbre des dépendances... Fait
    Lecture des informations d'état... Fait      
    Calcul de la mise à jour... Fait
    Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires :
      libabsl20200923 libffi7 liblrdf0 libperl5.32 perl-modules-5.32 php-common
    Veuillez utiliser « sudo apt autoremove » pour les supprimer.
    Les paquets suivants seront ENLEVÉS :
      libapache2-mod-php7.4 libwacom2 php7.4 php7.4-bcmath php7.4-bz2 php7.4-cli php7.4-common php7.4-gd php7.4-json php7.4-mbstring php7.4-mysql php7.4-opcache php7.4-readline php7.4-xml php7.4-xsl php7.4-zip
    Les NOUVEAUX paquets suivants seront installés :
      libwacom9
    Les paquets suivants ont été conservés :
      libc++1
    Les paquets suivants seront mis à jour :
      gir1.2-mutter-9 gnome-control-center gnome-settings-daemon libinput-bin libinput10 libmutter-9-0 libwacom-bin libwacom-common php-common
    9 mis à jour, 1 nouvellement installés, 16 à enlever et 1 non mis à jour.
    Il est nécessaire de prendre 3 872 ko/3 889 ko dans les archives.
    Après cette opération, 20,3 Mo d'espace disque seront libérés.
    Souhaitez-vous continuer ? [O/n] n
    Annulation.

Pouvez-vous m’indiquer la méthode à adopter pour pouvoir faire ma mise à niveau sans provoquer la désinstallation de php7.4 SVP?.. Mercid’avance

Bonjour,

La version de PHP dans Bullseye (stable) est bien la 7.4, c’est la 8.1 dans Bookworm (testing) et dans sid.

Si tu as les dépôts stable il faut utiliser l’épinglage de paquets ( APT pinning) pour indiquer que tous les paquets PHP provenant des dépôts stable sont prioritaires.

Merci Bruno1.
Je t’avoue que je ne suis pas un balèse pour l’épinglage. Il y a une méthode pour épingler TOUT php et ses dépendances ou dois-je épingler ces dernières également?

Je ne suis pas spécialiste non plus et je n’ai que très rarement utilisé cette technique. Je t’invite à lire la doc et le man apt_preferences. Je tenterais quelque chose comme :

           Package: /php/
           Pin: release a=stable
           Pin-Priority: 1001

À mettre dans /etc/apt/preferences.d/php_stable par exemple
Cela devrait affecter une priorité 1001 (installé même si c’est un retour à une version inférieure) à tous les paquets issus de stable dont le nom contient ‹ php ›

On pourrait aussi faire l’inverse en affectant une priorité négative aux paquet php de experimental.

Une autre possibilité est de bloquer la version d’un paquet installé avec hold. Par exemple tu peux déjà faire :

sudo apt-mark hold php7.4

Et voir ce que propose un apt full-upgrade, quitte à bloquer de nouveaux paquets et à recommencer.

Personnellement, j’éviterais ce genre de manipulation (y compris le mélange des sources entre stable, unstable et experimental) et j’utiliserais un conteneur docker pour faire tourner mon WordPress.

OK!.. Je me réponds à moi-même. Il semblerait qu’un simple

Package: php*
Pin: release o=Debian,a=stable
Pin-Priority: 1100

soit suffisant dans mon /etc/apt/preferences pour empêcher la désinstallation de php7.4 et ses dépendances au profit d’une version plus récente.

Ceci dit il est temps que Wordpress se mettent lui-même à niveau étant donné que sa documentation indique la compatibilité avec php8!..
NOTA: la compatibilité existe peut-être mais manifestement elle n’est que partielle: l’installation du CMS est en effet impossible. Elle se solde par une erreur fatale

En fait j’avais indiqué les sources stables précisément en prévision de ce genre de problèmes. En effet, je tiens à ce que ma machine de travail avec son serveur local soit sous SID alors que mon serveur en ligne, quant à lui, est sous STABLE.
De ce fait je savais que cela allait arriver un jour ou l’autre mais je n’avais pas anticipé en étudiant la documentation concernant le pinning avant par manque de temps. Maintenant c’est en cours.
Merci à toi Bruno1.