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 по умолчанию.
Поделиться публикацией

Похожие публикации

Комментарии 15
    +6
    > а так же запрещено любое распространение не оригинальных дистрибутивов
    Кто-то сказал «Open Source»? Я точно слышал, как кто-то сказал «Open Source».
      +3
      Запрещено распространять это под названием Firefox, как я понимаю.
        +2
        Можно распространять это под названием «Интернет» с кастомной иконкой, ПОХОЖЕЙ на фаерфокс. Никто ничего не заподозрит.
          +2
          Отказывается совсем firefox от корпоративного рынка. Почему же так :( Сделали бы версию LTS и захватывали рынок.
        –1
        Кстати, проблема распространённая. Народ уже высказался по этому поводу:
        1) «Если нельзя, но очень хочется, — то можно.»
        2) «На чужой роток не накинешь платок.»

        Что делать?
        0
        Буквально вчера споткнулся с распространением firefox/thunderbird через msi в домене. Моим негодованиям нет предела.
          +2
          Ничего свежего не нашли? Актуальных msi пакетов, как я понимаю нет. Нормально можно разворачивать только скриптами при загрузке/логоне
            0
            Уже более 3 использую FrontMotion сборки, пока единственный минус который я заметил, он иногда подвисает.
            0
            А msi собранный на win7 без проблем встанет на winXP? Вопрос актуален для thrunderbird.
              –1
              Для Windows 7 и Windows XP лучше делайте снапшоты в разных виртуалках. А еще лучше используйте Хром или Оперу.
                +1
                При грамотном подходе при сборке — встанет. Главное не указывать нигде пути в жестком виде:
                c:\Program Files (x86)\Mozilla Firefox\
                c:\Program Files\Mozilla Firefox\
                а указывать как переменные — %AppDir% или %ProgramFiles%\Mozilla Firefox
                Пофайлово там нет отличий для win7, winXP или для x64 версий. Ярлыки через msi сами ставятся в нужное место, в зависимости от ОС.
              • НЛО прилетело и опубликовало эту надпись здесь
                  0
                  а как же групповые политики?
                    0
                    Chrome
                  0
                  А чем тихая установка через скрипты начальной загрузки компьютеров в домене не устраивает? (-ms и пр.) [Большая политика] домена :))). Ведь не только FF не имеет msi инсталлятора. Ведь даже если бы был ff .msi, то это не гарантирует его установку на все компьютеры в домене, собственно как и chrome. Про IE так вообще молчу!

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                  Самое читаемое