compat Drupal 9.5 / 10

This commit is contained in:
Gregory Colpart 2024-02-26 08:49:06 +01:00
parent 186efe3d49
commit c331db6977

View file

@ -19,8 +19,7 @@ Aegir est composé des éléménts suivants :
## Installation
Pré-requis : Debian 10 avec PHP 8.1 (par défaut sous Debian 10)
Note : en test sous Debian 11 / avec PHP 8.2
Pré-requis : Debian 10 ou Debian 11 avec PHP 8.1 ou 8.2
Préparer un service [MySQL](HowtoMySQL) local avec un identifiant "admin" afin de permettre au paquet Debian `aegir3` de créer une base et des utilisateurs MySQL (il va notamment créer `aegir_root`) :
@ -69,7 +68,7 @@ On peut ensuite activer différents modules via l'interface web d'Aegir : option
Si l'on utilise pas "Composer" pour déployer, nous conseillons de désactiver le module "Aegir Platform Composer" (sans cela on constate que le code Drupal n'était pas déployé sur les infra multi-serveurs).
### Installation PHP 8.1 (8.2 en test)
### Installation PHP 8.1 (ou 8.2)
Pour la compatibilité avec Drupal 9.5 / 10, nous passons PHP 8.1 (8.2 en cours de test chez nous) via Sury :
@ -216,6 +215,8 @@ Pour gérer du Drupal 10, il faut ajouter les fichiers suivants dans `/usr/share
* install_10.inc
* packages_10.inc
(TODO: fournir la source de ces fichiers, voir notamment l'[issue Provision 3406925](https://www.drupal.org/project/provision/issues/3406925))
et potentiellement dans `/usr/share/drush/commands/core/dupal/` :
* batch_10.inc
@ -224,7 +225,7 @@ et potentiellement dans `/usr/share/drush/commands/core/dupal/` :
* site_install_10.inc
* update_10.inc
(TODO: fournir la source de ces fichiers, voir notamment l'[issue Provision 3406925](https://www.drupal.org/project/provision/issues/3406925))
(a priori, pas nécessaire)
Il faut supprimer le Drush 12 inclus dans les sources (TODO: à confirmer, cf [ici](https://github.com/drush-ops/drush/issues/5741)) :
@ -241,7 +242,52 @@ Il faut aussi appliquer ce patch [drush-8-symfony-console-compat.patch](https://
# patch -p1 < 3353492-symfony-console-4-update_1.patch
~~~
Le patch sur `Input/InputInterface.php` nécessite un coup de main ;)
Attention, ce patch nécessite alors de patcher aussi le code de Drupal 9.5 pour qu'il reste « installable » :
~~~
# cat drush-8-symfony-console-compat-drupal95.patch
29c29
< public function getFirstArgument();
---
> public function getFirstArgument(): ?string;
44c44
< public function hasParameterOption($values, $onlyParams = false);
---
> public function hasParameterOption(string|array $values, bool $onlyParams = false): bool;
60c60
< public function getParameterOption($values, $default = false, $onlyParams = false);
---
> public function getParameterOption(string|array $values, string|bool|int|float|array|null $default = false, bool $onlyParams = false);
81c81,82
< public function getArguments();
---
> public function getArguments(): array;
>
111c112,113
< public function hasArgument($name);
---
> public function hasArgument($name): bool;
>
118c120,121
< public function getOptions();
---
> public function getOptions(): array;
>
148c151,152
< public function hasOption($name);
---
> public function hasOption($name): bool;
>
155c159,160
< public function isInteractive();
---
> public function isInteractive(): bool;
# patch /var/aegir/platforms/PLATEFORM/vendor/symfony/console/Input/InputInterface.php < drush-8-symfony-console-compat-drupal95.patch
~~~
Le patch sur `Input/InputInterface.php` nécessite un coup de main (TODO ;)
On crée le fichier `Sql10.php` :
@ -262,23 +308,29 @@ Sinon on aura des erreurs lors de l'installation d'un Drupal 10 :
Drush\Sql\SqlException: Unable to find a matching SQL Class. Drush cannot find your database connection details...
~~~
ET idem pour DrupalBoot10.php, StatusInfoDrupal10.php, User10.php et UserSingle10.php
ET idem pour DrupalBoot10.php, StatusInfoDrupal10.php, User10.php et UserSingle10.php :
/var/aegir/.config/composer/vendor/drush/drush/lib/Drush/Boot/DrupalBoot10.php
/var/aegir/.config/composer/vendor/drush/drush/lib/Drush/UpdateService/StatusInfoDrupal10.php
/var/aegir/.config/composer/vendor/drush/drush/lib/Drush/User/User10.php
/var/aegir/.config/composer/vendor/drush/drush/lib/Drush/User/UserSingle10.php
(TODO: fichiers à fournir).
Il faut aussi patcher dans le code de Drupal 10 :
1. supprimer "string|\Stringable " dans les fichiers suivants :
* 18 fois dans vendor/psr/log/src/LoggerTrait.php :
* 1 fois dans core/lib/Drupal/Core/Logger/LoggerChannel.php
* 9 fois dans core/lib/Drupal/Core/Logger/RfcLoggerTrait.php
* 1 fois dans core/modules/dblog/src/Logger/DbLog.php
* vendor/psr/log/src/LoggerTrait.php (18 fois)
* core/lib/Drupal/Core/Logger/LoggerChannel.php (1 fois)
* core/lib/Drupal/Core/Logger/RfcLoggerTrait.php (9 fois)
* core/modules/dblog/src/Logger/DbLog.php (1 fois)
2. supprimer ": void" dans les fichiers suivants :
* core/lib/Drupal/Core/Logger/RfcLoggerTrait.php
* vendor/psr/log/src/LoggerInterface.php
* core/modules/dblog/src/Logger/DbLog.php
* core/lib/Drupal/Core/Logger/RfcLoggerTrait.php (9 fois)
* vendor/psr/log/src/LoggerInterface.php (9 fois)
* core/modules/dblog/src/Logger/DbLog.php (1 fois)
3. Supprimer ": void" uniquement dans "function log(...)" dans les fichiers suivants :
@ -289,6 +341,7 @@ Enfin, il faut appliquer le patch suivant sur le fichier
`/var/aegir/.config/composer/vendor/drush/drush/lib/Drush/Boot/DrupalBoot.php` :
~~~
# cat DrupalBoot.php.patch
@@ -157,7 +157,12 @@
$ignored_modules[] = $cached->data;
}
@ -317,6 +370,8 @@ Enfin, il faut appliquer le patch suivant sur le fichier
}
break;
}
# patch Da/var/aegir/.config/composer/vendor/drush/drush/lib/Drush/Boot/DrupalBoot.php < DrupalBoot.php.patch
~~~
## Utilisation
@ -376,6 +431,8 @@ $ drush --backend=2 @platform_PREPROD provision-verify 2>&1
Cela va également écrire dans la base de données MySQL propre à Aegir.
Par exemple quand on crée un site, il est présent au moins dans les tables `hosting_site` et `hosting_context`.
Par exemple pour lister les serveurs :
~~~
@ -390,6 +447,7 @@ MariaDB> select title,service,hosting_service.type,restart_cmd,port,uid,hosting_
| webcluster | http | cluster | | 0 | 1 | 1 | 1663175362 | 1663230664 |
~~~
Au sein d'un site Drupal, on peut collecter différentes informations via [Drush](HowtoDrupal#drush) :
~~~