Пользователь
0,0
рейтинг
9 апреля 2012 в 13:01

Администрирование → Создание msi-пакетов и установка любого ПО средствами групповых политик Windows из песочницы tutorial

Доброго времени суток, Хабр! Хочу представить интересный, по моему мнению, способ создания msi-инсталляторов для любого программного обеспечения и, как следствие, развертывание его средствами GPO. Подчеркну, что описанный метод не подразумевает создание «слепков» системы, а использует нативные инсталляторы софта, при чем для создания msi применяются только бесплатные для коммерческого использования продукты.

Введение, пара ссылок и дисклеймер


Каждый нормальный инсталлятор ПО имеет возможность автоматической установки с определенными или заложенными по умолчанию параметрами. Суть моего метода проста и заключается в том, чтобы запаковать нативный инсталлятор в «контейнер» msi и запустить его с необходимыми параметрами командной строки. В сети куча информации по автоматической установке того или иного приложения, и я не буду заострять на этом внимание. Наша цель, повторюсь, — установка ПО средствами групповых политик. Кстати, некоторые из вас могут возразить, что установку можно производить через ZAW, но, к сожалению, данный метод применим только для установки с правами текущего пользователя и не может применяться для централизованной автоматической установки приложений.

Интересный цикл статей по установке ПО через ГП. Для новичков рекомендую прочитать все, чтобы потом не спрашивать, чем отличается тип установки «назначенный» от «публичный».

Необходимый софт. Exe to MSI Converter freeware и всем известная orca Первый нужен для того, чтобы создать msi из exe, а вторая — чтобы получившийся msi-ник смог установиться через групповые политики.

Метод не претендует на полную уникальность и в некоторых местах могут встречаться излишества, которых можно было бы избежать, но это связанно отсутствием желания и необходимости слишком глубоко вникать в параметры таблиц msi-пакетов. Первоначальной целью ставилось быстро найти бесплатный способ создания msi и после нескольких часов, проведенных в чтении зарубежных форумов и бесконечных перезагрузках виртуальной машины, метод был найден. Также, статья — это не обзор интерфейса программ, и скриншотов вы не увидите.

Создание и подготовка пакета


Пример установки будет произведен для Mozilla Firefox, т. к. это широко известный продукт, не имеющий msi-инсталлятора от разработчиков.
  1. Запускаем exe to msi и указываем в нем путь к exe-установщику firefox. По ранее найденной в сети информации становится понятно, что по-тихому установить огнелиса можно с параметрами -ms -ira. Их-то и указываем во втором поле exe to msi и жмем «Build MSI».
  2. Казалось бы все, msi-пакет готов. Действительно, запустив получившийся результат мы получим установленный в системе firefox и в статье можно было бы ставить точку. К сожалению, не все так просто. Текущий пакет установки не пригоден для развертывания через GPO и при загрузке компьютера вы будете получать совершенно ничего не объясняющие ошибки в логах «произошла неисправимая ошибка...» А все дело в том, что разработчики exe to msi тоже хотят есть и их бесплатный продукт генерирует msi «не по правилам».
  3. Ну что ж, берем орку и открываем в ней наш эмсиайник.
  4. Первым делом находим в левом списке таблицу Property и обращаем внимания на два поля — ProductCode и UpgradeCode. Эти два поля должны быть уникальны для каждого продукта, а наш exe to msi генерит всегда одинаковые. Ну что ж, не беда, жмем в верхнем меню View -> Summary Information, находим поле PackageCode и жмем New GUID. Получившийся результат копируем в буфер обмена и вставляем в ProductCode. Повторяем для UpgradeCode и наконец для самого PackageCode. Тут же в Summary Information правим поле Title на Mozilla Firefox, остальное по желанию. Это, по сути, ни на что не влияет.
  5. Опять же в таблице Property меням ProductName на Mozilla Firefox (я до кучи меняю еще ARPCONTACT и Manufacturer). Можно так же поставить правильное значение для ProductVersion.
  6. Вроде бы GUID и прочие «IDы» поменяли, но как показывает практика, этого недостаточно. Жмите в orca Tools –> Validate, снимите птицу Show INFO Messages и нажимайте Go.
  7. Как видите, вылезла куча ошибок на наличие/отсутствие некоторых таблиц и значений. Я не стал заморачиваться и просто взял первый попавшийся (7zip x64 9.20) небольшой msi и скопировал оттуда 4 недостающие таблицы (через Export-Import, естественно): _Validation, AdminExecuteSequence, AdminUISequence и AdvtExecuteSequence. На самом деле, я уверен, что можно создать «правильный» msi-инсталлятор, без лишнего мусора, но не забывайте, наша цель всего лишь запустить родной setup приложения в тихую.
  8. После добавления таблиц проходим снова Tools –> Validate (к слову, первый раз проверку можно вообще не делать и сразу импортировать таблицы). Если вы тоже взяли за основу msi от 7zip, то результатом будет шесть эрроров, которые необходимо устранить. Жмите Close, удаляйте лишние поля, отмеченные красным.
  9. В конце можно еще раз проверить валидацию и убедиться что остались лишь ничем не мешающие варнинги. Сохраняем msi.
  10. Вот в принципе и все, осталось добавить msi в ГП и назначить необходимые свойства.

