このドキュメントの目標は、企業内で独自の更新サーバを構築するための基本的な手順を説明することです。本文では Firefox について説明していますが、Thunderbird にも同様の仕組みが備わっています。
はじめに
Firefox は RESTful な Web サービスを利用して更新サービスを提供しています。Firefox は、XML 形式の更新情報ファイルが置かれている URL を定期的に参照し、そのファイルに記載されている情報に従って更新を行います。
まず、URL の形式について説明しましょう。この URL は、app.update.url
という設定項目で以下のように指定されています。
https://aus2.mozilla.org/update/3/%PRODUCT%/%VERSION%/%BUILD_ID%/%BUILD_TARGET%/%LOCALE%/%CHANNEL%/%OS_VERSION%/%DISTRIBUTION%/%DISTRIBUTION_VERSION%/update.xml
ユーザの環境によって変数に値が代入され、実際に参照する URL が決まります。以下は、Firefox 9 から Firefox 9.0.1 へ更新する際に利用される URL です。
- Windows Vista / 日本語版
-
https://aus3.mozilla.org/update/3/Fi...ult/update.xml
- Mac OS X / 日本語版
-
https://aus2.mozilla.org/update/3/Fi...ult/update.xml
このドキュメントでは、Firefox 9 の Windows 向け日本語版を例に取って説明します。
クライアントサイドの設定
app.update.url
の値を自社の URL に変更します。これを変更するには、Firefox 設定エディタ (Firefox のロケーションバーで about:config
と入力) を開き、app.update.url.override
という名前で新しい文字列形式の設定を作成し、新たな値を指定する必要があります。既定の更新 URL は、上記のように様々な変数が含まれていますが、通常は、製品、バージョン、ロケール、プラットフォームを判別するだけでも十分でしょう。以下、myserver
はあなたのサーバに読み替えてください。
https://myserver/update/%PRODUCT%/%VERSION%/%LOCALE%/%BUILD_TARGET%/update.xml
集中管理機能 (MCD) を使って設定する場合は、サーバサイドの設定ファイル (autoconfig.jsc
) に以下の行を追加します。
lockPref("app.update.url.override", "https://myserver/update/%PRODUCT%/%VERSION%/%LOCALE%/%BUILD_TARGET%/update.xml");
サーバサイドの設定
まず、aus2.mozilla.org から、オリジナルの更新情報ファイル (update.xml
) を取得してきます。取得元は上記の通りですが、変数のうちバージョンごとに変わるビルド ID は、Web コンソール を開いて navigator.buildID
と入力することで確認できます。不明な場合は、初期設定の Firefox で HTTP ログ を有効にし、更新チェックを行って (更新はキャンセルして構いません) Firefox を終了させ、ログから URL を特定します。
取得した update.xml
ファイルを、app.update.url.override
の設定に合わせてサーバ上に置き、実際の URL にアクセスして XML が表示されることを確認します。また、Firefox 9 の [ヘルプ] メニューから [ソフトウェアの更新を確認] を選択し、更新が見つかることを確認します。
https://myserver/update/Firefox/9.0/ja/WINNT_x86-msvc/update.xml
<?xml version="1.0"?> <updates> <update type="minor" displayVersion="9.0.1" appVersion="9.0.1" platformVersion="9.0.1" buildID="20111220165912" detailsURL="https://www.mozilla.com/ja/firefox/9.0.1/releasenotes/"> <patch type="complete" URL="https://download.mozilla.org/?product=firefox-9.0.1-complete&os=win&lang=ja" hashFunction="SHA512" hashValue="82fb329eb72e417e2d924842998f7afc1b4a8831a5a9ca56b761f7f1c997aa4c04f86b53df08f9228548d4562d303b61410d4f2e9fa62ce1f0cc675331adaa91" size="19644083"/> <patch type="partial" URL="https://download.mozilla.org/?product=firefox-9.0.1-partial-9.0&os=win&lang=ja" hashFunction="SHA512" hashValue="0478ec3a615f918142f83e8fbc30e6885c281c5c57479b9673f292d22fbbd1b11a04e50fb949937de7d5c41e13ab8d382d6c4e015ff9f737afac06a866cdcb50" size="2005104"/> </update> </updates>
ダウンロードサーバの変更
更新バイナリ (パッチ) を download.mozilla.org ではなくあなたのサーバからダウンロードさせたい場合は、update.xml
に書かれている URL からバイナリを取得し、あなたのサーバへコピーしてから、update.xml
ファイル内の URL をあなたのサーバに変更します。更新バイナリには、通常の更新に使用される差分版 (partial) と、差分更新が失敗した場合にダウンロードされる完全版 (complete) の 2 種類があることに留意してください。
<?xml version="1.0"?> <updates> <update type="minor" displayVersion="9.0.1" appVersion="9.0.1" platformVersion="9.0.1" buildID="20111220165912" detailsURL="https://www.mozilla.com/ja/firefox/9.0.1/releasenotes/"> <patch type="complete" URL="https://myserver/update/Firefox/9.0.1/ja/WINNT_x86-msvc/complete.mar" hashFunction="SHA512" hashValue="82fb329eb72e417e2d924842998f7afc1b4a8831a5a9ca56b761f7f1c997aa4c04f86b53df08f9228548d4562d303b61410d4f2e9fa62ce1f0cc675331adaa91" size="19644083"/> <patch type="partial" URL="https://myserver/update/Firefox/9.0.1/ja/WINNT_x86-msvc/partial.mar" hashFunction="SHA512" hashValue="0478ec3a615f918142f83e8fbc30e6885c281c5c57479b9673f292d22fbbd1b11a04e50fb949937de7d5c41e13ab8d382d6c4e015ff9f737afac06a866cdcb50" size="2005104"/> </update> </updates>
例えば IT 部門で検証が終わるまで更新を提供しないときは、以下のように XML ファイルの内容を空にしておきます。
<?xml version="1.0"?> <updates></updates>
セキュリティに関する配慮
Firefox の既定の更新 URL は HTTPS で、SSL を通じて提供されていることに気付いたかもしれません。SSL はサーバに若干の読み込み負荷を与えるので、通常の HTTP を使用したい気にさせられるでしょう。しかしそれはいけません。
すべてのユーザは、更新の有無にかかわらず、更新サーバに定期的に問い合わせを行います (初期設定では 1 日 1 回となっています)。保護されているネットワークの外部、特に公共の無線 LAN スポットから接続しているユーザにとっては、接続をハイジャックされて悪質な更新バイナリをダウンロードさせられる潜在的な可能性があります。SSL はこの手の攻撃から守ってくれます。update.xml
ファイルは小さなものなので、SSL の経費をケチったりしないでください。
大きな更新バイナリそのものは、安全でないサーバから安全にダウンロードすることができます。これは、更新情報ファイル (update.xml
) にクライアント検証用のハッシュ値が含まれているためです。このハッシュ値は update.xml
が安全に提供されている場合のみ信頼されます。