Atualizações Automáticas
A atualização de um site Drupal é complexa, trabalhosa e cara. É um problema complicado que à primeira vista parece simples, oferecendo atualizações seguras e confiáveis que dão confiança aos proprietários dos sites e acessibilidade aos visitantes.
O serviço de atualização automática para o Drupal foi criado para simplificar esse processo e garantir que as atualizações sejam aplicadas corretamente.
Observe que a atualização automática é uma iniciativa estratégica para o projeto Drupal. A iniciativa ainda está em fase de implementação, portanto há vários elementos importantes aos quais se deve prestar atenção:
- O módulo de atualização automática ainda não está no núcleo. Em sua forma inicial, está disponível como módulo complementar em https://drupal.org/project/automatic_updates.
- O módulo está atualmente em estado de candidato a lançamento. Um lançamento estável é esperado muito em breve.
- Nesta primeira fase, o módulo de atualizações automáticas inclui recursos de notificação de serviços públicos e verificações de prontidão e pode aplicar atualizações locais manualmente ou via cron. As atualizações que contêm atualizações de banco de dados causarão uma reversão da atualização.
- O módulo ainda não suporta atualizações de contribuições ou instalações baseadas em compositor. Estes estão planejados para a Fase 2.
Recursos principais do módulo de atualização automática
Avisos de Segurança Pública (PSA)
Os avisos de liberação crítica de segurança para módulos principais e contributos são feitos com pouca frequência. Quando um PSA é lançado, os proprietários de sites devem verificar seus sites para garantir que estejam atualizados com os últimos lançamentos, e o site esteja em bom estado para atualização rápida após os patches serem fornecidos à comunidade.
Verificações de Prontidão para Atualização
Nem todos os sites podem ser atualizados a qualquer momento. Uma verificação de prontidão é um método automatizado para determinar se um site está pronto para atualização automática após um novo lançamento ser fornecido à comunidade. Por exemplo, sites que têm atualizações de banco de dados não executadas, estão montados em sistemas de arquivos somente leitura ou não têm espaço em disco suficiente para atualizar no local não podem receber atualizações automáticas. Se o seu site não passar na verificação de prontidão e um PSA for lançado, é importante resolver os problemas subjacentes de prontidão para que o site possa atualizar rapidamente.
Atualizações no Local
Uma vez que o serviço de PSA notificou o proprietário do site Drupal sobre uma atualização disponível, e as verificações de prontidão confirmaram que o site está pronto para atualização, o serviço de atualização automática pode aplicar a atualização.
Um determinado site (ou agência ou provedor de hospedagem) pode decidir fornecer opções adicionais de processamento de BD além dessas. Por exemplo, execute um dump de BD e descarregue-o para S3 ou envie e-mails/notificações para relaxar. E finalmente, execute as atualizações de BD.
Se você estiver desenvolvendo suas próprias ações personalizadas, lembre-se de que qualquer ação que exija código que possa ter mudado durante a atualização deve ser executada usando comandos de interface de linha de comando dedicados. Caso contrário, a execução invocará a versão antiga do código. Esta é uma limitação integrada do PHP. Para exemplos de como você pode fazer isso, consulte o plugin execute_updates, que invoca um comando Symfony CLI.
Instalação
Atualmente, o módulo de atualização automática do Drupal está disponível como um módulo complementar em Drupal.org. Em uma iteração posterior e após testes significativos pela comunidade, ele será incluído no núcleo do Drupal. Nesse momento, tudo que você precisará fazer é atualizar para a versão do Drupal que inclui esse recurso.
Para instalar a versão contributo do módulo Atualizações Automáticas, você seguirá as mesmas instruções que usaria para muitos outros módulos em Drupal.org:
- Importante: baixe o módulo através de tarball. A instalação via Composer não é atualmente suportada.
- Em seguida, instale o módulo da forma preferida.
O uso desse recurso atualmente não é destinado a sites que usam o Composer. Algumas suposições foram feitas de que o site foi instalado e gerenciado a partir de arquivos de arquivo. Além disso, ele intencionalmente suporta apenas atualizações para o Drupal Core. Iterações subsequentes do módulo suportarão mais completamente instalações do Drupal baseadas em Composer e Composer.
Usando o módulo
Uso Supervisionado
O recurso PSA exibe o PSA mantido em Drupal.org diretamente na interface de administrador do Drupal para notificar os usuários sobre um próximo lançamento.
O recurso de verificação de prontidão será executado regularmente para garantir que não haja problemas que impeçam a aplicação da atualização.
Na página de configuração do módulo, o usuário pode executar manualmente uma atualização local.
Uso Sem Supervisão
Para ativar atualizações automáticas, simplesmente marque a caixa na página de configuração do módulo para executar atualizações em cron. As atualizações serão aplicadas apenas se o site passar na verificação de prontidão.
Estendendo Atualizações Automáticas
As atualizações de banco de dados podem ser complexas, e os proprietários de sites podem ser motivados de diferentes maneiras para manipular atualizações que as contenham. No Drupal 8, o módulo de atualização automática usa uma arquitetura de plugin para lidar com atualizações de banco de dados para que o sistema seja extensível.
A configuração padrão é colocar o site em modo de manutenção, executar as atualizações de BD e, em seguida, remover o site do modo de manutenção. Não há interface do usuário para alterar isso (por enquanto). A ordem e sequência do tratamento de atualizações de BD é configurável usando config em automatic_updates.settings.yml. Também pode ser substituído via settings.php $config['automatic_updates.settings']['database_update_handling'] = ['rollback', 'alternative_plugin_id', 'yet_another_plugin']. Este é um array de IDs de plugins.
Os plugins disponíveis incluídos no módulo:
- 'execute_updates'
- 'ignore_updates'
- 'maintenance_mode_activate'
- 'maintenance_mode_disactivate'
- 'rollback'
Como proprietário de site ou provedor de serviços, você pode escrever plugins adicionais para estender ainda mais essa funcionalidade, como um plugin de backup de BD personalizado.
Arquitetura do Sistema de Atualização Automática
Recursos Principais
Avisos de Segurança Pública (PSA)
Os avisos de segurança pública são projetados usando o feed PSA.json fornecido por Drupal.org e exibem os resultados usando um simples drupal_set_message().
Verificação de Prontidão
As verificações de prontidão são um sistema conectável que permite executar vários tipos de verificações, bem como avisos ou erros exibidos na interface de administrador do Drupal.
Atualizações no Local
As atualizações locais são projetadas usando "quasi-patches" com hash e assinatura criados por Drupal.org. Esses quasi-patches são verificados usando a biblioteca php-libsodium, que está disponível e foi portada para PHP versão 5.3.
Após a verificação, o quasi-patch é aplicado com a função copy do PHP - todos os arquivos alterados na atualização são simplesmente sobrescritos.
Recursos de Teste
Na versão atual do módulo "Atualizações Automáticas", o usuário pode ativar uma versão de teste do canal Json PSA de Drupal.org, permitindo ver como a informação PSA será exibida.
Para fazer isso:
1. Ative o módulo automatic_updates_test usando a interface de administrador de módulos do Drupal ou usando o comando:
$ drush pm-enable automatic_updates_test
2. Defina a variável para ativar o canal de teste usando o comando:
$ drush vset automatic_updates_psa_endpoint http://localhost/automatic_updates/test-json
Se você estiver criando seu próprio canal de teste, poderá substituir o URL do seu canal de teste por este comando.
Para voltar o canal para o canal PSA oficial em Drupal.org:
1. Comando de execução
$ drush vset automatic_updates_psa_endpoint https://updates.drupal.org/psa.json
2. E desative o módulo automatic_updates_test usando a interface de administrador de módulos do Drupal ou executando o comando:
$ drush pm-disable automatic_updates_test
Infraestrutura Drupal.org
As atualizações automáticas para o Drupal são apoiadas pela infraestrutura Drupal.org e financiadas pelas atividades da Drupal Association.
Avisos de Anúncio de Segurança Pública (PSA)
Drupal.org fornece um feed JSON de anúncios de segurança pública do Drupal para uso pelo módulo de atualizações automáticas.
A URL canônica para este feed é: https://updates.drupal.org/psa.json, o feed de teste pode ser encontrado em https://updates.drupal.org/psa-this-is-only-a-test.json, que será usado para testar a funcionalidade conforme necessário.
Este feed inclui uma lista de PSAs atualmente ativas com os seguintes detalhes:
- title: O título do PSA.
- link: A URL do PSA completo em Drupal.org.
- project: o nome curto do projeto para o qual o PSA é destinado.
- type: o tipo de projeto para o qual o PSA é destinado, núcleo, módulo, tema, distribuição etc.
- is_psa: um sinalizador que indica que a mensagem é um PSA e não outro tipo de aviso de segurança.
- insecure: uma lista de versões do projeto vulnerável que atualmente não são seguras. Isso não indica quais versões serão marcadas como inseguras. Esta lista será atualizada após a publicação de um lançamento de segurança, incluindo também novas versões inseguras.
- pubDate: a data de publicação do PSA.
Por exemplo, se os lançamentos Drupal 7 e 8 de 8 de maio de 2019 - PSA-2019-05-07 e várias vulnerabilidades de terceiros - PSA-2019-09-04 foram incluídos no psa.json, o feed seria assim:
[
{
"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"
}
]
Em seguida, este feed é analisado pelo módulo de atualização automática para exibição na interface de administrador do Drupal. Outros módulos ou serviços também podem usar e exibir este feed.
Geração de Pacotes
O sistema de empacotamento Drupal.org é o que produz os downloads de projeto .tar.gz e .zip em Drupal.org. Ao mesmo tempo em que este sistema está funcionando, também atualiza a fachada do Composer e, com a adição deste sistema de atualização automática, gera "quasi-patches" que são usados para atualizar o site usando o módulo automatic_update.
Assinatura de Pacote e Segurança
Para garantir que os pacotes 'quasi-patch' sejam seguros e possam ser verificados, Drupal.org usa uma arquitetura de hashing e assinatura de pacote baseada no projeto BSD Signify.
Os colaboradores do Drupal criaram uma implementação PHP de Signify que está disponível no namespace Drupal GitHub: https://github.com/drupal/php-signify.
Esta biblioteca é usada para criar SHA-hash dos arquivos incluídos no código de hash do projeto, que são então assinados usando um par de chaves pública/secreta gerado a partir de um HSM na infraestrutura Drupal.org.
Fornecendo Feedback
Para deixar seu feedback sobre esta primeira geração do módulo de atualizações automáticas, crie um problema na fila de problema de atualizações automáticas.