Нюансы


  1. При установке описанным выше методом у вас появятся как бы две копии софта. Первая — собственно нужное приложение, а вторая — исходный msi-ник, ведь мы же его как бы поставили. В принципе, это ни на что не влияет, кроме как на отображение в «Установка и удаление программ», и то, только в Windows XP (если вы ничего не меняли, кроме указанного мной). Минусом может быть появление лишних программ при автоматической инвентаризации софта, если вы ее используете.
  2. Автоматически удалить приложение теми же средствами развертывания не получится. Точнее получится, но удалится только и так не нужный msi-контейнер. Ну можно повозиться со свойствами msi при его создании, чтобы оно захватывало с собой установленное ранее приложение, так же втихую. Я такой задачи не ставил.
  3. При установке обновлений ПО нужно указывать в свойствах ГП приложения, чтобы оно заменяло предыдущее, т.е обязательно предварительно удаляло старое. Это гарантирует, что у вас не будут плодиться те самые никому не сдавшиеся левые дубли приложений в «установке и удалении программ».
  4. Чтобы установить приложение, имеющее дистрибутив из нескольких файлов, вам придется сначала упаковать его в exe, который при запуске сам распакуется и даст команду для тихой установки. Рекомендую создавать sfx-архивы средствами того же 7-zip.
  5. Ничего не мешает ставить ПО через скрипты автозагрузки. Более того, такой метод более гибкий, и я давно его использую через свои скрипты. Вот только использование родных средств ГП получается намного быстрее, т. к. простое создание msi из exe занимает пару минут.
  6. Windows 7 почему-то не пишет «Установка управляемого приложения...», а просто говорит «пожалуйста, подождите». При первом развертывании всей кучи софта разом или при установке тяжелого приложения это может сподвигнуть юзера на звонок админу или нажатие кнопки резет.

На этом вроде бы все, надеюсь было интересно, делитесь опытом.
Выдрин Михаил @yosemity
карма
37,7
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Администрирование

