Как стать автором
Обновить

HowTo cook custom Firefox msi for enterprise deployment

Системное администрирование *
Из песочницы
Официальная позиция 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 (спец. канал, где нет обновлений)

Если минусы вас не устраивают — предлагается воспользоваться платной службой для сборки пакетов. Я же опишу как собрать пакет самому и избавиться от вышеперечисленных минусов.

  1. Берем эталонную виртуалку с клиентской ОС, на которой будем проводить сборку. Запускаем RegShot и делаем снимок #1 реестра.
  2. Ставим последний Firefox. И делаем снимок #2 реестра, закрываем отчеты, мы вернемся к ним позже.
  3. Ставим плагины в ФФ:
    Adblock Plus — блокировка рекламы
    IETab — позволяет открывать сайты во вкладках ФФ с использованием движка IE. Иногда необходимо для legacy интранет сайтов.
    GPO for Firefox — считывает настройки политики из реестра локальной машины, и применяет их к ФФ (здесь новая версия 0.9.3, добавил применение новых настроек)
    Я так же добавил еще файлы проверки орфографии en-US.dic
  4. Перезапускаем ФФ, настраиваем Adblock на канал обновлений. Я так же передвинул кнопку adblock наверх, убрал статусбар и текстовое меню. Закрываем ФФ.

  5. Эти настройки ФФ сохранил в профиль юзера —
    %appdata%\Mozilla\Firefox\Profiles\%rnd%.default\
    Теперь нам нужно сделать так, чтобы данные настройки стали настройками по-умолчанию для всех новых профилей. Для этого создадим папку профиля по-умолчанию
    C:\Program Files\Mozilla Firefox\defaults\profile
    и скопируем туда из профиля пользователя:
    — папку adblockplus, если ставили адблок
    — файл localstore.rdf, если убирали текстовое меню или двигали кнопки
  6. Создадим файл 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");

    Здесь мы пытаемся добиться того, чтобы при первом открытии не открывалось никаких других вкладок и приветствий, кроме стартовой страницы и не возникал вопрос про браузер по-умолчанию. Полное описание всех опций ФФ здесь.
  7. Теперь копируем плагины из профиля пользователя, папки extensions, в папку
    C:\Program Files\Mozilla Firefox\extensions
    Немного о плагинах xpi. Начиная с 4 версии они, для исполнения, не обязательно распаковываются в отдельную папку с уникальным идентификатором. А могут так и оставаться в оригинальном виде. Поэтому в папке плагинов вы видите смесь из папок и файлов xpi. При копировании в папку Mozilla Firefox\extensions плагин устанавливается глобальным. Раньше для этого приходилось делать
    firefox.exe -install-global-extension "%path-to-extension%\extname.xpi"
    Подробнее можно почитать — здесь.
  8. После копирования плагинов, необходимо проверить совместимость их по версии ФФ. Для этого в каждом надо открыть файл install.rdf и посмотреть параметр <em:maxVersion> У несовместимых я исправил на 99. Плагины xpi необходимо открыть как zip архив и так же проверить и исправить по необходимости файл install.rdf внутри.
  9. Теперь стираем профиль пользователя, всю папку
    %appdata%\Mozilla\Firefox\
    и запускаем ФФ. Нам необходимо добиться, чтобы он открывался без лишних вкладок и вопросов. Панели и меню были в выставленном нами порядке, и все добавленные плагины были подключены. Если открывается вкладка приветствия какого-либо плагина, найдите в файле prefs.js строку, по которой определяется, что этот плагин еще не запускался, и скопируйте ее в профиль по-умолчанию.
  10. Но после каждого стирания папки %appdata%\Mozilla\Firefox\ и запуска браузера появляется запрос на импорт закладок. Чтобы отключить это, создаем файл
    C:\Program Files\Mozilla Firefox\override.ini
    с содержимым:
    [XRE]
    EnableProfileMigrator=false

  11. После того как вас стал устраивать первый запуск браузера с пустым профилем, можно переходить к упаковке в msi. Запускаем wItem Installer и создаем новый проект. Заполняем информацию на закладке General Info и выбираем установку ярлыков для всех пользователей, а не текущего

  12. На закладку Files драг-н-дропаем все содержимое из нашей папки C:\Program Files\Mozilla Firefox\
  13. На закладке Shortcuts создаем New shortcut for a file from the installation для папок Desktop иStart Menu\Programs ведущие на firefox.exe
  14. На закладке 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
  15. На закладке Custom Actions добавляем такое задание для регистрации AccessibleMarshal.dll

  16. Делаем Build на закладке Create Setup. Не должно быть Error, даже версия ПО, указанная в неверном формате, приведет к неустановке msi.
  17. Берем adm\admx файлы, добавляем в консоль GPP/папку PolicyDefinitions, и настраиваем необходимые параметры браузера. Например single sign-on ntlm (вход через текущую доменную учетку для интранета) — network.automatic-ntlm-auth.trusted-uris
  18. Чтобы работало автообновление браузера под пользователем, необходимо дать права на папку
    %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 по умолчанию.
Теги:
Хабы:
Всего голосов 46: ↑41 и ↓5 +36
Просмотры 17K
Комментарии Комментарии 15