Automatische updates
Het updaten van een Drupal-site is een complexe, tijdrovende en kostbare taak. Het is een ingewikkeld probleem dat op het eerste gezicht eenvoudig lijkt: het veilig en betrouwbaar uitvoeren van updates om site-eigenaren vertrouwen te geven en de beschikbaarheid voor bezoekers te garanderen.
De automatische update-service voor Drupal is ontworpen om dit proces te vereenvoudigen en te verzekeren dat updates correct worden toegepast.
Let op: automatische updates zijn een strategisch initiatief binnen het Drupal-project. Het initiatief bevindt zich nog in ontwikkeling, dus er zijn enkele belangrijke punten om rekening mee te houden:
- De module “Automatic Updates” maakt nog geen deel uit van de core. In de huidige fase is deze beschikbaar als een contributed module op https://drupal.org/project/automatic_updates.
- De module is momenteel een release candidate. Een stabiele versie wordt binnenkort verwacht.
- In deze eerste fase bevat de module functies voor Public Service Announcements (PSA) en gereedheidscontroles, en kan updates on-site toepassen handmatig of via cron. Updates die databasewijzigingen bevatten, veroorzaken een rollback van de update.
- De module ondersteunt momenteel geen Contrib-updates of Composer-gebaseerde installaties. Deze zijn gepland voor fase 2.
Belangrijkste kenmerken van de module “Automatic Updates”
Public Service Announcements (PSA)
Kritieke beveiligingsaankondigingen voor core en contributed modules worden niet vaak uitgebracht. Wanneer een PSA wordt gepubliceerd, moeten site-eigenaren hun sites controleren om te verzekeren dat ze up-to-date zijn en dat de site in een goede staat verkeert voor een snelle update zodra patches door de community worden vrijgegeven.
Gereedheidscontroles
Niet alle sites kunnen op elk moment worden bijgewerkt. De gereedheidscontrole is een geautomatiseerde methode om te bepalen of een site klaar is voor een automatische update zodra een nieuwe release beschikbaar is. Bijvoorbeeld: sites met niet-uitgevoerde database-updates, sites met read-only bestandsystemen of onvoldoende schijfruimte kunnen geen automatische updates ontvangen. Als je site niet door de gereedheidscontrole komt en er is een PSA uitgebracht, is het belangrijk om de onderliggende problemen op te lossen zodat de site snel kan worden bijgewerkt.
On-site updates
Zodra de PSA-service de Drupal-site-eigenaar op de hoogte heeft gesteld van een beschikbare update en de gereedheidscontrole heeft bevestigd dat de site klaar is voor een update, kan de automatische update-service de update toepassen.
Een specifieke site (of bureau of hostingprovider) kan extra databaseverwerkingsopties toevoegen. Bijvoorbeeld: het maken van een database-dump en uploaden naar S3, e-mailnotificaties verzenden, en daarna de database-updates uitvoeren.
Als je aangepaste acties ontwikkelt, houd er rekening mee dat alle acties die code vereisen die tijdens de update kan veranderen, moeten worden uitgevoerd via CLI-commando’s. Anders kan de oude versie van de code worden aangeroepen. Dit is een ingebouwde beperking van PHP. Zie het execute_updates-pluginvoorbeeld dat een Symfony-consolecommando aanroept.
Installatie
Momenteel is de Automatic Updates-module beschikbaar als een contributed module op Drupal.org. In latere fasen, na uitgebreid testen door de community, zal deze in de Drupal-core worden opgenomen. Op dat moment hoef je alleen te upgraden naar de Drupal-versie die deze functie bevat.
Om de contrib-versie van de module Automatic Updates te installeren, volg je dezelfde stappen als voor de meeste andere modules op Drupal.org:
- Belangrijk: download de module via een tarball. Installatie via Composer wordt momenteel niet ondersteund.
- Installeer de module vervolgens op je gebruikelijke manier.
Deze module is momenteel niet bedoeld voor sites die Composer gebruiken. Er wordt aangenomen dat de site is geïnstalleerd en beheerd via archiefbestanden. Bovendien ondersteunt de module op dit moment alleen updates van Drupal Core. Latere versies zullen volledige ondersteuning voor Composer-gebaseerde installaties bieden.
Gebruik van de module
Handmatig gebruik
De PSA-functie toont meldingen van Drupal.org rechtstreeks in het Drupal-beheerinterface om gebruikers te waarschuwen voor aankomende releases.
De gereedheidscontrole wordt regelmatig uitgevoerd om te garanderen dat er geen problemen zijn die een update verhinderen.
Op de configuratiepagina van de module kan een beheerder handmatig een on-site update uitvoeren.
Automatisch gebruik
Om automatische updates in te schakelen, vink je op de configuratiepagina de optie aan om updates via cron uit te voeren. Updates worden alleen toegepast als de site slaagt voor de gereedheidscontrole.
Uitbreiding van automatische updates
Database-updates kunnen complex zijn, en site-eigenaren kunnen verschillende voorkeuren hebben voor hoe deze updates worden uitgevoerd. In Drupal 8 gebruikt de module Automatic Updates een pluginarchitectuur voor database-updates, zodat het systeem uitbreidbaar blijft.
De standaardconfiguratie zet de site in onderhoudsmodus, voert database-updates uit en schakelt daarna onderhoudsmodus uit. Er is (nog) geen gebruikersinterface om dit te wijzigen. De volgorde van database-updateacties kan worden ingesteld via config in automatic_updates.settings.yml of overschreven in settings.php met bijvoorbeeld:
$config['automatic_updates.settings']['database_update_handling'] = ['rollback', 'alternative_plugin_id', 'yet_another_plugin'];
Beschikbare ingebouwde plugins:
- 'execute_updates'
- 'ignore_updates'
- 'maintenance_mode_activate'
- 'maintenance_mode_disactivate'
- 'rollback'
Als site-eigenaar of serviceprovider kun je extra plugins schrijven om deze functionaliteit verder uit te breiden, bijvoorbeeld een aangepaste plugin voor databaseback-ups.
Architectuur van het automatische updatesysteem
Belangrijkste componenten
Public Service Announcements (PSA)
PSA’s worden opgehaald via het JSON-kanaal PSA.json
van Drupal.org en weergegeven in Drupal via eenvoudige drupal_set_message()
-meldingen.
Gereedheidscontroles
Gereedheidscontroles zijn een uitbreidbaar systeem waarmee verschillende soorten validaties en waarschuwingen kunnen worden uitgevoerd en weergegeven in het Drupal-beheerinterface.
On-site updates
On-site updates maken gebruik van gehashte en ondertekende “quasi-patches” die door Drupal.org worden gegenereerd. Deze patches worden geverifieerd met behulp van de php-libsodium bibliotheek, die beschikbaar is vanaf PHP 5.3.
Na verificatie wordt de patch toegepast met PHP’s kopieerfunctie — waarbij alle gewijzigde bestanden in de update worden overschreven.
Testfunctionaliteit
In de huidige versie van de module Automatic Updates kan de gebruiker een test-JSON-kanaal inschakelen om te zien hoe PSA-informatie zal worden weergegeven.
Om dit te doen:
1. Schakel de module automatic_updates_test in via het Drupal-beheerinterface of met het commando:
$ drush pm-enable automatic_updates_test
2. Stel de variabele in om het testkanaal te gebruiken met het commando:
$ drush vset automatic_updates_psa_endpoint http://localhost/automatic_updates/test-json
Als je een eigen testkanaal hebt, vervang je de URL door jouw testadres.
Om terug te keren naar het officiële PSA-kanaal van Drupal.org:
1. Voer het volgende commando uit:
$ drush vset automatic_updates_psa_endpoint https://updates.drupal.org/psa.json
2. Schakel vervolgens de module automatic_updates_test uit via het beheerinterface of met:
$ drush pm-disable automatic_updates_test
Drupal.org-infrastructuur
Automatische updates voor Drupal worden ondersteund door de infrastructuur van Drupal.org en gefinancierd door de activiteiten van de Drupal Association.
Public Service Announcements (PSA)
Drupal.org biedt een JSON-feed met publieke beveiligingsaankondigingen voor gebruik door de module Automatic Updates.
De officiële URL voor dit kanaal is https://updates.drupal.org/psa.json. Een testkanaal is beschikbaar op https://updates.drupal.org/psa-this-is-only-a-test.json, dat wordt gebruikt voor testdoeleinden.
Het kanaal bevat een lijst met actieve PSA’s met details zoals:
- title: De titel van de PSA.
- link: De URL naar de volledige PSA op Drupal.org.
- project: De projectnaam waarop de PSA betrekking heeft.
- type: Het type project (core, module, thema, distributie, enz.).
- is_psa: Een vlag die aangeeft dat het bericht een PSA is.
- insecure: Lijst met kwetsbare versies van het project die momenteel onveilig zijn.
- pubDate: De publicatiedatum van de PSA.
Bijvoorbeeld, als de releases van Drupal 7 en 8 op 8 mei 2019 – PSA-2019-05-07 en diverse kwetsbaarheden van derden – PSA-2019-09-04 in psa.json zijn opgenomen, zal het kanaal er als volgt uitzien:
[ { "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" } ]
Dit kanaal wordt vervolgens geanalyseerd door de module Automatic Updates en weergegeven in het Drupal-beheerinterface. Andere modules of services kunnen dit kanaal ook gebruiken en weergeven.
Pakketgeneratie
Het verpakkingssysteem van Drupal.org genereert de downloadbare .tar.gz- en .zip-projectbestanden. Tegelijkertijd werkt het de Composer-facade bij en genereert het “quasi-patches”, die worden gebruikt voor updates via de Automatic Updates-module.
Pakketondertekening en beveiliging
Om te garanderen dat “quasi-patches” veilig zijn en kunnen worden geverifieerd, gebruikt Drupal.org een hash- en ondertekeningssysteem gebaseerd op het BSD Signify-project.
Drupal-ontwikkelaars hebben een PHP-implementatie van Signify gemaakt, beschikbaar op GitHub: https://github.com/drupal/php-signify.
Deze bibliotheek wordt gebruikt om SHA-hashes van projectbestanden te genereren, die vervolgens worden ondertekend met een publieke/privésleutelpaar dat in de Drupal.org-infrastructuur via HSM wordt beheerd.
Feedback geven
Om feedback te geven over deze eerste generatie van de module Automatic Updates, maak een issue aan in de issue queue van Automatic Updates.