Mises à jour automatiques
La mise à jour d’un site Drupal est une tâche complexe, laborieuse et coûteuse. C’est un problème délicat qui semble simple à première vue, mais qui garantit des mises à jour sécurisées et fiables, offrant ainsi confiance aux propriétaires de sites et accessibilité aux visiteurs du site.
Le service de mise à jour automatique pour Drupal vise à simplifier ce processus et à assurer la confiance que la mise à jour sera appliquée correctement.
Veuillez noter que la mise à jour automatique est une initiative stratégique pour le projet Drupal. L’initiative est encore en cours de réalisation, il y a donc plusieurs éléments importants à prendre en compte :
- Le module de mise à jour automatique n’est pas encore dans le noyau. Dans sa version initiale, il est disponible comme module additionnel à l’adresse https://drupal.org/project/automatic_updates.
- Le module est actuellement un candidat à la sortie. Une version stable est attendue très prochainement.
- À ce premier stade, le module de mises à jour automatiques inclut les fonctionnalités d’annonce des services publics et de vérification de préparation et peut appliquer les mises à jour sur place manuellement ou via cron. Les mises à jour contenant des modifications de la base de données déclencheront un retour arrière de la mise à jour.
- Le module ne supporte pas encore les mises à jour des modules Contrib ou les installations basées sur Composer. Ceux-ci sont prévus pour la Phase 2.
Caractéristiques principales du module de mise à jour automatique
Les annonces de service public (PSA)
Les annonces concernant les sorties critiques de sécurité pour les modules de base et additionnels ne sont pas fréquentes. Lorsqu’un PSA est publié, les propriétaires de sites doivent vérifier leurs sites pour s’assurer qu’ils sont informés des dernières versions, et que le site est prêt pour une mise à jour rapide après la diffusion des correctifs à la communauté.
Vérifications de préparation à la mise à jour
Tous les sites ne peuvent pas toujours être mis à jour. La vérification de préparation est une méthode automatique qui détermine si le site est prêt pour une mise à jour automatique après la sortie d’une nouvelle version par la communauté. Par exemple, les sites ayant des mises à jour de base de données non lancées, montés en systèmes de fichiers en lecture seule ou n’ayant pas assez d’espace disque pour la mise à jour sur place ne peuvent pas recevoir de mises à jour automatiques. Si votre site échoue à cette vérification lors de la sortie d’un PSA, il est important de résoudre les problèmes de préparation pour que le site puisse être rapidement mis à jour.
Mises à jour sur place
Une fois que le service PSA a informé le propriétaire du site Drupal d’une mise à jour disponible et que les vérifications de préparation ont confirmé que le site est prêt, le service de mise à jour automatique peut appliquer la mise à jour.
Un site donné (ou une agence ou un hébergeur) peut décider d’ajouter des options supplémentaires de gestion de la base de données en plus de celles-ci. Par exemple, exécuter un dump de la base de données et le décharger sur S3, ou envoyer des e-mails/notifications pour décompresser. Et enfin, lancer les mises à jour de la base de données.
Si vous développez vos propres actions personnalisées, gardez à l’esprit que toute action nécessitant un code susceptible d’avoir changé pendant la mise à jour doit être exécutée via des commandes dédiées de l’interface en ligne de commande. Sinon, l’exécution invoquera une ancienne version du code. C’est une limitation intégrée à PHP. Des exemples de la façon de procéder se trouvent dans le plugin execute_updates, qui appelle une commande de la console Symfony.
Installation
Actuellement, le module de mise à jour automatique Drupal est disponible comme module additionnel sur Drupal.org. À une étape ultérieure, après des tests significatifs par la communauté, il sera intégré dans le noyau Drupal. À ce moment-là, tout ce que vous aurez à faire sera de mettre à jour vers la version de Drupal qui inclut cette fonctionnalité.
Pour installer la version contrib du module Automatic Updates, vous suivrez les mêmes instructions que pour beaucoup d’autres modules sur Drupal.org :
- Important : téléchargez le module via un tarball. L’installation via Composer n’est actuellement pas supportée.
- Puis installez le module par la méthode de votre choix.
L’utilisation de cette ressource n’est actuellement pas destinée aux sites utilisant Composer. Certaines hypothèses ont été faites sur le fait que le site a été installé et est géré à partir d’archives. De plus, il supporte intentionnellement uniquement les mises à jour pour le noyau Drupal. Les itérations suivantes du module supporteront plus pleinement les installations basées sur Composer et Composer lui-même.
Utilisation du module
Utilisation supervisée
La fonction PSA affiche le PSA maintenu sur Drupal.org directement dans l’interface administrateur de Drupal afin d’avertir les utilisateurs d’une sortie prochaine.
La fonction de vérification de préparation s’exécutera régulièrement pour garantir l’absence de problèmes empêchant l’application de la mise à jour.
Sur la page de configuration du module, l’utilisateur peut lancer manuellement une mise à jour sur place.
Utilisation sans surveillance
Pour activer les mises à jour automatiques, il suffit de cocher la case sur la page de configuration du module pour exécuter les mises à jour lors du cron. Les mises à jour ne seront appliquées que si le site passe la vérification de préparation.
Extension des mises à jour automatiques
Les mises à jour de base de données peuvent être complexes, et les propriétaires de sites peuvent avoir des motivations différentes pour le traitement des mises à jour les contenant. Dans Drupal 8, le module de mise à jour automatique utilise une architecture de plugins pour gérer les mises à jour de la base de données, afin que le système soit extensible.
La configuration par défaut consiste à mettre le site en mode maintenance, exécuter les mises à jour de la base de données, puis sortir le site du mode maintenance. Il n’y a pas d’interface utilisateur pour modifier cela (pour l’instant). L’ordre et la séquence de traitement des mises à jour de base de données sont configurables via config dans automatic_updates.settings.yml. On peut aussi surcharger via settings.php $config['automatic_updates.settings']['database_update_handling'] = ['rollback', 'alternative_plugin_id', 'yet_another_plugin']. C’est un tableau d’identifiants de plugins.
Les plugins disponibles inclus dans le module sont :
- 'execute_updates'
- 'ignore_updates'
- 'maintenance_mode_activate'
- 'maintenance_mode_disactivate'
- 'rollback'
En tant que propriétaire de site ou fournisseur de services, vous pouvez écrire des plugins supplémentaires pour étendre davantage cette fonctionnalité, comme par exemple un plugin personnalisé de sauvegarde de base de données.
Architecture du système de mise à jour automatique
Fonctionnalités principales
Les annonces de service public (PSA)
Les annonces publiques sont conçues en utilisant le flux PSA.json fourni par Drupal.org et affichées via une simple fonction drupal_set_message().
Vérification de préparation
Les vérifications de préparation sont un système extensible permettant d’exécuter différents types de contrôles ainsi que des avertissements ou erreurs affichés dans l’interface administrateur de Drupal.
Mises à jour sur place
Les mises à jour sur place sont conçues en utilisant des « quasi-patches » hachés et signés, créés par Drupal.org. Ces quasi-patches sont vérifiés avec la bibliothèque php-libsodium, disponible et portée sur PHP version 5.3.
Après vérification, le quasi-patch est appliqué via une fonction de copie PHP — tous les fichiers modifiés par la mise à jour sont simplement réécrits.
Fonctionnalité de test
Dans la version actuelle du module « Mises à jour automatiques », l’utilisateur peut activer une version de test du canal Json Drupal.org PSA pour voir comment les informations PSA seront affichées.
Pour cela :
1. Activez le module automatic_updates_test via l’interface d’administration des modules Drupal ou avec la commande :
$ drush pm-enable automatic_updates_test
2. Configurez la variable pour activer le canal de test avec la commande :
$ drush vset automatic_updates_psa_endpoint http://localhost/automatic_updates/test-json
Si vous créez votre propre canal de test, vous pouvez remplacer l’URL de votre canal de test avec cette commande.
Pour revenir au canal officiel PSA sur Drupal.org :
1. Exécutez la commande
$ drush vset automatic_updates_psa_endpoint https://updates.drupal.org/psa.json
2. Puis désactivez le module automatic_updates_test via l’interface d’administration des modules ou avec la commande :
$ drush pm-disable automatic_updates_test
Infrastructure Drupal.org
Les mises à jour automatiques pour Drupal sont prises en charge par l’infrastructure Drupal.org et financées par les activités de la Drupal Association.
Diffusion publique des annonces (PSA)
Drupal.org fournit un flux JSON d’annonces de sécurité publiques Drupal à utiliser par le module de mise à jour automatique.
L’URL canonique de ce flux est : https://updates.drupal.org/psa.json. Un canal de test est disponible à https://updates.drupal.org/psa-this-is-only-a-test.json, qui est utilisé pour tester la fonctionnalité au besoin.
Ce canal inclut la liste actuelle des PSA actifs avec les détails suivants :
- title : le titre du PSA.
- link : l’URL du PSA complet sur Drupal.org.
- project : le nom abrégé du projet concerné par le PSA.
- type : le type de projet concerné, noyau, module, thème, distribution, etc.
- is_psa : un indicateur indiquant que le message est un PSA et non un autre type de recommandation de sécurité.
- insecure : la liste des versions vulnérables du projet, actuellement non sécurisées. Cela n’indique pas quelles versions seront marquées comme non sécurisées. Cette liste est mise à jour après la publication d’un correctif de sécurité, incluant aussi les nouvelles versions non sécurisées.
- pubDate : la date de publication du PSA.
Par exemple, si les sorties Drupal 7 et 8 du 8 mai 2019 - PSA-2019-05-07 et diverses vulnérabilités tierces - PSA-2019-09-04 étaient incluses dans psa.json, le canal ressemblerait à :
[ { "title" : "Drupal 7 and 8 release on May 8th, 2019 - PSA-2019-05-07", "insecure" : [ "4.7.0-beta3", … "8.7.0-rc1", "8.7.0", "8.7.4" ], "link" : "https://www.drupal.org/psa-2019-05-07", "pubDate" : "2019-09-20T22:09:16+00:00", "project" : "drupal", "type" : "core", "is_psa" : "1" }, { "project" : "securitydrupalorg", "pubDate" : "2019-09-12T21:35:55+00:00", "is_psa" : "1", "type" : "module", "insecure" : [], "title" : "Various 3rd Party Vulnerabilities - PSA-2019-09-04", "link" : "https://www.drupal.org/psa-2019-09-04" } ]
Ce canal est ensuite analysé par le module de mise à jour automatique pour être affiché dans l’interface administrateur Drupal. D’autres modules ou services peuvent aussi utiliser et afficher ce canal.
Génération des paquets
Le système de packaging Drupal.org produit les téléchargements .tar.gz et .zip des projets sur Drupal.org. En même temps, lorsqu’il fonctionne, il met à jour la façade Composer et, avec l’ajout de ce système de mise à jour automatique, génère des « quasi-patches » utilisés pour mettre à jour un site via le module automatic_update.
Signature des paquets et sécurité
Pour garantir que les paquets « quasi-patch » sont sûrs et vérifiables, Drupal.org utilise une architecture de hachage et signature basée sur le projet BSD Signify.
Les contributeurs Drupal ont créé une implémentation PHP de Signify, disponible dans le namespace Drupal sur GitHub : https://github.com/drupal/php-signify.
Cette bibliothèque est utilisée pour créer un hash SHA des fichiers inclus dans le hash du projet, qui est ensuite signé avec une paire de clés publique/privée générée par un HSM dans l’infrastructure Drupal.org.
Retour d’expérience
Pour laisser votre retour sur cette première génération du module de mise à jour automatique, créez un ticket dans la file des issues du module automatic_updates.