Создание простейшего сервера обновления Firefox/Thunderbird при помощи Apache и PHP
Цель этого документа заключается в предоставлении основных инструкций по настройке собственного сервера обновлений.
Firefox обеспечивает службы обновления с помощью веб-службы REST - которая содержится в URL при условии наличия XML-файла в этом URL, описывающего доступное обновление.
Во-первых, давайте поговорим о формате URL. Вот URL используемый для обновления Firefox с версии 3.5.2 до Firefox версии 3.5.3:
- Windows
https://aus2.mozilla.org/update/3/Fi...ult/update.xml
- Mac OS X
https://aus2.mozilla.org/update/3/Fi...ult/update.xml
Формат URL выглядит так:
https://aus2.mozilla.org/update/3/%PRODUCT%/%VERSION%/%BUILD_ID%/%BUILD_TARGET%/%LOCALE%/%CHANNEL%/%OS_VERSION%/%DISTRIBUTION%/%DISTRIBUTION_VERSION%/update.xml
Этот URL-адрес может отображаться в браузере через about:config
как app.update.url
, но чтобы изменить его, вы должны создать новую строку под названием app.update.url.override
которая содержит ваше новое значение.
В нашем примере, мы должны поместить update.xml
на сервере в полном пути, указанном в URL обновлений. Таким образом, в корне вашего веб-сервера, нужно создать путь:
mkdir -p update.dir/3/Firefox/3.5.2/20090729225027/WINNT_x86-msvc/en-US/release/Windows_NT\ 6.0/default/default
Взять файл update.xml
из aus2.mozilla.org и поместить его в самой последней папке default
:
<?xml version="1.0"?> <updates> <update type="minor" version="3.5.3" extensionVersion="3.5.3" buildID="20090824101458" detailsURL="https://www.mozilla.com/en-US/firefox/3.5.3/releasenotes/"> <patch type="complete" URL="https://download.mozilla.org/?product=firefox-3.5.3-complete&os=win&lang=en-US" hashFunction="SHA512" hashValue="f8abbaea98bd453b651c24025dbb8cea5908e532ca64ad7150e88778ccb77c0325341c0fecbec37f31f31cdf7e13955c28140725282d2ce7c4a37c89a25319a1" size="10728423"/> <patch type="partial" URL="https://download.mozilla.org/?product=firefox-3.5.3-partial-3.5.2&os=win&lang=en-US" hashFunction="SHA512" hashValue="20b133f1bd2025360bda8ef0c53132a5806dbd0606e0fe7c6d1291d1392532cc960262f87b0c7d4fbe8f9bc9fba64ed28ecd89b664c17f51f98acdd76b26ea6a" size="2531877"/> </update> </updates>
Если вы хотите, чтобы эти сборки были загружены с вашего сервера вместо download.mozilla.org, скопируйте их на сервер и отредактируйте файл update.xml
чтобы изменить ссылки URL.
Далее, мы должны настроить сервер Apache, так чтобы можно было создать файл PHP для обработки веб-службы.
Сначала в httpd.conf
, убедитесь что параметр AllowOverride
установлен в значение FileInfo
для корневого каталога. Затем добавьте следующие строки в ваш файл .htaccess
(вам, возможно, придется создать его) в корневом каталоге:
<FILES update> ForceType application/x-httpd-php </FILES>
Это укажет веб-серверу обработать update
в виде файла PHP. Теперь создайте файл PHP с именем update
в корневом каталоге:
<?php header("Content-type: text/xml"); $path = preg_replace('/^\/update/', 'update.dir', urldecode($_SERVER["REQUEST_URI"])); echo (file_exists($path)) ? file_get_contents($path) : '<?xml version="1.0"?><updates></updates>'; ?>
Теперь, если вы идете по следующему адресу, вы должны увидеть содержимое XML.
https://localhost/update/3/Firefox/3.5.2/20090729225027/WINNT_x86-msvc/en-US/release/Windows_NT%206.0/default/default/update.xml
Наконец, установите параметр app.update.url.override
в следующее значение URL через about:config
(или MCD), а затем выберите Проверка обновлений в меню Справка. Вы должны получить обновление, если оно имеется.
https://localhost/update/3/%PRODUCT%/%VERSION%/%BUILD_ID%/%BUILD_TARGET%/%LOCALE%/%CHANNEL%/%OS_VERSION%/%DISTRIBUTION%/%DISTRIBUTION_VERSION%/update.xml
Соображения безопасности
Вы можете заметить, что URL обновления Firefox по умолчанию использует HTTPS выше и обслуживается поверх SSL. SSL действительно помещает дополнительную нагрузку на сервер, и вы можете захотеть использовать обычный HTTP - нет!
Каждый пользователь будет пинговать сервер обновлений регулярно, есть ли обновление или нет (один раз в день по умолчанию). Любой пользователь, который подключается снаружи защищенной сети - в частности, из общественной точки доступа WiFi - потенциально может подключиться и подложить вредоносное обновление. SSL защищает от этой атаки. Файл update.xml
маленькие, не увеличивают нагрузку SSL.
Большие обновления могут быть безопасно обслужены с незащищенного сервера, потому что файлы обновления содержат хэш, который клиент проверять. Хэшу можно доверять, только если update.xml доставляется надежно.