Официальная позиция mozilla по поводу msi дистрибутивов выражена в статье. Рекомендуется делать обертки FirefoxSetup.exe в msi, а так же запрещено любое распространение не оригинальных дистрибутивов. Но при использовании оберток теряются все плюсы msi — автогенерация отката вносимых изменений, self-repair, сложнее управлять обновлением, удалением и патчами. В багтрекере мозиллы багу #231062 Provide Firefox MSI package уже 7 лет! При этом у Chrome поддержка msi и GPO встроенная. Немудрено, что и для ФФ появилась сторонняя сборка от компании FrontMotion Firefox Community Edition, которая имеет свои особенности:
[+] Применяет политики, установленные через FirefoxAdm, без помощи доп. расширений
[+] Имеет свои adm/admx расширения для консоли GPP
[+] Предустановлены плагины Flash, IETab
[-] Браузер перекомпилирован, и не факт, что при этом в него не добавили новых возможностей кроме GPO)
[-] Используется нестандартное название ярлыков (Frontmotion Firefox) на столе и в меню Пуск. (что еще можно обойти, через transforms для msi)
[-] Используется другая иконка (от nightly ветки) — черная, что критично для юзеров, которые ищут рыжую лису.
[-] Не применяются автоматические обновления, т.к. сборка своя. Канал обновлений выставлен на default (спец. канал, где нет обновлений)
Если минусы вас не устраивают — предлагается воспользоваться платной службой для сборки пакетов. Я же опишу как собрать пакет самому и избавиться от вышеперечисленных минусов.
PS
* Я немного изменил firefox.adm, добавил параметры для настройки открывания папок по ссылкам вида file:///o:\folder\file для сетевых дисков и интранета, как описано здесь, но для применения настроек в ФФ необходим плагин GPO v0.9.3
** Готовый firefox.msi можно скачать здесь (только в личных образовательных целях)
upd1: Обновил плагин GPO for Firefox. Не применял настройки, которых еще нет в prefs и он не может узнать их тип. Теперь применяет как char по умолчанию.
[+] Применяет политики, установленные через FirefoxAdm, без помощи доп. расширений
[+] Имеет свои adm/admx расширения для консоли GPP
[+] Предустановлены плагины Flash, IETab
[-] Браузер перекомпилирован, и не факт, что при этом в него не добавили новых возможностей кроме GPO)
[-] Используется нестандартное название ярлыков (Frontmotion Firefox) на столе и в меню Пуск. (что еще можно обойти, через transforms для msi)
[-] Используется другая иконка (от nightly ветки) — черная, что критично для юзеров, которые ищут рыжую лису.
[-] Не применяются автоматические обновления, т.к. сборка своя. Канал обновлений выставлен на default (спец. канал, где нет обновлений)
Если минусы вас не устраивают — предлагается воспользоваться платной службой для сборки пакетов. Я же опишу как собрать пакет самому и избавиться от вышеперечисленных минусов.
- Берем эталонную виртуалку с клиентской ОС, на которой будем проводить сборку. Запускаем RegShot и делаем снимок #1 реестра.
- Ставим последний Firefox. И делаем снимок #2 реестра, закрываем отчеты, мы вернемся к ним позже.
- Ставим плагины в ФФ:
Adblock Plus — блокировка рекламы
IETab — позволяет открывать сайты во вкладках ФФ с использованием движка IE. Иногда необходимо для legacy интранет сайтов.
GPO for Firefox — считывает настройки политики из реестра локальной машины, и применяет их к ФФ (здесь новая версия 0.9.3, добавил применение новых настроек)
Я так же добавил еще файлы проверки орфографии en-US.dic
- Перезапускаем ФФ, настраиваем Adblock на канал обновлений. Я так же передвинул кнопку adblock наверх, убрал статусбар и текстовое меню. Закрываем ФФ.
- Эти настройки ФФ сохранил в профиль юзера —
%appdata%\Mozilla\Firefox\Profiles\%rnd%.default\
Теперь нам нужно сделать так, чтобы данные настройки стали настройками по-умолчанию для всех новых профилей. Для этого создадим папку профиля по-умолчанию
C:\Program Files\Mozilla Firefox\defaults\profile
и скопируем туда из профиля пользователя:
— папку adblockplus, если ставили адблок
— файл localstore.rdf, если убирали текстовое меню или двигали кнопки
- Создадим файл prefs.js в профиле по-умолчанию, и вставим туда следующее:
user_pref("browser.shell.checkDefaultBrowser", false); user_pref("browser.startup.homepage", "ya.ru"); user_pref("browser.startup.homepage_override.mstone", "ignore"); user_pref("browser.startup.page", 3); user_pref("extensions.adblockplus.currentVersion", "1.3.9"); user_pref("extensions.ietab2.hasRun", true); user_pref("extensions.ietab2.ietab2PrefsMigrated", true); user_pref("extensions.ietab2.version", "3.5.9.1");
Здесь мы пытаемся добиться того, чтобы при первом открытии не открывалось никаких других вкладок и приветствий, кроме стартовой страницы и не возникал вопрос про браузер по-умолчанию. Полное описание всех опций ФФ здесь.
- Теперь копируем плагины из профиля пользователя, папки extensions, в папку
C:\Program Files\Mozilla Firefox\extensions
Немного о плагинах xpi. Начиная с 4 версии они, для исполнения, не обязательно распаковываются в отдельную папку с уникальным идентификатором. А могут так и оставаться в оригинальном виде. Поэтому в папке плагинов вы видите смесь из папок и файлов xpi. При копировании в папку Mozilla Firefox\extensions плагин устанавливается глобальным. Раньше для этого приходилось делать
firefox.exe -install-global-extension "%path-to-extension%\extname.xpi"
Подробнее можно почитать — здесь.
- После копирования плагинов, необходимо проверить совместимость их по версии ФФ. Для этого в каждом надо открыть файл install.rdf и посмотреть параметр <em:maxVersion> У несовместимых я исправил на 99. Плагины xpi необходимо открыть как zip архив и так же проверить и исправить по необходимости файл install.rdf внутри.
- Теперь стираем профиль пользователя, всю папку
%appdata%\Mozilla\Firefox\
и запускаем ФФ. Нам необходимо добиться, чтобы он открывался без лишних вкладок и вопросов. Панели и меню были в выставленном нами порядке, и все добавленные плагины были подключены. Если открывается вкладка приветствия какого-либо плагина, найдите в файле prefs.js строку, по которой определяется, что этот плагин еще не запускался, и скопируйте ее в профиль по-умолчанию.
- Но после каждого стирания папки %appdata%\Mozilla\Firefox\ и запуска браузера появляется запрос на импорт закладок. Чтобы отключить это, создаем файл
C:\Program Files\Mozilla Firefox\override.ini
с содержимым:
[XRE]
EnableProfileMigrator=false
- После того как вас стал устраивать первый запуск браузера с пустым профилем, можно переходить к упаковке в msi. Запускаем wItem Installer и создаем новый проект. Заполняем информацию на закладке General Info и выбираем установку ярлыков для всех пользователей, а не текущего
- На закладку Files драг-н-дропаем все содержимое из нашей папки C:\Program Files\Mozilla Firefox\
- На закладке Shortcuts создаем New shortcut for a file from the installation для папок Desktop иStart Menu\Programs ведущие на firefox.exe
- На закладке Registry делаем Import from a .reg file. Но для этого его надо подготовить. Возвращаемся к отчетам от RegShot, берем *Redo.reg, открываем блокнотом и чистим от лишних записей.
Если необходимо сделать ФФ браузером по умолчанию для всех юзеров компа, то заменяем все вхождения HKEY_CURRENT_USER на HKEY_LOCAL_MACHINE.
Так же заменяем все вхождения C:\\Program Files\\Mozilla Firefox на %AppDir%, чтобы итоговое имя папки было вписано после установки
Еще wItem воспринимает немного по другому файлы .reg, поэтому так же заменяем все \" на "
У меня получился такой файл — pastebin.com/fGjsH8n4
- На закладке Custom Actions добавляем такое задание для регистрации AccessibleMarshal.dll
- Делаем Build на закладке Create Setup. Не должно быть Error, даже версия ПО, указанная в неверном формате, приведет к неустановке msi.
- Берем adm\admx файлы, добавляем в консоль GPP/папку PolicyDefinitions, и настраиваем необходимые параметры браузера. Например single sign-on ntlm (вход через текущую доменную учетку для интранета) — network.automatic-ntlm-auth.trusted-uris
- Чтобы работало автообновление браузера под пользователем, необходимо дать права на папку
%ProgramFiles%\Mozilla Firefox
Это можно сделать, как через GPO (Конфигурация Windows\Параметры безопасности\Файловая система), так и с помощью Custom Actions, по окончанию установки. Например так:
cacls "%AppDir%" /t /e /p "builtin\пользователи":C cacls "%AppDir%" /t /e /p "builtin\users":C
PS
* Я немного изменил firefox.adm, добавил параметры для настройки открывания папок по ссылкам вида file:///o:\folder\file для сетевых дисков и интранета, как описано здесь, но для применения настроек в ФФ необходим плагин GPO v0.9.3
** Готовый firefox.msi можно скачать здесь (только в личных образовательных целях)
upd1: Обновил плагин GPO for Firefox. Не применял настройки, которых еще нет в prefs и он не может узнать их тип. Теперь применяет как char по умолчанию.