Комментарии (26)

  • НЛО прилетело и опубликовало эту надпись здесь
    • +1
      В некоторых инсталляторах, например JRE, внутри действительно используется msi, само собой в таком случае его проще распаковать. А вот для того же Firefox msi не предусмотрено и указанный выше способ как раз позволяет использовать нативный установщик.
      • –2
        Я с Вами не согласен, т.к. лично разворачивал у себя на работе FireFox с помощью пакета msi, который находился внутри exeшника и групповой политики.
        • +1
          Значит это была какая-то посторонняя сборка firefox. Сейчас специально еще раз проверил, может что изменилось. Родной setup с сайта mozilla-russia.org/ — это 7zip sfx архив, внутри которого инсталлятор от Nullsoft.
          • –2
            Может дело в версии, я распространял довольно древнюю версию, 3.4 — что то в этом роде :). Возможно последние версии огнелиса уже такой вольности не позволят нам.
            • 0
              Версии 3.4 не было, после 3.0 вышла 3.5. Но и с выхода 3.5 прошло уже почти 5 лет.
              • 0
                Что-то я ответил в камент 2 летней давности (=
                • 0
                  Давайте я вам тоже отвечу и подниму планку на год с лишним.
                  Раз уж вы сюда написали, то вам и другим читателям топика это может пригодиться
                  habrahabr.ru/post/150518
  • 0
    Спасибо. В избранное однозначно.
  • +1
  • 0
    Необходимый софт. Exe to MSI Converter freeware и всем известная orca

    Да, программка конвертера полезная, но ужасно кривая. К сожалению, толковой бесплатной альтернативы не знаю.
    А вот вместо Orca попробуйте InstEd, намного удобнее, взять хотя бы генерацию GUID прямо в полях ProductCode и UpgradeCode.

    Автоматически удалить приложение теми же средствами развертывания не получится

    Думаю, всё-таки желательно предусмотреть функционал удаления приложения, используя вызов Custom Action по аналогии с Custom Action для установки приложения.

    При установке описанным выше методом у вас появятся как бы две копии софта.

    Уменьшить хаос в Add/Remove Programs можно с помощью добавления в таблицу Property записи ARPSYSTEMCOMPONENT=1, это скроет запись об MSI-установщике.
  • 0
    regshot -> wix -> msi

    Хотя такой метод возможно дольше, да. Зато полный контроль над создаваемым msi.
  • 0
    Оххх, как же я не люблю эту связку иголка-яйцо-...-заяц.
    • 0
      Само собой, лучшим вариантом была бы возможность установки из родного msi, но не все авторы это позволяют. А использование снимков реестра и системы, по моему еще более сложный и кривой вариант. Ключевая особенность — инсталляторы от разработчиков и бесплатность.
  • 0
    Имхо, не айс.
    Когда админил предпочитал в gpo на до login/logout пихать vbscript монтирующий удалённую smb-шару и пускающий в silent установку нужного софта — и проще и быстрее.
    • 0
      Я написал в статье, что так же использую скрипты startup/shutdown, скрипты довольно хитрые, с логами и емейл-алертами. Сначала сидел на JS, потом перехал на AutoIT, но путем эволюции все же стало ясно, что развернуть через ГПО проще быстрее. Если нужно что-то более интеллектуальное, то либо самому писать, либо использовать сторонние средства развертывания. Сейчас скрипт на AutoIT у емня дорос до уровня некоего приложения, работает как служба, умеет ставить при запуске, выключении, шедулеру; забирает новые «пакеты» для установки с хттп/фтп, умеет отслеживать зависимости и еще много чего. Так вот, развернуть через msi намного быстрее, чем заморачиваться со скриптами. А если просто ставить в тихую при загрузке, то как минимум, что отследит стоит ли уже эта версия софта или нет?
  • +1
    Если есть лицензионный SCCM 2007, то можно не мучаться с GPO и получить бесплатно AdminStudio Configuration Manager Edition
    Подробнее здесь:
    technet.microsoft.com/en-us/systemcenter/cm/bb932316.aspx
    Но это уже как говориться другой уровень, господа.
  • 0
    Используем Advanced Installer, который позволяет паковать msi, а так же SCCM 2007, который умеет всего и маленькую тележку сверху. И недавно аж обновился до 2012 и не поддерживает апгрейд с 2007. За что конечно Майкрософту гореть в аду.

  • 0
    а как вам это?:
    www.frontmotion.com/Firefox/
    • 0
      И ведь не зря я взял за основу FF, прекрасно зная заранее, что есть сторонняя сборка в msi. троллфейс :)
      > Mozilla Firefox, т. к. это широко известный продукт, не имеющий msi-инсталлятора от разработчиков
      Мало того, для FF даже adm/admx есть.
  • +1
    Хоть тема и старая, но не устаревающая. Поделюсь своей находкой (на хабре где-то в комментариях проскакивала) — appdeploy-repackager. Распространяют бесплатно, но нужна регистрация. Получающиеся MSI прекрасно ставятся из GPO, плюс можно вносить свои изменения. Работает по принципу слепка системы и последующей генерации MSI.
    • 0
      Слепок системы, имхо, не лучший вариант, но получаются полноценные msi-пакеты?
      • 0
        Да. Делал spark установщик плюс керберос конфиг. Сейчас буду с miranda пробовать
        • 0
          Следует учитывать, что разработчики Miranda-NG не поддерживают и не рекомендуют установку обновленный версий из дистрибутива "поверх". Для этого используется встроенные средства. Так что скорее всего установка в роли внутреннего мессенджера будет "раз и навсегда", что не очень хорошо, конечно. Но я готов с этим мириться во внутренней среде.
          • 0
            Хм, если я не ошибаюсь, то можно удалять приложение, при удалении его из назначенных. Так что можно в два этапа это сделать, правда неудобно. Еще не смотрел возможности WSUSа можно ли с его помощью удалить старое и поставить обновленное приложение.
            • 0
              Дело не в возможностях ВСУСа или каком-то еще способе развертывания. Дело именно в особенностях миранды, она хранит в dat-файле профиля пользователя кучу настроек и других данных которые могут быть несовместимы с новой версией. А каждый раз зачищать еще и профиль — приведет бунтам среди юзеров из-за потерянной историю.

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