自動更新
Drupal サイトの更新は、複雑で時間がかかり、コストもかかります。一見すると単純に思えるかもしれませんが、サイト所有者に安心感を与え、サイトの可用性を確保する、安全で信頼性の高い更新は大きな課題です。
Drupal の Automatic Updates(自動更新)サービスは、このプロセスを簡素化し、更新が安全かつ正しく適用されるようにすることを目指しています。
注意:Automatic Updates は Drupal プロジェクトの戦略的な取り組みです。まだ活発に開発中であり、いくつかの重要な考慮事項があります:
- Automatic Updates モジュールはまだコアに含まれていません。現在は https://drupal.org/project/automatic_updates で contrib モジュールとして利用できます。
- このモジュールは現在 リリース候補(release candidate) です。安定版のリリースは近く予定されています。
- この第 1 フェーズには、Public Service Announcements(PSA、公共サービス告知)、準備状況チェック(readiness checks)、そして手動または cron 経由の in-place update(その場での更新) 機能が含まれます。データベース変更を伴う更新はロールバックをトリガーします。
- contrib モジュールの更新や Composer ベースのインストールはまだサポートしていません。これらは第 2 フェーズで予定されています。
Automatic Updates モジュールの主な機能
Public Service Announcements(PSA)
コアやコントリビュートモジュールのセキュリティ勧告はまれですが重大です。PSA が発行されたとき、サイト所有者は自分が最新の状態であること、そしてパッチがリリースされたときに迅速に更新できるよう、サイトが健全で準備が整っていることを確認しなければなりません。
準備状況チェック
すべてのサイトが常に自動更新の対象になるわけではありません。準備状況チェックは、サイトが安全に更新を受け取る準備ができているかどうかを判断します。たとえば、保留中のデータベース更新がある、ファイルシステムが読み取り専用である、ディスク容量が不足しているといったサイトは、準備状況チェックに合格しません。サイトは、PSA の際に自動更新の対象となるために、これらの問題を解決しなければなりません。
In-place update(その場での更新)
PSA が発行され、サイトが準備状況チェックに合格した後、自動更新サービスが更新を適用できます。
組織は更新のワークフローをカスタマイズできます――たとえば、データベース更新を実行する前に、データベースを S3 にバックアップしたり、メール通知を送信したりできます。
更新されたコードに依存するカスタムアクションは、更新中に古い PHP コードを使わないよう、コマンドラインインターフェース経由で実行すべきです。ガイダンスについては execute_updates プラグインを参照してください。
インストール
Automatic Updates モジュール は現在 contrib モジュールとして利用できます。コミュニティによるテストの後、将来のリリースで Drupal コアに含まれる予定です。
- 重要:モジュールは tarball としてダウンロードしてください。現時点では Composer ベースのインストールはサポートされていません。
- お好みの方法でモジュールをインストールします。
このモジュールは Composer ベースのサイトを想定していません。tarball ベースのインストールを前提としており、現時点ではコアの更新のみをサポートしています。Composer サポートは今後のイテレーションで追加されます。
モジュールの使い方
手動での使用
PSA 機能は、Drupal.org からのアラートを管理 UI に表示します。準備状況チェックは、サイトのステータスを確認するために定期的に実行されます。管理者は、モジュールの設定ページから in-place update を手動でトリガーできます。
無人での使用
自動更新を有効にするには、設定ページのボックスにチェックを入れて、cron 経由での更新を許可します。更新は、サイトが準備状況チェックに合格した場合にのみ行われます。
Automatic Updates を拡張する
データベース更新は複雑さがさまざまであるため、このモジュールは DB 変更を処理するためにプラグインベースのアーキテクチャを使用します。デフォルトの動作では、メンテナンスモードを有効にし、更新を実行してから、メンテナンスモードを無効にします。更新シーケンスは automatic_updates.settings.yml で設定され、settings.php で上書きできます:
$config['automatic_updates.settings']['database_update_handling'] = ['rollback', 'alternative_plugin_id'];
利用可能なプラグインには次のものがあります:
- 'execute_updates'
- 'ignore_updates'
- 'maintenance_mode_activate'
- 'maintenance_mode_disactivate'
- 'rollback'
サイト所有者は、たとえばカスタムのバックアップルーチン用に、独自のプラグインを作成できます。
システムアーキテクチャの概要
主要な要素
Public Service Announcements:Drupal.org の psa.json フィードから取得され、drupal_set_message() を介して表示されます。
準備状況チェック:プラグインベースのシステムで、サイトが更新の準備ができていないときに UI アラートとエラーを表示します。
In-place update:Drupal.org の署名およびハッシュ化された「疑似パッチ(quasi-patches)」を使用し、php-libsodium で検証します。検証されたパッチは、更新されたファイルを現在のファイルの上にコピーすることで適用されます。
テスト機能
次のコマンドを使って、テスト用の PSA フィードを有効にできます:
$ drush pm-enable automatic_updates_test
$ drush vset automatic_updates_psa_endpoint http://localhost/automatic_updates/test-json
公式フィードに戻すには:
$ drush vset automatic_updates_psa_endpoint https://updates.drupal.org/psa.json
$ drush pm-disable automatic_updates_test
Drupal.org のインフラストラクチャ
Automatic Updates は Drupal.org と Drupal Association によってサポートおよび資金提供されています。
PSA フィードの形式
PSA フィードには次が含まれます:
- title:PSA のタイトル。
- link:PSA の完全な URL。
- project:短いプロジェクト名。
- type:プロジェクトの種類(コア、モジュール、テーマなど)。
- is_psa:これが PSA であることを示すフラグ。
- insecure:安全でないバージョンの一覧。
- pubDate:公開日。
正規の PSA フィード:https://updates.drupal.org/psa.json
テストフィード:https://updates.drupal.org/psa-this-is-only-a-test.json
パッケージ生成とセキュリティ
Drupal.org のパッケージングシステムは、ダウンロード、Composer メタデータ、「疑似パッチ」を生成します。パッチのセキュリティには BSD Signify ベースの署名を使用します。
Drupal は github.com/drupal/php-signify で PHP 版の Signify 実装を保守しています。パッケージは、Drupal.org がホストする HSM から生成された鍵を使ってハッシュ化され、署名されます。
フィードバックの提供
Automatic Updates モジュールに関するフィードバックを提供するには、Automatic Updates の issue キュー で課題を投稿してください。