Россия, Звенигород |
Система распространения и установки - XPInstall
17.1. Описание инсталляционных стратегий
Любая возможность, которую только можно вообразить, доступна при инсталляции приложений Mozilla. Возможности, рассматриваемые здесь, это: вовсе обойтись без инсталляции, установка вручную, комбинированная установка (piggy-back), собственно установка платформы, - и установка со своим личным инсталлятором. Удаленная установка, главная тема данной лекции, подробно обсуждается отдельно.
Простейший способ получить доступ к приложению Mozilla - ничего не инсталлировать вовсе. В этом случае пользователь имеет платформу на локальном компьютере. Приложение грузится из web как серия файлов XUL и всего, что им нужно, то есть оверлеев, стилевых таблиц и скриптов. Чтобы получить документ XUL с web-сайта, просто удостоверьтесь, что тип MIME для файлов .xul имеет значение
application/vnd.mozilla.xul+xml
Если этому не воспрепятствует система безопасности на локальном компьютере, подобное приложение получит такие же права доступа к локальному компьютеру, как и любое иное приложение, установленное в chrome.
Web штука все еще медленная, так что необходимо обратить внимание на производительность. Документы XUL, стилевые таблицы и скрипты кешируются в браузере, так что если в кеше достаточно места, это неплохое начало. Корректные значения параметров в браузере клиента и на сервере могут уменьшить необходимый трафик почти до нуля. На стороне клиента нужно активировать XUL-кеш, а на платформе Windows требуется еще включить функцию Quick Launch (быстрая загрузка приложений). Функция FastLoad загружает платформу в память при старте операционной системы, точно так же, как Internet Explorer. FastLoad становится доступна при первой инсталляции Mozilla или Netscape. Также, файлы XUL могут распространяться по сети как файлы JAR, что тоже улучшает производительность. URL файлов в JAR-архиве имеют вид:
jar:{url}!{path}
Где {url} - адрес архива JAR, а {path} - положение данного файла в нем. Если файл JAR - example.jar - сохранен в корень директории chrome и содержит файл test/sample.xul, то полный путь к файлу sample.xul будет:
jar:resource:/chrome/example.jar!test/sample.xul
Как уже говорилось в "Оверлеи и Chrome" , "Оверлеи и Chrome", схема resource:URL указывает в корень платформы, а chrome:URLs обычно привязана к resource:URLs.
Если используется параметр командной строки -chrome или некоторый параметр, специфичный для данного приложения (как -jsconsole ), то стартовавшее приложение XUL может ничем не напоминать браузер вообще. Такие приложения полностью выглядят как локальные.
Если же вернуться к процессу инсталляции, то имеются следующие возможности.
Если необходима локальная инсталляция, самый простой путь - установить приложение вручную. Для этого нам потребуются доступ к локальной файловой системе и к командной строке.
Для инсталляции приложения вручную есть немало оснований. Для разработчика это способ тестирования. Для системного администратора - средство проследить за тем, что происходит в системе при работе автоматизированных инструментов. Для системного интегратора используемые здесь ресурсы - рабочие инструменты, объединяемые им затем в бОльшую, интегрированную систему.
Существуют разные типы установки вручную: установка собственно платформы, установка компонентов, приложений и установка системы безопасности. Установка платформы - это установка собственно платформы Mozilla. Она всегда требует выполняемого файла в платформо-зависимом виде, и в этой книге называется собственно установкой. Только после того, как это сделано однажды, возможны другие типы установки.
Установка компонентов вручную добавляет новые компоненты и интерфейсы XPCOM к уже установленной платформе. Эти компоненты становятся доступны всем установленным приложениям. Чтобы инсталлировать новые компоненты и интерфейсы, необходимо:
- Создать модуль Mozilla. Модуль - это реализация одного или более компонентов и одного или более интерфейсов, так что это задача для программиста. Модулем может быть файл .js на языке JavaScript, или на компилируемом языке, C или C++.
- Создать компоненты. Для этого нужно превратить модуль в исполняемый код. Для .js ничего делать не требуется. Файлы C/C++ нужно скомпилировать в динамически линкуемую библиотеку, используя сборочную среду Mozilla.
- Создать интерфейсы. Интерфейс хранится в файле .idl, который автор компонента должен создать. Пропустите XPIDL файл .idl через утилиту xpidlgen, чтобы получить файл библиотеки .xpt. xpidlgen входит в состав сборочной среды Mozilla, так что потребуется либо собрать Mozilla из исходников, либо найти сборку с включенным параметром debug.
- Скопировать файлы .js и .xpt в директорию компонентов в инсталляционной директории платформы. Либо скопировать туда динамически линкуемую библиотеку. Важно убедиться, что скопированные файлы читаемы (и выполнимы в случае библиотеки).
- Запустить утилиту regxpcom из инсталляционной директории Mozilla. Данная утилита поставляется вместе с платформой. Это создаст необходимые строки (манифесты) в файлах compreg.dat и xpti.dat.
- Перестартовать платформу, которая теперь сможет воспользоваться новыми файлами .dat. Компоненты и интерфейсы будут доступны из скриптов.
Исходный код Mozilla содержит пример компонента nsSample и интерфейса nsISample, посмотрите исходный код в директории xpcom/sample.
Установка приложения вручную добавляет новые XUL-файлы в chrome. Эти файлы собраны в пакеты. Чтобы добавить пакет в chrome, необходимо выполнить следующие шаги.
- Создать пакет. Пакет - это набор файлов, удовлетворяющих стандартной структуре директорий content, skin и locale. Эти файлы можно упаковать в JAR архив, а можно оставить как простую иерархию папок и файлов.
- Создать и добавить в пакет файл contents.rdf. Пакет еще не пакет без этих файлов. Нужен один файл в директорию content, и по одному в каждую директорию skin и locale.
- Скопировать пакет или иерархию файлов в директорию chrome.
- Обновить файл installed-chrome.txt, расположенный в директории chrome. Обычно нужно добавить по строчке на каждую content, locale и skin части пакета.
- Удалить директорию chrome/overlayinfo, если этот пакет уже устанавливался ранее (а вы сейчас обновляете его). Это обновит систему оверлеев.
- Перестартовать платформу. Все эти шаги иллюстрировались на примере приложения NoteTaker в первых пяти лекциях этого курса. В лекции 12, "Оверлеи и Chrome", обсуждался механизм регистра chrome, который эти файлы использует.
Строки, добавляемые в installed-chrome.txt должны иметь следующую форму:
skin,install,url,{url}/ locale,install,url,{url}/ content,install,url,{url}/
где {url} должен указывать на локальную директорию и обычно имеет форму jar: или resource:. Схема resource: указывает на корень платформы Mozilla - родительскую директорию директории chrome. URL локалей должен включать имена локалей, такие как en-US ; URL скинов должны включать имена скинов, например, modern.
Безопасное инсталлирование может требоваться для приложений вне chrome. Такие приложения могут инсталлироваться на локальный диск, а могут загружаться из web, и в обоих случаях работать в окружении, обеспечивающем безопасность. Для тог, чтобы это окружение было доступно без особых усилий со стороны пользователя, платформе должны быть добавлены определенные конфигурационные файлы. Такие файлы нужно создать вручную, но устанавливаться они могут как вручную, так и автоматически.
Чтобы создать эти файлы, начните с создания нового пользовательского профиля, с помощью менеджера профилей Mozilla. Скопируйте все файлы профиля, чтобы сохранить оригинал. Затем следует инсталлировать приложение куда нужно. Запустите приложение, используя новый профиль, и не выполняя никаких особенных настроек или других изменений. Каждый раз, когда платформа будет спрашивать о правах на некоторое действие (например, о доступе к файлу с цифровой подписью или форме ввода), дайте такое разрешение. Каждый раз, когда она попросит разрешения запомнить данное решение, соглашайтесь. Пройдя через все аспекты безопасности, закройте приложение и скопируйте все изменившиеся в профиле файлы - сравните их с оригиналом. Это как раз те файлы, которые нужно установить вручную на каждую машину, где будет работать данное приложение. Другой способ - скопировать их в профиль по умолчанию.
И комбинированная (piggy-back), и собственно родная установка платформы требуют использования и модификации сборочного окружения Mozilla. Сборочное окружение здесь не рассматривается, но несколько замечаний все же стоит сделать.
Комбинированная установка - это просто установка платформы Mozilla, модифицированной так, чтобы включить добавочное приложение. Такая дистрибуция имеет два преимущества: она содержит стандартную версию платформы (и стандартных приложений) и встраивает все необходимые задачи в знакомую последовательность действий. Когда модифицированная платформа установлена, добавочное приложение автоматически становится доступно.
Чтобы выполнить эту работу, нужно изменить сборочное окружение Mozilla. К счастью, некоторые такие системы управляются своими же данными, которые можно посмотреть. Можно начать, посмотрев файлы примеров в директории xpinstall/packager. Необходимо внести, по крайней мере, три изменения:
- Манифест, в котором перечисляются все файлы, помещаемые в финальный комплект, нужно обновить. Для этого следует отредактировать файлы, подобные packages-unix.
- Нужно обновить конфигурацию интерактивного подсказчика, инсталлирующего платформу. Эта конфигурация находится в файлах с суффиксами .it.
- Файлы добавочного приложения должны быть доступны, так чтобы их можно было включить. Так или иначе, они должны появиться в директории dist (distribution) создаваемой процессом сборки системы в корне дерева исходников. Это директория, где собираются результаты процесса make. Ручное копирование в нее требуемых файлов - не более чем временная мера, но она может сработать.
Если первые шаги выполнены корректно, скомпилированный результат даст модифицированную инсталляцию, но нужно сделать одно предупреждение. Дело в том, что процесс сборки имеет множество тонких мест, поэтому при внесении изменений могут возникать проблемы. Скорее всего, потребуется потратить немало времени на изучение системы, прежде чем все заработает гладко.
Собственно инсталляция системы затрагивает самую сердцевину подсистемы XPInstall. Это небольшая часть платформо-зависимого кода. Он не использует XPCOM или иных возможностей Mozilla; это независимая программа, самостоятельно поддерживающая TCP/IP, FTP и HTTP. Чтобы с ней разобраться, требуется поближе познакомиться с исходным кодом Mozilla. Это можно сделать тремя способами:
При инсталляции полной системы, код XPInstall - часть большого архива, содержащего всю платформу и ее приложения. В Microsoft Windows это самораспаковывающийся архив.
При установке так называемой заглушки, распространяемый файл - маленький (заглушка, stub). Он содержит только код XPInstall и некоторую конфигурационную информацию. Когда начинается инсталляция, этот код обращается в сеть и загружает выбранные пользователем компоненты платформы.
При установке приложения код XPInstall используется как специальный инсталлятор конкретного приложения, независимый от основной платформы. При таком использовании XPInstall ведет себя очень похоже на InstallShield или rpm. Это применяется не очень часто и в действительности являет собой разновидность полной инсталляции.
Код XPInstall сам имеет некоторые переносимые между платформами части. Он содержит интерпретатор JavaScript, XUL-подобный код GUI, несколько объектов и систему доступа к операционной системе. Вместе всего этого достаточно извлечь контент из одного или нескольких комплектов XPI и разместить их в файловой системе конкретной ОС. Эта часть XPInstall устанавливает и платформу, и ее приложения в стиле работы InstallShield.
Удаленная установка, подробно рассматриваемая в данной лекции, также использует инфраструктуру полной установки. Данная инфраструктура доступна не только в инсталляционном бинарнике, но и просто из запущенной платформы Mozilla. В объектной модели браузера есть некий хук, которому передается файл-комплект XPI, в результате чего начинается его установка.
И, наконец, сами приложения не могут вовсе игнорировать систему XPInstall. Это нестандартная (custom) установка. Технологии XUL и XPCOM обладают достаточными возможностями, чтобы установить приложения из chrome. Если вам действительно нужно создать собственную инсталляционную систему, ничто этому не воспрепятствует. Теги XUL, описываемые ниже в разделе "Технологии установки" позволяют легко создавать диалоговые окна, которые ведут себя подобно стандартному мастеру установки.