Aggiornamenti automatici
L’aggiornamento di un sito Drupal è un processo complesso, che richiede tempo e può essere costoso. Si tratta di una sfida tecnica che, pur sembrando semplice, deve garantire aggiornamenti sicuri e affidabili per offrire fiducia ai proprietari dei siti e continuità di accesso ai visitatori.
Il servizio di aggiornamento automatico per Drupal è stato ideato per semplificare questo processo e garantire che gli aggiornamenti vengano applicati correttamente.
Nota: gli aggiornamenti automatici rappresentano un’iniziativa strategica per il progetto Drupal. L’iniziativa è ancora in fase di sviluppo, quindi ci sono diversi aspetti importanti da considerare:
- Il modulo di aggiornamento automatico non è ancora incluso nel core. Nella sua forma iniziale è disponibile come modulo aggiuntivo su https://drupal.org/project/automatic_updates.
- Attualmente il modulo è un release candidate. Una versione stabile è attesa a breve.
- In questa prima fase, il modulo Automatic Updates include funzioni di notifica di servizio pubblico (PSA) e verifiche di preparazione, oltre alla possibilità di applicare aggiornamenti in loco manualmente o tramite cron. Gli aggiornamenti che includono modifiche al database causeranno il rollback dell’operazione.
- Il modulo, per ora, non supporta aggiornamenti di moduli Contrib o installazioni basate su Composer. Queste funzionalità sono previste per la Fase 2.
Caratteristiche principali del modulo Automatic Updates
Annunci di Servizio Pubblico (PSA)
Gli avvisi di sicurezza critici per i moduli core e aggiuntivi vengono pubblicati raramente. Quando viene emesso un PSA, i proprietari dei siti devono verificare che i propri siti siano aggiornati e in buone condizioni per poter applicare rapidamente le patch fornite dalla comunità.
Verifiche di preparazione all’aggiornamento
Non tutti i siti possono essere aggiornati in qualsiasi momento. La verifica di preparazione è un controllo automatico che determina se il sito è pronto per un aggiornamento automatico quando viene rilasciata una nuova versione. Ad esempio, siti con aggiornamenti del database non eseguiti, file system in sola lettura o spazio su disco insufficiente non potranno ricevere aggiornamenti automatici. Se il tuo sito non supera la verifica e viene pubblicato un PSA, è importante risolvere questi problemi per poter aggiornare il sito tempestivamente.
Aggiornamenti in loco
Quando il servizio PSA notifica al proprietario del sito Drupal la disponibilità di un aggiornamento e la verifica di preparazione conferma che il sito è pronto, il servizio Automatic Updates può applicare l’aggiornamento.
Un sito (o un’agenzia o un provider di hosting) può scegliere di aggiungere ulteriori operazioni di gestione del database. Ad esempio, eseguire un dump del database e salvarlo su S3 o inviare notifiche email prima di procedere con l’aggiornamento. Infine, eseguire gli aggiornamenti del database.
Se sviluppi azioni personalizzate, tieni presente che qualsiasi azione che richieda codice potenzialmente modificato durante l’aggiornamento deve essere eseguita tramite comandi CLI dedicati. Altrimenti, rischieresti di eseguire una vecchia versione del codice — una limitazione intrinseca di PHP. Esempi di implementazione sono disponibili nel plugin execute_updates, che utilizza un comando della console Symfony.
Installazione
Attualmente, il modulo Automatic Updates per Drupal è disponibile come modulo contrib su Drupal.org. In una fase successiva, dopo un ampio periodo di test da parte della comunità, verrà incluso nel core di Drupal. A quel punto sarà sufficiente aggiornare Drupal alla versione che include questa funzionalità.
Per installare la versione contrib del modulo Automatic Updates, segui le stesse istruzioni che useresti per qualsiasi altro modulo di Drupal.org:
- Importante: scarica il modulo come pacchetto tarball. L’installazione tramite Composer non è ancora supportata.
- Installa poi il modulo con il metodo che preferisci.
L’uso di questo modulo non è attualmente pensato per siti gestiti con Composer. Si presume che il sito sia installato e gestito tramite pacchetti archivio. Inoltre, il modulo supporta al momento solo gli aggiornamenti del Core di Drupal. Le versioni successive supporteranno pienamente installazioni basate su Composer.
Utilizzo del modulo
Uso manuale
La funzione PSA mostra gli avvisi di servizio direttamente nell’interfaccia di amministrazione di Drupal per informare gli utenti sugli aggiornamenti imminenti.
La funzione di verifica della preparazione viene eseguita regolarmente per assicurarsi che non ci siano problemi che possano impedire l’applicazione dell’aggiornamento.
Dalla pagina di configurazione del modulo, l’utente può anche avviare manualmente un aggiornamento in loco.
Uso automatico
Per abilitare gli aggiornamenti automatici, seleziona la casella di controllo nella pagina di configurazione del modulo per consentire l’esecuzione tramite cron. Gli aggiornamenti verranno applicati solo se il sito supera la verifica di preparazione.
Estendere Automatic Updates
Gli aggiornamenti del database possono essere complessi, e i proprietari dei siti possono voler gestire tali processi in modi diversi. In Drupal 8, il modulo Automatic Updates utilizza un’architettura a plugin per gestire gli aggiornamenti del database, rendendo il sistema estensibile.
Per impostazione predefinita, il sito viene messo in modalità manutenzione, vengono eseguiti gli aggiornamenti del database e poi il sito viene riattivato. Non esiste ancora un’interfaccia grafica per modificare questo comportamento. L’ordine delle operazioni di aggiornamento del DB è configurabile tramite config in automatic_updates.settings.yml. Puoi anche sovrascriverlo da settings.php con: $config['automatic_updates.settings']['database_update_handling'] = ['rollback', 'alternative_plugin_id', 'yet_another_plugin']; Si tratta di un array di ID di plugin.
Plugin disponibili nel modulo:
- 'execute_updates'
- 'ignore_updates'
- 'maintenance_mode_activate'
- 'maintenance_mode_disactivate'
- 'rollback'
Come proprietario di un sito o fornitore di servizi, puoi creare plugin personalizzati per estendere ulteriormente la funzionalità, come ad esempio un plugin di backup personalizzato del database.
Architettura del sistema Automatic Updates
Caratteristiche principali
Annunci di Servizio Pubblico (PSA)
Gli annunci PSA vengono forniti tramite il feed PSA.json di Drupal.org e visualizzati attraverso un semplice drupal_set_message().
Verifiche di preparazione
Le verifiche di preparazione sono basate su un sistema a plugin che consente l’esecuzione di vari tipi di controlli, con avvisi o errori mostrati nell’interfaccia amministrativa di Drupal.
Aggiornamenti in loco
Gli aggiornamenti in loco utilizzano “quasi-patch” firmati e con hash generati da Drupal.org. Questi pacchetti vengono verificati tramite la libreria php-libsodium, disponibile da PHP 5.3.
Dopo la verifica, la quasi-patch viene applicata sovrascrivendo i file aggiornati con una semplice funzione di copia PHP.
Funzionalità di test
Nella versione corrente, il modulo Automatic Updates consente di attivare un canale JSON di test da Drupal.org PSA per visualizzare come vengono mostrati gli avvisi.
Per farlo:
$ drush pm-enable automatic_updates_test
Abilita poi il canale di test con:
$ drush vset automatic_updates_psa_endpoint http://localhost/automatic_updates/test-json
Per tornare al canale ufficiale PSA di Drupal.org:
$ drush vset automatic_updates_psa_endpoint https://updates.drupal.org/psa.json $ drush pm-disable automatic_updates_test
Infrastruttura Drupal.org
Gli aggiornamenti automatici per Drupal sono supportati dall’infrastruttura di Drupal.org e finanziati dalla Drupal Association.
Feed PSA pubblico
Drupal.org fornisce un feed JSON di avvisi di sicurezza per il modulo Automatic Updates.
URL canonico del feed: https://updates.drupal.org/psa.json Feed di test: https://updates.drupal.org/psa-this-is-only-a-test.json
Ogni voce PSA include:
- title: titolo dell’annuncio PSA.
- link: URL dell’avviso completo su Drupal.org.
- project: nome breve del progetto.
- type: tipo di progetto (core, modulo, tema, distribuzione, ecc.).
- is_psa: flag che indica che si tratta di un PSA.
- insecure: elenco delle versioni vulnerabili.
- pubDate: data di pubblicazione.
Il modulo analizza questo feed e mostra le informazioni nell’interfaccia di amministrazione Drupal. Altri moduli o servizi possono utilizzarlo allo stesso modo.
Generazione dei pacchetti
Il sistema di packaging di Drupal.org produce i file .tar.gz e .zip e aggiorna anche i metadati Composer. Con l’introduzione di Automatic Updates, genera inoltre i “quasi-patch” utilizzati per gli aggiornamenti automatici.
Firma e sicurezza dei pacchetti
Per garantire l’integrità dei quasi-patch, Drupal.org utilizza un sistema di hashing e firma basato su BSD Signify. È disponibile un’implementazione PHP di Signify su https://github.com/drupal/php-signify.
Questa libreria crea un hash SHA dei file del progetto, che viene poi firmato tramite una coppia di chiavi generate in modo sicuro (HSM) dall’infrastruttura di Drupal.org.
Fornire feedback
Per inviare feedback su questa prima versione del modulo Automatic Updates, apri una issue nella coda del progetto Automatic Updates.